From 18ffe1a49d2a2d60e0d9d64e543d033eb988f8bb Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandre.savard@savoirfairelinux.net> Date: Thu, 3 Sep 2009 18:27:05 -0400 Subject: [PATCH 001/188] [#2006] Fix rtp session deletion --- sflphone-common/src/sip/sipvoiplink.cpp | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp index afaa83d7fb..5cf7132756 100644 --- a/sflphone-common/src/sip/sipvoiplink.cpp +++ b/sflphone-common/src/sip/sipvoiplink.cpp @@ -730,6 +730,12 @@ SIPVoIPLink::hangup (const CallID& id) return false; } + // Release RTP thread + if (Manager::instance().isCurrentCall (id)) { + _debug ("* SIP Info: Stopping AudioRTP for hangup\n"); + _audiortp->stop(); + } + // User hangup current call. Notify peer status = pjsip_inv_end_session (call->getInvSession(), 404, NULL, &tdata); @@ -750,13 +756,6 @@ SIPVoIPLink::hangup (const CallID& id) call->getInvSession()->mod_data[getModId() ] = NULL; - - // Release RTP thread - if (Manager::instance().isCurrentCall (id)) { - _debug ("* SIP Info: Stopping AudioRTP for hangup\n"); - _audiortp->stop(); - } - terminateOneCall (id); removeCall (id); @@ -778,6 +777,12 @@ SIPVoIPLink::peerHungup (const CallID& id) return false; } + // Release RTP thread + if (Manager::instance().isCurrentCall (id)) { + _debug ("* SIP Info: Stopping AudioRTP for hangup\n"); + _audiortp->stop(); + } + // User hangup current call. Notify peer status = pjsip_inv_end_session (call->getInvSession(), 404, NULL, &tdata); @@ -794,12 +799,6 @@ SIPVoIPLink::peerHungup (const CallID& id) call->getInvSession()->mod_data[getModId() ] = NULL; - // Release RTP thread - if (Manager::instance().isCurrentCall (id)) { - _debug ("* SIP Info: Stopping AudioRTP for hangup\n"); - _audiortp->stop(); - } - terminateOneCall (id); removeCall (id); -- GitLab From 807ae2aff04fa0674cd402d9df3c8ee27441d690 Mon Sep 17 00:00:00 2001 From: Julien Bonjean <julien@bonjean.info> Date: Wed, 11 Nov 2009 19:17:08 -0500 Subject: [PATCH 002/188] [#1671] NetworkManager support: first shot --- sflphone-common/src/dbus/Makefile.am | 5 +- sflphone-common/src/dbus/dbusmanagerimpl.cpp | 14 ++-- sflphone-common/src/dbus/dbusmanagerimpl.h | 2 + sflphone-common/src/dbus/networkmanager.cpp | 21 ++++++ sflphone-common/src/dbus/networkmanager.h | 31 +++++++++ .../src/dbus/networkmanager_proxy.h | 65 +++++++++++++++++++ .../dbus/org.freedesktop.NetworkManager.xml | 13 ++++ 7 files changed, 145 insertions(+), 6 deletions(-) create mode 100644 sflphone-common/src/dbus/networkmanager.cpp create mode 100644 sflphone-common/src/dbus/networkmanager.h create mode 100644 sflphone-common/src/dbus/networkmanager_proxy.h create mode 100644 sflphone-common/src/dbus/org.freedesktop.NetworkManager.xml diff --git a/sflphone-common/src/dbus/Makefile.am b/sflphone-common/src/dbus/Makefile.am index 5ca2e42eeb..7ee673bcb3 100644 --- a/sflphone-common/src/dbus/Makefile.am +++ b/sflphone-common/src/dbus/Makefile.am @@ -17,7 +17,8 @@ libdbus_la_SOURCES = \ callmanager.cpp \ configurationmanager.cpp \ instance.cpp \ - dbusmanagerimpl.cpp + dbusmanagerimpl.cpp \ + networkmanager.cpp libdbus_la_CXXFLAGS = -DPREFIX=\"$(prefix)\" -DPROGSHAREDIR=\"${datadir}/sflphone\" @@ -29,6 +30,8 @@ noinst_HEADERS = \ instance.h \ dbusmanager.h \ dbusmanagerimpl.h \ + networkmanager_proxy.h \ + networkmanager.h \ $(BUILT_SOURCES) # Dbus service file diff --git a/sflphone-common/src/dbus/dbusmanagerimpl.cpp b/sflphone-common/src/dbus/dbusmanagerimpl.cpp index e87c1001f0..fbe35e56f9 100644 --- a/sflphone-common/src/dbus/dbusmanagerimpl.cpp +++ b/sflphone-common/src/dbus/dbusmanagerimpl.cpp @@ -23,6 +23,7 @@ #include "callmanager.h" #include "configurationmanager.h" +#include "networkmanager.h" const char* DBusManagerImpl::SERVER_NAME = "org.sflphone.SFLphone"; @@ -32,12 +33,15 @@ DBusManagerImpl::exec() DBus::default_dispatcher = &_dispatcher; - DBus::Connection conn = DBus::Connection::SessionBus(); - conn.request_name (SERVER_NAME); + DBus::Connection sessionConnection = DBus::Connection::SessionBus(); + DBus::Connection systemConnection = DBus::Connection::SystemBus(); + sessionConnection.request_name (SERVER_NAME); - _callManager = new CallManager (conn); - _configurationManager = new ConfigurationManager (conn); - _instanceManager = new Instance (conn); + _callManager = new CallManager (sessionConnection); + _configurationManager = new ConfigurationManager (sessionConnection); + _instanceManager = new Instance (sessionConnection); + + _networkManager = new NetworkManager(systemConnection, "/org/freedesktop/NetworkManager", ""); // Register accounts Manager::instance().initRegisterAccounts(); //getEvents(); diff --git a/sflphone-common/src/dbus/dbusmanagerimpl.h b/sflphone-common/src/dbus/dbusmanagerimpl.h index 157b8118ce..c68d440fa3 100644 --- a/sflphone-common/src/dbus/dbusmanagerimpl.h +++ b/sflphone-common/src/dbus/dbusmanagerimpl.h @@ -24,6 +24,7 @@ class ConfigurationManager; class CallManager; +class NetworkManager; class DBusManagerImpl { public: @@ -38,6 +39,7 @@ class DBusManagerImpl { ConfigurationManager* _configurationManager; Instance* _instanceManager; DBus::BusDispatcher _dispatcher; + NetworkManager* _networkManager; }; #endif diff --git a/sflphone-common/src/dbus/networkmanager.cpp b/sflphone-common/src/dbus/networkmanager.cpp new file mode 100644 index 0000000000..0b055c3614 --- /dev/null +++ b/sflphone-common/src/dbus/networkmanager.cpp @@ -0,0 +1,21 @@ +#include "networkmanager.h" +#include <iostream> + +using namespace std; + +const string NetworkManager::statesString[5] = {"unknown", "asleep", "connecting", "connected", "disconnected"}; + +string NetworkManager::stateAsString(const uint32_t& state) +{ + return statesString[state]; +} + +void NetworkManager::StateChanged(const uint32_t& state) +{ + std::cout << "state changed: " << stateAsString(state) << std::endl; +} + +NetworkManager::NetworkManager(DBus::Connection& connection, const DBus::Path& path, const char* destination): DBus::ObjectProxy (connection, path, destination) +{ +} + diff --git a/sflphone-common/src/dbus/networkmanager.h b/sflphone-common/src/dbus/networkmanager.h new file mode 100644 index 0000000000..258be17c8a --- /dev/null +++ b/sflphone-common/src/dbus/networkmanager.h @@ -0,0 +1,31 @@ +#ifndef NETWORKMANAGER_H +#define NETWORKMANAGER_H + +#include "networkmanager_proxy.h" + +using namespace std; + +class NetworkManager +: public org::freedesktop::NetworkManager_proxy, + public DBus::IntrospectableProxy, + public DBus::ObjectProxy +{ +public: + + NetworkManager(DBus::Connection&, const DBus::Path&, const char*); + void StateChanged(const uint32_t& state); + string stateAsString(const uint32_t& state); + + typedef enum NMState + { + NM_STATE_UNKNOWN = 0, + NM_STATE_ASLEEP, + NM_STATE_CONNECTING, + NM_STATE_CONNECTED, + NM_STATE_DISCONNECTED + } NMState; + + static const string statesString[5]; +}; +#endif + diff --git a/sflphone-common/src/dbus/networkmanager_proxy.h b/sflphone-common/src/dbus/networkmanager_proxy.h new file mode 100644 index 0000000000..d34f456d23 --- /dev/null +++ b/sflphone-common/src/dbus/networkmanager_proxy.h @@ -0,0 +1,65 @@ +#ifndef __dbusxx__networkmanager_proxy_h__PROXY_MARSHAL_H +#define __dbusxx__networkmanager_proxy_h__PROXY_MARSHAL_H + +#include <dbus-c++/dbus.h> +#include <cassert> +#include <iostream> + +namespace org { +namespace freedesktop { + +class NetworkManager_proxy +: public ::DBus::InterfaceProxy +{ +public: + + NetworkManager_proxy() + : ::DBus::InterfaceProxy("org.freedesktop.NetworkManager") + { + connect_signal(NetworkManager_proxy, StateChanged, _StateChanged_stub); + } + +public: + + /* properties exported by this interface */ +public: + + /* methods exported by this interface, + * this functions will invoke the corresponding methods on the remote objects + */ +/* + std::vector< ::DBus::Path > GetDevices() + { + ::DBus::CallMessage call; + call.member("GetDevices"); + ::DBus::Message ret = invoke_method (call); + ::DBus::MessageIter ri = ret.reader(); + + std::vector< ::DBus::Path > argout; + ri >> argout; + return argout; + } +*/ + +public: + + /* signal handlers for this interface + */ + virtual void StateChanged(const uint32_t& argin0) = 0; + +private: + + /* unmarshalers (to unpack the DBus message before calling the actual signal handler) + */ + void _StateChanged_stub(const ::DBus::SignalMessage &sig) + { + ::DBus::MessageIter ri = sig.reader(); + + uint32_t arg0; + ri >> arg0; + StateChanged(arg0); + } +}; + +} } +#endif //__dbusxx__networkmanager_proxy_h__PROXY_MARSHAL_H diff --git a/sflphone-common/src/dbus/org.freedesktop.NetworkManager.xml b/sflphone-common/src/dbus/org.freedesktop.NetworkManager.xml new file mode 100644 index 0000000000..a26cc046ab --- /dev/null +++ b/sflphone-common/src/dbus/org.freedesktop.NetworkManager.xml @@ -0,0 +1,13 @@ +<!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN" +"http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd"> +<node> + <interface name="org.freedesktop.NetworkManager"> + <method name="GetDevices"> + <arg name="devices" type="ao" direction="out"/> + </method> + <signal name="StateChanged"> + <arg type="u"/> + </signal> + </interface> +</node> + -- GitLab From e6cb60de2205222a1b80177dea7241e2caba1677 Mon Sep 17 00:00:00 2001 From: Julien Bonjean <julien@bonjean.info> Date: Thu, 12 Nov 2009 10:27:38 -0500 Subject: [PATCH 003/188] [#1671] Updated files --- sflphone-common/src/dbus/networkmanager.cpp | 17 ++++++++++++----- sflphone-common/src/dbus/networkmanager.h | 4 ++-- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/sflphone-common/src/dbus/networkmanager.cpp b/sflphone-common/src/dbus/networkmanager.cpp index 0b055c3614..6a2a59e656 100644 --- a/sflphone-common/src/dbus/networkmanager.cpp +++ b/sflphone-common/src/dbus/networkmanager.cpp @@ -1,20 +1,27 @@ +#include <global.h> #include "networkmanager.h" #include <iostream> +#include <instance.h> +#include "../manager.h" +#include "sip/sipvoiplink.h" -using namespace std; +//using namespace std; -const string NetworkManager::statesString[5] = {"unknown", "asleep", "connecting", "connected", "disconnected"}; +const std::string NetworkManager::statesString[5] = {"unknown", "asleep", "connecting", "connected", "disconnected"}; -string NetworkManager::stateAsString(const uint32_t& state) +std::string NetworkManager::stateAsString(const uint32_t& state) { return statesString[state]; } void NetworkManager::StateChanged(const uint32_t& state) { - std::cout << "state changed: " << stateAsString(state) << std::endl; + _debug("Network state changed: %s", stateAsString(state)); + + if(state == NM_STATE_CONNECTED) + Manager::instance().restartPJSIP(); } - + NetworkManager::NetworkManager(DBus::Connection& connection, const DBus::Path& path, const char* destination): DBus::ObjectProxy (connection, path, destination) { } diff --git a/sflphone-common/src/dbus/networkmanager.h b/sflphone-common/src/dbus/networkmanager.h index 258be17c8a..073bfafebc 100644 --- a/sflphone-common/src/dbus/networkmanager.h +++ b/sflphone-common/src/dbus/networkmanager.h @@ -16,14 +16,14 @@ public: void StateChanged(const uint32_t& state); string stateAsString(const uint32_t& state); - typedef enum NMState + enum NMState { NM_STATE_UNKNOWN = 0, NM_STATE_ASLEEP, NM_STATE_CONNECTING, NM_STATE_CONNECTED, NM_STATE_DISCONNECTED - } NMState; + }; static const string statesString[5]; }; -- GitLab From f3c80c4bdf9c7af8033b98ffbe1fa9869a53a491 Mon Sep 17 00:00:00 2001 From: Julien Bonjean <julien@bonjean.info> Date: Fri, 13 Nov 2009 09:34:34 -0500 Subject: [PATCH 004/188] [#1671] Removed \n --- sflphone-common/src/account.cpp | 2 +- sflphone-common/src/audio/alsa/alsalayer.cpp | 142 +++--- sflphone-common/src/audio/audiolayer.cpp | 4 +- sflphone-common/src/audio/audiortp.cpp | 88 ++-- .../src/audio/audiortp/AudioRtpFactory.cpp | 18 +- .../src/audio/audiortp/AudioZrtpSession.cpp | 12 +- .../audio/audiortp/ZrtpSessionCallback.cpp | 32 +- sflphone-common/src/audio/codecs/alaw.cpp | 4 +- .../src/audio/codecs/celtcodec.cpp | 4 +- .../src/audio/codecs/codecDescriptor.cpp | 16 +- sflphone-common/src/audio/codecs/gsmcodec.cpp | 10 +- sflphone-common/src/audio/mainbuffer.cpp | 78 ++-- .../src/audio/pulseaudio/audiostream.cpp | 22 +- .../src/audio/pulseaudio/pulselayer.cpp | 122 ++--- sflphone-common/src/audio/ringbuffer.cpp | 52 +-- .../src/audio/samplerateconverter.cpp | 20 +- sflphone-common/src/audio/sound/audiofile.cpp | 4 +- sflphone-common/src/conference.cpp | 8 +- sflphone-common/src/config/config.cpp | 9 +- sflphone-common/src/dbus/callmanager.cpp | 72 +-- .../src/dbus/configurationmanager.cpp | 90 ++-- sflphone-common/src/dbus/dbusmanagerimpl.cpp | 2 +- sflphone-common/src/dbus/instance.cpp | 4 +- .../src/history/historymanager.cpp | 4 +- sflphone-common/src/iax/iaxcall.cpp | 28 +- sflphone-common/src/iax/iaxvoiplink.cpp | 78 ++-- sflphone-common/src/main.cpp | 18 +- sflphone-common/src/managerimpl.cpp | 429 ++++++++++-------- sflphone-common/src/managerimpl.h | 8 + .../src/plug-in/audiorecorder/audiodsp.cpp | 8 +- .../src/plug-in/audiorecorder/audiorecord.cpp | 88 ++-- .../src/plug-in/librarymanager.cpp | 10 +- sflphone-common/src/plug-in/pluginmanager.cpp | 12 +- sflphone-common/src/sip/sdp.cpp | 52 +-- sflphone-common/src/sip/sipaccount.cpp | 14 +- sflphone-common/src/sip/sipcall.cpp | 4 +- sflphone-common/src/sip/sipvoiplink.cpp | 376 +++++++-------- sflphone-common/src/util/Pattern.cpp | 10 +- sflphone-common/test/audiolayerTest.cpp | 12 +- sflphone-common/test/audiorecorderTest.cpp | 2 +- sflphone-common/test/mainbufferTest.cpp | 34 +- sflphone-common/test/rtpTest.cpp | 44 +- 42 files changed, 1046 insertions(+), 1000 deletions(-) diff --git a/sflphone-common/src/account.cpp b/sflphone-common/src/account.cpp index f5b542f57f..e916ac6875 100644 --- a/sflphone-common/src/account.cpp +++ b/sflphone-common/src/account.cpp @@ -56,7 +56,7 @@ void Account::setRegistrationState (RegistrationState state) { if (state != _registrationState) { - _debug ("Account::setRegistrationState\n"); + _debug ("Account::setRegistrationState"); _registrationState = state; // Notify the client diff --git a/sflphone-common/src/audio/alsa/alsalayer.cpp b/sflphone-common/src/audio/alsa/alsalayer.cpp index bdbc27ed2d..920ab666b3 100644 --- a/sflphone-common/src/audio/alsa/alsalayer.cpp +++ b/sflphone-common/src/audio/alsa/alsalayer.cpp @@ -41,7 +41,7 @@ AlsaLayer::AlsaLayer (ManagerImpl* manager) , _audioThread (NULL) { - _debug (" Constructor of AlsaLayer called\n"); + _debug (" Constructor of AlsaLayer called"); /* Instanciate the audio thread */ // _audioThread = new AudioThread (this); // _audioThread = NULL; @@ -53,7 +53,7 @@ AlsaLayer::AlsaLayer (ManagerImpl* manager) // Destructor AlsaLayer::~AlsaLayer (void) { - _debug ("Destructor of AlsaLayer called\n"); + _debug ("Destructor of AlsaLayer called"); closeLayer(); if (_converter) { @@ -70,17 +70,17 @@ AlsaLayer::~AlsaLayer (void) bool AlsaLayer::closeLayer() { - _debugAlsa ("Close ALSA streams\n"); + _debugAlsa ("Close ALSA streams"); try { /* Stop the audio thread first */ if (_audioThread) { - _debug ("Stop Audio Thread\n"); + _debug ("Stop Audio Thread"); delete _audioThread; _audioThread=NULL; } } catch (...) { - _debugException ("! ARTP Exception: when stopping audiortp\n"); + _debugException ("! ARTP Exception: when stopping audiortp"); throw; } @@ -119,13 +119,13 @@ AlsaLayer::openDevice (int indexIn, int indexOut, int sampleRate, int frameSize, _audioPlugin = std::string (plugin); - _debugAlsa (" Setting AlsaLayer: device in=%2d, out=%2d\n", _indexIn, _indexOut); + _debugAlsa (" Setting AlsaLayer: device in=%2d, out=%2d", _indexIn, _indexOut); - _debugAlsa (" : alsa plugin=%s\n", _audioPlugin.c_str()); + _debugAlsa (" : alsa plugin=%s", _audioPlugin.c_str()); - _debugAlsa (" : nb channel in=%2d, out=%2d\n", _inChannel, _outChannel); + _debugAlsa (" : nb channel in=%2d, out=%2d", _inChannel, _outChannel); - _debugAlsa (" : sample rate=%5d, format=%s\n", _audioSampleRate, SFLDataFormatString); + _debugAlsa (" : sample rate=%5d, format=%s", _audioSampleRate, SFLDataFormatString); _audioThread = NULL; @@ -144,7 +144,7 @@ AlsaLayer::openDevice (int indexIn, int indexOut, int sampleRate, int frameSize, void AlsaLayer::startStream (void) { - _debug ("AlsaLayer:: startStream\n"); + _debug ("AlsaLayer:: startStream"); std::string pcmp = buildDeviceTopo (_audioPlugin, _indexOut, 0); std::string pcmc = buildDeviceTopo (_audioPlugin, _indexIn, 0); @@ -171,11 +171,11 @@ AlsaLayer::startStream (void) if (_audioThread == NULL) { try { - _debug ("Start Audio Thread\n"); + _debug ("Start Audio Thread"); _audioThread = new AudioThread (this); _audioThread->start(); } catch (...) { - _debugException ("Fail to start audio thread\n"); + _debugException ("Fail to start audio thread"); } } @@ -184,17 +184,17 @@ AlsaLayer::startStream (void) void AlsaLayer::stopStream (void) { - _debug ("AlsaLayer:: stopStream\n"); + _debug ("AlsaLayer:: stopStream"); try { /* Stop the audio thread first */ if (_audioThread) { - _debug ("Stop Audio Thread\n"); + _debug ("Stop Audio Thread"); delete _audioThread; _audioThread=NULL; } } catch (...) { - _debugException ("! ARTP Exception: when stopping audiortp\n"); + _debugException ("! ARTP Exception: when stopping audiortp"); throw; } @@ -228,10 +228,10 @@ void AlsaLayer::stopCaptureStream (void) int err; if (_CaptureHandle) { - _debug ("AlsaLayer:: stop Alsa capture\n"); + _debug ("AlsaLayer:: stop Alsa capture"); if ( (err = snd_pcm_drop (_CaptureHandle)) < 0) - _debug ("AlsaLayer:: Error stopping ALSA capture: %s\n", snd_strerror (err)); + _debug ("AlsaLayer:: Error stopping ALSA capture: %s", snd_strerror (err)); else stop_capture (); @@ -246,10 +246,10 @@ void AlsaLayer::closeCaptureStream (void) stopCaptureStream (); if (is_capture_open()) { - _debug ("AlsaLayer:: close ALSA capture\n"); + _debug ("AlsaLayer:: close ALSA capture"); if ( (err = snd_pcm_close (_CaptureHandle)) < 0) - _debug ("Error closing ALSA capture: %s\n", snd_strerror (err)); + _debug ("Error closing ALSA capture: %s", snd_strerror (err)); else close_capture (); } @@ -260,10 +260,10 @@ void AlsaLayer::startCaptureStream (void) int err; if (_CaptureHandle && !is_capture_running()) { - _debug ("AlsaLayer:: start ALSA capture\n"); + _debug ("AlsaLayer:: start ALSA capture"); if ( (err = snd_pcm_start (_CaptureHandle)) < 0) - _debug ("Error starting ALSA capture: %s\n", snd_strerror (err)); + _debug ("Error starting ALSA capture: %s", snd_strerror (err)); else start_capture(); } @@ -274,10 +274,10 @@ void AlsaLayer::prepareCaptureStream (void) int err; if (is_capture_open() && !is_capture_prepared()) { - _debug ("AlsaLayer:: prepare ALSA capture\n"); + _debug ("AlsaLayer:: prepare ALSA capture"); if ( (err = snd_pcm_prepare (_CaptureHandle)) < 0) - _debug ("Error preparing ALSA capture: %s\n", snd_strerror (err)); + _debug ("Error preparing ALSA capture: %s", snd_strerror (err)); else prepare_capture (); } @@ -288,10 +288,10 @@ void AlsaLayer::stopPlaybackStream (void) int err; if (_PlaybackHandle && is_playback_running()) { - _debug ("AlsaLayer:: stop ALSA playback\n"); + _debug ("AlsaLayer:: stop ALSA playback"); if ( (err = snd_pcm_drop (_PlaybackHandle)) < 0) - _debug ("Error stopping ALSA playback: %s\n", snd_strerror (err)); + _debug ("Error stopping ALSA playback: %s", snd_strerror (err)); else stop_playback (); } @@ -306,10 +306,10 @@ void AlsaLayer::closePlaybackStream (void) stopPlaybackStream (); if (is_playback_open()) { - _debug ("AlsaLayer:: close ALSA playback\n"); + _debug ("AlsaLayer:: close ALSA playback"); if ( (err = snd_pcm_close (_PlaybackHandle)) < 0) - _debug ("Error closing ALSA playback: %s\n", snd_strerror (err)); + _debug ("Error closing ALSA playback: %s", snd_strerror (err)); else close_playback (); } @@ -320,10 +320,10 @@ void AlsaLayer::startPlaybackStream (void) int err; if (_PlaybackHandle && !is_playback_running()) { - _debug ("AlsaLayer:: start ALSA playback\n"); + _debug ("AlsaLayer:: start ALSA playback"); if ( (err = snd_pcm_start (_PlaybackHandle)) < 0) - _debug ("Error starting ALSA playback: %s\n", snd_strerror (err)); + _debug ("Error starting ALSA playback: %s", snd_strerror (err)); else start_playback(); } @@ -334,10 +334,10 @@ void AlsaLayer::preparePlaybackStream (void) int err; if (is_playback_open() && !is_playback_prepared()) { - _debug ("AlsaLayer:: prepare playback stream\n"); + _debug ("AlsaLayer:: prepare playback stream"); if ( (err = snd_pcm_prepare (_PlaybackHandle)) < 0) - _debug ("Error preparing the device: %s\n", snd_strerror (err)); + _debug ("Error preparing the device: %s", snd_strerror (err)); else prepare_playback (); } @@ -350,9 +350,9 @@ void AlsaLayer::recoverPlaybackStream(int error) int err; if (is_playback_open() && is_playback_running()) { - _debug("AlsaLayer:: recover playback stream\n"); + _debug("AlsaLayer:: recover playback stream"); if((err = snd_pcm_recover(_PlaybackHandle, error, 0)) < 0 ) - _debug("Error recovering the device: %s\n", snd_strerror(err)); + _debug("Error recovering the device: %s", snd_strerror(err)); } } */ @@ -364,9 +364,9 @@ void AlsaLayer::recoverPlaybackStream(int error) int err; if (is_capture_open() && is_capture_running()) { - _debug("AlsaLayer:: recover capture stream\n"); + _debug("AlsaLayer:: recover capture stream"); if((err = snd_pcm_recover(_PlaybackHandle, error, 0)) < 0 ) - _debug("Error recovering the device: %s\n", snd_strerror(err)); + _debug("Error recovering the device: %s", snd_strerror(err)); } } */ @@ -392,12 +392,12 @@ bool AlsaLayer::alsa_set_params (snd_pcm_t *pcm_handle, int type, int rate) /* Full configuration space */ if ( (err = snd_pcm_hw_params_any (pcm_handle, hwparams)) < 0) { - _debugAlsa (" Cannot initialize hardware parameter structure (%s)\n", snd_strerror (err)); + _debugAlsa (" Cannot initialize hardware parameter structure (%s)", snd_strerror (err)); return false; } if ( (err = snd_pcm_hw_params_set_access (pcm_handle, hwparams, SND_PCM_ACCESS_RW_INTERLEAVED)) < 0) { - _debugAlsa (" Cannot set access type (%s)\n", snd_strerror (err)); + _debugAlsa (" Cannot set access type (%s)", snd_strerror (err)); return false; } @@ -405,7 +405,7 @@ bool AlsaLayer::alsa_set_params (snd_pcm_t *pcm_handle, int type, int rate) format = SND_PCM_FORMAT_S16_LE; if ( (err = snd_pcm_hw_params_set_format (pcm_handle, hwparams, (snd_pcm_format_t) format)) < 0) { - _debugAlsa (" Cannot set sample format (%s)\n", snd_strerror (err)); + _debugAlsa (" Cannot set sample format (%s)", snd_strerror (err)); return false; } @@ -417,17 +417,17 @@ bool AlsaLayer::alsa_set_params (snd_pcm_t *pcm_handle, int type, int rate) exact_ivalue = rate; if ( (err = snd_pcm_hw_params_set_rate_near (pcm_handle, hwparams, &exact_ivalue, &dir) < 0)) { - _debugAlsa (" Cannot set sample rate (%s)\n", snd_strerror (err)); + _debugAlsa (" Cannot set sample rate (%s)", snd_strerror (err)); return false; } if (dir!= 0) { - _debugAlsa (" (%i) The choosen rate %d Hz is not supported by your hardware.\nUsing %d Hz instead.\n ",type ,rate, exact_ivalue); + _debugAlsa (" (%i) The choosen rate %d Hz is not supported by your hardware.Using %d Hz instead. ",type ,rate, exact_ivalue); } /* Set the number of channels */ if ( (err = snd_pcm_hw_params_set_channels (pcm_handle, hwparams, 1)) < 0) { - _debugAlsa (" Cannot set channel count (%s)\n", snd_strerror (err)); + _debugAlsa (" Cannot set channel count (%s)", snd_strerror (err)); return false; } @@ -437,12 +437,12 @@ bool AlsaLayer::alsa_set_params (snd_pcm_t *pcm_handle, int type, int rate) dir=0; if ( (err = snd_pcm_hw_params_set_period_size_near (pcm_handle, hwparams, &exact_lvalue , &dir)) < 0) { - _debugAlsa (" Cannot set period time (%s)\n", snd_strerror (err)); + _debugAlsa (" Cannot set period time (%s)", snd_strerror (err)); return false; } if (dir!=0) { - _debugAlsa ("(%i) The choosen period size %d bytes is not supported by your hardware.\nUsing %d instead.\n ", type, (int) periodsize, (int) exact_lvalue); + _debugAlsa ("(%i) The choosen period size %d bytes is not supported by your hardware.Using %d instead. ", type, (int) periodsize, (int) exact_lvalue); } periodsize = exact_lvalue; @@ -453,12 +453,12 @@ bool AlsaLayer::alsa_set_params (snd_pcm_t *pcm_handle, int type, int rate) dir=0; if ( (err = snd_pcm_hw_params_set_periods_near (pcm_handle, hwparams, &exact_ivalue, &dir)) < 0) { - _debugAlsa (" Cannot set periods number (%s)\n", snd_strerror (err)); + _debugAlsa (" Cannot set periods number (%s)", snd_strerror (err)); return false; } if (dir!=0) { - _debugAlsa (" The choosen period number %i bytes is not supported by your hardware.\nUsing %i instead.\n ", periods, exact_ivalue); + _debugAlsa (" The choosen period number %i bytes is not supported by your hardware.Using %i instead. ", periods, exact_ivalue); } periods=exact_ivalue; @@ -466,7 +466,7 @@ bool AlsaLayer::alsa_set_params (snd_pcm_t *pcm_handle, int type, int rate) /* Set the hw parameters */ if ( (err = snd_pcm_hw_params (pcm_handle, hwparams)) < 0) { - _debugAlsa (" Cannot set hw parameters (%s)\n", snd_strerror (err)); + _debugAlsa (" Cannot set hw parameters (%s)", snd_strerror (err)); return false; } @@ -479,12 +479,12 @@ bool AlsaLayer::alsa_set_params (snd_pcm_t *pcm_handle, int type, int rate) /* Set the start threshold */ if ( (err = snd_pcm_sw_params_set_start_threshold (pcm_handle, swparams, 2700 /*periodsize*2*/)) < 0) { - _debugAlsa (" Cannot set start threshold (%s)\n", snd_strerror (err)); + _debugAlsa (" Cannot set start threshold (%s)", snd_strerror (err)); return false; } if ( (err = snd_pcm_sw_params (pcm_handle, swparams)) < 0) { - _debugAlsa (" Cannot set sw parameters (%s)\n", snd_strerror (err)); + _debugAlsa (" Cannot set sw parameters (%s)", snd_strerror (err)); return false; } @@ -503,18 +503,18 @@ AlsaLayer::open_device (std::string pcm_p, std::string pcm_c, int flag) if (flag == SFL_PCM_BOTH || flag == SFL_PCM_PLAYBACK) { - _debug ("AlsaLayer:: open playback device\n"); + _debug ("AlsaLayer:: open playback device"); // if((err = snd_pcm_open(&_PlaybackHandle, pcm_p.c_str(), SND_PCM_STREAM_PLAYBACK, 0 )) < 0){ if ( (err = snd_pcm_open (&_PlaybackHandle, pcm_p.c_str(), SND_PCM_STREAM_PLAYBACK, 0)) < 0) { - _debugAlsa ("Error while opening playback device %s\n", pcm_p.c_str()); + _debugAlsa ("Error while opening playback device %s", pcm_p.c_str()); setErrorMessage (ALSA_PLAYBACK_DEVICE); close_playback (); return false; } if (!alsa_set_params (_PlaybackHandle, 1, getSampleRate())) { - _debug ("playback failed\n"); + _debug ("playback failed"); snd_pcm_close (_PlaybackHandle); close_playback (); return false; @@ -525,17 +525,17 @@ AlsaLayer::open_device (std::string pcm_p, std::string pcm_c, int flag) if (flag == SFL_PCM_BOTH || flag == SFL_PCM_CAPTURE) { - _debug ("AlsaLayer:: open capture device\n"); + _debug ("AlsaLayer:: open capture device"); if ( (err = snd_pcm_open (&_CaptureHandle, pcm_c.c_str(), SND_PCM_STREAM_CAPTURE, 0)) < 0) { - _debugAlsa ("Error while opening capture device %s\n", pcm_c.c_str()); + _debugAlsa ("Error while opening capture device %s", pcm_c.c_str()); setErrorMessage (ALSA_CAPTURE_DEVICE); close_capture (); return false; } if (!alsa_set_params (_CaptureHandle, 0, 8000)) { - _debug ("capture failed\n"); + _debug ("capture failed"); snd_pcm_close (_CaptureHandle); close_capture (); return false; @@ -551,7 +551,7 @@ AlsaLayer::open_device (std::string pcm_p, std::string pcm_c, int flag) try { _audioThread->start(); } catch (...) { - _debugException ("Fail to start audio thread\n"); + _debugException ("Fail to start audio thread"); } */ @@ -579,18 +579,18 @@ AlsaLayer::write (void* buffer, int length) case -ESTRPIPE: case -EIO: - //_debugAlsa(" XRUN playback ignored (%s)\n", snd_strerror(err)); + //_debugAlsa(" XRUN playback ignored (%s)", snd_strerror(err)); handle_xrun_playback(); if (snd_pcm_writei (_PlaybackHandle , buffer , frames) <0) - _debugAlsa ("XRUN handling failed\n"); + _debugAlsa ("XRUN handling failed"); _trigger_request = true; break; default: - _debugAlsa ("Write error unknown - dropping frames **********************************: %s\n", snd_strerror (err)); + _debugAlsa ("Write error unknown - dropping frames **********************************: %s", snd_strerror (err)); stopPlaybackStream (); @@ -623,20 +623,20 @@ AlsaLayer::read (void* buffer, int toCopy) case -ESTRPIPE: case -EIO: - _debugAlsa (" XRUN capture ignored (%s)\n", snd_strerror (samples)); + _debugAlsa (" XRUN capture ignored (%s)", snd_strerror (samples)); handle_xrun_capture(); //samples = snd_pcm_readi( _CaptureHandle, buffer, frames); //if (samples<0) samples=0; break; case EPERM: - _debugAlsa (" Capture EPERM (%s)\n", snd_strerror (samples)); + _debugAlsa (" Capture EPERM (%s)", snd_strerror (samples)); prepareCaptureStream (); startCaptureStream (); break; default: - //_debugAlsa("%s\n", snd_strerror(samples)); + //_debugAlsa("%s", snd_strerror(samples)); break; } @@ -650,7 +650,7 @@ AlsaLayer::read (void* buffer, int toCopy) void AlsaLayer::handle_xrun_capture (void) { - _debugAlsa ("handle_xrun_capture\n"); + _debugAlsa ("handle_xrun_capture"); snd_pcm_status_t* status; snd_pcm_status_alloca (&status); @@ -664,19 +664,19 @@ AlsaLayer::handle_xrun_capture (void) startCaptureStream (); } } else - _debugAlsa (" Get status failed\n"); + _debugAlsa (" Get status failed"); } void AlsaLayer::handle_xrun_playback (void) { - _debugAlsa ("AlsaLayer:: handle_xrun_playback\n"); + _debugAlsa ("AlsaLayer:: handle_xrun_playback"); int state; snd_pcm_status_t* status; snd_pcm_status_alloca (&status); - if ( (state = snd_pcm_status (_PlaybackHandle, status)) < 0) _debugAlsa (" Error: Cannot get playback handle status (%s)\n" , snd_strerror (state)); + if ( (state = snd_pcm_status (_PlaybackHandle, status)) < 0) _debugAlsa (" Error: Cannot get playback handle status (%s)" , snd_strerror (state)); else { state = snd_pcm_status_get_state (status); @@ -743,9 +743,9 @@ AlsaLayer::getSoundCardsInfo (int stream) snd_pcm_info_set_device (pcminfo , 0); snd_pcm_info_set_stream (pcminfo, (stream == SFL_PCM_CAPTURE) ? SND_PCM_STREAM_CAPTURE : SND_PCM_STREAM_PLAYBACK); - if (snd_ctl_pcm_info (handle ,pcminfo) < 0) _debugAlsa (" Cannot get info\n"); + if (snd_ctl_pcm_info (handle ,pcminfo) < 0) _debugAlsa (" Cannot get info"); else { - _debugAlsa ("card %i : %s [%s]\n", + _debugAlsa ("card %i : %s [%s]", numCard, snd_ctl_card_info_get_id (info), snd_ctl_card_info_get_name (info)); @@ -825,7 +825,7 @@ void AlsaLayer::audioCallback (void) /* int writeableSize = snd_pcm_avail_update(_PlaybackHandle); - _debug("writeableSize %i\n", writeableSize); + _debug("writeableSize %i", writeableSize); */ // AvailForGet tell the number of chars inside the buffer @@ -970,7 +970,7 @@ void AlsaLayer::audioCallback (void) if (is_capture_running()) { micAvailBytes = snd_pcm_avail_update (_CaptureHandle); - // _debug("micAvailBytes %i\n", micAvailBytes); + // _debug("micAvailBytes %i", micAvailBytes); if (micAvailBytes > 0) { micAvailPut = getMainBuffer()->availForPut(); @@ -990,7 +990,7 @@ void AlsaLayer::audioCallback (void) int nbSample = toPut / sizeof (SFLDataFormat); int nb_sample_up = nbSample; - // _debug("nb_sample_up %i\n", nb_sample_up); + // _debug("nb_sample_up %i", nb_sample_up); nbSample = _converter->downsampleData ( (SFLDataFormat*) in, rsmpl_out, _mainBufferSampleRate, _audioSampleRate, nb_sample_up); dcblocker->filter_signal (rsmpl_out, nbSample); @@ -1010,7 +1010,7 @@ void AlsaLayer::audioCallback (void) in=0; } else if (micAvailBytes < 0) { - _debug ("AlsaLayer::audioCallback (mic): error: %s\n", snd_strerror (micAvailBytes)); + _debug ("AlsaLayer::audioCallback (mic): error: %s", snd_strerror (micAvailBytes)); } } diff --git a/sflphone-common/src/audio/audiolayer.cpp b/sflphone-common/src/audio/audiolayer.cpp index 0687dfa3b4..e0a84d4848 100644 --- a/sflphone-common/src/audio/audiolayer.cpp +++ b/sflphone-common/src/audio/audiolayer.cpp @@ -40,7 +40,7 @@ void AudioLayer::flushUrgent (void) int AudioLayer::putUrgent (void* buffer, int toCopy) { - _debug ("------------------- AudioLayer::putUrgent --------------------\n"); + _debug ("------------------- AudioLayer::putUrgent --------------------"); int a; ost::MutexLock guard (_mutex); @@ -65,7 +65,7 @@ int AudioLayer::putMain (void *buffer, int toCopy, CallID call_id) if (a >= toCopy) { return getMainBuffer()->putData (buffer, toCopy, _defaultVolume, call_id); } else { - _debug ("Chopping sound, Ouch! RingBuffer full ?\n"); + _debug ("Chopping sound, Ouch! RingBuffer full ?"); return getMainBuffer()->putData (buffer, a, _defaultVolume, call_id); } diff --git a/sflphone-common/src/audio/audiortp.cpp b/sflphone-common/src/audio/audiortp.cpp index 3887a21f63..26615888a7 100644 --- a/sflphone-common/src/audio/audiortp.cpp +++ b/sflphone-common/src/audio/audiortp.cpp @@ -68,14 +68,14 @@ AudioRtp::createNewSession (SIPCall *ca) ost::MutexLock m (_rtpMutex); - _debug ("AudioRtp::Create new rtp session\n"); + _debug ("AudioRtp::Create new rtp session"); // something should stop the thread before... if (_RTXThread != 0) { - _debug ("**********************************************************\n"); - _debug ("! ARTP Failure: Thread already exists..., stopping it\n"); - _debug ("**********************************************************\n"); + _debug ("**********************************************************"); + _debug ("! ARTP Failure: Thread already exists..., stopping it"); + _debug ("**********************************************************"); delete _RTXThread; _RTXThread = 0; } @@ -93,14 +93,14 @@ AudioRtp::start (void) ost::MutexLock m (_rtpMutex); if (_RTXThread == 0) { - _debug ("! ARTP Failure: Cannot start audiortp thread since not yet created\n"); + _debug ("! ARTP Failure: Cannot start audiortp thread since not yet created"); throw AudioRtpException(); } try { if (_RTXThread->start() != 0) { - _debug ("! ARTP Failure: unable to start RTX Thread\n"); + _debug ("! ARTP Failure: unable to start RTX Thread"); return -1; } } catch (...) { @@ -118,7 +118,7 @@ AudioRtp::closeRtpSession () ost::MutexLock m (_rtpMutex); // This will make RTP threads finish. - _debug ("AudioRtp::Stopping rtp session\n"); + _debug ("AudioRtp::Stopping rtp session"); try { if (_RTXThread != 0) { @@ -126,11 +126,11 @@ AudioRtp::closeRtpSession () _RTXThread = 0; } } catch (...) { - _debugException ("! ARTP Exception: when stopping audiortp\n"); + _debugException ("! ARTP Exception: when stopping audiortp"); throw; } - _debug ("AudioRtp::Audio rtp stopped\n"); + _debug ("AudioRtp::Audio rtp stopped"); return true; } @@ -140,7 +140,7 @@ void AudioRtp::setRecording() { - _debug ("AudioRtp::setRecording\n"); + _debug ("AudioRtp::setRecording"); _RTXThread->_ca->setRecording(); } @@ -161,7 +161,7 @@ AudioRtpRTX::AudioRtpRTX (SIPCall *sipcall, bool sym) : time (new ost::Time()), std::string localipConfig = _ca->getLocalIp(); // _ca->getLocalIp(); ost::InetHostAddress local_ip (localipConfig.c_str()); - _debug ("%i\n", _ca->getLocalAudioPort()); + _debug ("%i", _ca->getLocalAudioPort()); _session = new ost::SymmetricRTPSession (local_ip, _ca->getLocalAudioPort()); // _session = new ost::RTPSessionBase(local_ip, _ca->getLocalAudioPort()); _sessionRecv = NULL; @@ -209,7 +209,7 @@ AudioRtpRTX::~AudioRtpRTX () ost::MutexLock m (_rtpRtxMutex); - _debug ("Delete AudioRtpRTX instance in callid %s\n", _ca->getCallId().c_str()); + _debug ("Delete AudioRtpRTX instance in callid %s", _ca->getCallId().c_str()); try { this->terminate(); @@ -218,12 +218,12 @@ AudioRtpRTX::~AudioRtpRTX () throw; } - _debug ("Remove audio stream for call id %s\n", _ca->getCallId().c_str()); + _debug ("Remove audio stream for call id %s", _ca->getCallId().c_str()); _audiolayer->getMainBuffer()->unBindAll (_ca->getCallId()); // Manager::instance().removeStream(_ca->getCallId()); - _debug ("DELETE print micData address %p\n", micData); + _debug ("DELETE print micData address %p", micData); delete [] micData; micData = NULL; delete [] micDataConverted; @@ -248,7 +248,7 @@ AudioRtpRTX::~AudioRtpRTX () delete _session; _session = NULL; - _debug ("AudioRtpRTX instance deleted\n"); + _debug ("AudioRtpRTX instance deleted"); rtp_input_rec->close(); rtp_output_rec->close(); @@ -261,17 +261,17 @@ AudioRtpRTX::initBuffers() { ost::MutexLock m (_rtpRtxMutex); - _debug ("AudioRtpRTX::initBuffers Init RTP buffers for %s\n", _ca->getCallId().c_str()); + _debug ("AudioRtpRTX::initBuffers Init RTP buffers for %s", _ca->getCallId().c_str()); converter = new SamplerateConverter (_layerSampleRate , _layerFrameSize); nbSamplesMax = (int) (_layerSampleRate * _layerFrameSize /1000); - _debug ("AudioRtpRTX::initBuffers NBSAMPLEMAX %i\n", nbSamplesMax); + _debug ("AudioRtpRTX::initBuffers NBSAMPLEMAX %i", nbSamplesMax); micData = new SFLDataFormat[nbSamplesMax]; - _debug ("CREATE print micData address %p\n", micData); + _debug ("CREATE print micData address %p", micData); micDataConverted = new SFLDataFormat[nbSamplesMax]; micDataEncoded = new unsigned char[nbSamplesMax]; @@ -305,7 +305,7 @@ AudioRtpRTX::setRtpSessionMedia (void) { if (_ca == 0) { - _debug (" !ARTP: No call, can't init RTP media\n"); + _debug (" !ARTP: No call, can't init RTP media"); return; } @@ -314,11 +314,11 @@ AudioRtpRTX::setRtpSessionMedia (void) _audiocodec = Manager::instance().getCodecDescriptorMap().instantiateCodec (pl); if (_audiocodec == NULL) { - _debug (" !ARTP: No audiocodec, can't init RTP media\n"); + _debug (" !ARTP: No audiocodec, can't init RTP media"); return; } - _debug ("Init audio RTP session: codec payload %i\n", _audiocodec->getPayload()); + _debug ("Init audio RTP session: codec payload %i", _audiocodec->getPayload()); // _audioCodecInstance = *_audiocodec; @@ -344,34 +344,34 @@ AudioRtpRTX::setRtpSessionRemoteIp (void) if (!_remoteIpIsSet) { - _debug ("++++++++++++++++++++++++++ SET IP ADDRESS ++++++++++++++++++++++++++++\n"); + _debug ("++++++++++++++++++++++++++ SET IP ADDRESS ++++++++++++++++++++++++++++"); if (_ca == 0) { - _debug (" !ARTP: No call, can't init RTP media \n"); + _debug (" !ARTP: No call, can't init RTP media "); return; } ost::InetHostAddress remote_ip (_ca->getLocalSDP()->get_remote_ip().c_str()); - _debug ("Init audio RTP session: remote ip %s\n", _ca->getLocalSDP()->get_remote_ip().data()); + _debug ("Init audio RTP session: remote ip %s", _ca->getLocalSDP()->get_remote_ip().data()); if (!remote_ip) { - _debug (" !ARTP Thread Error: Target IP address [%s] is not correct!\n", _ca->getLocalSDP()->get_remote_ip().data()); + _debug (" !ARTP Thread Error: Target IP address [%s] is not correct!", _ca->getLocalSDP()->get_remote_ip().data()); return; } - _debug ("++++Address: %s, audioport: %d\n", _ca->getLocalSDP()->get_remote_ip().c_str(), _ca->getLocalSDP()->get_remote_audio_port()); + _debug ("++++Address: %s, audioport: %d", _ca->getLocalSDP()->get_remote_ip().c_str(), _ca->getLocalSDP()->get_remote_audio_port()); - _debug ("++++Audioport: %d\n", (int) _ca->getLocalSDP()->get_remote_audio_port()); + _debug ("++++Audioport: %d", (int) _ca->getLocalSDP()->get_remote_audio_port()); if (!_session->addDestination (remote_ip, (unsigned short) _ca->getLocalSDP()->get_remote_audio_port())) { - _debug (" !ARTP Thread Error: can't add destination to session!\n"); + _debug (" !ARTP Thread Error: can't add destination to session!"); return; } _remoteIpIsSet = true; } else { - _debug ("+++++++++++++++++++++++ IP ADDRESS ALREADY SET ++++++++++++++++++++++++\n"); + _debug ("+++++++++++++++++++++++ IP ADDRESS ALREADY SET ++++++++++++++++++++++++"); } } @@ -404,23 +404,23 @@ AudioRtpRTX::processDataEncode() // available bytes inside ringbuffer int availBytesFromMic = _audiolayer->getMainBuffer()->availForGet (_ca->getCallId()); - // _debug("AudioRtpRTX::processDataEncode() callid: %s availBytesFromMic %i\n", _ca->getCallId().c_str(), availBytesFromMic); + // _debug("AudioRtpRTX::processDataEncode() callid: %s availBytesFromMic %i", _ca->getCallId().c_str(), availBytesFromMic); - // _debug("AudioRtpRTX::processDataEncode: availBytesFromMic: %i\n", availBytesFromMic); + // _debug("AudioRtpRTX::processDataEncode: availBytesFromMic: %i", availBytesFromMic); // set available byte to maxByteToGet int bytesAvail = (availBytesFromMic < maxBytesToGet) ? availBytesFromMic : maxBytesToGet; - // _debug("bytesAvail %i\n", bytesAvail); + // _debug("bytesAvail %i", bytesAvail); if (bytesAvail == 0) return 0; - // _debug("AudioRtpRTX::processDataEncode: bytesAvail: %i\n", bytesAvail); + // _debug("AudioRtpRTX::processDataEncode: bytesAvail: %i", bytesAvail); // Get bytes from micRingBuffer to data_from_mic int nbSample = _audiolayer->getMainBuffer()->getData (micData , bytesAvail, 100, _ca->getCallId()) / sizeof (SFLDataFormat); rtp_output_rec->write ( (char*) micData, bytesAvail); - // _debug("AudioRtpRTX::processDataEncode: nbSample: %i\n", nbSample); + // _debug("AudioRtpRTX::processDataEncode: nbSample: %i", nbSample); // nb bytes to be sent over RTP int compSize = 0; @@ -429,7 +429,7 @@ AudioRtpRTX::processDataEncode() if (_audiocodec->getClockRate() != _layerSampleRate) { int nb_sample_up = nbSample; - //_debug("_nbSample audiolayer->getMic(): %i \n", nbSample); + //_debug("_nbSample audiolayer->getMic(): %i ", nbSample); // Store the length of the mic buffer in samples for recording _nSamplesMic = nbSample; @@ -514,18 +514,18 @@ AudioRtpRTX::sendSessionFromMic (int timestamp) // no call, so we do nothing if (_ca==0) { - _debug (" !ARTP: No call associated (mic)\n"); + _debug (" !ARTP: No call associated (mic)"); return; } // AudioLayer* audiolayer = Manager::instance().getAudioDriver(); if (!_audiolayer) { - _debug (" !ARTP: No audiolayer available for MIC\n"); + _debug (" !ARTP: No audiolayer available for MIC"); return; } if (!_audiocodec) { - _debug (" !ARTP: No audiocodec available for MIC\n"); + _debug (" !ARTP: No audiocodec available for MIC"); return; } @@ -534,7 +534,7 @@ AudioRtpRTX::sendSessionFromMic (int timestamp) int compSize = processDataEncode(); // putData put the data on RTP queue, sendImmediate bypass this queue - // _debug("AudioRtpRTX::sendSessionFromMic: timestamp: %i, compsize: %i\n", timestamp, compSize); + // _debug("AudioRtpRTX::sendSessionFromMic: timestamp: %i, compsize: %i", timestamp, compSize); if ( (compSize != 0) && (micDataEncoded != NULL)) _session->putData (timestamp, micDataEncoded, compSize); @@ -554,12 +554,12 @@ AudioRtpRTX::receiveSessionForSpkr (int& countTime) } if (!_audiolayer) { - _debug (" !ARTP: No audiolayer available for SPEAKER\n"); + _debug (" !ARTP: No audiolayer available for SPEAKER"); return; } if (!_audiocodec) { - _debug (" !ARTP: No audiocodec available for SPEAKER\n"); + _debug (" !ARTP: No audiocodec available for SPEAKER"); return; } @@ -638,12 +638,12 @@ AudioRtpRTX::run () int timestamp = _session->getCurrentTimestamp(); // for mic - _debug ("- ARTP Action: Start call %s\n",_ca->getCallId().c_str()); + _debug ("- ARTP Action: Start call %s",_ca->getCallId().c_str()); while (!testCancel()) { - // _debug("Main while loop for call: %s\n", _ca->getCallId().c_str()); + // _debug("Main while loop for call: %s", _ca->getCallId().c_str()); // Send session sessionWaiting = _session->isWaiting(); @@ -676,7 +676,7 @@ AudioRtpRTX::run () } // _audiolayer->stopStream(); - _debug ("- ARTP Action: Stop call %s\n",_ca->getCallId().c_str()); + _debug ("- ARTP Action: Stop call %s",_ca->getCallId().c_str()); } diff --git a/sflphone-common/src/audio/audiortp/AudioRtpFactory.cpp b/sflphone-common/src/audio/audiortp/AudioRtpFactory.cpp index 6785f286e9..bf9a9bf6c8 100644 --- a/sflphone-common/src/audio/audiortp/AudioRtpFactory.cpp +++ b/sflphone-common/src/audio/audiortp/AudioRtpFactory.cpp @@ -60,7 +60,7 @@ void AudioRtpFactory::initAudioRtpSession (SIPCall * ca) if (_rtpSession != NULL) { _debugException ("An audio rtp thread was already created but not" \ - "destroyed. Forcing it before continuing.\n"); + "destroyed. Forcing it before continuing."); stop(); } @@ -75,16 +75,16 @@ void AudioRtpFactory::initAudioRtpSession (SIPCall * ca) if (accountId == AccountNULL) { srtpEnabled = Manager::instance().getConfigBool (IP2IP_PROFILE, SRTP_ENABLE); keyExchangeProtocol = Manager::instance().getConfigInt (IP2IP_PROFILE, SRTP_KEY_EXCHANGE); - _debug ("Ip-to-ip profile selected with key exchange protocol number %d\n", keyExchangeProtocol); + _debug ("Ip-to-ip profile selected with key exchange protocol number %d", keyExchangeProtocol); helloHashEnabled = Manager::instance().getConfigBool (IP2IP_PROFILE, ZRTP_HELLO_HASH); } else { srtpEnabled = Manager::instance().getConfigBool (accountId, SRTP_ENABLE); keyExchangeProtocol = Manager::instance().getConfigInt (accountId, SRTP_KEY_EXCHANGE); - _debug ("Registered account %s profile selected with key exchange protocol number %d\n", accountId.c_str(), keyExchangeProtocol); + _debug ("Registered account %s profile selected with key exchange protocol number %d", accountId.c_str(), keyExchangeProtocol); helloHashEnabled = Manager::instance().getConfigBool (accountId, ZRTP_HELLO_HASH); } - _debug ("Srtp enable: %d \n", srtpEnabled); + _debug ("Srtp enable: %d ", srtpEnabled); if (srtpEnabled) { std::string zidFilename (Manager::instance().getConfigString (SIGNALISATION, ZRTP_ZIDFILE)); @@ -99,7 +99,7 @@ void AudioRtpFactory::initAudioRtpSession (SIPCall * ca) // TODO: be careful with that. The hello hash is computed asynchronously. Maybe it's // not even available at that point. ca->getLocalSDP()->set_zrtp_hash (static_cast<AudioZrtpSession *> (_rtpSession)->getHelloHash()); - _debug ("Zrtp hello hash fed to SDP\n"); + _debug ("Zrtp hello hash fed to SDP"); } break; @@ -112,7 +112,7 @@ void AudioRtpFactory::initAudioRtpSession (SIPCall * ca) } else { _rtpSessionType = Symmetric; _rtpSession = new AudioSymmetricRtpSession (&Manager::instance(), ca); - _debug ("Starting a symmetric unencrypted rtp session\n"); + _debug ("Starting a symmetric unencrypted rtp session"); } } @@ -127,7 +127,7 @@ void AudioRtpFactory::start (void) case Sdes: case Symmetric: - _debug ("Starting symmetric rtp thread\n"); + _debug ("Starting symmetric rtp thread"); if (static_cast<AudioSymmetricRtpSession *> (_rtpSession)->startRtpThread() != 0) { throw AudioRtpFactoryException ("Failed to start AudioSymmetricRtpSession thread"); @@ -148,7 +148,7 @@ void AudioRtpFactory::start (void) void AudioRtpFactory::stop (void) { ost::MutexLock mutex (_audioRtpThreadMutex); - _debug ("Stopping audio rtp session\n"); + _debug ("Stopping audio rtp session"); if (_rtpSession == NULL) { _debugException ("_rtpSession is null when trying to stop. Returning."); @@ -171,7 +171,7 @@ void AudioRtpFactory::stop (void) _rtpSession = NULL; } catch (...) { - _debugException ("Exception caught when stopping the audio rtp session\n"); + _debugException ("Exception caught when stopping the audio rtp session"); throw AudioRtpFactoryException(); } } diff --git a/sflphone-common/src/audio/audiortp/AudioZrtpSession.cpp b/sflphone-common/src/audio/audiortp/AudioZrtpSession.cpp index cec4dd3ff7..cdd2a11821 100644 --- a/sflphone-common/src/audio/audiortp/AudioZrtpSession.cpp +++ b/sflphone-common/src/audio/audiortp/AudioZrtpSession.cpp @@ -36,7 +36,7 @@ AudioZrtpSession::AudioZrtpSession (ManagerImpl * manager, SIPCall * sipcall, co AudioRtpSession<AudioZrtpSession> (manager, sipcall), _zidFilename (zidFilename) { - _debug ("AudioZrtpSession initialized\n"); + _debug ("AudioZrtpSession initialized"); initializeZid(); startZrtp(); } @@ -54,24 +54,24 @@ void AudioZrtpSession::initializeZid (void) std::string xdg_config = std::string (HOMEDIR) + DIR_SEPARATOR_STR + ".cache" + DIR_SEPARATOR_STR + PROGDIR + "/" + _zidFilename; - _debug (" xdg_config %s\n", xdg_config.c_str()); + _debug (" xdg_config %s", xdg_config.c_str()); if (XDG_CACHE_HOME != NULL) { std::string xdg_env = std::string (XDG_CACHE_HOME) + _zidFilename; - _debug (" xdg_env %s\n", xdg_env.c_str()); + _debug (" xdg_env %s", xdg_env.c_str()); (xdg_env.length() > 0) ? zidCompleteFilename = xdg_env : zidCompleteFilename = xdg_config; } else zidCompleteFilename = xdg_config; if (initialize (zidCompleteFilename.c_str()) >= 0) { - _debug ("Register callbacks\n"); + _debug ("Register callbacks"); setEnableZrtp (true); setUserCallback (new ZrtpSessionCallback (_ca)); return; } - _debug ("Initialization from ZID file failed. Trying to remove...\n"); + _debug ("Initialization from ZID file failed. Trying to remove..."); if (remove (zidCompleteFilename.c_str()) !=0) { _debug ("Failed to remove zid file because of: %s", strerror (errno)); @@ -79,7 +79,7 @@ void AudioZrtpSession::initializeZid (void) } if (initialize (zidCompleteFilename.c_str()) < 0) { - _debug ("ZRTP initialization failed\n"); + _debug ("ZRTP initialization failed"); throw ZrtpZidException(); } diff --git a/sflphone-common/src/audio/audiortp/ZrtpSessionCallback.cpp b/sflphone-common/src/audio/audiortp/ZrtpSessionCallback.cpp index 1648112382..ebdcd8f95e 100644 --- a/sflphone-common/src/audio/audiortp/ZrtpSessionCallback.cpp +++ b/sflphone-common/src/audio/audiortp/ZrtpSessionCallback.cpp @@ -44,7 +44,7 @@ ZrtpSessionCallback::ZrtpSessionCallback (SIPCall *sipcall) : return; } - _debug ("Initialize callbacks\n"); + _debug ("Initialize callbacks"); /** * Information Map @@ -114,28 +114,28 @@ ZrtpSessionCallback::ZrtpSessionCallback (SIPCall *sipcall) : void ZrtpSessionCallback::secureOn (std::string cipher) { - _debug ("Secure mode is on with cipher %s\n", cipher.c_str()); + _debug ("Secure mode is on with cipher %s", cipher.c_str()); DBusManager::instance().getCallManager()->secureOn (_sipcall->getCallId(), cipher); } void ZrtpSessionCallback::secureOff (void) { - _debug ("Secure mode is off\n"); + _debug ("Secure mode is off"); DBusManager::instance().getCallManager()->secureOff (_sipcall->getCallId()); } void ZrtpSessionCallback::showSAS (std::string sas, bool verified) { - _debug ("SAS is: %s\n", sas.c_str()); + _debug ("SAS is: %s", sas.c_str()); DBusManager::instance().getCallManager()->showSAS (_sipcall->getCallId(), sas, verified); } void ZrtpSessionCallback::zrtpNotSuppOther() { - _debug ("Callee does not support ZRTP\n"); + _debug ("Callee does not support ZRTP"); DBusManager::instance().getCallManager()->zrtpNotSuppOther (_sipcall->getCallId()); } @@ -148,7 +148,7 @@ ZrtpSessionCallback::showMessage (GnuZrtpCodes::MessageSeverity sev, int32_t sub msg = _infoMap[subCode]; if (msg != NULL) { - _debug ("ZRTP Debug:\n"); + _debug ("ZRTP Debug:"); } } @@ -156,7 +156,7 @@ ZrtpSessionCallback::showMessage (GnuZrtpCodes::MessageSeverity sev, int32_t sub msg = _warningMap[subCode]; if (msg != NULL) { - _debug ("ZRTP Debug:\n"); + _debug ("ZRTP Debug:"); } } @@ -164,22 +164,22 @@ ZrtpSessionCallback::showMessage (GnuZrtpCodes::MessageSeverity sev, int32_t sub msg = _severeMap[subCode]; if (msg != NULL) { - _debug ("ZRTP Debug:\n"); + _debug ("ZRTP Debug:"); } } if (sev == ZrtpError) { if (subCode < 0) { // received an error packet from peer subCode *= -1; - _debug ("Received an error packet from peer:\n"); + _debug ("Received an error packet from peer:"); } else { - _debug ("Sent error packet to peer:\n"); + _debug ("Sent error packet to peer:"); } msg = _zrtpMap[subCode]; if (msg != NULL) { - _debug ("ZRTP Debug: %s\n", msg->c_str()); + _debug ("ZRTP Debug: %s", msg->c_str()); } } } @@ -192,20 +192,20 @@ ZrtpSessionCallback::zrtpNegotiationFailed (MessageSeverity severity, int subCod if (severity == ZrtpError) { if (subCode < 0) { // received an error packet from peer subCode *= -1; - _debug ("Received error packet: \n"); + _debug ("Received error packet: "); } else { - _debug ("Sent error packet: \n"); + _debug ("Sent error packet: "); } msg = _zrtpMap[subCode]; if (msg != NULL) { - _debug ("%s\n", msg->c_str()); + _debug ("%s", msg->c_str()); DBusManager::instance().getCallManager()->zrtpNegotiationFailed (_sipcall->getCallId(), *msg, "ZRTP"); } } else { msg = _severeMap[subCode]; - _debug ("%s\n", msg->c_str()); + _debug ("%s", msg->c_str()); DBusManager::instance().getCallManager()->zrtpNegotiationFailed (_sipcall->getCallId(), *msg, "severe"); } } @@ -213,7 +213,7 @@ ZrtpSessionCallback::zrtpNegotiationFailed (MessageSeverity severity, int subCod void ZrtpSessionCallback::confirmGoClear() { - _debug ("Received go clear message. Until confirmation, ZRTP won't send any data\n"); + _debug ("Received go clear message. Until confirmation, ZRTP won't send any data"); DBusManager::instance().getCallManager()->zrtpNotSuppOther (_sipcall->getCallId()); } diff --git a/sflphone-common/src/audio/codecs/alaw.cpp b/sflphone-common/src/audio/codecs/alaw.cpp index e8a3928a72..9ed3cd56de 100644 --- a/sflphone-common/src/audio/codecs/alaw.cpp +++ b/sflphone-common/src/audio/codecs/alaw.cpp @@ -38,7 +38,7 @@ class Alaw : public AudioCodec virtual ~Alaw() {} virtual int codecDecode (short *dst, unsigned char *src, unsigned int size) { - // _debug("Decoded by alaw \n"); + // _debug("Decoded by alaw "); int16* end = dst+size; while (dst<end) @@ -48,7 +48,7 @@ class Alaw : public AudioCodec } virtual int codecEncode (unsigned char *dst, short *src, unsigned int size) { - // _debug("Encoded by alaw \n"); + // _debug("Encoded by alaw "); size >>= 1; uint8* end = dst+size; diff --git a/sflphone-common/src/audio/codecs/celtcodec.cpp b/sflphone-common/src/audio/codecs/celtcodec.cpp index 93cf4470d4..8787bd6b6b 100644 --- a/sflphone-common/src/audio/codecs/celtcodec.cpp +++ b/sflphone-common/src/audio/codecs/celtcodec.cpp @@ -46,13 +46,13 @@ class Celt : public AudioCodec // celt_mode_info(mode, CELT_GET_LOOKAHEAD, &skip); if (mode == NULL) { - printf ("failed to create a mode\n"); + printf ("failed to create a mode"); } // bytes_per_packet = 1024; // if (bytes_per_packet < 0 || bytes_per_packet > MAX_PACKET) // { - // printf ("bytes per packet must be between 0 and %d\n"); + // printf ("bytes per packet must be between 0 and %d"); // } // celt_mode_info(mode, CELT_GET_FRAME_SIZE, &frame_size); diff --git a/sflphone-common/src/audio/codecs/codecDescriptor.cpp b/sflphone-common/src/audio/codecs/codecDescriptor.cpp index 8c9ca56006..87a3c8c3d3 100644 --- a/sflphone-common/src/audio/codecs/codecDescriptor.cpp +++ b/sflphone-common/src/audio/codecs/codecDescriptor.cpp @@ -51,14 +51,14 @@ CodecDescriptor::init() _nbCodecs = CodecDynamicList.size(); if (_nbCodecs <= 0) { - _debug (" Error - No codecs available in directory %s\n" , CODECS_DIR); + _debug (" Error - No codecs available in directory %s" , CODECS_DIR); } int i; for (i = 0 ; i < _nbCodecs ; i++) { _CodecsMap[ (AudioCodecType) CodecDynamicList[i]->getPayload() ] = CodecDynamicList[i]; - _debug ("%s\n" , CodecDynamicList[i]->getCodecName().c_str()); + _debug ("%s" , CodecDynamicList[i]->getCodecName().c_str()); } } @@ -94,11 +94,11 @@ CodecDescriptor::getCodec (AudioCodecType payload) CodecsMap::iterator iter = _CodecsMap.find (payload); if (iter!=_CodecsMap.end()) { - // _debug("Found codec %i _CodecsMap from codec descriptor\n", payload); + // _debug("Found codec %i _CodecsMap from codec descriptor", payload); return (iter->second); } - _debug ("Error cannont found codec %i in _CodecsMap from codec descriptor\n", payload); + _debug ("Error cannont found codec %i in _CodecsMap from codec descriptor", payload); return NULL; } @@ -207,7 +207,7 @@ CodecDescriptor::scanCodecDirectory (void) for (i = 0 ; (unsigned int) i < dirToScan.size() ; i++) { std::string dirStr = dirToScan[i]; - _debug ("Scanning %s to find audio codecs....\n", dirStr.c_str()); + _debug ("Scanning %s to find audio codecs....", dirStr.c_str()); DIR *dir = opendir (dirStr.c_str()); AudioCodec* audioCodec; @@ -218,7 +218,7 @@ CodecDescriptor::scanCodecDirectory (void) tmp = dirStruct -> d_name ; if (tmp == CURRENT_DIR || tmp == PARENT_DIR) {} else { if (seemsValid (tmp) && !alreadyInCache (tmp)) { - //_debug("Codec : %s\n", tmp.c_str()); + //_debug("Codec : %s", tmp.c_str()); _Cache.push_back (tmp); audioCodec = loadCodec (dirStr.append (tmp)); codecs.push_back (audioCodec); @@ -237,7 +237,7 @@ CodecDescriptor::scanCodecDirectory (void) AudioCodec* CodecDescriptor::loadCodec (std::string path) { - //_debug("Load path %s\n", path.c_str()); + //_debug("Load path %s", path.c_str()); CodecHandlePointer p; using std::cerr; void * codecHandle = dlopen (path.c_str() , RTLD_LAZY); @@ -265,7 +265,7 @@ CodecDescriptor::loadCodec (std::string path) void CodecDescriptor::unloadCodec (CodecHandlePointer p) { - // _debug("Unload codec %s\n", p.first->getCodecName().c_str()); + // _debug("Unload codec %s", p.first->getCodecName().c_str()); using std::cerr; destroy_t* destroyCodec = (destroy_t*) dlsym (p.second , "destroy"); diff --git a/sflphone-common/src/audio/codecs/gsmcodec.cpp b/sflphone-common/src/audio/codecs/gsmcodec.cpp index 8543dec2b5..9116d76a94 100644 --- a/sflphone-common/src/audio/codecs/gsmcodec.cpp +++ b/sflphone-common/src/audio/codecs/gsmcodec.cpp @@ -42,10 +42,10 @@ class Gsm : public AudioCodec _bandwidth = 29.2; if (! (_decode_gsmhandle = gsm_create())) - printf ("ERROR: decode_gsm_create\n"); + printf ("ERROR: decode_gsm_create"); if (! (_encode_gsmhandle = gsm_create())) - printf ("AudioCodec: ERROR: encode_gsm_create\n"); + printf ("AudioCodec: ERROR: encode_gsm_create"); } Gsm (const Gsm&); @@ -58,18 +58,18 @@ class Gsm : public AudioCodec } virtual int codecDecode (short * dst, unsigned char * src, unsigned int size) { - // _debug("Decoded by gsm \n"); + // _debug("Decoded by gsm "); (void) size; if (gsm_decode (_decode_gsmhandle, (gsm_byte*) src, (gsm_signal*) dst) < 0) - printf ("ERROR: gsm_decode\n"); + printf ("ERROR: gsm_decode"); return 320; } virtual int codecEncode (unsigned char * dst, short * src, unsigned int size) { - // _debug("Encoded by gsm \n"); + // _debug("Encoded by gsm "); (void) size; gsm_encode (_encode_gsmhandle, (gsm_signal*) src, (gsm_byte*) dst); return 33; diff --git a/sflphone-common/src/audio/mainbuffer.cpp b/sflphone-common/src/audio/mainbuffer.cpp index 3f2751b6ba..052e729259 100644 --- a/sflphone-common/src/audio/mainbuffer.cpp +++ b/sflphone-common/src/audio/mainbuffer.cpp @@ -63,7 +63,7 @@ CallIDSet* MainBuffer::getCallIDSet (CallID call_id) bool MainBuffer::createCallIDSet (CallID set_id) { - _debug ("---- MainBuffer::createCallIDSet %s\n", set_id.c_str()); + _debug ("---- MainBuffer::createCallIDSet %s", set_id.c_str()); CallIDSet* newCallIDSet = new CallIDSet; @@ -77,21 +77,21 @@ bool MainBuffer::createCallIDSet (CallID set_id) bool MainBuffer::removeCallIDSet (CallID set_id) { - _debug ("---- MainBuffer::removeCallIDSet %s\n", set_id.c_str()); + _debug ("---- MainBuffer::removeCallIDSet %s", set_id.c_str()); CallIDSet* callid_set = getCallIDSet (set_id); if (callid_set != NULL) { if (_callIDMap.erase (set_id) != 0) { - _debug (" callid set %s erased!\n", set_id.c_str()); + _debug (" callid set %s erased!", set_id.c_str()); return true; } else { - _debug (" error while removing callid set %s!\n", set_id.c_str()); + _debug (" error while removing callid set %s!", set_id.c_str()); return false; } } else { - _debug (" callid set %s does not exist!\n", set_id.c_str()); + _debug (" callid set %s does not exist!", set_id.c_str()); return false; } @@ -99,7 +99,7 @@ bool MainBuffer::removeCallIDSet (CallID set_id) void MainBuffer::addCallIDtoSet (CallID set_id, CallID call_id) { - _debug ("---- MainBuffer::addCallIDtoSet %s in %s\n", set_id.c_str(), call_id.c_str()); + _debug ("---- MainBuffer::addCallIDtoSet %s in %s", set_id.c_str(), call_id.c_str()); CallIDSet* callid_set = getCallIDSet (set_id); callid_set->insert (call_id); @@ -108,18 +108,18 @@ void MainBuffer::addCallIDtoSet (CallID set_id, CallID call_id) void MainBuffer::removeCallIDfromSet (CallID set_id, CallID call_id) { - _debug ("---- MainBuffer::removeCallIDfromSet element %s from %s\n", call_id.c_str(), set_id.c_str()); + _debug ("---- MainBuffer::removeCallIDfromSet element %s from %s", call_id.c_str(), set_id.c_str()); CallIDSet* callid_set = getCallIDSet (set_id); if (callid_set != NULL) { if (callid_set->erase (call_id) != 0) { - _debug (" callid %s erased from set %s!\n", call_id.c_str(), set_id.c_str()); + _debug (" callid %s erased from set %s!", call_id.c_str(), set_id.c_str()); } else { - _debug (" error while removing callid %s from set %s!\n", call_id.c_str(), set_id.c_str()); + _debug (" error while removing callid %s from set %s!", call_id.c_str(), set_id.c_str()); } } else { - _debug (" callid set %s does not exist!\n", set_id.c_str()); + _debug (" callid set %s does not exist!", set_id.c_str()); } } @@ -130,7 +130,7 @@ RingBuffer* MainBuffer::getRingBuffer (CallID call_id) RingBufferMap::iterator iter = _ringBufferMap.find (call_id); if (iter == _ringBufferMap.end()) { - // _debug("ringBuffer with ID: \"%s\" doesn't exist! \n", call_id.c_str()); + // _debug("ringBuffer with ID: \"%s\" doesn't exist! ", call_id.c_str()); return NULL; } else return iter->second; @@ -140,7 +140,7 @@ RingBuffer* MainBuffer::getRingBuffer (CallID call_id) RingBuffer* MainBuffer::createRingBuffer (CallID call_id) { - _debug ("---- MainBuffer::createRingBuffer callid %s\n", call_id.c_str()); + _debug ("---- MainBuffer::createRingBuffer callid %s", call_id.c_str()); RingBuffer* newRingBuffer = new RingBuffer (SIZEBUF, call_id); @@ -153,20 +153,20 @@ RingBuffer* MainBuffer::createRingBuffer (CallID call_id) bool MainBuffer::removeRingBuffer (CallID call_id) { - _debug ("---- MainBuffer::removeRingBuffer call_id %s\n", call_id.c_str()); + _debug ("---- MainBuffer::removeRingBuffer call_id %s", call_id.c_str()); RingBuffer* ring_buffer = getRingBuffer (call_id); if (ring_buffer != NULL) { if (_ringBufferMap.erase (call_id) != 0) { - _debug (" ringbuffer %s removed!\n", call_id.c_str()); + _debug (" ringbuffer %s removed!", call_id.c_str()); return true; } else { - _debug (" error while deleting ringbuffer %s!\n", call_id.c_str()); + _debug (" error while deleting ringbuffer %s!", call_id.c_str()); return false; } } else { - _debug (" error ringbuffer %s does not exist!\n", call_id.c_str()); + _debug (" error ringbuffer %s does not exist!", call_id.c_str()); return true; } } @@ -177,7 +177,7 @@ void MainBuffer::bindCallID (CallID call_id1, CallID call_id2) ost::MutexLock guard (_mutex); - _debug ("---- MainBuffer::bindCallID %s and callid %s\n", call_id1.c_str(), call_id2.c_str()); + _debug ("---- MainBuffer::bindCallID %s and callid %s", call_id1.c_str(), call_id2.c_str()); RingBuffer* ring_buffer; CallIDSet* callid_set; @@ -210,7 +210,7 @@ void MainBuffer::unBindCallID (CallID call_id1, CallID call_id2) ost::MutexLock guard (_mutex); - _debug ("---- MainBuffer::unBindCallID %s and callid %s\n", call_id1.c_str(), call_id2.c_str()); + _debug ("---- MainBuffer::unBindCallID %s and callid %s", call_id1.c_str(), call_id2.c_str()); removeCallIDfromSet (call_id1, call_id2); removeCallIDfromSet (call_id2, call_id1); @@ -261,7 +261,7 @@ void MainBuffer::unBindAll (CallID call_id) CallIDSet::iterator iter_set = temp_set.begin(); - _debug ("MainBuffer::unBindAll\n"); + _debug ("MainBuffer::unBindAll"); while (iter_set != temp_set.end()) { CallID call_id_in_set = *iter_set; @@ -369,12 +369,12 @@ int MainBuffer::getData (void *buffer, int toCopy, unsigned short volume, CallID int MainBuffer::getDataByID (void *buffer, int toCopy, unsigned short volume, CallID call_id, CallID reader_id) { - // _debug("MainBuffer::getDataByID in buffer %s by %s \n", call_id.c_str(), reader_id.c_str()); + // _debug("MainBuffer::getDataByID in buffer %s by %s ", call_id.c_str(), reader_id.c_str()); RingBuffer* ring_buffer = getRingBuffer (call_id); if (ring_buffer == NULL) { - // _debug("Output RingBuffer ID: \"%s\" does not exist!\n", call_id.c_str()); + // _debug("Output RingBuffer ID: \"%s\" does not exist!", call_id.c_str()); return 0; } @@ -396,22 +396,22 @@ int MainBuffer::availForGet (CallID call_id) return 0; if (callid_set->empty()) { - _debug ("CallIDSet with ID: \"%s\" is empty!\n", call_id.c_str()); + _debug ("CallIDSet with ID: \"%s\" is empty!", call_id.c_str()); return 0; } if (callid_set->size() == 1) { CallIDSet::iterator iter_id = callid_set->begin(); - // _debug("MainBuffer::availForGet availForGetByID(%s,%s)\n", (*iter_id).c_str(), call_id.c_str()); + // _debug("MainBuffer::availForGet availForGetByID(%s,%s)", (*iter_id).c_str(), call_id.c_str()); if ( (call_id != default_id) && (*iter_id == call_id)) { - _debug ("This problem should not occur since we have %i element\n", (int) callid_set->size()); + _debug ("This problem should not occur since we have %i element", (int) callid_set->size()); } // else return availForGetByID (*iter_id, call_id); } else { - // _debug("CallIDSet with ID: \"%s\" is a conference!\n", call_id.c_str()); + // _debug("CallIDSet with ID: \"%s\" is a conference!", call_id.c_str()); int avail_bytes = 99999; int nb_bytes; CallIDSet::iterator iter_id = callid_set->begin(); @@ -433,14 +433,14 @@ int MainBuffer::availForGetByID (CallID call_id, CallID reader_id) { if ( (call_id != default_id) && (reader_id == call_id)) { - _debug ("**********************************************************************\n"); - _debug ("Error an RTP session ring buffer is not supposed to have a readpointer on tiself\n"); + _debug ("**********************************************************************"); + _debug ("Error an RTP session ring buffer is not supposed to have a readpointer on tiself"); } RingBuffer* ringbuffer = getRingBuffer (call_id); if (ringbuffer == NULL) { - _debug ("Error: ring buffer does not exist\n"); + _debug ("Error: ring buffer does not exist"); return 0; } else return ringbuffer->AvailForGet (reader_id); @@ -450,7 +450,7 @@ int MainBuffer::availForGetByID (CallID call_id, CallID reader_id) int MainBuffer::discard (int toDiscard, CallID call_id) { - // _debug("MainBuffer::discard\n"); + // _debug("MainBuffer::discard"); ost::MutexLock guard (_mutex); @@ -460,17 +460,17 @@ int MainBuffer::discard (int toDiscard, CallID call_id) return 0; if (callid_set->empty()) { - // _debug("CallIDSet with ID: \"%s\" is empty!\n", call_id.c_str()); + // _debug("CallIDSet with ID: \"%s\" is empty!", call_id.c_str()); return 0; } if (callid_set->size() == 1) { CallIDSet::iterator iter_id = callid_set->begin(); - // _debug("Discard Data in \"%s\" RingBuffer for \"%s\" ReaderPointer\n",(*iter_id).c_str(),call_id.c_str()); + // _debug("Discard Data in \"%s\" RingBuffer for \"%s\" ReaderPointer",(*iter_id).c_str(),call_id.c_str()); return discardByID (toDiscard, *iter_id, call_id); } else { - // _debug("CallIDSet with ID: \"%s\" is a conference!\n", call_id.c_str()); + // _debug("CallIDSet with ID: \"%s\" is a conference!", call_id.c_str()); CallIDSet::iterator iter_id; for (iter_id = callid_set->begin(); iter_id != callid_set->end(); iter_id++) { @@ -501,7 +501,7 @@ void MainBuffer::flush (CallID call_id) { ost::MutexLock guard (_mutex); - // _debug("MainBuffer::flush\n"); + // _debug("MainBuffer::flush"); CallIDSet* callid_set = getCallIDSet (call_id); @@ -509,14 +509,14 @@ void MainBuffer::flush (CallID call_id) return; if (callid_set->empty()) { - // _debug("CallIDSet with ID: \"%s\" is empty!\n", call_id.c_str()); + // _debug("CallIDSet with ID: \"%s\" is empty!", call_id.c_str()); } if (callid_set->size() == 1) { CallIDSet::iterator iter_id = callid_set->begin(); flushByID (*iter_id, call_id); } else { - // _debug("CallIDSet with ID: \"%s\" is a conference!\n", call_id.c_str()); + // _debug("CallIDSet with ID: \"%s\" is a conference!", call_id.c_str()); CallIDSet::iterator iter_id; for (iter_id = callid_set->begin(); iter_id != callid_set->end(); iter_id++) { @@ -548,12 +548,12 @@ void MainBuffer::flushByID (CallID call_id, CallID reader_id) void MainBuffer::flushAllBuffers() { - // _debug("-------------------------- flushAllBuffers()\n"); + // _debug("-------------------------- flushAllBuffers()"); RingBufferMap::iterator iter_buffer = _ringBufferMap.begin(); while (iter_buffer != _ringBufferMap.end()) { - // _debug("-------------------------- flushing: %s\n",iter_buffer->second->getBufferId().c_str()); + // _debug("-------------------------- flushing: %s",iter_buffer->second->getBufferId().c_str()); iter_buffer->second->flushAll(); @@ -564,7 +564,7 @@ void MainBuffer::flushAllBuffers() void MainBuffer::stateInfo() { - _debug ("MainBuffer state info\n"); + _debug ("MainBuffer state info"); CallIDMap::iterator iter_map = _callIDMap.begin(); @@ -585,7 +585,7 @@ void MainBuffer::stateInfo() } } - _debug ("%s\n", dbg_str.c_str()); + _debug ("%s", dbg_str.c_str()); iter_map++; } diff --git a/sflphone-common/src/audio/pulseaudio/audiostream.cpp b/sflphone-common/src/audio/pulseaudio/audiostream.cpp index 89986506ee..521574dca3 100644 --- a/sflphone-common/src/audio/pulseaudio/audiostream.cpp +++ b/sflphone-common/src/audio/pulseaudio/audiostream.cpp @@ -73,7 +73,7 @@ bool AudioStream::drainStream (void) { if (_audiostream) { - _debug ("Draining stream\n"); + _debug ("Draining stream"); pa_operation * operation; pa_threaded_mainloop_lock (_mainloop); @@ -81,7 +81,7 @@ AudioStream::drainStream (void) if ( (operation = pa_stream_drain (_audiostream, success_cb, _mainloop))) { while (pa_operation_get_state (operation) != PA_OPERATION_DONE) { if (!_context || pa_context_get_state (_context) != PA_CONTEXT_READY || !_audiostream || pa_stream_get_state (_audiostream) != PA_STREAM_READY) { - _debug ("Connection died: %s\n", _context ? pa_strerror (pa_context_errno (_context)) : "NULL"); + _debug ("Connection died: %s", _context ? pa_strerror (pa_context_errno (_context)) : "NULL"); pa_operation_unref (operation); break; } else { @@ -99,7 +99,7 @@ AudioStream::drainStream (void) bool AudioStream::disconnectStream (void) { - _debug ("Destroy audio streams\n"); + _debug ("Destroy audio streams"); // pa_threaded_mainloop_lock (_mainloop); @@ -121,7 +121,7 @@ AudioStream::stream_state_callback (pa_stream* s, void* user_data) { pa_threaded_mainloop *m; - _debug ("AudioStream::stream_state_callback :: The state of the stream changed\n"); + _debug ("AudioStream::stream_state_callback :: The state of the stream changed"); assert (s); m = (pa_threaded_mainloop*) user_data; @@ -130,26 +130,26 @@ AudioStream::stream_state_callback (pa_stream* s, void* user_data) switch (pa_stream_get_state (s)) { case PA_STREAM_CREATING: - _debug ("Stream is creating...\n"); + _debug ("Stream is creating..."); break; case PA_STREAM_TERMINATED: - _debug ("Stream is terminating...\n"); + _debug ("Stream is terminating..."); break; case PA_STREAM_READY: - _debug ("Stream successfully created, connected to %s\n", pa_stream_get_device_name (s)); + _debug ("Stream successfully created, connected to %s", pa_stream_get_device_name (s)); // pa_stream_cork( s, 0, NULL, NULL); break; case PA_STREAM_UNCONNECTED: - _debug ("Stream unconnected\n"); + _debug ("Stream unconnected"); break; case PA_STREAM_FAILED: default: - _debug ("Stream error - Sink/Source doesn't exists: %s\n" , pa_strerror (pa_context_errno (pa_stream_get_context (s)))); + _debug ("Stream error - Sink/Source doesn't exists: %s" , pa_strerror (pa_context_errno (pa_stream_get_context (s)))); exit (0); break; } @@ -185,7 +185,7 @@ AudioStream::createStream (pa_context* c) pa_buffer_attr* attributes = (pa_buffer_attr*) malloc (sizeof (pa_buffer_attr)); if (! (s = pa_stream_new (c, _streamDescription.c_str() , &sample_spec, &channel_map))) - _debug ("%s: pa_stream_new() failed : %s\n" , _streamDescription.c_str(), pa_strerror (pa_context_errno (c))); + _debug ("%s: pa_stream_new() failed : %s" , _streamDescription.c_str(), pa_strerror (pa_context_errno (c))); assert (s); @@ -216,7 +216,7 @@ AudioStream::createStream (pa_context* c) } else if (_streamType == UPLOAD_STREAM) { pa_stream_connect_upload (s , 1024); } else { - _debug ("Stream type unknown \n"); + _debug ("Stream type unknown "); } pa_stream_set_state_callback (s , stream_state_callback, _mainloop); diff --git a/sflphone-common/src/audio/pulseaudio/pulselayer.cpp b/sflphone-common/src/audio/pulseaudio/pulselayer.cpp index 8f5b94c5a0..b82a15428d 100644 --- a/sflphone-common/src/audio/pulseaudio/pulselayer.cpp +++ b/sflphone-common/src/audio/pulseaudio/pulselayer.cpp @@ -25,7 +25,7 @@ int framesPerBuffer = 2048; static void playback_callback (pa_stream* s, size_t bytes, void* userdata) { - // _debug("playback_callback\n"); + // _debug("playback_callback"); assert (s && bytes); assert (bytes > 0); @@ -35,7 +35,7 @@ static void playback_callback (pa_stream* s, size_t bytes, void* userdata) static void capture_callback (pa_stream* s, size_t bytes, void* userdata) { - // _debug("capture_callback\n"); + // _debug("capture_callback"); assert (s && bytes); assert (bytes > 0); @@ -46,25 +46,25 @@ static void capture_callback (pa_stream* s, size_t bytes, void* userdata) /* static void stream_suspended_callback (pa_stream *s UNUSED, void *userdata UNUSED) { - _debug("PulseLayer::Stream Suspended\n"); + _debug("PulseLayer::Stream Suspended"); } */ /* static void stream_moved_callback(pa_stream *s UNUSED, void *userdata UNUSED) { - _debug("PulseLayer::Stream Moved\n"); + _debug("PulseLayer::Stream Moved"); } */ static void playback_underflow_callback (pa_stream* s, void* userdata UNUSED) { - _debug ("PulseLayer::Buffer Underflow\n"); + _debug ("PulseLayer::Buffer Underflow"); // const pa_timing_info* info = pa_stream_get_timing_info(s); - // _debug(" pa write_index: %l\n", (long)(info->write_index)); - // _debug(" pa write_index_corupt (if not 0): %i\n", info->write_index_corrupt); - // _debug(" pa read_index: %l\n", (long)(info->read_index)); - // _debug(" pa read_index_corrupt (if not 0): %i\n", info->read_index_corrupt); + // _debug(" pa write_index: %l", (long)(info->write_index)); + // _debug(" pa write_index_corupt (if not 0): %i", info->write_index_corrupt); + // _debug(" pa read_index: %l", (long)(info->read_index)); + // _debug(" pa read_index_corrupt (if not 0): %i", info->read_index_corrupt); // fill in audio buffer twice the prebuffering value to restart playback @@ -77,7 +77,7 @@ static void playback_underflow_callback (pa_stream* s, void* userdata UNUSED) static void playback_overflow_callback (pa_stream* s UNUSED, void* userdata UNUSED) { - _debug ("PulseLayer::Buffer OverFlow\n"); + _debug ("PulseLayer::Buffer OverFlow"); //PulseLayer* pulse = (PulseLayer*) userdata; // pa_stream_drop (s); // pa_stream_trigger (s, NULL, NULL); @@ -91,7 +91,7 @@ PulseLayer::PulseLayer (ManagerImpl* manager) , playback() , record() { - _debug ("PulseLayer::Pulse audio constructor: Create context\n"); + _debug ("PulseLayer::Pulse audio constructor: Create context"); _urgentRingBuffer.createReadPointer(); dcblocker = new DcBlocker(); @@ -116,7 +116,7 @@ PulseLayer::~PulseLayer (void) bool PulseLayer::closeLayer (void) { - _debug ("PulseLayer::closeLayer :: Destroy pulselayer\n"); + _debug ("PulseLayer::closeLayer :: Destroy pulselayer"); // Commenting the line below will make the // PulseLayer to close immediately, not @@ -153,7 +153,7 @@ PulseLayer::closeLayer (void) void PulseLayer::connectPulseAudioServer (void) { - _debug ("PulseLayer::connectPulseAudioServer \n"); + _debug ("PulseLayer::connectPulseAudioServer "); setenv ("PULSE_PROP_media.role", "phone", 1); @@ -161,7 +161,7 @@ PulseLayer::connectPulseAudioServer (void) pa_threaded_mainloop_lock (m); - _debug ("Connect the context to the server\n"); + _debug ("Connect the context to the server"); pa_context_connect (context, NULL , flag , NULL); pa_context_set_state_callback (context, context_state_callback, this); @@ -170,7 +170,7 @@ PulseLayer::connectPulseAudioServer (void) // Run the main loop if (pa_context_get_state (context) != PA_CONTEXT_READY) { - _debug ("Error connecting to pulse audio server\n"); + _debug ("Error connecting to pulse audio server"); // pa_threaded_mainloop_unlock (m); } @@ -178,13 +178,13 @@ PulseLayer::connectPulseAudioServer (void) //serverinfo(); //muteAudioApps(99); - _debug ("Context creation done\n"); + _debug ("Context creation done"); } void PulseLayer::context_state_callback (pa_context* c, void* user_data) { - _debug ("PulseLayer::context_state_callback ::The state of the context changed\n"); + _debug ("PulseLayer::context_state_callback ::The state of the context changed"); PulseLayer* pulse = (PulseLayer*) user_data; assert (c && pulse->m); @@ -195,22 +195,22 @@ void PulseLayer::context_state_callback (pa_context* c, void* user_data) case PA_CONTEXT_AUTHORIZING: case PA_CONTEXT_SETTING_NAME: - _debug ("Waiting....\n"); + _debug ("Waiting...."); break; case PA_CONTEXT_READY: pulse->createStreams (c); - _debug ("Connection to PulseAudio server established\n"); + _debug ("Connection to PulseAudio server established"); break; case PA_CONTEXT_TERMINATED: - _debug ("Context terminated\n"); + _debug ("Context terminated"); break; case PA_CONTEXT_FAILED: default: - _debug (" Error : %s\n" , pa_strerror (pa_context_errno (c))); + _debug (" Error : %s" , pa_strerror (pa_context_errno (c))); pulse->disconnectAudioStream(); exit (0); break; @@ -219,7 +219,7 @@ void PulseLayer::context_state_callback (pa_context* c, void* user_data) bool PulseLayer::disconnectAudioStream (void) { - _debug (" PulseLayer::disconnectAudioStream( void ) \n"); + _debug (" PulseLayer::disconnectAudioStream( void ) "); closePlaybackStream(); @@ -234,7 +234,7 @@ bool PulseLayer::disconnectAudioStream (void) bool PulseLayer::createStreams (pa_context* c) { - _debug ("PulseLayer::createStreams\n"); + _debug ("PulseLayer::createStreams"); PulseLayerType * playbackParam = new PulseLayerType(); playbackParam->context = c; @@ -334,27 +334,27 @@ void PulseLayer::startStream (void) if (!is_started) { - _debug ("PulseLayer::Start Stream\n"); + _debug ("PulseLayer::Start Stream"); if (!m) { - _debug ("Creating PulseAudio MainLoop\n"); + _debug ("Creating PulseAudio MainLoop"); m = pa_threaded_mainloop_new(); assert (m); if (pa_threaded_mainloop_start (m) < 0) { - _debug ("Failed starting the mainloop\n"); + _debug ("Failed starting the mainloop"); } } if (!context) { - _debug ("Creating new PulseAudio Context\n"); + _debug ("Creating new PulseAudio Context"); pa_threaded_mainloop_lock (m); // Instanciate a context if (! (context = pa_context_new (pa_threaded_mainloop_get_api (m) , "SFLphone"))) - _debug ("Error while creating the context\n"); + _debug ("Error while creating the context"); pa_threaded_mainloop_unlock (m); @@ -381,7 +381,7 @@ PulseLayer::stopStream (void) if (is_started) { - _debug ("PulseLayer::Stop Audio Stream\n"); + _debug ("PulseLayer::Stop Audio Stream"); pa_stream_flush (playback->pulseStream(), NULL, NULL); pa_stream_flush (record->pulseStream(), NULL, NULL); @@ -391,7 +391,7 @@ PulseLayer::stopStream (void) disconnectAudioStream(); - _debug ("Disconnecting PulseAudio context\n"); + _debug ("Disconnecting PulseAudio context"); if (context) { @@ -402,7 +402,7 @@ PulseLayer::stopStream (void) context = NULL; } - _debug ("Freeing Pulseaudio mainloop\n"); + _debug ("Freeing Pulseaudio mainloop"); if (m) { pa_threaded_mainloop_free (m); @@ -420,7 +420,7 @@ PulseLayer::stopStream (void) // void PulseLayer::underflow (pa_stream* s UNUSED, void* userdata UNUSED) //{ -// _debug ("PulseLayer::Buffer Underflow\n"); +// _debug ("PulseLayer::Buffer Underflow"); //} /* @@ -438,7 +438,7 @@ void PulseLayer::processPlaybackData (void) // Handle the data for the speakers if (playback && (playback->pulseStream()) && (pa_stream_get_state (playback->pulseStream()) == PA_STREAM_READY)) { - // _debug("PulseLayer::processPlaybackData()\n"); + // _debug("PulseLayer::processPlaybackData()"); // If the playback buffer is full, we don't overflow it; wait for it to have free space if (pa_stream_writable_size (playback->pulseStream()) == 0) @@ -467,7 +467,7 @@ void PulseLayer::processData (void) // Handle the data for the speakers if (playback && (playback->pulseStream()) && (pa_stream_get_state (playback->pulseStream()) == PA_STREAM_READY)) { - // _debug("PulseLayer::processPlaybackData()\n"); + // _debug("PulseLayer::processPlaybackData()"); // If the playback buffer is full, we don't overflow it; wait for it to have free space if (pa_stream_writable_size (playback->pulseStream()) == 0) @@ -499,17 +499,17 @@ void PulseLayer::writeToSpeaker (void) int writeableSize = pa_stream_writable_size (playback->pulseStream()); - // _debug("PulseLayer writablesize : %i\n", writeableSize); + // _debug("PulseLayer writablesize : %i", writeableSize); if (writeableSize < 0) - _debug ("PulseLayer playback error : %s\n", pa_strerror (writeableSize)); + _debug ("PulseLayer playback error : %s", pa_strerror (writeableSize)); if (urgentAvailBytes > writeableSize) { - // _debug("urgentAvailBytes: %i\n", urgentAvailBytes); + // _debug("urgentAvailBytes: %i", urgentAvailBytes); - // _debug("Play Urgent!\n"); + // _debug("Play Urgent!"); out = (SFLDataFormat*) pa_xmalloc (writeableSize); _urgentRingBuffer.Get (out, writeableSize, 100); @@ -533,11 +533,11 @@ void PulseLayer::writeToSpeaker (void) if (tone != 0) { - // _debug("PlayTone writeableSize: %i\n", writeableSize); + // _debug("PlayTone writeableSize: %i", writeableSize); if (playback->getStreamState() == PA_STREAM_READY) { - // _debug("Play Sine Tone!\n"); + // _debug("Play Sine Tone!"); out = (SFLDataFormat*) pa_xmalloc (writeableSize); int copied = tone->getNext (out, writeableSize / sizeof (SFLDataFormat), 100); @@ -553,7 +553,7 @@ void PulseLayer::writeToSpeaker (void) else if (file_tone != 0) { if (playback->getStreamState() == PA_STREAM_READY) { - // _debug("Play File Tone!\n"); + // _debug("Play File Tone!"); out = (SFLDataFormat*) pa_xmalloc (writeableSize); int copied = file_tone->getNext (out, writeableSize / sizeof (SFLDataFormat), 100); @@ -614,7 +614,7 @@ void PulseLayer::writeToSpeaker (void) int nbSample = _converter->upsampleData ( (SFLDataFormat*) out, rsmpl_out, _mainBufferSampleRate, _audioSampleRate, nb_sample_down); if ( (nbSample*sizeof (SFLDataFormat)) > (unsigned int) writeableSize) - _debug ("Error: nbsbyte exceed buffer length\n"); + _debug ("Error: nbsbyte exceed buffer length"); // pa_threaded_mainloop_lock (m); pa_stream_write (playback->pulseStream(), rsmpl_out, nbSample*sizeof (SFLDataFormat), NULL, 0, PA_SEEK_RELATIVE); @@ -666,10 +666,10 @@ void PulseLayer::readFromMic (void) int readableSize = pa_stream_readable_size (record->pulseStream()); - // _debug("readableSize: %i\n", readableSize); + // _debug("readableSize: %i", readableSize); if (pa_stream_peek (record->pulseStream() , (const void**) &data , &r) < 0 || !data) { - _debug ("pa_stream_peek() failed: %s\n" , pa_strerror (pa_context_errno (context))); + _debug ("pa_stream_peek() failed: %s" , pa_strerror (pa_context_errno (context))); } if (data != 0) { @@ -683,7 +683,7 @@ void PulseLayer::readFromMic (void) SFLDataFormat* rsmpl_out = (SFLDataFormat*) pa_xmalloc (readableSize); - // _debug("Byte read: %i\n", r); + // _debug("Byte read: %i", r); int nbSample = r / sizeof (SFLDataFormat); int nb_sample_up = nbSample; @@ -709,7 +709,7 @@ void PulseLayer::readFromMic (void) } if (pa_stream_drop (record->pulseStream()) < 0) { - //_debug("pa_stream_drop() failed: %s\n" , pa_strerror( pa_context_errno( context) )); + //_debug("pa_stream_drop() failed: %s" , pa_strerror( pa_context_errno( context) )); } // pa_threaded_mainloop_unlock (m); @@ -717,10 +717,10 @@ void PulseLayer::readFromMic (void) static void retrieve_server_info (pa_context *c UNUSED, const pa_server_info *i, void *userdata UNUSED) { - _debug ("Server Info: Process owner : %s\n" , i->user_name); - _debug ("\t\tServer name : %s - Server version = %s\n" , i->server_name, i->server_version); - _debug ("\t\tDefault sink name : %s\n" , i->default_sink_name); - _debug ("\t\tDefault source name : %s\n" , i->default_source_name); + _debug ("Server Info: Process owner : %s" , i->user_name); + _debug ("\t\tServer name : %s - Server version = %s" , i->server_name, i->server_version); + _debug ("\t\tDefault sink name : %s" , i->default_sink_name); + _debug ("\t\tDefault source name : %s" , i->default_source_name); } static void reduce_sink_list_cb (pa_context *c UNUSED, const pa_sink_input_info *i, int eol, void *userdata) @@ -728,10 +728,10 @@ static void reduce_sink_list_cb (pa_context *c UNUSED, const pa_sink_input_info PulseLayer* pulse = (PulseLayer*) userdata; if (!eol) { - //_debug("Sink Info: index : %i\n" , i->index); - //_debug("\t\tClient : %i\n" , i->client); - //_debug("\t\tVolume : %i\n" , i->volume.values[0]); - //_debug("\t\tChannels : %i\n" , i->volume.channels); + //_debug("Sink Info: index : %i" , i->index); + //_debug("\t\tClient : %i" , i->client); + //_debug("\t\tVolume : %i" , i->volume.values[0]); + //_debug("\t\tChannels : %i" , i->volume.channels); if (strcmp (i->name , PLAYBACK_STREAM_NAME) != 0) pulse->setSinkVolume (i->index , i->volume.channels, 10); } @@ -742,11 +742,11 @@ static void restore_sink_list_cb (pa_context *c UNUSED, const pa_sink_input_info PulseLayer* pulse = (PulseLayer*) userdata; if (!eol) { - //_debug("Sink Info: index : %i\n" , i->index); - //_debug("\t\tSink name : -%s-\n" , i->name); - //_debug("\t\tClient : %i\n" , i->client); - //_debug("\t\tVolume : %i\n" , i->volume.values[0]); - //_debug("\t\tChannels : %i\n" , i->volume.channels); + //_debug("Sink Info: index : %i" , i->index); + //_debug("\t\tSink name : -%s-" , i->name); + //_debug("\t\tClient : %i" , i->client); + //_debug("\t\tVolume : %i" , i->volume.values[0]); + //_debug("\t\tChannels : %i" , i->volume.channels); if (strcmp (i->name , PLAYBACK_STREAM_NAME) != 0) pulse->setSinkVolume (i->index , i->volume.channels, 100); } @@ -806,7 +806,7 @@ void PulseLayer::setSinkVolume (int index, int channels, int volume) pa_volume_t vol = PA_VOLUME_NORM * ( (double) volume / 100) ; pa_cvolume_set (&cvolume , channels , vol); - _debug ("Set sink volume of index %i\n" , index); + _debug ("Set sink volume of index %i" , index); pa_context_set_sink_input_volume (context, index, &cvolume, NULL, NULL) ; } @@ -818,7 +818,7 @@ void PulseLayer::setSourceVolume (int index, int channels, int volume) pa_volume_t vol = PA_VOLUME_NORM * ( (double) volume / 100) ; pa_cvolume_set (&cvolume , channels , vol); - _debug ("Set source volume of index %i\n" , index); + _debug ("Set source volume of index %i" , index); pa_context_set_source_volume_by_index (context, index, &cvolume, NULL, NULL); } diff --git a/sflphone-common/src/audio/ringbuffer.cpp b/sflphone-common/src/audio/ringbuffer.cpp index 0eb146f397..6e08859c70 100644 --- a/sflphone-common/src/audio/ringbuffer.cpp +++ b/sflphone-common/src/audio/ringbuffer.cpp @@ -54,7 +54,7 @@ RingBuffer::~RingBuffer() void RingBuffer::flush (CallID call_id) { - _debug ("flush: reinit \"%s\" readpointer in \"%s\" ringbuffer\n", call_id.c_str(), buffer_id.c_str()); + _debug ("flush: reinit \"%s\" readpointer in \"%s\" ringbuffer", call_id.c_str(), buffer_id.c_str()); storeReadPointer (mEnd, call_id); } @@ -62,14 +62,14 @@ RingBuffer::flush (CallID call_id) void RingBuffer::flushAll () { - // _debug("flushall: reinit all readpointer in \"%s\" ringbuffer\n", buffer_id.c_str()); + // _debug("flushall: reinit all readpointer in \"%s\" ringbuffer", buffer_id.c_str()); - // _debug("------------------------------ flushAll() in \"%s\" ringbuffer\n", buffer_id.c_str()); + // _debug("------------------------------ flushAll() in \"%s\" ringbuffer", buffer_id.c_str()); ReadPointer::iterator iter_pointer = _readpointer.begin(); while (iter_pointer != _readpointer.end()) { - // _debug("------------------------------ reinit readpointer %s\n", iter_pointer->first.c_str()); + // _debug("------------------------------ reinit readpointer %s", iter_pointer->first.c_str()); iter_pointer->second = mEnd; iter_pointer++; @@ -89,8 +89,8 @@ RingBuffer::putLen() int length = (mEnd + mBufferSize - mStart) % mBufferSize; - // _debug("RingBuffer::putLen length %i\n", length); - // _debug(" *RingBuffer::putLen: buffer_id %s, mStart %i, mEnd %i, length %i, buffersie %i\n", buffer_id.c_str(), mStart, mEnd, length, mBufferSize); + // _debug("RingBuffer::putLen length %i", length); + // _debug(" *RingBuffer::putLen: buffer_id %s, mStart %i, mEnd %i, length %i, buffersie %i", buffer_id.c_str(), mStart, mEnd, length, mBufferSize); return length; } @@ -101,7 +101,7 @@ RingBuffer::getLen (CallID call_id) int mStart = getReadPointer (call_id); int length = (mEnd + mBufferSize - mStart) % mBufferSize; - // _debug(" *RingBuffer::getLen: buffer_id %s, call_id %s, mStart %i, mEnd %i, length %i, buffersie %i\n", buffer_id.c_str(), call_id.c_str(), mStart, mEnd, length, mBufferSize); + // _debug(" *RingBuffer::getLen: buffer_id %s, call_id %s, mStart %i, mEnd %i, length %i, buffersie %i", buffer_id.c_str(), call_id.c_str(), mStart, mEnd, length, mBufferSize); return length; } @@ -111,7 +111,7 @@ RingBuffer::debug() { int mStart = getSmallestReadPointer(); - _debug ("Start=%d; End=%d; BufferSize=%d\n", mStart, mEnd, mBufferSize); + _debug ("Start=%d; End=%d; BufferSize=%d", mStart, mEnd, mBufferSize); } int @@ -121,17 +121,17 @@ RingBuffer::getReadPointer (CallID call_id) if (getNbReadPointer() == 0) return 0; - // _debug("RingBuffer::getReadPointer() id %s\n", call_id.c_str()); + // _debug("RingBuffer::getReadPointer() id %s", call_id.c_str()); ReadPointer::iterator iter = _readpointer.find (call_id); if (iter == _readpointer.end()) { - // _debug(" RingBuffer::getReadPointer Error read pointer size: %i\n", _readpointer.size()); - // _debug(" RingBuffer::getReadPointer Error read pointer \"%s\" is null\n", call_id.c_str()); + // _debug(" RingBuffer::getReadPointer Error read pointer size: %i", _readpointer.size()); + // _debug(" RingBuffer::getReadPointer Error read pointer \"%s\" is null", call_id.c_str()); ReadPointer::iterator iter2; for (iter2 = _readpointer.begin(); iter2 != _readpointer.end(); iter2++) { - // x_debug(" RingBuffer::getReadPointer list avail pointer \"%s\"\n", iter2->first.c_str()); + // x_debug(" RingBuffer::getReadPointer list avail pointer \"%s\"", iter2->first.c_str()); } return 0; @@ -169,9 +169,9 @@ RingBuffer::storeReadPointer (int pointer_value, CallID call_id) if (iter != _readpointer.end()) { iter->second = pointer_value; - // _debug("store read pointer call_id %s, size: %i \n",call_id.c_str(), _readpointer.size()); + // _debug("store read pointer call_id %s, size: %i ",call_id.c_str(), _readpointer.size()); } else { - _debug ("storeReadPointer: Cannot find \"%s\" readPointer in \"%s\" ringbuffer\n", call_id.c_str(), buffer_id.c_str()); + _debug ("storeReadPointer: Cannot find \"%s\" readPointer in \"%s\" ringbuffer", call_id.c_str(), buffer_id.c_str()); } } @@ -181,10 +181,10 @@ void RingBuffer::createReadPointer (CallID call_id) { - _debug ("---- createReadPointer ringbuffer_id %s, call_id %s\n", buffer_id.c_str(), call_id.c_str()); + _debug ("---- createReadPointer ringbuffer_id %s, call_id %s", buffer_id.c_str(), call_id.c_str()); _readpointer.insert (pair<CallID, int> (call_id, mEnd)); - _debug ("---- createReadPointer ringbuffer_id %s, size %i\n", buffer_id.c_str(), (int) _readpointer.size()); + _debug ("---- createReadPointer ringbuffer_id %s, size %i", buffer_id.c_str(), (int) _readpointer.size()); } @@ -193,10 +193,10 @@ void RingBuffer::removeReadPointer (CallID call_id) { - _debug ("---- removeReadPointer ringbuffer_id %s, call_id %s\n", buffer_id.c_str(), call_id.c_str()); + _debug ("---- removeReadPointer ringbuffer_id %s, call_id %s", buffer_id.c_str(), call_id.c_str()); _readpointer.erase (call_id); - _debug ("---- removeReadPointer ringbuffer_id %s, size %i\n", buffer_id.c_str(), (int) _readpointer.size()); + _debug ("---- removeReadPointer ringbuffer_id %s, size %i", buffer_id.c_str(), (int) _readpointer.size()); } @@ -227,8 +227,8 @@ int RingBuffer::AvailForPut() { // Always keep 4 bytes safe (?) - // z_debug("RingBuffer::AvailForPut: putLen %i\n", putLen()); - // _debug("RingBuffer::AvailForPut %s --------------------\n", buffer_id.c_str()); + // z_debug("RingBuffer::AvailForPut: putLen %i", putLen()); + // _debug("RingBuffer::AvailForPut %s --------------------", buffer_id.c_str()); return (mBufferSize-4) - putLen(); } @@ -241,9 +241,9 @@ RingBuffer::Put (void* buffer, int toCopy, unsigned short volume) int block; int copied; int pos; - // _debug("RingBuffer::Put buffer_id %s, call_id %s --------------------\n", buffer_id.c_str(), call_id.c_str()); + // _debug("RingBuffer::Put buffer_id %s, call_id %s --------------------", buffer_id.c_str(), call_id.c_str()); int len = putLen(); - // _debug(" RingBuffer::Put bufferid %s, putlen %i\n", buffer_id.c_str(), len); + // _debug(" RingBuffer::Put bufferid %s, putlen %i", buffer_id.c_str(), len); if (toCopy > (mBufferSize-4) - len) toCopy = (mBufferSize-4) - len; @@ -302,7 +302,7 @@ int RingBuffer::AvailForGet (CallID call_id) { // Used space - // _debug("RingBuffer::AvailForGet buffer_id %s, call_id %s --------------------\n", buffer_id.c_str(), call_id.c_str()); + // _debug("RingBuffer::AvailForGet buffer_id %s, call_id %s --------------------", buffer_id.c_str(), call_id.c_str()); return getLen (call_id); } @@ -323,10 +323,10 @@ RingBuffer::Get (void *buffer, int toCopy, unsigned short volume, CallID call_id int copied; - // _debug("RingBuffer::Get buffer_id %s, call_id %s --------------------\n", buffer_id.c_str(), call_id.c_str()); + // _debug("RingBuffer::Get buffer_id %s, call_id %s --------------------", buffer_id.c_str(), call_id.c_str()); int len = getLen (call_id); - // _debug(" RingBuffer::Get bufferid %s, getlen %i\n", buffer_id.c_str(), len); + // _debug(" RingBuffer::Get bufferid %s, getlen %i", buffer_id.c_str(), len); if (toCopy > len) toCopy = len; @@ -375,7 +375,7 @@ RingBuffer::Get (void *buffer, int toCopy, unsigned short volume, CallID call_id int RingBuffer::Discard (int toDiscard, CallID call_id) { - // _debug("RingBuffer::Discard buffer_id %s, call_id %s --------------------\n", buffer_id.c_str(), call_id.c_str()); + // _debug("RingBuffer::Discard buffer_id %s, call_id %s --------------------", buffer_id.c_str(), call_id.c_str()); int len = getLen (call_id); int mStart = getReadPointer (call_id); diff --git a/sflphone-common/src/audio/samplerateconverter.cpp b/sflphone-common/src/audio/samplerateconverter.cpp index 29a3cc286b..8d115a2556 100644 --- a/sflphone-common/src/audio/samplerateconverter.cpp +++ b/sflphone-common/src/audio/samplerateconverter.cpp @@ -104,7 +104,7 @@ int SamplerateConverter::upsampleData (SFLDataFormat* dataIn , SFLDataFormat* da { double upsampleFactor = (double) samplerate2 / samplerate1 ; - //_debug("factor = %f\n" , upsampleFactor); + //_debug("factor = %f" , upsampleFactor); int nbSamplesMax = (int) (samplerate2 * getFramesize() / 1000); nbSamplesMax = nbSamplesMax*4; @@ -116,16 +116,16 @@ int SamplerateConverter::upsampleData (SFLDataFormat* dataIn , SFLDataFormat* da src_data.output_frames = (int) floor (upsampleFactor * nbSamples); src_data.src_ratio = upsampleFactor; src_data.end_of_input = 0; // More data will come - // _debug(" upsample %d %d %f %d\n" , src_data.input_frames , src_data.output_frames, src_data.src_ratio , nbSamples); + // _debug(" upsample %d %d %f %d" , src_data.input_frames , src_data.output_frames, src_data.src_ratio , nbSamples); // Override libsamplerate conversion function Short2FloatArray (dataIn , _floatBufferDownSpkr, nbSamples); //src_short_to_float_array (dataIn , _floatBufferDownSpkr, nbSamples); - //_debug("upsample %d %f %d\n" , src_data.output_frames, src_data.src_ratio , nbSamples); + //_debug("upsample %d %f %d" , src_data.output_frames, src_data.src_ratio , nbSamples); src_process (_src_state_spkr, &src_data); - // _debug(" upsample %d %d %d\n" , samplerate1, samplerate2 , nbSamples); + // _debug(" upsample %d %d %d" , samplerate1, samplerate2 , nbSamples); nbSamples = (src_data.output_frames_gen > nbSamplesMax) ? nbSamplesMax : src_data.output_frames_gen; src_float_to_short_array (_floatBufferUpSpkr, dataOut, nbSamples); - //_debug("upsample %d %d %d\n" , samplerate1, samplerate2 , nbSamples); + //_debug("upsample %d %d %d" , samplerate1, samplerate2 , nbSamples); } return nbSamples; @@ -136,7 +136,7 @@ int SamplerateConverter::downsampleData (SFLDataFormat* dataIn , SFLDataFormat* { double downsampleFactor = (double) samplerate1 / samplerate2; - //_debug("factor = %f\n" , downsampleFactor); + //_debug("factor = %f" , downsampleFactor); int nbSamplesMax = (int) (samplerate1 * getFramesize() / 1000); nbSamplesMax = nbSamplesMax*4; @@ -149,15 +149,15 @@ int SamplerateConverter::downsampleData (SFLDataFormat* dataIn , SFLDataFormat* src_data.output_frames = (int) floor (downsampleFactor * nbSamples); src_data.src_ratio = downsampleFactor; src_data.end_of_input = 0; // More data will come - //_debug("downsample %d %f %d\n" , src_data.output_frames, src_data.src_ratio , nbSamples); + //_debug("downsample %d %f %d" , src_data.output_frames, src_data.src_ratio , nbSamples); // Override libsamplerate conversion function Short2FloatArray (dataIn , _floatBufferUpMic, nbSamples); //src_short_to_float_array (dataIn, _floatBufferUpMic, nbSamples); - //_debug("downsample %d %f %d\n" , src_data.output_frames, src_data.src_ratio , nbSamples); + //_debug("downsample %d %f %d" , src_data.output_frames, src_data.src_ratio , nbSamples); src_process (_src_state_mic, &src_data); - //_debug("downsample %d %f %d\n" , src_data.output_frames, src_data.src_ratio , nbSamples); + //_debug("downsample %d %f %d" , src_data.output_frames, src_data.src_ratio , nbSamples); nbSamples = (src_data.output_frames_gen > nbSamplesMax) ? nbSamplesMax : src_data.output_frames_gen; - //_debug("downsample %d %f %d\n" , src_data.output_frames, src_data.src_ratio , nbSamples); + //_debug("downsample %d %f %d" , src_data.output_frames, src_data.src_ratio , nbSamples); src_float_to_short_array (_floatBufferDownMic , dataOut , nbSamples); } diff --git a/sflphone-common/src/audio/sound/audiofile.cpp b/sflphone-common/src/audio/sound/audiofile.cpp index 136938a1a5..f11b43cbe6 100644 --- a/sflphone-common/src/audio/sound/audiofile.cpp +++ b/sflphone-common/src/audio/sound/audiofile.cpp @@ -63,7 +63,7 @@ AudioFile::loadFile (const std::string& filename, AudioCodec* codec , unsigned i // no filename to load if (filename.empty()) { - _debug ("Unable to open audio file: filename is empty\n"); + _debug ("Unable to open audio file: filename is empty"); return false; } @@ -73,7 +73,7 @@ AudioFile::loadFile (const std::string& filename, AudioCodec* codec , unsigned i if (!file.is_open()) { // unable to load the file - _debug ("Unable to open audio file %s\n", filename.c_str()); + _debug ("Unable to open audio file %s", filename.c_str()); return false; } diff --git a/sflphone-common/src/conference.cpp b/sflphone-common/src/conference.cpp index 6266a30323..667664dfb6 100644 --- a/sflphone-common/src/conference.cpp +++ b/sflphone-common/src/conference.cpp @@ -71,7 +71,7 @@ void Conference::setState (ConferenceState state) void Conference::add (CallID participant_id) { - _debug ("---- Conference:: add participant %s\n", participant_id.c_str()); + _debug ("---- Conference:: add participant %s", participant_id.c_str()); _participants.insert (participant_id); @@ -82,7 +82,7 @@ void Conference::add (CallID participant_id) void Conference::remove (CallID participant_id) { - _debug ("---- Conference::remove participant %s\n", participant_id.c_str()); + _debug ("---- Conference::remove participant %s", participant_id.c_str()); _participants.erase (participant_id); @@ -100,7 +100,7 @@ void Conference::bindParticipant (CallID participant_id) if (participant_id != (*iter)) { - _debug ("---- Conference:: bind callid %s with %s in conference add\n", participant_id.c_str(), (*iter).c_str()); + _debug ("---- Conference:: bind callid %s with %s in conference add", participant_id.c_str(), (*iter).c_str()); Manager::instance().getAudioDriver()->getMainBuffer()->bindCallID (participant_id, *iter); } @@ -109,7 +109,7 @@ void Conference::bindParticipant (CallID participant_id) } - _debug ("---- Conference::bind callid %s with default_id in conference add\n", participant_id.c_str()); + _debug ("---- Conference::bind callid %s with default_id in conference add", participant_id.c_str()); Manager::instance().getAudioDriver()->getMainBuffer()->bindCallID (participant_id); diff --git a/sflphone-common/src/config/config.cpp b/sflphone-common/src/config/config.cpp index ec3f7bab8d..80ede64799 100644 --- a/sflphone-common/src/config/config.cpp +++ b/sflphone-common/src/config/config.cpp @@ -26,6 +26,7 @@ #include <sys/stat.h> #include <errno.h> #include <iostream> +#include <string.h> namespace Conf { @@ -59,7 +60,7 @@ void ConfigTree::addDefaultValue (const std::pair<std::string, std::string>& tok std::string ConfigTree::getDefaultValue (const std::string& key) { - _debug ("Getting default value for %s\n", key.c_str()); + _debug ("Getting default value for %s", key.c_str()); std::map<std::string, std::string>::iterator it; it = _defaultValueMap.find (key); @@ -147,7 +148,7 @@ ConfigTree::getConfigTreeItemValue (const std::string& section, const std::strin return item->getValue(); } - _debug ("Option doesn't exist: [%s] %s\n", section.c_str(), itemName.c_str()); + _debug ("Option doesn't exist: [%s] %s", section.c_str(), itemName.c_str()); return getDefaultValue (itemName); } @@ -292,7 +293,7 @@ ConfigTree::saveConfigTree (const std::string& fileName) file.close(); if (chmod (fileName.c_str(), S_IRUSR | S_IWUSR)) { - _debug ("Failed to set permission on configuration file because: %s\n",strerror (errno)); + _debug ("Failed to set permission on configuration file because: %s",strerror (errno)); } return true; @@ -373,7 +374,7 @@ ConfigTree::populateFromFile (const std::string& fileName) file.close(); if (chmod (fileName.c_str(), S_IRUSR | S_IWUSR)) { - _debug ("Failed to set permission on configuration file because: %s\n",strerror (errno)); + _debug ("Failed to set permission on configuration file because: %s",strerror (errno)); } return 1; diff --git a/sflphone-common/src/dbus/callmanager.cpp b/sflphone-common/src/dbus/callmanager.cpp index b57968d698..805731809d 100644 --- a/sflphone-common/src/dbus/callmanager.cpp +++ b/sflphone-common/src/dbus/callmanager.cpp @@ -39,31 +39,31 @@ CallManager::placeCall (const std::string& accountID, const std::string& callID, const std::string& to) { - _debug ("CallManager::placeCall received\n"); + _debug ("CallManager::placeCall received"); // Check if a destination number is available - if (to == "") _debug ("No number entered - Call stopped\n"); + if (to == "") _debug ("No number entered - Call stopped"); else Manager::instance().outgoingCall (accountID, callID, to); } void CallManager::refuse (const std::string& callID) { - _debug ("CallManager::refuse received\n"); + _debug ("CallManager::refuse received"); Manager::instance().refuseCall (callID); } void CallManager::accept (const std::string& callID) { - _debug ("CallManager::accept received\n"); + _debug ("CallManager::accept received"); Manager::instance().answerCall (callID); } void CallManager::hangUp (const std::string& callID) { - _debug ("CallManager::hangUp received %s\n", callID.c_str()); + _debug ("CallManager::hangUp received %s", callID.c_str()); Manager::instance().hangupCall (callID); } @@ -71,7 +71,7 @@ CallManager::hangUp (const std::string& callID) void CallManager::hangUpConference (const std::string& confID) { - _debug ("CallManager::hangUpConference received %s\n", confID.c_str()); + _debug ("CallManager::hangUpConference received %s", confID.c_str()); Manager::instance().hangupConference (confID); } @@ -80,7 +80,7 @@ CallManager::hangUpConference (const std::string& confID) void CallManager::hold (const std::string& callID) { - _debug ("CallManager::hold received %s\n", callID.c_str()); + _debug ("CallManager::hold received %s", callID.c_str()); Manager::instance().onHoldCall (callID); } @@ -88,14 +88,14 @@ CallManager::hold (const std::string& callID) void CallManager::unhold (const std::string& callID) { - _debug ("CallManager::unhold received %s\n", callID.c_str()); + _debug ("CallManager::unhold received %s", callID.c_str()); Manager::instance().offHoldCall (callID); } void CallManager::transfert (const std::string& callID, const std::string& to) { - _debug ("CallManager::transfert received\n"); + _debug ("CallManager::transfert received"); Manager::instance().transferCall (callID, to); } @@ -104,7 +104,7 @@ CallManager::transfert (const std::string& callID, const std::string& to) void CallManager::setVolume (const std::string& device, const double& value) { - _debug ("CallManager::setVolume received\n"); + _debug ("CallManager::setVolume received"); if (device == "speaker") { Manager::instance().setSpkrVolume ( (int) (value*100.0)); @@ -118,13 +118,13 @@ CallManager::setVolume (const std::string& device, const double& value) double CallManager::getVolume (const std::string& device) { - _debug ("CallManager::getVolume received \n"); + _debug ("CallManager::getVolume received "); if (device == "speaker") { - _debug ("Current speaker = %d\n", Manager::instance().getSpkrVolume()); + _debug ("Current speaker = %d", Manager::instance().getSpkrVolume()); return Manager::instance().getSpkrVolume() /100.0; } else if (device == "mic") { - _debug ("Current mic = %d\n", Manager::instance().getMicVolume()); + _debug ("Current mic = %d", Manager::instance().getMicVolume()); return Manager::instance().getMicVolume() /100.0; } @@ -134,63 +134,63 @@ CallManager::getVolume (const std::string& device) void CallManager::joinParticipant (const std::string& sel_callID, const std::string& drag_callID) { - _debug ("CallManager::joinParticipant received %s, %s\n", sel_callID.c_str(), drag_callID.c_str()); + _debug ("CallManager::joinParticipant received %s, %s", sel_callID.c_str(), drag_callID.c_str()); Manager::instance().joinParticipant (sel_callID, drag_callID); } void CallManager::addParticipant (const std::string& callID, const std::string& confID) { - _debug ("CallManager::addParticipant received %s, %s\n", callID.c_str(), confID.c_str()); + _debug ("CallManager::addParticipant received %s, %s", callID.c_str(), confID.c_str()); Manager::instance().addParticipant (callID, confID); } void CallManager::addMainParticipant (const std::string& confID) { - _debug ("CallManager::addMainParticipant received %s\n", confID.c_str()); + _debug ("CallManager::addMainParticipant received %s", confID.c_str()); Manager::instance().addMainParticipant (confID); } void CallManager::detachParticipant (const std::string& callID) { - _debug ("CallManager::detachParticipant received %s\n", callID.c_str()); + _debug ("CallManager::detachParticipant received %s", callID.c_str()); Manager::instance().detachParticipant (callID, ""); } void CallManager::joinConference (const std::string& sel_confID, const std::string& drag_confID) { - _debug ("CallManager::joinConference received %s, %s\n", sel_confID.c_str(), drag_confID.c_str()); + _debug ("CallManager::joinConference received %s, %s", sel_confID.c_str(), drag_confID.c_str()); Manager::instance().joinConference (sel_confID, drag_confID); } void CallManager::holdConference (const std::string& confID) { - _debug ("CallManager::holdConference received %s\n", confID.c_str()); + _debug ("CallManager::holdConference received %s", confID.c_str()); Manager::instance().holdConference (confID); } void CallManager::unholdConference (const std::string& confID) { - _debug ("CallManager::unHoldConference received %s\n", confID.c_str()); + _debug ("CallManager::unHoldConference received %s", confID.c_str()); Manager::instance().unHoldConference (confID); } std::map< std::string, std::string > CallManager::getConferenceDetails (const std::string& callID) { - _debug ("CallManager::getCallDetails received\n"); + _debug ("CallManager::getCallDetails received"); return Manager::instance().getConferenceDetails (callID); } std::vector< std::string > CallManager::getConferenceList (void) { - _debug ("CallManager::getConferenceList\n"); + _debug ("CallManager::getConferenceList"); return Manager::instance().getConferenceList(); } @@ -203,14 +203,14 @@ CallManager::getParticipantList (const std::string& confID) void CallManager::setRecording (const std::string& callID) { - _debug ("CallManager::setRecording received\n"); + _debug ("CallManager::setRecording received"); Manager::instance().setRecordingCall (callID); } bool CallManager::getIsRecording (const std::string& callID) { - _debug ("CallManager::getIsRecording received \n"); + _debug ("CallManager::getIsRecording received "); return Manager::instance().isRecording (callID); } @@ -218,7 +218,7 @@ CallManager::getIsRecording (const std::string& callID) std::string CallManager::getCurrentCodecName (const std::string& callID) { - _debug ("CallManager::getCurrentCodecName received %s \n",Manager::instance().getCurrentCodecName (callID).c_str()); + _debug ("CallManager::getCurrentCodecName received %s ",Manager::instance().getCurrentCodecName (callID).c_str()); return Manager::instance().getCurrentCodecName (callID).c_str(); } @@ -226,7 +226,7 @@ CallManager::getCurrentCodecName (const std::string& callID) std::map< std::string, std::string > CallManager::getCallDetails (const std::string& callID) { - _debug ("CallManager::getCallDetails received\n"); + _debug ("CallManager::getCallDetails received"); return Manager::instance().getCallDetails (callID); } @@ -239,7 +239,7 @@ CallManager::getCallList (void) std::string CallManager::getCurrentCallID() { - _debug ("CallManager::getCurrentCallID received\n"); + _debug ("CallManager::getCurrentCallID received"); return Manager::instance().getCurrentCallId(); } @@ -271,7 +271,7 @@ sfl::AudioZrtpSession * CallManager::getAudioZrtpSession (const std::string& cal link = dynamic_cast<SIPVoIPLink *> (Manager::instance().getAccountLink (AccountNULL)); if (link == NULL) { - _debug ("Failed to get sip link\n"); + _debug ("Failed to get sip link"); throw CallManagerException(); } @@ -281,7 +281,7 @@ sfl::AudioZrtpSession * CallManager::getAudioZrtpSession (const std::string& cal audioRtp = call->getAudioRtp(); if (audioRtp == NULL) { - _debug ("Failed to get AudioRtpFactory\n"); + _debug ("Failed to get AudioRtpFactory"); throw CallManagerException(); } @@ -290,7 +290,7 @@ sfl::AudioZrtpSession * CallManager::getAudioZrtpSession (const std::string& cal zSession = audioRtp->getAudioZrtpSession(); if (zSession == NULL) { - _debug ("Failed to get AudioZrtpSession\n"); + _debug ("Failed to get AudioZrtpSession"); throw CallManagerException(); } @@ -300,7 +300,7 @@ sfl::AudioZrtpSession * CallManager::getAudioZrtpSession (const std::string& cal void CallManager::setSASVerified (const std::string& callID) { - _debug ("CallManager::setSASVerified received for account %s\n", callID.c_str()); + _debug ("CallManager::setSASVerified received for account %s", callID.c_str()); try { sfl::AudioZrtpSession * zSession; @@ -315,7 +315,7 @@ CallManager::setSASVerified (const std::string& callID) void CallManager::resetSASVerified (const std::string& callID) { - _debug ("CallManager::resetSASVerified received for account %s\n", callID.c_str()); + _debug ("CallManager::resetSASVerified received for account %s", callID.c_str()); try { sfl::AudioZrtpSession * zSession; @@ -330,7 +330,7 @@ CallManager::resetSASVerified (const std::string& callID) void CallManager::setConfirmGoClear (const std::string& callID) { - _debug ("CallManager::setConfirmGoClear received for account %s\n", callID.c_str()); + _debug ("CallManager::setConfirmGoClear received for account %s", callID.c_str()); try { sfl::AudioZrtpSession * zSession; @@ -345,7 +345,7 @@ CallManager::setConfirmGoClear (const std::string& callID) void CallManager::requestGoClear (const std::string& callID) { - _debug ("CallManager::requestGoClear received for account %s\n", callID.c_str()); + _debug ("CallManager::requestGoClear received for account %s", callID.c_str()); try { sfl::AudioZrtpSession * zSession; @@ -361,7 +361,7 @@ void CallManager::acceptEnrollment (const std::string& callID, const bool& accepted) { - _debug ("CallManager::acceptEnrollment received for account %s\n", callID.c_str()); + _debug ("CallManager::acceptEnrollment received for account %s", callID.c_str()); try { sfl::AudioZrtpSession * zSession; @@ -377,7 +377,7 @@ void CallManager::setPBXEnrollment (const std::string& callID, const bool& yesNo) { - _debug ("CallManager::setPBXEnrollment received for account %s\n", callID.c_str()); + _debug ("CallManager::setPBXEnrollment received for account %s", callID.c_str()); try { sfl::AudioZrtpSession * zSession; diff --git a/sflphone-common/src/dbus/configurationmanager.cpp b/sflphone-common/src/dbus/configurationmanager.cpp index 4f5e23df47..34fefc5316 100644 --- a/sflphone-common/src/dbus/configurationmanager.cpp +++ b/sflphone-common/src/dbus/configurationmanager.cpp @@ -38,14 +38,14 @@ ConfigurationManager::ConfigurationManager (DBus::Connection& connection) std::map< std::string, std::string > ConfigurationManager::getAccountDetails (const std::string& accountID) { - _debug ("ConfigurationManager::getAccountDetails\n"); + _debug ("ConfigurationManager::getAccountDetails"); return Manager::instance().getAccountDetails (accountID); } std::map< std::string, std::string > ConfigurationManager::getTlsSettingsDefault (void) { - _debug ("ConfigurationManager::getTlsDefaultSettings\n"); + _debug ("ConfigurationManager::getTlsDefaultSettings"); std::map<std::string, std::string> tlsSettingsDefault; tlsSettingsDefault.insert (std::pair<std::string, std::string> (TLS_CA_LIST_FILE, "")); @@ -270,7 +270,7 @@ ConfigurationManager::setTlsSettings (const std::string& section, const std::map std::map< std::string, std::string > ConfigurationManager::getCredential (const std::string& accountID, const int32_t& index) { - _debug ("ConfigurationManager::getCredential number %i for accountID %s\n", index, accountID.c_str()); + _debug ("ConfigurationManager::getCredential number %i for accountID %s", index, accountID.c_str()); std::string credentialIndex; std::stringstream streamOut; @@ -294,7 +294,7 @@ ConfigurationManager::getCredential (const std::string& accountID, const int32_t int32_t ConfigurationManager::getNumberOfCredential (const std::string& accountID) { - _debug ("ConfigurationManager::getNumberOfCredential\n"); + _debug ("ConfigurationManager::getNumberOfCredential"); return Manager::instance().getConfigInt (accountID, CONFIG_CREDENTIAL_NUMBER); } @@ -310,14 +310,14 @@ void ConfigurationManager::setCredential (const std::string& accountID, const int32_t& index, const std::map< std::string, std::string >& details) { - _debug ("ConfigurationManager::setCredential received\n"); + _debug ("ConfigurationManager::setCredential received"); Manager::instance().setCredential (accountID, index, details); } void ConfigurationManager::deleteAllCredential (const std::string& accountID) { - _debug ("ConfigurationManager::deleteAllCredential received\n"); + _debug ("ConfigurationManager::deleteAllCredential received"); Manager::instance().deleteAllCredential (accountID); } @@ -325,21 +325,21 @@ void ConfigurationManager::setAccountDetails (const std::string& accountID, const std::map< std::string, std::string >& details) { - _debug ("ConfigurationManager::setAccountDetails received\n"); + _debug ("ConfigurationManager::setAccountDetails received"); Manager::instance().setAccountDetails (accountID, details); } void ConfigurationManager::sendRegister (const std::string& accountID, const int32_t& expire) { - _debug ("ConfigurationManager::sendRegister received\n"); + _debug ("ConfigurationManager::sendRegister received"); Manager::instance().sendRegister (accountID, expire); } std::string ConfigurationManager::addAccount (const std::map< std::string, std::string >& details) { - _debug ("ConfigurationManager::addAccount received\n"); + _debug ("ConfigurationManager::addAccount received"); return Manager::instance().addAccount (details); } @@ -347,14 +347,14 @@ ConfigurationManager::addAccount (const std::map< std::string, std::string >& de void ConfigurationManager::removeAccount (const std::string& accoundID) { - _debug ("ConfigurationManager::removeAccount received\n"); + _debug ("ConfigurationManager::removeAccount received"); return Manager::instance().removeAccount (accoundID); } std::vector< std::string > ConfigurationManager::getAccountList() { - _debug ("ConfigurationManager::getAccountList received\n"); + _debug ("ConfigurationManager::getAccountList received"); return Manager::instance().getAccountList(); } @@ -363,7 +363,7 @@ std::vector< std::string > ConfigurationManager::getToneLocaleList() { std::vector< std::string > ret; - _debug ("ConfigurationManager::getToneLocaleList received\n"); + _debug ("ConfigurationManager::getToneLocaleList received"); return ret; } @@ -372,7 +372,7 @@ std::string ConfigurationManager::getVersion() { std::string ret (""); - _debug ("ConfigurationManager::getVersion received\n"); + _debug ("ConfigurationManager::getVersion received"); return ret; } @@ -381,7 +381,7 @@ std::vector< std::string > ConfigurationManager::getRingtoneList() { std::vector< std::string > ret; - _debug ("ConfigurationManager::getRingtoneList received\n"); + _debug ("ConfigurationManager::getRingtoneList received"); return ret; } @@ -390,14 +390,14 @@ ConfigurationManager::getRingtoneList() std::vector< std::string > ConfigurationManager::getCodecList (void) { - _debug ("ConfigurationManager::getCodecList received\n"); + _debug ("ConfigurationManager::getCodecList received"); return Manager::instance().getCodecList(); } std::vector<std::string> ConfigurationManager::getSupportedTlsMethod (void) { - _debug ("ConfigurationManager::getSupportedTlsMethod received\n"); + _debug ("ConfigurationManager::getSupportedTlsMethod received"); std::vector<std::string> method; method.push_back ("Default"); method.push_back ("TLSv1"); @@ -410,21 +410,21 @@ ConfigurationManager::getSupportedTlsMethod (void) std::vector< std::string > ConfigurationManager::getCodecDetails (const int32_t& payload) { - _debug ("ConfigurationManager::getCodecDetails received\n"); + _debug ("ConfigurationManager::getCodecDetails received"); return Manager::instance().getCodecDetails (payload); } std::vector< std::string > ConfigurationManager::getActiveCodecList() { - _debug ("ConfigurationManager::getActiveCodecList received\n"); + _debug ("ConfigurationManager::getActiveCodecList received"); return Manager::instance().getActiveCodecList(); } void ConfigurationManager::setActiveCodecList (const std::vector< std::string >& list) { - _debug ("ConfigurationManager::setActiveCodecList received\n"); + _debug ("ConfigurationManager::setActiveCodecList received"); Manager::instance().setActiveCodecList (list); } @@ -432,77 +432,77 @@ ConfigurationManager::setActiveCodecList (const std::vector< std::string >& list std::vector< std::string > ConfigurationManager::getInputAudioPluginList() { - _debug ("ConfigurationManager::getInputAudioPluginList received\n"); + _debug ("ConfigurationManager::getInputAudioPluginList received"); return Manager::instance().getInputAudioPluginList(); } std::vector< std::string > ConfigurationManager::getOutputAudioPluginList() { - _debug ("ConfigurationManager::getOutputAudioPluginList received\n"); + _debug ("ConfigurationManager::getOutputAudioPluginList received"); return Manager::instance().getOutputAudioPluginList(); } void ConfigurationManager::setInputAudioPlugin (const std::string& audioPlugin) { - _debug ("ConfigurationManager::setInputAudioPlugin received\n"); + _debug ("ConfigurationManager::setInputAudioPlugin received"); return Manager::instance().setInputAudioPlugin (audioPlugin); } void ConfigurationManager::setOutputAudioPlugin (const std::string& audioPlugin) { - _debug ("ConfigurationManager::setOutputAudioPlugin received\n"); + _debug ("ConfigurationManager::setOutputAudioPlugin received"); return Manager::instance().setOutputAudioPlugin (audioPlugin); } std::vector< std::string > ConfigurationManager::getAudioOutputDeviceList() { - _debug ("ConfigurationManager::getAudioOutputDeviceList received\n"); + _debug ("ConfigurationManager::getAudioOutputDeviceList received"); return Manager::instance().getAudioOutputDeviceList(); } void ConfigurationManager::setAudioOutputDevice (const int32_t& index) { - _debug ("ConfigurationManager::setAudioOutputDevice received\n"); + _debug ("ConfigurationManager::setAudioOutputDevice received"); return Manager::instance().setAudioOutputDevice (index); } std::vector< std::string > ConfigurationManager::getAudioInputDeviceList() { - _debug ("ConfigurationManager::getAudioInputDeviceList received\n"); + _debug ("ConfigurationManager::getAudioInputDeviceList received"); return Manager::instance().getAudioInputDeviceList(); } void ConfigurationManager::setAudioInputDevice (const int32_t& index) { - _debug ("ConfigurationManager::setAudioInputDevice received\n"); + _debug ("ConfigurationManager::setAudioInputDevice received"); return Manager::instance().setAudioInputDevice (index); } std::vector< std::string > ConfigurationManager::getCurrentAudioDevicesIndex() { - _debug ("ConfigurationManager::getCurrentAudioDeviceIndex received\n"); + _debug ("ConfigurationManager::getCurrentAudioDeviceIndex received"); return Manager::instance().getCurrentAudioDevicesIndex(); } int32_t ConfigurationManager::getAudioDeviceIndex (const std::string& name) { - _debug ("ConfigurationManager::getAudioDeviceIndex received\n"); + _debug ("ConfigurationManager::getAudioDeviceIndex received"); return Manager::instance().getAudioDeviceIndex (name); } std::string ConfigurationManager::getCurrentAudioOutputPlugin (void) { - _debug ("ConfigurationManager::getCurrentAudioOutputPlugin received\n"); + _debug ("ConfigurationManager::getCurrentAudioOutputPlugin received"); return Manager::instance().getCurrentAudioOutputPlugin(); } @@ -511,7 +511,7 @@ std::vector< std::string > ConfigurationManager::getPlaybackDeviceList() { std::vector< std::string > ret; - _debug ("ConfigurationManager::getPlaybackDeviceList received\n"); + _debug ("ConfigurationManager::getPlaybackDeviceList received"); return ret; } @@ -519,7 +519,7 @@ std::vector< std::string > ConfigurationManager::getRecordDeviceList() { std::vector< std::string > ret; - _debug ("ConfigurationManager::getRecordDeviceList received\n"); + _debug ("ConfigurationManager::getRecordDeviceList received"); return ret; } @@ -645,70 +645,70 @@ std::string ConfigurationManager::getHistoryEnabled (void) void ConfigurationManager::startHidden (void) { - _debug ("Manager received startHidden\n"); + _debug ("Manager received startHidden"); Manager::instance().startHidden(); } int32_t ConfigurationManager::isStartHidden (void) { - _debug ("Manager received isStartHidden\n"); + _debug ("Manager received isStartHidden"); return Manager::instance().isStartHidden(); } void ConfigurationManager::switchPopupMode (void) { - _debug ("Manager received switchPopupMode\n"); + _debug ("Manager received switchPopupMode"); Manager::instance().switchPopupMode(); } int32_t ConfigurationManager::popupMode (void) { - _debug ("Manager received popupMode\n"); + _debug ("Manager received popupMode"); return Manager::instance().popupMode(); } void ConfigurationManager::setNotify (void) { - _debug ("Manager received setNotify\n"); + _debug ("Manager received setNotify"); Manager::instance().setNotify(); } int32_t ConfigurationManager::getNotify (void) { - _debug ("Manager received getNotify\n"); + _debug ("Manager received getNotify"); return Manager::instance().getNotify(); } void ConfigurationManager::setAudioManager (const int32_t& api) { - _debug ("Manager received setAudioManager\n"); + _debug ("Manager received setAudioManager"); Manager::instance().setAudioManager (api); } int32_t ConfigurationManager::getAudioManager (void) { - _debug ("Manager received getAudioManager\n"); + _debug ("Manager received getAudioManager"); return Manager::instance().getAudioManager(); } void ConfigurationManager::setMailNotify (void) { - _debug ("Manager received setMailNotify\n"); + _debug ("Manager received setMailNotify"); Manager::instance().setMailNotify(); } int32_t ConfigurationManager::getMailNotify (void) { - _debug ("Manager received getMailNotify\n"); + _debug ("Manager received getMailNotify"); return Manager::instance().getMailNotify(); } @@ -723,7 +723,7 @@ ConfigurationManager::getSipAddress (void) void ConfigurationManager::setSipAddress (const std::string& address) { - _debug ("Manager received setSipAddress: %s\n", address.c_str()); + _debug ("Manager received setSipAddress: %s", address.c_str()); Manager::instance().setSipAddress (address); } @@ -744,7 +744,7 @@ std::vector< std::string > ConfigurationManager::getAddressbookList (void) void ConfigurationManager::setAddressbookList (const std::vector< std::string >& list) { - _debug ("Manager received setAddressbookList\n") ; + _debug ("Manager received setAddressbookList") ; Manager::instance().setAddressbookList (list); } @@ -775,7 +775,7 @@ void ConfigurationManager::setHistory (const std::map <std::string, std::string> std::vector<std::string> ConfigurationManager::getAllIpInterface (void) { - _debug ("ConfigurationManager::getAllIpInterface received\n"); + _debug ("ConfigurationManager::getAllIpInterface received"); std::vector<std::string> vector; SIPVoIPLink * sipLink = NULL; diff --git a/sflphone-common/src/dbus/dbusmanagerimpl.cpp b/sflphone-common/src/dbus/dbusmanagerimpl.cpp index fbe35e56f9..61504e8782 100644 --- a/sflphone-common/src/dbus/dbusmanagerimpl.cpp +++ b/sflphone-common/src/dbus/dbusmanagerimpl.cpp @@ -46,7 +46,7 @@ DBusManagerImpl::exec() // Register accounts Manager::instance().initRegisterAccounts(); //getEvents(); - _debug ("Starting DBus event loop\n"); + _debug ("Starting DBus event loop"); _dispatcher.enter(); return 1; diff --git a/sflphone-common/src/dbus/instance.cpp b/sflphone-common/src/dbus/instance.cpp index 233978ae63..e70322d6fc 100644 --- a/sflphone-common/src/dbus/instance.cpp +++ b/sflphone-common/src/dbus/instance.cpp @@ -32,7 +32,7 @@ void Instance::Register (const int32_t& pid UNUSED, const std::string& name UNUSED) { - _debug ("Instance::register received\n"); + _debug ("Instance::register received"); count++; } @@ -40,7 +40,7 @@ Instance::Register (const int32_t& pid UNUSED, void Instance::Unregister (const int32_t& pid UNUSED) { - _debug ("Instance::unregister received\n"); + _debug ("Instance::unregister received"); count --; if (count <= 0) { diff --git a/sflphone-common/src/history/historymanager.cpp b/sflphone-common/src/history/historymanager.cpp index d56d3f6715..9ea8f933d3 100644 --- a/sflphone-common/src/history/historymanager.cpp +++ b/sflphone-common/src/history/historymanager.cpp @@ -109,7 +109,7 @@ int HistoryManager::load_history_items_map (Conf::ConfigTree *history_list, int bool HistoryManager::save_history_to_file (Conf::ConfigTree *history_list) { - _debug ("Saving history in XDG directory: %s\n", _history_path.data()); + _debug ("Saving history in XDG directory: %s", _history_path.data()); return history_list->saveConfigTree (_history_path.data()); } @@ -165,7 +165,7 @@ int HistoryManager::create_history_path (std::string path) if (mkdir (userdata.data(), 0755) != 0) { // If directory creation failed if (errno != EEXIST) { - _debug ("Cannot create directory: %s\n", strerror (errno)); + _debug ("Cannot create directory: %s", strerror (errno)); return -1; } } diff --git a/sflphone-common/src/iax/iaxcall.cpp b/sflphone-common/src/iax/iaxcall.cpp index 93ecdcdfdb..04899f17bc 100644 --- a/sflphone-common/src/iax/iaxcall.cpp +++ b/sflphone-common/src/iax/iaxcall.cpp @@ -40,37 +40,37 @@ IAXCall::setFormat (int format) switch (format) { case AST_FORMAT_ULAW: - printf ("PCMU\n"); + printf ("PCMU"); setAudioCodec (PAYLOAD_CODEC_ULAW); break; case AST_FORMAT_GSM: - printf ("GSM\n"); + printf ("GSM"); setAudioCodec (PAYLOAD_CODEC_GSM); break; case AST_FORMAT_ALAW: - printf ("ALAW\n"); + printf ("ALAW"); setAudioCodec (PAYLOAD_CODEC_ALAW); break; case AST_FORMAT_ILBC: - printf ("ILBC\n"); + printf ("ILBC"); setAudioCodec (PAYLOAD_CODEC_ILBC_20); break; case AST_FORMAT_SPEEX: - printf ("SPEEX\n"); + printf ("SPEEX"); setAudioCodec (PAYLOAD_CODEC_SPEEX_8000); break; default: - printf ("Error audio codec type %i not supported!\n", format); + printf ("Error audio codec type %i not supported!", format); setAudioCodec ( (AudioCodecType) -1); break; } - printf ("\n"); + printf (""); } @@ -118,7 +118,7 @@ IAXCall::getSupportedFormat() } } - printf ("\n"); + printf (""); return format; @@ -137,27 +137,27 @@ IAXCall::getFirstMatchingFormat (int needles) switch (map[iter]) { case PAYLOAD_CODEC_ULAW: - printf ("PCMU\n"); + printf ("PCMU"); format = AST_FORMAT_ULAW; break; case PAYLOAD_CODEC_GSM: - printf ("GSM\n"); + printf ("GSM"); format = AST_FORMAT_GSM; break; case PAYLOAD_CODEC_ALAW: - printf ("PCMA\n"); + printf ("PCMA"); format = AST_FORMAT_ALAW; break; case PAYLOAD_CODEC_ILBC_20: - printf ("ILBC\n"); + printf ("ILBC"); format = AST_FORMAT_ILBC; break; case PAYLOAD_CODEC_SPEEX_8000: - printf ("SPEEX\n"); + printf ("SPEEX"); format = AST_FORMAT_SPEEX; break; @@ -171,7 +171,7 @@ IAXCall::getFirstMatchingFormat (int needles) } - printf ("\n"); + printf (""); return 0; } diff --git a/sflphone-common/src/iax/iaxvoiplink.cpp b/sflphone-common/src/iax/iaxvoiplink.cpp index fd486a14fe..bc41b6e166 100644 --- a/sflphone-common/src/iax/iaxvoiplink.cpp +++ b/sflphone-common/src/iax/iaxvoiplink.cpp @@ -37,13 +37,13 @@ #define MUSIC_ONHOLD true -#define CHK_VALID_CALL if (call == NULL) { _debug("IAX: Call doesn't exists\n"); \ +#define CHK_VALID_CALL if (call == NULL) { _debug("IAX: Call doesn't exists"); \ return false; } IAXVoIPLink::IAXVoIPLink (const AccountID& accountID) : VoIPLink (accountID) { - // _debug("IAXVoIPLink::IAXVoIPLink : creating eventhread \n "); + // _debug("IAXVoIPLink::IAXVoIPLink : creating eventhread "); _evThread = new EventThread (this); _regSession = NULL; _nextRefreshStamp = 0; @@ -116,13 +116,13 @@ IAXVoIPLink::init() port = iax_init (port); if (port < 0) { - _debug ("IAX Warning: already initialize on port %d\n", last_port); + _debug ("IAX Warning: already initialize on port %d", last_port); port = RANDOM_IAX_PORT; } else if (port == IAX_FAILURE) { _debug ("IAX Fail to start on port %d", last_port); port = RANDOM_IAX_PORT; } else { - _debug ("IAX Info: listening on port %d\n", last_port); + _debug ("IAX Info: listening on port %d", last_port); _localPort = last_port; returnValue = true; _evThread->start(); @@ -141,7 +141,7 @@ IAXVoIPLink::init() } if (port == IAX_FAILURE || nbTry==0) { - _debug ("Fail to initialize iax\n"); + _debug ("Fail to initialize iax"); initDone (false); } @@ -195,7 +195,7 @@ void IAXVoIPLink::terminateOneCall (const CallID& id) IAXCall* call = getIAXCall (id); if (call) { - _debug ("IAXVoIPLink::terminateOneCall()::the call is deleted, should close recording file \n"); + _debug ("IAXVoIPLink::terminateOneCall()::the call is deleted, should close recording file "); delete call; call = 0; } @@ -218,7 +218,7 @@ IAXVoIPLink::getEvent() continue; } - //_debug ("Receive IAX Event: %d (0x%x)\n", event->etype, event->etype); + //_debug ("Receive IAX Event: %d (0x%x)", event->etype, event->etype); call = iaxFindCallBySession (event->session); @@ -234,7 +234,7 @@ IAXVoIPLink::getEvent() iaxHandlePrecallEvent (event); } - // _debug("IAXVoIPLink::getEvent() : timestamp %i \n",event->ts); + // _debug("IAXVoIPLink::getEvent() : timestamp %i ",event->ts); iax_event_free (event); } @@ -263,8 +263,8 @@ IAXVoIPLink::getEvent() if ( (Manager::instance().incomingCallWaiting() > 0) && Manager::instance().hasCurrentCall()) { int countTime_modulo = countTime % 4000; - // _debug("countTime: %i\n", countTime); - // _debug("countTime_modulo: %i\n", countTime_modulo); + // _debug("countTime: %i", countTime); + // _debug("countTime_modulo: %i", countTime_modulo); if ( (countTime_modulo - countTime) < 0) { Manager::instance().notificationIncomingCall(); @@ -317,7 +317,7 @@ IAXVoIPLink::sendAudioFromMic (void) if (ac && audiolayer) { - // _debug("Send sound\n"); + // _debug("Send sound"); // audiolayer->getMainBuffer()->flush(currentCall->getCallId()); audiolayer->getMainBuffer()->setInternalSamplingRate (ac->getClockRate()); @@ -366,7 +366,7 @@ IAXVoIPLink::sendAudioFromMic (void) // Make sure the session and the call still exists. if (currentCall->getSession() && micDataEncoded != NULL) { if (iax_send_voice (currentCall->getSession(), currentCall->getFormat(), micDataEncoded, compSize, nbSample_) == -1) { - _debug ("IAX: Error sending voice data.\n"); + _debug ("IAX: Error sending voice data."); } } @@ -426,9 +426,9 @@ IAXVoIPLink::sendRegister (AccountID id) if (!_regSession) { _debug ("Error when generating new session for register"); } else { - _debug ("IAX Sending registration to %s with user %s\n", account->getHostname().c_str() , account->getUsername().c_str()); + _debug ("IAX Sending registration to %s with user %s", account->getHostname().c_str() , account->getUsername().c_str()); int val = iax_register (_regSession, account->getHostname().data(), account->getUsername().data(), account->getPassword().data(), 120); - _debug ("Return value: %d\n", val); + _debug ("Return value: %d", val); // set the time-out to 15 seconds, after that, resend a registration request. // until we unregister. _nextRefreshStamp = time (NULL) + 10; @@ -466,7 +466,7 @@ IAXVoIPLink::sendUnregister (AccountID id) _nextRefreshStamp = 0; - _debug ("IAX2 send unregister\n"); + _debug ("IAX2 send unregister"); account->setRegistrationState (Unregistered); return SUCCESS; @@ -522,7 +522,7 @@ IAXVoIPLink::answer (const CallID& id) bool IAXVoIPLink::hangup (const CallID& id) { - _debug ("IAXVoIPLink::hangup() : function called once hangup \n"); + _debug ("IAXVoIPLink::hangup() : function called once hangup "); IAXCall* call = getIAXCall (id); std::string reason = "Dumped Call"; CHK_VALID_CALL; @@ -550,7 +550,7 @@ IAXVoIPLink::hangup (const CallID& id) bool IAXVoIPLink::peerHungup (const CallID& id) { - _debug ("IAXVoIPLink::peerHangup() : function called once hangup \n"); + _debug ("IAXVoIPLink::peerHangup() : function called once hangup "); IAXCall* call = getIAXCall (id); std::string reason = "Dumped Call"; CHK_VALID_CALL; @@ -584,7 +584,7 @@ IAXVoIPLink::onhold (const CallID& id) audiolayer->getMainBuffer()->unBindAll (call->getCallId()); - //if (call->getState() == Call::Hold) { _debug("Call is already on hold\n"); return false; } + //if (call->getState() == Call::Hold) { _debug("Call is already on hold"); return false; } _mutexIAX.enterMutex(); iax_quelch_moh (call->getSession() , MUSIC_ONHOLD); @@ -603,7 +603,7 @@ IAXVoIPLink::offhold (const CallID& id) Manager::instance().addStream (call->getCallId()); - //if (call->getState() == Call::Active) { _debug("Call is already active\n"); return false; } + //if (call->getState() == Call::Active) { _debug("Call is already active"); return false; } _mutexIAX.enterMutex(); iax_unquelch (call->getSession()); _mutexIAX.leaveMutex(); @@ -700,7 +700,7 @@ IAXVoIPLink::iaxOutgoingInvite (IAXCall* call) newsession = iax_session_new(); if (!newsession) { - _debug ("IAX Error: Can't make new session for a new call\n"); + _debug ("IAX Error: Can't make new session for a new call"); return false; } @@ -715,7 +715,7 @@ IAXVoIPLink::iaxOutgoingInvite (IAXCall* call) audio_format_preferred = call->getFirstMatchingFormat (call->getSupportedFormat()); audio_format_capability = call->getSupportedFormat(); - _debug ("IAX New call: %s\n", strNum.c_str()); + _debug ("IAX New call: %s", strNum.c_str()); iax_call (newsession, username.c_str(), username.c_str(), strNum.c_str(), lang, wait, audio_format_preferred, audio_format_capability); return true; @@ -798,10 +798,10 @@ IAXVoIPLink::iaxHandleCallEvent (iax_event* event, IAXCall* call) _debug ("IAX_EVENT_ACCEPT: codec format: "); if (event->ies.format) { - printf ("%i\n", event->ies.format); + printf ("%i", event->ies.format); call->setFormat (event->ies.format); } else { - printf ("no codec format\n"); + printf ("no codec format"); } break; @@ -820,12 +820,12 @@ IAXVoIPLink::iaxHandleCallEvent (iax_event* event, IAXCall* call) if (event->ies.format) { // Should not get here, should have been set in EVENT_ACCEPT - printf ("%i\n", event->ies.format); + printf ("%i", event->ies.format); call->setFormat (event->ies.format); } { - printf ("no codec format\n"); + printf ("no codec format"); } Manager::instance().peerAnsweredCall (id); @@ -849,7 +849,7 @@ IAXVoIPLink::iaxHandleCallEvent (iax_event* event, IAXCall* call) case IAX_EVENT_VOICE: //if (!audiolayer->isCaptureActive ()) // audiolayer->startStream (); - // _debug("IAX_EVENT_VOICE: \n"); + // _debug("IAX_EVENT_VOICE: "); iaxHandleVoiceEvent (event, call); break; @@ -871,7 +871,7 @@ IAXVoIPLink::iaxHandleCallEvent (iax_event* event, IAXCall* call) if (Manager::instance().getConfigString (HOOKS, URLHOOK_IAX2_ENABLED) == "1") { if (strcmp ( (char*) event->data, "") != 0) { - _debug ("> IAX_EVENT_URL received: %s\n", event->data); + _debug ("> IAX_EVENT_URL received: %s", event->data); urlhook->addAction ( (char*) event->data, Manager::instance().getConfigString (HOOKS, URLHOOK_COMMAND)); } } @@ -885,7 +885,7 @@ IAXVoIPLink::iaxHandleCallEvent (iax_event* event, IAXCall* call) break; default: - _debug ("iaxHandleCallEvent: Unknown event type (in call event): %d\n", event->etype); + _debug ("iaxHandleCallEvent: Unknown event type (in call event): %d", event->etype); } } @@ -906,7 +906,7 @@ IAXVoIPLink::iaxHandleVoiceEvent (iax_event* event, IAXCall* call) if (!event->datalen) { // Skip this empty packet. - //_debug("IAX: Skipping empty jitter-buffer interpolated packet\n"); + //_debug("IAX: Skipping empty jitter-buffer interpolated packet"); return; } @@ -929,11 +929,11 @@ IAXVoIPLink::iaxHandleVoiceEvent (iax_event* event, IAXCall* call) // - subclass holds the voiceformat property. if (event->subclass && event->subclass != call->getFormat()) { - _debug ("iaxHandleVoiceEvent: no format found in call setting it to %i\n", event->subclass); + _debug ("iaxHandleVoiceEvent: no format found in call setting it to %i", event->subclass); call->setFormat (event->subclass); } - //_debug("Receive: len=%d, format=%d, _receiveDataDecoded=%p\n", event->datalen, call->getFormat(), _receiveDataDecoded); + //_debug("Receive: len=%d, format=%d, _receiveDataDecoded=%p", event->datalen, call->getFormat(), _receiveDataDecoded); // ac = call->getCodecMap().getCodec (call -> getAudioCodec()); data = (unsigned char*) event->data; @@ -944,7 +944,7 @@ IAXVoIPLink::iaxHandleVoiceEvent (iax_event* event, IAXCall* call) max = (int) (ac->getClockRate() * audiolayer->getFrameSize() / 1000); if (size > max) { - _debug ("The size %d is bigger than expected %d. Packet cropped. Ouch!\n", size, max); + _debug ("The size %d is bigger than expected %d. Packet cropped. Ouch!", size, max); size = max; } @@ -953,7 +953,7 @@ IAXVoIPLink::iaxHandleVoiceEvent (iax_event* event, IAXCall* call) nbInt16 = expandedSize/sizeof (int16); if (nbInt16 > max) { - _debug ("We have decoded an IAX VOICE packet larger than expected: %i VS %i. Cropping.\n", nbInt16, max); + _debug ("We have decoded an IAX VOICE packet larger than expected: %i VS %i. Cropping.", nbInt16, max); nbInt16 = max; } @@ -1012,7 +1012,7 @@ IAXVoIPLink::iaxHandleRegReply (iax_event* event) // Looking for the voicemail information //if( event->ies != 0 ) //new_voicemails = processIAXMsgCount(event->ies.msgcount); - //_debug("iax voicemail number notification: %i\n", new_voicemails); + //_debug("iax voicemail number notification: %i", new_voicemails); // Notify the client if new voicemail waiting for the current account //account_id = getAccountID(); //Manager::instance().startVoiceMessageNotification(account_id.c_str(), new_voicemails); @@ -1062,18 +1062,18 @@ IAXVoIPLink::iaxHandlePrecallEvent (iax_event* event) case IAX_EVENT_REGACK: case IAX_EVENT_REGREJ: - _debug ("IAX Registration Event in a pre-call setup\n"); + _debug ("IAX Registration Event in a pre-call setup"); break; case IAX_EVENT_REGREQ: // Received when someone wants to register to us!?! // Asterisk receives and answers to that, not us, we're a phone. - _debug ("Registration by a peer, don't allow it\n"); + _debug ("Registration by a peer, don't allow it"); break; case IAX_EVENT_CONNECT: // We've got an incoming call! Yikes! - _debug ("> IAX_EVENT_CONNECT (receive)\n"); + _debug ("> IAX_EVENT_CONNECT (receive)"); id = Manager::instance().getNewCallID(); @@ -1152,11 +1152,11 @@ IAXVoIPLink::iaxHandlePrecallEvent (iax_event* event) break; case IAX_IE_MSGCOUNT: - //_debug("messssssssssssssssssssssssssssssssssssssssssssssssages\n"); + //_debug("messssssssssssssssssssssssssssssssssssssssssssssssages"); break; default: - _debug ("IAXVoIPLink::iaxHandlePrecallEvent: Unknown event type (in precall): %d\n", event->etype); + _debug ("IAXVoIPLink::iaxHandlePrecallEvent: Unknown event type (in precall): %d", event->etype); } } diff --git a/sflphone-common/src/main.cpp b/sflphone-common/src/main.cpp index d023997021..72e2714e40 100644 --- a/sflphone-common/src/main.cpp +++ b/sflphone-common/src/main.cpp @@ -46,11 +46,11 @@ main (int argc, char **argv) if (argc == 2 && strcmp (argv[1], "--help") == 0) { - printf ("%1$s Daemon %2$s, by Savoir-Faire Linux 2004-2009\n\n", + printf ("%1$s Daemon %2$s, by Savoir-Faire Linux 2004-2009", PROGNAME, SFLPHONED_VERSION); - printf ("USAGE: sflphoned [--help]\nParameters: \n --help\tfor this message\n\n --port=3999\tchange the session port\n\n"); - printf ("See http://www.sflphone.org/ for more information\n"); + printf ("USAGE: sflphoned [--help]Parameters: --help\tfor this message --port=3999\tchange the session port"); + printf ("See http://www.sflphone.org/ for more information"); } else { FILE *fp; @@ -84,7 +84,7 @@ main (int argc, char **argv) if ( (dir = opendir (sfldir)) == NULL) { //Create it if (mkdir (sfldir, 0755) != 0) { - fprintf (stderr, "Creating directory %s failed. Exited.\n", sfldir); + fprintf (stderr, "Creating directory %s failed. Exited.", sfldir); exit (-1); } } @@ -95,14 +95,14 @@ main (int argc, char **argv) if ( (dir = opendir (sfldir)) == NULL) { //Create it if (mkdir (sfldir, 0755) != 0) { - fprintf (stderr, "Creating directory %s failed. Exited.\n", sfldir); + fprintf (stderr, "Creating directory %s failed. Exited.", sfldir); exit (-1); } } // PID file doesn't exists, create and write pid in it if ( (fp = fopen (homepid,"w")) == NULL) { - fprintf (stderr, "Creating PID file %s failed. Exited.\n", homepid); + fprintf (stderr, "Creating PID file %s failed. Exited.", homepid); exit (-1); } else { fputs (cPid , fp); @@ -119,11 +119,11 @@ main (int argc, char **argv) fclose (fp); if (kill (atoi (cOldPid), 0) == SUCCESS) { - fprintf (stderr, "There is already a sflphoned daemon running in the system. Starting Failed.\n"); + fprintf (stderr, "There is already a sflphoned daemon running in the system. Starting Failed."); exit (-1); } else { if ( (fp = fopen (homepid,"w")) == NULL) { - fprintf (stderr, "Writing to PID file %s failed. Exited.\n", homepid); + fprintf (stderr, "Writing to PID file %s failed. Exited.", homepid); exit (-1); } else { fputs (cPid , fp); @@ -155,7 +155,7 @@ main (int argc, char **argv) std::cerr << e.what() << std::endl; exit_code = -1; } catch (...) { - fprintf (stderr, "An exception occured when initializing the system.\n"); + fprintf (stderr, "An exception occured when initializing the system."); exit_code = -1; } diff --git a/sflphone-common/src/managerimpl.cpp b/sflphone-common/src/managerimpl.cpp index e8df4d0c8d..324ca8c76f 100644 --- a/sflphone-common/src/managerimpl.cpp +++ b/sflphone-common/src/managerimpl.cpp @@ -114,7 +114,7 @@ ManagerImpl::~ManagerImpl (void) // terminate(); delete _cleaner; _cleaner=0; - _debug ("%s stop correctly.\n", PROGNAME); + _debug ("%s stop correctly.", PROGNAME); } void @@ -126,7 +126,7 @@ ManagerImpl::init() initVolume(); if (_exist == 0) { - _debug ("Cannot create config file in your home directory\n"); + _debug ("Cannot create config file in your home directory"); } initAudioDriver(); @@ -159,23 +159,23 @@ ManagerImpl::init() void ManagerImpl::terminate() { - _debug ("ManagerImpl::terminate \n"); + _debug ("ManagerImpl::terminate "); saveConfig(); unloadAccountMap(); - _debug ("Unload DTMF Key \n"); + _debug ("Unload DTMF Key "); delete _dtmfKey; - _debug ("Unload Audio Driver \n"); + _debug ("Unload Audio Driver "); delete _audiodriver; _audiodriver = NULL; - _debug ("Unload Telephone Tone \n"); + _debug ("Unload Telephone Tone "); delete _telephoneTone; _telephoneTone = NULL; - _debug ("Unload Audio Codecs \n"); + _debug ("Unload Audio Codecs "); _codecDescriptorMap.deleteHandlePointer(); } @@ -189,7 +189,7 @@ ManagerImpl::isCurrentCall (const CallID& callId) bool ManagerImpl::hasCurrentCall() { - // _debug ("ManagerImpl::hasCurrentCall current call ID = %s\n", _currentCallId2.c_str()); + // _debug ("ManagerImpl::hasCurrentCall current call ID = %s", _currentCallId2.c_str()); if (_currentCallId2 != "") { return true; @@ -208,7 +208,7 @@ void ManagerImpl::switchCall (const CallID& id) { ost::MutexLock m (_currentCallMutex); - _debug ("----- Switch current call id to %s -----\n", id.c_str()); + _debug ("----- Switch current call id to %s -----", id.c_str()); _currentCallId2 = id; /* @@ -223,7 +223,7 @@ ManagerImpl::switchCall (const CallID& id) ConferenceMap::iterator iter = _conferencemap.find(id); if(iter != _conferencemap.end()) { - _debug(" set call recordable in audio layer\n"); + _debug(" set call recordable in audio layer"); conf = iter->second; al->setRecorderInstance((Recordable*)conf); } @@ -237,7 +237,7 @@ ManagerImpl::switchCall (const CallID& id) Call *call = NULL; call = getAccountLink (account_id)->getCall(id); - _debug(" set call recordable in audio layer\n"); + _debug(" set call recordable in audio layer"); al->setRecorderInstance((Recordable*)call); } } @@ -257,7 +257,7 @@ ManagerImpl::outgoingCall (const std::string& account_id, const CallID& call_id, Call::CallConfiguration callConfig; SIPVoIPLink *siplink; - _debug ("ManagerImpl::outgoingCall(%s)\n", call_id.c_str()); + _debug ("ManagerImpl::outgoingCall(%s)", call_id.c_str()); CallID current_call_id = getCurrentCallId(); @@ -274,21 +274,21 @@ ManagerImpl::outgoingCall (const std::string& account_id, const CallID& call_id, // in any cases we have to detach from current communication if (hasCurrentCall()) { - _debug (" outgoingCall: Has current call (%s) put it onhold\n", current_call_id.c_str()); + _debug (" outgoingCall: Has current call (%s) put it onhold", current_call_id.c_str()); // if this is not a conferenceand this and is not a conference participant if (!isConference (current_call_id) && !participToConference (current_call_id)) { - _debug (" outgoingCall: Put the current call (%s) on hold\n", current_call_id.c_str()); + _debug (" outgoingCall: Put the current call (%s) on hold", current_call_id.c_str()); onHoldCall (current_call_id); } else if (isConference (current_call_id) && !participToConference (call_id)) { - _debug (" outgoingCall: detach main participant from conference\n"); + _debug (" outgoingCall: detach main participant from conference"); detachParticipant (default_id, current_call_id); } } if (callConfig == Call::IPtoIP) { - _debug (" outgoingCall: Start IP to IP call\n"); + _debug (" outgoingCall: Start IP to IP call"); /* We need to retrieve the sip voiplink instance */ siplink = SIPVoIPLink::instance (""); @@ -303,17 +303,17 @@ ManagerImpl::outgoingCall (const std::string& account_id, const CallID& call_id, } if (!accountExists (account_id)) { - _debug ("! Manager Error: Outgoing Call: account doesn't exist\n"); + _debug ("! Manager Error: Outgoing Call: account doesn't exist"); return false; } if (getAccountFromCall (call_id) != AccountNULL) { - _debug ("! Manager Error: Outgoing Call: call id already exists\n"); + _debug ("! Manager Error: Outgoing Call: call id already exists"); return false; } - _debug ("- Manager Action: Adding Outgoing Call %s on account %s\n", call_id.data(), account_id.data()); + _debug ("- Manager Action: Adding Outgoing Call %s on account %s", call_id.data(), account_id.data()); associateCallToAccount (call_id, account_id); @@ -322,7 +322,7 @@ ManagerImpl::outgoingCall (const std::string& account_id, const CallID& call_id, return true; } else { callFailure (call_id); - _debug ("! Manager Error: An error occur, the call was not created\n"); + _debug ("! Manager Error: An error occur, the call was not created"); } return false; @@ -333,7 +333,7 @@ bool ManagerImpl::answerCall (const CallID& call_id) { - _debug ("ManagerImpl::answerCall(%s)\n", call_id.c_str()); + _debug ("ManagerImpl::answerCall(%s)", call_id.c_str()); stopTone (true); @@ -343,7 +343,7 @@ ManagerImpl::answerCall (const CallID& call_id) AccountID account_id = getAccountFromCall (call_id); if (account_id == AccountNULL) { - _debug (" answerCall: AccountId is null\n"); + _debug (" answerCall: AccountId is null"); } Call* call = NULL; @@ -351,23 +351,23 @@ ManagerImpl::answerCall (const CallID& call_id) call = getAccountLink (account_id)->getCall (call_id); if (call == NULL) { - _debug (" answerCall: Call is null\n"); + _debug (" answerCall: Call is null"); } // in any cases we have to detach from current communication if (hasCurrentCall()) { - _debug (" answerCall: Currently conversing with %s\n", current_call_id.c_str()); + _debug (" answerCall: Currently conversing with %s", current_call_id.c_str()); // if it is not a conference and is not a conference participant if (!isConference (current_call_id) && !participToConference (current_call_id)) { - _debug (" answerCall: Put the current call (%s) on hold\n", current_call_id.c_str()); + _debug (" answerCall: Put the current call (%s) on hold", current_call_id.c_str()); onHoldCall (current_call_id); } // if we are talking to a conference and we are answering an incoming call else if (isConference (current_call_id) && !participToConference (call_id)) { - _debug (" answerCall: Detach main participant from conference\n"); + _debug (" answerCall: Detach main participant from conference"); detachParticipant (default_id, current_call_id); } @@ -409,7 +409,7 @@ ManagerImpl::answerCall (const CallID& call_id) bool ManagerImpl::hangupCall (const CallID& call_id) { - _debug ("ManagerImpl::hangupCall(%s)\n", call_id.c_str()); + _debug ("ManagerImpl::hangupCall(%s)", call_id.c_str()); PulseLayer *pulselayer; AccountID account_id; bool returnValue; @@ -422,7 +422,7 @@ ManagerImpl::hangupCall (const CallID& call_id) // switchCall (call_id); /* Broadcast a signal over DBus */ - _debug (" hangupCall: Send DBUS call state change (HUNGUP) for id %s\n", call_id.c_str()); + _debug (" hangupCall: Send DBUS call state change (HUNGUP) for id %s", call_id.c_str()); if (_dbus) _dbus->getCallManager()->callStateChanged (call_id, "HUNGUP"); @@ -432,7 +432,7 @@ ManagerImpl::hangupCall (const CallID& call_id) // stop streams if (audiolayer && (nbCalls <= 1)) { - _debug (" hangupCall: stop audio stream, ther is only %i call(s) remaining\n", nbCalls); + _debug (" hangupCall: stop audio stream, ther is only %i call(s) remaining", nbCalls); audiolayer->stopStream(); } @@ -463,7 +463,7 @@ ManagerImpl::hangupCall (const CallID& call_id) account_id = getAccountFromCall (call_id); if (account_id == AccountNULL) { - _debug ("! Manager Hangup Call: Call doesn't exists\n"); + _debug ("! Manager Hangup Call: Call doesn't exists"); return false; } @@ -483,7 +483,7 @@ ManagerImpl::hangupCall (const CallID& call_id) bool ManagerImpl::hangupConference (const ConfID& id) { - _debug ("ManagerImpl::hangupConference()\n"); + _debug ("ManagerImpl::hangupConference()"); Conference *conf; ConferenceMap::iterator iter_conf = _conferencemap.find (id); @@ -500,7 +500,7 @@ ManagerImpl::hangupConference (const ConfID& id) ParticipantSet::iterator iter_participant = participants.begin(); while (iter_participant != participants.end()) { - _debug ("ManagerImpl::hangupConference participant %s\n", (*iter_participant).c_str()); + _debug ("ManagerImpl::hangupConference participant %s", (*iter_participant).c_str()); hangupCall (*iter_participant); @@ -536,7 +536,7 @@ ManagerImpl::cancelCall (const CallID& id) accountid = getAccountFromCall (id); if (accountid == AccountNULL) { - _debug ("! Manager Cancel Call: Call doesn't exists\n"); + _debug ("! Manager Cancel Call: Call doesn't exists"); return false; } @@ -560,13 +560,13 @@ ManagerImpl::onHoldCall (const CallID& call_id) AccountID account_id; bool returnValue; - _debug ("ManagerImpl::onHoldCall(%s)\n", call_id.c_str()); + _debug ("ManagerImpl::onHoldCall(%s)", call_id.c_str()); stopTone (true); CallID current_call_id = getCurrentCallId(); - _debug (" onHoldCall: try to put call %s on hold\n", call_id.c_str()); + _debug (" onHoldCall: try to put call %s on hold", call_id.c_str()); /* Direct IP to IP call */ @@ -579,7 +579,7 @@ ManagerImpl::onHoldCall (const CallID& call_id) account_id = getAccountFromCall (call_id); if (account_id == AccountNULL) { - _debug (" onHoldCall: Account ID %s or callid %s doesn't exists\n", account_id.c_str(), call_id.c_str()); + _debug (" onHoldCall: Account ID %s or callid %s doesn't exists", account_id.c_str(), call_id.c_str()); return false; } @@ -611,7 +611,7 @@ ManagerImpl::offHoldCall (const CallID& call_id) is_rec = false; - _debug ("ManagerImpl::offHoldCall(%s)\n", call_id.c_str()); + _debug ("ManagerImpl::offHoldCall(%s)", call_id.c_str()); stopTone (false); @@ -622,10 +622,10 @@ ManagerImpl::offHoldCall (const CallID& call_id) if (hasCurrentCall()) { // if this is not a conferenceand this and is not a conference participant if (!isConference (current_call_id) && !participToConference (current_call_id)) { - _debug (" offHoldCall: put current call (%s) on hold\n", current_call_id.c_str()); + _debug (" offHoldCall: put current call (%s) on hold", current_call_id.c_str()); onHoldCall (current_call_id); } else if (isConference (current_call_id) && !participToConference (call_id)) { - _debug (" offHoldCall Put current conference (%s) on hold\n", current_call_id.c_str()); + _debug (" offHoldCall Put current conference (%s) on hold", current_call_id.c_str()); detachParticipant (default_id, current_call_id); } } @@ -644,11 +644,11 @@ ManagerImpl::offHoldCall (const CallID& call_id) account_id = getAccountFromCall (call_id); if (account_id == AccountNULL) { - _debug ("Manager OffHold Call: Call doesn't exists\n"); + _debug ("Manager OffHold Call: Call doesn't exists"); return false; } - _debug ("Setting OFFHOLD, Account %s, callid %s\n", account_id.c_str(), call_id.c_str()); + _debug ("Setting OFFHOLD, Account %s, callid %s", account_id.c_str(), call_id.c_str()); is_rec = getAccountLink (account_id)->getCall (call_id)->isRecording(); returnValue = getAccountLink (account_id)->offhold (call_id); @@ -680,7 +680,7 @@ ManagerImpl::offHoldCall (const CallID& call_id) // codecName = getCurrentCodecName (call_id); - // _debug("ManagerImpl::hangupCall(): broadcast codec name %s \n",codecName.c_str()); + // _debug("ManagerImpl::hangupCall(): broadcast codec name %s ",codecName.c_str()); // if (_dbus) _dbus->getCallManager()->currentSelectedCodec (call_id,codecName.c_str()); @@ -710,7 +710,7 @@ ManagerImpl::transferCall (const CallID& call_id, const std::string& to) accountid = getAccountFromCall (call_id); if (accountid == AccountNULL) { - _debug ("! Manager Transfer Call: Call doesn't exists\n"); + _debug ("! Manager Transfer Call: Call doesn't exists"); return false; } @@ -771,7 +771,7 @@ ManagerImpl::refuseCall (const CallID& id) // AudioLayer* audiolayer = getAudioDriver(); if (nbCalls <= 1) { - _debug (" hangupCall: stop audio stream, ther is only %i call(s) remaining\n", nbCalls); + _debug (" hangupCall: stop audio stream, ther is only %i call(s) remaining", nbCalls); AudioLayer* audiolayer = getAudioDriver(); audiolayer->stopStream(); @@ -788,7 +788,7 @@ ManagerImpl::refuseCall (const CallID& id) accountid = getAccountFromCall (id); if (accountid == AccountNULL) { - _debug ("! Manager OffHold Call: Call doesn't exists\n"); + _debug ("! Manager OffHold Call: Call doesn't exists"); return false; } @@ -817,7 +817,7 @@ ManagerImpl::refuseCall (const CallID& id) Conference* ManagerImpl::createConference (const CallID& id1, const CallID& id2) { - _debug ("ManagerImpl::createConference()\n"); + _debug ("ManagerImpl::createConference()"); Conference* conf = new Conference(); @@ -838,21 +838,21 @@ void ManagerImpl::removeConference (const ConfID& conference_id) { - _debug ("ManagerImpl::removeConference(%s)\n", conference_id.c_str()); + _debug ("ManagerImpl::removeConference(%s)", conference_id.c_str()); Conference* conf = NULL; - _debug (" removeConference: _conferencemap.size: %i\n", (int) _conferencemap.size()); + _debug (" removeConference: _conferencemap.size: %i", (int) _conferencemap.size()); ConferenceMap::iterator iter = _conferencemap.find (conference_id); if (iter != _conferencemap.end()) { - _debug (" removeConference: Found conference id %s in conferencemap\n", conference_id.c_str()); + _debug (" removeConference: Found conference id %s in conferencemap", conference_id.c_str()); conf = iter->second; } if (conf == NULL) { - _debug (" removeConference: Error conference not found\n"); + _debug (" removeConference: Error conference not found"); return; } @@ -875,15 +875,15 @@ ManagerImpl::removeConference (const ConfID& conference_id) } // Then remove the conference from the conference map - _debug ("ManagerImpl:: remove conference %s\n", conference_id.c_str()); + _debug ("ManagerImpl:: remove conference %s", conference_id.c_str()); if (_conferencemap.erase (conference_id) == 1) - _debug ("ManagerImpl:: conference %s removed succesfully\n", conference_id.c_str()); + _debug ("ManagerImpl:: conference %s removed succesfully", conference_id.c_str()); else - _debug ("ManagerImpl:: error cannot remove conference id: %s\n", conference_id.c_str()); + _debug ("ManagerImpl:: error cannot remove conference id: %s", conference_id.c_str()); // broadcast a signal over dbus - _debug ("ManagerImpl::removeConference broadcast call removed on dbus: %s\n", conference_id.c_str()); + _debug ("ManagerImpl::removeConference broadcast call removed on dbus: %s", conference_id.c_str()); _dbus->getCallManager()->conferenceRemoved (conference_id); @@ -911,7 +911,7 @@ ManagerImpl::getConferenceFromCallID (const CallID& call_id) void ManagerImpl::holdConference (const CallID& id) { - _debug ("ManagerImpl::holdConference()\n"); + _debug ("ManagerImpl::holdConference()"); Conference *conf; ConferenceMap::iterator iter_conf = _conferencemap.find (id); @@ -927,7 +927,7 @@ ManagerImpl::holdConference (const CallID& id) ParticipantSet::iterator iter_participant = participants.begin(); while (iter_participant != participants.end()) { - _debug (" holdConference: participant %s\n", (*iter_participant).c_str()); + _debug (" holdConference: participant %s", (*iter_participant).c_str()); currentAccountId = getAccountFromCall (*iter_participant); call = getAccountLink (currentAccountId)->getCall (*iter_participant); @@ -954,7 +954,7 @@ void ManagerImpl::unHoldConference (const CallID& id) { - _debug ("ManagerImpl::unHoldConference()\n"); + _debug ("ManagerImpl::unHoldConference()"); Conference *conf; ConferenceMap::iterator iter_conf = _conferencemap.find (id); @@ -970,7 +970,7 @@ ManagerImpl::unHoldConference (const CallID& id) ParticipantSet::iterator iter_participant = participants.begin(); while (iter_participant != participants.end()) { - _debug (" unholdConference: participant %s\n", (*iter_participant).c_str()); + _debug (" unholdConference: participant %s", (*iter_participant).c_str()); currentAccountId = getAccountFromCall (*iter_participant); call = getAccountLink (currentAccountId)->getCall (*iter_participant); @@ -1025,7 +1025,7 @@ ManagerImpl::participToConference (const CallID& call_id) void ManagerImpl::addParticipant (const CallID& call_id, const CallID& conference_id) { - _debug ("ManagerImpl::addParticipant(%s, %s)\n", call_id.c_str(), conference_id.c_str()); + _debug ("ManagerImpl::addParticipant(%s, %s)", call_id.c_str(), conference_id.c_str()); std::map<std::string, std::string> call_details = getCallDetails (call_id); @@ -1051,7 +1051,7 @@ ManagerImpl::addParticipant (const CallID& call_id, const CallID& conference_id) addMainParticipant (conference_id); - _debug (" addParticipant: enter main process\n"); + _debug (" addParticipant: enter main process"); if (iter != _conferencemap.end()) { @@ -1069,15 +1069,15 @@ ManagerImpl::addParticipant (const CallID& call_id, const CallID& conference_id) iter_details = call_details.find ("CALL_STATE"); - _debug (" addParticipant: call state: %s\n", iter_details->second.c_str()); + _debug (" addParticipant: call state: %s", iter_details->second.c_str()); if (iter_details->second == "HOLD") { - _debug (" OFFHOLD %s\n", call_id.c_str()); + _debug (" OFFHOLD %s", call_id.c_str()); // offHoldCall create a new rtp session which use addStream to bind participant offHoldCall (call_id); } else if (iter_details->second == "INCOMING") { - _debug (" ANSWER %s\n", call_id.c_str()); + _debug (" ANSWER %s", call_id.c_str()); // answerCall create a new rtp session which use addStream to bind participant answerCall (call_id); } else if (iter_details->second == "CURRENT") { @@ -1103,7 +1103,7 @@ ManagerImpl::addParticipant (const CallID& call_id, const CallID& conference_id) _audiodriver->getMainBuffer()->flush (default_id); } else { - _debug (" addParticipant: Error, conference %s conference_id not found!\n", conference_id.c_str()); + _debug (" addParticipant: Error, conference %s conference_id not found!", conference_id.c_str()); } } @@ -1162,8 +1162,8 @@ ManagerImpl::addMainParticipant (const CallID& conference_id) void ManagerImpl::joinParticipant (const CallID& call_id1, const CallID& call_id2) { - _debug ("ManagerImpl::joinParticipant(%s, %s)\n", call_id1.c_str(), call_id2.c_str()); - // _debug(" Current call ID %s\n", getCurrentCallId().c_str()); + _debug ("ManagerImpl::joinParticipant(%s, %s)", call_id1.c_str(), call_id2.c_str()); + // _debug(" Current call ID %s", getCurrentCallId().c_str()); std::map<std::string, std::string> call1_details = getCallDetails (call_id1); std::map<std::string, std::string> call2_details = getCallDetails (call_id2); @@ -1174,7 +1174,7 @@ ManagerImpl::joinParticipant (const CallID& call_id1, const CallID& call_id2) Call* call = NULL; CallID current_call_id = getCurrentCallId(); - _debug (" joinParticipant: current_call_id %s\n", current_call_id.c_str()); + _debug (" joinParticipant: current_call_id %s", current_call_id.c_str()); // detach from the conference and switch to this conference @@ -1186,7 +1186,7 @@ ManagerImpl::joinParticipant (const CallID& call_id1, const CallID& call_id2) onHoldCall (current_call_id); } - _debug (" joinParticipant: create a conference\n"); + _debug (" joinParticipant: create a conference"); Conference *conf = createConference (call_id1, call_id2); switchCall (conf->getConfID()); @@ -1196,23 +1196,23 @@ ManagerImpl::joinParticipant (const CallID& call_id1, const CallID& call_id2) call->setConfId (conf->getConfID()); iter_details = call1_details.find ("CALL_STATE"); - _debug (" joinParticipant: call1 %s state: %s\n", call_id1.c_str(), iter_details->second.c_str()); + _debug (" joinParticipant: call1 %s state: %s", call_id1.c_str(), iter_details->second.c_str()); if (iter_details->second == "HOLD") { - _debug (" OFFHOLD %s\n", call_id1.c_str()); + _debug (" OFFHOLD %s", call_id1.c_str()); offHoldCall (call_id1); } else if (iter_details->second == "INCOMING") { - _debug (" ANSWER %s\n", call_id1.c_str()); + _debug (" ANSWER %s", call_id1.c_str()); answerCall (call_id1); } else if (iter_details->second == "CURRENT") { - _debug (" CURRENT %s\n", call_id1.c_str()); + _debug (" CURRENT %s", call_id1.c_str()); _audiodriver->getMainBuffer()->unBindAll (call_id1); conf->bindParticipant (call_id1); } else if (iter_details->second == "INACTIVE") { - _debug (" INACTIVE %s\n", call_id1.c_str()); + _debug (" INACTIVE %s", call_id1.c_str()); answerCall (call_id1); } else { - _debug (" CAll State not recognized\n"); + _debug (" CAll State not recognized"); } currentAccountId = getAccountFromCall (call_id2); @@ -1221,23 +1221,23 @@ ManagerImpl::joinParticipant (const CallID& call_id1, const CallID& call_id2) call->setConfId (conf->getConfID()); iter_details = call2_details.find ("CALL_STATE"); - _debug (" joinParticipant: call2 %s state: %s\n", call_id2.c_str(), iter_details->second.c_str()); + _debug (" joinParticipant: call2 %s state: %s", call_id2.c_str(), iter_details->second.c_str()); if (iter_details->second == "HOLD") { - _debug (" OFFHOLD %s\n", call_id2.c_str()); + _debug (" OFFHOLD %s", call_id2.c_str()); offHoldCall (call_id2); } else if (iter_details->second == "INCOMING") { - _debug (" ANSWER %s\n", call_id2.c_str()); + _debug (" ANSWER %s", call_id2.c_str()); answerCall (call_id2); } else if (iter_details->second == "CURRENT") { - _debug (" CURRENT %s\n", call_id2.c_str()); + _debug (" CURRENT %s", call_id2.c_str()); _audiodriver->getMainBuffer()->unBindAll (call_id2); conf->bindParticipant (call_id2); } else if (iter_details->second == "INACTIVE") { - _debug (" INACTIVE %s\n", call_id2.c_str()); + _debug (" INACTIVE %s", call_id2.c_str()); answerCall (call_id2); } else { - _debug (" CAll State not recognized\n"); + _debug (" CAll State not recognized"); } // finally bind main participant to conference @@ -1252,7 +1252,7 @@ ManagerImpl::joinParticipant (const CallID& call_id1, const CallID& call_id2) void ManagerImpl::detachParticipant (const CallID& call_id, const CallID& current_id) { - _debug ("ManagerImpl::detachParticipant(%s)\n", call_id.c_str()); + _debug ("ManagerImpl::detachParticipant(%s)", call_id.c_str()); CallID current_call_id = current_id; @@ -1274,7 +1274,7 @@ ManagerImpl::detachParticipant (const CallID& call_id, const CallID& current_id) if (conf != NULL) { - _debug (" detachParticipant: detaching participant %s\n", call_id.c_str()); + _debug (" detachParticipant: detaching participant %s", call_id.c_str()); std::map<std::string, std::string> call_details = getCallDetails (call_id); std::map<std::string, std::string>::iterator iter_details; @@ -1284,7 +1284,7 @@ ManagerImpl::detachParticipant (const CallID& call_id, const CallID& current_id) if (iter_details->second == "RINGING") { removeParticipant (call_id); } else { - _debug (" ONHOLD %s\n", call_id.c_str()); + _debug (" ONHOLD %s", call_id.c_str()); onHoldCall (call_id); removeParticipant (call_id); @@ -1294,11 +1294,11 @@ ManagerImpl::detachParticipant (const CallID& call_id, const CallID& current_id) } else { - _debug (" detachParticipant: call is not conferencing, cannot detach\n"); + _debug (" detachParticipant: call is not conferencing, cannot detach"); } } else { - _debug (" detachParticipant: unbind main participant from all\n"); + _debug (" detachParticipant: unbind main participant from all"); _audiodriver->getMainBuffer()->unBindAll (default_id); if (isConference (current_call_id)) { @@ -1321,7 +1321,7 @@ ManagerImpl::detachParticipant (const CallID& call_id, const CallID& current_id) void ManagerImpl::removeParticipant (const CallID& call_id) { - _debug ("ManagerImpl::removeParticipant(%s)\n", call_id.c_str()); + _debug ("ManagerImpl::removeParticipant(%s)", call_id.c_str()); // TODO: add conference_id as a second parameter Conference* conf; @@ -1337,12 +1337,12 @@ ManagerImpl::removeParticipant (const CallID& call_id) ConferenceMap::iterator iter = conf_map.find (call->getConfId()); if (iter == conf_map.end()) { - _debug (" no conference created, cannot remove participant \n"); + _debug (" no conference created, cannot remove participant "); } else { conf = iter->second; - _debug (" removeParticipant %s\n", call_id.c_str()); + _debug (" removeParticipant %s", call_id.c_str()); conf->remove (call_id); call->setConfId (""); @@ -1355,7 +1355,7 @@ void ManagerImpl::processRemainingParticipant (CallID current_call_id, Conference *conf) { - _debug ("ManagerImpl::processRemainingParticipant()\n"); + _debug ("ManagerImpl::processRemainingParticipant()"); if (conf->getNbParticipants() > 1) { @@ -1410,7 +1410,7 @@ ManagerImpl::processRemainingParticipant (CallID current_call_id, Conference *co void ManagerImpl::joinConference (const CallID& conf_id1, const CallID& conf_id2) { - _debug ("ManagerImpl::joinConference(%s, %s)\n", conf_id1.c_str(), conf_id2.c_str()); + _debug ("ManagerImpl::joinConference(%s, %s)", conf_id1.c_str(), conf_id2.c_str()); ConferenceMap::iterator iter; @@ -1445,7 +1445,7 @@ ManagerImpl::joinConference (const CallID& conf_id1, const CallID& conf_id2) void ManagerImpl::addStream (const CallID& call_id) { - _debug ("ManagerImpl::addStream %s\n", call_id.c_str()); + _debug ("ManagerImpl::addStream %s", call_id.c_str()); AccountID currentAccountId; Call* call = NULL; @@ -1461,7 +1461,7 @@ ManagerImpl::addStream (const CallID& call_id) if (iter != _conferencemap.end()) { Conference* conf = iter->second; - _debug (" addStream: bind call %s to conference %s\n", call_id.c_str(), conf->getConfID().c_str()); + _debug (" addStream: bind call %s to conference %s", call_id.c_str(), conf->getConfID().c_str()); conf->bindParticipant (call_id); @@ -1483,7 +1483,7 @@ ManagerImpl::addStream (const CallID& call_id) } else { - _debug (" addStream: bind call %s to main\n", call_id.c_str()); + _debug (" addStream: bind call %s to main", call_id.c_str()); // bind to main getAudioDriver()->getMainBuffer()->bindCallID (call_id); @@ -1498,7 +1498,7 @@ ManagerImpl::addStream (const CallID& call_id) void ManagerImpl::removeStream (const CallID& call_id) { - _debug ("ManagerImpl::removeStream %s\n", call_id.c_str()); + _debug ("ManagerImpl::removeStream %s", call_id.c_str()); getAudioDriver()->getMainBuffer()->unBindAll (call_id); @@ -1512,7 +1512,7 @@ ManagerImpl::removeStream (const CallID& call_id) bool ManagerImpl::saveConfig (void) { - _debug ("Saving Configuration to XDG directory %s ... \n", _path.c_str()); + _debug ("Saving Configuration to XDG directory %s ... ", _path.c_str()); setConfig (AUDIO, VOLUME_SPKR, getSpkrVolume()); setConfig (AUDIO, VOLUME_MICRO, getMicVolume()); @@ -1603,14 +1603,14 @@ ManagerImpl::playDtmf (char code, bool isTalking) AudioLayer *audiolayer; SFLDataFormat *buf; - _debug ("ManagerImpl::playDtmf\n"); + _debug ("ManagerImpl::playDtmf"); stopTone (false); bool hasToPlayTone = getConfigBool (SIGNALISATION, PLAY_DTMF); if (!hasToPlayTone) { - _debug (" playDtmf: Do not have to play a tone...\n"); + _debug (" playDtmf: Do not have to play a tone..."); return false; } @@ -1618,7 +1618,7 @@ ManagerImpl::playDtmf (char code, bool isTalking) pulselen = getConfigInt (SIGNALISATION, PULSE_LENGTH); if (!pulselen) { - _debug (" playDtmf: Pulse length is not set...\n"); + _debug (" playDtmf: Pulse length is not set..."); return false; } @@ -1630,7 +1630,7 @@ ManagerImpl::playDtmf (char code, bool isTalking) // fast return, no sound, so no dtmf if (audiolayer==0 || _dtmfKey == 0) { - _debug (" playDtmf: Error no audio layer...\n"); + _debug (" playDtmf: Error no audio layer..."); return false; } @@ -1640,9 +1640,9 @@ ManagerImpl::playDtmf (char code, bool isTalking) // ms/s size = (int) ( (pulselen * (float) audiolayer->getSampleRate()) / 1000); - _debug ("DTMF pulselen: %i\n", pulselen); + _debug ("DTMF pulselen: %i", pulselen); - _debug ("DTMF size: %i\n", size); + _debug ("DTMF size: %i", size); // this buffer is for mono // TODO <-- this should be global and hide if same size @@ -1660,7 +1660,7 @@ ManagerImpl::playDtmf (char code, bool isTalking) audiolayer->startStream(); audiolayer->putUrgent (buf, size * sizeof (SFLDataFormat)); } else { - _debug (" playDtmf: Error cannot play dtmf\n"); + _debug (" playDtmf: Error cannot play dtmf"); } ret = true; @@ -1723,7 +1723,7 @@ ManagerImpl::incomingCall (Call* call, const AccountID& accountId) stopTone (false); - _debug ("Incoming call %s for account %s\n", call->getCallId().data(), accountId.c_str()); + _debug ("Incoming call %s for account %s", call->getCallId().data(), accountId.c_str()); associateCallToAccount (call->getCallId(), accountId); @@ -1748,7 +1748,7 @@ ManagerImpl::incomingCall (Call* call, const AccountID& accountId) } - _debug ("ManagerImpl::incomingCall :: hasCurrentCall() %i \n", hasCurrentCall()); + _debug ("ManagerImpl::incomingCall :: hasCurrentCall() %i ", hasCurrentCall()); if (!hasCurrentCall()) { @@ -1772,7 +1772,7 @@ ManagerImpl::incomingCall (Call* call, const AccountID& accountId) display_name = call->getDisplayName(); - // _debug( "incomingCall from: %s, number: %s, display_name: %s\n", from.c_str(), number.c_str(), display_name.c_str()); + // _debug( "incomingCall from: %s, number: %s, display_name: %s", from.c_str(), number.c_str(), display_name.c_str()); if (from != "" && number != "") { from.append (" <"); @@ -1788,13 +1788,13 @@ ManagerImpl::incomingCall (Call* call, const AccountID& accountId) CallIDSet::iterator iter = _waitingCall.begin(); while (iter != _waitingCall.end()) { CallID ident = *iter; - _debug("ManagerImpl::incomingCall :: CALL iteration: %s \n",ident.c_str()); + _debug("ManagerImpl::incomingCall :: CALL iteration: %s ",ident.c_str()); ++iter; } */ /* Broadcast a signal over DBus */ - _debug ("From: %s, Number: %s, DisplayName: %s\n", from.c_str(), number.c_str(), display_name.c_str()); + _debug ("From: %s, Number: %s, DisplayName: %s", from.c_str(), number.c_str(), display_name.c_str()); display = display_name; @@ -1836,7 +1836,7 @@ ManagerImpl::peerAnsweredCall (const CallID& id) // std::string codecName = getCurrentCodecName (id); - // _debug("ManagerImpl::hangupCall(): broadcast codec name %s \n",codecName.c_str()); + // _debug("ManagerImpl::hangupCall(): broadcast codec name %s ",codecName.c_str()); // if (_dbus) _dbus->getCallManager()->currentSelectedCodec (id,codecName.c_str()); // Required if there have been no sip reinvite, in this case we must reinit buffers since the @@ -1864,7 +1864,7 @@ ManagerImpl::peerHungupCall (const CallID& call_id) AccountID account_id; bool returnValue; - _debug ("ManagerImpl::peerHungupCall(%s)\n", call_id.c_str()); + _debug ("ManagerImpl::peerHungupCall(%s)", call_id.c_str()); // store the current call id CallID current_call_id = getCurrentCallId(); @@ -1893,7 +1893,7 @@ ManagerImpl::peerHungupCall (const CallID& call_id) // stop streams if (nbCalls <= 1) { - _debug (" hangupCall: stop audio stream, ther is only %i call(s) remaining\n", nbCalls); + _debug (" hangupCall: stop audio stream, ther is only %i call(s) remaining", nbCalls); AudioLayer* audiolayer = getAudioDriver(); audiolayer->stopStream(); @@ -1909,7 +1909,7 @@ ManagerImpl::peerHungupCall (const CallID& call_id) account_id = getAccountFromCall (call_id); if (account_id == AccountNULL) { - _debug ("peerHungupCall: Call doesn't exists\n"); + _debug ("peerHungupCall: Call doesn't exists"); return; } @@ -1932,7 +1932,7 @@ ManagerImpl::peerHungupCall (const CallID& call_id) void ManagerImpl::callBusy (const CallID& id) { - _debug ("Call busy\n"); + _debug ("Call busy"); if (_dbus) _dbus->getCallManager()->callStateChanged (id, "BUSY"); @@ -1952,7 +1952,7 @@ ManagerImpl::callFailure (const CallID& id) { if (_dbus) _dbus->getCallManager()->callStateChanged (id, "FAILURE"); - _debug ("CALL ID = %s\n" , id.c_str()); + _debug ("CALL ID = %s" , id.c_str()); if (isCurrentCall (id)) { playATone (Tone::TONE_BUSY); @@ -1989,7 +1989,7 @@ bool ManagerImpl::playATone (Tone::TONEID toneId) AudioLayer *audiolayer; // unsigned int nbSamples; - _debug ("ManagerImpl::playATone\n"); + _debug ("ManagerImpl::playATone"); hasToPlayTone = getConfigBool (SIGNALISATION, PLAY_TONES); @@ -2032,7 +2032,7 @@ void ManagerImpl::stopTone (bool stopAudio=true) { bool hasToPlayTone; - _debug ("ManagerImpl::stopTone\n"); + _debug ("ManagerImpl::stopTone"); hasToPlayTone = getConfigBool (SIGNALISATION, PLAY_TONES); @@ -2088,7 +2088,7 @@ ManagerImpl::congestion () void ManagerImpl::ringback () { - _debug ("ManagerImpl::ringback\n"); + _debug ("ManagerImpl::ringback"); playATone (Tone::TONE_RINGTONE); } @@ -2099,7 +2099,7 @@ ManagerImpl::ringback () void ManagerImpl::ringtone() { - _debug ("ManagerImpl::ringtone\n"); + _debug ("ManagerImpl::ringtone"); std::string ringchoice; AudioLayer *audiolayer; AudioCodec *codecForTone; @@ -2110,7 +2110,7 @@ ManagerImpl::ringtone() if (isRingtoneEnabled()) { - _debug (" Tone is enabled\n"); + _debug (" Tone is enabled"); //TODO Comment this because it makes the daemon crashes since the main thread //synchronizes the ringtone thread. @@ -2161,7 +2161,7 @@ ManagerImpl::ringtone() AudioLoop* ManagerImpl::getTelephoneTone() { - // _debug("ManagerImpl::getTelephoneTone()\n"); + // _debug("ManagerImpl::getTelephoneTone()"); if (_telephoneTone != 0) { ost::MutexLock m (_toneMutex); return _telephoneTone->getCurrentTone(); @@ -2173,7 +2173,7 @@ ManagerImpl::getTelephoneTone() AudioLoop* ManagerImpl::getTelephoneFile() { - // _debug("ManagerImpl::getTelephoneFile()\n"); + // _debug("ManagerImpl::getTelephoneFile()"); ost::MutexLock m (_toneMutex); if (_audiofile.isStarted()) { @@ -2191,7 +2191,7 @@ void ManagerImpl::notificationIncomingCall (void) audiolayer = getAudioDriver(); - _debug ("ManagerImpl::notificationIncomingCall\n"); + _debug ("ManagerImpl::notificationIncomingCall"); if (audiolayer != 0) { samplerate = audiolayer->getSampleRate(); @@ -2221,7 +2221,7 @@ ManagerImpl::createSettingsPath (void) std::string xdg_config, xdg_env; - _debug ("XDG_CONFIG_HOME: %s\n", XDG_CONFIG_HOME); + _debug ("XDG_CONFIG_HOME: %s", XDG_CONFIG_HOME); xdg_config = std::string (HOMEDIR) + DIR_SEPARATOR_STR + ".config" + DIR_SEPARATOR_STR + PROGDIR; @@ -2235,7 +2235,7 @@ ManagerImpl::createSettingsPath (void) if (mkdir (_path.data(), 0700) != 0) { // If directory creation failed if (errno != EEXIST) { - _debug ("Cannot create directory: %s\n", strerror (errno)); + _debug ("Cannot create directory: %s", strerror (errno)); return -1; } } @@ -2252,7 +2252,7 @@ ManagerImpl::createSettingsPath (void) void ManagerImpl::initConfigFile (bool load_user_value, std::string alternate) { - _debug ("ManagerImpl::InitConfigFile\n"); + _debug ("ManagerImpl::InitConfigFile"); // Default values, that will be overwritten by the call to // 'populateFromFile' below. @@ -2414,11 +2414,11 @@ ManagerImpl::initAudioCodec (void) void ManagerImpl::setActiveCodecList (const std::vector< std::string >& list) { - _debug ("Set active codecs list\n"); + _debug ("Set active codecs list"); _codecDescriptorMap.saveActiveCodecs (list); // setConfig std::string s = serialize (list); - _debug ("Setting codec with payload number %s to the active list\n", s.c_str()); + _debug ("Setting codec with payload number %s to the active list", s.c_str()); setConfig ("Audio", "ActiveCodecs", s); } @@ -2463,7 +2463,7 @@ ManagerImpl::serialize (std::vector<std::string> v) std::vector <std::string> ManagerImpl::getActiveCodecList (void) { - _debug ("ManagerImpl::getActiveCodecList\n"); + _debug ("ManagerImpl::getActiveCodecList"); std::vector< std::string > v; CodecOrder active = _codecDescriptorMap.getActiveCodecs(); unsigned int i=0; @@ -2473,7 +2473,7 @@ ManagerImpl::getActiveCodecList (void) std::stringstream ss; ss << active[i]; v.push_back ( (ss.str()).data()); - _debug ("Codec with payload number %s is active\n", ss.str().data()); + _debug ("Codec with payload number %s is active", ss.str().data()); i++; } @@ -2552,7 +2552,7 @@ std::vector<std::string> ManagerImpl::getInputAudioPluginList (void) { std::vector<std::string> v; - _debug ("Get input audio plugin list\n"); + _debug ("Get input audio plugin list"); v.push_back ("default"); v.push_back ("surround40"); @@ -2568,7 +2568,7 @@ std::vector<std::string> ManagerImpl::getOutputAudioPluginList (void) { std::vector<std::string> v; - _debug ("Get output audio plugin list\n"); + _debug ("Get output audio plugin list"); v.push_back (PCM_DEFAULT); v.push_back (PCM_DMIX); @@ -2585,7 +2585,7 @@ ManagerImpl::setInputAudioPlugin (const std::string& audioPlugin) int layer = _audiodriver -> getLayerType(); if (CHECK_INTERFACE (layer , ALSA)) { - _debug ("Set input audio plugin\n"); + _debug ("Set input audio plugin"); _audiodriver -> setErrorMessage (-1); _audiodriver -> openDevice (_audiodriver -> getIndexIn(), _audiodriver -> getIndexOut(), @@ -2609,7 +2609,7 @@ ManagerImpl::setOutputAudioPlugin (const std::string& audioPlugin) int res; - _debug ("Set output audio plugin\n"); + _debug ("Set output audio plugin"); _audiodriver -> setErrorMessage (-1); res = _audiodriver -> openDevice (_audiodriver -> getIndexIn(), _audiodriver -> getIndexOut(), @@ -2631,7 +2631,7 @@ ManagerImpl::setOutputAudioPlugin (const std::string& audioPlugin) std::vector<std::string> ManagerImpl::getAudioOutputDeviceList (void) { - _debug ("Get audio output device list\n"); + _debug ("Get audio output device list"); AlsaLayer *layer; std::vector <std::string> devices; @@ -2651,14 +2651,14 @@ ManagerImpl::setAudioOutputDevice (const int index) { AlsaLayer *alsalayer; std::string alsaplugin; - _debug ("Set audio output device: %i\n", index); + _debug ("Set audio output device: %i", index); _audiodriver -> setErrorMessage (-1); alsalayer = dynamic_cast<AlsaLayer*> (getAudioDriver ()); alsaplugin = alsalayer->getAudioPlugin (); - _debug (" set output plugin: %s\n", alsaplugin.c_str()); + _debug (" set output plugin: %s", alsaplugin.c_str()); _audiodriver->openDevice (_audiodriver->getIndexIn(), index, _audiodriver->getSampleRate(), _audiodriver->getFrameSize(), SFL_PCM_PLAYBACK, alsaplugin); @@ -2696,14 +2696,14 @@ ManagerImpl::setAudioInputDevice (const int index) AlsaLayer *alsalayer; std::string alsaplugin; - _debug ("Set audio input device %i\n", index); + _debug ("Set audio input device %i", index); _audiodriver -> setErrorMessage (-1); alsalayer = dynamic_cast<AlsaLayer*> (getAudioDriver ()); alsaplugin = alsalayer->getAudioPlugin (); - _debug (" set input plugin: %s\n", alsaplugin.c_str()); + _debug (" set input plugin: %s", alsaplugin.c_str()); _audiodriver->openDevice (index, _audiodriver->getIndexOut(), _audiodriver->getSampleRate(), _audiodriver->getFrameSize(), SFL_PCM_CAPTURE, alsaplugin); @@ -2720,7 +2720,7 @@ ManagerImpl::setAudioInputDevice (const int index) std::vector<std::string> ManagerImpl::getCurrentAudioDevicesIndex() { - _debug ("Get current audio devices index\n"); + _debug ("Get current audio devices index"); std::vector<std::string> v; std::stringstream ssi , sso; sso << _audiodriver->getIndexOut(); @@ -2767,7 +2767,7 @@ ManagerImpl::getRingtoneChoice (void) tone_path = tone_name ; } - _debug ("%s\n", tone_path.c_str()); + _debug ("%s", tone_path.c_str()); return tone_path; } @@ -2788,7 +2788,7 @@ ManagerImpl::getRecordPath (void) void ManagerImpl::setRecordPath (const std::string& recPath) { - _debug ("ManagerImpl::setRecordPath(%s)! \n", recPath.c_str()); + _debug ("ManagerImpl::setRecordPath(%s)! ", recPath.c_str()); setConfig (AUDIO, RECORD_PATH, recPath); } @@ -2847,7 +2847,7 @@ void ManagerImpl::setRecordingCall (const CallID& id) { /* - _debug ("ManagerImpl::setRecording()! \n"); + _debug ("ManagerImpl::setRecording()! "); AccountID accountid = getAccountFromCall (id); getAccountLink (accountid)->setRecording (id); @@ -2862,7 +2862,7 @@ bool ManagerImpl::isRecording (const CallID& id) { /* - _debug ("ManagerImpl::isRecording()! \n"); + _debug ("ManagerImpl::isRecording()! "); AccountID accountid = getAccountFromCall (id); return getAccountLink (accountid)->isRecording (id); @@ -2954,7 +2954,7 @@ void ManagerImpl::setAudioManager (const int32_t& api) int type; std::string alsaPlugin; - _debug ("Setting audio manager \n"); + _debug ("Setting audio manager "); if (!_audiodriver) return; @@ -2962,7 +2962,7 @@ void ManagerImpl::setAudioManager (const int32_t& api) type = _audiodriver->getLayerType(); if (type == api) { - _debug ("Audio manager chosen already in use. No changes made. \n"); + _debug ("Audio manager chosen already in use. No changes made. "); return; } @@ -2989,7 +2989,7 @@ void ManagerImpl::notifyErrClient (const int32_t& errCode) { if (_dbus) { - _debug ("NOTIFY ERR NUMBER %i\n" , errCode); + _debug ("NOTIFY ERR NUMBER %i" , errCode); _dbus -> getConfigurationManager() -> errorAlert (errCode); } } @@ -2999,7 +2999,7 @@ ManagerImpl::getAudioDeviceIndex (const std::string name) { AlsaLayer *alsalayer; - _debug ("Get audio device index\n"); + _debug ("Get audio device index"); alsalayer = dynamic_cast<AlsaLayer *> (getAudioDriver()); @@ -3014,7 +3014,7 @@ ManagerImpl::getCurrentAudioOutputPlugin (void) { AlsaLayer *alsalayer; - _debug ("Get alsa plugin\n"); + _debug ("Get alsa plugin"); alsalayer = dynamic_cast<AlsaLayer *> (getAudioDriver()); @@ -3055,16 +3055,16 @@ ManagerImpl::initAudioDriver (void) _audiodriver->setMainBuffer (&_mainBuffer); } } else - _debug ("Error - Audio API unknown\n"); + _debug ("Error - Audio API unknown"); if (_audiodriver == 0) { - _debug ("Init audio driver error\n"); + _debug ("Init audio driver error"); return false; } else { error = getAudioDriver()->getErrorMessage(); if (error == -1) { - _debug ("Init audio driver: %i\n", error); + _debug ("Init audio driver: %i", error); return false; } } @@ -3084,7 +3084,7 @@ ManagerImpl::selectAudioDriver (void) AlsaLayer *alsalayer; layer = _audiodriver->getLayerType(); - _debug ("Audio layer type: %i\n" , layer); + _debug ("Audio layer type: %i" , layer); /* Retrieve the global devices info from the user config */ alsaPlugin = getConfigString (AUDIO , ALSA_PLUGIN); @@ -3104,13 +3104,13 @@ ManagerImpl::selectAudioDriver (void) alsalayer = dynamic_cast<AlsaLayer*> (getAudioDriver ()); if (!alsalayer -> soundCardIndexExist (numCardIn , SFL_PCM_CAPTURE)) { - _debug (" Card with index %i doesn't exist or cannot capture. Switch to 0.\n", numCardIn); + _debug (" Card with index %i doesn't exist or cannot capture. Switch to 0.", numCardIn); numCardIn = ALSA_DFT_CARD_ID ; setConfig (AUDIO , ALSA_CARD_ID_IN , ALSA_DFT_CARD_ID); } if (!alsalayer -> soundCardIndexExist (numCardOut , SFL_PCM_PLAYBACK)) { - _debug (" Card with index %i doesn't exist or cannot playback . Switch to 0.\n", numCardOut); + _debug (" Card with index %i doesn't exist or cannot playback . Switch to 0.", numCardOut); numCardOut = ALSA_DFT_CARD_ID ; setConfig (AUDIO , ALSA_CARD_ID_OUT , ALSA_DFT_CARD_ID); } @@ -3132,7 +3132,7 @@ void ManagerImpl::switchAudioManager (void) int type, samplerate, framesize, numCardIn, numCardOut; std::string alsaPlugin; - _debug ("Switching audio manager \n"); + _debug ("Switching audio manager "); if (!_audiodriver) return; @@ -3149,7 +3149,7 @@ void ManagerImpl::switchAudioManager (void) numCardOut = getConfigInt (AUDIO , ALSA_CARD_ID_OUT); - _debug ("Deleting current layer... \n"); + _debug ("Deleting current layer... "); // _audiodriver->closeLayer(); delete _audiodriver; @@ -3159,19 +3159,19 @@ void ManagerImpl::switchAudioManager (void) switch (type) { case ALSA: - _debug ("Creating Pulseaudio layer...\n"); + _debug ("Creating Pulseaudio layer..."); _audiodriver = new PulseLayer (this); _audiodriver->setMainBuffer (&_mainBuffer); break; case PULSEAUDIO: - _debug ("Creating ALSA layer...\n"); + _debug ("Creating ALSA layer..."); _audiodriver = new AlsaLayer (this); _audiodriver->setMainBuffer (&_mainBuffer); break; default: - _debug ("Error: audio layer unknown\n"); + _debug ("Error: audio layer unknown"); break; } @@ -3182,9 +3182,9 @@ void ManagerImpl::switchAudioManager (void) if (_audiodriver -> getErrorMessage() != -1) notifyErrClient (_audiodriver -> getErrorMessage()); - _debug ("Current device: %i \n", type); + _debug ("Current device: %i ", type); - _debug ("has current call: %i \n", hasCurrentCall()); + _debug ("has current call: %i ", hasCurrentCall()); if (hasCurrentCall()) _audiodriver->startStream(); @@ -3192,7 +3192,7 @@ void ManagerImpl::switchAudioManager (void) // need to stop audio streams if there is currently no call // if ( (type != PULSEAUDIO) && (!hasCurrentCall())) { - // _debug("There is currently a call!!\n"); + // _debug("There is currently a call!!"); // _audiodriver->stopStream(); // } @@ -3237,7 +3237,7 @@ void ManagerImpl::setMicVolume (unsigned short mic_vol) void ManagerImpl::setSipAddress (const std::string& address) { - _debug ("Setting new ip to ip address %s\n", address.c_str()); + _debug ("Setting new ip to ip address %s", address.c_str()); std::string ip_address = std::string(address); @@ -3246,7 +3246,7 @@ void ManagerImpl::setSipAddress (const std::string& address) std::string local_address = ip_address.substr(0,index); std::string local_port = ip_address.substr(index+1); - _debug ("Setting new ip to ip address %s and port %s\n", local_address.c_str(), local_port.c_str()); + _debug ("Setting new ip to ip address %s and port %s", local_address.c_str(), local_port.c_str()); int prevPort = getConfigInt (IP2IP_PROFILE, LOCAL_PORT); std::string prevAddress = getConfigString(IP2IP_PROFILE, LOCAL_ADDRESS); @@ -3263,7 +3263,7 @@ int ManagerImpl::getSipAddress (void) { // return getConfigInt (PREFERENCES , CONFIG_SIP_PORT); /* The 'global' SIP port is set throug the IP profile */ - _debug("-----------------------------------------getSipAddress %i\n", getConfigInt (IP2IP_PROFILE, LOCAL_PORT)); + _debug("-----------------------------------------getSipAddress %i", getConfigInt (IP2IP_PROFILE, LOCAL_PORT)); return getConfigInt (IP2IP_PROFILE, LOCAL_PORT); @@ -3434,7 +3434,7 @@ ManagerImpl::getConfigString (const std::string& section, const std::string& bool ManagerImpl::setConfig (const std::string& section, const std::string& name, const std::string& value) { - _debug ("ManagerImpl::setConfig %s %s %s\n", section.c_str(), name.c_str(), value.c_str()); + _debug ("ManagerImpl::setConfig %s %s %s", section.c_str(), name.c_str(), value.c_str()); return _config.setConfigTreeItem (section, name, value); } @@ -3449,7 +3449,7 @@ ManagerImpl::setConfig (const std::string& section, const std::string& name, int void ManagerImpl::setAccountsOrder (const std::string& order) { - _debug ("Setcreate accounts order : %s\n", order.c_str()); + _debug ("Setcreate accounts order : %s", order.c_str()); // Set the new config setConfig (PREFERENCES, CONFIG_ACCOUNTS_ORDER, order); } @@ -3472,7 +3472,7 @@ ManagerImpl::getAccountList() while (iter != _accountMap.end()) { if (iter->second != NULL) { - //_debug("PUSHING BACK %s\n", iter->first.c_str()); + //_debug("PUSHING BACK %s", iter->first.c_str()); v.push_back (iter->first.data()); } @@ -3507,7 +3507,7 @@ std::map< std::string, std::string > ManagerImpl::getAccountDetails (const Accou Account * account = _accountMap[accountID]; if (account == NULL) { - _debug ("Cannot getAccountDetails on a non-existing accountID. Defaults will be used.\n"); + _debug ("Cannot getAccountDetails on a non-existing accountID. Defaults will be used."); } a.insert (std::pair<std::string, std::string> (CONFIG_ACCOUNT_ALIAS, getConfigString (accountID, CONFIG_ACCOUNT_ALIAS))); @@ -3633,7 +3633,7 @@ void ManagerImpl::setCredential (const std::string& accountID, const int32_t& in std::string section = "Credential" + std::string (":") + accountID + std::string (":") + credentialIndex; - _debug ("Setting credential in section %s\n", section.c_str()); + _debug ("Setting credential in section %s", section.c_str()); it = credentialInformation.find (USERNAME); std::string username; @@ -3733,7 +3733,7 @@ void ManagerImpl::setAccountDetails (const std::string& accountID, const std::ma // it is already saved as a MD5 Hash. // TODO: This test is weak. Fix this. if ( (password.compare (getConfigString (accountID, PASSWORD)) != 0)) { - _debug ("Password sent and password from config are different. Re-hashing\n"); + _debug ("Password sent and password from config are different. Re-hashing"); std::string hash; if (authenticationName.empty()) { @@ -3974,7 +3974,7 @@ void ManagerImpl::setAccountDetails (const std::string& accountID, const std::ma acc->unregisterVoIPLink(); } } else { - _debug ("ManagerImpl::setAccountDetails: account is NULL\n"); + _debug ("ManagerImpl::setAccountDetails: account is NULL"); } // Update account details to the client side @@ -3996,11 +3996,11 @@ ManagerImpl::sendRegister (const std::string& accountID , const int32_t& enable) if (acc->isEnabled()) { // Verify we aren't already registered, then register - _debug ("Send register for account %s\n" , accountID.c_str()); + _debug ("Send register for account %s" , accountID.c_str()); acc->registerVoIPLink(); } else { // Verify we are already registered, then unregister - _debug ("Send unregister for account %s\n" , accountID.c_str()); + _debug ("Send unregister for account %s" , accountID.c_str()); acc->unregisterVoIPLink(); } @@ -4022,7 +4022,7 @@ ManagerImpl::addAccount (const std::map< std::string, std::string >& details) // Get the type accountType = (*details.find (CONFIG_ACCOUNT_TYPE)).second; - _debug ("%s\n", newAccountID.c_str()); + _debug ("%s", newAccountID.c_str()); /** @todo Verify the uniqueness, in case a program adds accounts, two in a row. */ @@ -4031,7 +4031,7 @@ ManagerImpl::addAccount (const std::map< std::string, std::string >& details) } else if (accountType == "IAX") { newAccount = AccountCreator::createAccount (AccountCreator::IAX_ACCOUNT, newAccountID); } else { - _debug ("Unknown %s param when calling addAccount(): %s\n", CONFIG_ACCOUNT_TYPE, accountType.c_str()); + _debug ("Unknown %s param when calling addAccount(): %s", CONFIG_ACCOUNT_TYPE, accountType.c_str()); return ""; } @@ -4096,7 +4096,7 @@ ManagerImpl::removeAccount (const AccountID& accountID) saveConfig(); - _debug ("REMOVE ACCOUNT\n"); + _debug ("REMOVE ACCOUNT"); if (_dbus) _dbus->getConfigurationManager()->accountsChanged(); @@ -4110,7 +4110,7 @@ ManagerImpl::associateCallToAccount (const CallID& callID, const AccountID& acco if (accountExists (accountID)) { // account id exist in AccountMap ost::MutexLock m (_callAccountMapMutex); _callAccountMap[callID] = accountID; - _debug ("Associate Call %s with Account %s\n", callID.data(), accountID.data()); + _debug ("Associate Call %s with Account %s", callID.data(), accountID.data()); return true; } else { return false; @@ -4212,11 +4212,11 @@ ManagerImpl::loadAccountMap() } else { - _debug ("Unknown %s param in config file (%s)\n", CONFIG_ACCOUNT_TYPE, accountType.c_str()); + _debug ("Unknown %s param in config file (%s)", CONFIG_ACCOUNT_TYPE, accountType.c_str()); } if (tmpAccount != NULL) { - _debug ("Loading account %s \n", iter->c_str()); + _debug ("Loading account %s ", iter->c_str()); _accountMap[iter->c_str() ] = tmpAccount; nbAccount++; } @@ -4225,16 +4225,16 @@ ManagerImpl::loadAccountMap() } if (_directIpAccount == NULL) { - _debug ("Failed to create direct ip calls \"account\"\n"); + _debug ("Failed to create direct ip calls \"account\""); } else { // Force the options to be loaded // No registration in the sense of // the REGISTER method is performed. - _debug ("Succeed to create direct ip calls \"account\"\n"); + _debug ("Succeed to create direct ip calls \"account\""); _directIpAccount->registerVoIPLink(); } - _debug ("nbAccount loaded %i \n",nbAccount); + _debug ("nbAccount loaded %i ",nbAccount); return nbAccount; } @@ -4247,7 +4247,7 @@ ManagerImpl::unloadAccountMap() while (iter != _accountMap.end()) { - _debug ("-> Unloading account %s\n", iter->first.c_str()); + _debug ("-> Unloading account %s", iter->first.c_str()); delete iter->second; iter->second = 0; @@ -4275,7 +4275,7 @@ ManagerImpl::getAccount (const AccountID& accountID) // In our definition, // this is the "direct ip calls account" if (accountID == AccountNULL) { - _debug ("Returns the direct IP account\n"); + _debug ("Returns the direct IP account"); return _directIpAccount; } @@ -4293,16 +4293,16 @@ ManagerImpl::getAccountIdFromNameAndServer (const std::string& userName, const s { AccountMap::iterator iter; SIPAccount *account; - _debug ("getAccountIdFromNameAndServer : username = %s , server = %s\n", userName.c_str(), server.c_str()); + _debug ("getAccountIdFromNameAndServer : username = %s , server = %s", userName.c_str(), server.c_str()); // Try to find the account id from username and server name by full match for (iter = _accountMap.begin(); iter != _accountMap.end(); ++iter) { - _debug ("for : account = %s\n", iter->first.c_str()); + _debug ("for : account = %s", iter->first.c_str()); account = dynamic_cast<SIPAccount *> (iter->second); if (account != NULL) { if (account->fullMatch (userName, server)) { - _debug ("Matching accountId in request is a fullmatch\n"); + _debug ("Matching accountId in request is a fullmatch"); return iter->first; } } @@ -4314,7 +4314,7 @@ ManagerImpl::getAccountIdFromNameAndServer (const std::string& userName, const s if (account != NULL) { if (account->hostnameMatch (server)) { - _debug ("Matching accountId in request with hostname\n"); + _debug ("Matching accountId in request with hostname"); return iter->first; } } @@ -4326,7 +4326,7 @@ ManagerImpl::getAccountIdFromNameAndServer (const std::string& userName, const s if (account != NULL) { if (account->userMatch (userName)) { - _debug ("Matching accountId in request with username\n"); + _debug ("Matching accountId in request with username"); return iter->first; } } @@ -4354,6 +4354,45 @@ void ManagerImpl::restartPJSIP (void) this->registerCurSIPAccounts (siplink); } +int +ManagerImpl::registerAccounts() +{ + int status; + bool flag = true; + AccountMap::iterator iter; + + _debugInit ("Initiate VoIP Links Registration"); + iter = _accountMap.begin(); + + /* Loop on the account map previously loaded */ + + while (iter != _accountMap.end()) { + if (iter->second) { + + if (iter->second->isEnabled()) { + + _debug("Register account %s", iter->first.c_str()); + + status = iter->second->registerVoIPLink(); + + if (status != SUCCESS) { + flag = false; + } + } + } + + iter++; + } + + // calls the client notification here in case of errors at startup... + if (_audiodriver -> getErrorMessage() != -1) + notifyErrClient (_audiodriver -> getErrorMessage()); + + ASSERT (flag, true); + + return SUCCESS; +} + VoIPLink* ManagerImpl::getAccountLink (const AccountID& accountID) { if (accountID!=AccountNULL) { @@ -4520,7 +4559,7 @@ void ManagerImpl::check_call_configuration (const CallID& id, const std::string Call::CallConfiguration config; if (to.find (SIP_SCHEME) == 0 || to.find (SIPS_SCHEME) == 0) { - _debug ("Sending Sip Call \n"); + _debug ("Sending Sip Call "); config = Call::IPtoIP; } else { config = Call::Classic; @@ -4537,7 +4576,7 @@ bool ManagerImpl::associateConfigToCall (const CallID& callID, Call::CallConfigu if (getConfigFromCall (callID) == CallConfigNULL) { // nothing with the same ID _callConfigMap[callID] = config; - _debug ("Associate Call %s with config %i\n", callID.data(), config); + _debug ("Associate Call %s with config %i", callID.data(), config); return true; } else { return false; @@ -4583,7 +4622,7 @@ std::map< std::string, std::string > ManagerImpl::getCallDetails (const CallID& // So first we fetch the account accountid = getAccountFromCall (callID); - _debug ("%s\n",callID.c_str()); + _debug ("%s",callID.c_str()); // Then the VoIP link this account is linked with (IAX2 or SIP) if ( (account=getAccount (accountid)) != 0) { @@ -4603,7 +4642,7 @@ std::map< std::string, std::string > ManagerImpl::getCallDetails (const CallID& call_details.insert (std::pair<std::string, std::string> ("CALL_STATE", call->getStateStr ())); call_details.insert (std::pair<std::string, std::string> ("CALL_TYPE", type.str ())); } else { - _debug ("Error: Managerimpl - getCallDetails ()\n"); + _debug ("Error: Managerimpl - getCallDetails ()"); call_details.insert (std::pair<std::string, std::string> ("ACCOUNTID", AccountNULL)); call_details.insert (std::pair<std::string, std::string> ("PEER_NUMBER", "Unknown")); call_details.insert (std::pair<std::string, std::string> ("PEER_NAME", "Unknown")); @@ -4668,7 +4707,7 @@ ManagerImpl::getConferenceDetails (const ConfID& confID) std::vector< std::string > ManagerImpl::getConferenceList (void) { - _debug ("ManagerImpl::getConferenceList\n"); + _debug ("ManagerImpl::getConferenceList"); std::vector< std::string > v; ConferenceMap::iterator iter = _conferencemap.begin(); @@ -4685,7 +4724,7 @@ ManagerImpl::getConferenceList (void) std::vector< std::string > ManagerImpl::getParticipantList (const std::string& confID) { - _debug ("ManagerImpl::getParticipantList\n"); + _debug ("ManagerImpl::getParticipantList"); std::vector< std::string > v; ConferenceMap::iterator iter_conf = _conferencemap.find (confID); diff --git a/sflphone-common/src/managerimpl.h b/sflphone-common/src/managerimpl.h index 997656a03e..f241fabc40 100644 --- a/sflphone-common/src/managerimpl.h +++ b/sflphone-common/src/managerimpl.h @@ -1029,6 +1029,14 @@ class ManagerImpl { */ bool isCurrentCall(const CallID& callId); + + /** + * Send registration to all enabled accounts + * @return 0 on registration success + * 1 otherelse + */ + int registerAccounts(); + /** * Restart PJSIP * @param void diff --git a/sflphone-common/src/plug-in/audiorecorder/audiodsp.cpp b/sflphone-common/src/plug-in/audiorecorder/audiodsp.cpp index 49ea4417cc..f9b5c014ef 100644 --- a/sflphone-common/src/plug-in/audiorecorder/audiodsp.cpp +++ b/sflphone-common/src/plug-in/audiorecorder/audiodsp.cpp @@ -39,8 +39,8 @@ AudioDSP::~AudioDSP() float AudioDSP::getRMS (int data) { - // printf("AudioDSP::getRMS() : bufPointer_ %i \n ", bufPointer_); - printf ("AudioDSP::getRMS() : %i \n", data); + // printf("AudioDSP::getRMS() : bufPointer_ %i ", bufPointer_); + printf ("AudioDSP::getRMS() : %i ", data); circBuffer_[bufPointer_++] = (float) data; if (bufPointer_ >= bufferLength_) @@ -57,13 +57,13 @@ float AudioDSP::computeRMS() for (int i = 0; i < bufferLength_; i++) { - // printf("AudioDSP::computeRMS() : i_ %i \n ", i); + // printf("AudioDSP::computeRMS() : i_ %i ", i); rms += (float) (circBuffer_[i]*circBuffer_[i]); } rms = sqrt (rms / (float) bufferLength_); - // printf("AudioDSP::computeRMS() : RMS VALUE: %f \n", rms); + // printf("AudioDSP::computeRMS() : RMS VALUE: %f ", rms); return rms; } diff --git a/sflphone-common/src/plug-in/audiorecorder/audiorecord.cpp b/sflphone-common/src/plug-in/audiorecorder/audiorecord.cpp index 9b265de0ee..4ab7c6c970 100644 --- a/sflphone-common/src/plug-in/audiorecorder/audiorecord.cpp +++ b/sflphone-common/src/plug-in/audiorecorder/audiorecord.cpp @@ -93,12 +93,12 @@ void AudioRecord::initFileName (std::string peerNumber) if (fileType_ == FILE_RAW) { if (strstr (fileName_, ".raw") == NULL) { - printf ("AudioRecord::openFile::concatenate .raw file extension: name : %s \n", fileName_); + printf ("AudioRecord::openFile::concatenate .raw file extension: name : %s ", fileName_); fName.append (".raw"); } } else if (fileType_ == FILE_WAV) { if (strstr (fileName_, ".wav") == NULL) { - printf ("AudioRecord::openFile::concatenate .wav file extension: name : %s \n", fileName_); + printf ("AudioRecord::openFile::concatenate .wav file extension: name : %s ", fileName_); fName.append (".wav"); } } @@ -110,14 +110,14 @@ void AudioRecord::openFile() { - _debug ("AudioRecord::openFile()\n"); + _debug ("AudioRecord::openFile()"); bool result = false; - _debug ("AudioRecord::openFile()\n"); + _debug ("AudioRecord::openFile()"); if (isFileExist()) { - _debug ("AudioRecord::Filename does not exist, creating one \n"); + _debug ("AudioRecord::Filename does not exist, creating one "); byteCounter_ = 0; if (fileType_ == FILE_RAW) { @@ -126,7 +126,7 @@ void AudioRecord::openFile() result = setWavFile(); } } else { - _debug ("AudioRecord::Filename already exist opening it \n"); + _debug ("AudioRecord::Filename already exist opening it "); if (fileType_ == FILE_RAW) { result = openExistingRawFile(); @@ -156,10 +156,10 @@ bool AudioRecord::isOpenFile() { if (fp) { - _debug ("AudioRecord::isOpenFile(): file already openend\n"); + _debug ("AudioRecord::isOpenFile(): file already openend"); return true; } else { - _debug ("AudioRecord::isOpenFIle(): file not openend \n"); + _debug ("AudioRecord::isOpenFIle(): file not openend "); return false; } } @@ -167,7 +167,7 @@ bool AudioRecord::isOpenFile() bool AudioRecord::isFileExist() { - _debug ("AudioRecord::isFileExist(): try to open name : %s \n", fileName_); + _debug ("AudioRecord::isFileExist(): try to open name : %s ", fileName_); if (fopen (fileName_,"rb") ==0) { return true; @@ -178,7 +178,7 @@ bool AudioRecord::isFileExist() bool AudioRecord::isRecording() { - _debug ("AudioRecording::isRecording() %i \n", recordingEnabled_); + _debug ("AudioRecording::isRecording() %i ", recordingEnabled_); if (recordingEnabled_) @@ -190,17 +190,17 @@ bool AudioRecord::isRecording() bool AudioRecord::setRecording() { - _debug ("AudioRecord::setRecording() \n"); + _debug ("AudioRecord::setRecording() "); if (isOpenFile()) { - _debug ("AudioRecord::setRecording()::file already opened \n"); + _debug ("AudioRecord::setRecording()::file already opened "); if (!recordingEnabled_) recordingEnabled_ = true; else recordingEnabled_ = false; } else { - _debug ("AudioRecord::setRecording():Opening the wave file in call during call instantiation \n"); + _debug ("AudioRecord::setRecording():Opening the wave file in call during call instantiation "); openFile(); recordingEnabled_ = true; // once opend file, start recording @@ -213,7 +213,7 @@ bool AudioRecord::setRecording() void AudioRecord::stopRecording() { - _debug ("AudioRecording::stopRecording() \n"); + _debug ("AudioRecording::stopRecording() "); if (recordingEnabled_) recordingEnabled_ = false; @@ -270,7 +270,7 @@ void AudioRecord::createFilename() // fileName_ = out.str(); strncpy (fileName_, out.str().c_str(), 8192); - printf ("AudioRecord::createFilename::filename for this call %s \n",fileName_); + printf ("AudioRecord::createFilename::filename for this call %s ",fileName_); } bool AudioRecord::setRawFile() @@ -279,16 +279,16 @@ bool AudioRecord::setRawFile() fp = fopen (savePath_.c_str(), "wb"); if (!fp) { - _debug ("AudioRecord::setRawFile() : could not create RAW file!\n"); + _debug ("AudioRecord::setRawFile() : could not create RAW file!"); return false; } if (sndFormat_ != INT16) { // TODO need to change INT16 to SINT16 sndFormat_ = INT16; - _debug ("AudioRecord::setRawFile() : using 16-bit signed integer data format for file.\n"); + _debug ("AudioRecord::setRawFile() : using 16-bit signed integer data format for file."); } - _debug ("AudioRecord:setRawFile() : created RAW file.\n"); + _debug ("AudioRecord:setRawFile() : created RAW file."); return true; } @@ -300,7 +300,7 @@ bool AudioRecord::setWavFile() fp = fopen (savePath_.c_str(), "wb"); if (!fp) { - _debug ("AudioRecord::setWavFile() : could not create WAV file.\n"); + _debug ("AudioRecord::setWavFile() : could not create WAV file."); return false; } @@ -328,11 +328,11 @@ bool AudioRecord::setWavFile() if (fwrite (&hdr, 4, 11, fp) != 11) { - _debug ("AudioRecord::setWavFile() : could not write WAV header for file. \n"); + _debug ("AudioRecord::setWavFile() : could not write WAV header for file. "); return false; } - _debug ("AudioRecord::setWavFile() : created WAV file. \n"); + _debug ("AudioRecord::setWavFile() : created WAV file. "); return true; } @@ -343,7 +343,7 @@ bool AudioRecord::openExistingRawFile() fp = fopen (fileName_, "ab+"); if (!fp) { - _debug ("AudioRecord::openExistingRawFile() : could not create RAW file!\n"); + _debug ("AudioRecord::openExistingRawFile() : could not create RAW file!"); return false; } @@ -353,42 +353,42 @@ bool AudioRecord::openExistingRawFile() bool AudioRecord::openExistingWavFile() { - _debug ("AudioRecord::openExistingWavFile() \n"); + _debug ("AudioRecord::openExistingWavFile() "); fp = fopen (fileName_, "rb+"); if (!fp) { - _debug ("AudioRecord::openExistingWavFile() : could not open WAV file rb+!\n"); + _debug ("AudioRecord::openExistingWavFile() : could not open WAV file rb+!"); return false; } - printf ("AudioRecord::openExistingWavFile()::Tried to open %s \n",fileName_); + printf ("AudioRecord::openExistingWavFile()::Tried to open %s ",fileName_); if (fseek (fp, 40, SEEK_SET) != 0) // jump to data length - _debug ("AudioRecord::OpenExistingWavFile: 1.Couldn't seek offset 40 in the file \n"); + _debug ("AudioRecord::OpenExistingWavFile: 1.Couldn't seek offset 40 in the file "); if (fread (&byteCounter_, 4, 1, fp)) - _debug ("AudioRecord::OpenExistingWavFile : bytecounter Read successfully \n"); + _debug ("AudioRecord::OpenExistingWavFile : bytecounter Read successfully "); if (fseek (fp, 0 , SEEK_END) != 0) - _debug ("AudioRecors::OpenExistingWavFile : 2.Couldn't seek at the en of the file \n"); + _debug ("AudioRecors::OpenExistingWavFile : 2.Couldn't seek at the en of the file "); - printf ("AudioRecord::OpenExistingWavFile : Byte counter after oppening : %d \n", (int) byteCounter_); + printf ("AudioRecord::OpenExistingWavFile : Byte counter after oppening : %d ", (int) byteCounter_); if (fclose (fp) != 0) - _debug ("AudioRecord::openExistingWavFile()::ERROR: can't close file r+ \n"); + _debug ("AudioRecord::openExistingWavFile()::ERROR: can't close file r+ "); fp = fopen (fileName_, "ab+"); if (!fp) { - _debug ("AudioRecord::openExistingWavFile() : could not createopen WAV file ab+!\n"); + _debug ("AudioRecord::openExistingWavFile() : could not createopen WAV file ab+!"); return false; } if (fseek (fp, 4 , SEEK_END) != 0) - _debug ("AudioRecors::OpenExistingWavFile : 2.Couldn't seek at the en of the file \n"); + _debug ("AudioRecors::OpenExistingWavFile : 2.Couldn't seek at the en of the file "); return true; @@ -398,7 +398,7 @@ bool AudioRecord::openExistingWavFile() void AudioRecord::closeWavFile() { if (fp == 0) { - _debug ("AudioRecord:: Can't closeWavFile, a file has not yet been opened!\n"); + _debug ("AudioRecord:: Can't closeWavFile, a file has not yet been opened!"); return; } @@ -407,28 +407,28 @@ void AudioRecord::closeWavFile() fseek (fp, 40, SEEK_SET); // jump to data length - if (ferror (fp)) perror ("AudioRecord::closeWavFile()::ERROR: can't reach offset 40\n"); + if (ferror (fp)) perror ("AudioRecord::closeWavFile()::ERROR: can't reach offset 40"); fwrite (&bytes, sizeof (SINT32), 1, fp); - if (ferror (fp)) perror ("AudioRecord::closeWavFile()::ERROR: can't write bytes for data length \n"); + if (ferror (fp)) perror ("AudioRecord::closeWavFile()::ERROR: can't write bytes for data length "); - printf ("AudioRecord::closeWavFile : data bytes: %i \n", (int) bytes); + printf ("AudioRecord::closeWavFile : data bytes: %i ", (int) bytes); bytes = byteCounter_ * channels_ + 44; // + 44 for the wave header fseek (fp, 4, SEEK_SET); // jump to file size - if (ferror (fp)) perror ("AudioRecord::closeWavFile()::ERROR: can't reach offset 4\n"); + if (ferror (fp)) perror ("AudioRecord::closeWavFile()::ERROR: can't reach offset 4"); fwrite (&bytes, 4, 1, fp); - if (ferror (fp)) perror ("AudioRecord::closeWavFile()::ERROR: can't reach offset 4\n"); + if (ferror (fp)) perror ("AudioRecord::closeWavFile()::ERROR: can't reach offset 4"); - printf ("AudioRecord::closeWavFile : bytes : %i \n", (int) bytes); + printf ("AudioRecord::closeWavFile : bytes : %i ", (int) bytes); if (fclose (fp) != 0) - _debug ("AudioRecord::closeWavFile()::ERROR: can't close file\n"); + _debug ("AudioRecord::closeWavFile()::ERROR: can't close file"); } @@ -470,7 +470,7 @@ void AudioRecord::recData (SFLDataFormat* buffer, int nSamples) if (recordingEnabled_) { if (fp == 0) { - _debug ("AudioRecord: Can't record data, a file has not yet been opened!\n"); + _debug ("AudioRecord: Can't record data, a file has not yet been opened!"); return; } @@ -478,7 +478,7 @@ void AudioRecord::recData (SFLDataFormat* buffer, int nSamples) if (sndFormat_ == INT16) { // TODO change INT16 to SINT16 if (fwrite (buffer, sizeof (SFLDataFormat), nSamples, fp) != (unsigned int) nSamples) - _debug ("AudioRecord: Could not record data! \n"); + _debug ("AudioRecord: Could not record data! "); else { fflush (fp); byteCounter_ += (unsigned long) (nSamples*sizeof (SFLDataFormat)); @@ -496,7 +496,7 @@ void AudioRecord::recData (SFLDataFormat* buffer_1, SFLDataFormat* buffer_2, int if (recordingEnabled_) { if (fp == 0) { - _debug ("AudioRecord: Can't record data, a file has not yet been opened!\n"); + _debug ("AudioRecord: Can't record data, a file has not yet been opened!"); return; } @@ -508,7 +508,7 @@ void AudioRecord::recData (SFLDataFormat* buffer_1, SFLDataFormat* buffer_2, int if (fwrite (&mixBuffer_[k], 2, 1, fp) != 1) - _debug ("AudioRecord: Could not record data!\n"); + _debug ("AudioRecord: Could not record data!"); else { fflush (fp); } diff --git a/sflphone-common/src/plug-in/librarymanager.cpp b/sflphone-common/src/plug-in/librarymanager.cpp index 0c8c1040bd..45567c18fc 100644 --- a/sflphone-common/src/plug-in/librarymanager.cpp +++ b/sflphone-common/src/plug-in/librarymanager.cpp @@ -36,14 +36,14 @@ LibraryManager::LibraryHandle LibraryManager::loadLibrary (const std::string &fi LibraryHandle pluginHandlePtr = NULL; const char *error; - _debug ("Loading dynamic library %s\n", filename.c_str()); + _debug ("Loading dynamic library %s", filename.c_str()); /* Load the library */ pluginHandlePtr = dlopen (filename.c_str(), RTLD_LAZY); if (!pluginHandlePtr) { error = dlerror(); - _debug ("Error while opening plug-in: %s\n", error); + _debug ("Error while opening plug-in: %s", error); return NULL; } @@ -57,12 +57,12 @@ int LibraryManager::unloadLibrary () if (_handlePtr == NULL) return 1; - _debug ("Unloading dynamic library ...\n"); + _debug ("Unloading dynamic library ..."); dlclose (_handlePtr); if (dlerror()) { - _debug ("Error unloading the library : %s\n...", dlerror()); + _debug ("Error unloading the library : %s...", dlerror()); return 1; } @@ -96,7 +96,7 @@ LibraryManagerException::LibraryManagerException (const std::string &libraryName { if (_reason == loadingFailed) - _details = "Error when loading " + libraryName + "\n" + details; + _details = "Error when loading " + libraryName + "" + details; else _details = "Error when resolving symbol " + details + " in " + libraryName; } diff --git a/sflphone-common/src/plug-in/pluginmanager.cpp b/sflphone-common/src/plug-in/pluginmanager.cpp index 80197f6cce..431f3eb874 100644 --- a/sflphone-common/src/plug-in/pluginmanager.cpp +++ b/sflphone-common/src/plug-in/pluginmanager.cpp @@ -59,7 +59,7 @@ PluginManager::loadPlugins (const std::string &path) /* The directory in which plugins are dropped. Default: /usr/lib/sflphone/plugins/ */ (path == "") ? pluginDir = std::string (PLUGINS_DIR).append ("/") :pluginDir = path; - _debug ("Loading plugins from %s...\n", pluginDir.c_str()); + _debug ("Loading plugins from %s...", pluginDir.c_str()); dir = opendir (pluginDir.c_str()); /* Test if the directory exists or is readable */ @@ -79,13 +79,13 @@ PluginManager::loadPlugins (const std::string &path) /* Instanciate the plugin object */ if (instanciatePlugin (library, &plugin) != 0) { - _debug ("Error instanciating the plugin ...\n"); + _debug ("Error instanciating the plugin ..."); return 1; } /* Regitering the current plugin */ if (registerPlugin (plugin, library) != 0) { - _debug ("Error registering the plugin ...\n"); + _debug ("Error registering the plugin ..."); return 1; } } @@ -115,14 +115,14 @@ PluginManager::unloadPlugins (void) info = iter->second; if (deletePlugin (info) != 0) { - _debug ("Error deleting the plugin ... \n"); + _debug ("Error deleting the plugin ... "); return 1; } unloadDynamicLibrary (info->_libraryPtr); if (unregisterPlugin (info) != 0) { - _debug ("Error unregistering the plugin ... \n"); + _debug ("Error unregistering the plugin ... "); return 1; } @@ -161,7 +161,7 @@ PluginManager::loadDynamicLibrary (const std::string& filename) int PluginManager::unloadDynamicLibrary (LibraryManager *libraryPtr) { - _debug ("Unloading dynamic library ...\n"); + _debug ("Unloading dynamic library ..."); /* Close it */ return libraryPtr->unloadLibrary (); } diff --git a/sflphone-common/src/sip/sdp.cpp b/sflphone-common/src/sip/sdp.cpp index 116d2df867..480958e22c 100644 --- a/sflphone-common/src/sip/sdp.cpp +++ b/sflphone-common/src/sip/sdp.cpp @@ -91,7 +91,7 @@ void Sdp::set_media_descriptor_line (sdpMedia *media, pjmedia_sdp_media** p_med) for (i=0; i<count; i++) { codec = media->get_media_codec_list() [i]; tmp = this->convert_int_to_string (codec->getPayload ()); - _debug ("%s\n", tmp.c_str()); + _debug ("%s", tmp.c_str()); pj_strdup2 (_pool, &med->desc.fmt[i], tmp.c_str()); // Add a rtpmap field for each codec @@ -127,7 +127,7 @@ void Sdp::set_media_descriptor_line (sdpMedia *media, pjmedia_sdp_media** p_med) throw; } } else { - _debug ("No hash specified\n"); + _debug ("No hash specified"); } *p_med = med; @@ -137,7 +137,7 @@ int Sdp::create_local_offer () { pj_status_t status; - _debug ("Create local offer\n"); + _debug ("Create local offer"); // Build local media capabilities set_local_media_capabilities (); @@ -172,12 +172,12 @@ int Sdp::create_initial_offer() pj_status_t status; pjmedia_sdp_neg_state state; - _debug ("Create initial offer\n"); + _debug ("Create initial offer"); // Build the SDP session descriptor status = create_local_offer(); if (status != PJ_SUCCESS) { - _debug (" Error: Failled to create initial offer\n"); + _debug (" Error: Failled to create initial offer"); return status; } @@ -185,7 +185,7 @@ int Sdp::create_initial_offer() status = pjmedia_sdp_neg_create_w_local_offer (_pool, get_local_sdp_session(), &_negociator); if (status != PJ_SUCCESS) { - _debug (" Error: Failled to create an initial SDP negociator\n"); + _debug (" Error: Failled to create an initial SDP negociator"); return status; } @@ -193,7 +193,7 @@ int Sdp::create_initial_offer() PJ_ASSERT_RETURN (status == PJ_SUCCESS, 1); - _debug (" Initial offer created succesfully\n"); + _debug (" Initial offer created succesfully"); return PJ_SUCCESS; } @@ -205,7 +205,7 @@ int Sdp::receiving_initial_offer (pjmedia_sdp_session* remote) pj_status_t status; - _debug ("Receiving initial offer\n"); + _debug ("Receiving initial offer"); // Create the SDP negociator instance by calling // pjmedia_sdp_neg_create_w_remote_offer with the remote offer, and by providing the local offer ( optional ) @@ -246,12 +246,12 @@ pj_status_t Sdp::check_sdp_answer (pjsip_inv_session *inv, pjsip_rx_data *rdata) } if (message->body == NULL) { - _debug ("Empty message body\n"); + _debug ("Empty message body"); return PJMEDIA_SDP_EINSDP; } if (pj_stricmp (&message->body->content_type.type, &str_application) || pj_stricmp (&message->body->content_type.subtype, &str_sdp)) { - _debug ("Incoming Message does not contain SDP\n"); + _debug ("Incoming Message does not contain SDP"); return PJMEDIA_SDP_EINSDP; } @@ -263,17 +263,17 @@ pj_status_t Sdp::check_sdp_answer (pjsip_inv_session *inv, pjsip_rx_data *rdata) } if (status != PJ_SUCCESS) { - _debug ("SDP cannot be validated\n"); + _debug ("SDP cannot be validated"); return PJMEDIA_SDP_EINSDP; } // This is an answer - _debug ("Got SDP answer %s\n", pjsip_rx_data_get_info (rdata)); + _debug ("Got SDP answer %s", pjsip_rx_data_get_info (rdata)); status = pjmedia_sdp_neg_set_remote_answer (inv->pool, inv->neg, remote_sdp); if (status != PJ_SUCCESS) { - _debug ("An error occured while processing remote answer %s\n", pjsip_rx_data_get_info (rdata)); + _debug ("An error occured while processing remote answer %s", pjsip_rx_data_get_info (rdata)); return PJMEDIA_SDP_EINSDP; } @@ -282,9 +282,9 @@ pj_status_t Sdp::check_sdp_answer (pjsip_inv_session *inv, pjsip_rx_data *rdata) status = pjmedia_sdp_neg_negotiate (inv->pool, inv->neg, 0); - _debug ("Negotiation returned with status %d PJ_SUCCESS being %d\n", status, PJ_SUCCESS); + _debug ("Negotiation returned with status %d PJ_SUCCESS being %d", status, PJ_SUCCESS); } else { - _debug ("No need to check sdp answer since we are UAS\n"); + _debug ("No need to check sdp answer since we are UAS"); return PJ_SUCCESS; } @@ -442,9 +442,9 @@ void Sdp::set_negotiated_sdp (const pjmedia_sdp_session *sdp) // pj_strtoul(attribute->pt) pjmedia_sdp_attr_to_rtpmap (_pool, attribute, &rtpmap); - // _debug("================== set_negociated_offer ===================== %i\n", pj_strtoul(&rtpmap->pt)); - // _debug("================== set_negociated_offer ===================== %s\n", current->desc.fmt[j].ptr); - // _debug("================== set_negociated_offer ===================== %i\n", atoi(current->desc.fmt[j].ptr)); + // _debug("================== set_negociated_offer ===================== %i", pj_strtoul(&rtpmap->pt)); + // _debug("================== set_negociated_offer ===================== %s", current->desc.fmt[j].ptr); + // _debug("================== set_negociated_offer ===================== %i", atoi(current->desc.fmt[j].ptr)); iter = codecs_list.find ( (AudioCodecType) pj_strtoul (&rtpmap->pt)); if (iter==codecs_list.end()) @@ -465,7 +465,7 @@ AudioCodec* Sdp::get_session_media (void) AudioCodec *codec = NULL; std::vector<sdpMedia*> media_list; - _debug ("Executing sdp line %d - get_session_media ()\n", __LINE__); + _debug ("Executing sdp line %d - get_session_media ()", __LINE__); media_list = get_session_media_list (); nb_media = media_list.size(); @@ -515,9 +515,7 @@ void Sdp::toString (void) sdp << _local_offer->media[0]->desc.fmt[i].ptr << " "; } - sdp << "\n"; - - _debug ("LOCAL SDP: \n%s\n", sdp.str().c_str()); + _debug ("LOCAL SDP: \n%s", sdp.str().c_str()); } @@ -533,7 +531,7 @@ void Sdp::set_local_media_capabilities () // Clean it first _local_media_cap.clear(); - _debug ("Fetch local media capabilities. Local extern audio port: %i\n" , get_local_extern_audio_port()); + _debug ("Fetch local media capabilities. Local extern audio port: %i" , get_local_extern_audio_port()); /* Only one audio media used right now */ audio = new sdpMedia (MIME_TYPE_AUDIO); @@ -581,7 +579,7 @@ void Sdp::set_remote_ip_from_sdp (const pjmedia_sdp_session *r_sdp) { std::string remote_ip (r_sdp->conn->addr.ptr, r_sdp->conn->addr.slen); - _debug (" Remote IP from fetching SDP: %s\n", remote_ip.c_str()); + _debug (" Remote IP from fetching SDP: %s", remote_ip.c_str()); this->set_remote_ip (remote_ip); } @@ -591,21 +589,21 @@ void Sdp::set_remote_audio_port_from_sdp (pjmedia_sdp_media *r_media) int remote_port; remote_port = r_media->desc.port; - _debug (" Remote Audio Port from fetching SDP: %d\n", remote_port); + _debug (" Remote Audio Port from fetching SDP: %d", remote_port); this->set_remote_audio_port (remote_port); } void Sdp::set_media_transport_info_from_remote_sdp (const pjmedia_sdp_session *remote_sdp) { - _debug ("Fetching media from sdp\n"); + _debug ("Fetching media from sdp"); pjmedia_sdp_media *r_media; this->get_remote_sdp_media_from_offer (remote_sdp, &r_media); if (r_media==NULL) { - _debug ("SDP Failure: no remote sdp media found in the remote offer\n"); + _debug ("SDP Failure: no remote sdp media found in the remote offer"); return; } diff --git a/sflphone-common/src/sip/sipaccount.cpp b/sflphone-common/src/sip/sipaccount.cpp index a28461dea4..33445ad71a 100644 --- a/sflphone-common/src/sip/sipaccount.cpp +++ b/sflphone-common/src/sip/sipaccount.cpp @@ -79,7 +79,7 @@ int SIPAccount::initCredential (void) pjsip_cred_info * cred_info = (pjsip_cred_info *) malloc (sizeof (pjsip_cred_info) * (credentialCount)); if (cred_info == NULL) { - _debug ("Failed to set cred_info for account %s\n", _accountID.c_str()); + _debug ("Failed to set cred_info for account %s", _accountID.c_str()); return !SUCCESS; } @@ -104,7 +104,7 @@ int SIPAccount::initCredential (void) // on an assertion. if (md5HashingEnabled && _password.length() == 32) { dataType = PJSIP_CRED_DATA_DIGEST; - _debug ("Setting digest \n"); + _debug ("Setting digest "); } else { dataType = PJSIP_CRED_DATA_PLAIN_PASSWD; } @@ -139,7 +139,7 @@ int SIPAccount::initCredential (void) if (md5HashingEnabled && _password.length() == 32) { dataType = PJSIP_CRED_DATA_DIGEST; - _debug ("Setting digest \n"); + _debug ("Setting digest "); } else { dataType = PJSIP_CRED_DATA_PLAIN_PASSWD; } @@ -148,7 +148,7 @@ int SIPAccount::initCredential (void) cred_info[i].scheme = pj_str ( (char*) "digest"); - _debug ("Setting credential %d realm = %s passwd = %s username = %s data_type = %d\n", i, realm.c_str(), password.c_str(), username.c_str(), cred_info[i].data_type); + _debug ("Setting credential %d realm = %s passwd = %s username = %s data_type = %d", i, realm.c_str(), password.c_str(), username.c_str(), cred_info[i].data_type); } _credentialCount = credentialCount; @@ -200,7 +200,7 @@ int SIPAccount::registerVoIPLink() int SIPAccount::unregisterVoIPLink() { - _debug ("Unregister account %s\n" , getAccountID().c_str()); + _debug ("Unregister account %s" , getAccountID().c_str()); if (_accountID == IP2IP_PROFILE) { return true; @@ -341,7 +341,7 @@ void SIPAccount::loadConfig() bool tlsEnabled = Manager::instance().getConfigBool (_accountID, TLS_ENABLE); if (tlsEnabled) { - _debug ("---------------------------- TLS Enabled\n"); + _debug ("---------------------------- TLS Enabled"); initTlsConfiguration(); _transportType = PJSIP_TRANSPORT_TLS; } else { @@ -525,7 +525,7 @@ std::string SIPAccount::getContactHeader (const std::string& address, const std: _displayName = Manager::instance().getConfigString (_accountID, DISPLAY_NAME); - _debug ("Display Name: %s\n", _displayName.c_str()); + _debug ("Display Name: %s", _displayName.c_str()); int len = pj_ansi_snprintf (contact, PJSIP_MAX_URL_SIZE, diff --git a/sflphone-common/src/sip/sipcall.cpp b/sflphone-common/src/sip/sipcall.cpp index 60680c779a..d1e22660c6 100644 --- a/sflphone-common/src/sip/sipcall.cpp +++ b/sflphone-common/src/sip/sipcall.cpp @@ -34,7 +34,7 @@ SIPCall::SIPCall (const CallID& id, Call::CallType type, pj_pool_t *pool) : Call , _local_sdp (0) { _local_sdp = new Sdp (pool); - _debug ("SIPCALL::Constructor for this class is called \n"); + _debug ("SIPCALL::Constructor for this class is called "); } SIPCall::~SIPCall() @@ -43,7 +43,7 @@ SIPCall::~SIPCall() _audiortp = 0; delete _local_sdp; _local_sdp = 0; - _debug ("SIPCALL::Destructor for this class is called \n"); + _debug ("SIPCALL::Destructor for this class is called "); } diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp index d4db910d82..d4862dd51a 100644 --- a/sflphone-common/src/sip/sipvoiplink.cpp +++ b/sflphone-common/src/sip/sipvoiplink.cpp @@ -246,7 +246,7 @@ SIPVoIPLink* SIPVoIPLink::instance (const AccountID& id) { if (!_instance) { - _debug ("Create new SIPVoIPLink instance\n"); + _debug ("Create new SIPVoIPLink instance"); _instance = new SIPVoIPLink (id); } @@ -427,15 +427,15 @@ int SIPVoIPLink::sendRegister (AccountID id) while (result.status == 0x12345678) { pj_time_val timeout = { 1, 0 }; pjsip_endpt_handle_events (_endpt, &timeout); - _debug ("status : %d\n", result.status); + _debug ("status : %d", result.status); } if (result.status != PJ_SUCCESS) { _debug ("Failed to resolve hostname only once." " Default resolver will be used on" - " hostname for all requests.\n"); + " hostname for all requests."); } else { - _debug ("%d servers where obtained from name resolution.\n", result.servers.count); + _debug ("%d servers where obtained from name resolution.", result.servers.count); char addr_buf[80]; pj_sockaddr_print ( (pj_sockaddr_t*) &result.servers.entry[0].addr, addr_buf, sizeof (addr_buf), 3); @@ -448,11 +448,11 @@ int SIPVoIPLink::sendRegister (AccountID id) if (account->isTlsEnabled()) { pj_status_t status; - _debug (" sendRegister: createTlsTransport\n"); + _debug (" sendRegister: createTlsTransport"); status = createTlsTransportRetryOnFailure (id); if (status != PJ_SUCCESS) { - _debug ("Failed to initialize TLS transport for account %s\n", id.c_str()); + _debug ("Failed to initialize TLS transport for account %s", id.c_str()); } } @@ -461,11 +461,11 @@ int SIPVoIPLink::sendRegister (AccountID id) if (account->isStunEnabled ()) { pj_status_t status; - _debug (" sendRegister: createAlternateUdpTransport\n"); + _debug (" sendRegister: createAlternateUdpTransport"); status = createAlternateUdpTransport (id); if (status != PJ_SUCCESS) { - _debug ("Failed to initialize UDP transport with an extern published address for account %s\n", id.c_str()); + _debug ("Failed to initialize UDP transport with an extern published address for account %s", id.c_str()); } } else { @@ -499,7 +499,7 @@ int SIPVoIPLink::sendRegister (AccountID id) status = pjsip_regc_create (_endpt, (void*) account, ®c_cb, ®c); if (status != PJ_SUCCESS) { - _debug ("UserAgent: Unable to create regc.\n"); + _debug ("UserAgent: Unable to create regc."); _mutexSIP.leaveMutex(); return false; } @@ -531,7 +531,7 @@ int SIPVoIPLink::sendRegister (AccountID id) contactUri = account->getContactHeader (address, portStr); - _debug ("sendRegister: fromUri: %s serverUri: %s contactUri: %s\n", + _debug ("sendRegister: fromUri: %s serverUri: %s contactUri: %s", fromUri.c_str(), srvUri.c_str(), contactUri.c_str()); @@ -552,7 +552,7 @@ int SIPVoIPLink::sendRegister (AccountID id) status = pjsip_regc_init (regc, &pjSrv, &pjFrom, &pjFrom, 1, &pjContact, expire_value); if (status != PJ_SUCCESS) { - _debug ("UserAgent: Unable to initialize account %d in sendRegister\n", status); + _debug ("UserAgent: Unable to initialize account %d in sendRegister", status); _mutexSIP.leaveMutex(); return false; } @@ -560,7 +560,7 @@ int SIPVoIPLink::sendRegister (AccountID id) pjsip_cred_info *cred = account->getCredInfo(); int credential_count = account->getCredentialCount(); - _debug ("setting %d credentials in sendRegister\n", credential_count); + _debug ("setting %d credentials in sendRegister", credential_count); pjsip_regc_set_credentials (regc, credential_count, cred); // Add User-Agent Header @@ -577,7 +577,7 @@ int SIPVoIPLink::sendRegister (AccountID id) status = pjsip_regc_register (regc, PJ_TRUE, &tdata); if (status != PJ_SUCCESS) { - _debug ("UserAgent: Unable to register regc.\n"); + _debug ("UserAgent: Unable to register regc."); _mutexSIP.leaveMutex(); return false; } @@ -588,7 +588,7 @@ int SIPVoIPLink::sendRegister (AccountID id) status = pjsip_regc_set_transport (regc, tp); if (status != PJ_SUCCESS) { - _debug ("UserAgent: Unable to set transport.\n"); + _debug ("UserAgent: Unable to set transport."); _mutexSIP.leaveMutex (); return false; } @@ -597,7 +597,7 @@ int SIPVoIPLink::sendRegister (AccountID id) status = pjsip_regc_send (regc, tdata); if (status != PJ_SUCCESS) { - _debug ("UserAgent: Unable to send regc request.\n"); + _debug ("UserAgent: Unable to send regc request."); _mutexSIP.leaveMutex(); return false; } @@ -605,7 +605,7 @@ int SIPVoIPLink::sendRegister (AccountID id) _mutexSIP.leaveMutex(); account->setRegistrationInfo (regc); - _debug ("ok\n"); + _debug ("ok"); return true; } @@ -629,18 +629,18 @@ SIPVoIPLink::sendUnregister (AccountID id) status = pjsip_regc_unregister (regc, &tdata); if (status != PJ_SUCCESS) { - _debug ("UserAgent: Unable to unregister regc.\n"); + _debug ("UserAgent: Unable to unregister regc."); return false; } status = pjsip_regc_send (regc, tdata); if (status != PJ_SUCCESS) { - _debug ("UserAgent: Unable to send regc request.\n"); + _debug ("UserAgent: Unable to send regc request."); return false; } } else { - _debug ("UserAgent: regc is null!\n"); + _debug ("UserAgent: regc is null!"); return false; } @@ -663,7 +663,7 @@ SIPVoIPLink::newOutgoingCall (const CallID& id, const std::string& toUrl) account = dynamic_cast<SIPAccount *> (Manager::instance().getAccount (Manager::instance().getAccountFromCall (id))); if (account == NULL) { - _debug ("Error retrieving the account to the make the call with\n"); + _debug ("Error retrieving the account to the make the call with"); call->setConnectionState (Call::Disconnected); call->setState (Call::Error); delete call; @@ -680,15 +680,15 @@ SIPVoIPLink::newOutgoingCall (const CallID& id, const std::string& toUrl) setCallAudioLocal (call, localAddr); try { - _debug ("Creating new rtp session in newOutgoingCall\n"); + _debug ("Creating new rtp session in newOutgoingCall"); call->getAudioRtp()->initAudioRtpSession (call); } catch (...) { - _debug ("Failed to create rtp thread from newOutGoingCall\n"); + _debug ("Failed to create rtp thread from newOutGoingCall"); } call->initRecFileName(); - _debug ("Try to make a call to: %s with call ID: %s\n", toUrl.data(), id.data()); + _debug ("Try to make a call to: %s with call ID: %s", toUrl.data(), id.data()); // Building the local SDP offer // localAddr = getLocalAddressAssociatedToAccount (account->getAccountID()); call->getLocalSDP()->set_ip_address (localAddr); @@ -722,12 +722,12 @@ SIPVoIPLink::answer (const CallID& id) Sdp *local_sdp; pjsip_inv_session *inv_session; - _debug ("SIPVoIPLink::answer: start answering \n"); + _debug ("SIPVoIPLink::answer: start answering "); call = getSIPCall (id); if (call==0) { - _debug ("! SIP Failure: SIPCall doesn't exists\n"); + _debug ("! SIP Failure: SIPCall doesn't exists"); return false; } @@ -736,7 +736,7 @@ SIPVoIPLink::answer (const CallID& id) try { call->getAudioRtp()->initAudioRtpSession (call); } catch (...) { - _debug ("Failed to create rtp thread from answer\n"); + _debug ("Failed to create rtp thread from answer"); } inv_session = call->getInvSession(); @@ -745,7 +745,7 @@ SIPVoIPLink::answer (const CallID& id) if (status == PJ_SUCCESS) { - _debug ("SIPVoIPLink::answer:UserAgent: Negociation success! : call %s \n", call->getCallId().c_str()); + _debug ("SIPVoIPLink::answer:UserAgent: Negociation success! : call %s ", call->getCallId().c_str()); // Create and send a 200(OK) response status = pjsip_inv_answer (inv_session, PJSIP_SC_OK, NULL, NULL, &tdata); PJ_ASSERT_RETURN (status == PJ_SUCCESS, 1); @@ -766,7 +766,7 @@ SIPVoIPLink::answer (const CallID& id) PJ_ASSERT_RETURN (status == PJ_SUCCESS, 1); // Terminate the call - _debug ("SIPVoIPLink::answer: fail terminate call %s \n",call->getCallId().c_str()); + _debug ("SIPVoIPLink::answer: fail terminate call %s ",call->getCallId().c_str()); if (call->getAudioRtp()) call->getAudioRtp()->stop (); @@ -789,7 +789,7 @@ SIPVoIPLink::hangup (const CallID& id) call = getSIPCall (id); if (call==0) { - _debug ("! SIP Error: Call doesn't exist\n"); + _debug ("! SIP Error: Call doesn't exist"); return false; } @@ -814,7 +814,7 @@ SIPVoIPLink::hangup (const CallID& id) // Release RTP thread if (Manager::instance().isCurrentCall (id)) { - _debug ("* SIP Info: Stopping AudioRTP for hangup\n"); + _debug ("* SIP Info: Stopping AudioRTP for hangup"); call->getAudioRtp()->stop(); } @@ -835,7 +835,7 @@ SIPVoIPLink::peerHungup (const CallID& id) call = getSIPCall (id); if (call==0) { - _debug ("! SIP Error: Call doesn't exist\n"); + _debug ("! SIP Error: Call doesn't exist"); return false; } @@ -857,7 +857,7 @@ SIPVoIPLink::peerHungup (const CallID& id) // Release RTP thread if (Manager::instance().isCurrentCall (id)) { - _debug ("* SIP Info: Stopping AudioRTP for hangup\n"); + _debug ("* SIP Info: Stopping AudioRTP for hangup"); call->getAudioRtp()->stop(); } @@ -874,11 +874,11 @@ SIPVoIPLink::cancel (const CallID& id) SIPCall* call = getSIPCall (id); if (call==0) { - _debug ("! SIP Error: Call doesn't exist\n"); + _debug ("! SIP Error: Call doesn't exist"); return false; } - _debug ("- SIP Action: Cancel call %s [cid: %3d]\n", id.data(), call->getCid()); + _debug ("- SIP Action: Cancel call %s [cid: %3d]", id.data(), call->getCid()); terminateOneCall (id); removeCall (id); @@ -896,7 +896,7 @@ SIPVoIPLink::onhold (const CallID& id) call = getSIPCall (id); if (call==0) { - _debug ("! SIP Error: call doesn't exist\n"); + _debug ("! SIP Error: call doesn't exist"); return false; } @@ -906,7 +906,7 @@ SIPVoIPLink::onhold (const CallID& id) call->setState (Call::Hold); - _debug ("* SIP Info: Stopping AudioRTP for onhold action\n"); + _debug ("* SIP Info: Stopping AudioRTP for onhold action"); call->getAudioRtp()->stop(); @@ -930,7 +930,7 @@ int SIPVoIPLink::inv_session_reinvite (SIPCall *call, std::string direction) local_sdp = call->getLocalSDP()->get_local_sdp_session(); if (local_sdp == NULL) { - _debug ("! SIP Failure: unable to find local_sdp\n"); + _debug ("! SIP Failure: unable to find local_sdp"); return !PJ_SUCCESS; } @@ -974,14 +974,14 @@ SIPVoIPLink::offhold (const CallID& id) call = getSIPCall (id); if (call==0) { - _debug ("! SIP Error: Call doesn't exist\n"); + _debug ("! SIP Error: Call doesn't exist"); return false; } try { call->getAudioRtp()->initAudioRtpSession (call); } catch (...) { - _debug ("! SIP Failure: Unable to create RTP Session (%s:%d)\n", __FILE__, __LINE__); + _debug ("! SIP Failure: Unable to create RTP Session (%s:%d)", __FILE__, __LINE__); } /* Create re-INVITE with new offer */ @@ -1015,12 +1015,12 @@ SIPVoIPLink::transfer (const CallID& id, const std::string& to) account = dynamic_cast<SIPAccount *> (Manager::instance().getAccount (account_id)); if (account == NULL) { - _debug ("SIPVoIPLink::transfer account is null. Returning.\n"); + _debug ("SIPVoIPLink::transfer account is null. Returning."); return false; } if (call==0) { - _debug ("! SIP Failure: Call doesn't exist\n"); + _debug ("! SIP Failure: Call doesn't exist"); return false; } @@ -1033,7 +1033,7 @@ SIPVoIPLink::transfer (const CallID& id, const std::string& to) pj_cstr (&pjDest, dest.c_str()); } - _debug ("Transfering to %s\n", dest.c_str()); + _debug ("Transfering to %s", dest.c_str()); /* Create xfer client subscription. */ pj_bzero (&xfer_cb, sizeof (xfer_cb)); @@ -1042,7 +1042,7 @@ SIPVoIPLink::transfer (const CallID& id, const std::string& to) status = pjsip_xfer_create_uac (call->getInvSession()->dlg, &xfer_cb, &sub); if (status != PJ_SUCCESS) { - _debug ("UserAgent: Unable to create xfer -- %d\n", status); + _debug ("UserAgent: Unable to create xfer -- %d", status); return false; } @@ -1059,7 +1059,7 @@ SIPVoIPLink::transfer (const CallID& id, const std::string& to) status = pjsip_xfer_initiate (sub, &pjDest, &tdata); if (status != PJ_SUCCESS) { - _debug ("UserAgent: Unable to create REFER request -- %d\n", status); + _debug ("UserAgent: Unable to create REFER request -- %d", status); return false; } @@ -1067,7 +1067,7 @@ SIPVoIPLink::transfer (const CallID& id, const std::string& to) status = pjsip_xfer_send_request (sub, tdata); if (status != PJ_SUCCESS) { - _debug ("UserAgent: Unable to send REFER request -- %d\n", status); + _debug ("UserAgent: Unable to send REFER request -- %d", status); return false; } @@ -1091,13 +1091,13 @@ SIPVoIPLink::refuse (const CallID& id) call = getSIPCall (id); if (call==0) { - _debug ("Call doesn't exist\n"); + _debug ("Call doesn't exist"); return false; } // can't refuse outgoing call or connected if (!call->isIncoming() || call->getConnectionState() == Call::Connected) { - _debug ("It's not an incoming call, or it's already answered\n"); + _debug ("It's not an incoming call, or it's already answered"); return false; } @@ -1156,7 +1156,7 @@ SIPVoIPLink::carryingDTMFdigits (const CallID& id, char code) call = getSIPCall (id); if (call==0) { - _debug ("Call doesn't exist\n"); + _debug ("Call doesn't exist"); return false; } @@ -1164,7 +1164,7 @@ SIPVoIPLink::carryingDTMFdigits (const CallID& id, char code) dtmf_body = new char[body_len]; - snprintf (dtmf_body, body_len - 1, "Signal=%c\r\nDuration=%d\r\n", code, duration); + snprintf (dtmf_body, body_len - 1, "Signal=%c\rDuration=%d\r", code, duration); pj_strdup2 (_pool, &methodName, "INFO"); pjsip_method_init_np (&method, &methodName); @@ -1173,7 +1173,7 @@ SIPVoIPLink::carryingDTMFdigits (const CallID& id, char code) status = pjsip_dlg_create_request (call->getInvSession()->dlg, &method, -1, &tdata); if (status != PJ_SUCCESS) { - _debug ("UserAgent: Unable to create INFO request -- %d\n", status); + _debug ("UserAgent: Unable to create INFO request -- %d", status); return false; } @@ -1188,7 +1188,7 @@ SIPVoIPLink::carryingDTMFdigits (const CallID& id, char code) tdata->msg->body = pjsip_msg_body_create (tdata->pool, &ctype.type, &ctype.subtype, &content); if (tdata->msg->body == NULL) { - _debug ("UserAgent: Unable to create msg body!\n"); + _debug ("UserAgent: Unable to create msg body!"); pjsip_tx_data_dec_ref (tdata); return false; } @@ -1197,7 +1197,7 @@ SIPVoIPLink::carryingDTMFdigits (const CallID& id, char code) status = pjsip_dlg_send_request (call->getInvSession()->dlg, tdata, getModId(), NULL); if (status != PJ_SUCCESS) { - _debug ("UserAgent: Unable to send MESSAGE request -- %d\n", status); + _debug ("UserAgent: Unable to send MESSAGE request -- %d", status); return false; } @@ -1209,7 +1209,7 @@ SIPVoIPLink::SIPOutgoingInvite (SIPCall* call) { // If no SIP proxy setting for direct call with only IP address if (!SIPStartCall (call, "")) { - _debug ("! SIP Failure: call not started\n"); + _debug ("! SIP Failure: call not started"); return false; } @@ -1237,7 +1237,7 @@ SIPVoIPLink::SIPStartCall (SIPCall* call, const std::string& subject UNUSED) account = dynamic_cast<SIPAccount *> (Manager::instance().getAccount (id)); if (account == NULL) { - _debug ("Account is null in SIPStartCall\n"); + _debug ("Account is null in SIPStartCall"); return false; } @@ -1266,7 +1266,7 @@ SIPVoIPLink::SIPStartCall (SIPCall* call, const std::string& subject UNUSED) contactUri = account->getContactHeader (address, portStr); - _debug ("SIPStartCall: fromUri: %s toUri: %s contactUri: %s\n", + _debug ("SIPStartCall: fromUri: %s toUri: %s contactUri: %s", fromUri.c_str(), toUri.c_str(), contactUri.c_str()); @@ -1291,7 +1291,7 @@ SIPVoIPLink::SIPStartCall (SIPCall* call, const std::string& subject UNUSED) &dialog); if (status != PJ_SUCCESS) { - _debug ("UAC creation failed\n"); + _debug ("UAC creation failed"); return false; } @@ -1321,7 +1321,7 @@ SIPVoIPLink::SIPStartCall (SIPCall* call, const std::string& subject UNUSED) status = pjsip_inv_send_msg (inv, tdata); if (status != PJ_SUCCESS) { - _debug (" SIPStartCall: failed to send invite\n"); + _debug (" SIPStartCall: failed to send invite"); return false; } @@ -1332,7 +1332,7 @@ void SIPVoIPLink::SIPCallServerFailure (SIPCall *call) { if (call != 0) { - _debug ("Server error!\n"); + _debug ("Server error!"); CallID id = call->getCallId(); Manager::instance().callFailure (id); terminateOneCall (id); @@ -1354,16 +1354,16 @@ SIPVoIPLink::SIPCallClosed (SIPCall *call) if (Manager::instance().isCurrentCall (id)) { call->setAudioStart (false); - _debug ("* SIP Info: Stopping AudioRTP when closing\n"); + _debug ("* SIP Info: Stopping AudioRTP when closing"); call->getAudioRtp()->stop(); } - _debug ("After close RTP\n"); + _debug ("After close RTP"); Manager::instance().peerHungupCall (id); terminateOneCall (id); removeCall (id); - _debug ("After remove call ID\n"); + _debug ("After remove call ID"); } void @@ -1374,7 +1374,7 @@ SIPVoIPLink::SIPCallReleased (SIPCall *call) } // if we are here.. something when wrong before... - _debug ("SIP call release\n"); + _debug ("SIP call release"); CallID id = call->getCallId(); @@ -1390,20 +1390,20 @@ void SIPVoIPLink::SIPCallAnswered (SIPCall *call, pjsip_rx_data *rdata) { - _debug ("SIPCallAnswered\n"); + _debug ("SIPCallAnswered"); if (!call) { - _debug ("! SIP Failure: unknown call\n"); + _debug ("! SIP Failure: unknown call"); return; } if (call->getConnectionState() != Call::Connected) { - _debug ("Update call state , id = %s\n", call->getCallId().c_str()); + _debug ("Update call state , id = %s", call->getCallId().c_str()); call->setConnectionState (Call::Connected); call->setState (Call::Active); Manager::instance().peerAnsweredCall (call->getCallId()); } else { - _debug ("* SIP Info: Answering call (on/off hold to send ACK)\n"); + _debug ("* SIP Info: Answering call (on/off hold to send ACK)"); } } @@ -1441,23 +1441,23 @@ bool SIPVoIPLink::new_ip_to_ip_call (const CallID& id, const std::string& to) account = dynamic_cast<SIPAccount *> (Manager::instance().getAccount (accountId)); if (account == NULL) { - _debug ("Account is null. Returning\n"); + _debug ("Account is null. Returning"); return !PJ_SUCCESS; } // Set SDP parameters localAddress = account->getLocalAddress (); if (localAddress == "0.0.0.0"){ - _debug ("Here is the local address: %s\n", localAddress.c_str ()); + _debug ("Here is the local address: %s", localAddress.c_str ()); loadSIPLocalIP (&localAddress); } setCallAudioLocal (call, localAddress); - _debug ("toUri received in new_ip_to_ip call %s\n", to.c_str()); + _debug ("toUri received in new_ip_to_ip call %s", to.c_str()); std::string toUri = account->getToUri (to); call->setPeerNumber (toUri); - _debug ("toUri in new_ip_to_ip call %s\n", toUri.c_str()); + _debug ("toUri in new_ip_to_ip call %s", toUri.c_str()); // Building the local SDP offer call->getLocalSDP()->set_ip_address (localAddress); call->getLocalSDP()->create_initial_offer(); @@ -1465,7 +1465,7 @@ bool SIPVoIPLink::new_ip_to_ip_call (const CallID& id, const std::string& to) try { call->getAudioRtp()->initAudioRtpSession (call); } catch (...) { - _debug ("! SIP Failure: Unable to create RTP Session in SIPVoIPLink::new_ip_to_ip_call (%s:%d)\n", __FILE__, __LINE__); + _debug ("! SIP Failure: Unable to create RTP Session in SIPVoIPLink::new_ip_to_ip_call (%s:%d)", __FILE__, __LINE__); } // Create URI @@ -1489,7 +1489,7 @@ bool SIPVoIPLink::new_ip_to_ip_call (const CallID& id, const std::string& to) contactUri = account->getContactHeader (address, portStr); - _debug ("new_ip_to_ip_call: fromUri: %s toUri: %s contactUri: %s\n", + _debug ("new_ip_to_ip_call: fromUri: %s toUri: %s contactUri: %s", fromUri.c_str(), toUri.c_str(), contactUri.c_str()); @@ -1525,7 +1525,7 @@ bool SIPVoIPLink::new_ip_to_ip_call (const CallID& id, const std::string& to) status = pjsip_dlg_set_transport (dialog, tp); if (status != PJ_SUCCESS) { - _debug ("Failed to set the transport for an IP call\n"); + _debug ("Failed to set the transport for an IP call"); return status; } @@ -1575,7 +1575,7 @@ bool get_dns_server_addresses (std::vector<std::string> *servers) // Read configuration files if (res_init () != 0) { - _debug ("Resolver initialization failed\n"); + _debug ("Resolver initialization failed"); return false; } @@ -1604,12 +1604,12 @@ pj_status_t SIPVoIPLink::enable_dns_srv_resolver (pjsip_endpoint *endpt, pj_dns_ status = pjsip_endpt_create_resolver (endpt, &resv); if (status != PJ_SUCCESS) { - _debug ("Error creating the DNS resolver instance\n"); + _debug ("Error creating the DNS resolver instance"); return status; } if (!get_dns_server_addresses (&dns_servers)) { - _debug ("Error while fetching DNS information\n"); + _debug ("Error while fetching DNS information"); return -1; } @@ -1626,7 +1626,7 @@ pj_status_t SIPVoIPLink::enable_dns_srv_resolver (pjsip_endpoint *endpt, pj_dns_ status = pj_dns_resolver_set_ns (resv, scount, nameservers, NULL); if (status != PJ_SUCCESS) { - _debug ("Error updating the name servers for the DNS resolver\n"); + _debug ("Error updating the name servers for the DNS resolver"); return status; } @@ -1634,7 +1634,7 @@ pj_status_t SIPVoIPLink::enable_dns_srv_resolver (pjsip_endpoint *endpt, pj_dns_ status = pjsip_endpt_set_resolver (endpt, resv); if (status != PJ_SUCCESS) { - _debug ("Error setting the DNS resolver instance of the SIP resolver engine\n"); + _debug ("Error setting the DNS resolver instance of the SIP resolver engine"); return status; } @@ -1680,7 +1680,7 @@ bool SIPVoIPLink::pjsip_init() _pool = pj_pool_create (&_cp.factory, "sflphone", 4000, 4000, NULL); if (!_pool) { - _debug ("UserAgent: Could not initialize memory pool\n"); + _debug ("UserAgent: Could not initialize memory pool"); return PJ_ENOMEM; } @@ -1690,7 +1690,7 @@ bool SIPVoIPLink::pjsip_init() PJ_ASSERT_RETURN (status == PJ_SUCCESS, 1); if (!loadSIPLocalIP (&addr)) { - _debug ("UserAgent: Unable to determine network capabilities\n"); + _debug ("UserAgent: Unable to determine network capabilities"); return false; } @@ -1702,7 +1702,7 @@ bool SIPVoIPLink::pjsip_init() account = dynamic_cast<SIPAccount *> (Manager::instance().getAccount (AccountNULL)); if (account == NULL) { - _debug ("Account is null in pjsip init\n"); + _debug ("Account is null in pjsip init"); port = _regPort; } else { directIpCallsTlsEnabled = account->isTlsEnabled(); @@ -1717,19 +1717,19 @@ bool SIPVoIPLink::pjsip_init() // could not be created, then give it another try // on a random sip port if (errPjsip != PJ_SUCCESS) { - _debug ("UserAgent: Could not initialize SIP listener on port %d\n", port); + _debug ("UserAgent: Could not initialize SIP listener on port %d", port); port = RANDOM_SIP_PORT; - _debug ("UserAgent: Trying to initialize SIP listener on port %d\n", port); + _debug ("UserAgent: Trying to initialize SIP listener on port %d", port); errPjsip = createUDPServer(); if (errPjsip != PJ_SUCCESS) { - _debug ("UserAgent: Fail to initialize SIP listener on port %d\n", port); + _debug ("UserAgent: Fail to initialize SIP listener on port %d", port); return errPjsip; } } - _debug ("pjsip_init -- listening on port %d\n", port); + _debug ("pjsip_init -- listening on port %d", port); // Create a TLS listener meant for Direct IP calls // if the user did enabled it. @@ -1813,7 +1813,7 @@ bool SIPVoIPLink::pjsip_init() PJ_ASSERT_RETURN (status == PJ_SUCCESS, 1); - _debug ("UserAgent: VOIP callbacks initialized\n"); + _debug ("UserAgent: VOIP callbacks initialized"); // Add endpoint capabilities (INFO, OPTIONS, etc) for this UA pj_str_t allowed[] = { { (char*) "INFO", 4}, { (char*) "REGISTER", 8}, { (char*) "OPTIONS", 7} }; // //{"INVITE", 6}, {"ACK",3}, {"BYE",3}, {"CANCEL",6} @@ -1826,7 +1826,7 @@ bool SIPVoIPLink::pjsip_init() // Register "application/sdp" in ACCEPT header pjsip_endpt_add_capability (_endpt, &_mod_ua, PJSIP_H_ACCEPT, NULL, 1, &accepted); - _debug ("UserAgent: pjsip version %s for %s initialized\n", pj_get_version(), PJ_OS_NAME); + _debug ("UserAgent: pjsip version %s for %s initialized", pj_get_version(), PJ_OS_NAME); // Create the secondary thread to poll sip events _evThread->start(); @@ -1849,7 +1849,7 @@ pj_status_t SIPVoIPLink::stunServerResolve (AccountID id) account = dynamic_cast<SIPAccount *> (Manager::instance().getAccount (id)); if (account == NULL) { - _debug ("stunServerResolve: Account is null. Returning\n"); + _debug ("stunServerResolve: Account is null. Returning"); return !PJ_SUCCESS; } @@ -1916,7 +1916,7 @@ int SIPVoIPLink::createUDPServer (AccountID id) // Set information to the local address and port if (account == NULL) { - _debug ("Account is null in createUDPServer.\n"); + _debug ("Account is null in createUDPServer."); } else { // We are trying to initialize a UDP transport available for all local accounts and direct IP calls if (account->getLocalAddress () != "0.0.0.0"){ @@ -1951,17 +1951,17 @@ int SIPVoIPLink::createUDPServer (AccountID id) tpmgr = pjsip_endpt_get_tpmgr (_endpt); - _debug ("number of transport: %i\n", pjsip_tpmgr_get_transport_count (tpmgr)); + _debug ("number of transport: %i", pjsip_tpmgr_get_transport_count (tpmgr)); pjsip_tpmgr_dump_transports (tpmgr); if (status != PJ_SUCCESS) { - _debug ("UserAgent: (%d) Unable to start UDP transport on %s:%d\n", status, listeningAddress.data(), listeningPort); + _debug ("UserAgent: (%d) Unable to start UDP transport on %s:%d", status, listeningAddress.data(), listeningPort); // Try to acquire an existing one // pjsip_tpmgr_acquire_transport () return status; } else { - _debug ("UserAgent: UDP server listening on port %d\n", listeningPort); + _debug ("UserAgent: UDP server listening on port %d", listeningPort); if (account == NULL) _localUDPTransport = transport; @@ -1969,7 +1969,7 @@ int SIPVoIPLink::createUDPServer (AccountID id) account->setAccountTransport (transport); } - _debug ("Transport initialized successfully on %s:%i\n", listeningAddress.c_str (), listeningPort); + _debug ("Transport initialized successfully on %s:%i", listeningAddress.c_str (), listeningPort); return PJ_SUCCESS; } @@ -1980,7 +1980,7 @@ std::string SIPVoIPLink::findLocalAddressFromUri (const std::string& uri, pjsip_ pjsip_transport_type_e transportType; pjsip_tpselector *tp_sel; - _debug ("SIPVoIPLink::findLocalAddressFromUri\n"); + _debug ("SIPVoIPLink::findLocalAddressFromUri"); // Find the transport that must be used with the given uri pj_str_t tmp; @@ -1993,7 +1993,7 @@ std::string SIPVoIPLink::findLocalAddressFromUri (const std::string& uri, pjsip_ std::string machineName (pjMachineName.ptr, pjMachineName.slen); if (genericUri == NULL) { - _debug ("genericUri is NULL in findLocalAddressFromUri\n"); + _debug ("genericUri is NULL in findLocalAddressFromUri"); return machineName; } @@ -2002,7 +2002,7 @@ std::string SIPVoIPLink::findLocalAddressFromUri (const std::string& uri, pjsip_ sip_uri = (pjsip_sip_uri*) pjsip_uri_get_uri (genericUri); if (sip_uri == NULL) { - _debug ("Invalid uri in findLocalAddressFromTransport\n"); + _debug ("Invalid uri in findLocalAddressFromTransport"); return machineName; } @@ -2010,7 +2010,7 @@ std::string SIPVoIPLink::findLocalAddressFromUri (const std::string& uri, pjsip_ transportType = PJSIP_TRANSPORT_TLS; } else { if (transport == NULL) { - _debug ("transport is NULL in findLocalAddressFromUri\n. Try the local UDP transport"); + _debug ("transport is NULL in findLocalAddressFromUri. Try the local UDP transport"); transport = _localUDPTransport; } @@ -2024,7 +2024,7 @@ std::string SIPVoIPLink::findLocalAddressFromUri (const std::string& uri, pjsip_ tpmgr = pjsip_endpt_get_tpmgr (_endpt); if (tpmgr == NULL) { - _debug ("Unexpected: Cannot get tpmgr from endpoint.\n"); + _debug ("Unexpected: Cannot get tpmgr from endpoint."); return machineName; } @@ -2035,7 +2035,7 @@ std::string SIPVoIPLink::findLocalAddressFromUri (const std::string& uri, pjsip_ pj_status_t status; /* Init the transport selector */ - //_debug ("Transport ID: %s\n", transport->obj_name); + //_debug ("Transport ID: %s", transport->obj_name); if (transportType == PJSIP_TRANSPORT_UDP) { status = init_transport_selector (transport, &tp_sel); @@ -2047,11 +2047,11 @@ std::string SIPVoIPLink::findLocalAddressFromUri (const std::string& uri, pjsip_ status = pjsip_tpmgr_find_local_addr (tpmgr, _pool, transportType, NULL, &localAddress, &port); if (status != PJ_SUCCESS) { - _debug ("Failed to find local address from transport\n"); + _debug ("Failed to find local address from transport"); return machineName; } - _debug ("Local address discovered from attached transport: %s\n", localAddress.ptr); + _debug ("Local address discovered from attached transport: %s", localAddress.ptr); return std::string (localAddress.ptr, localAddress.slen); } @@ -2086,7 +2086,7 @@ int SIPVoIPLink::findLocalPortFromUri (const std::string& uri, pjsip_transport * genericUri = pjsip_parse_uri (_pool, tmp.ptr, tmp.slen, 0); if (genericUri == NULL) { - _debug ("genericUri is NULL in findLocalPortFromUri\n"); + _debug ("genericUri is NULL in findLocalPortFromUri"); return atoi (DEFAULT_SIP_PORT); } @@ -2095,7 +2095,7 @@ int SIPVoIPLink::findLocalPortFromUri (const std::string& uri, pjsip_transport * sip_uri = (pjsip_sip_uri*) pjsip_uri_get_uri (genericUri); if (sip_uri == NULL) { - _debug ("Invalid uri in findLocalAddressFromTransport\n"); + _debug ("Invalid uri in findLocalAddressFromTransport"); return atoi (DEFAULT_SIP_PORT); } @@ -2104,7 +2104,7 @@ int SIPVoIPLink::findLocalPortFromUri (const std::string& uri, pjsip_transport * port = atoi (DEFAULT_SIP_TLS_PORT); } else { if (transport == NULL) { - _debug ("transport is NULL in findLocalPortFromUri - Try the local UDP transport\n"); + _debug ("transport is NULL in findLocalPortFromUri - Try the local UDP transport"); transport = _localUDPTransport; } @@ -2120,7 +2120,7 @@ int SIPVoIPLink::findLocalPortFromUri (const std::string& uri, pjsip_transport * tpmgr = pjsip_endpt_get_tpmgr (_endpt); if (tpmgr == NULL) { - _debug ("Unexpected: Cannot get tpmgr from endpoint.\n"); + _debug ("Unexpected: Cannot get tpmgr from endpoint."); return port; } @@ -2131,7 +2131,7 @@ int SIPVoIPLink::findLocalPortFromUri (const std::string& uri, pjsip_transport * pj_status_t status; if (transportType == PJSIP_TRANSPORT_UDP) { - _debug ("Transport ID: %s\n", transport->obj_name); + _debug ("Transport ID: %s", transport->obj_name); status = init_transport_selector (transport, &tp_sel); @@ -2144,10 +2144,10 @@ int SIPVoIPLink::findLocalPortFromUri (const std::string& uri, pjsip_transport * if (status != PJ_SUCCESS) { - _debug ("Failed to find local address from transport\n"); + _debug ("Failed to find local address from transport"); } - _debug ("Local port discovered from attached transport: %i\n", port); + _debug ("Local port discovered from attached transport: %i", port); return port; } @@ -2170,7 +2170,7 @@ pj_status_t SIPVoIPLink::createTlsTransportRetryOnFailure (AccountID id) account = dynamic_cast<SIPAccount *> (Manager::instance().getAccount (id)); if (account == NULL) { - _debug ("createTlsTransportRetryOnFailure: Account is null. Returning\n"); + _debug ("createTlsTransportRetryOnFailure: Account is null. Returning"); return !PJ_SUCCESS; } @@ -2181,11 +2181,11 @@ pj_status_t SIPVoIPLink::createTlsTransportRetryOnFailure (AccountID id) success = createTlsTransport (id); if (success != PJ_SUCCESS) { - _debug ("createTlsTransportRetryOnFailure: failed to retry on random port %d\n", randomPort); + _debug ("createTlsTransportRetryOnFailure: failed to retry on random port %d", randomPort); return success; } - _debug ("createTlsTransportRetryOnFailure: TLS transport listening on port %d\n", randomPort); + _debug ("createTlsTransportRetryOnFailure: TLS transport listening on port %d", randomPort); } return PJ_SUCCESS; @@ -2210,7 +2210,7 @@ pj_status_t SIPVoIPLink::createAlternateUdpTransport (AccountID id) account = dynamic_cast<SIPAccount *> (Manager::instance().getAccount (id)); if (account == NULL) { - _debug ("Account is null. Returning\n"); + _debug ("Account is null. Returning"); return !PJ_SUCCESS; } @@ -2221,19 +2221,19 @@ pj_status_t SIPVoIPLink::createAlternateUdpTransport (AccountID id) status = stunServerResolve (id); if (status != PJ_SUCCESS) { - _debug ("Error resolving STUN server: %i\n", status); + _debug ("Error resolving STUN server: %i", status); return status; } // Init socket sock = PJ_INVALID_SOCKET; - _debug ("Initializing IPv4 socket on %s:%i\n", stunServer.ptr, stunPort); + _debug ("Initializing IPv4 socket on %s:%i", stunServer.ptr, stunPort); status = pj_sockaddr_in_init (&boundAddr, &stunServer, 0); if (status != PJ_SUCCESS) { - _debug ("Error when initializing IPv4 socket on %s:%i\n", stunServer.ptr, stunPort); + _debug ("Error when initializing IPv4 socket on %s:%i", stunServer.ptr, stunPort); return status; } @@ -2241,7 +2241,7 @@ pj_status_t SIPVoIPLink::createAlternateUdpTransport (AccountID id) status = pj_sock_socket (pj_AF_INET(), pj_SOCK_DGRAM(), 0, &sock); if (status != PJ_SUCCESS) { - _debug ("Socket() error (%d)\n", status); + _debug ("Socket() error (%d)", status); return status; } @@ -2274,11 +2274,11 @@ pj_status_t SIPVoIPLink::createAlternateUdpTransport (AccountID id) status = pjsip_udp_transport_attach2 (_endpt, PJSIP_TRANSPORT_UDP, sock, &a_name, 1, &transport); if (status != PJ_SUCCESS) { - _debug ("Error creating alternate SIP UDP listener (%d)\n", status); + _debug ("Error creating alternate SIP UDP listener (%d)", status); return status; } - _debug ("UDP Transport successfully created on %s:%i\n", listeningAddress.c_str (), listeningPort); + _debug ("UDP Transport successfully created on %s:%i", listeningAddress.c_str (), listeningPort); account->setAccountTransport (transport); return PJ_SUCCESS; @@ -2300,7 +2300,7 @@ pj_status_t SIPVoIPLink::createTlsTransport (AccountID id) account = dynamic_cast<SIPAccount *> (Manager::instance().getAccount (id)); if (account == NULL) { - _debug ("Account is null. Returning\n"); + _debug ("Account is null. Returning"); return !PJ_SUCCESS; } @@ -2330,7 +2330,7 @@ pj_status_t SIPVoIPLink::createTlsTransport (AccountID id) success = pj_sockaddr_in_set_str_addr (&local_addr, &pjAddress); if (success != PJ_SUCCESS) { - _debug ("Failed to set local address in %d\n", __LINE__); + _debug ("Failed to set local address in %d", __LINE__); } } @@ -2345,7 +2345,7 @@ pj_status_t SIPVoIPLink::createTlsTransport (AccountID id) pjsip_tls_setting * tls_setting = account->getTlsSetting(); _debug ("TLS transport to be initialized with published address %.*s," - " published port %d, local address %s, local port %d\n", + " published port %d, local address %s, local port %d", (int) a_name.host.slen, a_name.host.ptr, (int) a_name.port, localAddress.c_str(), (int) localTlsPort); @@ -2354,7 +2354,7 @@ pj_status_t SIPVoIPLink::createTlsTransport (AccountID id) status = pjsip_tls_transport_start (_endpt, tls_setting, &local_addr, &a_name, 1, &tls); if (status != PJ_SUCCESS) { - _debug ("Error creating SIP TLS listener (%d)\n", status); + _debug ("Error creating SIP TLS listener (%d)", status); } return PJ_SUCCESS; @@ -2369,11 +2369,11 @@ bool SIPVoIPLink::loadSIPLocalIP (std::string *addr) if (pj_gethostip (pj_AF_INET(), &ip_addr) != PJ_SUCCESS) { // Update the registration state if no network capabilities found - _debug ("UserAgent: Get host ip failed!\n"); + _debug ("UserAgent: Get host ip failed!"); returnValue = false; } else { localAddress = std::string (pj_inet_ntoa (ip_addr.ipv4.sin_addr)); - _debug ("UserAgent: Checking network, setting local IP address to: %s\n", localAddress.data()); + _debug ("UserAgent: Checking network, setting local IP address to: %s", localAddress.data()); } *addr = localAddress; @@ -2410,7 +2410,7 @@ void SIPVoIPLink::busy_sleep (unsigned msec) bool SIPVoIPLink::pjsip_shutdown (void) { if (_endpt) { - _debug ("UserAgent: Shutting down...\n"); + _debug ("UserAgent: Shutting down..."); busy_sleep (1000); } @@ -2465,7 +2465,7 @@ void set_voicemail_info (AccountID account, pjsip_msg_body *body) std::string delimiter = "/"; std::string msg_body, voicemail_str; - _debug ("UserAgent: checking the voice message!\n"); + _debug ("UserAgent: checking the voice message!"); // The voicemail message is formated like that: // Voice-Message: 1/0 . 1 is the number we want to retrieve in this case @@ -2499,19 +2499,19 @@ void SIPVoIPLink::handle_reinvite (SIPCall *call) call->getAudioRtp()->stop (); call->setAudioStart (false); - _debug ("Create new rtp session from handle_reinvite : %s:%i\n", call->getLocalIp().c_str(), call->getLocalAudioPort()); + _debug ("Create new rtp session from handle_reinvite : %s:%i", call->getLocalIp().c_str(), call->getLocalAudioPort()); try { call->getAudioRtp()->initAudioRtpSession (call); } catch (...) { - _debug ("! SIP Failure: Unable to create RTP Session (%s:%d)\n", __FILE__, __LINE__); + _debug ("! SIP Failure: Unable to create RTP Session (%s:%d)", __FILE__, __LINE__); } } // This callback is called when the invite session state has changed void call_on_state_changed (pjsip_inv_session *inv, pjsip_event *e) { - _debug ("call_on_state_changed to state %s\n", invitationStateMap[inv->state]); + _debug ("call_on_state_changed to state %s", invitationStateMap[inv->state]); pjsip_rx_data *rdata; pj_status_t status; @@ -2524,8 +2524,8 @@ void call_on_state_changed (pjsip_inv_session *inv, pjsip_event *e) _debug ("Call is NULL in call_on_state_changed"); return; } else { - // _debug(" call_on_state_changed: call id %s\n", call->getCallId().c_str()); - // _debug(" call_on_state_changed: call state %s\n", invitationStateMap[call->getInvSession()->state]); + // _debug(" call_on_state_changed: call id %s", call->getCallId().c_str()); + // _debug(" call_on_state_changed: call state %s", invitationStateMap[call->getInvSession()->state]); } //Retrieve the body message @@ -2600,12 +2600,12 @@ void call_on_state_changed (pjsip_inv_session *inv, pjsip_event *e) NULL, &tdata); if (status != PJ_SUCCESS) { - _debug ("UserAgent: Unable to create NOTIFY -- %d\n", status); + _debug ("UserAgent: Unable to create NOTIFY -- %d", status); } else { status = pjsip_xfer_send_request (call->getXferSub(), tdata); if (status != PJ_SUCCESS) { - _debug ("UserAgent: Unable to send NOTIFY -- %d\n", status); + _debug ("UserAgent: Unable to send NOTIFY -- %d", status); } } } @@ -2642,7 +2642,7 @@ void call_on_state_changed (pjsip_inv_session *inv, pjsip_event *e) status = call->getLocalSDP()->check_sdp_answer (inv, rdata); if (status != PJ_SUCCESS) { - _debug ("Failed to check_incoming_sdp in call_on_state_changed\n"); + _debug ("Failed to check_incoming_sdp in call_on_state_changed"); return; } } @@ -2654,7 +2654,7 @@ void call_on_state_changed (pjsip_inv_session *inv, pjsip_event *e) } else if (inv->state == PJSIP_INV_STATE_DISCONNECTED) { - _debug ("State: %s. Cause: %.*s\n", invitationStateMap[inv->state], (int) inv->cause_text.slen, inv->cause_text.ptr); + _debug ("State: %s. Cause: %.*s", invitationStateMap[inv->state], (int) inv->cause_text.slen, inv->cause_text.ptr); switch (inv->cause) { /* The call terminates normally - BYE / CANCEL */ @@ -2696,7 +2696,7 @@ void call_on_state_changed (pjsip_inv_session *inv, pjsip_event *e) break; default: - _debug ("sipvoiplink.cpp - line %d : Unhandled call state. This is probably a bug.\n", __LINE__); + _debug ("sipvoiplink.cpp - line %d : Unhandled call state. This is probably a bug.", __LINE__); break; } } @@ -2706,7 +2706,7 @@ void call_on_state_changed (pjsip_inv_session *inv, pjsip_event *e) // This callback is called after SDP offer/answer session has completed. void call_on_media_update (pjsip_inv_session *inv, pj_status_t status) { - _debug ("call_on_media_update\n"); + _debug ("call_on_media_update"); const pjmedia_sdp_session *local_sdp; const pjmedia_sdp_session *remote_sdp; @@ -2717,19 +2717,19 @@ void call_on_media_update (pjsip_inv_session *inv, pj_status_t status) call = reinterpret_cast<SIPCall *> (inv->mod_data[getModId() ]); if (!call) { - _debug ("Call declined by peer, SDP negociation stopped\n"); + _debug ("Call declined by peer, SDP negociation stopped"); return; } link = dynamic_cast<SIPVoIPLink *> (Manager::instance().getAccountLink (AccountNULL)); if (link == NULL) { - _debug ("Failed to get sip link\n"); + _debug ("Failed to get sip link"); return; } if (status != PJ_SUCCESS) { - _debug ("Error while negotiating the offer\n"); + _debug ("Error while negotiating the offer"); link->hangup (call->getCallId()); Manager::instance().callFailure (call->getCallId()); return; @@ -2759,7 +2759,7 @@ void call_on_media_update (pjsip_inv_session *inv, pj_status_t status) call->setAudioStart (true); call->getAudioRtp()->start(); } catch (exception& rtpException) { - _debug ("%s\n", rtpException.what()); + _debug ("%s", rtpException.what()); } } @@ -2770,7 +2770,7 @@ void call_on_forked (pjsip_inv_session *inv, pjsip_event *e) void call_on_tsx_changed (pjsip_inv_session *inv, pjsip_transaction *tsx, pjsip_event *e) { - _debug ("call_on_tsx_changed to state %s\n", transactionStateMap[tsx->state]); + _debug ("call_on_tsx_changed to state %s", transactionStateMap[tsx->state]); if (tsx->role==PJSIP_ROLE_UAS && tsx->state==PJSIP_TSX_STATE_TRYING && pjsip_method_cmp (&tsx->method, &pjsip_refer_method) ==0) { @@ -2785,7 +2785,7 @@ void regc_cb (struct pjsip_regc_cbparam *param) account = static_cast<SIPAccount *> (param->token); if (account == NULL) { - _debug ("Account is NULL in regc_cb.\n"); + _debug ("Account is NULL in regc_cb."); return; } @@ -2804,7 +2804,7 @@ void regc_cb (struct pjsip_regc_cbparam *param) /* Sometimes, the status is OK, but we still failed. * So checking the code for real result */ - _debug ("UserAgent: The error is: %d\n", param->code); + _debug ("UserAgent: The error is: %d", param->code); switch (param->code) { @@ -2875,7 +2875,7 @@ mod_on_rx_request (pjsip_rx_data *rdata) std::string request; // Handle the incoming call invite in this function - _debug ("UserAgent: Callback on_rx_request is involved! \n"); + _debug ("UserAgent: Callback on_rx_request is involved! "); /* First, let's got the username and server name from the invite. * We will use them to detect which account is the callee. @@ -2886,7 +2886,7 @@ mod_on_rx_request (pjsip_rx_data *rdata) userName = std::string (sip_uri->user.ptr, sip_uri->user.slen); server = std::string (sip_uri->host.ptr, sip_uri->host.slen); - _debug ("mod_on_rx_request: %s@%s\n", userName.c_str(), server.c_str()); + _debug ("mod_on_rx_request: %s@%s", userName.c_str(), server.c_str()); // Get the account id of callee from username and server account_id = Manager::instance().getAccountIdFromNameAndServer (userName, server); @@ -2894,7 +2894,7 @@ mod_on_rx_request (pjsip_rx_data *rdata) /* If we don't find any account to receive the call */ if (account_id == AccountNULL) { - _debug ("UserAgent: Username %s doesn't match any account!\n",userName.c_str()); + _debug ("UserAgent: Username %s doesn't match any account!",userName.c_str()); //return false; } @@ -2904,29 +2904,29 @@ mod_on_rx_request (pjsip_rx_data *rdata) /* If we can't find any voIP link to handle the incoming call */ if (link == 0) { - _debug ("ERROR: can not retrieve the voiplink from the account ID...\n"); + _debug ("ERROR: can not retrieve the voiplink from the account ID..."); return false; } char* from_header = strstr (rdata->msg_info.msg_buf, "From: "); - // _debug("------------------------------ thefromheader: %s\n", from_header); + // _debug("------------------------------ thefromheader: %s", from_header); if (from_header) { std::string temp (from_header); int begin_displayName = temp.find ("\"") + 1; int end_displayName = temp.rfind ("\""); - // _debug("The display name start at %i, end at %i\n", begin_displayName, end_displayName); + // _debug("The display name start at %i, end at %i", begin_displayName, end_displayName); displayName = temp.substr (begin_displayName, end_displayName - begin_displayName);//display_name); } else { displayName = std::string (""); } - _debug ("UserAgent: The receiver is : %s@%s\n", userName.data(), server.data()); + _debug ("UserAgent: The receiver is : %s@%s", userName.data(), server.data()); - _debug ("UserAgent: The callee account id is %s\n", account_id.c_str()); + _debug ("UserAgent: The callee account id is %s", account_id.c_str()); /* Now, it is the time to find the information of the caller */ uri = rdata->msg_info.from->uri; @@ -3005,7 +3005,7 @@ mod_on_rx_request (pjsip_rx_data *rdata) Manager::instance().getConfigString (HOOKS, URLHOOK_COMMAND)); } } else - throw length_error ("Url exceeds std::string max_size\n"); + throw length_error ("Url exceeds std::string max_size"); } @@ -3070,7 +3070,7 @@ mod_on_rx_request (pjsip_rx_data *rdata) // Fail to notify UI delete call; call = NULL; - _debug ("UserAgent: Fail to notify UI!\n"); + _debug ("UserAgent: Fail to notify UI!"); return false; } @@ -3146,7 +3146,7 @@ void onCallTransfered (pjsip_inv_session *inv, pjsip_rx_data *rdata) /* Invalid Request. * No Refer-To header! */ - _debug ("UserAgent: Received REFER without Refer-To header!\n"); + _debug ("UserAgent: Received REFER without Refer-To header!"); pjsip_dlg_respond (inv->dlg, rdata, 400, NULL, NULL, NULL); return; } @@ -3170,7 +3170,7 @@ void onCallTransfered (pjsip_inv_session *inv, pjsip_rx_data *rdata) /* Notify callback */ code = PJSIP_SC_ACCEPTED; - _debug ("UserAgent: Call to %.*s is being transfered to %.*s\n", + _debug ("UserAgent: Call to %.*s is being transfered to %.*s", (int) inv->dlg->remote.info_str.slen, inv->dlg->remote.info_str.ptr, (int) refer_to->hvalue.slen, @@ -3188,7 +3188,7 @@ void onCallTransfered (pjsip_inv_session *inv, pjsip_rx_data *rdata) &tdata); if (status != PJ_SUCCESS) { - _debug ("UserAgent: Unable to create 2xx response to REFER -- %d\n", status); + _debug ("UserAgent: Unable to create 2xx response to REFER -- %d", status); return; } @@ -3205,7 +3205,7 @@ void onCallTransfered (pjsip_inv_session *inv, pjsip_rx_data *rdata) tdata); if (status != PJ_SUCCESS) { - _debug ("UserAgent: Unable to create 2xx response to REFER -- %d\n", status); + _debug ("UserAgent: Unable to create 2xx response to REFER -- %d", status); return; } @@ -3228,7 +3228,7 @@ void onCallTransfered (pjsip_inv_session *inv, pjsip_rx_data *rdata) status = pjsip_xfer_create_uas (inv->dlg, &xfer_cb, rdata, &sub); if (status != PJ_SUCCESS) { - _debug ("UserAgent: Unable to create xfer uas -- %d\n", status); + _debug ("UserAgent: Unable to create xfer uas -- %d", status); pjsip_dlg_respond (inv->dlg, rdata, 500, NULL, NULL, NULL); return; } @@ -3264,7 +3264,7 @@ void onCallTransfered (pjsip_inv_session *inv, pjsip_rx_data *rdata) status = pjsip_xfer_send_request (sub, tdata); if (status != PJ_SUCCESS) { - _debug ("UserAgent: Unable to send NOTIFY to REFER -- %d\n", status); + _debug ("UserAgent: Unable to send NOTIFY to REFER -- %d", status); return; } } @@ -3282,7 +3282,7 @@ void onCallTransfered (pjsip_inv_session *inv, pjsip_rx_data *rdata) tmp = std::string (uri); if (existing_call == NULL) { - _debug ("UserAgent: Call doesn't exist!\n"); + _debug ("UserAgent: Call doesn't exist!"); return; } @@ -3298,14 +3298,14 @@ void onCallTransfered (pjsip_inv_session *inv, pjsip_rx_data *rdata) 500, NULL, &tdata); if (status != PJ_SUCCESS) { - _debug ("UserAgent: Unable to create NOTIFY to REFER -- %d\n", status); + _debug ("UserAgent: Unable to create NOTIFY to REFER -- %d", status); return; } status = pjsip_xfer_send_request (sub, tdata); if (status != PJ_SUCCESS) { - _debug ("UserAgent: Unable to send NOTIFY to REFER -- %d\n", status); + _debug ("UserAgent: Unable to send NOTIFY to REFER -- %d", status); return; } } @@ -3321,7 +3321,7 @@ void onCallTransfered (pjsip_inv_session *inv, pjsip_rx_data *rdata) newCall = dynamic_cast<SIPCall *> (link->getCall (newCallId)); if (!newCall) { - _debug ("UserAgent: can not find the call from sipvoiplink!\n"); + _debug ("UserAgent: can not find the call from sipvoiplink!"); return; } } @@ -3354,7 +3354,7 @@ void xfer_func_cb (pjsip_evsub *sub, pjsip_event *event) if (pjsip_evsub_get_state (sub) == PJSIP_EVSUB_STATE_ACCEPTED) { - _debug ("Transfer accepted! Waiting for notifications. \n"); + _debug ("Transfer accepted! Waiting for notifications. "); } @@ -3386,13 +3386,13 @@ void xfer_func_cb (pjsip_evsub *sub, pjsip_event *event) if (pjsip_evsub_get_state (sub) == PJSIP_EVSUB_STATE_TERMINATED) { pjsip_evsub_set_mod_data (sub, _mod_ua.id, NULL); - _debug ("UserAgent: Xfer client subscription terminated\n"); + _debug ("UserAgent: Xfer client subscription terminated"); } if (!link || !event) { /* Application is not interested with call progress status */ - _debug ("UserAgent: Either link or event is empty!\n"); + _debug ("UserAgent: Either link or event is empty!"); return; } @@ -3413,10 +3413,10 @@ void xfer_func_cb (pjsip_evsub *sub, pjsip_event *event) if (!body) { // if (call->getCallConfiguration () == Call::IPtoIP) { - // _debug("UserAgent: IptoIp NOTIFY without message body\n"); + // _debug("UserAgent: IptoIp NOTIFY without message body"); // } // else{ - _debug ("UserAgent: Warning! Received NOTIFY without message body\n"); + _debug ("UserAgent: Warning! Received NOTIFY without message body"); return; // } } @@ -3426,7 +3426,7 @@ void xfer_func_cb (pjsip_evsub *sub, pjsip_event *event) /* Check for appropriate content */ if (pj_stricmp2 (&body->content_type.type, "message") != 0 || pj_stricmp2 (&body->content_type.subtype, "sipfrag") != 0) { - _debug ("UserAgent: Warning! Received NOTIFY with non message/sipfrag content\n"); + _debug ("UserAgent: Warning! Received NOTIFY with non message/sipfrag content"); return; } @@ -3435,12 +3435,12 @@ void xfer_func_cb (pjsip_evsub *sub, pjsip_event *event) &status_line); if (status != PJ_SUCCESS) { - _debug ("UserAgent: Warning! Received NOTIFY with invalid message/sipfrag content\n"); + _debug ("UserAgent: Warning! Received NOTIFY with invalid message/sipfrag content"); return; } } else { - _debug ("UserAgent: Set code to 500!\n"); + _debug ("UserAgent: Set code to 500!"); status_line.code = 500; status_line.reason = *pjsip_get_status_text (500); } @@ -3449,7 +3449,7 @@ void xfer_func_cb (pjsip_evsub *sub, pjsip_event *event) SIPCall *call = dynamic_cast<SIPCall *> (link->getCall (Manager::instance().getCurrentCallId())); if (!call) { - _debug ("UserAgent: Call doesn't exit!\n"); + _debug ("UserAgent: Call doesn't exit!"); return; } @@ -3458,7 +3458,7 @@ void xfer_func_cb (pjsip_evsub *sub, pjsip_event *event) request = event->body.rx_msg.rdata->msg_info.msg_buf; if ( (int) request.find (noresource) != -1) { - _debug ("UserAgent: NORESOURCE for transfer!\n"); + _debug ("UserAgent: NORESOURCE for transfer!"); link->transferStep2 (call); pjsip_evsub_terminate (sub, PJ_TRUE); @@ -3467,7 +3467,7 @@ void xfer_func_cb (pjsip_evsub *sub, pjsip_event *event) } if ( (int) request.find (ringing) != -1) { - _debug ("UserAgent: transfered call RINGING!\n"); + _debug ("UserAgent: transfered call RINGING!"); link->transferStep2 (call); pjsip_evsub_terminate (sub, PJ_TRUE); @@ -3484,18 +3484,18 @@ void xfer_func_cb (pjsip_evsub *sub, pjsip_event *event) if (status_line.code/100 == 2) { - _debug ("UserAgent: Try to stop rtp!\n"); + _debug ("UserAgent: Try to stop rtp!"); pjsip_tx_data *tdata; status = pjsip_inv_end_session (call->getInvSession(), PJSIP_SC_GONE, NULL, &tdata); if (status != PJ_SUCCESS) { - _debug ("UserAgent: Fail to create end session msg!\n"); + _debug ("UserAgent: Fail to create end session msg!"); } else { status = pjsip_inv_send_msg (call->getInvSession(), tdata); if (status != PJ_SUCCESS) - _debug ("UserAgent: Fail to send end session msg!\n"); + _debug ("UserAgent: Fail to send end session msg!"); } link->transferStep2 (call); @@ -3535,7 +3535,7 @@ void xfer_svr_cb (pjsip_evsub *sub, pjsip_event *event) call->setXferSub (NULL); - _debug ("UserAgent: Xfer server subscription terminated\n"); + _debug ("UserAgent: Xfer server subscription terminated"); } } @@ -3544,7 +3544,7 @@ void on_rx_offer (pjsip_inv_session *inv, const pjmedia_sdp_session *offer) #ifdef CAN_REINVITE - _debug ("%s (%d): on_rx_offer REINVITE\n", __FILE__, __LINE__); + _debug ("%s (%d): on_rx_offer REINVITE", __FILE__, __LINE__); SIPCall *call; pj_status_t status; @@ -3643,10 +3643,10 @@ bool setCallAudioLocal (SIPCall* call, std::string localIP) callLocalExternAudioPort = account->getStunPort (); } - _debug (" Setting local ip address: %s\n", localIP.c_str()); + _debug (" Setting local ip address: %s", localIP.c_str()); - _debug (" Setting local audio port to: %d\n", callLocalAudioPort); - _debug (" Setting local audio port (external) to: %d\n", callLocalExternAudioPort); + _debug (" Setting local audio port to: %d", callLocalAudioPort); + _debug (" Setting local audio port (external) to: %d", callLocalExternAudioPort); // Set local audio port for SIPCall(id) call->setLocalIp (localIP); @@ -3683,7 +3683,7 @@ std::string fetch_header_value (pjsip_msg *msg, std::string field) value = hdr->hvalue.ptr; - if ( (pos=value.find ("\n")) == std::string::npos) { + if ( (pos=value.find ("")) == std::string::npos) { return ""; } @@ -3706,7 +3706,7 @@ std::vector<std::string> SIPVoIPLink::getAllIpInterface (void) return ifaceList; } - _debug ("Detecting available interfaces...\n"); + _debug ("Detecting available interfaces..."); int i; @@ -3714,7 +3714,7 @@ std::vector<std::string> SIPVoIPLink::getAllIpInterface (void) char tmpAddr[PJ_INET_ADDRSTRLEN]; pj_sockaddr_print (&addrList[i], tmpAddr, sizeof (tmpAddr), 0); ifaceList.push_back (std::string (tmpAddr)); - _debug ("Local interface %s\n", tmpAddr); + _debug ("Local interface %s", tmpAddr); } return ifaceList; @@ -3761,12 +3761,12 @@ std::string getLocalAddressAssociatedToAccount (AccountID id) local_addr_ipv4 = _localUDPTransport->local_addr.ipv4; } - _debug ("slbvasjklbvaskbvaskvbaskvaskvbsdfk: %i\n", local_addr_ipv4.sin_addr.s_addr); + _debug ("slbvasjklbvaskbvaskvbaskvaskvbsdfk: %i", local_addr_ipv4.sin_addr.s_addr); tmp = pj_str (pj_inet_ntoa (local_addr_ipv4.sin_addr)); localAddr = std::string (tmp.ptr); - _debug ("slbvasjklbvaskbvaskvbaskvaskvbsdfk: %s\n", localAddr.c_str()); + _debug ("slbvasjklbvaskbvaskvbaskvaskvbsdfk: %s", localAddr.c_str()); return localAddr; diff --git a/sflphone-common/src/util/Pattern.cpp b/sflphone-common/src/util/Pattern.cpp index 85cb60392b..95186c5d68 100644 --- a/sflphone-common/src/util/Pattern.cpp +++ b/sflphone-common/src/util/Pattern.cpp @@ -125,7 +125,7 @@ std::vector<std::string> Pattern::groups (void) while (stringList[i] != NULL) { matchedSubstrings.push_back (stringList[i]); - printf ("Substr: <start>%s<end>\n", stringList[i]); + printf ("Substr: <start>%s<end>", stringList[i]); i++; } @@ -246,8 +246,8 @@ bool Pattern::matches (void) throw (match_error) bool Pattern::matches (const std::string& subject) throw (match_error) { - //printf("\n\n\nCurrent offset: %d, old offset: %d\n", _offset[1], _offset[0]); - //printf("Trying <start>%s<end>\n", subject.substr(_offset[1]).c_str()); + //printf("Current offset: %d, old offset: %d", _offset[1], _offset[0]); + //printf("Trying <start>%s<end>", subject.substr(_offset[1]).c_str()); // Try to find a match for this pattern int rc = pcre_exec ( @@ -264,7 +264,7 @@ bool Pattern::matches (const std::string& subject) throw (match_error) if (rc < 0) { _offset[0] = _offset[1] = 0; - //printf("Matching failed with %d\n", rc); + //printf("Matching failed with %d", rc); return false; } @@ -275,7 +275,7 @@ bool Pattern::matches (const std::string& subject) throw (match_error) _offset[1] = _ovector[1] + _offset[0]; } - //printf("Matching succeeded with %d to %d\n", (int) start(), (int) end()); + //printf("Matching succeeded with %d to %d", (int) start(), (int) end()); // Matching succeded but not enough space. if (rc == 0) { diff --git a/sflphone-common/test/audiolayerTest.cpp b/sflphone-common/test/audiolayerTest.cpp index 1cdb792598..f655843af3 100644 --- a/sflphone-common/test/audiolayerTest.cpp +++ b/sflphone-common/test/audiolayerTest.cpp @@ -73,13 +73,13 @@ void AudioLayerTest::testAudioLayerConfig() void AudioLayerTest::testAudioLayerSwitch() { - _debug ("---------- AudioLayerTest::testAudioLayerSwitch ---------------------------\n"); + _debug ("---------- AudioLayerTest::testAudioLayerSwitch ---------------------------"); int previous_layer = Manager::instance().getAudioDriver()->getLayerType(); for (int i = 0; i < 2; i++) { - _debug ("---------- AudioLayerTest::testAudioLayerSwitch - %i -------------\n",i); + _debug ("---------- AudioLayerTest::testAudioLayerSwitch - %i -------------",i); Manager::instance().switchAudioManager(); if (previous_layer == ALSA) { @@ -99,7 +99,7 @@ void AudioLayerTest::testAudioLayerSwitch() void AudioLayerTest::testPulseConnect() { - _debug ("---------- AudioLayerTest::testPulseConnect ---------------------------\n"); + _debug ("---------- AudioLayerTest::testPulseConnect ---------------------------"); ManagerImpl* manager; manager = &Manager::instance(); @@ -125,7 +125,7 @@ void AudioLayerTest::testPulseConnect() try { CPPUNIT_ASSERT (_pulselayer->openDevice (numCardIn, numCardOut, sampleRate, frameSize, SFL_PCM_BOTH, alsaPlugin) == true); } catch (...) { - _debug ("Exception occured wile opening device! \n"); + _debug ("Exception occured wile opening device! "); } usleep (100000); @@ -154,7 +154,7 @@ void AudioLayerTest::testPulseConnect() CPPUNIT_ASSERT (_pulselayer->getPlaybackStream()->disconnectStream() == true); CPPUNIT_ASSERT (_pulselayer->getRecordStream()->disconnectStream() == true); - // _debug("%i\n",_pulselayer->getPlaybackStream()->getStreamState()); + // _debug("%i",_pulselayer->getPlaybackStream()->getStreamState()); CPPUNIT_ASSERT (_pulselayer->getPlaybackStream()->connectStream() == true); CPPUNIT_ASSERT (_pulselayer->getRecordStream()->connectStream() == true); @@ -176,7 +176,7 @@ void AudioLayerTest::testPulseConnect() void AudioLayerTest::testAlsaConnect() { - _debug ("---------- AudioLayerTest::testAlsaConnect ---------------------------\n"); + _debug ("---------- AudioLayerTest::testAlsaConnect ---------------------------"); int layer = Manager::instance().getAudioDriver()->getLayerType(); diff --git a/sflphone-common/test/audiorecorderTest.cpp b/sflphone-common/test/audiorecorderTest.cpp index fc349f08c2..d4dda35db6 100644 --- a/sflphone-common/test/audiorecorderTest.cpp +++ b/sflphone-common/test/audiorecorderTest.cpp @@ -40,7 +40,7 @@ void AudioRecorderTest::testRecordData() _ar->setSndSamplingRate(44100); _ar->openFile("theWavFile.wav",ft,sf); - cout << "file opened!\n"; + cout << "file opened!"; SFLDataFormat buf [2]; for (SFLDataFormat i = -32768; i < 32767; i++ ){ diff --git a/sflphone-common/test/mainbufferTest.cpp b/sflphone-common/test/mainbufferTest.cpp index 63c9fa2f4d..885f0582f0 100644 --- a/sflphone-common/test/mainbufferTest.cpp +++ b/sflphone-common/test/mainbufferTest.cpp @@ -53,7 +53,7 @@ void MainBufferTest::tearDown() void MainBufferTest::testRingBufferCreation() { - _debug ("MainBufferTest::testRingBufferCreation()\n"); + _debug ("MainBufferTest::testRingBufferCreation()"); CallID test_id = "1234"; CallID null_id = "null id"; @@ -100,7 +100,7 @@ void MainBufferTest::testRingBufferCreation() void MainBufferTest::testRingBufferReadPointer() { - _debug ("MainBufferTest::testRingBufferReadPointer()\n"); + _debug ("MainBufferTest::testRingBufferReadPointer()"); CallID call_id = "call id"; CallID read_id = "read id"; @@ -147,7 +147,7 @@ void MainBufferTest::testRingBufferReadPointer() void MainBufferTest::testCallIDSet() { - _debug ("MainBufferTest::testCallIDSet()\n"); + _debug ("MainBufferTest::testCallIDSet()"); CallID test_id = "set id"; CallID false_id = "false set id"; @@ -231,7 +231,7 @@ void MainBufferTest::testCallIDSet() void MainBufferTest::testRingBufferInt() { - _debug ("MainBufferTest::testRingbufferInt()\n"); + _debug ("MainBufferTest::testRingbufferInt()"); // CallID test_id = "test_int"; @@ -348,7 +348,7 @@ void MainBufferTest::testRingBufferInt() void MainBufferTest::testRingBufferNonDefaultID() { - _debug ("MainBufferTest::testRingBufferNonDefaultID()\n"); + _debug ("MainBufferTest::testRingBufferNonDefaultID()"); CallID test_id = "test_int"; @@ -436,7 +436,7 @@ void MainBufferTest::testRingBufferNonDefaultID() void MainBufferTest::testRingBufferFloat() { - _debug ("MainBufferTest::testRingBufferFloat()\n"); + _debug ("MainBufferTest::testRingBufferFloat()"); float testfloat1 = 12.5; float testfloat2 = 13.4; @@ -471,7 +471,7 @@ void MainBufferTest::testRingBufferFloat() void MainBufferTest::testTwoPointer() { - _debug ("MainBufferTest::testTwoPointer()\n"); + _debug ("MainBufferTest::testTwoPointer()"); RingBuffer* input_buffer = _mainbuffer.createRingBuffer (default_id); @@ -490,7 +490,7 @@ void MainBufferTest::testTwoPointer() void MainBufferTest::testBindUnbindBuffer() { - _debug ("MainBufferTest::testBindUnbindBuffer()\n"); + _debug ("MainBufferTest::testBindUnbindBuffer()"); CallID test_id1 = "bind unbind 1"; CallID test_id2 = "bind unbind 2"; @@ -554,7 +554,7 @@ void MainBufferTest::testBindUnbindBuffer() // unbind test_id1 with default_id _mainbuffer.unBindCallID (test_id1); - _debug ("%i\n", _mainbuffer._ringBufferMap.size()); + _debug ("%i", _mainbuffer._ringBufferMap.size()); CPPUNIT_ASSERT (_mainbuffer._ringBufferMap.size() == 0); CPPUNIT_ASSERT (_mainbuffer._callIDMap.size() == 0); @@ -767,7 +767,7 @@ void MainBufferTest::testBindUnbindBuffer() CPPUNIT_ASSERT (iter_readpointer->second == 0); - _debug ("ok1\n"); + _debug ("ok1"); // unbind test_id1 with test_id2 // calling it twice not supposed to break anything @@ -890,7 +890,7 @@ void MainBufferTest::testBindUnbindBuffer() void MainBufferTest::testGetPutDataByID() { - _debug ("MainBufferTest::testGetPutData()\n"); + _debug ("MainBufferTest::testGetPutData()"); CallID test_id = "getData putData"; CallID false_id = "false id"; @@ -946,7 +946,7 @@ void MainBufferTest::testGetPutDataByID() void MainBufferTest::testGetPutData() { - _debug ("MainBufferTest::testGetDataAndCallID()\n"); + _debug ("MainBufferTest::testGetDataAndCallID()"); CallID test_id = "incoming rtp session"; @@ -995,7 +995,7 @@ void MainBufferTest::testGetPutData() void MainBufferTest::testDiscardFlush() { - _debug ("MainBufferTest::testDiscardFlush()\n"); + _debug ("MainBufferTest::testDiscardFlush()"); CallID test_id = "flush discard"; // _mainbuffer.createRingBuffer(test_id); @@ -1038,7 +1038,7 @@ void MainBufferTest::testDiscardFlush() void MainBufferTest::testReadPointerInit() { - _debug ("MainBufferTest::testReadPointerInit()\n"); + _debug ("MainBufferTest::testReadPointerInit()"); CallID test_id = "test read pointer init"; // RingBuffer* test_ring_buffer = _mainbuffer.createRingBuffer(test_id); @@ -1067,7 +1067,7 @@ void MainBufferTest::testReadPointerInit() void MainBufferTest::testRingBufferSeveralPointers() { - _debug ("MainBufferTest::testRingBufferSeveralPointers\n"); + _debug ("MainBufferTest::testRingBufferSeveralPointers"); CallID test_id = "test multiple read pointer"; RingBuffer* test_ring_buffer = _mainbuffer.createRingBuffer (test_id); @@ -1181,7 +1181,7 @@ void MainBufferTest::testRingBufferSeveralPointers() void MainBufferTest::testConference() { - _debug ("MainBufferTest::testConference()\n"); + _debug ("MainBufferTest::testConference()"); CallID test_id1 = "participant A"; CallID test_id2 = "participant B"; @@ -1695,7 +1695,7 @@ void MainBufferTest::testConference() CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id1) == sizeof (int)); CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id2) == sizeof (int)); test_ring_buffer = _mainbuffer.getRingBuffer (test_id1); - _debug ("%i\n", test_ring_buffer->putLen()); + _debug ("%i", test_ring_buffer->putLen()); test_ring_buffer->debug(); CPPUNIT_ASSERT (test_ring_buffer->putLen() == sizeof (int)); CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == (int) (init_put_id1 - sizeof (int))); diff --git a/sflphone-common/test/rtpTest.cpp b/sflphone-common/test/rtpTest.cpp index 4a4d313314..04219eaa7e 100644 --- a/sflphone-common/test/rtpTest.cpp +++ b/sflphone-common/test/rtpTest.cpp @@ -41,7 +41,7 @@ using std::endl; void RtpTest::setUp() { - _debug ("------ Set up rtp test------\n"); + _debug ("------ Set up rtp test------"); Manager::instance().initConfigFile(); Manager::instance().init(); @@ -69,7 +69,7 @@ bool RtpTest::pjsipInit() _pool = pj_pool_create (&_cp.factory, "rtpTest", 4000, 4000, NULL); if (!_pool) { - _debug ("----- RtpTest: Could not initialize pjsip memory pool ------\n"); + _debug ("----- RtpTest: Could not initialize pjsip memory pool ------"); return PJ_ENOMEM; } @@ -83,16 +83,16 @@ void RtpTest::testRtpInitClose() audiortp = new AudioRtp(); - _debug ("------ void RtpTest::testRtpInit() ------\n"); + _debug ("------ void RtpTest::testRtpInit() ------"); try { - _debug ("-------- Open Rtp Session ----------\n"); + _debug ("-------- Open Rtp Session ----------"); audiortp->createNewSession (sipcall); } catch (...) { - _debug ("!!! Exception occured while Oppenning Rtp !!!\n"); + _debug ("!!! Exception occured while Oppenning Rtp !!!"); } @@ -103,18 +103,18 @@ void RtpTest::testRtpInitClose() // computeNbByteAudioLayer - _debug ("------ Finilize Rtp Initialization ------ \n"); + _debug ("------ Finilize Rtp Initialization ------ "); - _debug ("------ RtpTest::testRtpClose() ------\n"); + _debug ("------ RtpTest::testRtpClose() ------"); try { - _debug ("------ Close Rtp Session -------\n"); + _debug ("------ Close Rtp Session -------"); CPPUNIT_ASSERT (audiortp->closeRtpSession()); } catch (...) { - _debug ("!!! Exception occured while closing Rtp !!!\n"); + _debug ("!!! Exception occured while closing Rtp !!!"); } @@ -129,7 +129,7 @@ void RtpTest::testRtpThread() audiortp = new AudioRtp(); - _debug ("-------- Open Rtp Session ----------\n"); + _debug ("-------- Open Rtp Session ----------"); try { @@ -137,11 +137,11 @@ void RtpTest::testRtpThread() } catch (...) { - _debug ("!!! Exception occured while Oppenning Rtp !!!\n"); + _debug ("!!! Exception occured while Oppenning Rtp !!!"); } - _debug ("------ void RtpTest::testRtpThread ------\n"); + _debug ("------ void RtpTest::testRtpThread ------"); CPPUNIT_ASSERT (audiortp->_RTXThread->computeCodecFrameSize (160,8000) == 20.0f); CPPUNIT_ASSERT (audiortp->_RTXThread->computeCodecFrameSize (320,16000) == 20.0f); @@ -150,7 +150,7 @@ void RtpTest::testRtpThread() // 20 ms at 44.1 khz corespond to 882 samples (1764 byte) CPPUNIT_ASSERT (audiortp->_RTXThread->computeNbByteAudioLayer (20.f) == 1764); - _debug ("------ Close Rtp Session -------\n"); + _debug ("------ Close Rtp Session -------"); try { @@ -158,7 +158,7 @@ void RtpTest::testRtpThread() } catch (...) { - _debug ("!!! Exception occured while closing Rtp !!!\n"); + _debug ("!!! Exception occured while closing Rtp !!!"); } @@ -184,7 +184,7 @@ void RtpTest::testRtpResampling() audiortp = new AudioRtp(); - _debug ("-------- Open Rtp Session ----------\n"); + _debug ("-------- Open Rtp Session ----------"); try { @@ -192,28 +192,28 @@ void RtpTest::testRtpResampling() } catch (...) { - _debug ("!!! Exception occured while Oppenning Rtp !!!\n"); + _debug ("!!! Exception occured while Oppenning Rtp !!!"); } - _debug ("------ void RtpTest::testRtpResampling ------\n"); + _debug ("------ void RtpTest::testRtpResampling ------"); CPPUNIT_ASSERT (0 == 0); rsmpl_nbSample = audiortp->_RTXThread->reSampleData (data, rsmpl_data, 8000, nbSample, UP_SAMPLING); - _debug ("ORIGINAL DATA SET\n"); + _debug ("ORIGINAL DATA SET"); for (int i = 0; i < nbSample; i++) printf (" %i=>%i ", i, data[i]); - _debug ("RESAMPLED DATA SET\n"); + _debug ("RESAMPLED DATA SET"); for (int i = 0; i < rsmpl_nbSample; i++) printf (" %i=>%i ", i, rsmpl_data[i]); - printf ("\n"); + printf (""); - _debug ("------ Close Rtp Session -------\n"); + _debug ("------ Close Rtp Session -------"); try { @@ -221,7 +221,7 @@ void RtpTest::testRtpResampling() } catch (...) { - _debug ("!!! Exception occured while closing Rtp !!!\n"); + _debug ("!!! Exception occured while closing Rtp !!!"); } -- GitLab From 7df0371e68d286bb5ddeee1b6d41ffe391fbb711 Mon Sep 17 00:00:00 2001 From: Julien Bonjean <julien@bonjean.info> Date: Fri, 13 Nov 2009 09:39:09 -0500 Subject: [PATCH 005/188] [#1671] Created new logger --- sflphone-common/src/Makefile.am | 2 ++ sflphone-common/src/global.h | 13 +------- sflphone-common/src/logger.cpp | 53 +++++++++++++++++++++++++++++++++ sflphone-common/src/logger.h | 42 ++++++++++++++++++++++++++ 4 files changed, 98 insertions(+), 12 deletions(-) create mode 100644 sflphone-common/src/logger.cpp create mode 100644 sflphone-common/src/logger.h diff --git a/sflphone-common/src/Makefile.am b/sflphone-common/src/Makefile.am index b0fdb972aa..309462f9ae 100644 --- a/sflphone-common/src/Makefile.am +++ b/sflphone-common/src/Makefile.am @@ -16,6 +16,7 @@ sflphoned_SOURCES = \ accountcreator.cpp \ call.cpp \ account.cpp \ + logger.cpp \ numbercleaner.cpp # Redefine the USE_IAX variable here, so that it could be used in managerimpl @@ -63,6 +64,7 @@ noinst_HEADERS = \ account.h \ accountcreator.h \ call.h \ + logger.h \ numbercleaner.h libsflphone_la_LIBADD = \ diff --git a/sflphone-common/src/global.h b/sflphone-common/src/global.h index 12529fe3ef..474d08b0f3 100644 --- a/sflphone-common/src/global.h +++ b/sflphone-common/src/global.h @@ -31,6 +31,7 @@ #include <sstream> #include <map> #include <vector> +#include "logger.h" #define SFLPHONED_VERSION "0.9.6" /** Version number */ @@ -72,18 +73,6 @@ static const SOUND_FORMAT INT32 = 0x8; #define SFLDataAmplitude (32767 >> 4) #endif -#ifdef SFLDEBUG - #define _debug(...) fprintf(stderr, "[sfl-debug] " __VA_ARGS__) - #define _debugException(...) fprintf(stderr, "[sfl-excep] " __VA_ARGS__ "\n") - #define _debugInit(...) fprintf(stderr, "[sfl-init] " __VA_ARGS__ "\n") - #define _debugAlsa(...) fprintf(stderr, "[alsa-debug] " __VA_ARGS__ ) -#else - #define _debug(...) - #define _debugException(...) - #define _debugInit(...) - #define _debugAlsa(...) -#endif - #define PROGNAME "sflphoned" /** Binary name */ #define PROGDIR "sflphone" /** Program directory */ #define RINGDIR "ringtones" /** Ringtones directory */ diff --git a/sflphone-common/src/logger.cpp b/sflphone-common/src/logger.cpp new file mode 100644 index 0000000000..c76d90fefb --- /dev/null +++ b/sflphone-common/src/logger.cpp @@ -0,0 +1,53 @@ +#include "logger.h" +#include <syslog.h> +#include <stdarg.h> + +void Logger::log(const int level, const char* format, ...) +{ + va_list ap; + string prefix = "<> "; + char buffer[1024]; + string message = ""; + string color_prefix = ""; + + switch(level) + { + case LOG_ERR: + { + prefix = "<error> "; + color_prefix = RED; + break; + } + case LOG_WARNING: + { + prefix = "<warning> "; + color_prefix = LIGHT_RED; + break; + } + case LOG_INFO: + { + prefix = "<info> "; + color_prefix = ""; + break; + } + case LOG_DEBUG: + { + prefix = "<debug> "; + color_prefix = GREEN; + break; + } + } + + va_start(ap, format); + vsprintf(buffer, format, ap); + va_end(ap); + + message = buffer; + message = prefix + message; + + syslog(level, message.c_str()); + + message = color_prefix + message + END_COLOR + "\n"; + fprintf(stderr, message.c_str()); +} + diff --git a/sflphone-common/src/logger.h b/sflphone-common/src/logger.h new file mode 100644 index 0000000000..38708df424 --- /dev/null +++ b/sflphone-common/src/logger.h @@ -0,0 +1,42 @@ +#ifndef __LOGGER_H__ +#define __LOGGER_H__ + +#include <string> +#include <syslog.h> + +using namespace std; + +namespace Logger +{ + void log(const int, const char*, ...); +}; + +#define _error(...) Logger::log(LOG_ERROR, __VA_ARGS__) +#define _warn(...) Logger::log(LOG_WARNING, __VA_ARGS__) +#define _info(...) Logger::log(LOG_INFO, __VA_ARGS__) +#define _debug(...) Logger::log(LOG_DEBUG, __VA_ARGS__) + +#define _debugException(...) +#define _debugInit(...) +#define _debugAlsa(...) + +#define BLACK "\033[22;30m" +#define RED "\033[22;31m" +#define GREEN "\033[22;32m" +#define BROWN "\033[22;33m" +#define BLUE "\033[22;34m" +#define MAGENTA "\033[22;35m" +#define CYAN "\033[22;36m" +#define GREY "\033[22;37m" +#define DARK_GREY "\033[01;30m" +#define LIGHT_RED "\033[01;31m" +#define LIGHT_SCREEN "\033[01;32m" +#define YELLOW "\033[01;33m" +#define LIGHT_BLUE "\033[01;34m" +#define LIGHT_MAGENTA "\033[01;35m" +#define LIGHT_CYAN "\033[01;36m" +#define WHITE "\033[01;37m" +#define END_COLOR "\033[0m" + +#endif + -- GitLab From 3d54c70aaf0144bc8d3b1b81a0be26df112f1319 Mon Sep 17 00:00:00 2001 From: Julien Bonjean <julien@bonjean.info> Date: Fri, 13 Nov 2009 14:38:29 -0500 Subject: [PATCH 006/188] [#1671] Added command line switches for daemon --- sflphone-common/configure.ac | 8 +++-- sflphone-common/src/Makefile.am | 1 + sflphone-common/src/logger.cpp | 30 ++++++++++++++-- sflphone-common/src/logger.h | 9 +++-- sflphone-common/src/main.cpp | 63 ++++++++++++++++++++++++++------- 5 files changed, 90 insertions(+), 21 deletions(-) diff --git a/sflphone-common/configure.ac b/sflphone-common/configure.ac index 8ea46baa20..d4b9b3a5f1 100644 --- a/sflphone-common/configure.ac +++ b/sflphone-common/configure.ac @@ -1,5 +1,6 @@ dnl SFLPhone - configure.ac for automake 1.9 and autoconf 2.59 dnl + dnl Process this file with autoconf to produce a configure script. AC_PREREQ(2.59) AC_INIT([sflphone],[0.9.7~beta],[sflphoneteam@savoirfairelinux.com],[sflphone]) @@ -8,14 +9,17 @@ AC_REVISION([$Revision$]) AC_CANONICAL_SYSTEM - AM_INIT_AUTOMAKE(AC_PACKAGE_NAME, AC_PACKAGE_VERSION) + PACKAGE=SFLphone + VERSION=`cat VERSION` + + AM_INIT_AUTOMAKE($NAME, $VERSION) AM_CONFIG_HEADER([config.h]) # Silent build by default. Use make V=1 to increase verbosity m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])]) dnl Use this variable in the program -AC_SUBST(PACKAGE_VERSION) + AC_SUBST(PACKAGE_VERSION) AM_PROG_LIBTOOL diff --git a/sflphone-common/src/Makefile.am b/sflphone-common/src/Makefile.am index 309462f9ae..682192953a 100644 --- a/sflphone-common/src/Makefile.am +++ b/sflphone-common/src/Makefile.am @@ -30,6 +30,7 @@ endif sflphoned_CXXFLAGS = \ -DPREFIX=\"$(prefix)\" -DPROGSHAREDIR=\"${datadir}/sflphone\" $(IAX_CXXFLAG)\ + -DVERSION=\"$(VERSION)\" \ @ZRTPCPP_CFLAGS@ \ @libssl_CFLAGS@ diff --git a/sflphone-common/src/logger.cpp b/sflphone-common/src/logger.cpp index c76d90fefb..a978b660ff 100644 --- a/sflphone-common/src/logger.cpp +++ b/sflphone-common/src/logger.cpp @@ -2,8 +2,17 @@ #include <syslog.h> #include <stdarg.h> -void Logger::log(const int level, const char* format, ...) +namespace Logger { + +bool consoleLog = false; +bool debugMode = false; + +void log(const int level, const char* format, ...) +{ + if(!debugMode && level == LOG_DEBUG) + return; + va_list ap; string prefix = "<> "; char buffer[1024]; @@ -47,7 +56,22 @@ void Logger::log(const int level, const char* format, ...) syslog(level, message.c_str()); - message = color_prefix + message + END_COLOR + "\n"; - fprintf(stderr, message.c_str()); + if(consoleLog) + { + message = color_prefix + message + END_COLOR + "\n"; + fprintf(stderr, message.c_str()); + } +} + +void setConsoleLog(bool c) +{ + Logger::consoleLog = c; +} + +void setDebugMode(bool d) +{ + Logger::debugMode = d; +} + } diff --git a/sflphone-common/src/logger.h b/sflphone-common/src/logger.h index 38708df424..b967ef27bb 100644 --- a/sflphone-common/src/logger.h +++ b/sflphone-common/src/logger.h @@ -9,6 +9,9 @@ using namespace std; namespace Logger { void log(const int, const char*, ...); + + void setConsoleLog(bool); + void setDebugMode(bool); }; #define _error(...) Logger::log(LOG_ERROR, __VA_ARGS__) @@ -16,9 +19,9 @@ namespace Logger #define _info(...) Logger::log(LOG_INFO, __VA_ARGS__) #define _debug(...) Logger::log(LOG_DEBUG, __VA_ARGS__) -#define _debugException(...) -#define _debugInit(...) -#define _debugAlsa(...) +#define _debugException(...) Logger::log(LOG_DEBUG, __VA_ARGS__) +#define _debugInit(...) Logger::log(LOG_DEBUG, __VA_ARGS__) +#define _debugAlsa(...) Logger::log(LOG_DEBUG, __VA_ARGS__) #define BLACK "\033[22;30m" #define RED "\033[22;31m" diff --git a/sflphone-common/src/main.cpp b/sflphone-common/src/main.cpp index 72e2714e40..6f2d05cfe7 100644 --- a/sflphone-common/src/main.cpp +++ b/sflphone-common/src/main.cpp @@ -25,7 +25,7 @@ #include <string> #include <dirent.h> #include <sys/stat.h> -//#include "config.h" +#include <cc++/common.h> #include "global.h" #include "user_cfg.h" @@ -34,25 +34,63 @@ #include "audio/audiolayer.h" +using namespace std; +using namespace ost; + +CommandOptionArg level( + "log-level", "l", "Log level (not yet implemented)" +); + +CommandOptionNoArg console( + "console", "c", "Log in console (instead of syslog)" +); + +CommandOptionNoArg debug( + "debug", "d", "Debug mode (more verbose)" +); + +CommandOptionNoArg help( + "help", "h", "Print help" +); + int main (int argc, char **argv) { - int exit_code = 0; + int exit_code = 0; + + Logger::setConsoleLog(false); + Logger::setDebugMode(false); - //setlocale (LC_ALL, ""); - //bindtextdomain (PACKAGE, LOCALEDIR); - //textdomain (PACKAGE); + CommandOptionParse * args = makeCommandOptionParse(argc, argv, ""); + + printf ("SFLphone Daemon %s, by Savoir-Faire Linux 2004-2009\n", VERSION); + printf ("http://www.sflphone.org/\n"); + + if ( help.numSet ) { + cerr << args->printUsage(); + ::exit(0); + } + + if ( args->argsHaveError() ) { + cerr << args->printErrors(); + cerr << args->printUsage(); + ::exit(1); + } - if (argc == 2 && strcmp (argv[1], "--help") == 0) { + if( console.numSet ) + { + _info("Console logging activated"); + Logger::setConsoleLog(true); + } + if( debug.numSet ) + { + _info("Debug mode activated"); + Logger::setDebugMode(true); + } - printf ("%1$s Daemon %2$s, by Savoir-Faire Linux 2004-2009", - PROGNAME, - SFLPHONED_VERSION); - printf ("USAGE: sflphoned [--help]Parameters: --help\tfor this message --port=3999\tchange the session port"); - printf ("See http://www.sflphone.org/ for more information"); + delete args; - } else { FILE *fp; char homepid[128]; char sfldir[128]; @@ -163,7 +201,6 @@ main (int argc, char **argv) Manager::instance().setDBusManager (&DBusManager::instance()); exit_code = DBusManager::instance().exec(); // UI Loop } - } return exit_code; } -- GitLab From d0815f1402c96696c30b3ef3edacb6ae1c3b9d66 Mon Sep 17 00:00:00 2001 From: Julien Bonjean <julien@bonjean.info> Date: Fri, 13 Nov 2009 17:01:35 -0500 Subject: [PATCH 007/188] [#1671] Exploded managerimpl file --- sflphone-common/src/Makefile.am | 1 + sflphone-common/src/managerimpl.cpp | 207 --------------- .../src/managerimpl_registration.cpp | 249 ++++++++++++++++++ 3 files changed, 250 insertions(+), 207 deletions(-) create mode 100644 sflphone-common/src/managerimpl_registration.cpp diff --git a/sflphone-common/src/Makefile.am b/sflphone-common/src/Makefile.am index 682192953a..1dcc2584f1 100644 --- a/sflphone-common/src/Makefile.am +++ b/sflphone-common/src/Makefile.am @@ -11,6 +11,7 @@ sflphoned_SOURCES = \ voiplink.cpp \ main.cpp \ managerimpl.cpp \ + managerimpl_registration.cpp \ observer.cpp \ eventthread.cpp \ accountcreator.cpp \ diff --git a/sflphone-common/src/managerimpl.cpp b/sflphone-common/src/managerimpl.cpp index 324ca8c76f..a3a8d819ec 100644 --- a/sflphone-common/src/managerimpl.cpp +++ b/sflphone-common/src/managerimpl.cpp @@ -1520,45 +1520,6 @@ ManagerImpl::saveConfig (void) return _setupLoaded; } -//THREAD=Main -int -ManagerImpl::initRegisterAccounts() -{ - int status; - bool flag = true; - AccountMap::iterator iter; - - _debugInit ("Initiate VoIP Links Registration"); - iter = _accountMap.begin(); - - /* Loop on the account map previously loaded */ - - while (iter != _accountMap.end()) { - if (iter->second) { - iter->second->loadConfig(); - /* If the account is set as enabled, try to register */ - - if (iter->second->isEnabled()) { - status = iter->second->registerVoIPLink(); - - if (status != SUCCESS) { - flag = false; - } - } - } - - iter++; - } - - // calls the client notification here in case of errors at startup... - if (_audiodriver -> getErrorMessage() != -1) - notifyErrClient (_audiodriver -> getErrorMessage()); - - ASSERT (flag, true); - - return SUCCESS; -} - //THREAD=Main bool ManagerImpl::sendDtmf (const CallID& id, char code) @@ -3982,30 +3943,6 @@ void ManagerImpl::setAccountDetails (const std::string& accountID, const std::ma } -void -ManagerImpl::sendRegister (const std::string& accountID , const int32_t& enable) -{ - - // Update the active field - setConfig (accountID, CONFIG_ACCOUNT_ENABLE, (enable == 1) ? TRUE_STR:FALSE_STR); - - Account* acc = getAccount (accountID); - acc->loadConfig(); - - // Test on the freshly updated value - - if (acc->isEnabled()) { - // Verify we aren't already registered, then register - _debug ("Send register for account %s" , accountID.c_str()); - acc->registerVoIPLink(); - } else { - // Verify we are already registered, then unregister - _debug ("Send unregister for account %s" , accountID.c_str()); - acc->unregisterVoIPLink(); - } - -} - std::string ManagerImpl::addAccount (const std::map< std::string, std::string >& details) { @@ -4336,150 +4273,6 @@ ManagerImpl::getAccountIdFromNameAndServer (const std::string& userName, const s return AccountNULL; } -void ManagerImpl::restartPJSIP (void) -{ - SIPVoIPLink *siplink; - siplink = dynamic_cast<SIPVoIPLink*> (getSIPAccountLink ()); - - this->unregisterCurSIPAccounts(); - /* Terminate and initialize the PJSIP library */ - - if (siplink) { - siplink->terminate (); - siplink = SIPVoIPLink::instance (""); - siplink->init (); - } - - /* Then register all enabled SIP accounts */ - this->registerCurSIPAccounts (siplink); -} - -int -ManagerImpl::registerAccounts() -{ - int status; - bool flag = true; - AccountMap::iterator iter; - - _debugInit ("Initiate VoIP Links Registration"); - iter = _accountMap.begin(); - - /* Loop on the account map previously loaded */ - - while (iter != _accountMap.end()) { - if (iter->second) { - - if (iter->second->isEnabled()) { - - _debug("Register account %s", iter->first.c_str()); - - status = iter->second->registerVoIPLink(); - - if (status != SUCCESS) { - flag = false; - } - } - } - - iter++; - } - - // calls the client notification here in case of errors at startup... - if (_audiodriver -> getErrorMessage() != -1) - notifyErrClient (_audiodriver -> getErrorMessage()); - - ASSERT (flag, true); - - return SUCCESS; -} - -VoIPLink* ManagerImpl::getAccountLink (const AccountID& accountID) -{ - if (accountID!=AccountNULL) { - Account* acc = getAccount (accountID); - - if (acc) { - return acc->getVoIPLink(); - } - - return 0; - } else - return SIPVoIPLink::instance (""); -} - -VoIPLink* ManagerImpl::getSIPAccountLink() -{ - /* We are looking for the first SIP account we met because all the SIP accounts have the same voiplink */ - Account *account; - AccountMap::iterator iter; - - for (iter = _accountMap.begin(); iter != _accountMap.end(); ++iter) { - account = iter->second; - - if (account->getType() == "sip") { - return account->getVoIPLink(); - } - } - - return NULL; -} - - - - -pjsip_regc -*getSipRegcFromID (const AccountID& id UNUSED) -{ - /*SIPAccount *tmp = dynamic_cast<SIPAccount *>getAccount(id); - if(tmp != NULL) - return tmp->getSipRegc(); - else*/ - return NULL; -} - -void ManagerImpl::unregisterCurSIPAccounts() -{ - Account *current; - - AccountMap::iterator iter = _accountMap.begin(); - - while (iter != _accountMap.end()) { - current = iter->second; - - if (current) { - if (current->isEnabled() && current->getType() == "sip") { - current->unregisterVoIPLink(); - } - } - - iter++; - } -} - -void ManagerImpl::registerCurSIPAccounts (VoIPLink *link) -{ - - Account *current; - - AccountMap::iterator iter = _accountMap.begin(); - - while (iter != _accountMap.end()) { - current = iter->second; - - if (current) { - if (current->isEnabled() && current->getType() == "sip") { - //current->setVoIPLink(link); - current->registerVoIPLink(); - } - } - - current = NULL; - - iter++; - } -} - - std::map<std::string, int32_t> ManagerImpl::getAddressbookSettings () { diff --git a/sflphone-common/src/managerimpl_registration.cpp b/sflphone-common/src/managerimpl_registration.cpp new file mode 100644 index 0000000000..3eec332cdf --- /dev/null +++ b/sflphone-common/src/managerimpl_registration.cpp @@ -0,0 +1,249 @@ +/* + * Copyright (C) 2004-2007 Savoir-Faire Linux inc. + * Author: Alexandre Bourget <alexandre.bourget@savoirfairelinux.com> + * Author: Yan Morin <yan.morin@savoirfairelinux.com> + * Author: Laurielle Lea <laurielle.lea@savoirfairelinux.com> + * Author: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> + * Author: Alexandre Savard <alexandre.savard@savoirfairelinux.com> + * Author: Guillaume Carmel-Archambault <guillaume.carmel-archambault@savoirfairelinux.com> + * + * 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 3 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., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include "managerimpl.h" + +#include "account.h" +#include "dbus/callmanager.h" +#include "user_cfg.h" +#include "global.h" +#include "sip/sipaccount.h" + +#include "audio/audiolayer.h" +#include "audio/alsa/alsalayer.h" +#include "audio/pulseaudio/pulselayer.h" +#include "audio/sound/tonelist.h" +#include "history/historymanager.h" +#include "accountcreator.h" // create new account +#include "sip/sipvoiplink.h" +#include "manager.h" +#include "dbus/configurationmanager.h" + +#include "conference.h" + +#include <errno.h> +#include <cstdlib> + +//THREAD=Main +int +ManagerImpl::initRegisterAccounts() +{ + int status; + bool flag = true; + AccountMap::iterator iter; + + _debugInit ("Initiate VoIP Links Registration"); + iter = _accountMap.begin(); + + /* Loop on the account map previously loaded */ + + while (iter != _accountMap.end()) { + if (iter->second) { + iter->second->loadConfig(); + /* If the account is set as enabled, try to register */ + + if (iter->second->isEnabled()) { + status = iter->second->registerVoIPLink(); + + if (status != SUCCESS) { + flag = false; + } + } + } + + iter++; + } + + // calls the client notification here in case of errors at startup... + if (_audiodriver -> getErrorMessage() != -1) + notifyErrClient (_audiodriver -> getErrorMessage()); + + ASSERT (flag, true); + + return SUCCESS; +} + +void ManagerImpl::restartPJSIP (void) +{ + SIPVoIPLink *siplink; + siplink = dynamic_cast<SIPVoIPLink*> (getSIPAccountLink ()); + + this->unregisterCurSIPAccounts(); + /* Terminate and initialize the PJSIP library */ + + if (siplink) { + siplink->terminate (); + siplink = SIPVoIPLink::instance (""); + siplink->init (); + } + + /* Then register all enabled SIP accounts */ + this->registerCurSIPAccounts (siplink); +} + +int +ManagerImpl::registerAccounts() +{ + int status; + bool flag = true; + AccountMap::iterator iter; + + _debugInit ("Initiate VoIP Links Registration"); + iter = _accountMap.begin(); + + /* Loop on the account map previously loaded */ + + while (iter != _accountMap.end()) { + if (iter->second) { + + if (iter->second->isEnabled()) { + + _debug("Register account %s", iter->first.c_str()); + + status = iter->second->registerVoIPLink(); + + if (status != SUCCESS) { + flag = false; + } + } + } + + iter++; + } + + // calls the client notification here in case of errors at startup... + if (_audiodriver -> getErrorMessage() != -1) + notifyErrClient (_audiodriver -> getErrorMessage()); + + ASSERT (flag, true); + + return SUCCESS; +} + +VoIPLink* ManagerImpl::getAccountLink (const AccountID& accountID) +{ + if (accountID!=AccountNULL) { + Account* acc = getAccount (accountID); + + if (acc) { + return acc->getVoIPLink(); + } + + return 0; + } else + return SIPVoIPLink::instance (""); +} + +VoIPLink* ManagerImpl::getSIPAccountLink() +{ + /* We are looking for the first SIP account we met because all the SIP accounts have the same voiplink */ + Account *account; + AccountMap::iterator iter; + + for (iter = _accountMap.begin(); iter != _accountMap.end(); ++iter) { + account = iter->second; + + if (account->getType() == "sip") { + return account->getVoIPLink(); + } + } + + return NULL; +} + +pjsip_regc +*getSipRegcFromID (const AccountID& id UNUSED) +{ + /*SIPAccount *tmp = dynamic_cast<SIPAccount *>getAccount(id); + if(tmp != NULL) + return tmp->getSipRegc(); + else*/ + return NULL; +} + +void ManagerImpl::unregisterCurSIPAccounts() +{ + Account *current; + + AccountMap::iterator iter = _accountMap.begin(); + + while (iter != _accountMap.end()) { + current = iter->second; + + if (current) { + if (current->isEnabled() && current->getType() == "sip") { + current->unregisterVoIPLink(); + } + } + + iter++; + } +} + +void ManagerImpl::registerCurSIPAccounts (VoIPLink *link) +{ + + Account *current; + + AccountMap::iterator iter = _accountMap.begin(); + + while (iter != _accountMap.end()) { + current = iter->second; + + if (current) { + if (current->isEnabled() && current->getType() == "sip") { + //current->setVoIPLink(link); + current->registerVoIPLink(); + } + } + + current = NULL; + + iter++; + } +} + +void +ManagerImpl::sendRegister (const std::string& accountID , const int32_t& enable) +{ + + // Update the active field + setConfig (accountID, CONFIG_ACCOUNT_ENABLE, (enable == 1) ? TRUE_STR:FALSE_STR); + + Account* acc = getAccount (accountID); + acc->loadConfig(); + + // Test on the freshly updated value + + if (acc->isEnabled()) { + // Verify we aren't already registered, then register + _debug ("Send register for account %s" , accountID.c_str()); + acc->registerVoIPLink(); + } else { + // Verify we are already registered, then unregister + _debug ("Send unregister for account %s" , accountID.c_str()); + acc->unregisterVoIPLink(); + } + +} -- GitLab From 739e75e6e599ea1f68e2975c1083f8d2af8d25f7 Mon Sep 17 00:00:00 2001 From: Julien Bonjean <julien@bonjean.info> Date: Fri, 13 Nov 2009 17:30:21 -0500 Subject: [PATCH 008/188] [#1671] Updated registration method --- sflphone-common/src/dbus/networkmanager.cpp | 10 +++++----- sflphone-common/src/managerimpl_registration.cpp | 5 ----- 2 files changed, 5 insertions(+), 10 deletions(-) diff --git a/sflphone-common/src/dbus/networkmanager.cpp b/sflphone-common/src/dbus/networkmanager.cpp index 6a2a59e656..b213462429 100644 --- a/sflphone-common/src/dbus/networkmanager.cpp +++ b/sflphone-common/src/dbus/networkmanager.cpp @@ -5,21 +5,21 @@ #include "../manager.h" #include "sip/sipvoiplink.h" -//using namespace std; +using namespace std; -const std::string NetworkManager::statesString[5] = {"unknown", "asleep", "connecting", "connected", "disconnected"}; +const string NetworkManager::statesString[5] = {"unknown", "asleep", "connecting", "connected", "disconnected"}; -std::string NetworkManager::stateAsString(const uint32_t& state) +string NetworkManager::stateAsString(const uint32_t& state) { return statesString[state]; } void NetworkManager::StateChanged(const uint32_t& state) { - _debug("Network state changed: %s", stateAsString(state)); + _warn("Network state changed: %s", stateAsString(state).c_str()); if(state == NM_STATE_CONNECTED) - Manager::instance().restartPJSIP(); + Manager::instance().registerAccounts(); } NetworkManager::NetworkManager(DBus::Connection& connection, const DBus::Path& path, const char* destination): DBus::ObjectProxy (connection, path, destination) diff --git a/sflphone-common/src/managerimpl_registration.cpp b/sflphone-common/src/managerimpl_registration.cpp index 3eec332cdf..5e3b9d27ce 100644 --- a/sflphone-common/src/managerimpl_registration.cpp +++ b/sflphone-common/src/managerimpl_registration.cpp @@ -31,11 +31,6 @@ #include "sip/sipaccount.h" #include "audio/audiolayer.h" -#include "audio/alsa/alsalayer.h" -#include "audio/pulseaudio/pulselayer.h" -#include "audio/sound/tonelist.h" -#include "history/historymanager.h" -#include "accountcreator.h" // create new account #include "sip/sipvoiplink.h" #include "manager.h" #include "dbus/configurationmanager.h" -- GitLab From a6902b9e916bd0ee23be5add88b06fd622ae8e1b Mon Sep 17 00:00:00 2001 From: Julien Bonjean <julien@bonjean.info> Date: Mon, 16 Nov 2009 19:14:53 -0500 Subject: [PATCH 009/188] [#1671] Use propertiesChange as signal to register accounts - it seems to be more generic (VPN creation, ...) but may be overkill ... --- sflphone-common/src/dbus/networkmanager.cpp | 14 ++++++++++++-- sflphone-common/src/dbus/networkmanager.h | 1 + .../src/dbus/networkmanager_proxy.h | 19 ++++++++++++++++--- .../dbus/org.freedesktop.NetworkManager.xml | 3 +++ 4 files changed, 32 insertions(+), 5 deletions(-) diff --git a/sflphone-common/src/dbus/networkmanager.cpp b/sflphone-common/src/dbus/networkmanager.cpp index b213462429..65e646a48a 100644 --- a/sflphone-common/src/dbus/networkmanager.cpp +++ b/sflphone-common/src/dbus/networkmanager.cpp @@ -18,8 +18,18 @@ void NetworkManager::StateChanged(const uint32_t& state) { _warn("Network state changed: %s", stateAsString(state).c_str()); - if(state == NM_STATE_CONNECTED) - Manager::instance().registerAccounts(); +// if(state == NM_STATE_CONNECTED) +// Manager::instance().registerAccounts(); +} + +void NetworkManager::PropertiesChanged(const std::map< std::string, ::DBus::Variant >& argin0) +{ + + const map< string, ::DBus::Variant >::const_iterator iter = argin0.begin(); + + _warn("Properties changed: %s", iter->first.c_str()); + + Manager::instance().registerAccounts(); } NetworkManager::NetworkManager(DBus::Connection& connection, const DBus::Path& path, const char* destination): DBus::ObjectProxy (connection, path, destination) diff --git a/sflphone-common/src/dbus/networkmanager.h b/sflphone-common/src/dbus/networkmanager.h index 073bfafebc..2402f5c7a4 100644 --- a/sflphone-common/src/dbus/networkmanager.h +++ b/sflphone-common/src/dbus/networkmanager.h @@ -14,6 +14,7 @@ public: NetworkManager(DBus::Connection&, const DBus::Path&, const char*); void StateChanged(const uint32_t& state); + void PropertiesChanged(const std::map< std::string, ::DBus::Variant >& argin0); string stateAsString(const uint32_t& state); enum NMState diff --git a/sflphone-common/src/dbus/networkmanager_proxy.h b/sflphone-common/src/dbus/networkmanager_proxy.h index d34f456d23..078925ceff 100644 --- a/sflphone-common/src/dbus/networkmanager_proxy.h +++ b/sflphone-common/src/dbus/networkmanager_proxy.h @@ -1,9 +1,13 @@ + +/* + * This file was automatically generated by dbusxx-xml2cpp; DO NOT EDIT! + */ + #ifndef __dbusxx__networkmanager_proxy_h__PROXY_MARSHAL_H #define __dbusxx__networkmanager_proxy_h__PROXY_MARSHAL_H #include <dbus-c++/dbus.h> #include <cassert> -#include <iostream> namespace org { namespace freedesktop { @@ -17,6 +21,7 @@ public: : ::DBus::InterfaceProxy("org.freedesktop.NetworkManager") { connect_signal(NetworkManager_proxy, StateChanged, _StateChanged_stub); + connect_signal(NetworkManager_proxy, PropertiesChanged, _PropertiesChanged_stub); } public: @@ -27,7 +32,6 @@ public: /* methods exported by this interface, * this functions will invoke the corresponding methods on the remote objects */ -/* std::vector< ::DBus::Path > GetDevices() { ::DBus::CallMessage call; @@ -39,13 +43,14 @@ public: ri >> argout; return argout; } -*/ + public: /* signal handlers for this interface */ virtual void StateChanged(const uint32_t& argin0) = 0; + virtual void PropertiesChanged(const std::map< std::string, ::DBus::Variant >& argin0) = 0; private: @@ -59,6 +64,14 @@ private: ri >> arg0; StateChanged(arg0); } + void _PropertiesChanged_stub(const ::DBus::SignalMessage &sig) + { + ::DBus::MessageIter ri = sig.reader(); + + std::map< std::string, ::DBus::Variant > arg0; + ri >> arg0; + PropertiesChanged(arg0); + } }; } } diff --git a/sflphone-common/src/dbus/org.freedesktop.NetworkManager.xml b/sflphone-common/src/dbus/org.freedesktop.NetworkManager.xml index a26cc046ab..591fb7b8ed 100644 --- a/sflphone-common/src/dbus/org.freedesktop.NetworkManager.xml +++ b/sflphone-common/src/dbus/org.freedesktop.NetworkManager.xml @@ -8,6 +8,9 @@ <signal name="StateChanged"> <arg type="u"/> </signal> + <signal name="PropertiesChanged"> + <arg type="a{sv}"/> + </signal> </interface> </node> -- GitLab From 47d29cb7e6b670422a5c9ee9e8e429bc0067719f Mon Sep 17 00:00:00 2001 From: Julien Bonjean <julien@bonjean.info> Date: Thu, 19 Nov 2009 10:41:41 -0500 Subject: [PATCH 010/188] [#1671] Tested some stuff to not try to register when connection is lost - Unsuccessful, maybe related to our dbus library --- sflphone-common/src/dbus/networkmanager.cpp | 26 ++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/sflphone-common/src/dbus/networkmanager.cpp b/sflphone-common/src/dbus/networkmanager.cpp index 65e646a48a..777f0c45a9 100644 --- a/sflphone-common/src/dbus/networkmanager.cpp +++ b/sflphone-common/src/dbus/networkmanager.cpp @@ -24,11 +24,35 @@ void NetworkManager::StateChanged(const uint32_t& state) void NetworkManager::PropertiesChanged(const std::map< std::string, ::DBus::Variant >& argin0) { - const map< string, ::DBus::Variant >::const_iterator iter = argin0.begin(); + string message = iter->first; + _warn("Properties changed: %s", iter->first.c_str()); +/* + DBus::Variant variant = iter->second; + DBus::MessageIter i = variant.reader(); + cout << i.type() << endl;// 97 + cout << (char )i.type() << endl; + cout << i.is_array() << endl;// 1 + cout << i.is_dict() << endl;// 0 + cout << i.array_type() << endl;// 111 + + int size; + string *value; + size = i.get_array(value); + cout << "length: " << size << endl; + + while (!i.at_end()) + { + char **array = new char*[2]; + size_t length = i.get_array(&array); + cout << "length: " << length << endl; + i = i.recurse(); + } +*/ + Manager::instance().registerAccounts(); } -- GitLab From bfc9e261cc852d03aab73a231a82e713a4b1f317 Mon Sep 17 00:00:00 2001 From: Julien Bonjean <julien@bonjean.info> Date: Thu, 19 Nov 2009 11:23:57 -0500 Subject: [PATCH 011/188] [#1671] More tests ... --- sflphone-common/src/dbus/networkmanager.cpp | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/sflphone-common/src/dbus/networkmanager.cpp b/sflphone-common/src/dbus/networkmanager.cpp index 777f0c45a9..a34e21345b 100644 --- a/sflphone-common/src/dbus/networkmanager.cpp +++ b/sflphone-common/src/dbus/networkmanager.cpp @@ -17,9 +17,6 @@ string NetworkManager::stateAsString(const uint32_t& state) void NetworkManager::StateChanged(const uint32_t& state) { _warn("Network state changed: %s", stateAsString(state).c_str()); - -// if(state == NM_STATE_CONNECTED) -// Manager::instance().registerAccounts(); } void NetworkManager::PropertiesChanged(const std::map< std::string, ::DBus::Variant >& argin0) @@ -29,18 +26,19 @@ void NetworkManager::PropertiesChanged(const std::map< std::string, ::DBus::Vari string message = iter->first; _warn("Properties changed: %s", iter->first.c_str()); - /* DBus::Variant variant = iter->second; DBus::MessageIter i = variant.reader(); cout << i.type() << endl;// 97 cout << (char )i.type() << endl; + cout << (char)i.array_type() << endl; + cout << i.is_array() << endl;// 1 cout << i.is_dict() << endl;// 0 cout << i.array_type() << endl;// 111 int size; - string *value; + ::DBus::Path* value = new ::DBus::Path[10]; size = i.get_array(value); cout << "length: " << size << endl; @@ -52,7 +50,6 @@ void NetworkManager::PropertiesChanged(const std::map< std::string, ::DBus::Vari i = i.recurse(); } */ - Manager::instance().registerAccounts(); } -- GitLab From d3f044321b8c76ffffb11afb05e26d5da7507902 Mon Sep 17 00:00:00 2001 From: Julien Bonjean <julien@bonjean.info> Date: Thu, 19 Nov 2009 12:40:10 -0500 Subject: [PATCH 012/188] [#1671] Added compilation flag for network-manager support --- sflphone-common/configure.ac | 9 +++++++++ sflphone-common/src/Makefile.am | 8 +++++++- sflphone-common/src/dbus/Makefile.am | 8 +++++++- sflphone-common/src/dbus/dbusmanagerimpl.cpp | 2 ++ sflphone-common/src/dbus/networkmanager.cpp | 3 +++ 5 files changed, 28 insertions(+), 2 deletions(-) diff --git a/sflphone-common/configure.ac b/sflphone-common/configure.ac index d4b9b3a5f1..e3c869ac13 100644 --- a/sflphone-common/configure.ac +++ b/sflphone-common/configure.ac @@ -382,6 +382,15 @@ AC_ARG_WITH([iax2], AC_DEFINE([HAVE_IAX], test "x$with_iax2" = "xyes", [Define if you have libiax2]) AM_CONDITIONAL(USE_IAX, test "x$with_iax2" = "xyes" ) + dnl Check for network-manager +AC_ARG_WITH([networkmanager], + [AS_HELP_STRING([--without-networkmanager], + [disable support for network-manager events])], + [], + [with_networkmanager=yes]) + +AM_CONDITIONAL(USE_NETWORKMANAGER, test "x$with_networkmanager" = "xyes" ) + # check for doxygen, mostly stolen from http://log4cpp.sourceforge.net/ # ---------------------------------------------------------------------------- AC_DEFUN([BB_ENABLE_DOXYGEN], diff --git a/sflphone-common/src/Makefile.am b/sflphone-common/src/Makefile.am index 1dcc2584f1..6df7edf547 100644 --- a/sflphone-common/src/Makefile.am +++ b/sflphone-common/src/Makefile.am @@ -29,8 +29,14 @@ IAX_CXXFLAG= IAX_LIB= endif +if USE_NETWORKMANAGER +NETWORKMANAGER=-DUSE_NETWORKMANAGER +else +NETWORKMANAGER= +endif + sflphoned_CXXFLAGS = \ - -DPREFIX=\"$(prefix)\" -DPROGSHAREDIR=\"${datadir}/sflphone\" $(IAX_CXXFLAG)\ + -DPREFIX=\"$(prefix)\" -DPROGSHAREDIR=\"${datadir}/sflphone\" $(IAX_CXXFLAG) $(NETWORKMANAGER) \ -DVERSION=\"$(VERSION)\" \ @ZRTPCPP_CFLAGS@ \ @libssl_CFLAGS@ diff --git a/sflphone-common/src/dbus/Makefile.am b/sflphone-common/src/dbus/Makefile.am index 7ee673bcb3..a3c5dbbf0c 100644 --- a/sflphone-common/src/dbus/Makefile.am +++ b/sflphone-common/src/dbus/Makefile.am @@ -20,7 +20,13 @@ libdbus_la_SOURCES = \ dbusmanagerimpl.cpp \ networkmanager.cpp -libdbus_la_CXXFLAGS = -DPREFIX=\"$(prefix)\" -DPROGSHAREDIR=\"${datadir}/sflphone\" +if USE_NETWORKMANAGER +NETWORKMANAGER=-DUSE_NETWORKMANAGER +else +NETWORKMANAGER= +endif + +libdbus_la_CXXFLAGS = -DPREFIX=\"$(prefix)\" -DPROGSHAREDIR=\"${datadir}/sflphone\" $(NETWORKMANAGER) libdbus_la_LIBADD = $(top_srcdir)/libs/dbus-c++/src/libdbus-c++-1.la diff --git a/sflphone-common/src/dbus/dbusmanagerimpl.cpp b/sflphone-common/src/dbus/dbusmanagerimpl.cpp index 61504e8782..bfcc237ca3 100644 --- a/sflphone-common/src/dbus/dbusmanagerimpl.cpp +++ b/sflphone-common/src/dbus/dbusmanagerimpl.cpp @@ -41,7 +41,9 @@ DBusManagerImpl::exec() _configurationManager = new ConfigurationManager (sessionConnection); _instanceManager = new Instance (sessionConnection); +#ifdef USE_NETWORKMANAGER _networkManager = new NetworkManager(systemConnection, "/org/freedesktop/NetworkManager", ""); +#endif // Register accounts Manager::instance().initRegisterAccounts(); //getEvents(); diff --git a/sflphone-common/src/dbus/networkmanager.cpp b/sflphone-common/src/dbus/networkmanager.cpp index a34e21345b..b1197b6c0f 100644 --- a/sflphone-common/src/dbus/networkmanager.cpp +++ b/sflphone-common/src/dbus/networkmanager.cpp @@ -1,3 +1,5 @@ +#ifdef USE_NETWORKMANAGER + #include <global.h> #include "networkmanager.h" #include <iostream> @@ -57,3 +59,4 @@ NetworkManager::NetworkManager(DBus::Connection& connection, const DBus::Path& p { } +#endif -- GitLab From 0ba664517b71a581bd95ffea90d3794eec914893 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Thu, 19 Nov 2009 15:37:34 -0500 Subject: [PATCH 013/188] [#2402] Fix pointer to int conversion warning (atoi) size_t is architecture dependant (32bits 64bits) --- sflphone-client-gnome/src/actions.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sflphone-client-gnome/src/actions.c b/sflphone-client-gnome/src/actions.c index a2506dc629..829160960e 100644 --- a/sflphone-client-gnome/src/actions.c +++ b/sflphone-client-gnome/src/actions.c @@ -1083,7 +1083,7 @@ sflphone_fill_codec_list() for(pl=codecs; *codecs; codecs++) { details = (gchar **)dbus_codec_details(atoi(*codecs)); - if(codec_list_get_by_payload((gconstpointer)atoi(*codecs))!=NULL){ + if(codec_list_get_by_payload((gconstpointer)(size_t)atoi(*codecs))!=NULL){ // does nothing - the codec is already in the list, so is active. } else{ -- GitLab From a7761e14438c364b88221bc5058770c5772287f6 Mon Sep 17 00:00:00 2001 From: Julien Bonjean <julien@bonjean.info> Date: Thu, 19 Nov 2009 16:28:36 -0500 Subject: [PATCH 014/188] [#1671] Fixed bugs introduced by \n stripping & cleaning --- sflphone-common/globals.mak | 1 - sflphone-common/src/config/config.cpp | 3 -- sflphone-common/src/iax/iaxcall.cpp | 42 +++++++++++-------------- sflphone-common/src/logger.cpp | 2 +- sflphone-common/src/sip/sdp.cpp | 3 +- sflphone-common/src/sip/sipvoiplink.cpp | 4 +-- 6 files changed, 23 insertions(+), 32 deletions(-) diff --git a/sflphone-common/globals.mak b/sflphone-common/globals.mak index b1bc9a5c11..bcbb63eb25 100644 --- a/sflphone-common/globals.mak +++ b/sflphone-common/globals.mak @@ -61,6 +61,5 @@ AM_CPPFLAGS = \ -DCODECS_DIR=\""$(sflcodecdir)"\" \ -DPLUGINS_DIR=\""$(sflplugindir)"\" \ -DENABLE_TRACE \ - -DSFLDEBUG \ $(SPEEXCODEC) \ $(GSMCODEC) diff --git a/sflphone-common/src/config/config.cpp b/sflphone-common/src/config/config.cpp index 80ede64799..e156511951 100644 --- a/sflphone-common/src/config/config.cpp +++ b/sflphone-common/src/config/config.cpp @@ -60,7 +60,6 @@ void ConfigTree::addDefaultValue (const std::pair<std::string, std::string>& tok std::string ConfigTree::getDefaultValue (const std::string& key) { - _debug ("Getting default value for %s", key.c_str()); std::map<std::string, std::string>::iterator it; it = _defaultValueMap.find (key); @@ -148,8 +147,6 @@ ConfigTree::getConfigTreeItemValue (const std::string& section, const std::strin return item->getValue(); } - _debug ("Option doesn't exist: [%s] %s", section.c_str(), itemName.c_str()); - return getDefaultValue (itemName); } diff --git a/sflphone-common/src/iax/iaxcall.cpp b/sflphone-common/src/iax/iaxcall.cpp index 04899f17bc..d276abee64 100644 --- a/sflphone-common/src/iax/iaxcall.cpp +++ b/sflphone-common/src/iax/iaxcall.cpp @@ -35,42 +35,40 @@ IAXCall::setFormat (int format) { _format = format; - _debug ("IAX set supported format: "); + _info ("IAX set supported format: "); switch (format) { case AST_FORMAT_ULAW: - printf ("PCMU"); + _info("PCMU"); setAudioCodec (PAYLOAD_CODEC_ULAW); break; case AST_FORMAT_GSM: - printf ("GSM"); + _info ("GSM"); setAudioCodec (PAYLOAD_CODEC_GSM); break; case AST_FORMAT_ALAW: - printf ("ALAW"); + _info ("ALAW"); setAudioCodec (PAYLOAD_CODEC_ALAW); break; case AST_FORMAT_ILBC: - printf ("ILBC"); + _info ("ILBC"); setAudioCodec (PAYLOAD_CODEC_ILBC_20); break; case AST_FORMAT_SPEEX: - printf ("SPEEX"); + _info ("SPEEX"); setAudioCodec (PAYLOAD_CODEC_SPEEX_8000); break; default: - printf ("Error audio codec type %i not supported!", format); + _info ("Error audio codec type %i not supported!", format); setAudioCodec ( (AudioCodecType) -1); break; } - - printf (""); } @@ -81,7 +79,7 @@ IAXCall::getSupportedFormat() int format = 0; unsigned int iter; - _debug ("IAX get supported format: "); + _info ("IAX get supported format: "); map = getCodecMap().getActiveCodecs(); @@ -89,27 +87,27 @@ IAXCall::getSupportedFormat() switch (map[iter]) { case PAYLOAD_CODEC_ULAW: - printf ("PCMU "); + _info ("PCMU "); format |= AST_FORMAT_ULAW; break; case PAYLOAD_CODEC_GSM: - printf ("GSM "); + _info ("GSM "); format |= AST_FORMAT_GSM; break; case PAYLOAD_CODEC_ALAW: - printf ("PCMA "); + _info ("PCMA "); format |= AST_FORMAT_ALAW; break; case PAYLOAD_CODEC_ILBC_20: - printf ("ILBC "); + _info ("ILBC "); format |= AST_FORMAT_ILBC; break; case PAYLOAD_CODEC_SPEEX_8000: - printf ("SPEEX "); + _info ("SPEEX "); format |= AST_FORMAT_SPEEX; break; @@ -118,8 +116,6 @@ IAXCall::getSupportedFormat() } } - printf (""); - return format; } @@ -137,27 +133,27 @@ IAXCall::getFirstMatchingFormat (int needles) switch (map[iter]) { case PAYLOAD_CODEC_ULAW: - printf ("PCMU"); + _debug ("PCMU"); format = AST_FORMAT_ULAW; break; case PAYLOAD_CODEC_GSM: - printf ("GSM"); + _debug ("GSM"); format = AST_FORMAT_GSM; break; case PAYLOAD_CODEC_ALAW: - printf ("PCMA"); + _debug ("PCMA"); format = AST_FORMAT_ALAW; break; case PAYLOAD_CODEC_ILBC_20: - printf ("ILBC"); + _debug ("ILBC"); format = AST_FORMAT_ILBC; break; case PAYLOAD_CODEC_SPEEX_8000: - printf ("SPEEX"); + _debug ("SPEEX"); format = AST_FORMAT_SPEEX; break; @@ -171,8 +167,6 @@ IAXCall::getFirstMatchingFormat (int needles) } - printf (""); - return 0; } diff --git a/sflphone-common/src/logger.cpp b/sflphone-common/src/logger.cpp index a978b660ff..cb2d2555b6 100644 --- a/sflphone-common/src/logger.cpp +++ b/sflphone-common/src/logger.cpp @@ -42,7 +42,7 @@ void log(const int level, const char* format, ...) case LOG_DEBUG: { prefix = "<debug> "; - color_prefix = GREEN; + color_prefix = ""; break; } } diff --git a/sflphone-common/src/sip/sdp.cpp b/sflphone-common/src/sip/sdp.cpp index dd24f73698..15c4d8e963 100644 --- a/sflphone-common/src/sip/sdp.cpp +++ b/sflphone-common/src/sip/sdp.cpp @@ -518,8 +518,9 @@ void Sdp::toString (void) sdp << _local_offer->media[0]->desc.fmt[i].ptr << " "; } - _debug ("LOCAL SDP: \n%s", sdp.str().c_str()); + sdp << "\n"; + _debug ("LOCAL SDP: \n%s", sdp.str().c_str()); } void Sdp::set_local_media_capabilities () diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp index f63ef7c4bb..14c6ad596c 100644 --- a/sflphone-common/src/sip/sipvoiplink.cpp +++ b/sflphone-common/src/sip/sipvoiplink.cpp @@ -1170,7 +1170,7 @@ SIPVoIPLink::carryingDTMFdigits (const CallID& id, char code) dtmf_body = new char[body_len]; - snprintf (dtmf_body, body_len - 1, "Signal=%c\rDuration=%d\r", code, duration); + snprintf (dtmf_body, body_len - 1, "Signal=%c\r\nDuration=%d\r\n", code, duration); pj_strdup2 (_pool, &methodName, "INFO"); pjsip_method_init_np (&method, &methodName); @@ -3733,7 +3733,7 @@ std::string fetch_header_value (pjsip_msg *msg, std::string field) value = hdr->hvalue.ptr; - if ( (pos=value.find ("")) == std::string::npos) { + if ( (pos=value.find ("\n")) == std::string::npos) { return ""; } -- GitLab From 8dea1678594624a325bb4157bf3ca6b9f3c90963 Mon Sep 17 00:00:00 2001 From: Julien Bonjean <julien@bonjean.info> Date: Thu, 19 Nov 2009 17:12:12 -0500 Subject: [PATCH 015/188] [#1671] Added offline icon for gnome client --- sflphone-client-gnome/pixmaps/Makefile.am | 1 + .../pixmaps/sflphone_offline.svg | 415 ++++++++++++++++++ sflphone-client-gnome/src/actions.c | 2 + sflphone-client-gnome/src/sflphone_const.h | 3 +- sflphone-client-gnome/src/statusicon.c | 7 +- 5 files changed, 425 insertions(+), 3 deletions(-) create mode 100644 sflphone-client-gnome/pixmaps/sflphone_offline.svg diff --git a/sflphone-client-gnome/pixmaps/Makefile.am b/sflphone-client-gnome/pixmaps/Makefile.am index 56a6e20755..8374f0304f 100644 --- a/sflphone-client-gnome/pixmaps/Makefile.am +++ b/sflphone-client-gnome/pixmaps/Makefile.am @@ -26,6 +26,7 @@ buttons_DATA = current.svg \ sflphone.svg \ sflphone_small.svg \ sflphone_notif.svg \ + sflphone_offline.svg \ stock_person.svg \ icon_rec.svg \ rec_call.svg \ diff --git a/sflphone-client-gnome/pixmaps/sflphone_offline.svg b/sflphone-client-gnome/pixmaps/sflphone_offline.svg new file mode 100644 index 0000000000..6cff90be09 --- /dev/null +++ b/sflphone-client-gnome/pixmaps/sflphone_offline.svg @@ -0,0 +1,415 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="120" + height="120" + id="svg5875" + sodipodi:version="0.32" + inkscape:version="0.47pre4 r22446" + version="1.0" + sodipodi:docname="sflphone_offline.svg" + inkscape:output_extension="org.inkscape.output.svg.inkscape"> + <defs + id="defs5877"> + <linearGradient + inkscape:collect="always" + id="linearGradient3803"> + <stop + style="stop-color:#ffffff;stop-opacity:1;" + offset="0" + id="stop3805" /> + <stop + style="stop-color:#ffffff;stop-opacity:0;" + offset="1" + id="stop3807" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + id="linearGradient4684"> + <stop + style="stop-color:#ffffff;stop-opacity:1;" + offset="0" + id="stop4686" /> + <stop + style="stop-color:#ffffff;stop-opacity:0;" + offset="1" + id="stop4688" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + id="linearGradient4669"> + <stop + style="stop-color:#ffffff;stop-opacity:1;" + offset="0" + id="stop4671" /> + <stop + style="stop-color:#ffffff;stop-opacity:0;" + offset="1" + id="stop4673" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + id="linearGradient3859"> + <stop + style="stop-color:#ffffff;stop-opacity:1;" + offset="0" + id="stop3861" /> + <stop + style="stop-color:#ffffff;stop-opacity:0;" + offset="1" + id="stop3863" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + id="linearGradient5850"> + <stop + style="stop-color:#ffffff;stop-opacity:1;" + offset="0" + id="stop5852" /> + <stop + style="stop-color:#ffffff;stop-opacity:0;" + offset="1" + id="stop5854" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient5850" + id="linearGradient5856" + x1="476.3125" + y1="439.0293" + x2="477.3125" + y2="514.42188" + gradientUnits="userSpaceOnUse" /> + <linearGradient + inkscape:collect="always" + id="linearGradient4999"> + <stop + style="stop-color:#ffffff;stop-opacity:1;" + offset="0" + id="stop5001" /> + <stop + style="stop-color:#ffffff;stop-opacity:0;" + offset="1" + id="stop5003" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4999" + id="linearGradient5862" + gradientUnits="userSpaceOnUse" + x1="698.38525" + y1="245.5472" + x2="702.81964" + y2="977.78302" /> + <linearGradient + inkscape:collect="always" + id="linearGradient4991"> + <stop + style="stop-color:#ffffff;stop-opacity:1;" + offset="0" + id="stop4993" /> + <stop + style="stop-color:#ffffff;stop-opacity:0;" + offset="1" + id="stop4995" /> + </linearGradient> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient4991" + id="radialGradient4997" + cx="736.5" + cy="640.93073" + fx="736.5" + fy="640.93073" + r="91.964203" + gradientTransform="matrix(1,0,0,0.8097086,0,99.14184)" + gradientUnits="userSpaceOnUse" /> + <inkscape:perspective + sodipodi:type="inkscape:persp3d" + inkscape:vp_x="0 : 526.18109 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_z="744.09448 : 526.18109 : 1" + inkscape:persp3d-origin="372.04724 : 350.78739 : 1" + id="perspective5883" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3859" + id="linearGradient3873" + x1="352.19498" + y1="451.55289" + x2="106.34038" + y2="658.39594" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-3.8268196,-1.7394634)" /> + <inkscape:perspective + id="perspective2422" + inkscape:persp3d-origin="372.04724 : 350.78739 : 1" + inkscape:vp_z="744.09448 : 526.18109 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 526.18109 : 1" + sodipodi:type="inkscape:persp3d" /> + <inkscape:perspective + id="perspective2437" + inkscape:persp3d-origin="168.5 : 109.33333 : 1" + inkscape:vp_z="337 : 164 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 164 : 1" + sodipodi:type="inkscape:persp3d" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4669" + id="linearGradient4675" + x1="-20.657925" + y1="-244.41351" + x2="184.57913" + y2="789.61469" + gradientUnits="userSpaceOnUse" + spreadMethod="pad" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4684" + id="linearGradient4690" + x1="52.987782" + y1="-84.148399" + x2="127.02813" + y2="99.500687" + gradientUnits="userSpaceOnUse" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4669" + id="linearGradient5149" + gradientUnits="userSpaceOnUse" + spreadMethod="pad" + x1="-20.657925" + y1="-244.41351" + x2="184.57913" + y2="789.61469" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient4991" + id="radialGradient5297" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1,0,0,0.8097086,0,99.14184)" + cx="736.5" + cy="640.93073" + fx="736.5" + fy="640.93073" + r="91.964203" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4999" + id="linearGradient5299" + gradientUnits="userSpaceOnUse" + x1="698.38525" + y1="245.5472" + x2="702.81964" + y2="977.78302" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4684" + id="linearGradient5301" + gradientUnits="userSpaceOnUse" + x1="52.987782" + y1="-84.148399" + x2="127.02813" + y2="99.500687" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4684" + id="linearGradient5308" + gradientUnits="userSpaceOnUse" + x1="52.987782" + y1="-84.148399" + x2="127.02813" + y2="99.500687" + gradientTransform="matrix(0.6453907,0,0,0.6453907,0.8651337,0.4352828)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3803" + id="linearGradient3809" + x1="12.663443" + y1="8.5301828" + x2="41.858654" + y2="57.533279" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1.0054518,0,0,1.0054518,-4.7165106e-3,-0.4345682)" /> + <inkscape:perspective + id="perspective2881" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + </defs> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + gridtolerance="10000" + guidetolerance="10" + objecttolerance="10" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="4.6527672" + inkscape:cx="71.125906" + inkscape:cy="59.641316" + inkscape:document-units="px" + inkscape:current-layer="layer2" + showgrid="false" + inkscape:window-width="1910" + inkscape:window-height="1068" + inkscape:window-x="47" + inkscape:window-y="41" + showguides="true" + inkscape:guide-bbox="true" + inkscape:window-maximized="0" /> + <metadata + id="metadata5880"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title>Icône SFL</dc:title> + <dc:date>2009-04-29</dc:date> + <dc:creator> + <cc:Agent> + <dc:title>Jérôme Oufella</dc:title> + </cc:Agent> + </dc:creator> + <dc:rights> + <cc:Agent> + <dc:title>(c) 2009 Savoir-faire Linux inc.</dc:title> + </cc:Agent> + </dc:rights> + <dc:subject> + <rdf:Bag> + <rdf:li>sfl icon</rdf:li> + </rdf:Bag> + </dc:subject> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Circle" + inkscape:groupmode="layer" + id="layer1" + transform="translate(-182.15973,-428.80763)" + style="display:inline"> + <g + style="display:inline" + id="g5868" + transform="matrix(0.6453907,0,0,0.6453907,-86.103074,148.01517)"> + <path + transform="matrix(0.9959566,0,0,1.2202117,1.6861043,-136.53125)" + d="m 602,544.5 c 0,41.6975 -41.41366,75.5 -92.5,75.5 -51.08634,0 -92.5,-33.8025 -92.5,-75.5 0,-41.6975 41.41366,-75.5 92.5,-75.5 51.08634,0 92.5,33.8025 92.5,75.5 z" + sodipodi:ry="75.5" + sodipodi:rx="92.5" + sodipodi:cy="544.5" + sodipodi:cx="509.5" + id="path4987" + style="fill:#00252b;fill-opacity:1;fill-rule:evenodd" + sodipodi:type="arc" /> + <path + transform="matrix(0.9200853,0,0,1.1406537,-168.51683,-66.406557)" + d="m 827,521 c 0,40.31679 -40.51823,73 -90.5,73 -49.98177,0 -90.5,-32.68321 -90.5,-73 0,-40.31679 40.51823,-73 90.5,-73 49.98177,0 90.5,32.68321 90.5,73 z" + sodipodi:ry="73" + sodipodi:rx="90.5" + sodipodi:cy="521" + sodipodi:cx="736.5" + id="path4989" + style="opacity:0.83064515;fill:url(#radialGradient5297);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient5299);stroke-width:2.92839932;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + sodipodi:type="arc" /> + </g> + </g> + <g + inkscape:groupmode="layer" + id="layer3" + inkscape:label="Bg logo" + style="display:inline"> + <path + style="opacity:1;fill:#006f82;fill-opacity:0;fill-rule:evenodd;stroke:#006f82;stroke-width:1.04566979;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline" + d="M 10.55114,62.033695 L 10.545872,59.631821 L 11.329656,63.53366 L 11.321088,59.630621 L 12.621458,63.431585 L 12.611584,58.928074 L 13.657722,64.630914 L 13.897019,55.923735 L 14.696183,66.831029 L 15.959008,53.518653 L 16.252311,69.430662 L 17.258279,56.819227 L 18.052818,65.624884 L 18.551844,57.51777 L 19.347918,67.023975 L 19.833546,52.812112 L 21.424823,71.42421 L 20.85641,47.906685 L 23.760575,76.024188 L 22.924102,48.103639 L 25.312097,76.522171 L 24.213925,47.100857 L 25.814204,69.816155 L 26.299177,55.304046 L 27.10579,69.613998 L 28.100546,51.898595 L 28.133486,66.910282 L 29.383802,47.893475 L 29.17479,70.411424 L 30.42269,50.293743 L 30.995926,76.012977 L 32.479618,45.586876 L 32.810259,78.51213 L 34.022583,42.181821 L 34.623699,80.610954 L 35.567529,39.677469 L 36.17744,82.1097 L 36.856708,38.374457 L 38.250165,84.608465 L 38.159277,43.176196 L 39.275226,80.703832 L 39.72003,47.877458 L 40.557601,76.298395 L 41.022589,52.6792 L 42.361163,73.89372 L 42.575221,53.677574 L 43.394126,73.59189 L 44.128072,54.776031 L 45.197477,71.087148 L 44.64642,55.475777 L 46.746157,70.284115 L 46.201462,57.575013 L 47.766387,64.177753 L 48.157374,33.559644 L 49.574786,63.974798 L 49.737044,29.057192 L 50.608848,64.173352 L 52.072146,33.362224 L 52.237957,82.20545 L 53.618404,31.455993 L 54.269604,83.80121 L 54.704307,28.546169 L 56.569731,89.992521 L 56.233651,27.84325 L 58.106058,92.475088 L 58.237615,25.734393 L 59.462018,94.871346 L 59.308802,25.029251 L 60.997751,97.080654 L 60.859237,25.026847 L 63.348005,99.381156 L 63.493128,47.740542 L 64.432585,95.86912 L 64.276032,51.242071 L 66.685102,98.180342 L 65.570911,52.541084 L 66.563781,98.275324 L 64.993727,25.020443 L 69.064999,96.16276 L 66.029984,26.219775 L 70.373503,94.756118 L 68.436272,27.318084 L 72.677618,93.850086 L 72.234352,27.4111 C 72.234352,27.4111 73.940422,98.363981 74.456142,97.862784 C 74.971847,97.361592 75.595153,28.106441 75.595153,28.106441 L 75.739811,94.046666 L 76.890923,29.805765 L 77.049624,93.24225 L 78.18426,30.404231 L 78.338812,91.945712 L 80.000344,33.704002 L 80.38199,89.886658 L 82.071758,35.602278 L 82.1985,84.464362 L 83.409266,38.505999 L 84.494194,70.81025 L 85.482229,41.108345 L 86.300623,69.703651 L 88.312822,44.609637 L 89.401506,78.617548 L 89.890557,48.126952 L 91.245045,76.60551 L 91.663323,49.515327 L 93.046215,73.100561 L 93.514555,51.012458 L 95.564594,69.900023 L 95.350428,54.413452 L 97.176303,71.094351 L 97.42119,56.012671 L 100.17281,68.095581 L 100.26537,56.803022 L 102.33474,68.598489 L 102.41415,58.300276 L 104.15368,64.27997 L 104.55185,54.777789 L 105.28904,66.085499 L 105.9731,60.189794 C 105.9731,60.189794 107.07326,63.772713 107.07216,63.272322 C 107.07105,62.771937 108.5787,61.082943 108.31828,60.182636 C 108.05791,59.282342 109.41561,62.475103 109.41561,62.475103" + id="path4922" + sodipodi:nodetypes="ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccscccccccccccccccccccccccccccccccccccc" /> + </g> + <g + inkscape:groupmode="layer" + id="layer2" + inkscape:label="Handset" + style="display:inline"> + <path + style="opacity:0.07000002;fill:url(#linearGradient5308);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:12.29699993;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline" + d="M 59.151985,7.5345809 C 30.967536,8.249433 8.3274641,31.354675 8.3274641,59.710388 C 8.3274641,68.222065 10.375495,76.246983 13.994802,83.347823 C 13.107834,79.536662 12.643515,75.568677 12.643515,71.488769 C 12.643515,42.682964 36.013519,19.292793 64.819322,19.292793 C 85.110516,19.292792 102.69706,30.904841 111.32779,47.831165 C 105.9454,24.743656 85.222311,7.5345809 60.503272,7.5345809 C 60.05318,7.5345809 59.599356,7.5232342 59.151985,7.5345809 z" + id="path4679" /> + <path + id="path3760" + d="M 88.906874,94.063359 C 88.559935,94.977556 84.966023,98.376 83.289215,99.375481 L 81.43556,100.48037 L 73.808785,90.541207 L 66.182003,80.602053 L 67.494791,79.241241 C 68.779544,77.909476 72.634516,75.322497 73.887671,74.951128 C 74.431745,74.789888 75.528139,76.078361 81.782999,84.229651 C 85.777928,89.435809 88.983679,93.860981 88.906874,94.063359 z M 50.73329,44.477271 C 50.446627,45.232636 45.91138,49.09897 44.433331,49.848034 L 43.090474,50.528569 L 35.573545,40.555914 L 28.056608,30.583254 L 30.64475,28.448397 C 32.068233,27.274223 33.934924,26.023758 34.792949,25.669578 L 36.352996,25.025619 L 43.633459,34.513458 C 48.514886,40.874896 50.854403,44.158138 50.73329,44.477271 z M 80.086522,101.40574 C 80.038294,101.53261 79.197946,102.04305 78.219084,102.54005 C 70.526609,106.44583 58.163118,101.84815 46.523718,90.753346 C 42.403963,86.826338 33.905571,76.306559 30.548319,70.978095 C 24.069511,60.695264 21.022718,52.062253 21.112522,44.242002 C 21.168568,39.361513 22.770354,35.243539 25.642678,32.595536 L 26.627564,31.687563 L 34.18264,41.386253 L 41.737722,51.084944 L 41.126672,52.143343 C 40.282652,53.605243 40.435321,55.522605 41.628037,58.4399 C 43.124949,62.101227 55.001116,77.570343 58.187294,80.008903 C 60.691108,81.925211 62.231437,82.484651 64.082727,82.150099 L 65.393673,81.913192 L 72.783941,91.544137 C 76.848589,96.841159 80.134755,101.27887 80.086522,101.40574 z" + style="opacity:0.32000002;fill:#000000;fill-opacity:1" /> + <path + style="fill:#dfdfdf;fill-opacity:1" + d="M 92.518066,90.452167 C 92.171127,91.366364 88.577215,94.764808 86.900407,95.764289 L 85.046752,96.869181 L 77.419976,86.930015 L 69.793194,76.990861 L 71.105983,75.63005 C 72.390736,74.298285 76.245707,71.711305 77.498862,71.339937 C 78.042936,71.178697 79.13933,72.46717 85.394191,80.61846 C 89.389119,85.824618 92.59487,90.24979 92.518066,90.452167 z M 54.344481,40.86608 C 54.057819,41.621444 49.522571,45.487778 48.044523,46.236842 L 46.701666,46.917377 L 39.184735,36.944723 L 31.6678,26.972063 L 34.255941,24.837205 C 35.679425,23.663032 37.546115,22.412566 38.404141,22.058387 L 39.964188,21.414427 L 47.24465,30.902267 C 52.126078,37.263706 54.465594,40.546946 54.344481,40.86608 z M 83.697713,97.79455 C 83.649486,97.921417 82.809137,98.431852 81.830276,98.928861 C 74.137801,102.83464 61.774308,98.236957 50.134909,87.142154 C 46.015154,83.215146 37.516762,72.695367 34.159511,67.366904 C 27.680702,57.084073 24.63391,48.451062 24.723714,40.63081 C 24.77976,35.750321 26.381546,31.632348 29.253869,28.984346 L 30.238755,28.076371 L 37.793832,37.775063 L 45.348913,47.473754 L 44.737863,48.532152 C 43.893844,49.994052 44.046513,51.911414 45.239229,54.828709 C 46.73614,58.490035 58.612307,73.959152 61.798485,76.397711 C 64.3023,78.31402 65.842629,78.87346 67.693918,78.538907 L 69.004865,78.302 L 76.395132,87.932945 C 80.459781,93.229968 83.745947,97.667682 83.697713,97.79455 z" + id="path3218" /> + <g + transform="matrix(0.6018652,0,0,0.6018652,-106.46243,-252.67476)" + id="g3787" + style="fill:#ffffff;fill-opacity:0"> + <path + id="path3789" + d="M 324.6064,576.10592 C 324.02996,577.62486 318.05867,583.27138 315.27265,584.93202 L 312.1928,586.7678 L 299.5209,570.25386 L 286.84899,553.73994 L 289.03019,551.47895 C 291.16481,549.26622 297.56985,544.96795 299.65197,544.35092 C 300.55595,544.08302 302.37761,546.22382 312.77007,559.7672 C 319.40765,568.41724 324.73401,575.76967 324.6064,576.10592 z M 261.18093,493.71856 C 260.70464,494.9736 253.16932,501.39752 250.71354,502.64209 L 248.48238,503.7728 L 235.99299,487.20322 L 223.50359,470.63363 L 227.80379,467.08656 C 230.16891,465.13567 233.27042,463.05802 234.69603,462.46955 L 237.28805,461.39961 L 249.38455,477.16367 C 257.49505,487.73321 261.38216,493.18832 261.18093,493.71856 z M 309.95137,588.3053 C 309.87124,588.51609 308.475,589.36418 306.84862,590.18996 C 294.06756,596.67941 273.5256,589.04036 254.18672,570.60633 C 247.34174,564.0816 233.22165,546.60297 227.64357,537.74972 C 216.87902,520.66478 211.81677,506.32102 211.96598,493.32766 C 212.0591,485.21872 214.72047,478.3767 219.49284,473.97704 L 221.12923,472.46844 L 233.682,488.58283 L 246.23478,504.69722 L 245.21952,506.45575 C 243.81718,508.8847 244.07084,512.0704 246.05254,516.91749 C 248.53966,523.00079 268.27193,548.70275 273.56577,552.75442 C 277.72586,555.93837 280.28512,556.86788 283.36104,556.31202 L 285.53918,555.9184 L 297.81812,571.92023 C 304.57154,580.72124 310.03151,588.09451 309.95137,588.3053 z" + style="opacity:0.32000002;fill:#ffffff;fill-opacity:0" /> + <path + style="fill:#ffffff;fill-opacity:0" + d="M 330.6064,570.10592 C 330.02996,571.62486 324.05867,577.27138 321.27265,578.93202 L 318.1928,580.7678 L 305.5209,564.25386 L 292.84899,547.73994 L 295.03019,545.47895 C 297.16481,543.26622 303.56985,538.96795 305.65197,538.35092 C 306.55595,538.08302 308.37761,540.22382 318.77007,553.7672 C 325.40765,562.41724 330.73401,569.76967 330.6064,570.10592 z M 267.18093,487.71856 C 266.70464,488.9736 259.16932,495.39752 256.71354,496.64209 L 254.48238,497.7728 L 241.99299,481.20322 L 229.50359,464.63363 L 233.80379,461.08656 C 236.16891,459.13567 239.27042,457.05802 240.69603,456.46955 L 243.28805,455.39961 L 255.38455,471.16367 C 263.49505,481.73321 267.38216,487.18832 267.18093,487.71856 z M 315.95137,582.3053 C 315.87124,582.51609 314.475,583.36418 312.84862,584.18996 C 300.06756,590.67941 279.5256,583.04036 260.18672,564.60633 C 253.34174,558.0816 239.22165,540.60297 233.64357,531.74972 C 222.87902,514.66478 217.81677,500.32102 217.96598,487.32766 C 218.0591,479.21872 220.72047,472.3767 225.49284,467.97704 L 227.12923,466.46844 L 239.682,482.58283 L 252.23478,498.69722 L 251.21952,500.45575 C 249.81718,502.8847 250.07084,506.0704 252.05254,510.91749 C 254.53966,517.00079 274.27193,542.70275 279.56577,546.75442 C 283.72586,549.93837 286.28512,550.86788 289.36104,550.31202 L 291.53918,549.9184 L 303.81812,565.92023 C 310.57154,574.72124 316.03151,582.09451 315.95137,582.3053 z" + id="path3791" /> + </g> + <path + style="fill:url(#linearGradient3809);fill-opacity:1;stroke:none" + d="M 39.961991,21.402587 L 38.390972,22.062415 C 37.532947,22.416594 35.666967,23.653234 34.243484,24.827407 L 31.667014,26.963992 L 39.176482,36.955669 L 43.166868,42.23429 C 44.833493,39.007648 46.844812,36.037923 49.105318,33.342326 C 48.501731,32.545758 47.962788,31.818462 47.251516,30.891538 L 39.961991,21.402587 z M 30.253097,28.063705 L 29.247645,28.974895 C 26.375322,31.622897 24.779157,35.751365 24.723113,40.631852 C 24.633309,48.452104 27.670415,57.087755 34.149223,67.370584 C 35.036506,68.778836 36.301396,70.544757 37.731145,72.460684 C 37.518951,70.51226 37.385521,68.535071 37.385521,66.522234 C 37.385521,58.29228 39.192461,50.526372 42.412779,43.742468 L 37.793985,37.772598 L 30.253097,28.063705 z" + id="path3798" /> + <g + id="g3398" + transform="matrix(7.5387238,0,0,7.5387238,1.1454138,0.16950363)"> + <rect + ry="0.82081318" + rx="0.82081318" + inkscape:r_cy="true" + inkscape:r_cx="true" + y="8.6409912" + x="8.1562767" + height="7.0576959" + width="7.4291534" + id="rect1686" + style="color:#000000;fill:#a40000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.37145764;marker:none;visibility:visible;display:inline;overflow:visible" /> + <g + inkscape:r_cy="true" + inkscape:r_cx="true" + transform="matrix(0.4225522,0,0,0.4225522,6.497738,-3.4645944)" + id="g2254"> + <path + style="color:#000000;fill:none;stroke:#ffffff;stroke-width:2.56729817;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible" + d="M 8,32 18,42" + id="path1377" + inkscape:r_cx="true" + inkscape:r_cy="true" /> + <path + inkscape:r_cy="true" + inkscape:r_cx="true" + id="path2252" + d="M 18,32 8,42" + style="color:#000000;fill:none;stroke:#ffffff;stroke-width:2.56729817;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible" /> + </g> + </g> + </g> +</svg> diff --git a/sflphone-client-gnome/src/actions.c b/sflphone-client-gnome/src/actions.c index a2506dc629..1775d54761 100644 --- a/sflphone-client-gnome/src/actions.c +++ b/sflphone-client-gnome/src/actions.c @@ -94,6 +94,7 @@ status_bar_display_account () acc = account_list_get_current (); if(acc){ + status_tray_icon_online(TRUE); msg = g_markup_printf_escaped("%s %s (%s)" , _("Using account"), (gchar*)g_hash_table_lookup( acc->properties , ACCOUNT_ALIAS), @@ -101,6 +102,7 @@ status_bar_display_account () } else { + status_tray_icon_online(FALSE); msg = g_markup_printf_escaped(_("No registered accounts")); } statusbar_push_message( msg , __MSG_ACCOUNT_DEFAULT); diff --git a/sflphone-client-gnome/src/sflphone_const.h b/sflphone-client-gnome/src/sflphone_const.h index d76373fd71..b63a3e17e1 100644 --- a/sflphone-client-gnome/src/sflphone_const.h +++ b/sflphone-client-gnome/src/sflphone_const.h @@ -29,7 +29,8 @@ */ #define LOGO ICONS_DIR "/sflphone.svg" -#define LOGO_NOTIF ICONS_DIR "/sflphone_notif.svg" +#define LOGO_NOTIF ICONS_DIR "/sflphone_notif.svg" +#define LOGO_OFFLINE ICONS_DIR "/sflphone_offline.svg" #define LOGO_SMALL ICONS_DIR "/sflphone_small.svg" #define CURRENT_CALLS "current_calls" diff --git a/sflphone-client-gnome/src/statusicon.c b/sflphone-client-gnome/src/statusicon.c index 99b8dcc2c6..47e9d4a855 100644 --- a/sflphone-client-gnome/src/statusicon.c +++ b/sflphone-client-gnome/src/statusicon.c @@ -138,9 +138,12 @@ void status_tray_icon_blink (gboolean active) { // Set a different icon to notify of an event active ? gtk_status_icon_set_from_file (status, LOGO_NOTIF) : gtk_status_icon_set_from_file (status, LOGO); - // Do not blink anymore ... - // gtk_status_icon_set_blinking (status, active); +} +void status_tray_icon_online (gboolean online) +{ + // Set a different icon to notify of an event + online ? gtk_status_icon_set_from_file (status, LOGO) : gtk_status_icon_set_from_file (status, LOGO_OFFLINE); } GtkStatusIcon* -- GitLab From 0432f462e3f3ed05a2b2f1bb1224da65d6100faf Mon Sep 17 00:00:00 2001 From: Julien Bonjean <julien@bonjean.info> Date: Fri, 20 Nov 2009 10:07:36 -0500 Subject: [PATCH 016/188] [#2181] Updated spec file --- tools/build-system/osc/sflphone-common.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/build-system/osc/sflphone-common.spec b/tools/build-system/osc/sflphone-common.spec index 9fccf3ef7d..0bc1a2b573 100644 --- a/tools/build-system/osc/sflphone-common.spec +++ b/tools/build-system/osc/sflphone-common.spec @@ -57,7 +57,6 @@ BuildRequires: gsm-devel Requires: libsamplerate Requires: commoncpp2 Requires: dbus-1 -Requires: dbus-1-x11 %if %{defined suse_version} Requires: libgsm1 @@ -96,6 +95,7 @@ Authors: %prep %setup -q +%patch0 -p1 %build cd libs/pjproject -- GitLab From 01e8bda4bdb5058640bf82493aaa1fc5f6a25ecf Mon Sep 17 00:00:00 2001 From: Julien Bonjean <julien@bonjean.info> Date: Fri, 20 Nov 2009 10:41:12 -0500 Subject: [PATCH 017/188] [#2181] Fixed changelog files --- .../sflphone-client-gnome/debian/changelog | 52 +++++++++---------- .../sflphone-common/debian/changelog | 52 +++++++++---------- 2 files changed, 52 insertions(+), 52 deletions(-) diff --git a/tools/build-system/launchpad/sflphone-client-gnome/debian/changelog b/tools/build-system/launchpad/sflphone-client-gnome/debian/changelog index c6bec4586d..0fc72e2966 100644 --- a/tools/build-system/launchpad/sflphone-client-gnome/debian/changelog +++ b/tools/build-system/launchpad/sflphone-client-gnome/debian/changelog @@ -1,6 +1,6 @@ -sflphone-client-gnome (0.9.7~beta~ppa1~karmic) karmic; urgency=low +sflphone-client-gnome (0.9.7~beta~ppa1~SYSTEM) SYSTEM; urgency=low - ** 0.9.7~beta~ppa1~karmic ** + ** 0.9.7~beta~ppa1~SYSTEM ** * [#1933] Cleanup debug * [#1933] Clean up debug @@ -567,7 +567,7 @@ sflphone-client-gnome (0.9.7~beta~ppa1~karmic) karmic; urgency=low -- Julien Bonjean <julien.bonjean@savoirfairelinux.com> Fri, 06 Nov 2009 11:20:01 -0500 -sflphone-client-gnome (0.9.6-SYSVER) karmic; urgency=low +sflphone-client-gnome (0.9.6-SYSTEM) SYSTEM; urgency=low ** 0.9.6 ** @@ -634,7 +634,7 @@ sflphone-client-gnome (0.9.6-SYSVER) karmic; urgency=low -- SFLphone Automatic Build System <team@sflphone.org> Mon, 27 Jul 2009 09:53:19 -0400 -sflphone-client-gnome (0.9.6~rc2-SYSVER) karmic; urgency=low +sflphone-client-gnome (0.9.6~rc2-SYSTEM) SYSTEM; urgency=low ** 0.9.6~rc2 ** @@ -689,7 +689,7 @@ sflphone-client-gnome (0.9.6~rc2-SYSVER) karmic; urgency=low -- SFLphone Automatic Build System <team@sflphone.org> Fri, 17 Jul 2009 19:12:58 -0400 -sflphone-client-gnome (0.9.6~rc1-SYSVER) karmic; urgency=low +sflphone-client-gnome (0.9.6~rc1-SYSTEM) SYSTEM; urgency=low ** 0.9.6~rc1 ** @@ -797,7 +797,7 @@ sflphone-client-gnome (0.9.6~rc1-SYSVER) karmic; urgency=low -- SFLphone Automatic Build System <team@sflphone.org> Fri, 10 Jul 2009 15:50:26 -0400 -sflphone-client-gnome (0.9.6~beta-SYSVER) karmic; urgency=low +sflphone-client-gnome (0.9.6~beta-SYSTEM) SYSTEM; urgency=low ** 0.9.6~beta ** @@ -1092,7 +1092,7 @@ sflphone-client-gnome (0.9.6~beta-SYSVER) karmic; urgency=low -- SFLphone Automatic Build System <team@sflphone.org> Tue, 23 Jun 2009 11:13:42 -0400 -sflphone-client-gnome (0.9.5-SYSVER) karmic; urgency=low +sflphone-client-gnome (0.9.5-SYSTEM) SYSTEM; urgency=low ** 0.9.5 release ** @@ -1123,7 +1123,7 @@ sflphone-client-gnome (0.9.5-SYSVER) karmic; urgency=low -- SFLphone Automatic Build System <team@sflphone.org> Mon, 25 May 2009 11:34:48 -0400 -sflphone-client-gnome (0.9.5-SYSVER~rc2) karmic; urgency=low +sflphone-client-gnome (0.9.5-SYSTEM~rc2) SYSTEM; urgency=low ** 0.9.5 rc2 ** @@ -1177,7 +1177,7 @@ sflphone-client-gnome (0.9.5-SYSVER~rc2) karmic; urgency=low -- SFLphone Automatic Build System <team@sflphone.org> Tue, 19 May 2009 12:08:18 -0400 -sflphone-client-gnome (0.9.5-0ubuntu1~rc1) karmic; urgency=low +sflphone-client-gnome (0.9.5-0ubuntu1~rc1) SYSTEM; urgency=low [ SFLphone Project ] * [#1262] Updated changelogs for version 0.9.5-0ubuntu1 Snapshot 2009- @@ -1206,7 +1206,7 @@ sflphone-client-gnome (0.9.5-0ubuntu1~rc1) karmic; urgency=low -- Sflphone Project <sflphone@mtl.savoirfairelinux.net> Tue, 05 May 2009 19:16:13 -0400 -sflphone-client-gnome (0.9.5-0ubuntu1~beta) karmic; urgency=low +sflphone-client-gnome (0.9.5-0ubuntu1~beta) SYSTEM; urgency=low [ Julien Bonjean ] * Updated Eclipse stuff @@ -1428,7 +1428,7 @@ sflphone-client-gnome (0.9.5-0ubuntu1~beta) karmic; urgency=low -- Sflphone Project <sflphone@mtl.savoirfairelinux.net> Mon, 27 Apr 2009 17:00:03 -0400 -sflphone-client-gnome (0.9.4-0ubuntu2) karmic; urgency=low +sflphone-client-gnome (0.9.4-0ubuntu2) SYSTEM; urgency=low [ Alexandre Savard ] * Restore speex and GSM detection @@ -1438,7 +1438,7 @@ sflphone-client-gnome (0.9.4-0ubuntu2) karmic; urgency=low -- Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> Wed, 8 Apr 2009 11:29:15 -0500 -sflphone (0.9.4-0ubuntu1) karmic; urgency=low +sflphone (0.9.4-0ubuntu1) SYSTEM; urgency=low [ Emmanuel Milou ] * Integrate DBus-c++ and libiax2 in the main build system @@ -1463,7 +1463,7 @@ sflphone (0.9.4-0ubuntu1) karmic; urgency=low -- Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> Fri, 3 Apr 2009 18:29:15 -0500 -sflphone (0.9.4-rc1) karmic; urgency=low +sflphone (0.9.4-rc1) SYSTEM; urgency=low [ Emmanuel Milou ] * Fix bug while trying to hold/unhold several simultaneous call @@ -1477,7 +1477,7 @@ sflphone (0.9.4-rc1) karmic; urgency=low -- Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> Fri, 27 Mar 2009 18:29:15 -0500 -sflphone (0.9.4-0beta1) karmic; urgency=low +sflphone (0.9.4-0beta1) SYSTEM; urgency=low [ Alexandre Savard ] * Display codec used during conversation on the GUI @@ -1493,7 +1493,7 @@ sflphone (0.9.4-0beta1) karmic; urgency=low -- Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> Fri, 20 Mar 2009 18:29:15 -0500 -sflphone (0.9.3-0ubuntu3) karmic; urgency=low +sflphone (0.9.3-0ubuntu3) SYSTEM; urgency=low [ Alexandre Savard ] * Both playback and record streams in PA_STREAM_CORKED (pulseaudio) @@ -1518,7 +1518,7 @@ sflphone (0.9.3-0ubuntu3) karmic; urgency=low -- Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> Sat, 14 Feb 2009 13:29:15 -0500 -sflphone (0.9.3-0ubuntu2) karmic; urgency=low +sflphone (0.9.3-0ubuntu2) SYSTEM; urgency=low [ Emmanuel Milou ] * Add compilation note in README @@ -1587,7 +1587,7 @@ sflphone (0.9.3-0ubuntu2) karmic; urgency=low -- Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> Sat, 14 Feb 2009 13:29:15 -0500 -sflphone (0.9.3-0ubuntu1) karmic; urgency=low +sflphone (0.9.3-0ubuntu1) SYSTEM; urgency=low * Remove debug * Join thread before leaving @@ -1600,7 +1600,7 @@ sflphone (0.9.3-0ubuntu1) karmic; urgency=low -- Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> Fri, 06 Feb 2009 19:17:32 -0500 -sflphone (0.9.2-2ubuntu9) karmic; urgency=low +sflphone (0.9.2-2ubuntu9) SYSTEM; urgency=low [ Alexandre Savard ] * Speex audio codec preprocessing initialization @@ -1628,7 +1628,7 @@ sflphone (0.9.2-2ubuntu9) karmic; urgency=low -- Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> Thu, 05 Feb 2009 18:27:53 -0500 -sflphone (0.9.2-2ubuntu8) karmic; urgency=low +sflphone (0.9.2-2ubuntu8) SYSTEM; urgency=low [ Emmanuel Milou ] * Update changelogs @@ -1672,7 +1672,7 @@ sflphone (0.9.2-2ubuntu8) karmic; urgency=low -- Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> Wed, 04 Feb 2009 14:00:30 -0500 -sflphone (0.9.2-2ubuntu7) karmic; urgency=low +sflphone (0.9.2-2ubuntu7) SYSTEM; urgency=low [ Emmanuel Milou ] * Update changelog to 0.9.2-6 @@ -1694,7 +1694,7 @@ sflphone (0.9.2-2ubuntu7) karmic; urgency=low -- Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> Fri, 23 Jan 2009 17:48:13 -0500 -sflphone (0.9.2-2ubuntu6) karmic; urgency=low +sflphone (0.9.2-2ubuntu6) SYSTEM; urgency=low [ Emmanuel Milou ] * Migrate STUN configuration to the main config window @@ -1728,7 +1728,7 @@ sflphone (0.9.2-2ubuntu6) karmic; urgency=low -- Emmanuel Milou <manu@sulfur.inside.savoirfairelinux.net> Fri, 16 Jan 2009 18:19:05 -0500 -sflphone (0.9.2-2ubuntu5) karmic; urgency=low +sflphone (0.9.2-2ubuntu5) SYSTEM; urgency=low * Fix memory leak in the pulseaudio callback * Update debian package generation script @@ -1744,7 +1744,7 @@ sflphone (0.9.2-2ubuntu5) karmic; urgency=low -- Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> Wed, 14 Jan 2009 21:17:20 -0500 -sflphone (0.9.2-2ubuntu4) karmic; urgency=low +sflphone (0.9.2-2ubuntu4) SYSTEM; urgency=low [ Emmanuel Milou ] * add german translation @@ -1754,7 +1754,7 @@ sflphone (0.9.2-2ubuntu4) karmic; urgency=low -- Yun Liu <yun.liu@savoirfairelinux.com> Thu, 08 Jan 2009 13:08:51 -0500 -sflphone (0.9.2-2ubuntu3) karmic; urgency=low +sflphone (0.9.2-2ubuntu3) SYSTEM; urgency=low [ Emmanuel Milou ] * The main thread synchronizes the ringtone thread @@ -1766,13 +1766,13 @@ sflphone (0.9.2-2ubuntu3) karmic; urgency=low -- Yun Liu <yun.liu@savoirfairelinux.com> Tue, 06 Jan 2009 16:18:38 -0500 -sflphone (0.9.2-2ubuntu2) karmic; urgency=low +sflphone (0.9.2-2ubuntu2) SYSTEM; urgency=low * Fix bug ticket #129 -- Yun Liu <yun.liu@savoirfairelinux.com> Wed, 5 Jan 2009 15:54:53 -0500 -sflphone (0.9.2-2ubuntu1) karmic; urgency=low +sflphone (0.9.2-2ubuntu1) SYSTEM; urgency=low * Migrate from eXosip library to pjsip * Add multiple SIP accounts support diff --git a/tools/build-system/launchpad/sflphone-common/debian/changelog b/tools/build-system/launchpad/sflphone-common/debian/changelog index 98e662737c..1263d2f8a2 100644 --- a/tools/build-system/launchpad/sflphone-common/debian/changelog +++ b/tools/build-system/launchpad/sflphone-common/debian/changelog @@ -1,6 +1,6 @@ -sflphone-common (0.9.7~beta~ppa1~karmic) karmic; urgency=low +sflphone-common (0.9.7~beta~ppa1~SYSTEM) SYSTEM; urgency=low - ** 0.9.7~beta~ppa1~karmic ** + ** 0.9.7~beta~ppa1~SYSTEM ** * [#1933] Cleanup debug * [#1933] Clean up debug @@ -567,7 +567,7 @@ sflphone-common (0.9.7~beta~ppa1~karmic) karmic; urgency=low -- Julien Bonjean <julien.bonjean@savoirfairelinux.com> Fri, 06 Nov 2009 11:23:15 -0500 -sflphone-common (0.9.6-SYSVER) karmic; urgency=low +sflphone-common (0.9.6-SYSTEM) SYSTEM; urgency=low ** 0.9.6 ** @@ -634,7 +634,7 @@ sflphone-common (0.9.6-SYSVER) karmic; urgency=low -- SFLphone Automatic Build System <team@sflphone.org> Mon, 27 Jul 2009 09:53:00 -0400 -sflphone-common (0.9.6~rc2-SYSVER) karmic; urgency=low +sflphone-common (0.9.6~rc2-SYSTEM) SYSTEM; urgency=low ** 0.9.6~rc2 ** @@ -689,7 +689,7 @@ sflphone-common (0.9.6~rc2-SYSVER) karmic; urgency=low -- SFLphone Automatic Build System <team@sflphone.org> Fri, 17 Jul 2009 19:12:44 -0400 -sflphone-common (0.9.6~rc1-SYSVER) karmic; urgency=low +sflphone-common (0.9.6~rc1-SYSTEM) SYSTEM; urgency=low ** 0.9.6~rc1 ** @@ -797,7 +797,7 @@ sflphone-common (0.9.6~rc1-SYSVER) karmic; urgency=low -- SFLphone Automatic Build System <team@sflphone.org> Fri, 10 Jul 2009 15:49:56 -0400 -sflphone-common (0.9.6~beta-SYSVER) karmic; urgency=low +sflphone-common (0.9.6~beta-SYSTEM) SYSTEM; urgency=low ** 0.9.6~beta ** @@ -1092,7 +1092,7 @@ sflphone-common (0.9.6~beta-SYSVER) karmic; urgency=low -- SFLphone Automatic Build System <team@sflphone.org> Tue, 23 Jun 2009 11:12:06 -0400 -sflphone-common (0.9.5-SYSVER) karmic; urgency=low +sflphone-common (0.9.5-SYSTEM) SYSTEM; urgency=low ** 0.9.5 release ** @@ -1123,7 +1123,7 @@ sflphone-common (0.9.5-SYSVER) karmic; urgency=low -- SFLphone Automatic Build System <team@sflphone.org> Mon, 25 May 2009 11:34:40 -0400 -sflphone-common (0.9.5-SYSVER~rc2) karmic; urgency=low +sflphone-common (0.9.5-SYSTEM~rc2) SYSTEM; urgency=low ** 0.9.5 rc2 ** @@ -1177,7 +1177,7 @@ sflphone-common (0.9.5-SYSVER~rc2) karmic; urgency=low -- SFLphone Automatic Build System <team@sflphone.org> Tue, 19 May 2009 12:08:03 -0400 -sflphone-common (0.9.5-0ubuntu1~rc1) karmic; urgency=low +sflphone-common (0.9.5-0ubuntu1~rc1) SYSTEM; urgency=low [ SFLphone Project ] * [#1262] Updated changelogs for version 0.9.5-0ubuntu1 Snapshot 2009- @@ -1206,7 +1206,7 @@ sflphone-common (0.9.5-0ubuntu1~rc1) karmic; urgency=low -- Sflphone Project <sflphone@mtl.savoirfairelinux.net> Tue, 05 May 2009 19:16:09 -0400 -sflphone-common (0.9.5-0ubuntu1~beta) karmic; urgency=low +sflphone-common (0.9.5-0ubuntu1~beta) SYSTEM; urgency=low [ Julien Bonjean ] * Updated Eclipse stuff @@ -1428,7 +1428,7 @@ sflphone-common (0.9.5-0ubuntu1~beta) karmic; urgency=low -- Sflphone Project <sflphone@mtl.savoirfairelinux.net> Mon, 27 Apr 2009 16:57:00 -0400 -sflphone-common (0.9.4-0ubuntu2) karmic; urgency=low +sflphone-common (0.9.4-0ubuntu2) SYSTEM; urgency=low [ Alexandre Savard ] * Restore speex and GSM detection @@ -1438,7 +1438,7 @@ sflphone-common (0.9.4-0ubuntu2) karmic; urgency=low -- Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> Wed, 8 Apr 2009 11:29:15 -0500 -sflphone (0.9.4-0ubuntu1) karmic; urgency=low +sflphone (0.9.4-0ubuntu1) SYSTEM; urgency=low [ Emmanuel Milou ] * Integrate DBus-c++ and libiax2 in the main build system @@ -1463,7 +1463,7 @@ sflphone (0.9.4-0ubuntu1) karmic; urgency=low -- Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> Fri, 3 Apr 2009 18:29:15 -0500 -sflphone (0.9.4-rc1) karmic; urgency=low +sflphone (0.9.4-rc1) SYSTEM; urgency=low [ Emmanuel Milou ] * Fix bug while trying to hold/unhold several simultaneous call @@ -1477,7 +1477,7 @@ sflphone (0.9.4-rc1) karmic; urgency=low -- Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> Fri, 27 Mar 2009 18:29:15 -0500 -sflphone (0.9.4-0beta1) karmic; urgency=low +sflphone (0.9.4-0beta1) SYSTEM; urgency=low [ Alexandre Savard ] * Display codec used during conversation on the GUI @@ -1493,7 +1493,7 @@ sflphone (0.9.4-0beta1) karmic; urgency=low -- Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> Fri, 20 Mar 2009 18:29:15 -0500 -sflphone (0.9.3-0ubuntu3) karmic; urgency=low +sflphone (0.9.3-0ubuntu3) SYSTEM; urgency=low [ Alexandre Savard ] * Both playback and record streams in PA_STREAM_CORKED (pulseaudio) @@ -1518,7 +1518,7 @@ sflphone (0.9.3-0ubuntu3) karmic; urgency=low -- Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> Sat, 14 Feb 2009 13:29:15 -0500 -sflphone (0.9.3-0ubuntu2) karmic; urgency=low +sflphone (0.9.3-0ubuntu2) SYSTEM; urgency=low [ Emmanuel Milou ] * Add compilation note in README @@ -1587,7 +1587,7 @@ sflphone (0.9.3-0ubuntu2) karmic; urgency=low -- Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> Sat, 14 Feb 2009 13:29:15 -0500 -sflphone (0.9.3-0ubuntu1) karmic; urgency=low +sflphone (0.9.3-0ubuntu1) SYSTEM; urgency=low * Remove debug * Join thread before leaving @@ -1600,7 +1600,7 @@ sflphone (0.9.3-0ubuntu1) karmic; urgency=low -- Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> Fri, 06 Feb 2009 19:17:32 -0500 -sflphone (0.9.2-2ubuntu9) karmic; urgency=low +sflphone (0.9.2-2ubuntu9) SYSTEM; urgency=low [ Alexandre Savard ] * Speex audio codec preprocessing initialization @@ -1628,7 +1628,7 @@ sflphone (0.9.2-2ubuntu9) karmic; urgency=low -- Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> Thu, 05 Feb 2009 18:27:53 -0500 -sflphone (0.9.2-2ubuntu8) karmic; urgency=low +sflphone (0.9.2-2ubuntu8) SYSTEM; urgency=low [ Emmanuel Milou ] * Update changelogs @@ -1672,7 +1672,7 @@ sflphone (0.9.2-2ubuntu8) karmic; urgency=low -- Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> Wed, 04 Feb 2009 14:00:30 -0500 -sflphone (0.9.2-2ubuntu7) karmic; urgency=low +sflphone (0.9.2-2ubuntu7) SYSTEM; urgency=low [ Emmanuel Milou ] * Update changelog to 0.9.2-6 @@ -1694,7 +1694,7 @@ sflphone (0.9.2-2ubuntu7) karmic; urgency=low -- Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> Fri, 23 Jan 2009 17:48:13 -0500 -sflphone (0.9.2-2ubuntu6) karmic; urgency=low +sflphone (0.9.2-2ubuntu6) SYSTEM; urgency=low [ Emmanuel Milou ] * Migrate STUN configuration to the main config window @@ -1728,7 +1728,7 @@ sflphone (0.9.2-2ubuntu6) karmic; urgency=low -- Emmanuel Milou <manu@sulfur.inside.savoirfairelinux.net> Fri, 16 Jan 2009 18:19:05 -0500 -sflphone (0.9.2-2ubuntu5) karmic; urgency=low +sflphone (0.9.2-2ubuntu5) SYSTEM; urgency=low * Fix memory leak in the pulseaudio callback * Update debian package generation script @@ -1744,7 +1744,7 @@ sflphone (0.9.2-2ubuntu5) karmic; urgency=low -- Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> Wed, 14 Jan 2009 21:17:20 -0500 -sflphone (0.9.2-2ubuntu4) karmic; urgency=low +sflphone (0.9.2-2ubuntu4) SYSTEM; urgency=low [ Emmanuel Milou ] * add german translation @@ -1754,7 +1754,7 @@ sflphone (0.9.2-2ubuntu4) karmic; urgency=low -- Yun Liu <yun.liu@savoirfairelinux.com> Thu, 08 Jan 2009 13:08:51 -0500 -sflphone (0.9.2-2ubuntu3) karmic; urgency=low +sflphone (0.9.2-2ubuntu3) SYSTEM; urgency=low [ Emmanuel Milou ] * The main thread synchronizes the ringtone thread @@ -1766,13 +1766,13 @@ sflphone (0.9.2-2ubuntu3) karmic; urgency=low -- Yun Liu <yun.liu@savoirfairelinux.com> Tue, 06 Jan 2009 16:18:38 -0500 -sflphone (0.9.2-2ubuntu2) karmic; urgency=low +sflphone (0.9.2-2ubuntu2) SYSTEM; urgency=low * Fix bug ticket #129 -- Yun Liu <yun.liu@savoirfairelinux.com> Wed, 5 Jan 2009 15:54:53 -0500 -sflphone (0.9.2-2ubuntu1) karmic; urgency=low +sflphone (0.9.2-2ubuntu1) SYSTEM; urgency=low * Migrate from eXosip library to pjsip * Add multiple SIP accounts support -- GitLab From 0ef6412b67486ee927804637068858add41f9522 Mon Sep 17 00:00:00 2001 From: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> Date: Fri, 20 Nov 2009 10:56:56 -0500 Subject: [PATCH 018/188] [#2462] Use published address in SIP-SDP --- sflphone-common/src/sip/sipvoiplink.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp index 21f12a44f4..c58ca221a3 100644 --- a/sflphone-common/src/sip/sipvoiplink.cpp +++ b/sflphone-common/src/sip/sipvoiplink.cpp @@ -683,7 +683,7 @@ SIPVoIPLink::newOutgoingCall (const CallID& id, const std::string& toUrl) call->setPeerNumber (toUri); // TODO May use the published address as well - localAddr = account->getLocalAddress (); + account->isStunEnabled () ? localAddr = account->getPublishedAddress () : localAddr = account->getLocalAddress (); setCallAudioLocal (call, localAddr); try { @@ -1455,8 +1455,8 @@ bool SIPVoIPLink::new_ip_to_ip_call (const CallID& id, const std::string& to) return !PJ_SUCCESS; } - // Set SDP parameters - localAddress = account->getLocalAddress (); + // Set SDP parameters - Set to local or published address + account->isStunEnabled () ? localAddress = account->getPublishedAddress () : localAddress = account->getLocalAddress (); _debug ("new_ip_to_ip_call localAddress: %s\n", localAddress.c_str()); @@ -3100,7 +3100,7 @@ mod_on_rx_request (pjsip_rx_data *rdata) if (account != NULL) { // TODO May use the published address as well - addrToUse = account->getLocalAddress (); + account->isStunEnabled () ? addrToUse = account->getPublishedAddress () : addrToUse = account->getLocalAddress (); } if (addrToUse == "0.0.0.0") { @@ -3712,6 +3712,7 @@ bool setCallAudioLocal (SIPCall* call, std::string localIP) if (account->isStunEnabled ()) { // If use Stun server callLocalExternAudioPort = account->getStunPort (); + localIP = account->getPublishedAddress (); } _debug (" Setting local ip address: %s\n", localIP.c_str()); -- GitLab From 8463e1e3d5dcce138fa94533e14e9b390119c03d Mon Sep 17 00:00:00 2001 From: Julien Bonjean <julien@bonjean.info> Date: Fri, 20 Nov 2009 11:37:08 -0500 Subject: [PATCH 019/188] [#1671] Added missing files headers --- sflphone-common/src/dbus/networkmanager.cpp | 20 +++++++++++++++++++- sflphone-common/src/dbus/networkmanager.h | 19 +++++++++++++++++++ sflphone-common/src/logger.cpp | 19 +++++++++++++++++++ sflphone-common/src/logger.h | 19 +++++++++++++++++++ 4 files changed, 76 insertions(+), 1 deletion(-) diff --git a/sflphone-common/src/dbus/networkmanager.cpp b/sflphone-common/src/dbus/networkmanager.cpp index b1197b6c0f..4b1f0b2a50 100644 --- a/sflphone-common/src/dbus/networkmanager.cpp +++ b/sflphone-common/src/dbus/networkmanager.cpp @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2004-2009 Savoir-Faire Linux inc. + * Author: Julien Bonjean <julien.bonjean@savoirfairelinux.com> + * + * 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 3 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., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + #ifdef USE_NETWORKMANAGER #include <global.h> @@ -5,7 +24,6 @@ #include <iostream> #include <instance.h> #include "../manager.h" -#include "sip/sipvoiplink.h" using namespace std; diff --git a/sflphone-common/src/dbus/networkmanager.h b/sflphone-common/src/dbus/networkmanager.h index 2402f5c7a4..bf18e15c63 100644 --- a/sflphone-common/src/dbus/networkmanager.h +++ b/sflphone-common/src/dbus/networkmanager.h @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2004-2009 Savoir-Faire Linux inc. + * Author: Julien Bonjean <julien.bonjean@savoirfairelinux.com> + * + * 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 3 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., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + #ifndef NETWORKMANAGER_H #define NETWORKMANAGER_H diff --git a/sflphone-common/src/logger.cpp b/sflphone-common/src/logger.cpp index 8c71ddf645..b7966beea5 100644 --- a/sflphone-common/src/logger.cpp +++ b/sflphone-common/src/logger.cpp @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2004-2009 Savoir-Faire Linux inc. + * Author: Julien Bonjean <julien.bonjean@savoirfairelinux.com> + * + * 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 3 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., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + #include "logger.h" #include <stdarg.h> #include <string> diff --git a/sflphone-common/src/logger.h b/sflphone-common/src/logger.h index f968d10f90..b8a3b77b4c 100644 --- a/sflphone-common/src/logger.h +++ b/sflphone-common/src/logger.h @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2004-2009 Savoir-Faire Linux inc. + * Author: Julien Bonjean <julien.bonjean@savoirfairelinux.com> + * + * 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 3 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., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + #ifndef __LOGGER_H__ #define __LOGGER_H__ -- GitLab From a31d345bf80eddca3a4ab44531e250ac20e7b284 Mon Sep 17 00:00:00 2001 From: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> Date: Fri, 20 Nov 2009 12:12:19 -0500 Subject: [PATCH 020/188] [#2462] Use different address for SDP and call IP --- sflphone-common/src/sip/sipvoiplink.cpp | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp index c58ca221a3..0567454a3a 100644 --- a/sflphone-common/src/sip/sipvoiplink.cpp +++ b/sflphone-common/src/sip/sipvoiplink.cpp @@ -662,7 +662,7 @@ SIPVoIPLink::newOutgoingCall (const CallID& id, const std::string& toUrl) { SIPAccount * account = NULL; pj_status_t status; - std::string localAddr; + std::string localAddr, addrSdp; SIPCall* call = new SIPCall (id, Call::Outgoing, _pool); @@ -683,7 +683,8 @@ SIPVoIPLink::newOutgoingCall (const CallID& id, const std::string& toUrl) call->setPeerNumber (toUri); // TODO May use the published address as well - account->isStunEnabled () ? localAddr = account->getPublishedAddress () : localAddr = account->getLocalAddress (); + localAddr = account->getLocalAddress () + account->isStunEnabled () ? addrSdp = account->getPublishedAddress () : addrSdp = account->getLocalAddress (); setCallAudioLocal (call, localAddr); try { @@ -698,7 +699,7 @@ SIPVoIPLink::newOutgoingCall (const CallID& id, const std::string& toUrl) _debug ("Try to make a call to: %s with call ID: %s\n", toUrl.data(), id.data()); // Building the local SDP offer // localAddr = getLocalAddressAssociatedToAccount (account->getAccountID()); - call->getLocalSDP()->set_ip_address (localAddr); + call->getLocalSDP()->set_ip_address (addrSdp); status = call->getLocalSDP()->create_initial_offer(); if (status != PJ_SUCCESS) { @@ -1456,7 +1457,8 @@ bool SIPVoIPLink::new_ip_to_ip_call (const CallID& id, const std::string& to) } // Set SDP parameters - Set to local or published address - account->isStunEnabled () ? localAddress = account->getPublishedAddress () : localAddress = account->getLocalAddress (); + // account->isStunEnabled () ? localAddress = account->getPublishedAddress () : localAddress = account->getLocalAddress (); + account->isStunEnabled () ? localAddress = account->getLocalAddress () : localAddress = account->getLocalAddress (); _debug ("new_ip_to_ip_call localAddress: %s\n", localAddress.c_str()); @@ -1473,6 +1475,7 @@ bool SIPVoIPLink::new_ip_to_ip_call (const CallID& id, const std::string& to) call->setPeerNumber (toUri); _debug ("toUri in new_ip_to_ip call %s\n", toUri.c_str()); // Building the local SDP offer + account->isStunEnabled () ? localAddress = account->getPublishedAddress () : localAddress = account->getLocalAddress (); call->getLocalSDP()->set_ip_address (localAddress); call->getLocalSDP()->create_initial_offer(); @@ -1490,7 +1493,7 @@ bool SIPVoIPLink::new_ip_to_ip_call (const CallID& id, const std::string& to) _debug ("IptoIP local port %i\n", account->getLocalPort()); - _debug ("IptoIP local address %s\n", account->getLocalAddress().c_str()); + _debug ("IptoIP local address in sdp %s\n", account->getLocalAddress().c_str()); // Create URI std::string fromUri; @@ -3094,13 +3097,14 @@ mod_on_rx_request (pjsip_rx_data *rdata) return false; } - std::string addrToUse; + std::string addrToUse, addrSdp; account = dynamic_cast<SIPAccount *> (Manager::instance().getAccount (account_id)); if (account != NULL) { // TODO May use the published address as well - account->isStunEnabled () ? addrToUse = account->getPublishedAddress () : addrToUse = account->getLocalAddress (); + addrToUse = addrToUse = account->getLocalAddress (); + account->isStunEnabled () ? addrSdp = account->getPublishedAddress () : addrSdp = account->getLocalAddress (); } if (addrToUse == "0.0.0.0") { @@ -3112,7 +3116,7 @@ mod_on_rx_request (pjsip_rx_data *rdata) setCallAudioLocal (call, addrToUse); // We retrieve the remote sdp offer in the rdata struct to begin the negociation - call->getLocalSDP()->set_ip_address (addrToUse); + call->getLocalSDP()->set_ip_address (addrSdp); get_remote_sdp_from_offer (rdata, &r_sdp); @@ -3712,7 +3716,7 @@ bool setCallAudioLocal (SIPCall* call, std::string localIP) if (account->isStunEnabled ()) { // If use Stun server callLocalExternAudioPort = account->getStunPort (); - localIP = account->getPublishedAddress (); + //localIP = account->getPublishedAddress (); } _debug (" Setting local ip address: %s\n", localIP.c_str()); -- GitLab From 07732536ffd6a9837450e552d62bf14ef6a61452 Mon Sep 17 00:00:00 2001 From: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> Date: Fri, 20 Nov 2009 12:13:08 -0500 Subject: [PATCH 021/188] [#2462] fix typo --- sflphone-common/src/sip/sipvoiplink.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp index 0567454a3a..a29a90cc9a 100644 --- a/sflphone-common/src/sip/sipvoiplink.cpp +++ b/sflphone-common/src/sip/sipvoiplink.cpp @@ -683,7 +683,7 @@ SIPVoIPLink::newOutgoingCall (const CallID& id, const std::string& toUrl) call->setPeerNumber (toUri); // TODO May use the published address as well - localAddr = account->getLocalAddress () + localAddr = account->getLocalAddress (); account->isStunEnabled () ? addrSdp = account->getPublishedAddress () : addrSdp = account->getLocalAddress (); setCallAudioLocal (call, localAddr); -- GitLab From cdda2110e4e3745ef9926f2336f168be1798db6a Mon Sep 17 00:00:00 2001 From: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> Date: Fri, 20 Nov 2009 13:37:57 -0500 Subject: [PATCH 022/188] [#2462] Set explicitly the transport on incoming call too --- sflphone-common/src/sip/sipvoiplink.cpp | 49 +++++++++++++++++-------- 1 file changed, 33 insertions(+), 16 deletions(-) diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp index a29a90cc9a..7d66305764 100644 --- a/sflphone-common/src/sip/sipvoiplink.cpp +++ b/sflphone-common/src/sip/sipvoiplink.cpp @@ -682,11 +682,16 @@ SIPVoIPLink::newOutgoingCall (const CallID& id, const std::string& toUrl) call->setPeerNumber (toUri); - // TODO May use the published address as well localAddr = account->getLocalAddress (); - account->isStunEnabled () ? addrSdp = account->getPublishedAddress () : addrSdp = account->getLocalAddress (); + if (localAddr == "0.0.0.0") + loadSIPLocalIP (&localAddr); setCallAudioLocal (call, localAddr); + // May use the published address as well + account->isStunEnabled () ? addrSdp = account->getPublishedAddress () : addrSdp = account->getLocalAddress (); + if (addrSdp == "0.0.0.0") + loadSIPLocalIP (&addrSdp); + try { _debug ("Creating new rtp session in newOutgoingCall\n"); call->getAudioRtp()->initAudioRtpSession (call); @@ -941,8 +946,8 @@ int SIPVoIPLink::inv_session_reinvite (SIPCall *call, std::string direction) _debug ("! SIP Failure: unable to find local_sdp\n"); return !PJ_SUCCESS; } - - // reinvite only if connected + + // Reinvite only if connected // Build the local SDP offer status = call->getLocalSDP()->create_initial_offer(); @@ -956,7 +961,6 @@ int SIPVoIPLink::inv_session_reinvite (SIPCall *call, std::string direction) pjmedia_sdp_media_add_attr (local_sdp->media[0], attr); // Build the reinvite request - status = pjsip_inv_reinvite (call->getInvSession(), NULL, local_sdp, &tdata); @@ -1437,7 +1441,7 @@ bool SIPVoIPLink::new_ip_to_ip_call (const CallID& id, const std::string& to) pjsip_dialog *dialog; pjsip_inv_session *inv; pjsip_tx_data *tdata; - std::string localAddress; + std::string localAddress, addrSdp; /* Create the call */ call = new SIPCall (id, Call::Outgoing, _pool); @@ -1456,9 +1460,10 @@ bool SIPVoIPLink::new_ip_to_ip_call (const CallID& id, const std::string& to) return !PJ_SUCCESS; } + // Set the local address + localAddress = account->getLocalAddress (); // Set SDP parameters - Set to local or published address - // account->isStunEnabled () ? localAddress = account->getPublishedAddress () : localAddress = account->getLocalAddress (); - account->isStunEnabled () ? localAddress = account->getLocalAddress () : localAddress = account->getLocalAddress (); + account->isStunEnabled () ? addrSdp = account->getPublishedAddress () : addrSdp = account->getLocalAddress (); _debug ("new_ip_to_ip_call localAddress: %s\n", localAddress.c_str()); @@ -1467,6 +1472,10 @@ bool SIPVoIPLink::new_ip_to_ip_call (const CallID& id, const std::string& to) loadSIPLocalIP (&localAddress); } + if (addrSdp == "0.0.0.0") { + addrSdp = localAddress; + } + setCallAudioLocal (call, localAddress); _debug ("toUri received in new_ip_to_ip call %s\n", to.c_str()); @@ -1475,8 +1484,7 @@ bool SIPVoIPLink::new_ip_to_ip_call (const CallID& id, const std::string& to) call->setPeerNumber (toUri); _debug ("toUri in new_ip_to_ip call %s\n", toUri.c_str()); // Building the local SDP offer - account->isStunEnabled () ? localAddress = account->getPublishedAddress () : localAddress = account->getLocalAddress (); - call->getLocalSDP()->set_ip_address (localAddress); + call->getLocalSDP()->set_ip_address (addrSdp); call->getLocalSDP()->create_initial_offer(); try { @@ -3097,24 +3105,30 @@ mod_on_rx_request (pjsip_rx_data *rdata) return false; } - std::string addrToUse, addrSdp; + std::string addrToUse, addrSdp ="0.0.0.0"; + pjsip_tpselector *tp; account = dynamic_cast<SIPAccount *> (Manager::instance().getAccount (account_id)); if (account != NULL) { - // TODO May use the published address as well - addrToUse = addrToUse = account->getLocalAddress (); + // May use the published address as well + addrToUse = account->getLocalAddress (); account->isStunEnabled () ? addrSdp = account->getPublishedAddress () : addrSdp = account->getLocalAddress (); + // Set the appropriate transport to have the right VIA header + link->init_transport_selector (account->getAccountTransport (), &tp); } - - if (addrToUse == "0.0.0.0") { + + if (addrToUse == "0.0.0.0") { link->loadSIPLocalIP (&addrToUse); } + if (addrSdp == "0.0.0.0") { + addrSdp = addrToUse; + } + // Have to do some stuff with the SDP // Set the codec map, IP, peer number and so on... for the SIPCall object setCallAudioLocal (call, addrToUse); - // We retrieve the remote sdp offer in the rdata struct to begin the negociation call->getLocalSDP()->set_ip_address (addrSdp); @@ -3161,6 +3175,9 @@ mod_on_rx_request (pjsip_rx_data *rdata) // Specify media capability during invite session creation status = pjsip_inv_create_uas (dialog, rdata, call->getLocalSDP()->get_local_sdp_session(), 0, &inv); + // Explicitly set the transport + status = pjsip_dlg_set_transport (dialog, tp); + PJ_ASSERT_RETURN (status == PJ_SUCCESS, 1); -- GitLab From ddd570f355bdb35d3e714270bc7b96641c2dce9d Mon Sep 17 00:00:00 2001 From: Julien Bonjean <julien@bonjean.info> Date: Fri, 20 Nov 2009 17:33:11 -0500 Subject: [PATCH 023/188] [#2445] First shot --- .../mozilla-telify-sflphone/debian/changelog | 7 +++ tools/mozilla-telify-sflphone/debian/compat | 1 + tools/mozilla-telify-sflphone/debian/control | 15 +++++ .../debian/control.debian | 16 +++++ .../mozilla-telify-sflphone/debian/copyright | 1 + tools/mozilla-telify-sflphone/debian/files | 1 + .../mozilla-telify-sflphone.debhelper.log | 11 ++++ .../debian/mozilla-telify-sflphone.install | 5 ++ .../debian/mozilla-telify-sflphone.links | 1 + .../debian/mozilla-telify-sflphone.substvars | 1 + tools/mozilla-telify-sflphone/debian/postinst | 18 ++++++ tools/mozilla-telify-sflphone/debian/rules | 58 ++++++++++++++++++ .../mozilla-telify-sflphone/sflphone-handler | 52 ++++++++++++++++ .../telify-0.4.7.3-fx.xpi | Bin 0 -> 561548 bytes 14 files changed, 187 insertions(+) create mode 100644 tools/mozilla-telify-sflphone/debian/changelog create mode 100644 tools/mozilla-telify-sflphone/debian/compat create mode 100644 tools/mozilla-telify-sflphone/debian/control create mode 100644 tools/mozilla-telify-sflphone/debian/control.debian create mode 100644 tools/mozilla-telify-sflphone/debian/copyright create mode 100644 tools/mozilla-telify-sflphone/debian/files create mode 100644 tools/mozilla-telify-sflphone/debian/mozilla-telify-sflphone.debhelper.log create mode 100644 tools/mozilla-telify-sflphone/debian/mozilla-telify-sflphone.install create mode 100644 tools/mozilla-telify-sflphone/debian/mozilla-telify-sflphone.links create mode 100644 tools/mozilla-telify-sflphone/debian/mozilla-telify-sflphone.substvars create mode 100755 tools/mozilla-telify-sflphone/debian/postinst create mode 100755 tools/mozilla-telify-sflphone/debian/rules create mode 100755 tools/mozilla-telify-sflphone/sflphone-handler create mode 100644 tools/mozilla-telify-sflphone/telify-0.4.7.3-fx.xpi diff --git a/tools/mozilla-telify-sflphone/debian/changelog b/tools/mozilla-telify-sflphone/debian/changelog new file mode 100644 index 0000000000..8ea3e02afc --- /dev/null +++ b/tools/mozilla-telify-sflphone/debian/changelog @@ -0,0 +1,7 @@ +mozilla-telify-sflphone (0.4.7.3) unstable; urgency=low + + [ Julien Bonjean ] + * Package creation + + -- Julien Bonjean <julien.bonjean@savoirfairelinux.com> Fri, 20 Nov 2009 19:51:54 +0100 + diff --git a/tools/mozilla-telify-sflphone/debian/compat b/tools/mozilla-telify-sflphone/debian/compat new file mode 100644 index 0000000000..7f8f011eb7 --- /dev/null +++ b/tools/mozilla-telify-sflphone/debian/compat @@ -0,0 +1 @@ +7 diff --git a/tools/mozilla-telify-sflphone/debian/control b/tools/mozilla-telify-sflphone/debian/control new file mode 100644 index 0000000000..88fcc2ff5f --- /dev/null +++ b/tools/mozilla-telify-sflphone/debian/control @@ -0,0 +1,15 @@ +Source: mozilla-telify-sflphone +Section: web +Priority: optional +Maintainer: Julien Bonjean <julien.bonjean@savoirfairelinux.com> +Uploaders: Julien Bonjean <julien.bonjean@savoirfairelinux.com> +Build-Depends: debhelper (>= 7), unzip +Homepage: http://www.sflphone.org +Standards-Version: 3.8.3 +DM-Upload-Allowed: yes + +Package: mozilla-telify-sflphone +Depends: firefox-gnome-support, sflphone-client-gnome +Architecture: all +Description: TBD + diff --git a/tools/mozilla-telify-sflphone/debian/control.debian b/tools/mozilla-telify-sflphone/debian/control.debian new file mode 100644 index 0000000000..d4a3deefdd --- /dev/null +++ b/tools/mozilla-telify-sflphone/debian/control.debian @@ -0,0 +1,16 @@ +Source: mozilla-telify-sflphone +Section: web +Priority: optional +Maintainer: Julien Bonjean <julien.bonjean@savoirfairelinux.com> +Uploaders: Julien Bonjean <julien.bonjean@savoirfairelinux.com> +Build-Depends: debhelper (>= 7), unzip +Depends: iceweasel-gnome-support +Homepage: http://www.sflphone.org +Standards-Version: 3.8.3 +DM-Upload-Allowed: yes + +Package: mozilla-telify-sflphone +Architecture: all +Depends: iceweasel (>= 3.0) +Description: TBD + diff --git a/tools/mozilla-telify-sflphone/debian/copyright b/tools/mozilla-telify-sflphone/debian/copyright new file mode 100644 index 0000000000..a0990367ef --- /dev/null +++ b/tools/mozilla-telify-sflphone/debian/copyright @@ -0,0 +1 @@ +TBD diff --git a/tools/mozilla-telify-sflphone/debian/files b/tools/mozilla-telify-sflphone/debian/files new file mode 100644 index 0000000000..8ebe49a990 --- /dev/null +++ b/tools/mozilla-telify-sflphone/debian/files @@ -0,0 +1 @@ +mozilla-telify-sflphone_0.4.7.3_all.deb web optional diff --git a/tools/mozilla-telify-sflphone/debian/mozilla-telify-sflphone.debhelper.log b/tools/mozilla-telify-sflphone/debian/mozilla-telify-sflphone.debhelper.log new file mode 100644 index 0000000000..89ec40ebaf --- /dev/null +++ b/tools/mozilla-telify-sflphone/debian/mozilla-telify-sflphone.debhelper.log @@ -0,0 +1,11 @@ +dh_prep +dh_installdirs +dh_install +dh_installchangelogs +dh_link +dh_compress +dh_fixperms +dh_installdeb +dh_gencontrol +dh_md5sums +dh_builddeb diff --git a/tools/mozilla-telify-sflphone/debian/mozilla-telify-sflphone.install b/tools/mozilla-telify-sflphone/debian/mozilla-telify-sflphone.install new file mode 100644 index 0000000000..ffb9a7d052 --- /dev/null +++ b/tools/mozilla-telify-sflphone/debian/mozilla-telify-sflphone.install @@ -0,0 +1,5 @@ +temp/install.rdf usr/share/mozilla-extensions/telify/ +temp/chrome.manifest usr/share/mozilla-extensions/telify/ +temp/defaults/* usr/share/mozilla-extensions/telify/defaults +temp/chrome/* usr/share/mozilla-extensions/telify/chrome +sflphone-handler usr/bin/ diff --git a/tools/mozilla-telify-sflphone/debian/mozilla-telify-sflphone.links b/tools/mozilla-telify-sflphone/debian/mozilla-telify-sflphone.links new file mode 100644 index 0000000000..5fa1937c3e --- /dev/null +++ b/tools/mozilla-telify-sflphone/debian/mozilla-telify-sflphone.links @@ -0,0 +1 @@ +usr/share/mozilla-extensions/telify usr/lib/iceweasel/extensions/{6c5f349a-ddda-49ad-bdf0-326d3fe1f938} diff --git a/tools/mozilla-telify-sflphone/debian/mozilla-telify-sflphone.substvars b/tools/mozilla-telify-sflphone/debian/mozilla-telify-sflphone.substvars new file mode 100644 index 0000000000..abd3ebebc3 --- /dev/null +++ b/tools/mozilla-telify-sflphone/debian/mozilla-telify-sflphone.substvars @@ -0,0 +1 @@ +misc:Depends= diff --git a/tools/mozilla-telify-sflphone/debian/postinst b/tools/mozilla-telify-sflphone/debian/postinst new file mode 100755 index 0000000000..293cbf05a1 --- /dev/null +++ b/tools/mozilla-telify-sflphone/debian/postinst @@ -0,0 +1,18 @@ +#!/bin/bash + +set -x + +gconftool-2 --direct --config-source xml::/etc/gconf/gconf.xml.defaults -t string -s /desktop/gnome/url-handlers/tel/command "/usr/bin/sflphone-handler %s" +gconftool-2 --direct --config-source xml::/etc/gconf/gconf.xml.defaults -s /desktop/gnome/url-handlers/tel/needs_terminal false -t bool +gconftool-2 --direct --config-source xml::/etc/gconf/gconf.xml.defaults -t bool -s /desktop/gnome/url-handlers/tel/enabled true + +gconftool-2 --direct --config-source xml::/etc/gconf/gconf.xml.defaults -t string -s /desktop/gnome/url-handlers/callto/command "/usr/bin/sflphone-handler %s" +gconftool-2 --direct --config-source xml::/etc/gconf/gconf.xml.defaults -s /desktop/gnome/url-handlers/callto/needs_terminal false -t bool +gconftool-2 --direct --config-source xml::/etc/gconf/gconf.xml.defaults -t bool -s /desktop/gnome/url-handlers/callto/enabled true + +gconftool-2 --direct --config-source xml::/etc/gconf/gconf.xml.defaults -t string -s /desktop/gnome/url-handlers/sip/command "/usr/bin/sflphone-handler %s" +gconftool-2 --direct --config-source xml::/etc/gconf/gconf.xml.defaults -s /desktop/gnome/url-handlers/sip/needs_terminal false -t bool +gconftool-2 --direct --config-source xml::/etc/gconf/gconf.xml.defaults -t bool -s /desktop/gnome/url-handlers/sip/enabled true + +exit 0 + diff --git a/tools/mozilla-telify-sflphone/debian/rules b/tools/mozilla-telify-sflphone/debian/rules new file mode 100755 index 0000000000..b6418e1b04 --- /dev/null +++ b/tools/mozilla-telify-sflphone/debian/rules @@ -0,0 +1,58 @@ +#!/usr/bin/make -f + +# Uncomment this to turn on verbose mode. +#export DH_VERBOSE=1 + +ID="{6c5f349a-ddda-49ad-bdf0-326d3fe1f938}" + +configure: configure-stamp +configure-stamp: + dh_testdir + + touch configure-stamp + +build: configure-stamp build-stamp +build-stamp: + dh_testdir + + mkdir -p temp + unzip -o -d temp *.xpi + touch build-stamp + +clean: + dh_testdir + dh_testroot + rm -f build-stamp configure-stamp + + -rm -rf temp + + dh_clean + +install: build + dh_testdir + dh_testroot + dh_prep + dh_installdirs + + dh_install + + +# Build architecture-independent files here. +binary-indep: build install + dh_testdir + dh_testroot + dh_installchangelogs -i + dh_link -i + dh_compress -XMPL -i + dh_fixperms -i + dh_installdeb -i + dh_gencontrol -i + dh_md5sums -i + dh_builddeb -i + +# Build architecture-dependent files here. +binary-arch: build install +# We have nothing to do by default. + +binary: binary-indep binary-arch +.PHONY: build clean binary-indep binary-arch binary install configure diff --git a/tools/mozilla-telify-sflphone/sflphone-handler b/tools/mozilla-telify-sflphone/sflphone-handler new file mode 100755 index 0000000000..727ef0f93c --- /dev/null +++ b/tools/mozilla-telify-sflphone/sflphone-handler @@ -0,0 +1,52 @@ +#!/bin/sh +# +# This script can be used as a callto: (or other) protocol handler in +# Mozilla Firefox-based browser. +# In Firefox use Preferences > Applications and set the callto handler +# to this script. + +# The sflphone daemon config file +RESFILE=~/.config/sflphone/sflphonedrc + +# Parse sflphonedrc and get default account id string +if [ -f "$RESFILE" ]; then + + # Use first ID + ACCOUNTID=`grep Accounts.order $RESFILE | sed -e 's/Accounts.order=//' -e 's/\/.*//'` + + # Accounts.order is not set + if [ -z $ACCOUNTID ]; then + + # Use first account declared in sflphone config + ACCOUNTID="`grep -m 1 Account: $RESFILE | sed -e 's/\[//' -e 's/\]//'`" + fi + +else + echo Fatal: Cant find sflphonedrc config file. + exit 1 +fi + +# Check 1st argument (phone number) +if [ -z $1 ]; then + echo "Error: argument 1 (phone number) not provided." + exit 1 +fi + +# Cleanup destination, keeping numbers only +TO="`echo $1 | sed -e 's/[^0123456789]//g'`" + +# Generate call id. +CALLID=${RANDOM}$$ + +dbus-send \ + --type="method_call" \ + --dest="org.sflphone.SFLphone" \ + "/org/sflphone/SFLphone/CallManager" \ + "org.sflphone.SFLphone.CallManager.placeCall" \ + string:"$ACCOUNTID" \ + string:"$CALLID" \ + string:"$TO" + +exit 0 + +# EOF diff --git a/tools/mozilla-telify-sflphone/telify-0.4.7.3-fx.xpi b/tools/mozilla-telify-sflphone/telify-0.4.7.3-fx.xpi new file mode 100644 index 0000000000000000000000000000000000000000..ec1eff1fe541400731f1b2e5b6e33a30c8cd9a4a GIT binary patch literal 561548 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ℑ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%0A9Uhkcf`}T%Uh#3D?^Sk)-3<=Oa6!c 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 Xl?_xUD=;cBwp1}Nd=leeU|;|M;Eh6} literal 0 HcmV?d00001 -- GitLab From 35ef78c81bea7d0cf0d2af0e2756623d33622b9a Mon Sep 17 00:00:00 2001 From: Julien Bonjean <julien@bonjean.info> Date: Fri, 20 Nov 2009 17:40:58 -0500 Subject: [PATCH 024/188] [#2181] Updated changelogs --- tools/build-system/build-osc.sh | 2 +- tools/build-system/launch-build-machine-2.sh | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/tools/build-system/build-osc.sh b/tools/build-system/build-osc.sh index 30fb9ab3c0..13432ab327 100755 --- a/tools/build-system/build-osc.sh +++ b/tools/build-system/build-osc.sh @@ -23,7 +23,7 @@ LAUNCHPAD_PACKAGES=( "sflphone-client-gnome" "sflphone-common" ) REFERENCE_REPOSITORY="${ROOT_DIR}/sflphone-source-repository" -SOFTWARE_VERSION="0.9.7.beta" +SOFTWARE_VERSION="0.9.7.rc1" VERSION_INDEX=1 diff --git a/tools/build-system/launch-build-machine-2.sh b/tools/build-system/launch-build-machine-2.sh index 46246540a0..b6b7638195 100755 --- a/tools/build-system/launch-build-machine-2.sh +++ b/tools/build-system/launch-build-machine-2.sh @@ -217,6 +217,7 @@ END fi done + cp ${DEBIAN_DIR}/changelog.generic ${DEBIAN_DIR}/changelog done # if push is activated -- GitLab From 925eea6f70019570195cda641462e7aa7b26eab2 Mon Sep 17 00:00:00 2001 From: Julien Bonjean <julien@bonjean.info> Date: Fri, 20 Nov 2009 17:42:02 -0500 Subject: [PATCH 025/188] =?UTF-8?q?[#2181]=20Updated=20changelogs=20(oops?= =?UTF-8?q?=C2=AB)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sflphone-client-gnome/debian/changelog | 159 ++++++++++++++++++ .../sflphone-common/debian/changelog | 159 ++++++++++++++++++ 2 files changed, 318 insertions(+) diff --git a/tools/build-system/launchpad/sflphone-client-gnome/debian/changelog b/tools/build-system/launchpad/sflphone-client-gnome/debian/changelog index c6bec4586d..ae7c8b6fea 100644 --- a/tools/build-system/launchpad/sflphone-client-gnome/debian/changelog +++ b/tools/build-system/launchpad/sflphone-client-gnome/debian/changelog @@ -1,3 +1,162 @@ +sflphone-client-gnome (0.9.7~rc1~ppa1~SYSTEM) SYSTEM; urgency=low + + ** 0.9.7~rc1~ppa1~SYSTEM ** + + * [#2462] Set explicitly the transport on incoming call too + * [#2462] fix typo + * [#2462] Use different address for SDP and call IP + * [#2462] Use published address in SIP-SDP + * [#2181] Fixed changelog files + * [#2181] Updated spec file + * [#2402] Fix pointer to int conversion warning (atoi) + * [#2402] Remove daemon warnings, make indent + * [#2459] Make sure the stream is opened when the call is answered + * [#2402] Add conference related picture in documentation + * [#2443] Not much ... + * [#2399] Fix dialing display problem + * [#2450] Fix incoming call already in conference crash + * [#2399] Display peer name on the first line and peer number on the + second + * [#2450] Handle 403 FORBIDDEN when refused + * [#2447] Bind offHold/onHold actions to button in gtk client + * [#2447] Bind hangup action to button for conference + * [#2447] Add conference action in gtk client's ToolBar + * [#2381] Disable the password hashing in config file + * [#2402] Cleanup + * [#2366] Set callback to null when deleting Pulseaudio streams + * [#1313] Fix main buffer unit test + * [#1313] Fix audio layer unit test + * [#2315] Hide pw in security tab, display when editing, sync with + basic tab + * [#1313] UnitTest change AudioRtpSession for AudioSymetricRtpSession + instance + * [#2402] Code cleanup + * [#2444] Add debug to catch occasional crash when loading client's + config + * [#2444] Add debug info to catch occasional crash when loading config + dialog + * [#2402] Restore Call menu translations + * [#2403] Use the published address if checked in GUI + * [#2442] Add protection test in sdp + * [#1841] Reapply pjsip patch concerning DNS SRV resolution + * [#2384] Tags incoming call as direct SIP call, if applicable + * [#2402] Change the monkey face + * [#2315] Enable user to display password in clear text + * [#2434] Force optimization level at 2 + * [#2284] Fix dbus_get_all_ip_interface compilation warnings + * [#2431] Popup main window on incoming if applicable + * [$2402] Fix simple warnings + * [#2402] Fix implicit variable init order in LibraryManagerException + * [#2402] Fixing implicit variable initialization warnings in + AudioRtpSession + * [#2402] Revert atoi change, fixing codec list doubled entries + * [#2402] Fix gpointer to gint conversion + * [#2402] Fix pointer casting to integer different size warning in + codec list + * [#2402] Fix warning discarting qualifiers from pointer target + * [#2402] Fix gtk tree view assignement from incompatible type warning + * [#1669] Fix audio recording folder utf-8 non compatibility issue + * [#2414] Clean up debugs + * [#2414] Use transport set in iptoip Account and update it frm + preference + * [#2348] Use macro N_() to mark ui.xml strings as translatable + * [#2414] Rename getSipAddress/setSipAddress functions + * [#2407] Fix volume controls display + * [#2407] Fixes dialpad + * [#2383] Set ip to ip config when clicking apply button + * [#2404] Update call-to script - Maxime Chambreuil + * [#2405] Client handles unknown call in current state as well + * [#2383] Add DBUS signal to send IPtoIP local address and port as + string + * [#2383] Add Ip to IP config change apply call back + * Clonflict + * [#2402] Code cleanup + * [#2383] Do the same for IPtoIP (init localn ip with first in the + list) + * [#2383] Use first interface in the list if local addresss is not + defined + * [#2403] Clean up unuseful addresses/ports + * [#2403] Use the IP profile SIP port as global SIP port + * [#2383] Fix dbus_get_all_ip_interface warnings + * [#2383] Take into account sameAsLocal when loading published address + * [#2383] Tsake into account sameAsLocal option when saving published + address + * [#2383] Update local ip address in ip to ip config + * [#2383] Save ip 2 ip local port in config + * [#2406] Update toolbar at startup + * [#2284] Remove redefinition warnings + speex warnings + * [#2383] Fix security table in account config + * [#2383] Save ip 2 ip network interface parameters in config + * [#2403] Restore sip transport selector + * [#2383] Fix filling the Localt IP Address on account creation + * [#2383] Fix Gtk-Critical when checking STUN + * [#2383] Fix reopening account configuration display issue + * [#2383] Load IPtoIP local address and port in preference iptoiptab + * [#2383] Add LocalAddress and Localport in Preference IpToIp tab + * [#2403] Use the address and port associated to the account as often + as possible + * [#1753] Removed pjsip generated files + * [#1753] Removed remaining milenage lib references + * [#2383] Add _publishedSameasLocal variable in sipaccount + * [#2383] Add PUBLISHED_SAMEAS_LOCAL variable in config + * [#2383] Fix stun set active or not when opening config + * [#2181] Added RPM 64bits dbus patch + * [#2402] Code indentation + * [#2313] Force $(HOME).cache directory creation at startup + * [#2383] Separate network interface and published address in account + config + * [#2400] Change dbus service installation path to libdir + * [#2382] Move TLS related published address options in security tab + * [#2382] Indent accountconfigdialog.c + * [#2181] Install libdbus-c++ in $pkglib instead of $lib + * [#1753] Remove ILBC code and disable it by default in the configure + * [#1753] Remove milenage directory + * [#2382] Fix switching interaface instabilities + * [#2396] Save local ip in account creation wizard + * [#2284] Remove warning on hold + * [#2387] Fixes history searching and filtering + * [#1215] Add samplerate display in the GUI + * [#1663] Voicemail icon reflects voice messages + * [#2395] Fix account registration ( specifically with callcentric) + * [#2386] Strip "sip:" on incoming call, fixing history call back + * [#2181] Updated spec files + * [#1215] Display codec name in calltree instead of status bar + * [#2390] Move back nbCalls and stopStream higher in refuseCall + * [#2392] Fix ringtone during call in IAX + * [#2391] Stop audio streams when there is 0 calls only + * [#2391] Add debug when call state is not valid + * [#2390] Clear returns in IAXvoipLink::sendAudioFromMic() method + * [#2380] Fixing IncomingCallNotification not regular + * [#2339] Query conference at client startup + * [#2339] Working conference querying at startup + * [#2339] Add conference in call tree + * [#2339] Primitives to query conferences at client startup + * [#2320] Add account selection in history + * [#2355] Temporary solution: do not delete pointer when removing + account + * [#2380] Change algorithm in AudioRtp to trigger an + IncomingCallNotification + * [#2274] Comment sdebug in MainBuffer flush method + * [#2274] Add flushMain() in ManagerImpl::addStream + * [#2274] Add getBufferID() method in ring buffer + * [#2274] Fix warning, comment debug in ringbuffer's flush method + * [#2274] Use AudioLayer flushMain() and flushUrgent() in ALSA + * [#2274] Clean up unused variable warning + * [#2274] Protect minbudffer pointer on flushing + * [#2274] Fix playATone method which writing empty buffer in urgent + ringbuffer + * [#2274] Use audio layer flushUrgent and flushMain in createStreams + * [#2274] Use flush audio calls from audiolayer + * [#2274] Flush when peer answered call + * [#2375] Flush main buffer in iax when answering a call + * [#2274] Parse displayname using c++ string method + * [#2375] Flush main buffer when off holding calls + * [#2375] Flush main buffer mon RTP startup + * [#2376] Use now Pulseaudio module-cork-music-on-phone + * Updated OSC packaging + + -- Julien Bonjean <julien.bonjean@savoirfairelinux.com> Fri, 20 Nov 2009 13:59:02 -0500 + sflphone-client-gnome (0.9.7~beta~ppa1~karmic) karmic; urgency=low ** 0.9.7~beta~ppa1~karmic ** diff --git a/tools/build-system/launchpad/sflphone-common/debian/changelog b/tools/build-system/launchpad/sflphone-common/debian/changelog index 98e662737c..8343cf5d75 100644 --- a/tools/build-system/launchpad/sflphone-common/debian/changelog +++ b/tools/build-system/launchpad/sflphone-common/debian/changelog @@ -1,3 +1,162 @@ +sflphone-common (0.9.7~rc1~ppa1~SYSTEM) SYSTEM; urgency=low + + ** 0.9.7~rc1~ppa1~SYSTEM ** + + * [#2462] Set explicitly the transport on incoming call too + * [#2462] fix typo + * [#2462] Use different address for SDP and call IP + * [#2462] Use published address in SIP-SDP + * [#2181] Fixed changelog files + * [#2181] Updated spec file + * [#2402] Fix pointer to int conversion warning (atoi) + * [#2402] Remove daemon warnings, make indent + * [#2459] Make sure the stream is opened when the call is answered + * [#2402] Add conference related picture in documentation + * [#2443] Not much ... + * [#2399] Fix dialing display problem + * [#2450] Fix incoming call already in conference crash + * [#2399] Display peer name on the first line and peer number on the + second + * [#2450] Handle 403 FORBIDDEN when refused + * [#2447] Bind offHold/onHold actions to button in gtk client + * [#2447] Bind hangup action to button for conference + * [#2447] Add conference action in gtk client's ToolBar + * [#2381] Disable the password hashing in config file + * [#2402] Cleanup + * [#2366] Set callback to null when deleting Pulseaudio streams + * [#1313] Fix main buffer unit test + * [#1313] Fix audio layer unit test + * [#2315] Hide pw in security tab, display when editing, sync with + basic tab + * [#1313] UnitTest change AudioRtpSession for AudioSymetricRtpSession + instance + * [#2402] Code cleanup + * [#2444] Add debug to catch occasional crash when loading client's + config + * [#2444] Add debug info to catch occasional crash when loading config + dialog + * [#2402] Restore Call menu translations + * [#2403] Use the published address if checked in GUI + * [#2442] Add protection test in sdp + * [#1841] Reapply pjsip patch concerning DNS SRV resolution + * [#2384] Tags incoming call as direct SIP call, if applicable + * [#2402] Change the monkey face + * [#2315] Enable user to display password in clear text + * [#2434] Force optimization level at 2 + * [#2284] Fix dbus_get_all_ip_interface compilation warnings + * [#2431] Popup main window on incoming if applicable + * [$2402] Fix simple warnings + * [#2402] Fix implicit variable init order in LibraryManagerException + * [#2402] Fixing implicit variable initialization warnings in + AudioRtpSession + * [#2402] Revert atoi change, fixing codec list doubled entries + * [#2402] Fix gpointer to gint conversion + * [#2402] Fix pointer casting to integer different size warning in + codec list + * [#2402] Fix warning discarting qualifiers from pointer target + * [#2402] Fix gtk tree view assignement from incompatible type warning + * [#1669] Fix audio recording folder utf-8 non compatibility issue + * [#2414] Clean up debugs + * [#2414] Use transport set in iptoip Account and update it frm + preference + * [#2348] Use macro N_() to mark ui.xml strings as translatable + * [#2414] Rename getSipAddress/setSipAddress functions + * [#2407] Fix volume controls display + * [#2407] Fixes dialpad + * [#2383] Set ip to ip config when clicking apply button + * [#2404] Update call-to script - Maxime Chambreuil + * [#2405] Client handles unknown call in current state as well + * [#2383] Add DBUS signal to send IPtoIP local address and port as + string + * [#2383] Add Ip to IP config change apply call back + * Clonflict + * [#2402] Code cleanup + * [#2383] Do the same for IPtoIP (init localn ip with first in the + list) + * [#2383] Use first interface in the list if local addresss is not + defined + * [#2403] Clean up unuseful addresses/ports + * [#2403] Use the IP profile SIP port as global SIP port + * [#2383] Fix dbus_get_all_ip_interface warnings + * [#2383] Take into account sameAsLocal when loading published address + * [#2383] Tsake into account sameAsLocal option when saving published + address + * [#2383] Update local ip address in ip to ip config + * [#2383] Save ip 2 ip local port in config + * [#2406] Update toolbar at startup + * [#2284] Remove redefinition warnings + speex warnings + * [#2383] Fix security table in account config + * [#2383] Save ip 2 ip network interface parameters in config + * [#2403] Restore sip transport selector + * [#2383] Fix filling the Localt IP Address on account creation + * [#2383] Fix Gtk-Critical when checking STUN + * [#2383] Fix reopening account configuration display issue + * [#2383] Load IPtoIP local address and port in preference iptoiptab + * [#2383] Add LocalAddress and Localport in Preference IpToIp tab + * [#2403] Use the address and port associated to the account as often + as possible + * [#1753] Removed pjsip generated files + * [#1753] Removed remaining milenage lib references + * [#2383] Add _publishedSameasLocal variable in sipaccount + * [#2383] Add PUBLISHED_SAMEAS_LOCAL variable in config + * [#2383] Fix stun set active or not when opening config + * [#2181] Added RPM 64bits dbus patch + * [#2402] Code indentation + * [#2313] Force $(HOME).cache directory creation at startup + * [#2383] Separate network interface and published address in account + config + * [#2400] Change dbus service installation path to libdir + * [#2382] Move TLS related published address options in security tab + * [#2382] Indent accountconfigdialog.c + * [#2181] Install libdbus-c++ in $pkglib instead of $lib + * [#1753] Remove ILBC code and disable it by default in the configure + * [#1753] Remove milenage directory + * [#2382] Fix switching interaface instabilities + * [#2396] Save local ip in account creation wizard + * [#2284] Remove warning on hold + * [#2387] Fixes history searching and filtering + * [#1215] Add samplerate display in the GUI + * [#1663] Voicemail icon reflects voice messages + * [#2395] Fix account registration ( specifically with callcentric) + * [#2386] Strip "sip:" on incoming call, fixing history call back + * [#2181] Updated spec files + * [#1215] Display codec name in calltree instead of status bar + * [#2390] Move back nbCalls and stopStream higher in refuseCall + * [#2392] Fix ringtone during call in IAX + * [#2391] Stop audio streams when there is 0 calls only + * [#2391] Add debug when call state is not valid + * [#2390] Clear returns in IAXvoipLink::sendAudioFromMic() method + * [#2380] Fixing IncomingCallNotification not regular + * [#2339] Query conference at client startup + * [#2339] Working conference querying at startup + * [#2339] Add conference in call tree + * [#2339] Primitives to query conferences at client startup + * [#2320] Add account selection in history + * [#2355] Temporary solution: do not delete pointer when removing + account + * [#2380] Change algorithm in AudioRtp to trigger an + IncomingCallNotification + * [#2274] Comment sdebug in MainBuffer flush method + * [#2274] Add flushMain() in ManagerImpl::addStream + * [#2274] Add getBufferID() method in ring buffer + * [#2274] Fix warning, comment debug in ringbuffer's flush method + * [#2274] Use AudioLayer flushMain() and flushUrgent() in ALSA + * [#2274] Clean up unused variable warning + * [#2274] Protect minbudffer pointer on flushing + * [#2274] Fix playATone method which writing empty buffer in urgent + ringbuffer + * [#2274] Use audio layer flushUrgent and flushMain in createStreams + * [#2274] Use flush audio calls from audiolayer + * [#2274] Flush when peer answered call + * [#2375] Flush main buffer in iax when answering a call + * [#2274] Parse displayname using c++ string method + * [#2375] Flush main buffer when off holding calls + * [#2375] Flush main buffer mon RTP startup + * [#2376] Use now Pulseaudio module-cork-music-on-phone + * Updated OSC packaging + + -- Julien Bonjean <julien.bonjean@savoirfairelinux.com> Fri, 20 Nov 2009 14:00:02 -0500 + sflphone-common (0.9.7~beta~ppa1~karmic) karmic; urgency=low ** 0.9.7~beta~ppa1~karmic ** -- GitLab From 469f57f5fa5ee47ada048f3d4b3a19ce2c7485ec Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Mon, 23 Nov 2009 10:59:44 -0500 Subject: [PATCH 026/188] [#2466] Put null pointer protection test in gnome gui when dragging calls --- sflphone-client-gnome/src/contacts/calltree.c | 384 +++++++++--------- 1 file changed, 198 insertions(+), 186 deletions(-) diff --git a/sflphone-client-gnome/src/contacts/calltree.c b/sflphone-client-gnome/src/contacts/calltree.c index 5505e21d97..5f4c82e31b 100644 --- a/sflphone-client-gnome/src/contacts/calltree.c +++ b/sflphone-client-gnome/src/contacts/calltree.c @@ -1340,7 +1340,7 @@ static void drag_end_cb(GtkWidget * widget, GdkDragContext * context, gpointer d DEBUG(" selected_path %s, selected_call_id %s, selected_path_depth %i\n", selected_path, selected_call_id, selected_path_depth); DEBUG(" dragged path %s, dragged_call_id %s, dragged_path_depth %i\n", selected_path, selected_call_id, dragged_path_depth); - GtkTreeModel* model = (GtkTreeModel*)current_calls->store; + GtkTreeModel *model = (GtkTreeModel*)current_calls->store; GtkTreePath *path = gtk_tree_path_new_from_string(dragged_path); GtkTreePath *dpath = gtk_tree_path_new_from_string(dragged_path); GtkTreePath *spath = gtk_tree_path_new_from_string(selected_path); @@ -1355,166 +1355,184 @@ static void drag_end_cb(GtkWidget * widget, GdkDragContext * context, gpointer d conference_obj_t* conf; - if(selected_path_depth == 1) - { - if(dragged_path_depth == 1) - { + if(selected_path_depth == 1) { - if (selected_type == A_CALL && dragged_type == A_CALL) - { + if(dragged_path_depth == 1) { + + if (selected_type == A_CALL && dragged_type == A_CALL) { - if(gtk_tree_path_compare (dpath, spath) == 0) - { - // draged a call on itself - } - else - { - // dragged a single call on a single call - if(selected_call != NULL && dragged_call != NULL) - sflphone_join_participant(selected_call->_callID, dragged_call->_callID); - } - } - else if(selected_type == A_CALL && dragged_type == A_CONFERENCE) - { - // dragged a single call on a conference - selected_call->_confID = g_strdup(dragged_call_id); - sflphone_add_participant(selected_call_id, dragged_call_id); - } - else if(selected_type == A_CONFERENCE && dragged_type == A_CALL) - { - // dragged a conference on a single call (make no sence) - calltree_remove_conference(current_calls, selected_conf, NULL); - calltree_add_conference(current_calls, selected_conf); + if(gtk_tree_path_compare (dpath, spath) == 0) { + // draged a call on itself + } + else { + + // dragged a single call on a single call + if(selected_call != NULL && dragged_call != NULL) + sflphone_join_participant(selected_call->_callID, dragged_call->_callID); + } + } + else if(selected_type == A_CALL && dragged_type == A_CONFERENCE) { + // dragged a single call on a conference + if(!selected_call) { + DEBUG("Error: call dragged on a conference is null"); + return; + } + + selected_call->_confID = g_strdup(dragged_call_id); + sflphone_add_participant(selected_call_id, dragged_call_id); + } + else if(selected_type == A_CONFERENCE && dragged_type == A_CALL) { + + // dragged a conference on a single call + conf = selected_conf; + + calltree_remove_conference(current_calls, conf, NULL); + calltree_add_conference(current_calls, conf); + + + } + else if(selected_type == A_CONFERENCE && dragged_type == A_CONFERENCE){ + + // dragged a conference on a conference + if(gtk_tree_path_compare (dpath, spath) == 0) { + + if(!current_calls) { + DEBUG("Error while joining the same conference\n"); + return; + } + + DEBUG("Joined the same conference!\n"); + gtk_tree_view_expand_row(GTK_TREE_VIEW(current_calls->view), path, FALSE); + } + else { + + if(!selected_conf) { + DEBUG("Error: selected conference is null while joining 2 conference"); } - else if(selected_type == A_CONFERENCE && dragged_type == A_CONFERENCE) - { - // dragged a conference on a conference - if(gtk_tree_path_compare (dpath, spath) == 0) - { - DEBUG("Joined the same conference!\n"); - gtk_tree_view_expand_row(GTK_TREE_VIEW(current_calls->view), path, FALSE); - } - else - { - DEBUG("Joined two conference %s, %s!\n", dragged_path, selected_path); - sflphone_join_conference(selected_conf->_confID, dragged_conf->_confID); - } + + if(!dragged_conf) { + DEBUG("Error: dragged conference is null while joining 2 conference"); } + DEBUG("Joined two conference %s, %s!\n", dragged_path, selected_path); + sflphone_join_conference(selected_conf->_confID, dragged_conf->_confID); + } + } + // TODO: dragged a single call on a NULL element (should do nothing) // TODO: dragged a conference on a NULL element (should do nothing) + } + else { + + // dragged_path_depth == 2 + if (selected_type == A_CALL && dragged_type == A_CALL) { + + // TODO: dragged a call on a conference call + calltree_remove_call(current_calls, selected_call, NULL); + calltree_add_call(current_calls, selected_call, NULL); } - else // dragged_path_depth == 2 - { - if (selected_type == A_CALL && dragged_type == A_CALL) - { - // TODO: dragged a call on a conference call - calltree_remove_call(current_calls, selected_call, NULL); - calltree_add_call(current_calls, selected_call, NULL); - } - else if(selected_type == A_CONFERENCE && dragged_type == A_CALL) - { - // TODO: dragged a conference on a conference call - calltree_remove_conference(current_calls, selected_conf, NULL); - calltree_add_conference(current_calls, selected_conf); - } + else if(selected_type == A_CONFERENCE && dragged_type == A_CALL) { - // TODO: dragged a single call on a NULL element - // TODO: dragged a conference on a NULL element + // TODO: dragged a conference on a conference call + calltree_remove_conference(current_calls, selected_conf, NULL); + calltree_add_conference(current_calls, selected_conf); } + + // TODO: dragged a single call on a NULL element + // TODO: dragged a conference on a NULL element + } } - else // selected_path_depth == 2 - { + else { - if(dragged_path_depth == 1) - { + // selected_path_depth == 2 - if(selected_type == A_CALL && dragged_type == A_CALL) - { + if(dragged_path_depth == 1) { - // dragged a conference call on a call - sflphone_detach_participant(selected_call_id); + if(selected_type == A_CALL && dragged_type == A_CALL) { - if(selected_call != NULL && dragged_call != NULL) - sflphone_join_participant(selected_call->_callID, dragged_call->_callID); + // dragged a conference call on a call + sflphone_detach_participant(selected_call_id); - } - else if(selected_type == A_CALL && dragged_type == A_CONFERENCE) - { - // dragged a conference call on a conference - sflphone_detach_participant(selected_call_id); + if(selected_call != NULL && dragged_call != NULL) + sflphone_join_participant(selected_call->_callID, dragged_call->_callID); - if(selected_call != NULL && dragged_conf != NULL) - { - DEBUG("Adding a participant, since dragged call on a conference"); + } + else if(selected_type == A_CALL && dragged_type == A_CONFERENCE) { - sflphone_add_participant(selected_call_id, dragged_call_id); - } - } - else - { - // dragged a conference call on a NULL element - sflphone_detach_participant(selected_call_id); - } + // dragged a conference call on a conference + sflphone_detach_participant(selected_call_id); + + if(selected_call != NULL && dragged_conf != NULL) { + + DEBUG("Adding a participant, since dragged call on a conference"); + + sflphone_add_participant(selected_call_id, dragged_call_id); + } + } + else { + // dragged a conference call on a NULL element + sflphone_detach_participant(selected_call_id); } - else // dragged_path_depth == 2 - { - // dragged a conference call on another conference call (same conference) - // TODO: dragged a conference call on another conference call (different conference) + + } + else { - gtk_tree_path_up(path); + // dragged_path_depth == 2 + // dragged a conference call on another conference call (same conference) + // TODO: dragged a conference call on another conference call (different conference) + + gtk_tree_path_up(path); - gtk_tree_model_get_iter(GTK_TREE_MODEL(model), &parent_conference, path); + gtk_tree_model_get_iter(GTK_TREE_MODEL(model), &parent_conference, path); - gtk_tree_path_up(dpath); - gtk_tree_path_up(spath); + gtk_tree_path_up(dpath); + gtk_tree_path_up(spath); - if(gtk_tree_path_compare (dpath, spath) == 0) - { + if(gtk_tree_path_compare (dpath, spath) == 0) { - DEBUG("Dragged a call in the same conference"); - calltree_remove_call (current_calls, selected_call, NULL); - calltree_add_call (current_calls, selected_call, &parent_conference); - } - else - { - DEBUG("Dragged a conference call onto another conference call %s, %s", gtk_tree_path_to_string(dpath), gtk_tree_path_to_string(spath)); + DEBUG("Dragged a call in the same conference"); + calltree_remove_call (current_calls, selected_call, NULL); + calltree_add_call (current_calls, selected_call, &parent_conference); + } + else { - conf = NULL; + DEBUG("Dragged a conference call onto another conference call %s, %s", gtk_tree_path_to_string(dpath), gtk_tree_path_to_string(spath)); - val.g_type = 0; - if(gtk_tree_model_get_iter (model, &iter, dpath)) - { - DEBUG("we got an iter!"); - gtk_tree_model_get_value (model, &iter, COLUMN_ACCOUNT_PTR, &val); + conf = NULL; - conf = (conference_obj_t*)g_value_get_pointer(&val); - } - g_value_unset(&val); + val.g_type = 0; + if(gtk_tree_model_get_iter (model, &iter, dpath)) { + + DEBUG("we got an iter!"); + gtk_tree_model_get_value (model, &iter, COLUMN_ACCOUNT_PTR, &val); + + conf = (conference_obj_t*)g_value_get_pointer(&val); + } + g_value_unset(&val); - sflphone_detach_participant(selected_call_id); + sflphone_detach_participant(selected_call_id); - if(conf) - { - DEBUG("we got a conf!"); - sflphone_add_participant(selected_call_id, conf->_confID); - } - else - { - DEBUG("didn't find a conf!"); - } - } + if(conf) { + DEBUG("we got a conf!"); + sflphone_add_participant(selected_call_id, conf->_confID); + } + else { - // TODO: dragged a conference call on another conference call (different conference) - // TODO: dragged a conference call on a NULL element (same conference) - // TODO: dragged a conference call on a NULL element (different conference) + DEBUG("didn't find a conf!"); + } } + + // TODO: dragged a conference call on another conference call (different conference) + // TODO: dragged a conference call on a NULL element (same conference) + // TODO: dragged a conference call on a NULL element (different conference) + } + } } @@ -1542,75 +1560,69 @@ void drag_data_received_cb(GtkWidget *widget, GdkDragContext *context, gint x, g if(drop_path) { - gtk_tree_model_get_iter(tree_model, &iter, drop_path); - gtk_tree_model_get_value(tree_model, &iter, COLUMN_ACCOUNT_PTR, &val); + gtk_tree_model_get_iter(tree_model, &iter, drop_path); + gtk_tree_model_get_value(tree_model, &iter, COLUMN_ACCOUNT_PTR, &val); + + if(gtk_tree_model_iter_has_child(tree_model, &iter)) { - if(gtk_tree_model_iter_has_child(tree_model, &iter)) - { - DEBUG("DRAGGING ON A CONFERENCE"); - dragged_type = A_CONFERENCE; - } - else - { - DEBUG("DRAGGING ON A CALL"); - dragged_type = A_CALL; - } + DEBUG("DRAGGING ON A CONFERENCE"); + dragged_type = A_CONFERENCE; + } + else { - switch (position) - { - case GTK_TREE_VIEW_DROP_AFTER: - dragged_path = gtk_tree_path_to_string(drop_path); - dragged_path_depth = gtk_tree_path_get_depth(drop_path); - dragged_call_id = "NULL"; - dragged_call = NULL; - dragged_conf = NULL; - // DEBUG(" AFTER dragged_path %s, dragged_call_id %s, dragged_path_depth %i\n", dragged_path, dragged_call_id, dragged_path_depth); - break; + DEBUG("DRAGGING ON A CALL"); + dragged_type = A_CALL; + } - case GTK_TREE_VIEW_DROP_INTO_OR_AFTER: - dragged_path = gtk_tree_path_to_string(drop_path); - dragged_path_depth = gtk_tree_path_get_depth(drop_path); - if (dragged_type == A_CALL) - { - dragged_call_id = ((callable_obj_t*)g_value_get_pointer(&val))->_callID; - dragged_call = (callable_obj_t*)g_value_get_pointer(&val); - } - else - { - dragged_call_id = ((conference_obj_t*)g_value_get_pointer(&val))->_confID; - dragged_conf = (conference_obj_t*)g_value_get_pointer(&val); - } - // DEBUG(" INTO_OR_AFTER dragged_path %s, dragged_call_id %s, dragged_path_depth %i\n", dragged_path, dragged_call_id, dragged_path_depth); - break; + switch (position) { - case GTK_TREE_VIEW_DROP_BEFORE: - dragged_path = gtk_tree_path_to_string(drop_path); - dragged_path_depth = gtk_tree_path_get_depth(drop_path); - dragged_call_id = "NULL"; - dragged_call = NULL; - dragged_conf = NULL; - // DEBUG(" BEFORE dragged_path %s, dragged_call_id %s, dragged_path_depth %i\n", dragged_path, dragged_call_id, dragged_path_depth); - break; + case GTK_TREE_VIEW_DROP_AFTER: + dragged_path = gtk_tree_path_to_string(drop_path); + dragged_path_depth = gtk_tree_path_get_depth(drop_path); + dragged_call_id = "NULL"; + dragged_call = NULL; + dragged_conf = NULL; + break; - case GTK_TREE_VIEW_DROP_INTO_OR_BEFORE: - dragged_path = gtk_tree_path_to_string(drop_path); - dragged_path_depth = gtk_tree_path_get_depth(drop_path); - if (dragged_type == A_CALL) - { - dragged_call_id = ((callable_obj_t*)g_value_get_pointer(&val))->_callID; - dragged_call = (callable_obj_t*)g_value_get_pointer(&val); - } - else - { - dragged_call_id = ((conference_obj_t*)g_value_get_pointer(&val))->_confID; - dragged_conf = (conference_obj_t*)g_value_get_pointer(&val); - } - // DEBUG(" INTO_OR_BEFORE dragged_path %s, dragged_call_id %s, dragged_path_depth %i\n", dragged_path, dragged_call_id, dragged_path_depth); - break; + case GTK_TREE_VIEW_DROP_INTO_OR_AFTER: + dragged_path = gtk_tree_path_to_string(drop_path); + dragged_path_depth = gtk_tree_path_get_depth(drop_path); + if (dragged_type == A_CALL) { + + dragged_call_id = ((callable_obj_t*)g_value_get_pointer(&val))->_callID; + dragged_call = (callable_obj_t*)g_value_get_pointer(&val); + } + else { - default: - return; + dragged_call_id = ((conference_obj_t*)g_value_get_pointer(&val))->_confID; + dragged_conf = (conference_obj_t*)g_value_get_pointer(&val); } + break; + + case GTK_TREE_VIEW_DROP_BEFORE: + dragged_path = gtk_tree_path_to_string(drop_path); + dragged_path_depth = gtk_tree_path_get_depth(drop_path); + dragged_call_id = "NULL"; + dragged_call = NULL; + dragged_conf = NULL; + break; + + case GTK_TREE_VIEW_DROP_INTO_OR_BEFORE: + dragged_path = gtk_tree_path_to_string(drop_path); + dragged_path_depth = gtk_tree_path_get_depth(drop_path); + if (dragged_type == A_CALL) { + dragged_call_id = ((callable_obj_t*)g_value_get_pointer(&val))->_callID; + dragged_call = (callable_obj_t*)g_value_get_pointer(&val); + } + else { + dragged_call_id = ((conference_obj_t*)g_value_get_pointer(&val))->_confID; + dragged_conf = (conference_obj_t*)g_value_get_pointer(&val); + } + break; + + default: + return; + } } } -- GitLab From c1ae2ebaa0bb13fe41ec61b57744ce380482591e Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Mon, 23 Nov 2009 11:02:15 -0500 Subject: [PATCH 027/188] [#2464] IAX: send audio data only if nbSamples greater than zero nbSamples=0 end up in an arithmetic exception in libiax --- sflphone-common/src/iax/iaxvoiplink.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sflphone-common/src/iax/iaxvoiplink.cpp b/sflphone-common/src/iax/iaxvoiplink.cpp index f48d9a2c4e..b6377ea7f4 100644 --- a/sflphone-common/src/iax/iaxvoiplink.cpp +++ b/sflphone-common/src/iax/iaxvoiplink.cpp @@ -364,7 +364,7 @@ IAXVoIPLink::sendAudioFromMic (void) _mutexIAX.enterMutex(); // Make sure the session and the call still exists. - if (currentCall->getSession() && micDataEncoded != NULL) { + if (currentCall->getSession() && (micDataEncoded != NULL) && (nbSample_ > 0)) { if (iax_send_voice (currentCall->getSession(), currentCall->getFormat(), micDataEncoded, compSize, nbSample_) == -1) { _debug ("IAX: Error sending voice data.\n"); } -- GitLab From 85a4a8615a36b40e6bbd0c19c85829331cf03ca5 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Mon, 23 Nov 2009 16:27:57 -0500 Subject: [PATCH 028/188] [#2464] IAX: Fix occasional arythmetic exception when sending data from mic --- sflphone-common/src/iax/iaxvoiplink.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sflphone-common/src/iax/iaxvoiplink.cpp b/sflphone-common/src/iax/iaxvoiplink.cpp index f48d9a2c4e..b6377ea7f4 100644 --- a/sflphone-common/src/iax/iaxvoiplink.cpp +++ b/sflphone-common/src/iax/iaxvoiplink.cpp @@ -364,7 +364,7 @@ IAXVoIPLink::sendAudioFromMic (void) _mutexIAX.enterMutex(); // Make sure the session and the call still exists. - if (currentCall->getSession() && micDataEncoded != NULL) { + if (currentCall->getSession() && (micDataEncoded != NULL) && (nbSample_ > 0)) { if (iax_send_voice (currentCall->getSession(), currentCall->getFormat(), micDataEncoded, compSize, nbSample_) == -1) { _debug ("IAX: Error sending voice data.\n"); } -- GitLab From 475cecf45b61224f00f4f2ec5d0c6b060b2234b7 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Mon, 23 Nov 2009 16:29:46 -0500 Subject: [PATCH 029/188] [#2466] GUI-Gnome: Segfault when dragging a conference on a call Happen when as current_calls may change during gui manipulation --- sflphone-client-gnome/src/contacts/calltree.c | 247 ++++++++---------- 1 file changed, 116 insertions(+), 131 deletions(-) diff --git a/sflphone-client-gnome/src/contacts/calltree.c b/sflphone-client-gnome/src/contacts/calltree.c index 5505e21d97..89a48d47d0 100644 --- a/sflphone-client-gnome/src/contacts/calltree.c +++ b/sflphone-client-gnome/src/contacts/calltree.c @@ -1355,165 +1355,150 @@ static void drag_end_cb(GtkWidget * widget, GdkDragContext * context, gpointer d conference_obj_t* conf; - if(selected_path_depth == 1) - { - if(dragged_path_depth == 1) - { + if(selected_path_depth == 1) { - if (selected_type == A_CALL && dragged_type == A_CALL) - { + if(dragged_path_depth == 1) { - if(gtk_tree_path_compare (dpath, spath) == 0) - { - // draged a call on itself - } - else - { - // dragged a single call on a single call - if(selected_call != NULL && dragged_call != NULL) - sflphone_join_participant(selected_call->_callID, dragged_call->_callID); - } - } - else if(selected_type == A_CALL && dragged_type == A_CONFERENCE) - { - // dragged a single call on a conference - selected_call->_confID = g_strdup(dragged_call_id); - sflphone_add_participant(selected_call_id, dragged_call_id); - } - else if(selected_type == A_CONFERENCE && dragged_type == A_CALL) - { - // dragged a conference on a single call (make no sence) - calltree_remove_conference(current_calls, selected_conf, NULL); - calltree_add_conference(current_calls, selected_conf); + if (selected_type == A_CALL && dragged_type == A_CALL) { + if(gtk_tree_path_compare (dpath, spath) == 0) { + // draged a call on itself + } + else { + // dragged a single call on a single call + if(selected_call != NULL && dragged_call != NULL) + sflphone_join_participant(selected_call->_callID, dragged_call->_callID); + } + } + else if(selected_type == A_CALL && dragged_type == A_CONFERENCE) { + // dragged a single call on a conference + selected_call->_confID = g_strdup(dragged_call_id); + sflphone_add_participant(selected_call_id, dragged_call_id); + } + else if(selected_type == A_CONFERENCE && dragged_type == A_CALL) { - } - else if(selected_type == A_CONFERENCE && dragged_type == A_CONFERENCE) - { - // dragged a conference on a conference - if(gtk_tree_path_compare (dpath, spath) == 0) - { - DEBUG("Joined the same conference!\n"); - gtk_tree_view_expand_row(GTK_TREE_VIEW(current_calls->view), path, FALSE); - } - else - { - DEBUG("Joined two conference %s, %s!\n", dragged_path, selected_path); - sflphone_join_conference(selected_conf->_confID, dragged_conf->_confID); - } - } + conf = selected_conf; - // TODO: dragged a single call on a NULL element (should do nothing) - // TODO: dragged a conference on a NULL element (should do nothing) + // dragged a conference on a single call (make no sence) + calltree_remove_conference(current_calls, conf, NULL); + calltree_add_conference(current_calls, conf); } - else // dragged_path_depth == 2 - { - if (selected_type == A_CALL && dragged_type == A_CALL) - { - // TODO: dragged a call on a conference call - calltree_remove_call(current_calls, selected_call, NULL); - calltree_add_call(current_calls, selected_call, NULL); - } - else if(selected_type == A_CONFERENCE && dragged_type == A_CALL) - { - // TODO: dragged a conference on a conference call - calltree_remove_conference(current_calls, selected_conf, NULL); - calltree_add_conference(current_calls, selected_conf); - } - - // TODO: dragged a single call on a NULL element - // TODO: dragged a conference on a NULL element + else if(selected_type == A_CONFERENCE && dragged_type == A_CONFERENCE) { + // dragged a conference on a conference + if(gtk_tree_path_compare (dpath, spath) == 0) { + DEBUG("Joined the same conference!\n"); + gtk_tree_view_expand_row(GTK_TREE_VIEW(current_calls->view), path, FALSE); + } + else { + DEBUG("Joined two conference %s, %s!\n", dragged_path, selected_path); + sflphone_join_conference(selected_conf->_confID, dragged_conf->_confID); + } } - } - else // selected_path_depth == 2 - { - - if(dragged_path_depth == 1) - { - if(selected_type == A_CALL && dragged_type == A_CALL) - { + // TODO: dragged a single call on a NULL element (should do nothing) + // TODO: dragged a conference on a NULL element (should do nothing) - // dragged a conference call on a call - sflphone_detach_participant(selected_call_id); + } + else { + // dragged_path_depth == 2 - if(selected_call != NULL && dragged_call != NULL) - sflphone_join_participant(selected_call->_callID, dragged_call->_callID); + if (selected_type == A_CALL && dragged_type == A_CALL) { + // TODO: dragged a call on a conference call + calltree_remove_call(current_calls, selected_call, NULL); + calltree_add_call(current_calls, selected_call, NULL); + } + else if(selected_type == A_CONFERENCE && dragged_type == A_CALL) { + // TODO: dragged a conference on a conference call + conf = selected_conf; - } - else if(selected_type == A_CALL && dragged_type == A_CONFERENCE) - { - // dragged a conference call on a conference - sflphone_detach_participant(selected_call_id); + calltree_remove_conference(current_calls, conf, NULL); + calltree_add_conference(current_calls, conf); + } + + // TODO: dragged a single call on a NULL element + // TODO: dragged a conference on a NULL element + } + } + else { - if(selected_call != NULL && dragged_conf != NULL) - { - DEBUG("Adding a participant, since dragged call on a conference"); + // selected_path_depth == 2 - sflphone_add_participant(selected_call_id, dragged_call_id); - } - } - else - { - // dragged a conference call on a NULL element - sflphone_detach_participant(selected_call_id); - } + if(dragged_path_depth == 1) { + if(selected_type == A_CALL && dragged_type == A_CALL) { + + // dragged a conference call on a call + sflphone_detach_participant(selected_call_id); + + if(selected_call != NULL && dragged_call != NULL) + sflphone_join_participant(selected_call->_callID, dragged_call->_callID); + } - else // dragged_path_depth == 2 - { - // dragged a conference call on another conference call (same conference) - // TODO: dragged a conference call on another conference call (different conference) + else if(selected_type == A_CALL && dragged_type == A_CONFERENCE) { + // dragged a conference call on a conference + sflphone_detach_participant(selected_call_id); - gtk_tree_path_up(path); + if(selected_call != NULL && dragged_conf != NULL) { + DEBUG("Adding a participant, since dragged call on a conference"); - gtk_tree_model_get_iter(GTK_TREE_MODEL(model), &parent_conference, path); + sflphone_add_participant(selected_call_id, dragged_call_id); + } + } + else { + // dragged a conference call on a NULL element + sflphone_detach_participant(selected_call_id); + } + + } + else { + // dragged_path_depth == 2 + // dragged a conference call on another conference call (same conference) + // TODO: dragged a conference call on another conference call (different conference) - gtk_tree_path_up(dpath); - gtk_tree_path_up(spath); + gtk_tree_path_up(path); + + gtk_tree_model_get_iter(GTK_TREE_MODEL(model), &parent_conference, path); + + gtk_tree_path_up(dpath); + gtk_tree_path_up(spath); - if(gtk_tree_path_compare (dpath, spath) == 0) - { + if(gtk_tree_path_compare (dpath, spath) == 0) { - DEBUG("Dragged a call in the same conference"); - calltree_remove_call (current_calls, selected_call, NULL); - calltree_add_call (current_calls, selected_call, &parent_conference); - } - else - { - DEBUG("Dragged a conference call onto another conference call %s, %s", gtk_tree_path_to_string(dpath), gtk_tree_path_to_string(spath)); + DEBUG("Dragged a call in the same conference"); + calltree_remove_call (current_calls, selected_call, NULL); + calltree_add_call (current_calls, selected_call, &parent_conference); + } + else { + DEBUG("Dragged a conference call onto another conference call %s, %s", gtk_tree_path_to_string(dpath), gtk_tree_path_to_string(spath)); - conf = NULL; + conf = NULL; - val.g_type = 0; - if(gtk_tree_model_get_iter (model, &iter, dpath)) - { - DEBUG("we got an iter!"); - gtk_tree_model_get_value (model, &iter, COLUMN_ACCOUNT_PTR, &val); + val.g_type = 0; + if(gtk_tree_model_get_iter (model, &iter, dpath)) { + DEBUG("we got an iter!"); + gtk_tree_model_get_value (model, &iter, COLUMN_ACCOUNT_PTR, &val); - conf = (conference_obj_t*)g_value_get_pointer(&val); - } - g_value_unset(&val); + conf = (conference_obj_t*)g_value_get_pointer(&val); + } + g_value_unset(&val); - sflphone_detach_participant(selected_call_id); + sflphone_detach_participant(selected_call_id); - if(conf) - { - DEBUG("we got a conf!"); - sflphone_add_participant(selected_call_id, conf->_confID); - } - else - { - DEBUG("didn't find a conf!"); - } - } + if(conf) { + DEBUG("we got a conf!"); + sflphone_add_participant(selected_call_id, conf->_confID); + } + else { + DEBUG("didn't find a conf!"); + } + } - // TODO: dragged a conference call on another conference call (different conference) - // TODO: dragged a conference call on a NULL element (same conference) - // TODO: dragged a conference call on a NULL element (different conference) - } + // TODO: dragged a conference call on another conference call (different conference) + // TODO: dragged a conference call on a NULL element (same conference) + // TODO: dragged a conference call on a NULL element (different conference) + } } -- GitLab From 56a8b534b38f9eaf16bd4d317012962547ff568e Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Tue, 24 Nov 2009 11:49:55 -0500 Subject: [PATCH 030/188] [#2471] Handle INFO sip message sending a 200 OK --- sflphone-common/src/sip/sipvoiplink.cpp | 27 +++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp index 7d66305764..d4d35395af 100644 --- a/sflphone-common/src/sip/sipvoiplink.cpp +++ b/sflphone-common/src/sip/sipvoiplink.cpp @@ -2852,13 +2852,36 @@ void call_on_forked (pjsip_inv_session *inv, pjsip_event *e) void call_on_tsx_changed (pjsip_inv_session *inv, pjsip_transaction *tsx, pjsip_event *e) { - _debug ("call_on_tsx_changed to state %s\n", transactionStateMap[tsx->state]); + _debug("call_on_tsx_changed to state %s\n", transactionStateMap[tsx->state]); if (tsx->role==PJSIP_ROLE_UAS && tsx->state==PJSIP_TSX_STATE_TRYING && - pjsip_method_cmp (&tsx->method, &pjsip_refer_method) ==0) { + pjsip_method_cmp (&tsx->method, &pjsip_refer_method) ==0) { /** Handle the refer method **/ onCallTransfered (inv, e->body.tsx_state.src.rdata); } + else if (tsx->role==PJSIP_ROLE_UAS && tsx->state==PJSIP_TSX_STATE_TRYING) { + + if (e && e->body.rx_msg.rdata) { + + pjsip_tx_data* t_data; + pjsip_rx_data* r_data = e->body.rx_msg.rdata; + + if(r_data->msg_info.msg->line.req.method.id == PJSIP_OTHER_METHOD) { + + _debug("%s\n", pjsip_rx_data_get_info(r_data)); + // _debug("%s\n", r_data->msg_info.msg_buf); + + + pjsip_dlg_create_response (inv->dlg, r_data, PJSIP_SC_OK, NULL, &t_data); + + pjsip_dlg_send_response(inv->dlg, tsx, t_data); + + // pjsip_dlg_respond + } + } + + } + } void regc_cb (struct pjsip_regc_cbparam *param) -- GitLab From f09c3d6936d7e44fa7b69103e9b1a27664be55c2 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Tue, 24 Nov 2009 16:18:07 -0500 Subject: [PATCH 031/188] [#2472] Implements Mainbuffer's stateInfo method, clean up debugs --- sflphone-common/src/audio/mainbuffer.cpp | 122 +++++++++++++---------- sflphone-common/src/audio/ringbuffer.cpp | 36 +------ sflphone-common/src/audio/ringbuffer.h | 3 +- sflphone-common/src/conference.cpp | 8 +- sflphone-common/src/managerimpl.cpp | 15 ++- 5 files changed, 91 insertions(+), 93 deletions(-) diff --git a/sflphone-common/src/audio/mainbuffer.cpp b/sflphone-common/src/audio/mainbuffer.cpp index 3f2751b6ba..46bec0f751 100644 --- a/sflphone-common/src/audio/mainbuffer.cpp +++ b/sflphone-common/src/audio/mainbuffer.cpp @@ -39,14 +39,12 @@ void MainBuffer::setInternalSamplingRate (int sr) ost::MutexLock guard (_mutex); if (sr != _internalSamplingRate) { - // flushAllBuffers(); + _internalSamplingRate = sr; flushAllBuffers(); } - - // flushAllBuffers(); } CallIDSet* MainBuffer::getCallIDSet (CallID call_id) @@ -63,7 +61,7 @@ CallIDSet* MainBuffer::getCallIDSet (CallID call_id) bool MainBuffer::createCallIDSet (CallID set_id) { - _debug ("---- MainBuffer::createCallIDSet %s\n", set_id.c_str()); + CallIDSet* newCallIDSet = new CallIDSet; @@ -77,21 +75,18 @@ bool MainBuffer::createCallIDSet (CallID set_id) bool MainBuffer::removeCallIDSet (CallID set_id) { - _debug ("---- MainBuffer::removeCallIDSet %s\n", set_id.c_str()); - - CallIDSet* callid_set = getCallIDSet (set_id); if (callid_set != NULL) { if (_callIDMap.erase (set_id) != 0) { - _debug (" callid set %s erased!\n", set_id.c_str()); + // _debug (" callid set %s erased!\n", set_id.c_str()); return true; } else { - _debug (" error while removing callid set %s!\n", set_id.c_str()); + _debug ("removeCallIDSet error while removing callid set %s!\n", set_id.c_str()); return false; } } else { - _debug (" callid set %s does not exist!\n", set_id.c_str()); + _debug ("removeCallIDSet error callid set %s does not exist!\n", set_id.c_str()); return false; } @@ -99,7 +94,6 @@ bool MainBuffer::removeCallIDSet (CallID set_id) void MainBuffer::addCallIDtoSet (CallID set_id, CallID call_id) { - _debug ("---- MainBuffer::addCallIDtoSet %s in %s\n", set_id.c_str(), call_id.c_str()); CallIDSet* callid_set = getCallIDSet (set_id); callid_set->insert (call_id); @@ -108,18 +102,17 @@ void MainBuffer::addCallIDtoSet (CallID set_id, CallID call_id) void MainBuffer::removeCallIDfromSet (CallID set_id, CallID call_id) { - _debug ("---- MainBuffer::removeCallIDfromSet element %s from %s\n", call_id.c_str(), set_id.c_str()); CallIDSet* callid_set = getCallIDSet (set_id); if (callid_set != NULL) { if (callid_set->erase (call_id) != 0) { - _debug (" callid %s erased from set %s!\n", call_id.c_str(), set_id.c_str()); + // _debug (" callid %s erased from set %s!\n", call_id.c_str(), set_id.c_str()); } else { - _debug (" error while removing callid %s from set %s!\n", call_id.c_str(), set_id.c_str()); + _debug ("removeCallIDfromSet error while removing callid %s from set %s!\n", call_id.c_str(), set_id.c_str()); } } else { - _debug (" callid set %s does not exist!\n", set_id.c_str()); + _debug ("removeCallIDfromSet error callid set %s does not exist!\n", set_id.c_str()); } } @@ -140,8 +133,6 @@ RingBuffer* MainBuffer::getRingBuffer (CallID call_id) RingBuffer* MainBuffer::createRingBuffer (CallID call_id) { - _debug ("---- MainBuffer::createRingBuffer callid %s\n", call_id.c_str()); - RingBuffer* newRingBuffer = new RingBuffer (SIZEBUF, call_id); _ringBufferMap.insert (pair<CallID, RingBuffer*> (call_id, newRingBuffer)); @@ -152,21 +143,18 @@ RingBuffer* MainBuffer::createRingBuffer (CallID call_id) bool MainBuffer::removeRingBuffer (CallID call_id) { - - _debug ("---- MainBuffer::removeRingBuffer call_id %s\n", call_id.c_str()); - RingBuffer* ring_buffer = getRingBuffer (call_id); if (ring_buffer != NULL) { if (_ringBufferMap.erase (call_id) != 0) { - _debug (" ringbuffer %s removed!\n", call_id.c_str()); + // _debug ("removeRingBuffer ringbuffer %s removed!\n", call_id.c_str()); return true; } else { - _debug (" error while deleting ringbuffer %s!\n", call_id.c_str()); + _debug ("removeRingBuffer error while deleting ringbuffer %s!\n", call_id.c_str()); return false; } } else { - _debug (" error ringbuffer %s does not exist!\n", call_id.c_str()); + _debug ("removeRingBuffer error ringbuffer %s does not exist!\n", call_id.c_str()); return true; } } @@ -177,8 +165,6 @@ void MainBuffer::bindCallID (CallID call_id1, CallID call_id2) ost::MutexLock guard (_mutex); - _debug ("---- MainBuffer::bindCallID %s and callid %s\n", call_id1.c_str(), call_id2.c_str()); - RingBuffer* ring_buffer; CallIDSet* callid_set; @@ -210,8 +196,6 @@ void MainBuffer::unBindCallID (CallID call_id1, CallID call_id2) ost::MutexLock guard (_mutex); - _debug ("---- MainBuffer::unBindCallID %s and callid %s\n", call_id1.c_str(), call_id2.c_str()); - removeCallIDfromSet (call_id1, call_id2); removeCallIDfromSet (call_id2, call_id1); @@ -261,7 +245,6 @@ void MainBuffer::unBindAll (CallID call_id) CallIDSet::iterator iter_set = temp_set.begin(); - _debug ("MainBuffer::unBindAll\n"); while (iter_set != temp_set.end()) { CallID call_id_in_set = *iter_set; @@ -369,12 +352,10 @@ int MainBuffer::getData (void *buffer, int toCopy, unsigned short volume, CallID int MainBuffer::getDataByID (void *buffer, int toCopy, unsigned short volume, CallID call_id, CallID reader_id) { - // _debug("MainBuffer::getDataByID in buffer %s by %s \n", call_id.c_str(), reader_id.c_str()); - RingBuffer* ring_buffer = getRingBuffer (call_id); if (ring_buffer == NULL) { - // _debug("Output RingBuffer ID: \"%s\" does not exist!\n", call_id.c_str()); + return 0; } @@ -402,7 +383,6 @@ int MainBuffer::availForGet (CallID call_id) if (callid_set->size() == 1) { CallIDSet::iterator iter_id = callid_set->begin(); - // _debug("MainBuffer::availForGet availForGetByID(%s,%s)\n", (*iter_id).c_str(), call_id.c_str()); if ( (call_id != default_id) && (*iter_id == call_id)) { _debug ("This problem should not occur since we have %i element\n", (int) callid_set->size()); @@ -434,7 +414,7 @@ int MainBuffer::availForGetByID (CallID call_id, CallID reader_id) if ( (call_id != default_id) && (reader_id == call_id)) { _debug ("**********************************************************************\n"); - _debug ("Error an RTP session ring buffer is not supposed to have a readpointer on tiself\n"); + _debug ("Error an RTP session ring buffer is not supposed to have a readpointer on itself\n"); } RingBuffer* ringbuffer = getRingBuffer (call_id); @@ -466,11 +446,11 @@ int MainBuffer::discard (int toDiscard, CallID call_id) if (callid_set->size() == 1) { + CallIDSet::iterator iter_id = callid_set->begin(); - // _debug("Discard Data in \"%s\" RingBuffer for \"%s\" ReaderPointer\n",(*iter_id).c_str(),call_id.c_str()); return discardByID (toDiscard, *iter_id, call_id); } else { - // _debug("CallIDSet with ID: \"%s\" is a conference!\n", call_id.c_str()); + CallIDSet::iterator iter_id; for (iter_id = callid_set->begin(); iter_id != callid_set->end(); iter_id++) { @@ -501,8 +481,6 @@ void MainBuffer::flush (CallID call_id) { ost::MutexLock guard (_mutex); - // _debug("MainBuffer::flush\n"); - CallIDSet* callid_set = getCallIDSet (call_id); if (callid_set == NULL) @@ -516,7 +494,7 @@ void MainBuffer::flush (CallID call_id) CallIDSet::iterator iter_id = callid_set->begin(); flushByID (*iter_id, call_id); } else { - // _debug("CallIDSet with ID: \"%s\" is a conference!\n", call_id.c_str()); + CallIDSet::iterator iter_id; for (iter_id = callid_set->begin(); iter_id != callid_set->end(); iter_id++) { @@ -548,12 +526,10 @@ void MainBuffer::flushByID (CallID call_id, CallID reader_id) void MainBuffer::flushAllBuffers() { - // _debug("-------------------------- flushAllBuffers()\n"); RingBufferMap::iterator iter_buffer = _ringBufferMap.begin(); while (iter_buffer != _ringBufferMap.end()) { - // _debug("-------------------------- flushing: %s\n",iter_buffer->second->getBufferId().c_str()); iter_buffer->second->flushAll(); @@ -566,27 +542,67 @@ void MainBuffer::stateInfo() { _debug ("MainBuffer state info\n"); - CallIDMap::iterator iter_map = _callIDMap.begin(); + CallIDMap::iterator iter_call = _callIDMap.begin(); + + // print each call and bound call ids + while(iter_call != _callIDMap.end()) { + + std::string dbg_str(" Call: "); + dbg_str.append(std::string(iter_call->first.c_str())); + dbg_str.append(std::string(" is bound to: ")); + + CallIDSet* call_id_set = (CallIDSet*)iter_call->second; - while (iter_map != _callIDMap.end()) { - CallIDSet* id_set = getCallIDSet (iter_map->first); + CallIDSet::iterator iter_call_id = call_id_set->begin(); + + while (iter_call_id != call_id_set->end()) { + + dbg_str.append (std::string (*iter_call_id)); + dbg_str.append (std::string (", ")); + + iter_call_id++; + } + + _debug ("%s\n", dbg_str.c_str()); + + iter_call++; + } + + // Print ringbuffers ids and readpointers + RingBufferMap::iterator iter_buffer = _ringBufferMap.begin(); + + while (iter_buffer != _ringBufferMap.end()) { + + RingBuffer* rbuffer = (RingBuffer*)iter_buffer->second; + ReadPointer* rpointer = NULL; std::string dbg_str (" Buffer: "); - dbg_str.append (string (iter_map->first.c_str())); - dbg_str.append (string (" bound to ")); + dbg_str.append (std::string (iter_buffer->first.c_str())); + dbg_str.append (std::string (" as read pointer: ")); + + if(rbuffer) + rpointer = rbuffer->getReadPointerList(); + + if(rpointer) { - if (id_set != NULL) { - CallIDSet::iterator iter_set = id_set->begin(); + ReadPointer::iterator iter_pointer = rpointer->begin(); + + while(iter_pointer != rpointer->end()) { - while (iter_set != id_set->end()) { - dbg_str.append (string (iter_set->c_str())); + dbg_str.append (string (iter_pointer->first.c_str())); dbg_str.append (string (", ")); - } - } - _debug ("%s\n", dbg_str.c_str()); + iter_pointer++; + } + } - iter_map++; + _debug ("%s\n", dbg_str.c_str()); + + iter_buffer++; } + + + + } diff --git a/sflphone-common/src/audio/ringbuffer.cpp b/sflphone-common/src/audio/ringbuffer.cpp index 0eb146f397..22bfd53168 100644 --- a/sflphone-common/src/audio/ringbuffer.cpp +++ b/sflphone-common/src/audio/ringbuffer.cpp @@ -54,7 +54,6 @@ RingBuffer::~RingBuffer() void RingBuffer::flush (CallID call_id) { - _debug ("flush: reinit \"%s\" readpointer in \"%s\" ringbuffer\n", call_id.c_str(), buffer_id.c_str()); storeReadPointer (mEnd, call_id); } @@ -62,14 +61,11 @@ RingBuffer::flush (CallID call_id) void RingBuffer::flushAll () { - // _debug("flushall: reinit all readpointer in \"%s\" ringbuffer\n", buffer_id.c_str()); - - // _debug("------------------------------ flushAll() in \"%s\" ringbuffer\n", buffer_id.c_str()); ReadPointer::iterator iter_pointer = _readpointer.begin(); while (iter_pointer != _readpointer.end()) { - // _debug("------------------------------ reinit readpointer %s\n", iter_pointer->first.c_str()); + iter_pointer->second = mEnd; iter_pointer++; @@ -89,8 +85,6 @@ RingBuffer::putLen() int length = (mEnd + mBufferSize - mStart) % mBufferSize; - // _debug("RingBuffer::putLen length %i\n", length); - // _debug(" *RingBuffer::putLen: buffer_id %s, mStart %i, mEnd %i, length %i, buffersie %i\n", buffer_id.c_str(), mStart, mEnd, length, mBufferSize); return length; } @@ -121,19 +115,9 @@ RingBuffer::getReadPointer (CallID call_id) if (getNbReadPointer() == 0) return 0; - // _debug("RingBuffer::getReadPointer() id %s\n", call_id.c_str()); - ReadPointer::iterator iter = _readpointer.find (call_id); if (iter == _readpointer.end()) { - // _debug(" RingBuffer::getReadPointer Error read pointer size: %i\n", _readpointer.size()); - // _debug(" RingBuffer::getReadPointer Error read pointer \"%s\" is null\n", call_id.c_str()); - ReadPointer::iterator iter2; - - for (iter2 = _readpointer.begin(); iter2 != _readpointer.end(); iter2++) { - // x_debug(" RingBuffer::getReadPointer list avail pointer \"%s\"\n", iter2->first.c_str()); - } - return 0; } else { return iter->second; @@ -169,7 +153,6 @@ RingBuffer::storeReadPointer (int pointer_value, CallID call_id) if (iter != _readpointer.end()) { iter->second = pointer_value; - // _debug("store read pointer call_id %s, size: %i \n",call_id.c_str(), _readpointer.size()); } else { _debug ("storeReadPointer: Cannot find \"%s\" readPointer in \"%s\" ringbuffer\n", call_id.c_str(), buffer_id.c_str()); } @@ -181,10 +164,7 @@ void RingBuffer::createReadPointer (CallID call_id) { - _debug ("---- createReadPointer ringbuffer_id %s, call_id %s\n", buffer_id.c_str(), call_id.c_str()); - _readpointer.insert (pair<CallID, int> (call_id, mEnd)); - _debug ("---- createReadPointer ringbuffer_id %s, size %i\n", buffer_id.c_str(), (int) _readpointer.size()); } @@ -193,10 +173,7 @@ void RingBuffer::removeReadPointer (CallID call_id) { - _debug ("---- removeReadPointer ringbuffer_id %s, call_id %s\n", buffer_id.c_str(), call_id.c_str()); - _readpointer.erase (call_id); - _debug ("---- removeReadPointer ringbuffer_id %s, size %i\n", buffer_id.c_str(), (int) _readpointer.size()); } @@ -227,8 +204,6 @@ int RingBuffer::AvailForPut() { // Always keep 4 bytes safe (?) - // z_debug("RingBuffer::AvailForPut: putLen %i\n", putLen()); - // _debug("RingBuffer::AvailForPut %s --------------------\n", buffer_id.c_str()); return (mBufferSize-4) - putLen(); } @@ -241,9 +216,8 @@ RingBuffer::Put (void* buffer, int toCopy, unsigned short volume) int block; int copied; int pos; - // _debug("RingBuffer::Put buffer_id %s, call_id %s --------------------\n", buffer_id.c_str(), call_id.c_str()); + int len = putLen(); - // _debug(" RingBuffer::Put bufferid %s, putlen %i\n", buffer_id.c_str(), len); if (toCopy > (mBufferSize-4) - len) toCopy = (mBufferSize-4) - len; @@ -302,7 +276,6 @@ int RingBuffer::AvailForGet (CallID call_id) { // Used space - // _debug("RingBuffer::AvailForGet buffer_id %s, call_id %s --------------------\n", buffer_id.c_str(), call_id.c_str()); return getLen (call_id); } @@ -323,11 +296,8 @@ RingBuffer::Get (void *buffer, int toCopy, unsigned short volume, CallID call_id int copied; - // _debug("RingBuffer::Get buffer_id %s, call_id %s --------------------\n", buffer_id.c_str(), call_id.c_str()); int len = getLen (call_id); - // _debug(" RingBuffer::Get bufferid %s, getlen %i\n", buffer_id.c_str(), len); - if (toCopy > len) toCopy = len; @@ -375,7 +345,7 @@ RingBuffer::Get (void *buffer, int toCopy, unsigned short volume, CallID call_id int RingBuffer::Discard (int toDiscard, CallID call_id) { - // _debug("RingBuffer::Discard buffer_id %s, call_id %s --------------------\n", buffer_id.c_str(), call_id.c_str()); + int len = getLen (call_id); int mStart = getReadPointer (call_id); diff --git a/sflphone-common/src/audio/ringbuffer.h b/sflphone-common/src/audio/ringbuffer.h index ac559e98c1..96871f825d 100644 --- a/sflphone-common/src/audio/ringbuffer.h +++ b/sflphone-common/src/audio/ringbuffer.h @@ -57,9 +57,10 @@ class RingBuffer { void flushAll(); - int getReadPointer(CallID call_id = default_id); + ReadPointer* getReadPointerList() { return &_readpointer; } + int getSmallestReadPointer(); void storeReadPointer(int pointer_value, CallID call_id = default_id); diff --git a/sflphone-common/src/conference.cpp b/sflphone-common/src/conference.cpp index 6266a30323..4149e29caf 100644 --- a/sflphone-common/src/conference.cpp +++ b/sflphone-common/src/conference.cpp @@ -71,7 +71,7 @@ void Conference::setState (ConferenceState state) void Conference::add (CallID participant_id) { - _debug ("---- Conference:: add participant %s\n", participant_id.c_str()); + _debug ("Conference:: add participant %s\n", participant_id.c_str()); _participants.insert (participant_id); @@ -82,7 +82,7 @@ void Conference::add (CallID participant_id) void Conference::remove (CallID participant_id) { - _debug ("---- Conference::remove participant %s\n", participant_id.c_str()); + _debug ("Conference::remove participant %s\n", participant_id.c_str()); _participants.erase (participant_id); @@ -100,7 +100,7 @@ void Conference::bindParticipant (CallID participant_id) if (participant_id != (*iter)) { - _debug ("---- Conference:: bind callid %s with %s in conference add\n", participant_id.c_str(), (*iter).c_str()); + // _debug ("---- Conference:: bind callid %s with %s in conference add\n", participant_id.c_str(), (*iter).c_str()); Manager::instance().getAudioDriver()->getMainBuffer()->bindCallID (participant_id, *iter); } @@ -109,7 +109,7 @@ void Conference::bindParticipant (CallID participant_id) } - _debug ("---- Conference::bind callid %s with default_id in conference add\n", participant_id.c_str()); + // _debug ("---- Conference::bind callid %s with default_id in conference add\n", participant_id.c_str()); Manager::instance().getAudioDriver()->getMainBuffer()->bindCallID (participant_id); diff --git a/sflphone-common/src/managerimpl.cpp b/sflphone-common/src/managerimpl.cpp index 464c079ba6..c2ab357519 100644 --- a/sflphone-common/src/managerimpl.cpp +++ b/sflphone-common/src/managerimpl.cpp @@ -1246,6 +1246,9 @@ ManagerImpl::joinParticipant (const CallID& call_id1, const CallID& call_id2) // switchCall(conf->getConfID()); + if(_audiodriver) + _audiodriver->getMainBuffer()->stateInfo(); + } @@ -1346,6 +1349,9 @@ ManagerImpl::removeParticipant (const CallID& call_id) } + if(_audiodriver) + _audiodriver->getMainBuffer()->stateInfo(); + } @@ -1459,7 +1465,7 @@ ManagerImpl::addStream (const CallID& call_id) if (iter != _conferencemap.end()) { Conference* conf = iter->second; - _debug (" addStream: bind call %s to conference %s\n", call_id.c_str(), conf->getConfID().c_str()); + // _debug (" addStream: bind call %s to conference %s\n", call_id.c_str(), conf->getConfID().c_str()); conf->bindParticipant (call_id); @@ -1481,7 +1487,7 @@ ManagerImpl::addStream (const CallID& call_id) } else { - _debug (" addStream: bind call %s to main\n", call_id.c_str()); + // _debug (" addStream: bind call %s to main\n", call_id.c_str()); // bind to main getAudioDriver()->getMainBuffer()->bindCallID (call_id); @@ -1491,6 +1497,9 @@ ManagerImpl::addStream (const CallID& call_id) _audiodriver->flushMain(); } + + if(_audiodriver) + _audiodriver->getMainBuffer()->stateInfo(); } void @@ -1504,6 +1513,8 @@ ManagerImpl::removeStream (const CallID& call_id) removeParticipant (call_id); } + if(_audiodriver) + _audiodriver->getMainBuffer()->stateInfo(); } //THREAD=Main -- GitLab From c7adf862e96c8dd30320b9318aed210c2ce83061 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Tue, 24 Nov 2009 18:03:45 -0500 Subject: [PATCH 032/188] [#2471] Test for INFO in message request when receiving DTMF --- sflphone-common/src/sip/sipvoiplink.cpp | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp index d4d35395af..0255d7e35b 100644 --- a/sflphone-common/src/sip/sipvoiplink.cpp +++ b/sflphone-common/src/sip/sipvoiplink.cpp @@ -2868,20 +2868,20 @@ void call_on_tsx_changed (pjsip_inv_session *inv, pjsip_transaction *tsx, pjsip_ if(r_data->msg_info.msg->line.req.method.id == PJSIP_OTHER_METHOD) { - _debug("%s\n", pjsip_rx_data_get_info(r_data)); - // _debug("%s\n", r_data->msg_info.msg_buf); + std::string method_name = "INFO"; + std::string request = r_data->msg_info.msg->line.req.method.name.ptr; - - pjsip_dlg_create_response (inv->dlg, r_data, PJSIP_SC_OK, NULL, &t_data); + if (request.find (method_name) != (size_t)-1) { + + _debug("%s\n", pjsip_rx_data_get_info(r_data)); + + pjsip_dlg_create_response (inv->dlg, r_data, PJSIP_SC_OK, NULL, &t_data); - pjsip_dlg_send_response(inv->dlg, tsx, t_data); - - // pjsip_dlg_respond + pjsip_dlg_send_response(inv->dlg, tsx, t_data); + } } } - } - } void regc_cb (struct pjsip_regc_cbparam *param) -- GitLab From e7523767c13ae924ddd56465339f8d11d0abc997 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Tue, 24 Nov 2009 18:32:23 -0500 Subject: [PATCH 033/188] [#2471] No _audiortp variable anymore in sdipvoiplink --- sflphone-common/src/sip/sipvoiplink.cpp | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp index 6ed46e39b6..66dccc4b81 100644 --- a/sflphone-common/src/sip/sipvoiplink.cpp +++ b/sflphone-common/src/sip/sipvoiplink.cpp @@ -805,11 +805,6 @@ SIPVoIPLink::hangup (const CallID& id) return false; } - // Release RTP thread - if (Manager::instance().isCurrentCall (id)) { - _debug ("* SIP Info: Stopping AudioRTP for hangup\n"); - _audiortp->stop(); - } // User hangup current call. Notify peer status = pjsip_inv_end_session (call->getInvSession(), 404, NULL, &tdata); @@ -858,12 +853,6 @@ SIPVoIPLink::peerHungup (const CallID& id) return false; } - // Release RTP thread - if (Manager::instance().isCurrentCall (id)) { - _debug ("* SIP Info: Stopping AudioRTP for hangup\n"); - _audiortp->stop(); - } - // User hangup current call. Notify peer status = pjsip_inv_end_session (call->getInvSession(), 404, NULL, &tdata); -- GitLab From a6df99fe5c82a044272070f71ae394193f1def3f Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Wed, 25 Nov 2009 11:11:56 -0500 Subject: [PATCH 034/188] [#2475] Fix IP2IP profile appearing in client's configuration window --- sflphone-common/src/managerimpl.cpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/sflphone-common/src/managerimpl.cpp b/sflphone-common/src/managerimpl.cpp index c2ab357519..a2a2f17f74 100644 --- a/sflphone-common/src/managerimpl.cpp +++ b/sflphone-common/src/managerimpl.cpp @@ -3515,7 +3515,7 @@ ManagerImpl::getAccountList() iter = _accountMap.begin (); while (iter != _accountMap.end()) { - if (iter->second != NULL) { + if (iter->second != NULL && iter->first != IP2IP_PROFILE) { //_debug("PUSHING BACK %s\n", iter->first.c_str()); v.push_back (iter->first.data()); } @@ -3532,13 +3532,11 @@ ManagerImpl::getAccountList() // This account has not been loaded, so we ignore it if ( (iter=_accountMap.find (account_order[i])) != _accountMap.end()) { // If the account is valid - if (iter->second != NULL) { + if (iter->second != NULL && iter->first != IP2IP_PROFILE) { v.push_back (iter->first.data ()); } } } - - } return v; -- GitLab From 0f88414ba5a43f27aa1f76af66887301ea4add88 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Fri, 27 Nov 2009 17:13:18 -0500 Subject: [PATCH 035/188] [#2505] Associate call to account before calling setCallAudioLocal --- sflphone-common/src/sip/sipvoiplink.cpp | 46 +++++++++++++++---------- 1 file changed, 27 insertions(+), 19 deletions(-) diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp index 0255d7e35b..2acd4ca5ff 100644 --- a/sflphone-common/src/sip/sipvoiplink.cpp +++ b/sflphone-common/src/sip/sipvoiplink.cpp @@ -3117,6 +3117,8 @@ mod_on_rx_request (pjsip_rx_data *rdata) /************************************************************************************************/ + _debug("create a new call\n"); + // Generate a new call ID for the incoming call! id = Manager::instance().getNewCallID(); @@ -3128,12 +3130,15 @@ mod_on_rx_request (pjsip_rx_data *rdata) return false; } + + std::string addrToUse, addrSdp ="0.0.0.0"; pjsip_tpselector *tp; account = dynamic_cast<SIPAccount *> (Manager::instance().getAccount (account_id)); if (account != NULL) { + // May use the published address as well addrToUse = account->getLocalAddress (); account->isStunEnabled () ? addrSdp = account->getPublishedAddress () : addrSdp = account->getLocalAddress (); @@ -3141,30 +3146,15 @@ mod_on_rx_request (pjsip_rx_data *rdata) link->init_transport_selector (account->getAccountTransport (), &tp); } - if (addrToUse == "0.0.0.0") { + if (addrToUse == "0.0.0.0") { link->loadSIPLocalIP (&addrToUse); } - if (addrSdp == "0.0.0.0") { - addrSdp = addrToUse; - } - - // Have to do some stuff with the SDP - // Set the codec map, IP, peer number and so on... for the SIPCall object - setCallAudioLocal (call, addrToUse); - // We retrieve the remote sdp offer in the rdata struct to begin the negociation - call->getLocalSDP()->set_ip_address (addrSdp); - - get_remote_sdp_from_offer (rdata, &r_sdp); - - status = call->getLocalSDP()->receiving_initial_offer (r_sdp); - - if (status!=PJ_SUCCESS) { - delete call; - call=0; - return false; + if (addrSdp == "0.0.0.0") { + addrSdp = addrToUse; } + call->setConnectionState (Call::Progressing); call->setPeerNumber (peerNumber); @@ -3175,6 +3165,7 @@ mod_on_rx_request (pjsip_rx_data *rdata) // Notify UI there is an incoming call + _debug("Add call to account link\n"); if (Manager::instance().incomingCall (call, account_id)) { // Add this call to the callAccountMap in ManagerImpl Manager::instance().getAccountLink (account_id)->addCall (call); @@ -3186,6 +3177,23 @@ mod_on_rx_request (pjsip_rx_data *rdata) return false; } + // Have to do some stuff with the SDP + // Set the codec map, IP, peer number and so on... for the SIPCall object + setCallAudioLocal (call, addrToUse); + + // We retrieve the remote sdp offer in the rdata struct to begin the negociation + call->getLocalSDP()->set_ip_address (addrSdp); + + get_remote_sdp_from_offer (rdata, &r_sdp); + + status = call->getLocalSDP()->receiving_initial_offer (r_sdp); + + if (status!=PJ_SUCCESS) { + delete call; + call=0; + return false; + } + /* Create the local dialog (UAS) */ status = pjsip_dlg_create_uas (pjsip_ua_instance(), rdata, NULL, &dialog); -- GitLab From 23bf5ff7225c576e2a9c41671c6b5ec8b5fccc92 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Mon, 30 Nov 2009 11:33:43 -0500 Subject: [PATCH 036/188] [#2440] Added a case in mainwindow to avoid performing actions on tab entry --- sflphone-client-gnome/src/mainwindow.c | 1 + 1 file changed, 1 insertion(+) diff --git a/sflphone-client-gnome/src/mainwindow.c b/sflphone-client-gnome/src/mainwindow.c index d8607eb30f..12b7ecedc0 100644 --- a/sflphone-client-gnome/src/mainwindow.c +++ b/sflphone-client-gnome/src/mainwindow.c @@ -114,6 +114,7 @@ on_key_released (GtkWidget *widget, GdkEventKey *event, gpointer user_data UNUSE event->keyval == 60 || // < event->keyval == 62 || // > event->keyval == 34 || // " + event->keyval == 65289 || // tab event->keyval == 65361 || // left arrow event->keyval == 65363 || // right arrow event->keyval >= 65470 || // F-keys -- GitLab From 3b726be287c213661902806f68f68f01e90b85d4 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Mon, 30 Nov 2009 12:45:50 -0500 Subject: [PATCH 037/188] [#2476] Set TLS label max size and set wraping enabled in tls configuration --- sflphone-client-gnome/src/config/tlsadvanceddialog.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/sflphone-client-gnome/src/config/tlsadvanceddialog.c b/sflphone-client-gnome/src/config/tlsadvanceddialog.c index 2d59a0aaa0..493053f0ee 100644 --- a/sflphone-client-gnome/src/config/tlsadvanceddialog.c +++ b/sflphone-client-gnome/src/config/tlsadvanceddialog.c @@ -43,6 +43,7 @@ void show_advanced_tls_options(GHashTable * properties) GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT, NULL)); + gtk_window_set_policy( GTK_WINDOW(tlsDialog), FALSE, FALSE, FALSE ); gtk_dialog_set_has_separator(tlsDialog, TRUE); gtk_container_set_border_width (GTK_CONTAINER(tlsDialog), 0); @@ -62,7 +63,9 @@ void show_advanced_tls_options(GHashTable * properties) "port, different one from each other\n")); GtkWidget * label; label = gtk_label_new(NULL); - gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); + gtk_widget_set_size_request(label, 600, 70); + gtk_label_set_line_wrap (GTK_LABEL(label), TRUE); + gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); gtk_label_set_markup(GTK_LABEL(label), description); gtk_table_attach(GTK_TABLE(table), label, 0, 3, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); -- GitLab From 3e0d1384b7e0f1ae5f798d3f259a385e4677a442 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Mon, 30 Nov 2009 14:51:25 -0500 Subject: [PATCH 038/188] [#2514] Comment g_print in Gnome clients --- sflphone-client-gnome/src/config/accountconfigdialog.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sflphone-client-gnome/src/config/accountconfigdialog.c b/sflphone-client-gnome/src/config/accountconfigdialog.c index e6e5df0af8..84e2150b94 100644 --- a/sflphone-client-gnome/src/config/accountconfigdialog.c +++ b/sflphone-client-gnome/src/config/accountconfigdialog.c @@ -134,7 +134,7 @@ static void update_credential_cb(GtkWidget *widget, gpointer data UNUSED) GtkTreeIter iter; gtk_tree_model_get_iter_from_string ((GtkTreeModel *) credentialStore, &iter, "0"); gint column = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (widget), "column")); - g_print ("set password to %s\n", (gchar *) gtk_entry_get_text(GTK_ENTRY(widget))); + // g_print ("set password to %s\n", (gchar *) gtk_entry_get_text(GTK_ENTRY(widget))); gtk_list_store_set (GTK_LIST_STORE (credentialStore), &iter, column, (gchar *) gtk_entry_get_text(GTK_ENTRY(widget)), -1); } @@ -389,7 +389,7 @@ static void cell_edited_cb(GtkCellRendererText *renderer, gchar *path_desc, gcha gint column = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (renderer), "column")); - g_print ("path desc in cell_edited_cb: %s\n", text); + DEBUG("path desc in cell_edited_cb: %s\n", text); if(g_strcasecmp(path_desc, "0") == 0) { if(g_strcasecmp(text, gtk_entry_get_text (GTK_ENTRY(entryUsername))) != 0) { @@ -411,7 +411,7 @@ static void cell_edited_cb(GtkCellRendererText *renderer, gchar *path_desc, gcha static void editing_started_cb (GtkCellRenderer *cell, GtkCellEditable * editable, const gchar * path, gpointer data) { DEBUG("Editing started"); - g_print ("path desc in editing_started_cb: %s\n", path); + DEBUG("path desc in editing_started_cb: %s\n", path); // If we are dealing the first row if (g_strcasecmp (path, "0") == 0) -- GitLab From ade951482dc935c99a0c7b320b9b6d6a64389453 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Mon, 30 Nov 2009 17:11:28 -0500 Subject: [PATCH 039/188] [#2486] Do not store IP address in config as this address may change --- sflphone-common/src/sip/sipaccount.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/sflphone-common/src/sip/sipaccount.cpp b/sflphone-common/src/sip/sipaccount.cpp index fe36571c98..ac9428f0ca 100644 --- a/sflphone-common/src/sip/sipaccount.cpp +++ b/sflphone-common/src/sip/sipaccount.cpp @@ -335,7 +335,12 @@ void SIPAccount::loadConfig() setLocalPort (atoi (localPort.c_str())); - setLocalAddress (Manager::instance().getConfigString (_accountID, LOCAL_ADDRESS)); + // Do not store or use IP address in config as this address may change + // Use loadSIPLocalIP for now instead in register/unregister (UDP,STUN,TLS), newOutGoingCall, mod_on_rx_request + // TODO: if we realy have to bind to a specific interface, store interfaces by name instead + setLocalAddress (std::string("0.0.0.0")); + // setLocalAddress (Manager::instance().getConfigString (_accountID, LOCAL_ADDRESS)); + // Published parameters setPublishedSameasLocal (Manager::instance().getConfigString (_accountID, PUBLISHED_SAMEAS_LOCAL) == TRUE_STR ? true : false); -- GitLab From c422357e32fc371d0e2af74d6efbf5a2365a59c8 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Tue, 1 Dec 2009 15:31:25 -0500 Subject: [PATCH 040/188] [#2467] Open address book without creating it if not existant () e_book_async_open(book, FALSE, eds_async_open_callback, had) --- .../src/contacts/addressbook/eds.c | 44 +++++++++++-------- .../src/contacts/searchbar.c | 2 + 2 files changed, 27 insertions(+), 19 deletions(-) diff --git a/sflphone-client-gnome/src/contacts/addressbook/eds.c b/sflphone-client-gnome/src/contacts/addressbook/eds.c index 4303109b74..289e5aea74 100644 --- a/sflphone-client-gnome/src/contacts/addressbook/eds.c +++ b/sflphone-client-gnome/src/contacts/addressbook/eds.c @@ -275,23 +275,25 @@ pixbuf_from_contact(EContact *contact) static void eds_async_open_callback(EBook *book, EBookStatus status, gpointer closure) { - Open_Handler_And_Data *had = (Open_Handler_And_Data *) closure; + Open_Handler_And_Data *had = (Open_Handler_And_Data *) closure; - remaining_books_to_open--; + remaining_books_to_open--; - if (status == E_BOOK_ERROR_OK) - { - book_data_t *book_data = g_new(book_data_t, 1); - book_data->active = FALSE; - book_data->name = g_strdup(e_source_peek_name(e_book_get_source(book))); - book_data->uid = g_strdup(e_source_peek_uid(e_book_get_source(book))); - book_data->ebook = book; - books_data = g_slist_prepend(books_data, book_data); - had->handler(); + DEBUG("eds_async_open_callback remaining book to open: %i", remaining_books_to_open); + + if (status == E_BOOK_ERROR_OK) { + + book_data_t *book_data = g_new(book_data_t, 1); + book_data->active = FALSE; + book_data->name = g_strdup(e_source_peek_name(e_book_get_source(book))); + book_data->uid = g_strdup(e_source_peek_uid(e_book_get_source(book))); + book_data->ebook = book; + books_data = g_slist_prepend(books_data, book_data); + had->handler(); } - else - { - WARN("Got error %d when opening book", status); + else { + + WARN("Got error %d when opening book", status); } } @@ -302,14 +304,15 @@ void init(OpenAsyncHandler callback) { GSList *list, *l; - ESourceList *source_list; + ESourceList *source_list = NULL; remaining_books_to_open = 0; books_data = NULL; - source_list = e_source_list_new_for_gconf_default( - "/apps/evolution/addressbook/sources"); + source_list = e_source_list_new_for_gconf_default("/apps/evolution/addressbook/sources"); + if (source_list == NULL) { + DEBUG("Error could not initialize source list for addressbook"); return; } @@ -320,6 +323,7 @@ init(OpenAsyncHandler callback) for (l = list; l != NULL; l = l->next) { + ESourceGroup *group = l->data; GSList *sources = NULL, *m; sources = e_source_group_peek_sources(group); @@ -330,10 +334,12 @@ init(OpenAsyncHandler callback) if (book != NULL) { // Keep count of remaining books to open - remaining_books_to_open++; + DEBUG("init addressbook %i", remaining_books_to_open); + remaining_books_to_open++; + // Asynchronous open - e_book_async_open(book, TRUE, eds_async_open_callback, had); + e_book_async_open(book, FALSE, eds_async_open_callback, had); } } } diff --git a/sflphone-client-gnome/src/contacts/searchbar.c b/sflphone-client-gnome/src/contacts/searchbar.c index 2044b4badd..d84c6efcc4 100644 --- a/sflphone-client-gnome/src/contacts/searchbar.c +++ b/sflphone-client-gnome/src/contacts/searchbar.c @@ -36,6 +36,8 @@ GdkPixbuf *missed_pixbuf = NULL; void searchbar_entry_changed (GtkEntry* entry, gchar* arg1 UNUSED, gpointer data UNUSED) { + DEBUG("searchbar_entry_changed"); + if (active_calltree == contacts) { addressbook_search (entry); } -- GitLab From 4dd479982d0fe583a3266205ca6423c0e063a319 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Tue, 1 Dec 2009 15:34:10 -0500 Subject: [PATCH 041/188] [#2467] Search for string longer than 3 fasten addressbook queries --- .../src/contacts/addressbook.c | 39 +++++++++++-------- 1 file changed, 22 insertions(+), 17 deletions(-) diff --git a/sflphone-client-gnome/src/contacts/addressbook.c b/sflphone-client-gnome/src/contacts/addressbook.c index 60557d04f6..d9b987c634 100644 --- a/sflphone-client-gnome/src/contacts/addressbook.c +++ b/sflphone-client-gnome/src/contacts/addressbook.c @@ -32,17 +32,21 @@ void addressbook_search(GtkEntry* entry) { - AddressBook_Config *addressbook_config; + gchar* query = gtk_entry_get_text(GTK_ENTRY (entry)); + if (strlen(query) >= 3) { - // Activate waiting layer - activateWaitingLayer(); + AddressBook_Config *addressbook_config; + + // Activate waiting layer + activateWaitingLayer(); - // Load the address book parameters - addressbook_config_load_parameters(&addressbook_config); + // Load the address book parameters + addressbook_config_load_parameters(&addressbook_config); + + // Start the asynchronous search as soon as we have an entry */ + search_async(gtk_entry_get_text(GTK_ENTRY (entry)), addressbook_config->max_results, &handler_async_search, addressbook_config); - // Start the asynchronous search as soon as we have an entry */ - search_async(gtk_entry_get_text(GTK_ENTRY (entry)), addressbook_config->max_results, &handler_async_search, - addressbook_config); + } } /** @@ -84,6 +88,7 @@ addressbook_is_active() static void addressbook_config_books() { + gchar **config_book_uid; book_data_t *book_data; gchar **list; @@ -91,21 +96,21 @@ addressbook_config_books() // Retrieve list of books list = (gchar **) dbus_get_addressbook_list(); - if (list) - { - for (config_book_uid = list; *config_book_uid; config_book_uid++) - { + if (list) { + + for (config_book_uid = list; *config_book_uid; config_book_uid++) { + // Get corresponding book data book_data = books_get_book_data_by_uid(*config_book_uid); // If book_data exists - if (book_data != NULL) - { + if (book_data != NULL) { + book_data->active = TRUE; - } - } + } + } g_strfreev(list); - } + } // Update buttons update_actions (); -- GitLab From 854fd19b0e6f154bb7d53605f0a438217d42bff4 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Tue, 1 Dec 2009 16:29:19 -0500 Subject: [PATCH 042/188] [#2474] Basic call info display function --- sflphone-client-gnome/src/contacts/calltree.c | 46 +++++++++++++++++++ sflphone-client-gnome/src/contacts/calltree.h | 14 +++++- 2 files changed, 58 insertions(+), 2 deletions(-) diff --git a/sflphone-client-gnome/src/contacts/calltree.c b/sflphone-client-gnome/src/contacts/calltree.c index 89a48d47d0..06fe04a158 100644 --- a/sflphone-client-gnome/src/contacts/calltree.c +++ b/sflphone-client-gnome/src/contacts/calltree.c @@ -253,6 +253,7 @@ row_activated(GtkTreeView *tree_view UNUSED, } + /* Catch cursor-activated signal. That is, when the entry is single clicked */ void row_single_click(GtkTreeView *tree_view UNUSED, void * data UNUSED) @@ -336,6 +337,51 @@ button_pressed(GtkWidget* widget, GdkEventButton *event, gpointer user_data UNUS return FALSE; } + +gchar* +calltree_display_call_info(callable_obj_t * c, CallDisplayType display_type) +{ + + gchar * description; + + if(c->_state_code == 0) { + + if(g_strcmp0("", c->_peer_name) == 0) { + description = g_markup_printf_escaped("<b>%s</b> <i>%s</i>", + c->_peer_name, + c->_peer_number); + } + else { + description = g_markup_printf_escaped("<b>%s</b> <i>%s</i>", + c->_peer_name, + c->_peer_number); + } + + } + else { + if(g_strcmp0("", c->_peer_name) == 0) { + description = g_markup_printf_escaped("<b>%s</b> <i>%s</i>\n<i>%s (%d)</i>", + c->_peer_number, + c->_peer_name, + c->_state_code_description, + c->_state_code); + } + else { + description = g_markup_printf_escaped("<b>%s</b> <i>%s</i>\n<i>%s (%d)</i>", + c->_peer_name, + c->_peer_number, + c->_state_code_description, + c->_state_code); + } + } + + + return description; + +} + + + /** * Reset call tree */ diff --git a/sflphone-client-gnome/src/contacts/calltree.h b/sflphone-client-gnome/src/contacts/calltree.h index a01565bc4b..ea5337948c 100644 --- a/sflphone-client-gnome/src/contacts/calltree.h +++ b/sflphone-client-gnome/src/contacts/calltree.h @@ -34,12 +34,22 @@ * @brief The GtkTreeView that list calls in the main window. */ -enum -{ +enum { A_CALL, A_CONFERENCE }; + +/** + * Tags used to identify display type in calltree + */ +typedef enum { + DISPLAY_TYPE_CALL_TRANSFER, + DISPLAY_TYPE_CALL, + DISPLAY_TYPE_SAS, + DISPLAY_TYPE_STATE_CODE +} CallDisplayType; + /** * Create a new widget calltree * @return GtkWidget* A new widget -- GitLab From 0c0ecfd16fada6e9ee70dace2b38aa2651b87eaa Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Tue, 1 Dec 2009 17:08:42 -0500 Subject: [PATCH 043/188] [#2474] Use calltree_display_call_info for Normal calls and Transfers --- sflphone-client-gnome/src/contacts/calltree.c | 87 ++++++++++++++----- sflphone-client-gnome/src/contacts/calltree.h | 2 +- 2 files changed, 68 insertions(+), 21 deletions(-) diff --git a/sflphone-client-gnome/src/contacts/calltree.c b/sflphone-client-gnome/src/contacts/calltree.c index 06fe04a158..54c9bc3dfe 100644 --- a/sflphone-client-gnome/src/contacts/calltree.c +++ b/sflphone-client-gnome/src/contacts/calltree.c @@ -339,45 +339,83 @@ button_pressed(GtkWidget* widget, GdkEventButton *event, gpointer user_data UNUS gchar* -calltree_display_call_info(callable_obj_t * c, CallDisplayType display_type) +calltree_display_call_info(callable_obj_t * c, CallDisplayType display_type, gchar** display_info) { gchar * description; + gchar * tmp_info; - if(c->_state_code == 0) { + DEBUG("----------------- calltree_display_call_info -----------------\n"); + + switch(display_type) { + + case DISPLAY_TYPE_CALL: + + DEBUG("display a normal call"); + if(c->_state_code == 0) { + + if(g_strcmp0("", c->_peer_name) == 0) { + description = g_markup_printf_escaped("<b>%s</b> <i>%s</i>", + c->_peer_name, + c->_peer_number); + } + else { + description = g_markup_printf_escaped("<b>%s</b> <i>%s</i>", + c->_peer_name, + c->_peer_number); + } - if(g_strcmp0("", c->_peer_name) == 0) { - description = g_markup_printf_escaped("<b>%s</b> <i>%s</i>", - c->_peer_name, - c->_peer_number); } else { - description = g_markup_printf_escaped("<b>%s</b> <i>%s</i>", - c->_peer_name, - c->_peer_number); + if(g_strcmp0("", c->_peer_name) == 0) { + description = g_markup_printf_escaped("<b>%s</b> <i>%s</i>\n<i>%s (%d)</i>", + c->_peer_number, + c->_peer_name, + c->_state_code_description, + c->_state_code); + } + else { + description = g_markup_printf_escaped("<b>%s</b> <i>%s</i>\n<i>%s (%d)</i>", + c->_peer_name, + c->_peer_number, + c->_state_code_description, + c->_state_code); + } } - } - else { - if(g_strcmp0("", c->_peer_name) == 0) { - description = g_markup_printf_escaped("<b>%s</b> <i>%s</i>\n<i>%s (%d)</i>", + break; + + + case DISPLAY_TYPE_CALL_TRANSFER: + + DEBUG("display a call transfer") + + if(g_strcmp0("",c->_peer_name) == 0){ + description = g_markup_printf_escaped("<b>%s</b> <i>%s</i>\n<i>Transfert to:%s</i> ", c->_peer_number, c->_peer_name, - c->_state_code_description, - c->_state_code); + c->_trsft_to); } else { - description = g_markup_printf_escaped("<b>%s</b> <i>%s</i>\n<i>%s (%d)</i>", + description = g_markup_printf_escaped("<b>%s</b> <i>%s</i>\n<i>Transfert to:%s</i> ", c->_peer_name, c->_peer_number, - c->_state_code_description, - c->_state_code); + c->_trsft_to); } - } + DEBUG("Transfer string: %s", description); + break; - return description; + default : + DEBUG("Not an allowable type of display"); + break; + + } + + // return description; + tmp_info = g_strdup(description); + *display_info = tmp_info; } @@ -629,6 +667,10 @@ calltree_update_call (calltab_t* tab, callable_obj_t * c, GtkTreeIter *parent) if(c->_state == CALL_STATE_TRANSFERT) { + + calltree_display_call_info(c, DISPLAY_TYPE_CALL_TRANSFER, &description); + DEBUG("second try: %s", description); + /* if(g_strcmp0("",c->_peer_name) == 0){ description = g_markup_printf_escaped("<b>%s</b> <i>%s</i>\n<i>Transfert to:%s</i> ", c->_peer_number, @@ -641,6 +683,7 @@ calltree_update_call (calltab_t* tab, callable_obj_t * c, GtkTreeIter *parent) c->_peer_number, c->_trsft_to); } + */ } else { @@ -800,6 +843,7 @@ void calltree_add_call (calltab_t* tab, callable_obj_t * c, GtkTreeIter *parent) gchar * date=""; gchar *duration=""; + /* if(c->_state_code == 0) { if(g_strcmp0("", c->_peer_name) == 0) { @@ -830,6 +874,9 @@ void calltree_add_call (calltab_t* tab, callable_obj_t * c, GtkTreeIter *parent) c->_state_code); } } + */ + + calltree_display_call_info(c, DISPLAY_TYPE_CALL, &description); gtk_tree_store_prepend (tab->store, &iter, parent); diff --git a/sflphone-client-gnome/src/contacts/calltree.h b/sflphone-client-gnome/src/contacts/calltree.h index ea5337948c..90af092040 100644 --- a/sflphone-client-gnome/src/contacts/calltree.h +++ b/sflphone-client-gnome/src/contacts/calltree.h @@ -44,8 +44,8 @@ enum { * Tags used to identify display type in calltree */ typedef enum { - DISPLAY_TYPE_CALL_TRANSFER, DISPLAY_TYPE_CALL, + DISPLAY_TYPE_CALL_TRANSFER, DISPLAY_TYPE_SAS, DISPLAY_TYPE_STATE_CODE } CallDisplayType; -- GitLab From b651713c96f51d8a050da1bbc16eb0e5e6d5528f Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Wed, 2 Dec 2009 10:02:33 -0500 Subject: [PATCH 044/188] [#2474] Strip the caller hostname when displaying phone numbers --- sflphone-client-gnome/src/contacts/calltree.c | 500 +++++++++--------- sflphone-client-gnome/src/contacts/calltree.h | 3 +- 2 files changed, 248 insertions(+), 255 deletions(-) diff --git a/sflphone-client-gnome/src/contacts/calltree.c b/sflphone-client-gnome/src/contacts/calltree.c index 54c9bc3dfe..9fc579db20 100644 --- a/sflphone-client-gnome/src/contacts/calltree.c +++ b/sflphone-client-gnome/src/contacts/calltree.c @@ -339,37 +339,61 @@ button_pressed(GtkWidget* widget, GdkEventButton *event, gpointer user_data UNUS gchar* -calltree_display_call_info(callable_obj_t * c, CallDisplayType display_type, gchar** display_info) +calltree_display_call_info(callable_obj_t * c, CallDisplayType display_type, gchar *audio_codec, gchar** display_info) { gchar * description; gchar * tmp_info; - DEBUG("----------------- calltree_display_call_info -----------------\n"); + gchar * peer_number = c->_peer_number; + gchar * hostname = NULL; + gchar * display_number = ""; + DEBUG("Display call info"); + + // Get the hostname for this call (NULL if not existent) + hostname = g_strrstr(peer_number, "@"); + + // Test if we are dialing a new number + if(g_strcmp0("", c->_peer_number) != 0) { + + // Strip the hostname if existent + if(hostname) { + display_number = g_strndup(peer_number, hostname - peer_number); + } + else { + display_number = peer_number; + } + } + else { + + display_number = peer_number; + } + + // Different display depending on type switch(display_type) { - case DISPLAY_TYPE_CALL: + case DISPLAY_TYPE_CALL: DEBUG("display a normal call"); if(c->_state_code == 0) { if(g_strcmp0("", c->_peer_name) == 0) { - description = g_markup_printf_escaped("<b>%s</b> <i>%s</i>", - c->_peer_name, - c->_peer_number); + description = g_markup_printf_escaped("<b>%s</b><i>%s</i>", + display_number, + c->_peer_name); } else { description = g_markup_printf_escaped("<b>%s</b> <i>%s</i>", c->_peer_name, - c->_peer_number); + display_number); } } else { if(g_strcmp0("", c->_peer_name) == 0) { - description = g_markup_printf_escaped("<b>%s</b> <i>%s</i>\n<i>%s (%d)</i>", - c->_peer_number, + description = g_markup_printf_escaped("<b>%s</b><i>%s</i>\n<i>%s (%d)</i>", + display_number, c->_peer_name, c->_state_code_description, c->_state_code); @@ -377,7 +401,7 @@ calltree_display_call_info(callable_obj_t * c, CallDisplayType display_type, gch else { description = g_markup_printf_escaped("<b>%s</b> <i>%s</i>\n<i>%s (%d)</i>", c->_peer_name, - c->_peer_number, + display_number, c->_state_code_description, c->_state_code); } @@ -391,21 +415,94 @@ calltree_display_call_info(callable_obj_t * c, CallDisplayType display_type, gch DEBUG("display a call transfer") if(g_strcmp0("",c->_peer_name) == 0){ - description = g_markup_printf_escaped("<b>%s</b> <i>%s</i>\n<i>Transfert to:%s</i> ", - c->_peer_number, + description = g_markup_printf_escaped("<b>%s</b><i>%s</i>\n<i>Transfert to:%s</i> ", + display_number, c->_peer_name, c->_trsft_to); } else { description = g_markup_printf_escaped("<b>%s</b> <i>%s</i>\n<i>Transfert to:%s</i> ", c->_peer_name, - c->_peer_number, + display_number, c->_trsft_to); } + + break; + + + case DISPLAY_TYPE_STATE_CODE : + + DEBUG("display a state code"); + + if(g_strcmp0("",c->_peer_name) == 0){ + + if (c->_state_code) { - DEBUG("Transfer string: %s", description); + description = g_markup_printf_escaped("<b>%s</b><i>%s</i>\n<i>%s (%d)</i> <i>%s</i>", + display_number, + c->_peer_name, + c->_state_code_description, + c->_state_code, + audio_codec); + } else { + description = g_markup_printf_escaped("<b>%s</b><i>%s</i>\n<i>%s</i>", + display_number, + c->_peer_name, + audio_codec); + } + } + else { + if (c->_state_code) { + description = g_markup_printf_escaped("<b>%s</b> <i>%s</i>\n<i>%s (%d)</i> <i>%s</i>", + c->_peer_name, + display_number, + c->_state_code_description, + c->_state_code, + audio_codec); + } else { + description = g_markup_printf_escaped("<b>%s</b> <i>%s</i>\n<i>%s</i>", + c->_peer_name, + display_number, + audio_codec); + } + } break; + case DISPLAY_TYPE_SAS: + + DEBUG("display a call with sas"); + + if(g_strcmp0("",c->_peer_name) == 0){ + description = g_markup_printf_escaped("<b>%s</b><i>%s</i>\n<i>Confirm SAS <b>%s</b> ?</i> ", + display_number, + c->_peer_name, + c->_sas); + } + else { + + description = g_markup_printf_escaped("<b>%s</b> <i>%s</i>\n<i>Confirm SAS <b>%s</b> ?</i> ", + c->_peer_name, + display_number, + c->_sas); + } + + case DISPLAY_TYPE_HISTORY : + + DEBUG("display history entry"); + + if(g_strcmp0("", c->_peer_name) == 0) { + + description = g_markup_printf_escaped("<b>%s</b><i>%s</i>", + display_number, + c->_peer_name); + } + else { + + description = g_markup_printf_escaped("<b>%s</b> <i>%s</i>", + c->_peer_name, + display_number); + } + break; default : DEBUG("Not an allowable type of display"); @@ -605,217 +702,156 @@ calltree_remove_call (calltab_t* tab, callable_obj_t * c, GtkTreeIter *parent) void calltree_update_call (calltab_t* tab, callable_obj_t * c, GtkTreeIter *parent) { - GdkPixbuf *pixbuf=NULL; - GdkPixbuf *pixbuf_security=NULL; - GtkTreeIter iter; - GValue val; - callable_obj_t * iterCall; - GtkTreeStore* store = tab->store; - - gchar* srtp_enabled = ""; - gboolean display_sas = TRUE; - account_t* account_details=NULL; - gchar *audio_codec = ""; - - - int nbChild = gtk_tree_model_iter_n_children(GTK_TREE_MODEL(store), parent); - int i; + GdkPixbuf *pixbuf=NULL; + GdkPixbuf *pixbuf_security=NULL; + GtkTreeIter iter; + GValue val; + callable_obj_t * iterCall; + GtkTreeStore* store = tab->store; - if(c != NULL) { - account_details = account_list_get_by_id(c->_accountID); - if(account_details != NULL) { - srtp_enabled = g_hash_table_lookup(account_details->properties, ACCOUNT_SRTP_ENABLED); - if(g_strcasecmp(g_hash_table_lookup(account_details->properties, ACCOUNT_ZRTP_DISPLAY_SAS),"false") == 0) - { display_sas = FALSE; } - } else { - GHashTable * properties = NULL; - sflphone_get_ip2ip_properties (&properties); - if(properties != NULL) { - if(g_strcasecmp(g_hash_table_lookup(properties, ACCOUNT_ZRTP_DISPLAY_SAS),"false") == 0) - { display_sas = FALSE; } - } - } - } + gchar* srtp_enabled = ""; + gboolean display_sas = TRUE; + account_t* account_details=NULL; + gchar *audio_codec = ""; + + + int nbChild = gtk_tree_model_iter_n_children(GTK_TREE_MODEL(store), parent); + int i; + + if(c != NULL) { + account_details = account_list_get_by_id(c->_accountID); + if(account_details != NULL) { + srtp_enabled = g_hash_table_lookup(account_details->properties, ACCOUNT_SRTP_ENABLED); + if(g_strcasecmp(g_hash_table_lookup(account_details->properties, ACCOUNT_ZRTP_DISPLAY_SAS),"false") == 0) + { display_sas = FALSE; } + } else { + GHashTable * properties = NULL; + sflphone_get_ip2ip_properties (&properties); + if(properties != NULL) { + if(g_strcasecmp(g_hash_table_lookup(properties, ACCOUNT_ZRTP_DISPLAY_SAS),"false") == 0) + { display_sas = FALSE; } + } + } + } - for( i = 0; i < nbChild; i++) - { + for( i = 0; i < nbChild; i++) { - if(gtk_tree_model_iter_nth_child(GTK_TREE_MODEL(store), &iter, parent, i)) - { + if(gtk_tree_model_iter_nth_child(GTK_TREE_MODEL(store), &iter, parent, i)) { - if(gtk_tree_model_iter_has_child(GTK_TREE_MODEL(store), &iter)) - { + if(gtk_tree_model_iter_has_child(GTK_TREE_MODEL(store), &iter)) { calltree_update_call (tab, c, &iter); - } + } - val.g_type = 0; - gtk_tree_model_get_value (GTK_TREE_MODEL(store), &iter, COLUMN_ACCOUNT_PTR, &val); + val.g_type = 0; + gtk_tree_model_get_value (GTK_TREE_MODEL(store), &iter, COLUMN_ACCOUNT_PTR, &val); + + iterCall = (callable_obj_t*) g_value_get_pointer(&val); + g_value_unset(&val); + + if(iterCall != c) { + continue; + } - iterCall = (callable_obj_t*) g_value_get_pointer(&val); - g_value_unset(&val); + /* Update text */ + gchar * description; + gchar * date=""; + gchar * duration=""; + audio_codec = call_get_audio_codec (c); + + if(c->_state == CALL_STATE_TRANSFERT) { - if(iterCall != c) { - continue; - } + calltree_display_call_info(c, DISPLAY_TYPE_CALL_TRANSFER, NULL, &description); + + } + else { - /* Update text */ - gchar * description; - gchar * date=""; - gchar * duration=""; - audio_codec = call_get_audio_codec (c); + if((c->_sas != NULL) && (display_sas == TRUE) && (c->_srtp_state == SRTP_STATE_SAS_UNCONFIRMED) && (c->_zrtp_confirmed == FALSE)) { - if(c->_state == CALL_STATE_TRANSFERT) - { + calltree_display_call_info(c, DISPLAY_TYPE_SAS, NULL, &description); + + } else { - calltree_display_call_info(c, DISPLAY_TYPE_CALL_TRANSFER, &description); - DEBUG("second try: %s", description); - /* - if(g_strcmp0("",c->_peer_name) == 0){ - description = g_markup_printf_escaped("<b>%s</b> <i>%s</i>\n<i>Transfert to:%s</i> ", - c->_peer_number, - c->_peer_name, - c->_trsft_to); - } - else { - description = g_markup_printf_escaped("<b>%s</b> <i>%s</i>\n<i>Transfert to:%s</i> ", - c->_peer_name, - c->_peer_number, - c->_trsft_to); - } - */ - } - else - { - // c->_zrtp_confirmed == FALSE : Hack explained in callable_obj.h - if((c->_sas != NULL) && (display_sas == TRUE) && (c->_srtp_state == SRTP_STATE_SAS_UNCONFIRMED) && (c->_zrtp_confirmed == FALSE)) { - - if(g_strcmp0("",c->_peer_name) == 0){ - description = g_markup_printf_escaped("<b>%s</b> <i>%s</i>\n<i>Confirm SAS <b>%s</b> ?</i> ", - c->_peer_number, - c->_peer_name, - c->_sas); - } - else { - - description = g_markup_printf_escaped("<b>%s</b> <i>%s</i>\n<i>Confirm SAS <b>%s</b> ?</i> ", - c->_peer_name, - c->_peer_number, - c->_sas); - } - } else { - DEBUG("Updating state code %d %s", c->_state_code, c->_state_code_description); - if(g_strcmp0("",c->_peer_name) == 0){ - if (c->_state_code) { - description = g_markup_printf_escaped("<b>%s</b> <i>%s</i>\n<i>%s (%d)</i> <i>%s</i>", - c->_peer_number, - c->_peer_name, - c->_state_code_description, - c->_state_code, - audio_codec); - } else { - description = g_markup_printf_escaped("<b>%s</b> <i>%s</i>\n<i>%s</i>", - c->_peer_number, - c->_peer_name, - audio_codec); - } - } - else { - if (c->_state_code) { - description = g_markup_printf_escaped("<b>%s</b> <i>%s</i>\n<i>%s (%d)</i> <i>%s</i>", - c->_peer_name, - c->_peer_number, - c->_state_code_description, - c->_state_code, - audio_codec); - } else { - description = g_markup_printf_escaped("<b>%s</b> <i>%s</i>\n<i>%s</i>", - c->_peer_name, - c->_peer_number, - audio_codec); - } - } - } - } + calltree_display_call_info(c, DISPLAY_TYPE_STATE_CODE, audio_codec, &description); + + } + } /* Update icons */ - if( tab == current_calls ) - { - DEBUG("Receiving in state %d", c->_state); - switch(c->_state) - { - case CALL_STATE_HOLD: - pixbuf = gdk_pixbuf_new_from_file(ICONS_DIR "/hold.svg", NULL); - break; - case CALL_STATE_INCOMING: - case CALL_STATE_RINGING: - pixbuf = gdk_pixbuf_new_from_file(ICONS_DIR "/ring.svg", NULL); - break; - case CALL_STATE_CURRENT: - pixbuf = gdk_pixbuf_new_from_file(ICONS_DIR "/current.svg", NULL); - break; - case CALL_STATE_DIALING: - pixbuf = gdk_pixbuf_new_from_file(ICONS_DIR "/dial.svg", NULL); - break; - case CALL_STATE_FAILURE: - pixbuf = gdk_pixbuf_new_from_file(ICONS_DIR "/fail.svg", NULL); - break; - case CALL_STATE_BUSY: - pixbuf = gdk_pixbuf_new_from_file(ICONS_DIR "/busy.svg", NULL); - break; - case CALL_STATE_TRANSFERT: - pixbuf = gdk_pixbuf_new_from_file(ICONS_DIR "/transfert.svg", NULL); - break; - case CALL_STATE_RECORD: - pixbuf = gdk_pixbuf_new_from_file(ICONS_DIR "/icon_rec.svg", NULL); - break; - default: - WARN("Update calltree - Should not happen!"); - } - - switch(c->_srtp_state) - { - case SRTP_STATE_SAS_UNCONFIRMED: - DEBUG("Secure is ON"); - pixbuf_security = gdk_pixbuf_new_from_file(ICONS_DIR "/lock_unconfirmed.svg", NULL); - if(c->_sas != NULL) { DEBUG("SAS is ready with value %s", c->_sas); } - break; - case SRTP_STATE_SAS_CONFIRMED: - DEBUG("SAS is confirmed"); - pixbuf_security = gdk_pixbuf_new_from_file(ICONS_DIR "/lock_confirmed.svg", NULL); - break; - case SRTP_STATE_SAS_SIGNED: - DEBUG("Secure is ON with SAS signed and verified"); - pixbuf_security = gdk_pixbuf_new_from_file(ICONS_DIR "/lock_certified.svg", NULL); - break; - case SRTP_STATE_UNLOCKED: - DEBUG("Secure is off calltree %d", c->_state); - if(g_strcasecmp(srtp_enabled,"true") == 0) { - pixbuf_security = gdk_pixbuf_new_from_file(ICONS_DIR "/lock_off.svg", NULL); - } - break; - default: - WARN("Update calltree srtp state #%d- Should not happen!", c->_srtp_state); - if(g_strcasecmp(srtp_enabled,"true") == 0) { - pixbuf_security = gdk_pixbuf_new_from_file(ICONS_DIR "/lock_off.svg", NULL); - } - - } - gtk_tree_store_set(store, &iter, - 0, pixbuf, // Icon - 1, description, // Description - 2, pixbuf_security, - 3, c, - -1); - - if (pixbuf != NULL) - g_object_unref(G_OBJECT(pixbuf)); - - } + if( tab == current_calls ) { + DEBUG("Receiving in state %d", c->_state); + switch(c->_state) { + case CALL_STATE_HOLD: + pixbuf = gdk_pixbuf_new_from_file(ICONS_DIR "/hold.svg", NULL); + break; + case CALL_STATE_INCOMING: + case CALL_STATE_RINGING: + pixbuf = gdk_pixbuf_new_from_file(ICONS_DIR "/ring.svg", NULL); + break; + case CALL_STATE_CURRENT: + pixbuf = gdk_pixbuf_new_from_file(ICONS_DIR "/current.svg", NULL); + break; + case CALL_STATE_DIALING: + pixbuf = gdk_pixbuf_new_from_file(ICONS_DIR "/dial.svg", NULL); + break; + case CALL_STATE_FAILURE: + pixbuf = gdk_pixbuf_new_from_file(ICONS_DIR "/fail.svg", NULL); + break; + case CALL_STATE_BUSY: + pixbuf = gdk_pixbuf_new_from_file(ICONS_DIR "/busy.svg", NULL); + break; + case CALL_STATE_TRANSFERT: + pixbuf = gdk_pixbuf_new_from_file(ICONS_DIR "/transfert.svg", NULL); + break; + case CALL_STATE_RECORD: + pixbuf = gdk_pixbuf_new_from_file(ICONS_DIR "/icon_rec.svg", NULL); + break; + default: + WARN("Update calltree - Should not happen!"); + } + + switch(c->_srtp_state) { + case SRTP_STATE_SAS_UNCONFIRMED: + DEBUG("Secure is ON"); + pixbuf_security = gdk_pixbuf_new_from_file(ICONS_DIR "/lock_unconfirmed.svg", NULL); + if(c->_sas != NULL) { DEBUG("SAS is ready with value %s", c->_sas); } + break; + case SRTP_STATE_SAS_CONFIRMED: + DEBUG("SAS is confirmed"); + pixbuf_security = gdk_pixbuf_new_from_file(ICONS_DIR "/lock_confirmed.svg", NULL); + break; + case SRTP_STATE_SAS_SIGNED: + DEBUG("Secure is ON with SAS signed and verified"); + pixbuf_security = gdk_pixbuf_new_from_file(ICONS_DIR "/lock_certified.svg", NULL); + break; + case SRTP_STATE_UNLOCKED: + DEBUG("Secure is off calltree %d", c->_state); + if(g_strcasecmp(srtp_enabled,"true") == 0) { + pixbuf_security = gdk_pixbuf_new_from_file(ICONS_DIR "/lock_off.svg", NULL); + } + break; + default: + WARN("Update calltree srtp state #%d- Should not happen!", c->_srtp_state); + if(g_strcasecmp(srtp_enabled,"true") == 0) { + pixbuf_security = gdk_pixbuf_new_from_file(ICONS_DIR "/lock_off.svg", NULL); } + } + gtk_tree_store_set(store, &iter, + 0, pixbuf, // Icon + 1, description, // Description + 2, pixbuf_security, + 3, c, + -1); + + if (pixbuf != NULL) + g_object_unref(G_OBJECT(pixbuf)); + } - update_actions(); + } + + } + update_actions(); } @@ -843,40 +879,7 @@ void calltree_add_call (calltab_t* tab, callable_obj_t * c, GtkTreeIter *parent) gchar * date=""; gchar *duration=""; - /* - if(c->_state_code == 0) { - - if(g_strcmp0("", c->_peer_name) == 0) { - description = g_markup_printf_escaped("<b>%s</b> <i>%s</i>", - c->_peer_name, - c->_peer_number); - } - else { - description = g_markup_printf_escaped("<b>%s</b> <i>%s</i>", - c->_peer_name, - c->_peer_number); - } - - } - else { - if(g_strcmp0("", c->_peer_name) == 0) { - description = g_markup_printf_escaped("<b>%s</b> <i>%s</i>\n<i>%s (%d)</i>", - c->_peer_number, - c->_peer_name, - c->_state_code_description, - c->_state_code); - } - else { - description = g_markup_printf_escaped("<b>%s</b> <i>%s</i>\n<i>%s (%d)</i>", - c->_peer_name, - c->_peer_number, - c->_state_code_description, - c->_state_code); - } - } - */ - - calltree_display_call_info(c, DISPLAY_TYPE_CALL, &description); + calltree_display_call_info(c, DISPLAY_TYPE_CALL, NULL, &description); gtk_tree_store_prepend (tab->store, &iter, parent); @@ -983,18 +986,7 @@ void calltree_add_history_entry (callable_obj_t * c) // New call in the list gchar * description, *date="", *duration=""; - if(g_strcmp0("", c->_peer_name) == 0) { - - description = g_markup_printf_escaped("<b>%s</b> <i>%s</i>", - c->_peer_number, - c->_peer_name); - } - else { - - description = g_markup_printf_escaped("<b>%s</b> <i>%s</i>", - c->_peer_name, - c->_peer_number); - } + calltree_display_call_info(c, DISPLAY_TYPE_HISTORY, NULL, &description); gtk_tree_store_prepend (history->store, &iter, NULL); diff --git a/sflphone-client-gnome/src/contacts/calltree.h b/sflphone-client-gnome/src/contacts/calltree.h index 90af092040..fd6c33f455 100644 --- a/sflphone-client-gnome/src/contacts/calltree.h +++ b/sflphone-client-gnome/src/contacts/calltree.h @@ -47,7 +47,8 @@ typedef enum { DISPLAY_TYPE_CALL, DISPLAY_TYPE_CALL_TRANSFER, DISPLAY_TYPE_SAS, - DISPLAY_TYPE_STATE_CODE + DISPLAY_TYPE_STATE_CODE, + DISPLAY_TYPE_HISTORY } CallDisplayType; /** -- GitLab From 4db3a8e956a7eae17bb91e248f47e385647a9dbd Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Wed, 2 Dec 2009 10:58:48 -0500 Subject: [PATCH 045/188] [#2517] Fix DTMF over RTP issue, don't play the EVENT RTP packet --- sflphone-common/src/audio/audiortp/AudioRtpSession.h | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/sflphone-common/src/audio/audiortp/AudioRtpSession.h b/sflphone-common/src/audio/audiortp/AudioRtpSession.h index 6cd4cf773c..afe37aa21d 100644 --- a/sflphone-common/src/audio/audiortp/AudioRtpSession.h +++ b/sflphone-common/src/audio/audiortp/AudioRtpSession.h @@ -466,7 +466,12 @@ namespace sfl { unsigned int size = adu->getSize(); // size in char - processDataDecode (spkrData, size, countTime); + // _debug("RTP size: %i\n", size); + + // Size of DTMF over RTP + if(size > 4) { + processDataDecode (spkrData, size, countTime); + } } template <typename D> -- GitLab From 9372355074e361c035e97007a1937f7af2545383 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Wed, 2 Dec 2009 18:09:01 -0500 Subject: [PATCH 046/188] [#2486] Set localAddress to ANY only at startup --- sflphone-common/src/managerimpl.cpp | 5 ++++- sflphone-common/src/sip/sipaccount.cpp | 4 ++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/sflphone-common/src/managerimpl.cpp b/sflphone-common/src/managerimpl.cpp index a2a2f17f74..c97310af27 100644 --- a/sflphone-common/src/managerimpl.cpp +++ b/sflphone-common/src/managerimpl.cpp @@ -1545,8 +1545,11 @@ ManagerImpl::initRegisterAccounts() while (iter != _accountMap.end()) { if (iter->second) { iter->second->loadConfig(); - /* If the account is set as enabled, try to register */ + // TODO: take off this protection by storing localIPAddress using interface name + setConfig(iter->second->getAccountID(), LOCAL_ADDRESS, "0.0.0.0"); + + /* If the account is set as enabled, try to register */ if (iter->second->isEnabled()) { status = iter->second->registerVoIPLink(); diff --git a/sflphone-common/src/sip/sipaccount.cpp b/sflphone-common/src/sip/sipaccount.cpp index ac9428f0ca..52f7c3a0df 100644 --- a/sflphone-common/src/sip/sipaccount.cpp +++ b/sflphone-common/src/sip/sipaccount.cpp @@ -338,8 +338,8 @@ void SIPAccount::loadConfig() // Do not store or use IP address in config as this address may change // Use loadSIPLocalIP for now instead in register/unregister (UDP,STUN,TLS), newOutGoingCall, mod_on_rx_request // TODO: if we realy have to bind to a specific interface, store interfaces by name instead - setLocalAddress (std::string("0.0.0.0")); - // setLocalAddress (Manager::instance().getConfigString (_accountID, LOCAL_ADDRESS)); + // setLocalAddress (std::string("0.0.0.0")); + setLocalAddress (Manager::instance().getConfigString (_accountID, LOCAL_ADDRESS)); // Published parameters -- GitLab From 80e4ddb274f1b6093f929eb15177f501b05f7672 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Wed, 2 Dec 2009 18:10:25 -0500 Subject: [PATCH 047/188] [#2543] Fix SFLphone startup failure due to empty dns server array --- sflphone-common/src/sip/sipvoiplink.cpp | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp index 2acd4ca5ff..a712ae4636 100644 --- a/sflphone-common/src/sip/sipvoiplink.cpp +++ b/sflphone-common/src/sip/sipvoiplink.cpp @@ -1644,13 +1644,16 @@ pj_status_t SIPVoIPLink::enable_dns_srv_resolver (pjsip_endpoint *endpt, pj_dns_ } if (!get_dns_server_addresses (&dns_servers)) { - _debug ("Error while fetching DNS information\n"); + _debug ("Error while fetching DNS information\n"); return -1; } // Build the nameservers list needed by pjsip - scount = dns_servers.size (); - + if ((scount = dns_servers.size ()) <= 0) { + _debug("No server detected while fetching DNS information, stop dns resolution\n"); + return 0; + } + pj_str_t nameservers[scount]; for (i = 0; i<scount; i++) { @@ -1967,8 +1970,8 @@ int SIPVoIPLink::createUDPServer (AccountID id) } else { // We are trying to initialize a UDP transport available for all local accounts and direct IP calls if (account->getLocalAddress () != "0.0.0.0") { - listeningAddress = account->getLocalAddress (); - } + listeningAddress = account->getLocalAddress (); + } listeningPort = account->getLocalPort (); } @@ -2029,8 +2032,9 @@ int SIPVoIPLink::createUDPServer (AccountID id) if (account == NULL) _localUDPTransport = transport; - else - account->setAccountTransport (transport); + else { + account->setAccountTransport (transport); + } } _debug ("Transport initialized successfully on %s:%i\n", listeningAddress.c_str (), listeningPort); -- GitLab From 81ca09ff998e8a5a1aa28798e89906908bbedbe3 Mon Sep 17 00:00:00 2001 From: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> Date: Thu, 3 Dec 2009 10:42:57 -0500 Subject: [PATCH 048/188] [#1060] Update po files with launchpad translation + add danish translation --- lang/{ => da}/da.po | 340 ++++++++------- lang/de/de.po | 83 ++-- lang/es/es.po | 10 +- lang/it/it.po | 208 +++++---- lang/ja.po | 995 ------------------------------------------ lang/ko.po | 1006 ------------------------------------------- lang/ko/ko.po | 22 +- lang/pl/pl.po | 47 +- lang/pt/pt.po | 7 +- lang/pt_BR/pt_BR.po | 9 +- lang/ru/ru.po | 13 +- lang/sflphone.pot | 473 ++++++++++---------- lang/zh_CN/zh_CN.po | 176 ++++---- lang/zh_HK/zh_HK.po | 116 +++-- lang/zh_TW/zh_TW.po | 18 +- 15 files changed, 768 insertions(+), 2755 deletions(-) rename lang/{ => da}/da.po (79%) delete mode 100644 lang/ja.po delete mode 100644 lang/ko.po diff --git a/lang/da.po b/lang/da/da.po similarity index 79% rename from lang/da.po rename to lang/da/da.po index c0c2ac3dd2..a90aa624db 100644 --- a/lang/da.po +++ b/lang/da/da.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: sflphone\n" "Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" "POT-Creation-Date: 2009-10-14 11:18-0400\n" -"PO-Revision-Date: 2009-10-01 14:40+0000\n" +"PO-Revision-Date: 2009-11-03 03:52+0000\n" "Last-Translator: Jonas Fonseca <fonseca@diku.dk>\n" "Language-Team: Danish <da@li.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Launchpad-Export-Date: 2009-10-26 15:48+0000\n" +"X-Launchpad-Export-Date: 2009-12-03 15:32+0000\n" "X-Generator: Launchpad (build Unknown)\n" #: ../sflphone-client-gnome/src/accountlist.c:175 @@ -72,7 +72,7 @@ msgstr[1] "%d indtalte beskeder" #: ../sflphone-client-gnome/src/actions.c:919 #: ../sflphone-client-gnome/src/actions.c:926 msgid "Using account" -msgstr "" +msgstr "Benytter konto" #: ../sflphone-client-gnome/src/actions.c:89 msgid "No registered accounts" @@ -83,11 +83,13 @@ msgid "" "Unable to connect to the SFLphone server.\n" "Make sure the daemon is running." msgstr "" +"Forbindelse til SFLphone serveren kan ikke oprettes.\n" +"Sørg for at server-dæmonen kører." #: ../sflphone-client-gnome/src/actions.c:913 #, c-format msgid "IP call - %s" -msgstr "" +msgstr "IP opkald - %s" #: ../sflphone-client-gnome/src/actions.c:922 msgid "Codec" @@ -101,6 +103,10 @@ msgid "" "</b> SFL audio codecs have to be placed in <i>%s</i> or in the " "<b>.sflphone</b> directory in your home( <i>%s</i> )" msgstr "" +"<b>Fejl: Ingen audio-codec fundet\n" +"\n" +"</b>SFL audio-codecs skal installeres i <i>%s</i> eller i mappen " +"<b>.sflphone</b> i dit hjemmekatalog (<i>%s</i>)" #: ../sflphone-client-gnome/src/errors.c:29 msgid "" @@ -108,6 +114,9 @@ msgid "" "\n" "Error while opening playback device" msgstr "" +"ALSA meddelelse\n" +"\n" +"Fejl opstod mens afspilningsenhed blev åbnet" #: ../sflphone-client-gnome/src/errors.c:32 msgid "" @@ -115,6 +124,9 @@ msgid "" "\n" "Error while opening capture device" msgstr "" +"ALSA meddelelse\n" +"\n" +"Fejl opstod mens optageenhed blev åbnet" #: ../sflphone-client-gnome/src/errors.c:35 msgid "" @@ -122,42 +134,45 @@ msgid "" "\n" "Pulseaudio is not running" msgstr "" +"PulseAudio meddelelse\n" +"\n" +"PulseAudio er tilgængelig" #: ../sflphone-client-gnome/src/mainwindow.c:73 msgid "There is one call in progress." -msgstr "" +msgstr "Et igangværende opkald eksisterer" #: ../sflphone-client-gnome/src/mainwindow.c:77 msgid "There are calls in progress." -msgstr "" +msgstr "Igangværende opkald eksisterer" #: ../sflphone-client-gnome/src/mainwindow.c:86 msgid "Do you still want to quit?" -msgstr "Vil du stadig afslutte" +msgstr "Ønsker du stadig at afslutte" #: ../sflphone-client-gnome/src/mainwindow.c:299 msgid "SFLphone Error" -msgstr "SFLphone Fejl" +msgstr "SFLphone fejl" #: ../sflphone-client-gnome/src/mainwindow.c:391 #, c-format msgid "ZRTP is not supported by peer %s\n" -msgstr "" +msgstr "ZRTP er ikke understøttet af modtageren %s\n" #: ../sflphone-client-gnome/src/mainwindow.c:392 msgid "Secure Communication Unavailable" -msgstr "" +msgstr "Sikker kommunikation ikke tilgængelig" #: ../sflphone-client-gnome/src/mainwindow.c:393 #: ../sflphone-client-gnome/src/mainwindow.c:415 msgid "Continue" -msgstr "" +msgstr "Fortsæt" #: ../sflphone-client-gnome/src/mainwindow.c:394 #: ../sflphone-client-gnome/src/mainwindow.c:416 #: ../sflphone-client-gnome/src/mainwindow.c:430 msgid "Stop Call" -msgstr "" +msgstr "Afslut opkald" #: ../sflphone-client-gnome/src/mainwindow.c:413 #, c-format @@ -165,10 +180,13 @@ msgid "" "A %s error forced the call with %s to fall under unencrypted mode.\n" "Exact reason: %s\n" msgstr "" +"En \"%s\"-fejl medførte at opkaldet til %s blev ændret til ukrypteret " +"tilstand.\n" +"Den præcise årsag: %s\n" #: ../sflphone-client-gnome/src/mainwindow.c:414 msgid "ZRTP negotiation failed" -msgstr "" +msgstr "ZRTP-forhandling mislykkedes" #: ../sflphone-client-gnome/src/mainwindow.c:427 #, c-format @@ -176,42 +194,44 @@ msgid "" "%s wants to stop using secure communication. Confirm will resume " "conversation without SRTP.\n" msgstr "" +"%s ønsker at afslutte brugen af sikker kommunikation. Ved at godkende vil " +"samtalen fortætte uden SRTP\n" #: ../sflphone-client-gnome/src/mainwindow.c:428 msgid "Confirm Go Clear" -msgstr "" +msgstr "Godkend sikkerhedsændring" #: ../sflphone-client-gnome/src/mainwindow.c:429 msgid "Confirm" -msgstr "" +msgstr "Godkend" #: ../sflphone-client-gnome/src/sflnotify.c:71 #: ../sflphone-client-gnome/src/sflnotify.c:91 #, c-format msgid "%s account : %s" -msgstr "" +msgstr "%s konto : %s" #: ../sflphone-client-gnome/src/sflnotify.c:75 #, c-format msgid "<i>From</i> %s" -msgstr "" +msgstr "<i>Fra</i> %s" #: ../sflphone-client-gnome/src/sflnotify.c:111 #, c-format msgid "Calling with %s account <i>%s</i>" -msgstr "" +msgstr "Kalder op med %s konto <i>%s</i>" #: ../sflphone-client-gnome/src/sflnotify.c:115 msgid "Current account" -msgstr "" +msgstr "Nuværende konto" #: ../sflphone-client-gnome/src/sflnotify.c:130 msgid "You have no accounts set up" -msgstr "" +msgstr "Du har ingen oprettede konti" #: ../sflphone-client-gnome/src/sflnotify.c:147 msgid "You have no registered accounts" -msgstr "" +msgstr "Du har ingen registrerede konti" #: ../sflphone-client-gnome/src/sflnotify.c:190 #, c-format @@ -219,33 +239,35 @@ msgid "" "<i>With:</i> %s \n" "using %s" msgstr "" +"<i>Med:</i> %s \n" +"benyttende %s" #: ../sflphone-client-gnome/src/sflnotify.c:205 #, c-format msgid "%s does not support ZRTP." -msgstr "" +msgstr "%s understøtter ikke ZRTP." #: ../sflphone-client-gnome/src/sflnotify.c:220 #, c-format msgid "ZRTP negotiation failed with %s" -msgstr "" +msgstr "ZRTP forhandling mislykkedes med %s" #: ../sflphone-client-gnome/src/sflnotify.c:235 #, c-format msgid "<i>With:</i> %s" -msgstr "" +msgstr "<i>Med:</i> %s" #: ../sflphone-client-gnome/src/sliders.c:162 msgid "Speakers volume" -msgstr "" +msgstr "Højtaler lydstyrke" #: ../sflphone-client-gnome/src/sliders.c:164 msgid "Mic volume" -msgstr "" +msgstr "Mikrofon lydstyrke" #: ../sflphone-client-gnome/src/statusicon.c:91 msgid "_Show main window" -msgstr "" +msgstr "_Vis hovedvindue" #: ../sflphone-client-gnome/src/statusicon.c:126 msgid "SFLphone" @@ -255,17 +277,17 @@ msgstr "SFLphone" #, c-format msgid "%i account configured" msgid_plural "%i accounts configured" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%i konto oprettet" +msgstr[1] "%i konti oprettet" #: ../sflphone-client-gnome/src/toolbar.c:38 #: ../sflphone-client-gnome/src/uimanager.c:750 msgid "Voicemail" -msgstr "" +msgstr "Talebesked" #: ../sflphone-client-gnome/src/uimanager.c:403 msgid "SFLphone is a VoIP client compatible with SIP and IAX2 protocols." -msgstr "SFLphone er en VoIP-klient kompatibel med SIP og AIX2 protokoller" +msgstr "SFLphone er en VoIP-klient kompatibel med SIP og IAX2 protokoller" #: ../sflphone-client-gnome/src/uimanager.c:406 msgid "About SFLphone" @@ -273,7 +295,7 @@ msgstr "Om SFLphone" #: ../sflphone-client-gnome/src/uimanager.c:1028 msgid "_Pick up" -msgstr "" +msgstr "_Svar" #: ../sflphone-client-gnome/src/uimanager.c:1040 #: ../sflphone-client-gnome/src/uimanager.c:1081 @@ -283,7 +305,7 @@ msgstr "_Læg på" #: ../sflphone-client-gnome/src/uimanager.c:1052 #: ../sflphone-client-gnome/src/uimanager.c:1093 msgid "On _Hold" -msgstr "" +msgstr "I _venteposition" #: ../sflphone-client-gnome/src/uimanager.c:1064 msgid "_Record" @@ -291,7 +313,7 @@ msgstr "_Optag" #: ../sflphone-client-gnome/src/uimanager.c:1154 msgid "_Call back" -msgstr "" +msgstr "_Besvar opkald" #: ../sflphone-client-gnome/src/uimanager.c:1226 msgid "_New call" @@ -299,41 +321,41 @@ msgstr "_Nyt opkald" #: ../sflphone-client-gnome/src/uimanager.c:1300 msgid "Edit phone number" -msgstr "" +msgstr "Ændre telefonnummer" #: ../sflphone-client-gnome/src/uimanager.c:1311 msgid "Edit the phone number before making a call" -msgstr "" +msgstr "Ændre telefonnummeret før opkald" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:164 msgid "Account Parameters" -msgstr "" +msgstr "Kontoparametre" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:173 #: ../sflphone-client-gnome/src/config/assistant.c:294 #: ../sflphone-client-gnome/src/config/assistant.c:402 msgid "_Alias" -msgstr "" +msgstr "_Alias" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:181 msgid "_Protocol" -msgstr "" +msgstr "_Protokol" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:199 msgid "Unknown" -msgstr "" +msgstr "Ukendt" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:209 #: ../sflphone-client-gnome/src/config/assistant.c:302 #: ../sflphone-client-gnome/src/config/assistant.c:410 msgid "_Host name" -msgstr "" +msgstr "_Værtsnavn" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:217 #: ../sflphone-client-gnome/src/config/assistant.c:310 #: ../sflphone-client-gnome/src/config/assistant.c:418 msgid "_User name" -msgstr "" +msgstr "_Brugernavn" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:234 #: ../sflphone-client-gnome/src/config/assistant.c:326 @@ -345,23 +367,23 @@ msgstr "_Adgangskode" #: ../sflphone-client-gnome/src/config/assistant.c:344 #: ../sflphone-client-gnome/src/config/assistant.c:449 msgid "_Voicemail number" -msgstr "" +msgstr "_Nummer for talebesked" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:340 msgid "Authentication" -msgstr "" +msgstr "Godkendelse" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:341 msgid "Secret" -msgstr "" +msgstr "Hemmelig" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:466 msgid "Credential" -msgstr "" +msgstr "Legitimationsoplysning" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:501 msgid "Authentication name" -msgstr "" +msgstr "Godkendelsesnavn" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:512 msgid "Password" @@ -371,79 +393,79 @@ msgstr "Adgangskode" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:909 #: ../sflphone-client-gnome/src/config/preferencesdialog.c:201 msgid "Security" -msgstr "" +msgstr "Sikkerhed" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:547 #: ../sflphone-client-gnome/src/config/preferencesdialog.c:213 msgid "Use TLS transport (sips)" -msgstr "" +msgstr "Benyt TLS transport (sips)" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:552 #: ../sflphone-client-gnome/src/config/preferencesdialog.c:218 msgid "SRTP key exchange" -msgstr "" +msgstr "SRTP-nøgleudveksling" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:558 #: ../sflphone-client-gnome/src/config/preferencesdialog.c:224 msgid "Disabled" -msgstr "" +msgstr "Deaktiveret" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:674 msgid "Registration" -msgstr "" +msgstr "Registrering" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:679 msgid "Registration expire" -msgstr "" +msgstr "Forældelse af registrering" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:687 msgid "_Comply with RFC 3263" -msgstr "" +msgstr "_Overhold RFC 3263" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:693 #: ../sflphone-client-gnome/src/config/preferencesdialog.c:463 msgid "Network" -msgstr "" +msgstr "Netværk" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:707 msgid "Local address" -msgstr "" +msgstr "Lokal adresse" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:744 msgid "Local port" -msgstr "" +msgstr "Lokal port" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:752 msgid "Set published address and port:" -msgstr "" +msgstr "Konfigurer offentliggjort adresse og port:" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:756 msgid "Using STUN " -msgstr "" +msgstr "Ved brug af STUN " #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:761 msgid "Same as local parameters" -msgstr "" +msgstr "Samme som lokale parametre" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:764 msgid "Manually" -msgstr "" +msgstr "Manuelt" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:769 msgid "Published address" -msgstr "" +msgstr "Offentliggjort adresse" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:777 msgid "Published port" -msgstr "" +msgstr "Offentliggjort port" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:785 msgid "STUN server URL" -msgstr "" +msgstr "STUN serveradresse" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:880 msgid "Account settings" -msgstr "" +msgstr "Kontoindstillinger" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:899 msgid "Basic" @@ -455,7 +477,7 @@ msgstr "Advanceret" #: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:169 msgid "Server returned \"" -msgstr "" +msgstr "Server svarede \"" #: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:389 msgid "Protocol" @@ -471,31 +493,31 @@ msgstr "Konti" #: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:484 msgid "Configured Accounts" -msgstr "" +msgstr "Oprettede konti" #: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:505 msgid "There " -msgstr "" +msgstr "Der " #: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:506 msgid "is " -msgstr "" +msgstr "er " #: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:506 msgid "are " -msgstr "" +msgstr "er " #: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:508 msgid " active account" -msgstr "" +msgstr " aktiv konto" #: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:509 msgid "s" -msgstr "" +msgstr "s" #: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:514 msgid "You have no active account" -msgstr "" +msgstr "Der er ingen aktive konti" #: ../sflphone-client-gnome/src/config/addressbook-config.c:306 #: ../sflphone-client-gnome/src/config/preferencesdialog.c:443 @@ -504,48 +526,48 @@ msgstr "Generelt" #: ../sflphone-client-gnome/src/config/addressbook-config.c:312 msgid "_Use Evolution address books" -msgstr "" +msgstr "_Benyt Evolution adressekartotek" #: ../sflphone-client-gnome/src/config/addressbook-config.c:319 msgid "Download limit :" -msgstr "" +msgstr "Download begrænsning :" #: ../sflphone-client-gnome/src/config/addressbook-config.c:327 msgid "cards" -msgstr "" +msgstr "kort" #: ../sflphone-client-gnome/src/config/addressbook-config.c:333 msgid "_Display contact photo if available" -msgstr "" +msgstr "Vis _kontaktbillede hvis tilgængeligt" #: ../sflphone-client-gnome/src/config/addressbook-config.c:341 msgid "Fields from Evolution's address books" -msgstr "" +msgstr "Felter fra Evolutions adressekartotek" #: ../sflphone-client-gnome/src/config/addressbook-config.c:345 msgid "_Work" -msgstr "" +msgstr "_Arbejde" #: ../sflphone-client-gnome/src/config/addressbook-config.c:351 msgid "_Home" -msgstr "" +msgstr "_Hjem" #: ../sflphone-client-gnome/src/config/addressbook-config.c:357 msgid "_Mobile" -msgstr "" +msgstr "_Mobil" #: ../sflphone-client-gnome/src/config/addressbook-config.c:364 msgid "Address Books" -msgstr "" +msgstr "Adressekartoteker" #: ../sflphone-client-gnome/src/config/addressbook-config.c:368 msgid "Select which Evolution address books to use" -msgstr "" +msgstr "Vælg hvilke af Evolutions adressekartoteker skal benyttes" #: ../sflphone-client-gnome/src/config/addressbook-config.c:404 #: ../sflphone-client-gnome/src/config/audioconf.c:578 msgid "Name" -msgstr "" +msgstr "Navn" #: ../sflphone-client-gnome/src/config/assistant.c:69 #, c-format @@ -557,6 +579,8 @@ msgid "" "You can at any time check your registration state or modify your accounts " "parameters in the Options/Accounts window." msgstr "" +"Du kan til enhver tid undersøge din registrering eller ændre dine kontis " +"parametre i vinduet Indstillinger/Konti" #: ../sflphone-client-gnome/src/config/assistant.c:74 msgid "Alias" @@ -572,20 +596,20 @@ msgstr "Brugernavn" #: ../sflphone-client-gnome/src/config/assistant.c:86 msgid "Security: " -msgstr "" +msgstr "Sikkerhed: " #: ../sflphone-client-gnome/src/config/assistant.c:88 msgid "SRTP/ZRTP draft-zimmermann" -msgstr "" +msgstr "SRTP/ZRTP draft-zimmermann" #: ../sflphone-client-gnome/src/config/assistant.c:90 #: ../sflphone-client-gnome/src/config/assistant.c:182 msgid "None" -msgstr "" +msgstr "Ingen" #: ../sflphone-client-gnome/src/config/assistant.c:210 msgid "SFLphone account creation wizard" -msgstr "" +msgstr "SFLphone-guiden til oprettelse af konto" #: ../sflphone-client-gnome/src/config/assistant.c:236 msgid "Welcome to the Account creation wizard of SFLphone!" @@ -640,7 +664,7 @@ msgstr "Udfyld venligst følgende information" #: ../sflphone-client-gnome/src/config/assistant.c:352 #: ../sflphone-client-gnome/src/config/assistant.c:381 msgid "Secure communications with _ZRTP" -msgstr "" +msgstr "Sikker kommunikation med _ZRTP" #: ../sflphone-client-gnome/src/config/assistant.c:365 msgid "Optional email address" @@ -653,7 +677,7 @@ msgstr "" #: ../sflphone-client-gnome/src/config/assistant.c:373 msgid "_Email address" -msgstr "" +msgstr "_Emailadresse" #: ../sflphone-client-gnome/src/config/assistant.c:394 msgid "IAX2 account settings" @@ -669,15 +693,15 @@ msgstr "Du opfordres til at aktivere dette hvis du er bag en firewall" #: ../sflphone-client-gnome/src/config/assistant.c:476 msgid "E_nable STUN" -msgstr "" +msgstr "_Benyt STUN" #: ../sflphone-client-gnome/src/config/assistant.c:483 msgid "_STUN server" -msgstr "" +msgstr "_STUN server" #: ../sflphone-client-gnome/src/config/assistant.c:497 msgid "Account Registration" -msgstr "" +msgstr "Kontoregistrering" #: ../sflphone-client-gnome/src/config/assistant.c:497 msgid "Congratulations!" @@ -697,39 +721,39 @@ msgstr "Båndbredde" #: ../sflphone-client-gnome/src/config/audioconf.c:673 msgid "ALSA plugin" -msgstr "" +msgstr "ALSA plugin" #: ../sflphone-client-gnome/src/config/audioconf.c:695 msgid "Output" -msgstr "" +msgstr "Uddata" #: ../sflphone-client-gnome/src/config/audioconf.c:717 msgid "Input" -msgstr "" +msgstr "Inddata" #: ../sflphone-client-gnome/src/config/audioconf.c:752 msgid "_Voice Activity Detection" -msgstr "" +msgstr "_Detektering af taleaktivitet" #: ../sflphone-client-gnome/src/config/audioconf.c:762 msgid "_Noise Reduction (Narrow-Band Companding)" -msgstr "" +msgstr "_Støjreducering (Narrow-Band Companding)" #: ../sflphone-client-gnome/src/config/audioconf.c:798 msgid "Sound Manager" -msgstr "" +msgstr "Lydhåndtering" #: ../sflphone-client-gnome/src/config/audioconf.c:807 msgid "_Pulseaudio" -msgstr "" +msgstr "_PulseAudio" #: ../sflphone-client-gnome/src/config/audioconf.c:811 msgid "_ALSA" -msgstr "" +msgstr "_ALSA" #: ../sflphone-client-gnome/src/config/audioconf.c:816 msgid "_Mute other applications during a call" -msgstr "" +msgstr "_Dæmp andre programmer ved opkald" #: ../sflphone-client-gnome/src/config/audioconf.c:823 msgid "ALSA settings" @@ -737,7 +761,7 @@ msgstr "ALSA indstillinger" #: ../sflphone-client-gnome/src/config/audioconf.c:840 msgid "Codecs" -msgstr "" +msgstr "Codecs" #: ../sflphone-client-gnome/src/config/audioconf.c:869 msgid "Recordings" @@ -745,52 +769,52 @@ msgstr "Optagelser" #: ../sflphone-client-gnome/src/config/audioconf.c:873 msgid "Destination folder" -msgstr "" +msgstr "Destinationsmappe" #: ../sflphone-client-gnome/src/config/audioconf.c:877 msgid "Select a folder" -msgstr "" +msgstr "Vælg en mappe" #: ../sflphone-client-gnome/src/config/audioconf.c:883 msgid "Ringtones" -msgstr "" +msgstr "Ringetoner" #: ../sflphone-client-gnome/src/config/audioconf.c:889 msgid "_Enable ringtones" -msgstr "" +msgstr "Aktiver _ringetoner" #: ../sflphone-client-gnome/src/config/audioconf.c:895 msgid "Choose a ringtone" -msgstr "" +msgstr "Vælg en ringetone" #: ../sflphone-client-gnome/src/config/audioconf.c:901 msgid "Audio Files" -msgstr "" +msgstr "Lydfiler" #: ../sflphone-client-gnome/src/config/hooks-config.c:130 msgid "URL Argument" -msgstr "" +msgstr "Adresseargument" #: ../sflphone-client-gnome/src/config/hooks-config.c:135 msgid "Custom commands on incoming calls with URL" -msgstr "" +msgstr "Brugerdefinerede kommandoer ved indgående opkald med webadresse" #: ../sflphone-client-gnome/src/config/hooks-config.c:138 #, c-format msgid "%s will be replaced with the passed URL." -msgstr "" +msgstr "%s vil blive erstattet med den givne webadresse." #: ../sflphone-client-gnome/src/config/hooks-config.c:141 msgid "Trigger on specific _SIP header" -msgstr "" +msgstr "Udløse ved specifik _SIP protokolhoved" #: ../sflphone-client-gnome/src/config/hooks-config.c:150 msgid "Trigger on _IAX2 URL" -msgstr "" +msgstr "Udløse ved _IAX2 webadresse" #: ../sflphone-client-gnome/src/config/hooks-config.c:155 msgid "Command to _run" -msgstr "" +msgstr "Kommando som skal _kaldes" #: ../sflphone-client-gnome/src/config/hooks-config.c:165 msgid "Phone number rewriting" @@ -798,7 +822,7 @@ msgstr "Omskrivning af telefonnummer" #: ../sflphone-client-gnome/src/config/hooks-config.c:169 msgid "_Prefix dialed numbers with" -msgstr "" +msgstr "_Præfiks for indtastede numre" #: ../sflphone-client-gnome/src/config/preferencesdialog.c:195 msgid "" @@ -806,6 +830,10 @@ msgid "" "sip URI such as <b>sip:remotepeer</b>. The settings you define here will " "also be used if no account can be matched to an incoming or outgoing call." msgstr "" +"Denne profil benyttes når du ønsker at kontakte en ekstern peer ved blot at " +"indtaste en sip-adresse såsom <b>sip:eksternpeer</b>. De indstillinger som " +"du definerer her vil også benyttes hvis ingen konto kan tilknyttes et " +"indgående eller udgående opkald." #: ../sflphone-client-gnome/src/config/preferencesdialog.c:274 msgid "SIP Port" @@ -813,43 +841,43 @@ msgstr "SIP Port" #: ../sflphone-client-gnome/src/config/preferencesdialog.c:281 msgid "UDP Transport" -msgstr "" +msgstr "UDP transport" #: ../sflphone-client-gnome/src/config/preferencesdialog.c:319 msgid "Desktop Notifications" -msgstr "" +msgstr "Meddelelser" #: ../sflphone-client-gnome/src/config/preferencesdialog.c:323 msgid "_Enable notifications" -msgstr "" +msgstr "_Aktiver meddelelser" #: ../sflphone-client-gnome/src/config/preferencesdialog.c:329 msgid "Enable voicemail _notifications" -msgstr "" +msgstr "Aktiver _talebeskedsmeddelelser" #: ../sflphone-client-gnome/src/config/preferencesdialog.c:341 msgid "System Tray Icon" -msgstr "" +msgstr "Systembakke-ikon" #: ../sflphone-client-gnome/src/config/preferencesdialog.c:344 msgid "_Popup main window on incoming call" -msgstr "" +msgstr "_Vis hovedvindue ved indgående opkald" #: ../sflphone-client-gnome/src/config/preferencesdialog.c:349 msgid "Ne_ver popup main window" -msgstr "" +msgstr "Aldrig _pop-op hovedvindue" #: ../sflphone-client-gnome/src/config/preferencesdialog.c:353 msgid "Hide SFLphone window on _startup" -msgstr "" +msgstr "Skjul SFLphone vinduet ved _start" #: ../sflphone-client-gnome/src/config/preferencesdialog.c:359 msgid "Calls History" -msgstr "" +msgstr "Opkaldshistorik" #: ../sflphone-client-gnome/src/config/preferencesdialog.c:362 msgid "_Keep my history for at least" -msgstr "" +msgstr "_Gem min historik i mindst" #: ../sflphone-client-gnome/src/config/preferencesdialog.c:373 msgid "days" @@ -857,15 +885,15 @@ msgstr "dage" #: ../sflphone-client-gnome/src/config/preferencesdialog.c:377 msgid "Configuration File" -msgstr "" +msgstr "Konfigurationsfil" #: ../sflphone-client-gnome/src/config/preferencesdialog.c:379 msgid "Store SIP credentials as MD5 hash" -msgstr "" +msgstr "Gem SIP-legitimationsoplysninger som _MD5-hash-værdi" #: ../sflphone-client-gnome/src/config/preferencesdialog.c:423 msgid "Preferences" -msgstr "" +msgstr "Indstillinger" #: ../sflphone-client-gnome/src/config/preferencesdialog.c:448 msgid "Audio" @@ -877,19 +905,19 @@ msgstr "Adressebog" #: ../sflphone-client-gnome/src/config/preferencesdialog.c:458 msgid "Hooks" -msgstr "" +msgstr "Hooks" #: ../sflphone-client-gnome/src/config/preferencesdialog.c:468 msgid "Direct IP calls" -msgstr "" +msgstr "Direkte IP opkald" #: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:38 msgid "Advanced options for TLS" -msgstr "" +msgstr "Advancerede indstillinger for TLS" #: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:55 msgid "TLS transport" -msgstr "" +msgstr "TLS transport" #: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:59 msgid "" @@ -899,78 +927,82 @@ msgid "" "dedicated\n" "port, different one from each other\n" msgstr "" +"TLS transport kan benyttes sammen med UDP for de opkald som kræver\n" +"sikker sip transaktion (også kaldet SIPS). Du kan konfigurere forskellige\n" +"TLS transporter for de enkelte konti. Bemærk dog at de hver vil benytte\n" +"en dedikeret port forskellig fra hinanden.\n" #: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:100 msgid "Certificate of Authority list" -msgstr "" +msgstr "Autoritetscertifikatsliste" #: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:104 msgid "Choose a CA list file (optional)" -msgstr "" +msgstr "Vælg en fil med en autoritetscertifikatsliste (valgfri)" #: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:115 msgid "Public endpoint certificate file" -msgstr "" +msgstr "Offentlig endpoint certifikatsfil" #: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:119 msgid "Choose a public endpoint certificate (optional)" -msgstr "" +msgstr "Vælg et offentligt endpoint-certifikat (valgfri)" #: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:134 msgid "Choose a private key file (optional)" -msgstr "" +msgstr "Vælg en privat nøglefil (valgfri)" #: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:145 msgid "Password for the private key" -msgstr "" +msgstr "Adgangskode for den private nøgle" #: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:168 msgid "TLS protocol method" -msgstr "" +msgstr "TLS protokolmetode" #: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:202 msgid "TLS cipher list" -msgstr "" +msgstr "TLS cifferliste" #: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:211 msgid "Server name instance for outgoing TLS connection" -msgstr "" +msgstr "Server navneinstans for udgående TLS forbindelse" #: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:219 msgid "Negotiation timeout (sec:msec)" -msgstr "" +msgstr "Forhandlingstimeout" #: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:236 msgid "Verify incoming certificates, as a server" -msgstr "" +msgstr "Udfør kontrol af indgående certifikater, som en server" #: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:242 msgid "Verify certificates from answer, as a client" -msgstr "" +msgstr "Udfør kontrol af certifikater fra svar, som en klient" #: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:248 msgid "Require certificate for incoming tls connections" -msgstr "" +msgstr "Kræv certifikat for indgående TLS forbindelser" #: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:49 msgid "ZRTP Options" -msgstr "" +msgstr "ZRTP indstillinger" #: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:68 msgid "Send Hello Hash in S_DP" -msgstr "" +msgstr "Send \"Hello Hash\" i S_DP" #: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:74 msgid "Ask User to Confirm SAS" -msgstr "" +msgstr "_Spørg bruger om at godkende SAS" #: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:80 msgid "_Warn if ZRTP not supported" -msgstr "" +msgstr "_Advar hvis ZRTP ikke understøttes" #: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:86 msgid "Display SAS once for hold events" -msgstr "" +msgstr "_Vis SAS en enkelt gang for vente-hændelser" #: ../sflphone-client-gnome/src/contacts/searchbar.c:56 msgid "Search all" @@ -985,12 +1017,12 @@ msgstr "Klik her for at ændre søgningstypen" #: ../sflphone-client-gnome/src/contacts/searchbar.c:69 msgid "Search by missed call" -msgstr "" +msgstr "Søg i ubesvarede opkald" #: ../sflphone-client-gnome/src/contacts/searchbar.c:81 msgid "Search by incoming call" -msgstr "" +msgstr "Søg i indgående opkald" #: ../sflphone-client-gnome/src/contacts/searchbar.c:93 msgid "Search by outgoing call" -msgstr "" +msgstr "Søg i udgående opkald" diff --git a/lang/de/de.po b/lang/de/de.po index 7459095a39..ccf215dcdc 100644 --- a/lang/de/de.po +++ b/lang/de/de.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: sflphone\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2009-10-14 11:18-0400\n" -"PO-Revision-Date: 2009-10-15 00:00+0000\n" +"PO-Revision-Date: 2009-10-26 20:46+0000\n" "Last-Translator: Maxime Chambreuil <maxime.chambreuil@gmail.com>\n" "Language-Team: SavoirFaire Linux Inc <sflphoneteam@savoirfairelinux.com>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Launchpad-Export-Date: 2009-10-26 15:48+0000\n" +"X-Launchpad-Export-Date: 2009-12-03 15:32+0000\n" "X-Generator: Launchpad (build Unknown)\n" #: ../sflphone-client-gnome/src/accountlist.c:175 @@ -161,18 +161,18 @@ msgstr "" #: ../sflphone-client-gnome/src/mainwindow.c:392 msgid "Secure Communication Unavailable" -msgstr "" +msgstr "Sichere Verbindung nicht verfügbar" #: ../sflphone-client-gnome/src/mainwindow.c:393 #: ../sflphone-client-gnome/src/mainwindow.c:415 msgid "Continue" -msgstr "" +msgstr "Weiter" #: ../sflphone-client-gnome/src/mainwindow.c:394 #: ../sflphone-client-gnome/src/mainwindow.c:416 #: ../sflphone-client-gnome/src/mainwindow.c:430 msgid "Stop Call" -msgstr "" +msgstr "Anruf beenden" #: ../sflphone-client-gnome/src/mainwindow.c:413 #, c-format @@ -198,7 +198,7 @@ msgstr "" #: ../sflphone-client-gnome/src/mainwindow.c:429 msgid "Confirm" -msgstr "" +msgstr "Bestätigen" #: ../sflphone-client-gnome/src/sflnotify.c:71 #: ../sflphone-client-gnome/src/sflnotify.c:91 @@ -323,7 +323,7 @@ msgstr "Nummer vor dem Anruf editieren" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:164 msgid "Account Parameters" -msgstr "" +msgstr "Konto parameter" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:173 #: ../sflphone-client-gnome/src/config/assistant.c:294 @@ -365,11 +365,11 @@ msgstr "_Voicemail Nummer" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:340 msgid "Authentication" -msgstr "" +msgstr "Authentifizierung" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:341 msgid "Secret" -msgstr "" +msgstr "Geheim" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:466 msgid "Credential" @@ -377,7 +377,7 @@ msgstr "" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:501 msgid "Authentication name" -msgstr "" +msgstr "Authentifizierung Name" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:512 msgid "Password" @@ -402,11 +402,11 @@ msgstr "" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:558 #: ../sflphone-client-gnome/src/config/preferencesdialog.c:224 msgid "Disabled" -msgstr "" +msgstr "Deaktiviert" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:674 msgid "Registration" -msgstr "" +msgstr "Anmeldung" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:679 msgid "Registration expire" @@ -419,15 +419,15 @@ msgstr "" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:693 #: ../sflphone-client-gnome/src/config/preferencesdialog.c:463 msgid "Network" -msgstr "" +msgstr "Netzwerk" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:707 msgid "Local address" -msgstr "" +msgstr "Adresse (lokal)" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:744 msgid "Local port" -msgstr "" +msgstr "Port (lokal)" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:752 msgid "Set published address and port:" @@ -463,11 +463,11 @@ msgstr "Kontoeinstellungen" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:899 msgid "Basic" -msgstr "" +msgstr "Allgemein" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:904 msgid "Advanced" -msgstr "" +msgstr "Erweitert" #: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:169 msgid "Server returned \"" @@ -483,7 +483,7 @@ msgstr "Status" #: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:474 msgid "Accounts" -msgstr "" +msgstr "Konten" #: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:484 msgid "Configured Accounts" @@ -491,19 +491,19 @@ msgstr "Konfigurierten Konten" #: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:505 msgid "There " -msgstr "" +msgstr "Es " #: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:506 msgid "is " -msgstr "" +msgstr "gibt " #: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:506 msgid "are " -msgstr "" +msgstr "gibt " #: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:508 msgid " active account" -msgstr "" +msgstr " aktive Konten" #: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:509 msgid "s" @@ -511,12 +511,12 @@ msgstr "" #: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:514 msgid "You have no active account" -msgstr "" +msgstr "Sie haben kein aktives Konto" #: ../sflphone-client-gnome/src/config/addressbook-config.c:306 #: ../sflphone-client-gnome/src/config/preferencesdialog.c:443 msgid "General" -msgstr "" +msgstr "Allgemein" #: ../sflphone-client-gnome/src/config/addressbook-config.c:312 msgid "_Use Evolution address books" @@ -590,7 +590,7 @@ msgstr "Benutzername" #: ../sflphone-client-gnome/src/config/assistant.c:86 msgid "Security: " -msgstr "" +msgstr "Sicherheit: " #: ../sflphone-client-gnome/src/config/assistant.c:88 msgid "SRTP/ZRTP draft-zimmermann" @@ -658,7 +658,7 @@ msgstr "Folgende Informationen bitte ausfühlen" #: ../sflphone-client-gnome/src/config/assistant.c:352 #: ../sflphone-client-gnome/src/config/assistant.c:381 msgid "Secure communications with _ZRTP" -msgstr "" +msgstr "Sichere Kommunikation mit _ZRTP" #: ../sflphone-client-gnome/src/config/assistant.c:365 msgid "Optional email address" @@ -760,7 +760,7 @@ msgstr "Codecs" #: ../sflphone-client-gnome/src/config/audioconf.c:869 msgid "Recordings" -msgstr "" +msgstr "Aufnahmen" #: ../sflphone-client-gnome/src/config/audioconf.c:873 msgid "Destination folder" @@ -832,7 +832,7 @@ msgstr "SIP Port" #: ../sflphone-client-gnome/src/config/preferencesdialog.c:281 msgid "UDP Transport" -msgstr "" +msgstr "UDP Transport" #: ../sflphone-client-gnome/src/config/preferencesdialog.c:319 msgid "Desktop Notifications" @@ -876,7 +876,7 @@ msgstr "Tage" #: ../sflphone-client-gnome/src/config/preferencesdialog.c:377 msgid "Configuration File" -msgstr "" +msgstr "Einrichtungsdatei" #: ../sflphone-client-gnome/src/config/preferencesdialog.c:379 msgid "Store SIP credentials as MD5 hash" @@ -973,7 +973,7 @@ msgstr "" #: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:49 msgid "ZRTP Options" -msgstr "" +msgstr "ZRTP Optionen" #: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:68 msgid "Send Hello Hash in S_DP" @@ -985,7 +985,7 @@ msgstr "" #: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:80 msgid "_Warn if ZRTP not supported" -msgstr "" +msgstr "_Warnung wenn ZRTP nicht unterstüzt" #: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:86 msgid "Display SAS once for hold events" @@ -1062,14 +1062,6 @@ msgstr "Suche nach ausgehenden Anru" #~ msgid "Jérémy Quentin" #~ msgstr "Jérémy Quentin" -#~ msgctxt "NAME OF TRANSLATORS" -#~ msgid "Your names" -#~ msgstr "Ihre Namen, ,Launchpad Contributions:,Maxime Chambreuil,Sven Werlen" - -#~ msgctxt "EMAIL OF TRANSLATORS" -#~ msgid "Your emails" -#~ msgstr "Ihre E-Mail-Adressen,,,maxime.chambreuil@gmail.com," - #~ msgid "Incoming call" #~ msgstr "Eingehende Anrufe" @@ -1317,3 +1309,16 @@ msgstr "Suche nach ausgehenden Anru" #~ msgid "Port" #~ msgstr "Port" + +#~ msgctxt "NAME OF TRANSLATORS" +#~ msgid "Your names" +#~ msgstr "" +#~ "Ihre Namen, ,Launchpad Contributions:,Maxime Chambreuil,Sven Werlen, " +#~ ",Launchpad Contributions:,Maxime Chambreuil,Sven Werlen,Sven Werlen" + +#~ msgctxt "EMAIL OF TRANSLATORS" +#~ msgid "Your emails" +#~ msgstr "" +#~ "Ihre E-Mail-" +#~ "Adressen,,,maxime.chambreuil@gmail.com,,,,maxime.chambreuil@gmail.com,,sven.w" +#~ "erlen@gmail.com" diff --git a/lang/es/es.po b/lang/es/es.po index 3ec57681b1..e05252337d 100644 --- a/lang/es/es.po +++ b/lang/es/es.po @@ -10,14 +10,14 @@ msgstr "" "Project-Id-Version: SFLphone 0.9.4\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2009-10-14 11:18-0400\n" -"PO-Revision-Date: 2009-10-14 23:39+0000\n" +"PO-Revision-Date: 2009-10-26 20:46+0000\n" "Last-Translator: Maxime Chambreuil <maxime.chambreuil@gmail.com>\n" "Language-Team: SavoirFaireLinux Inc <sflphoneteam@savoirfairelinux.com>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Launchpad-Export-Date: 2009-10-26 15:48+0000\n" +"X-Launchpad-Export-Date: 2009-12-03 15:32+0000\n" "X-Generator: Launchpad (build Unknown)\n" #: ../sflphone-client-gnome/src/accountlist.c:175 @@ -1634,11 +1634,13 @@ msgstr "Buscar en llamadas salientes" #~ msgstr "" #~ "Maxime Chambreuil, ,Launchpad Contributions:,Andres Mujica,Maxime " #~ "Chambreuil, ,Launchpad Contributions:,Andres Mujica,Maxime Chambreuil, " -#~ ",Launchpad Contributions:,Andres Mujica,Maxime Chambreuil" +#~ ",Launchpad Contributions:,Andres Mujica,Maxime Chambreuil, ,Launchpad " +#~ "Contributions:,Andres Mujica,Maxime Chambreuil" #~ msgctxt "EMAIL OF TRANSLATORS" #~ msgid "Your emails" #~ msgstr "" #~ "maxime.chambreuil@savoirfairelinux.com,,,andres.mujica@seaq.com.co,maxime.cha" #~ "mbreuil@gmail.com,,,andres.mujica@seaq.com.co,maxime.chambreuil@gmail.com,,,a" -#~ "ndres.mujica@seaq.com.co,maxime.chambreuil@gmail.com" +#~ "ndres.mujica@seaq.com.co,maxime.chambreuil@gmail.com,,,andres.mujica@seaq.com" +#~ ".co,maxime.chambreuil@gmail.com" diff --git a/lang/it/it.po b/lang/it/it.po index 88fc58458f..52a0a6a5f3 100644 --- a/lang/it/it.po +++ b/lang/it/it.po @@ -1,21 +1,21 @@ -# SFLphone italian translation. +# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. # msgid "" msgstr "" -"Project-Id-Version: 0.9.7\n" +"Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2009-10-14 11:18-0400\n" "PO-Revision-Date: 2009-10-14 17:47+0000\n" -"Last-Translator: Stefano Scamuzzo <stefano.scamuzzo@eng.it>\n" +"Last-Translator: Maxime Chambreuil <maxime.chambreuil@gmail.com>\n" "Language-Team: LANGUAGE <LL@li.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Launchpad-Export-Date: 2009-10-26 15:48+0000\n" +"X-Launchpad-Export-Date: 2009-12-03 15:32+0000\n" "X-Generator: Launchpad (build Unknown)\n" #: ../sflphone-client-gnome/src/accountlist.c:175 @@ -103,7 +103,7 @@ msgid "" "</b> SFL audio codecs have to be placed in <i>%s</i> or in the " "<b>.sflphone</b> directory in your home( <i>%s</i> )" msgstr "" -"<b>Errore: Non è stato trovato alcun codec audio.</b>\n" +"<b>Errore: Non è stato trovato alcun codec audio.</b>\n" "\n" "I codec audio SFL devono trovarsi in <i>%s</i> o nella sottocartella " "<b>.sflphone</b> della cartella home dell'utente (</i>%s</i>)" @@ -133,11 +133,11 @@ msgid "" "Pulseaudio is not running" msgstr "" "Notifica PulseAudio\n" -"PulseAudio non è in esecuzione" +"PulseAudio non è in esecuzione" #: ../sflphone-client-gnome/src/mainwindow.c:73 msgid "There is one call in progress." -msgstr "C'è una chiamata in corso." +msgstr "C'è una chiamata in corso." #: ../sflphone-client-gnome/src/mainwindow.c:77 msgid "There are calls in progress." @@ -154,42 +154,40 @@ msgstr "Errore SFLphone" #: ../sflphone-client-gnome/src/mainwindow.c:391 #, c-format msgid "ZRTP is not supported by peer %s\n" -msgstr "ZRPT non supportato dal nodo %s\n" +msgstr "" #: ../sflphone-client-gnome/src/mainwindow.c:392 msgid "Secure Communication Unavailable" -msgstr "Comunicazione sicura non disponibile" +msgstr "" #: ../sflphone-client-gnome/src/mainwindow.c:393 #: ../sflphone-client-gnome/src/mainwindow.c:415 msgid "Continue" -msgstr "Continua" +msgstr "" #: ../sflphone-client-gnome/src/mainwindow.c:394 #: ../sflphone-client-gnome/src/mainwindow.c:416 #: ../sflphone-client-gnome/src/mainwindow.c:430 msgid "Stop Call" -msgstr "Chiudi la chiamata" +msgstr "" #: ../sflphone-client-gnome/src/mainwindow.c:413 #, c-format msgid "" "A %s error forced the call with %s to fall under unencrypted mode.\n" "Exact reason: %s\n" -msgstr "Un errore %s ha provocato il passaggio della chiamata %s in modalità non sicura.\n" -"Motivo esatto: %s\n" +msgstr "" #: ../sflphone-client-gnome/src/mainwindow.c:414 msgid "ZRTP negotiation failed" -msgstr "Negoziazione ZRTP fallita" +msgstr "" #: ../sflphone-client-gnome/src/mainwindow.c:427 #, c-format msgid "" "%s wants to stop using secure communication. Confirm will resume " "conversation without SRTP.\n" -msgstr "%s vuole terminare l'uso della comunicazione sicura. Conferma ripristinerà " -"la converazione senza SRTP.\n" +msgstr "" #: ../sflphone-client-gnome/src/mainwindow.c:428 msgid "Confirm Go Clear" @@ -197,7 +195,7 @@ msgstr "" #: ../sflphone-client-gnome/src/mainwindow.c:429 msgid "Confirm" -msgstr "Conferma" +msgstr "" #: ../sflphone-client-gnome/src/sflnotify.c:71 #: ../sflphone-client-gnome/src/sflnotify.c:91 @@ -233,23 +231,21 @@ msgid "" "<i>With:</i> %s \n" "using %s" msgstr "" -"<i>con:</i> %s \n" -"utilizzando $s" #: ../sflphone-client-gnome/src/sflnotify.c:205 #, c-format msgid "%s does not support ZRTP." -msgstr "%s non supporta ZRTP." +msgstr "" #: ../sflphone-client-gnome/src/sflnotify.c:220 #, c-format msgid "ZRTP negotiation failed with %s" -msgstr "Negoziazione ZRTP con %s fallita" +msgstr "" #: ../sflphone-client-gnome/src/sflnotify.c:235 #, c-format msgid "<i>With:</i> %s" -msgstr "<i>Con:</i> %s" +msgstr "" #: ../sflphone-client-gnome/src/sliders.c:162 msgid "Speakers volume" @@ -281,7 +277,7 @@ msgstr "Segreteria telefonica" #: ../sflphone-client-gnome/src/uimanager.c:403 msgid "SFLphone is a VoIP client compatible with SIP and IAX2 protocols." -msgstr "SFLphone è un client VoIP compatibile con i protocolli SIP e IAX2." +msgstr "SFLphone è un client VoIP compatibile con i protocolli SIP e IAX2." #: ../sflphone-client-gnome/src/uimanager.c:406 msgid "About SFLphone" @@ -307,7 +303,7 @@ msgstr "_Registra" #: ../sflphone-client-gnome/src/uimanager.c:1154 msgid "_Call back" -msgstr "Richiama" +msgstr "" #: ../sflphone-client-gnome/src/uimanager.c:1226 msgid "_New call" @@ -315,11 +311,11 @@ msgstr "Chiama" #: ../sflphone-client-gnome/src/uimanager.c:1300 msgid "Edit phone number" -msgstr "Modifica numero di telefono" +msgstr "" #: ../sflphone-client-gnome/src/uimanager.c:1311 msgid "Edit the phone number before making a call" -msgstr "Modifica il numero di telefono prima di chiamare" +msgstr "" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:164 msgid "Account Parameters" @@ -365,19 +361,19 @@ msgstr "Numero segreteria telefonica" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:340 msgid "Authentication" -msgstr "Autenticazione" +msgstr "" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:341 msgid "Secret" -msgstr "Segreto" +msgstr "" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:466 msgid "Credential" -msgstr "Credenziali" +msgstr "" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:501 msgid "Authentication name" -msgstr "Nome autenticazione" +msgstr "" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:512 msgid "Password" @@ -387,26 +383,26 @@ msgstr "Password" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:909 #: ../sflphone-client-gnome/src/config/preferencesdialog.c:201 msgid "Security" -msgstr "Sicurezza" +msgstr "" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:547 #: ../sflphone-client-gnome/src/config/preferencesdialog.c:213 msgid "Use TLS transport (sips)" -msgstr "Utilizza il trasporto TLS (sips)" +msgstr "" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:552 #: ../sflphone-client-gnome/src/config/preferencesdialog.c:218 msgid "SRTP key exchange" -msgstr "Scambio di chiavi SRTP" +msgstr "" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:558 #: ../sflphone-client-gnome/src/config/preferencesdialog.c:224 msgid "Disabled" -msgstr "Disabilitato" +msgstr "" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:674 msgid "Registration" -msgstr "Registrazione" +msgstr "" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:679 msgid "Registration expire" @@ -414,7 +410,7 @@ msgstr "Scadenza registrazione" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:687 msgid "_Comply with RFC 3263" -msgstr "Compatibile con RFC 3263" +msgstr "" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:693 #: ../sflphone-client-gnome/src/config/preferencesdialog.c:463 @@ -423,39 +419,39 @@ msgstr "Rete" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:707 msgid "Local address" -msgstr "Indirizzo locale" +msgstr "" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:744 msgid "Local port" -msgstr "Porta locale" +msgstr "" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:752 msgid "Set published address and port:" -msgstr "Configura indirizzo pubblicato e porta:" +msgstr "" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:756 msgid "Using STUN " -msgstr "Utilizza STUN " +msgstr "" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:761 msgid "Same as local parameters" -msgstr "Come paramteri locali" +msgstr "" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:764 msgid "Manually" -msgstr "Manuale" +msgstr "" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:769 msgid "Published address" -msgstr "Indirizzo pubblicato" +msgstr "" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:777 msgid "Published port" -msgstr "Porta pubblicata" +msgstr "" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:785 msgid "STUN server URL" -msgstr "URL del server STUN" +msgstr "" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:880 msgid "Account settings" @@ -471,7 +467,7 @@ msgstr "Avanzate" #: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:169 msgid "Server returned \"" -msgstr "Il server ha restituito \"" +msgstr "" #: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:389 msgid "Protocol" @@ -483,7 +479,7 @@ msgstr "Stato" #: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:474 msgid "Accounts" -msgstr "Accounts" +msgstr "Account" #: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:484 msgid "Configured Accounts" @@ -495,15 +491,15 @@ msgstr "" #: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:506 msgid "is " -msgstr "è" +msgstr "" #: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:506 msgid "are " -msgstr "sono" +msgstr "" #: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:508 msgid " active account" -msgstr " account attivo" +msgstr "" #: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:509 msgid "s" @@ -511,12 +507,12 @@ msgstr "" #: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:514 msgid "You have no active account" -msgstr "Non ci sono account attivi" +msgstr "" #: ../sflphone-client-gnome/src/config/addressbook-config.c:306 #: ../sflphone-client-gnome/src/config/preferencesdialog.c:443 msgid "General" -msgstr "Generale" +msgstr "" #: ../sflphone-client-gnome/src/config/addressbook-config.c:312 msgid "_Use Evolution address books" @@ -524,11 +520,11 @@ msgstr "_Usa la rubrica di Evolution" #: ../sflphone-client-gnome/src/config/addressbook-config.c:319 msgid "Download limit :" -msgstr "Limite per il download: " +msgstr "" #: ../sflphone-client-gnome/src/config/addressbook-config.c:327 msgid "cards" -msgstr "schede" +msgstr "tessere" #: ../sflphone-client-gnome/src/config/addressbook-config.c:333 msgid "_Display contact photo if available" @@ -572,12 +568,11 @@ msgstr "La procedura guidata è terminata." msgid "" "You can at any time check your registration state or modify your accounts " "parameters in the Options/Accounts window." -msgstr "In qualsiasi momento puoi controllare lo stato della tua registrazione o modificare i tuoi parametri" -"di acccount nella finestra Opzioni/Accounts." +msgstr "" #: ../sflphone-client-gnome/src/config/assistant.c:74 msgid "Alias" -msgstr "Alias" +msgstr "Pseudonimo" #: ../sflphone-client-gnome/src/config/assistant.c:78 msgid "Server" @@ -589,20 +584,20 @@ msgstr "Nome utente" #: ../sflphone-client-gnome/src/config/assistant.c:86 msgid "Security: " -msgstr "Sicurezza: " +msgstr "" #: ../sflphone-client-gnome/src/config/assistant.c:88 msgid "SRTP/ZRTP draft-zimmermann" -msgstr "SRTP/ZRTP draft-zimmermann" +msgstr "" #: ../sflphone-client-gnome/src/config/assistant.c:90 #: ../sflphone-client-gnome/src/config/assistant.c:182 msgid "None" -msgstr "Nessuno" +msgstr "" #: ../sflphone-client-gnome/src/config/assistant.c:210 msgid "SFLphone account creation wizard" -msgstr "Procedura guidata per la creazione dell'account SFLphone" +msgstr "" #: ../sflphone-client-gnome/src/config/assistant.c:236 msgid "Welcome to the Account creation wizard of SFLphone!" @@ -611,7 +606,7 @@ msgstr "" #: ../sflphone-client-gnome/src/config/assistant.c:237 msgid "This installation wizard will help you configure an account." -msgstr "Questa procedura di installazione permetterà di configurare un account." +msgstr "Questa procedura permetterà di configurare un account." #: ../sflphone-client-gnome/src/config/assistant.c:251 msgid "VoIP Protocols" @@ -652,12 +647,12 @@ msgstr "Impostazioni account SIP" #: ../sflphone-client-gnome/src/config/assistant.c:286 #: ../sflphone-client-gnome/src/config/assistant.c:394 msgid "Please fill the following information" -msgstr "Per favore compila le seguenti informazioni" +msgstr "" #: ../sflphone-client-gnome/src/config/assistant.c:352 #: ../sflphone-client-gnome/src/config/assistant.c:381 msgid "Secure communications with _ZRTP" -msgstr "Comunicazioni sicure con _ZRTP" +msgstr "" #: ../sflphone-client-gnome/src/config/assistant.c:365 msgid "Optional email address" @@ -666,7 +661,7 @@ msgstr "Indirizzo email opzionale" #: ../sflphone-client-gnome/src/config/assistant.c:365 msgid "This email address will be used to send your voicemail messages." msgstr "" -"L'indirizzo email sarà usato per l'invio dei messaggi della segreteria " +"L'indirizzo email sarà usato per l'invio dei messaggi della segreteria " "telefonica." #: ../sflphone-client-gnome/src/config/assistant.c:373 @@ -727,15 +722,15 @@ msgstr "Ingresso" #: ../sflphone-client-gnome/src/config/audioconf.c:752 msgid "_Voice Activity Detection" -msgstr "Rilevazione dell'attività _Voce" +msgstr "" #: ../sflphone-client-gnome/src/config/audioconf.c:762 msgid "_Noise Reduction (Narrow-Band Companding)" -msgstr "Riduzione del rumore (Narrow-Band Companding)" +msgstr "" #: ../sflphone-client-gnome/src/config/audioconf.c:798 msgid "Sound Manager" -msgstr "Gestore del suono" +msgstr "" #: ../sflphone-client-gnome/src/config/audioconf.c:807 msgid "_Pulseaudio" @@ -787,16 +782,16 @@ msgstr "File audio" #: ../sflphone-client-gnome/src/config/hooks-config.c:130 msgid "URL Argument" -msgstr "Stringa URL" +msgstr "" #: ../sflphone-client-gnome/src/config/hooks-config.c:135 msgid "Custom commands on incoming calls with URL" -msgstr "Comandi custom sulle chiamate in ingresso con URL" +msgstr "" #: ../sflphone-client-gnome/src/config/hooks-config.c:138 #, c-format msgid "%s will be replaced with the passed URL." -msgstr "%s saranno rimpiazzati dall'URL fornito." +msgstr "" #: ../sflphone-client-gnome/src/config/hooks-config.c:141 msgid "Trigger on specific _SIP header" @@ -824,9 +819,6 @@ msgid "" "sip URI such as <b>sip:remotepeer</b>. The settings you define here will " "also be used if no account can be matched to an incoming or outgoing call." msgstr "" -"Questo profilo è utilizzato quando vuoi raggiungere un nodo remoto semplicemente digitando un " -"URI sip tipo <b>sip:remotepeer</b>. Le configurazione che definisci qui saranno " -"usate anche se nessun account corrisponde ad una chiamata in ingresso o in uscita." #: ../sflphone-client-gnome/src/config/preferencesdialog.c:274 msgid "SIP Port" @@ -834,7 +826,7 @@ msgstr "SIP Port" #: ../sflphone-client-gnome/src/config/preferencesdialog.c:281 msgid "UDP Transport" -msgstr "Trasporto UDP" +msgstr "" #: ../sflphone-client-gnome/src/config/preferencesdialog.c:319 msgid "Desktop Notifications" @@ -878,11 +870,11 @@ msgstr "giorni" #: ../sflphone-client-gnome/src/config/preferencesdialog.c:377 msgid "Configuration File" -msgstr "File di configurazione" +msgstr "" #: ../sflphone-client-gnome/src/config/preferencesdialog.c:379 msgid "Store SIP credentials as MD5 hash" -msgstr "Memorizza le credenziali SIP in MD5" +msgstr "" #: ../sflphone-client-gnome/src/config/preferencesdialog.c:423 msgid "Preferences" @@ -898,19 +890,19 @@ msgstr "Rubrica" #: ../sflphone-client-gnome/src/config/preferencesdialog.c:458 msgid "Hooks" -msgstr "Agganci" +msgstr "" #: ../sflphone-client-gnome/src/config/preferencesdialog.c:468 msgid "Direct IP calls" -msgstr "Chiamate IP dirette" +msgstr "" #: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:38 msgid "Advanced options for TLS" -msgstr "Opzioni avanzate per TLS" +msgstr "" #: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:55 msgid "TLS transport" -msgstr "Trasporto TLS" +msgstr "" #: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:59 msgid "" @@ -920,78 +912,74 @@ msgid "" "dedicated\n" "port, different one from each other\n" msgstr "" -"Il trasporto TLS può essere utilizzato con UDP per le chiamate che\n" -"richiedono transazioni sip sicure (aka SIPS). Puoi configurare un trasporto\n" -"TLS diverso per ognia account. Tuttavia, ognuino di essi girerà su una " -"porta dedicata, differente dalle altre\n" #: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:100 msgid "Certificate of Authority list" -msgstr "Lista delle Autorità di certificazione" +msgstr "" #: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:104 msgid "Choose a CA list file (optional)" -msgstr "Scelgi una lista di CA (opzionale)" +msgstr "" #: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:115 msgid "Public endpoint certificate file" -msgstr "File di certificato dell'endpoint pubblico" +msgstr "" #: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:119 msgid "Choose a public endpoint certificate (optional)" -msgstr "Scegli un certificato dell'endpoint pubblico (opzionale)" +msgstr "" #: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:134 msgid "Choose a private key file (optional)" -msgstr "Scegli un file con la chiave privata (opzionale)" +msgstr "" #: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:145 msgid "Password for the private key" -msgstr "Password per la chiave privata" +msgstr "" #: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:168 msgid "TLS protocol method" -msgstr "Metodo del protocollo TLS" +msgstr "" #: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:202 msgid "TLS cipher list" -msgstr "Cifratura TLS" +msgstr "" #: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:211 msgid "Server name instance for outgoing TLS connection" -msgstr "Nome dell'istanza serfer pre connessioni TLS in uscita" +msgstr "" #: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:219 msgid "Negotiation timeout (sec:msec)" -msgstr "Timeout di negoziazione (sec:msec)" +msgstr "" #: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:236 msgid "Verify incoming certificates, as a server" -msgstr "Verifica certificati in ingresso, come server" +msgstr "" #: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:242 msgid "Verify certificates from answer, as a client" -msgstr "Verifica certificati nella risposta, come client" +msgstr "" #: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:248 msgid "Require certificate for incoming tls connections" -msgstr "Richiede un certificato per le connessioni tls in ingresso" +msgstr "" #: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:49 msgid "ZRTP Options" -msgstr "Opziobi ZRTP" +msgstr "" #: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:68 msgid "Send Hello Hash in S_DP" -msgstr "Invia Hello Hash in S_DP" +msgstr "" #: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:74 msgid "Ask User to Confirm SAS" -msgstr "Chiedi all'utente di confermare SAS" +msgstr "" #: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:80 msgid "_Warn if ZRTP not supported" -msgstr "Notifica se ZRTP non è supportato" +msgstr "" #: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:86 msgid "Display SAS once for hold events" @@ -1023,8 +1011,8 @@ msgstr "Cerca tra le chiamate effettuate" #~ msgid "(C) 2009 Savoir-faire Linux" #~ msgstr "(C) 2009 Savoir-faire Linux" -#~ msgid "Jérémy Quentin" -#~ msgstr "Jérémy Quentin" +#~ msgid "Jérémy Quentin" +#~ msgstr "Jérémy Quentin" #~ msgid "Address book" #~ msgstr "Rubrica" @@ -1096,7 +1084,7 @@ msgstr "Cerca tra le chiamate effettuate" #~ msgstr "_Account" #~ msgid "Port" -#~ msgstr "Porta" +#~ msgstr "Port" #~ msgid "PulseAudio sound server" #~ msgstr "Server audio PulseAudio" @@ -1156,7 +1144,7 @@ msgstr "Cerca tra le chiamate effettuate" #~ msgstr "Abilita STUN" #~ msgid "Format : name.server:port" -#~ msgstr "Formato: nome.server:porta" +#~ msgstr "Formato: nome.del.server:porta" #~ msgid "Incoming call" #~ msgstr "Chiamata in arrivo" @@ -1195,24 +1183,24 @@ msgstr "Cerca tra le chiamate effettuate" #~ "Pressing \"apply\" will restart the network layer. Otherwise, SFLPhone would " #~ "have to be restarted." #~ msgstr "" -#~ "Premendo il tasto \"Applica\" il modulo di rete verrà riavviato. In " +#~ "Premendo il tasto \"Applica\" il modulo di rete verrà riavviato. In " #~ "alternativa occorrerebbe riavviare SFLphone." #~ msgid "Creation of account has failed for the reason" -#~ msgstr "La creazione dell'account è fallita per il seguente motivo" +#~ msgstr "La creazione dell'accound è fallita per il seguente motivo" #~ msgid "Account creation wizard" #~ msgstr "Procedura guidata creazione account" #~ msgctxt "NAME OF TRANSLATORS" #~ msgid "Your names" -#~ msgstr "I tuoi nomi" +#~ msgstr "" #~ ",Launchpad Contributions:,Maurizio Porrato,Maxime Chambreuil, ,Launchpad " #~ "Contributions:,Maurizio Porrato,Maxime Chambreuil, ,Launchpad " #~ "Contributions:,Maurizio Porrato,Maxime Chambreuil" #~ msgctxt "EMAIL OF TRANSLATORS" #~ msgid "Your emails" -#~ msgstr "I tuoi indirizzi email" +#~ msgstr "" #~ ",,,maxime.chambreuil@gmail.com,,,,maxime.chambreuil@gmail.com,,,,maxime.chamb" #~ "reuil@gmail.com" diff --git a/lang/ja.po b/lang/ja.po deleted file mode 100644 index 2cf0f2f7b7..0000000000 --- a/lang/ja.po +++ /dev/null @@ -1,995 +0,0 @@ -# Japanese translation for sflphone -# Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 -# This file is distributed under the same license as the sflphone package. -# FIRST AUTHOR <EMAIL@ADDRESS>, 2009. -# -msgid "" -msgstr "" -"Project-Id-Version: sflphone\n" -"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" -"POT-Creation-Date: 2009-10-14 11:18-0400\n" -"PO-Revision-Date: 2009-10-25 12:58+0000\n" -"Last-Translator: DanyBoy <daniel@mon-ocean.com>\n" -"Language-Team: Japanese <ja@li.org>\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=1; plural=0;\n" -"X-Launchpad-Export-Date: 2009-10-26 15:48+0000\n" -"X-Generator: Launchpad (build Unknown)\n" - -#: ../sflphone-client-gnome/src/accountlist.c:175 -msgid "Registered" -msgstr "登録しました" - -#: ../sflphone-client-gnome/src/accountlist.c:178 -msgid "Not Registered" -msgstr "登録できません" - -#: ../sflphone-client-gnome/src/accountlist.c:181 -msgid "Trying..." -msgstr "検索中..." - -#: ../sflphone-client-gnome/src/accountlist.c:184 -#: ../sflphone-client-gnome/src/sflnotify.c:131 -#: ../sflphone-client-gnome/src/sflnotify.c:148 -msgid "Error" -msgstr "エラー" - -#: ../sflphone-client-gnome/src/accountlist.c:187 -msgid "Authentication Failed" -msgstr "認証に失敗" - -#: ../sflphone-client-gnome/src/accountlist.c:190 -msgid "Network unreachable" -msgstr "ネットワークに接続できません" - -#: ../sflphone-client-gnome/src/accountlist.c:193 -msgid "Host unreachable" -msgstr "ホストに接続できません" - -#: ../sflphone-client-gnome/src/accountlist.c:196 -msgid "Stun configuration error" -msgstr "構成エラー" - -#: ../sflphone-client-gnome/src/accountlist.c:199 -msgid "Stun server invalid" -msgstr "サーバー無効" - -#: ../sflphone-client-gnome/src/accountlist.c:202 -msgid "Invalid" -msgstr "無効" - -#: ../sflphone-client-gnome/src/actions.c:54 -#: ../sflphone-client-gnome/src/sflnotify.c:94 -#, c-format -msgid "%d voice mail" -msgid_plural "%d voice mails" -msgstr[0] "%d ボイスメール" - -#: ../sflphone-client-gnome/src/actions.c:83 -#: ../sflphone-client-gnome/src/actions.c:919 -#: ../sflphone-client-gnome/src/actions.c:926 -msgid "Using account" -msgstr "アカウント使っています" - -#: ../sflphone-client-gnome/src/actions.c:89 -msgid "No registered accounts" -msgstr "アカウント登録されていません" - -#: ../sflphone-client-gnome/src/actions.c:268 -msgid "" -"Unable to connect to the SFLphone server.\n" -"Make sure the daemon is running." -msgstr "" -"SFLphoneサーバに接続できません\n" -"デーモンを確認してください。" - -#: ../sflphone-client-gnome/src/actions.c:913 -#, c-format -msgid "IP call - %s" -msgstr "IP 電話 -%s" - -#: ../sflphone-client-gnome/src/actions.c:922 -msgid "Codec" -msgstr "コーデック" - -#: ../sflphone-client-gnome/src/actions.c:1119 -#, c-format -msgid "" -"<b>Error: No audio codecs found.\n" -"\n" -"</b> SFL audio codecs have to be placed in <i>%s</i> or in the " -"<b>.sflphone</b> directory in your home( <i>%s</i> )" -msgstr "" - -#: ../sflphone-client-gnome/src/errors.c:29 -msgid "" -"ALSA notification\n" -"\n" -"Error while opening playback device" -msgstr "" - -#: ../sflphone-client-gnome/src/errors.c:32 -msgid "" -"ALSA notification\n" -"\n" -"Error while opening capture device" -msgstr "" - -#: ../sflphone-client-gnome/src/errors.c:35 -msgid "" -"Pulseaudio notification\n" -"\n" -"Pulseaudio is not running" -msgstr "" - -#: ../sflphone-client-gnome/src/mainwindow.c:73 -msgid "There is one call in progress." -msgstr "" - -#: ../sflphone-client-gnome/src/mainwindow.c:77 -msgid "There are calls in progress." -msgstr "" - -#: ../sflphone-client-gnome/src/mainwindow.c:86 -msgid "Do you still want to quit?" -msgstr "" - -#: ../sflphone-client-gnome/src/mainwindow.c:299 -msgid "SFLphone Error" -msgstr "" - -#: ../sflphone-client-gnome/src/mainwindow.c:391 -#, c-format -msgid "ZRTP is not supported by peer %s\n" -msgstr "" - -#: ../sflphone-client-gnome/src/mainwindow.c:392 -msgid "Secure Communication Unavailable" -msgstr "" - -#: ../sflphone-client-gnome/src/mainwindow.c:393 -#: ../sflphone-client-gnome/src/mainwindow.c:415 -msgid "Continue" -msgstr "" - -#: ../sflphone-client-gnome/src/mainwindow.c:394 -#: ../sflphone-client-gnome/src/mainwindow.c:416 -#: ../sflphone-client-gnome/src/mainwindow.c:430 -msgid "Stop Call" -msgstr "" - -#: ../sflphone-client-gnome/src/mainwindow.c:413 -#, c-format -msgid "" -"A %s error forced the call with %s to fall under unencrypted mode.\n" -"Exact reason: %s\n" -msgstr "" - -#: ../sflphone-client-gnome/src/mainwindow.c:414 -msgid "ZRTP negotiation failed" -msgstr "" - -#: ../sflphone-client-gnome/src/mainwindow.c:427 -#, c-format -msgid "" -"%s wants to stop using secure communication. Confirm will resume " -"conversation without SRTP.\n" -msgstr "" - -#: ../sflphone-client-gnome/src/mainwindow.c:428 -msgid "Confirm Go Clear" -msgstr "" - -#: ../sflphone-client-gnome/src/mainwindow.c:429 -msgid "Confirm" -msgstr "" - -#: ../sflphone-client-gnome/src/sflnotify.c:71 -#: ../sflphone-client-gnome/src/sflnotify.c:91 -#, c-format -msgid "%s account : %s" -msgstr "" - -#: ../sflphone-client-gnome/src/sflnotify.c:75 -#, c-format -msgid "<i>From</i> %s" -msgstr "" - -#: ../sflphone-client-gnome/src/sflnotify.c:111 -#, c-format -msgid "Calling with %s account <i>%s</i>" -msgstr "" - -#: ../sflphone-client-gnome/src/sflnotify.c:115 -msgid "Current account" -msgstr "" - -#: ../sflphone-client-gnome/src/sflnotify.c:130 -msgid "You have no accounts set up" -msgstr "" - -#: ../sflphone-client-gnome/src/sflnotify.c:147 -msgid "You have no registered accounts" -msgstr "" - -#: ../sflphone-client-gnome/src/sflnotify.c:190 -#, c-format -msgid "" -"<i>With:</i> %s \n" -"using %s" -msgstr "" - -#: ../sflphone-client-gnome/src/sflnotify.c:205 -#, c-format -msgid "%s does not support ZRTP." -msgstr "" - -#: ../sflphone-client-gnome/src/sflnotify.c:220 -#, c-format -msgid "ZRTP negotiation failed with %s" -msgstr "" - -#: ../sflphone-client-gnome/src/sflnotify.c:235 -#, c-format -msgid "<i>With:</i> %s" -msgstr "" - -#: ../sflphone-client-gnome/src/sliders.c:162 -msgid "Speakers volume" -msgstr "" - -#: ../sflphone-client-gnome/src/sliders.c:164 -msgid "Mic volume" -msgstr "" - -#: ../sflphone-client-gnome/src/statusicon.c:91 -msgid "_Show main window" -msgstr "" - -#: ../sflphone-client-gnome/src/statusicon.c:126 -msgid "SFLphone" -msgstr "" - -#: ../sflphone-client-gnome/src/statusicon.c:127 -#, c-format -msgid "%i account configured" -msgid_plural "%i accounts configured" -msgstr[0] "" -msgstr[1] "" - -#: ../sflphone-client-gnome/src/toolbar.c:38 -#: ../sflphone-client-gnome/src/uimanager.c:750 -msgid "Voicemail" -msgstr "" - -#: ../sflphone-client-gnome/src/uimanager.c:403 -msgid "SFLphone is a VoIP client compatible with SIP and IAX2 protocols." -msgstr "" - -#: ../sflphone-client-gnome/src/uimanager.c:406 -msgid "About SFLphone" -msgstr "" - -#: ../sflphone-client-gnome/src/uimanager.c:1028 -msgid "_Pick up" -msgstr "" - -#: ../sflphone-client-gnome/src/uimanager.c:1040 -#: ../sflphone-client-gnome/src/uimanager.c:1081 -msgid "_Hang up" -msgstr "" - -#: ../sflphone-client-gnome/src/uimanager.c:1052 -#: ../sflphone-client-gnome/src/uimanager.c:1093 -msgid "On _Hold" -msgstr "" - -#: ../sflphone-client-gnome/src/uimanager.c:1064 -msgid "_Record" -msgstr "" - -#: ../sflphone-client-gnome/src/uimanager.c:1154 -msgid "_Call back" -msgstr "" - -#: ../sflphone-client-gnome/src/uimanager.c:1226 -msgid "_New call" -msgstr "" - -#: ../sflphone-client-gnome/src/uimanager.c:1300 -msgid "Edit phone number" -msgstr "" - -#: ../sflphone-client-gnome/src/uimanager.c:1311 -msgid "Edit the phone number before making a call" -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:164 -msgid "Account Parameters" -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:173 -#: ../sflphone-client-gnome/src/config/assistant.c:294 -#: ../sflphone-client-gnome/src/config/assistant.c:402 -msgid "_Alias" -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:181 -msgid "_Protocol" -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:199 -msgid "Unknown" -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:209 -#: ../sflphone-client-gnome/src/config/assistant.c:302 -#: ../sflphone-client-gnome/src/config/assistant.c:410 -msgid "_Host name" -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:217 -#: ../sflphone-client-gnome/src/config/assistant.c:310 -#: ../sflphone-client-gnome/src/config/assistant.c:418 -msgid "_User name" -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:234 -#: ../sflphone-client-gnome/src/config/assistant.c:326 -#: ../sflphone-client-gnome/src/config/assistant.c:433 -msgid "_Password" -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:254 -#: ../sflphone-client-gnome/src/config/assistant.c:344 -#: ../sflphone-client-gnome/src/config/assistant.c:449 -msgid "_Voicemail number" -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:340 -msgid "Authentication" -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:341 -msgid "Secret" -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:466 -msgid "Credential" -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:501 -msgid "Authentication name" -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:512 -msgid "Password" -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:535 -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:909 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:201 -msgid "Security" -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:547 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:213 -msgid "Use TLS transport (sips)" -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:552 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:218 -msgid "SRTP key exchange" -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:558 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:224 -msgid "Disabled" -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:674 -msgid "Registration" -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:679 -msgid "Registration expire" -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:687 -msgid "_Comply with RFC 3263" -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:693 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:463 -msgid "Network" -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:707 -msgid "Local address" -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:744 -msgid "Local port" -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:752 -msgid "Set published address and port:" -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:756 -msgid "Using STUN " -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:761 -msgid "Same as local parameters" -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:764 -msgid "Manually" -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:769 -msgid "Published address" -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:777 -msgid "Published port" -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:785 -msgid "STUN server URL" -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:880 -msgid "Account settings" -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:899 -msgid "Basic" -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:904 -msgid "Advanced" -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:169 -msgid "Server returned \"" -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:389 -msgid "Protocol" -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:396 -msgid "Status" -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:474 -msgid "Accounts" -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:484 -msgid "Configured Accounts" -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:505 -msgid "There " -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:506 -msgid "is " -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:506 -msgid "are " -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:508 -msgid " active account" -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:509 -msgid "s" -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:514 -msgid "You have no active account" -msgstr "" - -#: ../sflphone-client-gnome/src/config/addressbook-config.c:306 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:443 -msgid "General" -msgstr "" - -#: ../sflphone-client-gnome/src/config/addressbook-config.c:312 -msgid "_Use Evolution address books" -msgstr "" - -#: ../sflphone-client-gnome/src/config/addressbook-config.c:319 -msgid "Download limit :" -msgstr "" - -#: ../sflphone-client-gnome/src/config/addressbook-config.c:327 -msgid "cards" -msgstr "" - -#: ../sflphone-client-gnome/src/config/addressbook-config.c:333 -msgid "_Display contact photo if available" -msgstr "" - -#: ../sflphone-client-gnome/src/config/addressbook-config.c:341 -msgid "Fields from Evolution's address books" -msgstr "" - -#: ../sflphone-client-gnome/src/config/addressbook-config.c:345 -msgid "_Work" -msgstr "" - -#: ../sflphone-client-gnome/src/config/addressbook-config.c:351 -msgid "_Home" -msgstr "" - -#: ../sflphone-client-gnome/src/config/addressbook-config.c:357 -msgid "_Mobile" -msgstr "" - -#: ../sflphone-client-gnome/src/config/addressbook-config.c:364 -msgid "Address Books" -msgstr "" - -#: ../sflphone-client-gnome/src/config/addressbook-config.c:368 -msgid "Select which Evolution address books to use" -msgstr "" - -#: ../sflphone-client-gnome/src/config/addressbook-config.c:404 -#: ../sflphone-client-gnome/src/config/audioconf.c:578 -msgid "Name" -msgstr "" - -#: ../sflphone-client-gnome/src/config/assistant.c:69 -#, c-format -msgid "This assistant is now finished." -msgstr "" - -#: ../sflphone-client-gnome/src/config/assistant.c:71 -msgid "" -"You can at any time check your registration state or modify your accounts " -"parameters in the Options/Accounts window." -msgstr "" - -#: ../sflphone-client-gnome/src/config/assistant.c:74 -msgid "Alias" -msgstr "" - -#: ../sflphone-client-gnome/src/config/assistant.c:78 -msgid "Server" -msgstr "" - -#: ../sflphone-client-gnome/src/config/assistant.c:82 -msgid "Username" -msgstr "" - -#: ../sflphone-client-gnome/src/config/assistant.c:86 -msgid "Security: " -msgstr "" - -#: ../sflphone-client-gnome/src/config/assistant.c:88 -msgid "SRTP/ZRTP draft-zimmermann" -msgstr "" - -#: ../sflphone-client-gnome/src/config/assistant.c:90 -#: ../sflphone-client-gnome/src/config/assistant.c:182 -msgid "None" -msgstr "" - -#: ../sflphone-client-gnome/src/config/assistant.c:210 -msgid "SFLphone account creation wizard" -msgstr "" - -#: ../sflphone-client-gnome/src/config/assistant.c:236 -msgid "Welcome to the Account creation wizard of SFLphone!" -msgstr "" - -#: ../sflphone-client-gnome/src/config/assistant.c:237 -msgid "This installation wizard will help you configure an account." -msgstr "" - -#: ../sflphone-client-gnome/src/config/assistant.c:251 -msgid "VoIP Protocols" -msgstr "" - -#: ../sflphone-client-gnome/src/config/assistant.c:251 -msgid "Select an account type" -msgstr "" - -#: ../sflphone-client-gnome/src/config/assistant.c:253 -msgid "SIP (Session Initiation Protocol)" -msgstr "" - -#: ../sflphone-client-gnome/src/config/assistant.c:255 -msgid "IAX2 (InterAsterix Exchange)" -msgstr "" - -#: ../sflphone-client-gnome/src/config/assistant.c:269 -msgid "Account" -msgstr "" - -#: ../sflphone-client-gnome/src/config/assistant.c:269 -msgid "Please select one of the following options" -msgstr "" - -#: ../sflphone-client-gnome/src/config/assistant.c:271 -msgid "Create a free SIP/IAX2 account on sflphone.org" -msgstr "" - -#: ../sflphone-client-gnome/src/config/assistant.c:273 -msgid "Register an existing SIP or IAX2 account" -msgstr "" - -#: ../sflphone-client-gnome/src/config/assistant.c:286 -msgid "SIP account settings" -msgstr "" - -#: ../sflphone-client-gnome/src/config/assistant.c:286 -#: ../sflphone-client-gnome/src/config/assistant.c:394 -msgid "Please fill the following information" -msgstr "" - -#: ../sflphone-client-gnome/src/config/assistant.c:352 -#: ../sflphone-client-gnome/src/config/assistant.c:381 -msgid "Secure communications with _ZRTP" -msgstr "" - -#: ../sflphone-client-gnome/src/config/assistant.c:365 -msgid "Optional email address" -msgstr "" - -#: ../sflphone-client-gnome/src/config/assistant.c:365 -msgid "This email address will be used to send your voicemail messages." -msgstr "" - -#: ../sflphone-client-gnome/src/config/assistant.c:373 -msgid "_Email address" -msgstr "" - -#: ../sflphone-client-gnome/src/config/assistant.c:394 -msgid "IAX2 account settings" -msgstr "" - -#: ../sflphone-client-gnome/src/config/assistant.c:467 -msgid "Network Address Translation (NAT)" -msgstr "" - -#: ../sflphone-client-gnome/src/config/assistant.c:467 -msgid "You should probably enable this if you are behind a firewall." -msgstr "" - -#: ../sflphone-client-gnome/src/config/assistant.c:476 -msgid "E_nable STUN" -msgstr "" - -#: ../sflphone-client-gnome/src/config/assistant.c:483 -msgid "_STUN server" -msgstr "" - -#: ../sflphone-client-gnome/src/config/assistant.c:497 -msgid "Account Registration" -msgstr "" - -#: ../sflphone-client-gnome/src/config/assistant.c:497 -msgid "Congratulations!" -msgstr "" - -#: ../sflphone-client-gnome/src/config/audioconf.c:583 -msgid "Frequency" -msgstr "" - -#: ../sflphone-client-gnome/src/config/audioconf.c:588 -msgid "Bitrate" -msgstr "" - -#: ../sflphone-client-gnome/src/config/audioconf.c:593 -msgid "Bandwidth" -msgstr "" - -#: ../sflphone-client-gnome/src/config/audioconf.c:673 -msgid "ALSA plugin" -msgstr "" - -#: ../sflphone-client-gnome/src/config/audioconf.c:695 -msgid "Output" -msgstr "" - -#: ../sflphone-client-gnome/src/config/audioconf.c:717 -msgid "Input" -msgstr "" - -#: ../sflphone-client-gnome/src/config/audioconf.c:752 -msgid "_Voice Activity Detection" -msgstr "" - -#: ../sflphone-client-gnome/src/config/audioconf.c:762 -msgid "_Noise Reduction (Narrow-Band Companding)" -msgstr "" - -#: ../sflphone-client-gnome/src/config/audioconf.c:798 -msgid "Sound Manager" -msgstr "" - -#: ../sflphone-client-gnome/src/config/audioconf.c:807 -msgid "_Pulseaudio" -msgstr "" - -#: ../sflphone-client-gnome/src/config/audioconf.c:811 -msgid "_ALSA" -msgstr "" - -#: ../sflphone-client-gnome/src/config/audioconf.c:816 -msgid "_Mute other applications during a call" -msgstr "" - -#: ../sflphone-client-gnome/src/config/audioconf.c:823 -msgid "ALSA settings" -msgstr "" - -#: ../sflphone-client-gnome/src/config/audioconf.c:840 -msgid "Codecs" -msgstr "" - -#: ../sflphone-client-gnome/src/config/audioconf.c:869 -msgid "Recordings" -msgstr "" - -#: ../sflphone-client-gnome/src/config/audioconf.c:873 -msgid "Destination folder" -msgstr "" - -#: ../sflphone-client-gnome/src/config/audioconf.c:877 -msgid "Select a folder" -msgstr "" - -#: ../sflphone-client-gnome/src/config/audioconf.c:883 -msgid "Ringtones" -msgstr "" - -#: ../sflphone-client-gnome/src/config/audioconf.c:889 -msgid "_Enable ringtones" -msgstr "" - -#: ../sflphone-client-gnome/src/config/audioconf.c:895 -msgid "Choose a ringtone" -msgstr "" - -#: ../sflphone-client-gnome/src/config/audioconf.c:901 -msgid "Audio Files" -msgstr "" - -#: ../sflphone-client-gnome/src/config/hooks-config.c:130 -msgid "URL Argument" -msgstr "" - -#: ../sflphone-client-gnome/src/config/hooks-config.c:135 -msgid "Custom commands on incoming calls with URL" -msgstr "" - -#: ../sflphone-client-gnome/src/config/hooks-config.c:138 -#, c-format -msgid "%s will be replaced with the passed URL." -msgstr "" - -#: ../sflphone-client-gnome/src/config/hooks-config.c:141 -msgid "Trigger on specific _SIP header" -msgstr "" - -#: ../sflphone-client-gnome/src/config/hooks-config.c:150 -msgid "Trigger on _IAX2 URL" -msgstr "" - -#: ../sflphone-client-gnome/src/config/hooks-config.c:155 -msgid "Command to _run" -msgstr "" - -#: ../sflphone-client-gnome/src/config/hooks-config.c:165 -msgid "Phone number rewriting" -msgstr "" - -#: ../sflphone-client-gnome/src/config/hooks-config.c:169 -msgid "_Prefix dialed numbers with" -msgstr "" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:195 -msgid "" -"This profile is used when you want to reach a remote peer simply by typing a " -"sip URI such as <b>sip:remotepeer</b>. The settings you define here will " -"also be used if no account can be matched to an incoming or outgoing call." -msgstr "" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:274 -msgid "SIP Port" -msgstr "" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:281 -msgid "UDP Transport" -msgstr "" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:319 -msgid "Desktop Notifications" -msgstr "" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:323 -msgid "_Enable notifications" -msgstr "" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:329 -msgid "Enable voicemail _notifications" -msgstr "" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:341 -msgid "System Tray Icon" -msgstr "" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:344 -msgid "_Popup main window on incoming call" -msgstr "" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:349 -msgid "Ne_ver popup main window" -msgstr "" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:353 -msgid "Hide SFLphone window on _startup" -msgstr "" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:359 -msgid "Calls History" -msgstr "" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:362 -msgid "_Keep my history for at least" -msgstr "" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:373 -msgid "days" -msgstr "" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:377 -msgid "Configuration File" -msgstr "" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:379 -msgid "Store SIP credentials as MD5 hash" -msgstr "" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:423 -msgid "Preferences" -msgstr "" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:448 -msgid "Audio" -msgstr "" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:453 -msgid "Address Book" -msgstr "" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:458 -msgid "Hooks" -msgstr "" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:468 -msgid "Direct IP calls" -msgstr "" - -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:38 -msgid "Advanced options for TLS" -msgstr "" - -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:55 -msgid "TLS transport" -msgstr "" - -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:59 -msgid "" -"TLS transport can be used along with UDP for those calls that would\n" -"require secure sip transactions (aka SIPS). You can configure a different\n" -"TLS transport for each account. However, each of them will run on a " -"dedicated\n" -"port, different one from each other\n" -msgstr "" - -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:100 -msgid "Certificate of Authority list" -msgstr "" - -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:104 -msgid "Choose a CA list file (optional)" -msgstr "" - -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:115 -msgid "Public endpoint certificate file" -msgstr "" - -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:119 -msgid "Choose a public endpoint certificate (optional)" -msgstr "" - -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:134 -msgid "Choose a private key file (optional)" -msgstr "" - -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:145 -msgid "Password for the private key" -msgstr "" - -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:168 -msgid "TLS protocol method" -msgstr "" - -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:202 -msgid "TLS cipher list" -msgstr "" - -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:211 -msgid "Server name instance for outgoing TLS connection" -msgstr "" - -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:219 -msgid "Negotiation timeout (sec:msec)" -msgstr "" - -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:236 -msgid "Verify incoming certificates, as a server" -msgstr "" - -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:242 -msgid "Verify certificates from answer, as a client" -msgstr "" - -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:248 -msgid "Require certificate for incoming tls connections" -msgstr "" - -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:49 -msgid "ZRTP Options" -msgstr "" - -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:68 -msgid "Send Hello Hash in S_DP" -msgstr "" - -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:74 -msgid "Ask User to Confirm SAS" -msgstr "" - -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:80 -msgid "_Warn if ZRTP not supported" -msgstr "" - -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:86 -msgid "Display SAS once for hold events" -msgstr "" - -#: ../sflphone-client-gnome/src/contacts/searchbar.c:56 -msgid "Search all" -msgstr "" - -#: ../sflphone-client-gnome/src/contacts/searchbar.c:57 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:70 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:82 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:94 -msgid "Click here to change the search type" -msgstr "" - -#: ../sflphone-client-gnome/src/contacts/searchbar.c:69 -msgid "Search by missed call" -msgstr "" - -#: ../sflphone-client-gnome/src/contacts/searchbar.c:81 -msgid "Search by incoming call" -msgstr "" - -#: ../sflphone-client-gnome/src/contacts/searchbar.c:93 -msgid "Search by outgoing call" -msgstr "" diff --git a/lang/ko.po b/lang/ko.po deleted file mode 100644 index a614e49297..0000000000 --- a/lang/ko.po +++ /dev/null @@ -1,1006 +0,0 @@ -# Korean translation for sflphone -# Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 -# This file is distributed under the same license as the sflphone package. -# FIRST AUTHOR <EMAIL@ADDRESS>, 2009. -# -msgid "" -msgstr "" -"Project-Id-Version: sflphone\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-10-14 11:18-0400\n" -"PO-Revision-Date: 2009-10-14 17:31+0000\n" -"Last-Translator: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com>\n" -"Language-Team: Korean <ko@li.org>\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=1; plural=0;\n" -"X-Launchpad-Export-Date: 2009-10-26 15:48+0000\n" -"X-Generator: Launchpad (build Unknown)\n" - -#: ../sflphone-client-gnome/src/accountlist.c:175 -msgid "Registered" -msgstr "등록했습니다" - -#: ../sflphone-client-gnome/src/accountlist.c:178 -msgid "Not Registered" -msgstr "" - -#: ../sflphone-client-gnome/src/accountlist.c:181 -msgid "Trying..." -msgstr "" - -#: ../sflphone-client-gnome/src/accountlist.c:184 -#: ../sflphone-client-gnome/src/sflnotify.c:131 -#: ../sflphone-client-gnome/src/sflnotify.c:148 -msgid "Error" -msgstr "" - -#: ../sflphone-client-gnome/src/accountlist.c:187 -msgid "Authentication Failed" -msgstr "" - -#: ../sflphone-client-gnome/src/accountlist.c:190 -msgid "Network unreachable" -msgstr "" - -#: ../sflphone-client-gnome/src/accountlist.c:193 -msgid "Host unreachable" -msgstr "" - -#: ../sflphone-client-gnome/src/accountlist.c:196 -msgid "Stun configuration error" -msgstr "" - -#: ../sflphone-client-gnome/src/accountlist.c:199 -msgid "Stun server invalid" -msgstr "" - -#: ../sflphone-client-gnome/src/accountlist.c:202 -msgid "Invalid" -msgstr "" - -#: ../sflphone-client-gnome/src/actions.c:54 -#: ../sflphone-client-gnome/src/sflnotify.c:94 -#, c-format -msgid "%d voice mail" -msgid_plural "%d voice mails" -msgstr[0] "" -msgstr[1] "" - -#: ../sflphone-client-gnome/src/actions.c:83 -#: ../sflphone-client-gnome/src/actions.c:919 -#: ../sflphone-client-gnome/src/actions.c:926 -msgid "Using account" -msgstr "" - -#: ../sflphone-client-gnome/src/actions.c:89 -msgid "No registered accounts" -msgstr "" - -#: ../sflphone-client-gnome/src/actions.c:268 -msgid "" -"Unable to connect to the SFLphone server.\n" -"Make sure the daemon is running." -msgstr "" - -#: ../sflphone-client-gnome/src/actions.c:913 -#, c-format -msgid "IP call - %s" -msgstr "" - -#: ../sflphone-client-gnome/src/actions.c:922 -msgid "Codec" -msgstr "" - -#: ../sflphone-client-gnome/src/actions.c:1119 -#, c-format -msgid "" -"<b>Error: No audio codecs found.\n" -"\n" -"</b> SFL audio codecs have to be placed in <i>%s</i> or in the " -"<b>.sflphone</b> directory in your home( <i>%s</i> )" -msgstr "" - -#: ../sflphone-client-gnome/src/errors.c:29 -msgid "" -"ALSA notification\n" -"\n" -"Error while opening playback device" -msgstr "" - -#: ../sflphone-client-gnome/src/errors.c:32 -msgid "" -"ALSA notification\n" -"\n" -"Error while opening capture device" -msgstr "" - -#: ../sflphone-client-gnome/src/errors.c:35 -msgid "" -"Pulseaudio notification\n" -"\n" -"Pulseaudio is not running" -msgstr "" - -#: ../sflphone-client-gnome/src/mainwindow.c:73 -msgid "There is one call in progress." -msgstr "" - -#: ../sflphone-client-gnome/src/mainwindow.c:77 -msgid "There are calls in progress." -msgstr "" - -#: ../sflphone-client-gnome/src/mainwindow.c:86 -msgid "Do you still want to quit?" -msgstr "" - -#: ../sflphone-client-gnome/src/mainwindow.c:299 -msgid "SFLphone Error" -msgstr "" - -#: ../sflphone-client-gnome/src/mainwindow.c:391 -#, c-format -msgid "ZRTP is not supported by peer %s\n" -msgstr "" - -#: ../sflphone-client-gnome/src/mainwindow.c:392 -msgid "Secure Communication Unavailable" -msgstr "" - -#: ../sflphone-client-gnome/src/mainwindow.c:393 -#: ../sflphone-client-gnome/src/mainwindow.c:415 -msgid "Continue" -msgstr "" - -#: ../sflphone-client-gnome/src/mainwindow.c:394 -#: ../sflphone-client-gnome/src/mainwindow.c:416 -#: ../sflphone-client-gnome/src/mainwindow.c:430 -msgid "Stop Call" -msgstr "" - -#: ../sflphone-client-gnome/src/mainwindow.c:413 -#, c-format -msgid "" -"A %s error forced the call with %s to fall under unencrypted mode.\n" -"Exact reason: %s\n" -msgstr "" - -#: ../sflphone-client-gnome/src/mainwindow.c:414 -msgid "ZRTP negotiation failed" -msgstr "" - -#: ../sflphone-client-gnome/src/mainwindow.c:427 -#, c-format -msgid "" -"%s wants to stop using secure communication. Confirm will resume " -"conversation without SRTP.\n" -msgstr "" - -#: ../sflphone-client-gnome/src/mainwindow.c:428 -msgid "Confirm Go Clear" -msgstr "" - -#: ../sflphone-client-gnome/src/mainwindow.c:429 -msgid "Confirm" -msgstr "" - -#: ../sflphone-client-gnome/src/sflnotify.c:71 -#: ../sflphone-client-gnome/src/sflnotify.c:91 -#, c-format -msgid "%s account : %s" -msgstr "" - -#: ../sflphone-client-gnome/src/sflnotify.c:75 -#, c-format -msgid "<i>From</i> %s" -msgstr "" - -#: ../sflphone-client-gnome/src/sflnotify.c:111 -#, c-format -msgid "Calling with %s account <i>%s</i>" -msgstr "" - -#: ../sflphone-client-gnome/src/sflnotify.c:115 -msgid "Current account" -msgstr "" - -#: ../sflphone-client-gnome/src/sflnotify.c:130 -msgid "You have no accounts set up" -msgstr "" - -#: ../sflphone-client-gnome/src/sflnotify.c:147 -msgid "You have no registered accounts" -msgstr "" - -#: ../sflphone-client-gnome/src/sflnotify.c:190 -#, c-format -msgid "" -"<i>With:</i> %s \n" -"using %s" -msgstr "" - -#: ../sflphone-client-gnome/src/sflnotify.c:205 -#, c-format -msgid "%s does not support ZRTP." -msgstr "" - -#: ../sflphone-client-gnome/src/sflnotify.c:220 -#, c-format -msgid "ZRTP negotiation failed with %s" -msgstr "" - -#: ../sflphone-client-gnome/src/sflnotify.c:235 -#, c-format -msgid "<i>With:</i> %s" -msgstr "" - -#: ../sflphone-client-gnome/src/sliders.c:162 -msgid "Speakers volume" -msgstr "" - -#: ../sflphone-client-gnome/src/sliders.c:164 -msgid "Mic volume" -msgstr "" - -#: ../sflphone-client-gnome/src/statusicon.c:91 -msgid "_Show main window" -msgstr "" - -#: ../sflphone-client-gnome/src/statusicon.c:126 -msgid "SFLphone" -msgstr "" - -#: ../sflphone-client-gnome/src/statusicon.c:127 -#, c-format -msgid "%i account configured" -msgid_plural "%i accounts configured" -msgstr[0] "" -msgstr[1] "" - -#: ../sflphone-client-gnome/src/toolbar.c:38 -#: ../sflphone-client-gnome/src/uimanager.c:750 -msgid "Voicemail" -msgstr "" - -#: ../sflphone-client-gnome/src/uimanager.c:403 -msgid "SFLphone is a VoIP client compatible with SIP and IAX2 protocols." -msgstr "" - -#: ../sflphone-client-gnome/src/uimanager.c:406 -msgid "About SFLphone" -msgstr "" - -#: ../sflphone-client-gnome/src/uimanager.c:1028 -msgid "_Pick up" -msgstr "" - -#: ../sflphone-client-gnome/src/uimanager.c:1040 -#: ../sflphone-client-gnome/src/uimanager.c:1081 -msgid "_Hang up" -msgstr "" - -#: ../sflphone-client-gnome/src/uimanager.c:1052 -#: ../sflphone-client-gnome/src/uimanager.c:1093 -msgid "On _Hold" -msgstr "" - -#: ../sflphone-client-gnome/src/uimanager.c:1064 -msgid "_Record" -msgstr "" - -#: ../sflphone-client-gnome/src/uimanager.c:1154 -msgid "_Call back" -msgstr "" - -#: ../sflphone-client-gnome/src/uimanager.c:1226 -msgid "_New call" -msgstr "" - -#: ../sflphone-client-gnome/src/uimanager.c:1300 -msgid "Edit phone number" -msgstr "" - -#: ../sflphone-client-gnome/src/uimanager.c:1311 -msgid "Edit the phone number before making a call" -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:164 -msgid "Account Parameters" -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:173 -#: ../sflphone-client-gnome/src/config/assistant.c:294 -#: ../sflphone-client-gnome/src/config/assistant.c:402 -msgid "_Alias" -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:181 -msgid "_Protocol" -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:199 -msgid "Unknown" -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:209 -#: ../sflphone-client-gnome/src/config/assistant.c:302 -#: ../sflphone-client-gnome/src/config/assistant.c:410 -msgid "_Host name" -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:217 -#: ../sflphone-client-gnome/src/config/assistant.c:310 -#: ../sflphone-client-gnome/src/config/assistant.c:418 -msgid "_User name" -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:234 -#: ../sflphone-client-gnome/src/config/assistant.c:326 -#: ../sflphone-client-gnome/src/config/assistant.c:433 -msgid "_Password" -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:254 -#: ../sflphone-client-gnome/src/config/assistant.c:344 -#: ../sflphone-client-gnome/src/config/assistant.c:449 -msgid "_Voicemail number" -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:340 -msgid "Authentication" -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:341 -msgid "Secret" -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:466 -msgid "Credential" -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:501 -msgid "Authentication name" -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:512 -msgid "Password" -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:535 -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:909 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:201 -msgid "Security" -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:547 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:213 -msgid "Use TLS transport (sips)" -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:552 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:218 -msgid "SRTP key exchange" -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:558 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:224 -msgid "Disabled" -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:674 -msgid "Registration" -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:679 -msgid "Registration expire" -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:687 -msgid "_Comply with RFC 3263" -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:693 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:463 -msgid "Network" -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:707 -msgid "Local address" -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:744 -msgid "Local port" -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:752 -msgid "Set published address and port:" -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:756 -msgid "Using STUN " -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:761 -msgid "Same as local parameters" -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:764 -msgid "Manually" -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:769 -msgid "Published address" -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:777 -msgid "Published port" -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:785 -msgid "STUN server URL" -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:880 -msgid "Account settings" -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:899 -msgid "Basic" -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:904 -msgid "Advanced" -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:169 -msgid "Server returned \"" -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:389 -msgid "Protocol" -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:396 -msgid "Status" -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:474 -msgid "Accounts" -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:484 -msgid "Configured Accounts" -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:505 -msgid "There " -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:506 -msgid "is " -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:506 -msgid "are " -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:508 -msgid " active account" -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:509 -msgid "s" -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:514 -msgid "You have no active account" -msgstr "" - -#: ../sflphone-client-gnome/src/config/addressbook-config.c:306 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:443 -msgid "General" -msgstr "" - -#: ../sflphone-client-gnome/src/config/addressbook-config.c:312 -msgid "_Use Evolution address books" -msgstr "" - -#: ../sflphone-client-gnome/src/config/addressbook-config.c:319 -msgid "Download limit :" -msgstr "" - -#: ../sflphone-client-gnome/src/config/addressbook-config.c:327 -msgid "cards" -msgstr "" - -#: ../sflphone-client-gnome/src/config/addressbook-config.c:333 -msgid "_Display contact photo if available" -msgstr "" - -#: ../sflphone-client-gnome/src/config/addressbook-config.c:341 -msgid "Fields from Evolution's address books" -msgstr "" - -#: ../sflphone-client-gnome/src/config/addressbook-config.c:345 -msgid "_Work" -msgstr "" - -#: ../sflphone-client-gnome/src/config/addressbook-config.c:351 -msgid "_Home" -msgstr "" - -#: ../sflphone-client-gnome/src/config/addressbook-config.c:357 -msgid "_Mobile" -msgstr "" - -#: ../sflphone-client-gnome/src/config/addressbook-config.c:364 -msgid "Address Books" -msgstr "" - -#: ../sflphone-client-gnome/src/config/addressbook-config.c:368 -msgid "Select which Evolution address books to use" -msgstr "" - -#: ../sflphone-client-gnome/src/config/addressbook-config.c:404 -#: ../sflphone-client-gnome/src/config/audioconf.c:578 -msgid "Name" -msgstr "" - -#: ../sflphone-client-gnome/src/config/assistant.c:69 -#, c-format -msgid "This assistant is now finished." -msgstr "" - -#: ../sflphone-client-gnome/src/config/assistant.c:71 -msgid "" -"You can at any time check your registration state or modify your accounts " -"parameters in the Options/Accounts window." -msgstr "" - -#: ../sflphone-client-gnome/src/config/assistant.c:74 -msgid "Alias" -msgstr "" - -#: ../sflphone-client-gnome/src/config/assistant.c:78 -msgid "Server" -msgstr "" - -#: ../sflphone-client-gnome/src/config/assistant.c:82 -msgid "Username" -msgstr "" - -#: ../sflphone-client-gnome/src/config/assistant.c:86 -msgid "Security: " -msgstr "" - -#: ../sflphone-client-gnome/src/config/assistant.c:88 -msgid "SRTP/ZRTP draft-zimmermann" -msgstr "" - -#: ../sflphone-client-gnome/src/config/assistant.c:90 -#: ../sflphone-client-gnome/src/config/assistant.c:182 -msgid "None" -msgstr "" - -#: ../sflphone-client-gnome/src/config/assistant.c:210 -msgid "SFLphone account creation wizard" -msgstr "" - -#: ../sflphone-client-gnome/src/config/assistant.c:236 -msgid "Welcome to the Account creation wizard of SFLphone!" -msgstr "" - -#: ../sflphone-client-gnome/src/config/assistant.c:237 -msgid "This installation wizard will help you configure an account." -msgstr "" - -#: ../sflphone-client-gnome/src/config/assistant.c:251 -msgid "VoIP Protocols" -msgstr "" - -#: ../sflphone-client-gnome/src/config/assistant.c:251 -msgid "Select an account type" -msgstr "" - -#: ../sflphone-client-gnome/src/config/assistant.c:253 -msgid "SIP (Session Initiation Protocol)" -msgstr "" - -#: ../sflphone-client-gnome/src/config/assistant.c:255 -msgid "IAX2 (InterAsterix Exchange)" -msgstr "" - -#: ../sflphone-client-gnome/src/config/assistant.c:269 -msgid "Account" -msgstr "" - -#: ../sflphone-client-gnome/src/config/assistant.c:269 -msgid "Please select one of the following options" -msgstr "" - -#: ../sflphone-client-gnome/src/config/assistant.c:271 -msgid "Create a free SIP/IAX2 account on sflphone.org" -msgstr "" - -#: ../sflphone-client-gnome/src/config/assistant.c:273 -msgid "Register an existing SIP or IAX2 account" -msgstr "" - -#: ../sflphone-client-gnome/src/config/assistant.c:286 -msgid "SIP account settings" -msgstr "" - -#: ../sflphone-client-gnome/src/config/assistant.c:286 -#: ../sflphone-client-gnome/src/config/assistant.c:394 -msgid "Please fill the following information" -msgstr "" - -#: ../sflphone-client-gnome/src/config/assistant.c:352 -#: ../sflphone-client-gnome/src/config/assistant.c:381 -msgid "Secure communications with _ZRTP" -msgstr "" - -#: ../sflphone-client-gnome/src/config/assistant.c:365 -msgid "Optional email address" -msgstr "" - -#: ../sflphone-client-gnome/src/config/assistant.c:365 -msgid "This email address will be used to send your voicemail messages." -msgstr "" - -#: ../sflphone-client-gnome/src/config/assistant.c:373 -msgid "_Email address" -msgstr "" - -#: ../sflphone-client-gnome/src/config/assistant.c:394 -msgid "IAX2 account settings" -msgstr "" - -#: ../sflphone-client-gnome/src/config/assistant.c:467 -msgid "Network Address Translation (NAT)" -msgstr "" - -#: ../sflphone-client-gnome/src/config/assistant.c:467 -msgid "You should probably enable this if you are behind a firewall." -msgstr "" - -#: ../sflphone-client-gnome/src/config/assistant.c:476 -msgid "E_nable STUN" -msgstr "" - -#: ../sflphone-client-gnome/src/config/assistant.c:483 -msgid "_STUN server" -msgstr "" - -#: ../sflphone-client-gnome/src/config/assistant.c:497 -msgid "Account Registration" -msgstr "" - -#: ../sflphone-client-gnome/src/config/assistant.c:497 -msgid "Congratulations!" -msgstr "" - -#: ../sflphone-client-gnome/src/config/audioconf.c:583 -msgid "Frequency" -msgstr "" - -#: ../sflphone-client-gnome/src/config/audioconf.c:588 -msgid "Bitrate" -msgstr "" - -#: ../sflphone-client-gnome/src/config/audioconf.c:593 -msgid "Bandwidth" -msgstr "" - -#: ../sflphone-client-gnome/src/config/audioconf.c:673 -msgid "ALSA plugin" -msgstr "" - -#: ../sflphone-client-gnome/src/config/audioconf.c:695 -msgid "Output" -msgstr "" - -#: ../sflphone-client-gnome/src/config/audioconf.c:717 -msgid "Input" -msgstr "" - -#: ../sflphone-client-gnome/src/config/audioconf.c:752 -msgid "_Voice Activity Detection" -msgstr "" - -#: ../sflphone-client-gnome/src/config/audioconf.c:762 -msgid "_Noise Reduction (Narrow-Band Companding)" -msgstr "" - -#: ../sflphone-client-gnome/src/config/audioconf.c:798 -msgid "Sound Manager" -msgstr "" - -#: ../sflphone-client-gnome/src/config/audioconf.c:807 -msgid "_Pulseaudio" -msgstr "" - -#: ../sflphone-client-gnome/src/config/audioconf.c:811 -msgid "_ALSA" -msgstr "" - -#: ../sflphone-client-gnome/src/config/audioconf.c:816 -msgid "_Mute other applications during a call" -msgstr "" - -#: ../sflphone-client-gnome/src/config/audioconf.c:823 -msgid "ALSA settings" -msgstr "" - -#: ../sflphone-client-gnome/src/config/audioconf.c:840 -msgid "Codecs" -msgstr "" - -#: ../sflphone-client-gnome/src/config/audioconf.c:869 -msgid "Recordings" -msgstr "" - -#: ../sflphone-client-gnome/src/config/audioconf.c:873 -msgid "Destination folder" -msgstr "" - -#: ../sflphone-client-gnome/src/config/audioconf.c:877 -msgid "Select a folder" -msgstr "" - -#: ../sflphone-client-gnome/src/config/audioconf.c:883 -msgid "Ringtones" -msgstr "" - -#: ../sflphone-client-gnome/src/config/audioconf.c:889 -msgid "_Enable ringtones" -msgstr "" - -#: ../sflphone-client-gnome/src/config/audioconf.c:895 -msgid "Choose a ringtone" -msgstr "" - -#: ../sflphone-client-gnome/src/config/audioconf.c:901 -msgid "Audio Files" -msgstr "" - -#: ../sflphone-client-gnome/src/config/hooks-config.c:130 -msgid "URL Argument" -msgstr "" - -#: ../sflphone-client-gnome/src/config/hooks-config.c:135 -msgid "Custom commands on incoming calls with URL" -msgstr "" - -#: ../sflphone-client-gnome/src/config/hooks-config.c:138 -#, c-format -msgid "%s will be replaced with the passed URL." -msgstr "" - -#: ../sflphone-client-gnome/src/config/hooks-config.c:141 -msgid "Trigger on specific _SIP header" -msgstr "" - -#: ../sflphone-client-gnome/src/config/hooks-config.c:150 -msgid "Trigger on _IAX2 URL" -msgstr "" - -#: ../sflphone-client-gnome/src/config/hooks-config.c:155 -msgid "Command to _run" -msgstr "" - -#: ../sflphone-client-gnome/src/config/hooks-config.c:165 -msgid "Phone number rewriting" -msgstr "" - -#: ../sflphone-client-gnome/src/config/hooks-config.c:169 -msgid "_Prefix dialed numbers with" -msgstr "" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:195 -msgid "" -"This profile is used when you want to reach a remote peer simply by typing a " -"sip URI such as <b>sip:remotepeer</b>. The settings you define here will " -"also be used if no account can be matched to an incoming or outgoing call." -msgstr "" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:274 -msgid "SIP Port" -msgstr "" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:281 -msgid "UDP Transport" -msgstr "" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:319 -msgid "Desktop Notifications" -msgstr "" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:323 -msgid "_Enable notifications" -msgstr "" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:329 -msgid "Enable voicemail _notifications" -msgstr "" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:341 -msgid "System Tray Icon" -msgstr "" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:344 -msgid "_Popup main window on incoming call" -msgstr "" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:349 -msgid "Ne_ver popup main window" -msgstr "" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:353 -msgid "Hide SFLphone window on _startup" -msgstr "" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:359 -msgid "Calls History" -msgstr "" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:362 -msgid "_Keep my history for at least" -msgstr "" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:373 -msgid "days" -msgstr "" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:377 -msgid "Configuration File" -msgstr "" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:379 -msgid "Store SIP credentials as MD5 hash" -msgstr "" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:423 -msgid "Preferences" -msgstr "" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:448 -msgid "Audio" -msgstr "" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:453 -msgid "Address Book" -msgstr "" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:458 -msgid "Hooks" -msgstr "" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:468 -msgid "Direct IP calls" -msgstr "" - -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:38 -msgid "Advanced options for TLS" -msgstr "" - -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:55 -msgid "TLS transport" -msgstr "" - -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:59 -msgid "" -"TLS transport can be used along with UDP for those calls that would\n" -"require secure sip transactions (aka SIPS). You can configure a different\n" -"TLS transport for each account. However, each of them will run on a " -"dedicated\n" -"port, different one from each other\n" -msgstr "" - -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:100 -msgid "Certificate of Authority list" -msgstr "" - -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:104 -msgid "Choose a CA list file (optional)" -msgstr "" - -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:115 -msgid "Public endpoint certificate file" -msgstr "" - -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:119 -msgid "Choose a public endpoint certificate (optional)" -msgstr "" - -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:134 -msgid "Choose a private key file (optional)" -msgstr "" - -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:145 -msgid "Password for the private key" -msgstr "" - -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:168 -msgid "TLS protocol method" -msgstr "" - -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:202 -msgid "TLS cipher list" -msgstr "" - -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:211 -msgid "Server name instance for outgoing TLS connection" -msgstr "" - -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:219 -msgid "Negotiation timeout (sec:msec)" -msgstr "" - -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:236 -msgid "Verify incoming certificates, as a server" -msgstr "" - -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:242 -msgid "Verify certificates from answer, as a client" -msgstr "" - -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:248 -msgid "Require certificate for incoming tls connections" -msgstr "" - -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:49 -msgid "ZRTP Options" -msgstr "" - -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:68 -msgid "Send Hello Hash in S_DP" -msgstr "" - -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:74 -msgid "Ask User to Confirm SAS" -msgstr "" - -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:80 -msgid "_Warn if ZRTP not supported" -msgstr "" - -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:86 -msgid "Display SAS once for hold events" -msgstr "" - -#: ../sflphone-client-gnome/src/contacts/searchbar.c:56 -msgid "Search all" -msgstr "" - -#: ../sflphone-client-gnome/src/contacts/searchbar.c:57 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:70 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:82 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:94 -msgid "Click here to change the search type" -msgstr "" - -#: ../sflphone-client-gnome/src/contacts/searchbar.c:69 -msgid "Search by missed call" -msgstr "" - -#: ../sflphone-client-gnome/src/contacts/searchbar.c:81 -msgid "Search by incoming call" -msgstr "" - -#: ../sflphone-client-gnome/src/contacts/searchbar.c:93 -msgid "Search by outgoing call" -msgstr "" - -#~ msgctxt "NAME OF TRANSLATORS" -#~ msgid "Your names" -#~ msgstr "" -#~ ",Launchpad Contributions:, ,Launchpad Contributions:,Emmanuel Milou,Scion, " -#~ ",Launchpad Contributions:,Emmanuel Milou,Scion" - -#~ msgctxt "EMAIL OF TRANSLATORS" -#~ msgid "Your emails" -#~ msgstr "" -#~ ",,,,emmanuel.milou@savoirfairelinux.com,,,,emmanuel.milou@savoirfairelinux.co" -#~ "m," diff --git a/lang/ko/ko.po b/lang/ko/ko.po index bce28b2655..977d90d869 100644 --- a/lang/ko/ko.po +++ b/lang/ko/ko.po @@ -3,20 +3,19 @@ # This file is distributed under the same license as the sflphone package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2009. # -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:509 msgid "" msgstr "" "Project-Id-Version: sflphone\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2009-10-14 11:18-0400\n" -"PO-Revision-Date: 2009-10-14 14:47+0000\n" -"Last-Translator: Scion <Unknown>\n" +"PO-Revision-Date: 2009-10-26 20:46+0000\n" +"Last-Translator: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com>\n" "Language-Team: Korean <ko@li.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Launchpad-Export-Date: 2009-10-14 15:20+0000\n" +"X-Launchpad-Export-Date: 2009-12-03 15:32+0000\n" "X-Generator: Launchpad (build Unknown)\n" #: ../sflphone-client-gnome/src/accountlist.c:175 @@ -99,8 +98,8 @@ msgstr "" msgid "" "<b>Error: No audio codecs found.\n" "\n" -"</b> SFL audio codecs have to be placed in <i>%s</i> or in the <b>.sflphone</" -"b> directory in your home( <i>%s</i> )" +"</b> SFL audio codecs have to be placed in <i>%s</i> or in the " +"<b>.sflphone</b> directory in your home( <i>%s</i> )" msgstr "" #: ../sflphone-client-gnome/src/errors.c:29 @@ -390,9 +389,8 @@ msgid "Disabled" msgstr "" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:674 -#, fuzzy msgid "Registration" -msgstr "등록했습니다" +msgstr "" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:679 msgid "Registration expire" @@ -998,8 +996,12 @@ msgstr "" #~ msgctxt "NAME OF TRANSLATORS" #~ msgid "Your names" #~ msgstr "" -#~ ",Launchpad Contributions:, ,Launchpad Contributions:,Emmanuel Milou,Scion" +#~ ",Launchpad Contributions:, ,Launchpad Contributions:,Emmanuel Milou,Scion, " +#~ ",Launchpad Contributions:,Emmanuel Milou,Scion, ,Launchpad " +#~ "Contributions:,Emmanuel Milou,Scion" #~ msgctxt "EMAIL OF TRANSLATORS" #~ msgid "Your emails" -#~ msgstr ",,,,emmanuel.milou@savoirfairelinux.com," +#~ msgstr "" +#~ ",,,,emmanuel.milou@savoirfairelinux.com,,,,emmanuel.milou@savoirfairelinux.co" +#~ "m,,,,emmanuel.milou@savoirfairelinux.com," diff --git a/lang/pl/pl.po b/lang/pl/pl.po index ef0270f757..062ad393b5 100644 --- a/lang/pl/pl.po +++ b/lang/pl/pl.po @@ -8,46 +8,46 @@ msgstr "" "Project-Id-Version: sflphone\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2009-10-14 11:18-0400\n" -"PO-Revision-Date: 2009-10-14 17:24+0000\n" -"Last-Translator: Maxime Chambreuil <maxime.chambreuil@gmail.com>\n" +"PO-Revision-Date: 2009-11-04 12:08+0000\n" +"Last-Translator: Mariusz Bednarz <mbednarz@bedmar.pl>\n" "Language-Team: Polish <pl@li.org>\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" -"X-Launchpad-Export-Date: 2009-10-26 15:48+0000\n" +"X-Launchpad-Export-Date: 2009-12-03 15:32+0000\n" "X-Generator: Launchpad (build Unknown)\n" #: ../sflphone-client-gnome/src/accountlist.c:175 msgid "Registered" -msgstr "" +msgstr "Zarejestrowany" #: ../sflphone-client-gnome/src/accountlist.c:178 msgid "Not Registered" -msgstr "" +msgstr "Nie zarejestrowany" #: ../sflphone-client-gnome/src/accountlist.c:181 msgid "Trying..." -msgstr "" +msgstr "Próbuję ..." #: ../sflphone-client-gnome/src/accountlist.c:184 #: ../sflphone-client-gnome/src/sflnotify.c:131 #: ../sflphone-client-gnome/src/sflnotify.c:148 msgid "Error" -msgstr "" +msgstr "Błąd" #: ../sflphone-client-gnome/src/accountlist.c:187 msgid "Authentication Failed" -msgstr "" +msgstr "Autoryzacja nie powiodła się" #: ../sflphone-client-gnome/src/accountlist.c:190 msgid "Network unreachable" -msgstr "" +msgstr "Sieć niedostępna" #: ../sflphone-client-gnome/src/accountlist.c:193 msgid "Host unreachable" -msgstr "" +msgstr "Wybrany host jest niedostępny" #: ../sflphone-client-gnome/src/accountlist.c:196 msgid "Stun configuration error" @@ -59,40 +59,42 @@ msgstr "" #: ../sflphone-client-gnome/src/accountlist.c:202 msgid "Invalid" -msgstr "" +msgstr "Niepoprawny" #: ../sflphone-client-gnome/src/actions.c:54 #: ../sflphone-client-gnome/src/sflnotify.c:94 #, c-format msgid "%d voice mail" msgid_plural "%d voice mails" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%d głosowa wiadomość" +msgstr[1] "%d głosowych wiadomości" #: ../sflphone-client-gnome/src/actions.c:83 #: ../sflphone-client-gnome/src/actions.c:919 #: ../sflphone-client-gnome/src/actions.c:926 msgid "Using account" -msgstr "" +msgstr "Używane konto" #: ../sflphone-client-gnome/src/actions.c:89 msgid "No registered accounts" -msgstr "" +msgstr "Brak zarejestrowanych kont" #: ../sflphone-client-gnome/src/actions.c:268 msgid "" "Unable to connect to the SFLphone server.\n" "Make sure the daemon is running." msgstr "" +"Nie można połączyć się z serwerem SFLphone.\n" +"Upewnij się, że został uruchomiony daemon SFLphone" #: ../sflphone-client-gnome/src/actions.c:913 #, c-format msgid "IP call - %s" -msgstr "" +msgstr "Telefonów IP - %s" #: ../sflphone-client-gnome/src/actions.c:922 msgid "Codec" -msgstr "" +msgstr "Kodek" #: ../sflphone-client-gnome/src/actions.c:1119 #, c-format @@ -109,6 +111,8 @@ msgid "" "\n" "Error while opening playback device" msgstr "" +"Informacja ALSA\n" +"Błąd otwarcia urządzenia do odtwarzania dźwięku" #: ../sflphone-client-gnome/src/errors.c:32 msgid "" @@ -116,6 +120,8 @@ msgid "" "\n" "Error while opening capture device" msgstr "" +"Informacja ALSA\n" +"Błąd otwarcia urządzenia do przechwytywania" #: ../sflphone-client-gnome/src/errors.c:35 msgid "" @@ -123,6 +129,8 @@ msgid "" "\n" "Pulseaudio is not running" msgstr "" +"Informacja Pulseaudio\n" +"Pulseaudio nie zostało uruchomione" #: ../sflphone-client-gnome/src/mainwindow.c:73 msgid "There is one call in progress." @@ -998,10 +1006,11 @@ msgstr "" #~ msgid "Your names" #~ msgstr "" #~ ",Launchpad Contributions:,Maxime Chambreuil, ,Launchpad " -#~ "Contributions:,Maxime Chambreuil, ,Launchpad Contributions:,Maxime Chambreuil" +#~ "Contributions:,Maxime Chambreuil, ,Launchpad Contributions:,Maxime " +#~ "Chambreuil, ,Launchpad Contributions:,Mariusz Bednarz,Maxime Chambreuil" #~ msgctxt "EMAIL OF TRANSLATORS" #~ msgid "Your emails" #~ msgstr "" #~ ",,maxime.chambreuil@gmail.com,,,maxime.chambreuil@gmail.com,,,maxime.chambreu" -#~ "il@gmail.com" +#~ "il@gmail.com,,,mbednarz@bedmar.pl,maxime.chambreuil@gmail.com" diff --git a/lang/pt/pt.po b/lang/pt/pt.po index 10ff891b2b..436992737a 100644 --- a/lang/pt/pt.po +++ b/lang/pt/pt.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2009-10-14 11:18-0400\n" -"PO-Revision-Date: 2009-10-14 17:26+0000\n" +"PO-Revision-Date: 2009-10-26 20:46+0000\n" "Last-Translator: Maxime Chambreuil <maxime.chambreuil@gmail.com>\n" "Language-Team: LANGUAGE <LL@li.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Launchpad-Export-Date: 2009-10-26 15:48+0000\n" +"X-Launchpad-Export-Date: 2009-12-03 15:32+0000\n" "X-Generator: Launchpad (build Unknown)\n" #: ../sflphone-client-gnome/src/accountlist.c:175 @@ -1112,10 +1112,11 @@ msgstr "" #~ msgstr "" #~ ",Launchpad Contributions:,Maxime Chambreuil, ,Launchpad " #~ "Contributions:,Maxime Chambreuil,Tiago Silva, ,Launchpad " +#~ "Contributions:,Maxime Chambreuil,Tiago Silva, ,Launchpad " #~ "Contributions:,Maxime Chambreuil,Tiago Silva" #~ msgctxt "EMAIL OF TRANSLATORS" #~ msgid "Your emails" #~ msgstr "" #~ ",,maxime.chambreuil@gmail.com,,,maxime.chambreuil@gmail.com,,,,maxime.chambre" -#~ "uil@gmail.com," +#~ "uil@gmail.com,,,,maxime.chambreuil@gmail.com," diff --git a/lang/pt_BR/pt_BR.po b/lang/pt_BR/pt_BR.po index 34f94f3dfd..ca804b75ce 100644 --- a/lang/pt_BR/pt_BR.po +++ b/lang/pt_BR/pt_BR.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: sflphone\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2009-10-14 11:18-0400\n" -"PO-Revision-Date: 2009-10-15 18:00+0000\n" +"PO-Revision-Date: 2009-10-26 20:46+0000\n" "Last-Translator: kalib <kalibslack@gmail.com>\n" "Language-Team: Brazilian Portuguese <pt_BR@li.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Launchpad-Export-Date: 2009-10-26 15:48+0000\n" +"X-Launchpad-Export-Date: 2009-12-03 15:32+0000\n" "X-Generator: Launchpad (build Unknown)\n" #: ../sflphone-client-gnome/src/accountlist.c:175 @@ -1347,10 +1347,11 @@ msgstr "Buscar por ligações feitas" #~ msgstr "" #~ ",Launchpad Contributions:,Maxime Chambreuil,kalib, ,Launchpad " #~ "Contributions:,Maxime Chambreuil,kalib, ,Launchpad Contributions:,Maxime " -#~ "Chambreuil,kalib" +#~ "Chambreuil,kalib, ,Launchpad Contributions:,Maxime Chambreuil,kalib" #~ msgctxt "EMAIL OF TRANSLATORS" #~ msgid "Your emails" #~ msgstr "" #~ ",,maxime.chambreuil@gmail.com,kalibslack@gmail.com,,,maxime.chambreuil@gmail." -#~ "com,kalibslack@gmail.com,,,maxime.chambreuil@gmail.com,kalibslack@gmail.com" +#~ "com,kalibslack@gmail.com,,,maxime.chambreuil@gmail.com,kalibslack@gmail.com,," +#~ ",maxime.chambreuil@gmail.com,kalibslack@gmail.com" diff --git a/lang/ru/ru.po b/lang/ru/ru.po index 319dfce2c0..0cdec3479d 100644 --- a/lang/ru/ru.po +++ b/lang/ru/ru.po @@ -8,15 +8,15 @@ msgstr "" "Project-Id-Version: SFLphone 0.9.6\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2009-10-14 11:18-0400\n" -"PO-Revision-Date: 2009-10-21 22:26+0000\n" -"Last-Translator: Hussein Abdallah <Unknown>\n" +"PO-Revision-Date: 2009-10-26 20:46+0000\n" +"Last-Translator: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com>\n" "Language-Team: Savoir-Faire Linux Inc <sflphoneteam@savoirfairelinux.com>\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%10==1 && n%100!=11 ? 0 : n%10>=2 && " "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" -"X-Launchpad-Export-Date: 2009-10-26 15:48+0000\n" +"X-Launchpad-Export-Date: 2009-12-03 15:32+0000\n" "X-Generator: Launchpad (build Unknown)\n" #: ../sflphone-client-gnome/src/accountlist.c:175 @@ -1320,10 +1320,13 @@ msgstr "Поиск по исходящим вызовам" #~ ",Launchpad Contributions:,Hussein Abdallah, ,Launchpad " #~ "Contributions:,Emmanuel Milou,Hussein Abdallah,Maxime Chambreuil,Pavlo " #~ "Kucheriavyi,Sergei Sedov, ,Launchpad Contributions:,Emmanuel Milou,Hussein " -#~ "Abdallah,Hussein Abdallah,Maxime Chambreuil,Pavlo Kucheriavyi,Sergei Sedov" +#~ "Abdallah,Hussein Abdallah,Maxime Chambreuil,Pavlo Kucheriavyi,Sergei Sedov, " +#~ ",Launchpad Contributions:,Emmanuel Milou,Hussein Abdallah,Hussein " +#~ "Abdallah,Maxime Chambreuil,Pavlo Kucheriavyi,Sergey Sedov" #~ msgctxt "EMAIL OF TRANSLATORS" #~ msgid "Your emails" #~ msgstr "" #~ ",,,,,emmanuel.milou@savoirfairelinux.com,,maxime.chambreuil@gmail.com,,,,,emm" -#~ "anuel.milou@savoirfairelinux.com,,,maxime.chambreuil@gmail.com,," +#~ "anuel.milou@savoirfairelinux.com,,,maxime.chambreuil@gmail.com,,,,,emmanuel.m" +#~ "ilou@savoirfairelinux.com,,,maxime.chambreuil@gmail.com,," diff --git a/lang/sflphone.pot b/lang/sflphone.pot index 103b76190c..8fd477d585 100644 --- a/lang/sflphone.pot +++ b/lang/sflphone.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-11-12 14:02-0500\n" +"POT-Creation-Date: 2009-12-03 10:22-0500\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -59,25 +59,26 @@ msgstr "" msgid "Invalid" msgstr "" -#: ../sflphone-client-gnome/src/actions.c:72 +#: ../sflphone-client-gnome/src/actions.c:98 msgid "Using account" msgstr "" -#: ../sflphone-client-gnome/src/actions.c:78 +#: ../sflphone-client-gnome/src/actions.c:104 msgid "No registered accounts" msgstr "" -#: ../sflphone-client-gnome/src/actions.c:259 +#: ../sflphone-client-gnome/src/actions.c:285 msgid "" "Unable to connect to the SFLphone server.\n" "Make sure the daemon is running." msgstr "" -#: ../sflphone-client-gnome/src/actions.c:879 +#: ../sflphone-client-gnome/src/actions.c:589 +#: ../sflphone-client-gnome/src/actions.c:911 msgid "Direct SIP call" msgstr "" -#: ../sflphone-client-gnome/src/actions.c:1071 +#: ../sflphone-client-gnome/src/actions.c:1103 #, c-format msgid "" "<b>Error: No audio codecs found.\n" @@ -119,53 +120,53 @@ msgstr "" msgid "Do you still want to quit?" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:297 +#: ../sflphone-client-gnome/src/mainwindow.c:298 msgid "SFLphone Error" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:391 +#: ../sflphone-client-gnome/src/mainwindow.c:392 #, c-format msgid "ZRTP is not supported by peer %s\n" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:392 +#: ../sflphone-client-gnome/src/mainwindow.c:393 msgid "Secure Communication Unavailable" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:393 -#: ../sflphone-client-gnome/src/mainwindow.c:415 +#: ../sflphone-client-gnome/src/mainwindow.c:394 +#: ../sflphone-client-gnome/src/mainwindow.c:416 msgid "Continue" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:394 -#: ../sflphone-client-gnome/src/mainwindow.c:416 -#: ../sflphone-client-gnome/src/mainwindow.c:430 +#: ../sflphone-client-gnome/src/mainwindow.c:395 +#: ../sflphone-client-gnome/src/mainwindow.c:417 +#: ../sflphone-client-gnome/src/mainwindow.c:431 msgid "Stop Call" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:413 +#: ../sflphone-client-gnome/src/mainwindow.c:414 #, c-format msgid "" "A %s error forced the call with %s to fall under unencrypted mode.\n" "Exact reason: %s\n" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:414 +#: ../sflphone-client-gnome/src/mainwindow.c:415 msgid "ZRTP negotiation failed" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:427 +#: ../sflphone-client-gnome/src/mainwindow.c:428 #, c-format msgid "" "%s wants to stop using secure communication. Confirm will resume " "conversation without SRTP.\n" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:428 +#: ../sflphone-client-gnome/src/mainwindow.c:429 msgid "Confirm Go Clear" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:429 +#: ../sflphone-client-gnome/src/mainwindow.c:430 msgid "Confirm" msgstr "" @@ -234,15 +235,15 @@ msgstr "" msgid "Mic volume" msgstr "" -#: ../sflphone-client-gnome/src/statusicon.c:91 +#: ../sflphone-client-gnome/src/statusicon.c:96 msgid "_Show main window" msgstr "" -#: ../sflphone-client-gnome/src/statusicon.c:126 +#: ../sflphone-client-gnome/src/statusicon.c:131 msgid "SFLphone" msgstr "" -#: ../sflphone-client-gnome/src/statusicon.c:127 +#: ../sflphone-client-gnome/src/statusicon.c:132 #, c-format msgid "%i account configured" msgid_plural "%i accounts configured" @@ -250,387 +251,393 @@ msgstr[0] "" msgstr[1] "" #: ../sflphone-client-gnome/src/toolbar.c:38 -#: ../sflphone-client-gnome/src/uimanager.c:628 -#: ../sflphone-client-gnome/src/uimanager.c:662 +#: ../sflphone-client-gnome/src/uimanager.c:693 +#: ../sflphone-client-gnome/src/uimanager.c:727 msgid "Voicemail" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:115 +#: ../sflphone-client-gnome/src/uimanager.c:117 msgid "No address book selected" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:135 -#: ../sflphone-client-gnome/src/uimanager.c:691 +#: ../sflphone-client-gnome/src/uimanager.c:137 +#: ../sflphone-client-gnome/src/uimanager.c:756 msgid "Address book" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:237 +#: ../sflphone-client-gnome/src/uimanager.c:279 #, c-format msgid "Voicemail (%i)" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:300 +#: ../sflphone-client-gnome/src/uimanager.c:342 msgid "SFLphone is a VoIP client compatible with SIP and IAX2 protocols." msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:303 +#: ../sflphone-client-gnome/src/uimanager.c:345 msgid "About SFLphone" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:654 +#: ../sflphone-client-gnome/src/uimanager.c:719 msgid "Call" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:655 -#: ../sflphone-client-gnome/src/uimanager.c:1119 +#: ../sflphone-client-gnome/src/uimanager.c:720 +#: ../sflphone-client-gnome/src/uimanager.c:1184 msgid "_New call" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:655 +#: ../sflphone-client-gnome/src/uimanager.c:720 msgid "Place a new call" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:656 -#: ../sflphone-client-gnome/src/uimanager.c:914 +#: ../sflphone-client-gnome/src/uimanager.c:721 +#: ../sflphone-client-gnome/src/uimanager.c:979 msgid "_Pick up" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:656 +#: ../sflphone-client-gnome/src/uimanager.c:721 msgid "Answer the call" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:657 -#: ../sflphone-client-gnome/src/uimanager.c:926 -#: ../sflphone-client-gnome/src/uimanager.c:967 +#: ../sflphone-client-gnome/src/uimanager.c:722 +#: ../sflphone-client-gnome/src/uimanager.c:991 +#: ../sflphone-client-gnome/src/uimanager.c:1032 msgid "_Hang up" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:657 +#: ../sflphone-client-gnome/src/uimanager.c:722 msgid "Finish the call" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:658 +#: ../sflphone-client-gnome/src/uimanager.c:723 msgid "O_n hold" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:658 +#: ../sflphone-client-gnome/src/uimanager.c:723 msgid "Place the call on hold" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:659 +#: ../sflphone-client-gnome/src/uimanager.c:724 msgid "O_ff hold" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:659 +#: ../sflphone-client-gnome/src/uimanager.c:724 msgid "Place the call off hold" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:660 -#: ../sflphone-client-gnome/src/uimanager.c:950 +#: ../sflphone-client-gnome/src/uimanager.c:725 +#: ../sflphone-client-gnome/src/uimanager.c:1015 msgid "_Record" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:660 +#: ../sflphone-client-gnome/src/uimanager.c:725 msgid "Record the current conversation" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:661 +#: ../sflphone-client-gnome/src/uimanager.c:726 msgid "Configuration _Assistant" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:661 +#: ../sflphone-client-gnome/src/uimanager.c:726 msgid "Run the configuration assistant" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:662 +#: ../sflphone-client-gnome/src/uimanager.c:727 msgid "Call your voicemail" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:663 +#: ../sflphone-client-gnome/src/uimanager.c:728 msgid "_Close" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:663 +#: ../sflphone-client-gnome/src/uimanager.c:728 msgid "Minimize to system tray" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:664 +#: ../sflphone-client-gnome/src/uimanager.c:729 msgid "_Quit" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:664 +#: ../sflphone-client-gnome/src/uimanager.c:729 msgid "Quit the program" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:667 +#: ../sflphone-client-gnome/src/uimanager.c:732 msgid "_Edit" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:668 +#: ../sflphone-client-gnome/src/uimanager.c:733 msgid "_Copy" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:668 +#: ../sflphone-client-gnome/src/uimanager.c:733 msgid "Copy the selection" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:669 +#: ../sflphone-client-gnome/src/uimanager.c:734 msgid "_Paste" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:669 +#: ../sflphone-client-gnome/src/uimanager.c:734 msgid "Paste the clipboard" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:670 +#: ../sflphone-client-gnome/src/uimanager.c:735 msgid "Clear _history" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:670 +#: ../sflphone-client-gnome/src/uimanager.c:735 msgid "Clear the call history" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:671 +#: ../sflphone-client-gnome/src/uimanager.c:736 msgid "_Accounts" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:671 +#: ../sflphone-client-gnome/src/uimanager.c:736 msgid "Edit your accounts" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:672 +#: ../sflphone-client-gnome/src/uimanager.c:737 msgid "_Preferences" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:672 +#: ../sflphone-client-gnome/src/uimanager.c:737 msgid "Change your preferences" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:675 +#: ../sflphone-client-gnome/src/uimanager.c:740 msgid "_View" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:678 +#: ../sflphone-client-gnome/src/uimanager.c:743 msgid "_Help" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:679 +#: ../sflphone-client-gnome/src/uimanager.c:744 msgid "Contents" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:679 +#: ../sflphone-client-gnome/src/uimanager.c:744 msgid "Open the manual" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:680 +#: ../sflphone-client-gnome/src/uimanager.c:745 msgid "About this application" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:686 +#: ../sflphone-client-gnome/src/uimanager.c:751 msgid "_Transfer" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:686 +#: ../sflphone-client-gnome/src/uimanager.c:751 msgid "Transfer the call" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:687 +#: ../sflphone-client-gnome/src/uimanager.c:752 msgid "_Show toolbar" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:687 +#: ../sflphone-client-gnome/src/uimanager.c:752 msgid "Show the toolbar" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:688 +#: ../sflphone-client-gnome/src/uimanager.c:753 msgid "_Dialpad" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:688 +#: ../sflphone-client-gnome/src/uimanager.c:753 msgid "Show the dialpad" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:689 +#: ../sflphone-client-gnome/src/uimanager.c:754 msgid "_Volume controls" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:689 +#: ../sflphone-client-gnome/src/uimanager.c:754 msgid "Show the volume controls" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:690 +#: ../sflphone-client-gnome/src/uimanager.c:755 msgid "_History" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:690 +#: ../sflphone-client-gnome/src/uimanager.c:755 msgid "Calls history" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:691 +#: ../sflphone-client-gnome/src/uimanager.c:756 msgid "_Address book" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:938 -#: ../sflphone-client-gnome/src/uimanager.c:979 +#: ../sflphone-client-gnome/src/uimanager.c:1003 +#: ../sflphone-client-gnome/src/uimanager.c:1044 msgid "On _Hold" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:1042 +#: ../sflphone-client-gnome/src/uimanager.c:1107 msgid "_Call back" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:1193 +#: ../sflphone-client-gnome/src/uimanager.c:1258 msgid "Edit phone number" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:1204 +#: ../sflphone-client-gnome/src/uimanager.c:1269 msgid "Edit the phone number before making a call" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:172 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:180 msgid "Account Parameters" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:181 -#: ../sflphone-client-gnome/src/config/assistant.c:307 -#: ../sflphone-client-gnome/src/config/assistant.c:415 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:189 +#: ../sflphone-client-gnome/src/config/assistant.c:314 +#: ../sflphone-client-gnome/src/config/assistant.c:427 msgid "_Alias" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:189 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:197 msgid "_Protocol" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:207 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:215 msgid "Unknown" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:217 -#: ../sflphone-client-gnome/src/config/assistant.c:315 -#: ../sflphone-client-gnome/src/config/assistant.c:423 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:225 +#: ../sflphone-client-gnome/src/config/assistant.c:322 +#: ../sflphone-client-gnome/src/config/assistant.c:435 msgid "_Host name" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:225 -#: ../sflphone-client-gnome/src/config/assistant.c:323 -#: ../sflphone-client-gnome/src/config/assistant.c:431 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:233 +#: ../sflphone-client-gnome/src/config/assistant.c:330 +#: ../sflphone-client-gnome/src/config/assistant.c:443 msgid "_User name" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:242 -#: ../sflphone-client-gnome/src/config/assistant.c:339 -#: ../sflphone-client-gnome/src/config/assistant.c:446 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:250 +#: ../sflphone-client-gnome/src/config/assistant.c:346 +#: ../sflphone-client-gnome/src/config/assistant.c:458 msgid "_Password" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:262 -#: ../sflphone-client-gnome/src/config/assistant.c:357 -#: ../sflphone-client-gnome/src/config/assistant.c:462 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:270 +#: ../sflphone-client-gnome/src/config/assistant.c:363 +#: ../sflphone-client-gnome/src/config/assistant.c:473 +msgid "Show password" +msgstr "" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:274 +#: ../sflphone-client-gnome/src/config/assistant.c:368 +#: ../sflphone-client-gnome/src/config/assistant.c:478 msgid "_Voicemail number" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:348 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:361 msgid "Authentication" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:349 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:362 msgid "Secret" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:579 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:605 msgid "Credential" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:614 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:640 msgid "Authentication name" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:625 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:651 msgid "Password" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:649 -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1029 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:306 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:674 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1056 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:321 msgid "Security" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:662 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:318 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:687 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:333 msgid "Use TLS transport (sips)" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:668 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:323 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:693 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:338 msgid "SRTP key exchange" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:674 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:329 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:699 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:344 msgid "Disabled" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:770 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:795 msgid "Registration" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:775 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:800 msgid "Registration expire" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:784 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:809 msgid "_Comply with RFC 3263" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:791 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:221 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:816 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:234 msgid "Network Interface" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:805 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:236 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:830 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:249 msgid "Local address" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:855 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:292 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:880 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:301 msgid "Local port" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:868 -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:903 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:893 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:928 msgid "Published address" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:874 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:899 msgid "Using STUN" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:881 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:906 msgid "STUN server URL" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:889 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:914 msgid "Same as local parameters" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:892 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:917 msgid "Set published address and port:" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:911 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:936 msgid "Published port" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1000 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1027 msgid "Account settings" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1019 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1046 msgid "Basic" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1024 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1051 msgid "Advanced" msgstr "" @@ -639,35 +646,35 @@ msgstr "" msgid "Server returned \"%s\" (%d)" msgstr "" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:387 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:389 msgid "Protocol" msgstr "" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:394 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:396 msgid "Status" msgstr "" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:472 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:474 msgid "Accounts" msgstr "" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:482 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:484 msgid "Configured Accounts" msgstr "" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:499 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:501 #, c-format msgid "There is %d active account" msgid_plural "There are %d active accounts" msgstr[0] "" msgstr[1] "" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:505 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:507 msgid "You have no active account" msgstr "" #: ../sflphone-client-gnome/src/config/addressbook-config.c:306 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:537 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:556 msgid "General" msgstr "" @@ -716,136 +723,136 @@ msgstr "" msgid "Name" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:69 +#: ../sflphone-client-gnome/src/config/assistant.c:75 #, c-format msgid "This assistant is now finished." msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:71 +#: ../sflphone-client-gnome/src/config/assistant.c:77 msgid "" "You can at any time check your registration state or modify your accounts " "parameters in the Options/Accounts window." msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:74 +#: ../sflphone-client-gnome/src/config/assistant.c:80 msgid "Alias" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:78 +#: ../sflphone-client-gnome/src/config/assistant.c:84 msgid "Server" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:82 +#: ../sflphone-client-gnome/src/config/assistant.c:88 msgid "Username" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:86 +#: ../sflphone-client-gnome/src/config/assistant.c:92 msgid "Security: " msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:88 +#: ../sflphone-client-gnome/src/config/assistant.c:94 msgid "SRTP/ZRTP draft-zimmermann" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:90 +#: ../sflphone-client-gnome/src/config/assistant.c:96 msgid "None" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:223 +#: ../sflphone-client-gnome/src/config/assistant.c:229 msgid "SFLphone account creation wizard" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:249 +#: ../sflphone-client-gnome/src/config/assistant.c:255 msgid "Welcome to the Account creation wizard of SFLphone!" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:250 +#: ../sflphone-client-gnome/src/config/assistant.c:256 msgid "This installation wizard will help you configure an account." msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:264 +#: ../sflphone-client-gnome/src/config/assistant.c:270 msgid "VoIP Protocols" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:264 +#: ../sflphone-client-gnome/src/config/assistant.c:270 msgid "Select an account type" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:266 +#: ../sflphone-client-gnome/src/config/assistant.c:272 msgid "SIP (Session Initiation Protocol)" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:268 +#: ../sflphone-client-gnome/src/config/assistant.c:274 msgid "IAX2 (InterAsterix Exchange)" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:282 +#: ../sflphone-client-gnome/src/config/assistant.c:288 msgid "Account" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:282 +#: ../sflphone-client-gnome/src/config/assistant.c:288 msgid "Please select one of the following options" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:284 +#: ../sflphone-client-gnome/src/config/assistant.c:290 msgid "Create a free SIP/IAX2 account on sflphone.org" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:286 +#: ../sflphone-client-gnome/src/config/assistant.c:292 msgid "Register an existing SIP or IAX2 account" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:299 +#: ../sflphone-client-gnome/src/config/assistant.c:306 msgid "SIP account settings" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:299 -#: ../sflphone-client-gnome/src/config/assistant.c:407 +#: ../sflphone-client-gnome/src/config/assistant.c:306 +#: ../sflphone-client-gnome/src/config/assistant.c:419 msgid "Please fill the following information" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:365 -#: ../sflphone-client-gnome/src/config/assistant.c:394 +#: ../sflphone-client-gnome/src/config/assistant.c:376 +#: ../sflphone-client-gnome/src/config/assistant.c:405 msgid "Secure communications with _ZRTP" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:378 +#: ../sflphone-client-gnome/src/config/assistant.c:389 msgid "Optional email address" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:378 +#: ../sflphone-client-gnome/src/config/assistant.c:389 msgid "This email address will be used to send your voicemail messages." msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:386 +#: ../sflphone-client-gnome/src/config/assistant.c:397 msgid "_Email address" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:407 +#: ../sflphone-client-gnome/src/config/assistant.c:419 msgid "IAX2 account settings" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:480 +#: ../sflphone-client-gnome/src/config/assistant.c:496 msgid "Network Address Translation (NAT)" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:480 +#: ../sflphone-client-gnome/src/config/assistant.c:496 msgid "You should probably enable this if you are behind a firewall." msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:489 +#: ../sflphone-client-gnome/src/config/assistant.c:505 msgid "E_nable STUN" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:496 +#: ../sflphone-client-gnome/src/config/assistant.c:512 msgid "_STUN server" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:510 +#: ../sflphone-client-gnome/src/config/assistant.c:526 msgid "Account Registration" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:510 +#: ../sflphone-client-gnome/src/config/assistant.c:526 msgid "Congratulations!" msgstr "" @@ -881,51 +888,51 @@ msgstr "" msgid "_Noise Reduction (Narrow-Band Companding)" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:795 +#: ../sflphone-client-gnome/src/config/audioconf.c:800 msgid "Sound Manager" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:804 +#: ../sflphone-client-gnome/src/config/audioconf.c:809 msgid "_Pulseaudio" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:808 +#: ../sflphone-client-gnome/src/config/audioconf.c:813 msgid "_ALSA" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:814 +#: ../sflphone-client-gnome/src/config/audioconf.c:819 msgid "ALSA settings" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:831 +#: ../sflphone-client-gnome/src/config/audioconf.c:836 msgid "Codecs" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:860 +#: ../sflphone-client-gnome/src/config/audioconf.c:865 msgid "Recordings" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:864 +#: ../sflphone-client-gnome/src/config/audioconf.c:869 msgid "Destination folder" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:868 +#: ../sflphone-client-gnome/src/config/audioconf.c:873 msgid "Select a folder" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:874 +#: ../sflphone-client-gnome/src/config/audioconf.c:879 msgid "Ringtones" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:880 +#: ../sflphone-client-gnome/src/config/audioconf.c:885 msgid "_Enable ringtones" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:886 +#: ../sflphone-client-gnome/src/config/audioconf.c:891 msgid "Choose a ringtone" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:892 +#: ../sflphone-client-gnome/src/config/audioconf.c:897 msgid "Audio Files" msgstr "" @@ -962,74 +969,66 @@ msgstr "" msgid "_Prefix dialed numbers with" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:212 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:225 msgid "" "This profile is used when you want to reach a remote peer simply by typing a " "sip URI such as <b>sip:remotepeer</b>. The settings you define here will " "also be used if no account can be matched to an incoming or outgoing call." msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:425 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:440 msgid "Desktop Notifications" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:429 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:444 msgid "_Enable notifications" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:435 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:450 msgid "System Tray Icon" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:438 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:453 msgid "_Popup main window on incoming call" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:443 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:457 msgid "Ne_ver popup main window" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:447 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:463 msgid "Hide SFLphone window on _startup" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:453 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:469 msgid "Calls History" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:456 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:472 msgid "_Keep my history for at least" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:467 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:483 msgid "days" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:471 -msgid "Configuration File" -msgstr "" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:473 -msgid "Store SIP credentials as MD5 hash" -msgstr "" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:517 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:536 msgid "Preferences" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:542 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:561 msgid "Audio" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:547 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:566 msgid "Address Book" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:552 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:571 msgid "Hooks" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:562 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:581 msgid "Direct IP calls" msgstr "" @@ -1037,11 +1036,11 @@ msgstr "" msgid "Advanced options for TLS" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:55 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:56 msgid "TLS transport" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:59 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:60 msgid "" "TLS transport can be used along with UDP for those calls that would\n" "require secure sip transactions (aka SIPS). You can configure a different\n" @@ -1050,55 +1049,55 @@ msgid "" "port, different one from each other\n" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:100 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:103 msgid "Certificate of Authority list" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:104 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:107 msgid "Choose a CA list file (optional)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:128 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:131 msgid "Public endpoint certificate file" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:132 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:135 msgid "Choose a public endpoint certificate (optional)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:156 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:159 msgid "Choose a private key file (optional)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:178 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:181 msgid "Password for the private key" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:201 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:204 msgid "TLS protocol method" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:235 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:238 msgid "TLS cipher list" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:244 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:247 msgid "Server name instance for outgoing TLS connection" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:252 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:255 msgid "Negotiation timeout (sec:msec)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:269 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:272 msgid "Verify incoming certificates, as a server" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:275 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:278 msgid "Verify certificates from answer, as a client" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:281 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:284 msgid "Require certificate for incoming tls connections" msgstr "" @@ -1122,25 +1121,25 @@ msgstr "" msgid "Display SAS once for hold events" msgstr "" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:56 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:58 msgid "Search all" msgstr "" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:57 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:70 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:82 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:94 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:59 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:72 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:84 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:96 msgid "Click here to change the search type" msgstr "" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:69 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:71 msgid "Search by missed call" msgstr "" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:81 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:83 msgid "Search by incoming call" msgstr "" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:93 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:95 msgid "Search by outgoing call" msgstr "" diff --git a/lang/zh_CN/zh_CN.po b/lang/zh_CN/zh_CN.po index 992e7b0457..65542440d8 100644 --- a/lang/zh_CN/zh_CN.po +++ b/lang/zh_CN/zh_CN.po @@ -4,20 +4,19 @@ # # Yun Liu <yun.liu@savoirfairelinux.com>, 2008. # -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:509 msgid "" msgstr "" "Project-Id-Version: SFLphone 0.9.2\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2009-10-14 11:18-0400\n" -"PO-Revision-Date: 2009-10-07 16:46+0000\n" -"Last-Translator: Aron Xu <happyaron.xu@gmail.com>\n" +"PO-Revision-Date: 2009-10-26 20:46+0000\n" +"Last-Translator: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com>\n" "Language-Team: SavoirFaireLinux Inc <sflphoneteam@savoirfairelinux.com>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Launchpad-Export-Date: 2009-10-14 15:20+0000\n" +"X-Launchpad-Export-Date: 2009-12-03 15:32+0000\n" "X-Generator: Launchpad (build Unknown)\n" #: ../sflphone-client-gnome/src/accountlist.c:175 @@ -40,7 +39,7 @@ msgstr "注册失败" #: ../sflphone-client-gnome/src/accountlist.c:187 msgid "Authentication Failed" -msgstr "" +msgstr "认证失败" #: ../sflphone-client-gnome/src/accountlist.c:190 msgid "Network unreachable" @@ -101,13 +100,12 @@ msgstr "编码" msgid "" "<b>Error: No audio codecs found.\n" "\n" -"</b> SFL audio codecs have to be placed in <i>%s</i> or in the <b>.sflphone</" -"b> directory in your home( <i>%s</i> )" +"</b> SFL audio codecs have to be placed in <i>%s</i> or in the " +"<b>.sflphone</b> directory in your home( <i>%s</i> )" msgstr "" "<b>错误:无法找到codecs编码文件.\n" "\n" -"</b> SFL声音codecs文件应位于<i>%s</i> 或 位于主目录( <i>%s</i> )的<b>." -"sflphone</b>目录下" +"</b> SFL声音codecs文件应位于<i>%s</i> 或 位于主目录( <i>%s</i> )的<b>.sflphone</b>目录下" #: ../sflphone-client-gnome/src/errors.c:29 msgid "" @@ -162,19 +160,18 @@ msgstr "" #: ../sflphone-client-gnome/src/mainwindow.c:392 msgid "Secure Communication Unavailable" -msgstr "" +msgstr "安全通信不可用" #: ../sflphone-client-gnome/src/mainwindow.c:393 #: ../sflphone-client-gnome/src/mainwindow.c:415 -#, fuzzy msgid "Continue" -msgstr "连接" +msgstr "继续" #: ../sflphone-client-gnome/src/mainwindow.c:394 #: ../sflphone-client-gnome/src/mainwindow.c:416 #: ../sflphone-client-gnome/src/mainwindow.c:430 msgid "Stop Call" -msgstr "" +msgstr "停止呼叫" #: ../sflphone-client-gnome/src/mainwindow.c:413 #, c-format @@ -200,7 +197,7 @@ msgstr "" #: ../sflphone-client-gnome/src/mainwindow.c:429 msgid "Confirm" -msgstr "" +msgstr "确认" #: ../sflphone-client-gnome/src/sflnotify.c:71 #: ../sflphone-client-gnome/src/sflnotify.c:91 @@ -240,7 +237,7 @@ msgstr "" #: ../sflphone-client-gnome/src/sflnotify.c:205 #, c-format msgid "%s does not support ZRTP." -msgstr "" +msgstr "%s 不支持 ZRTP。" #: ../sflphone-client-gnome/src/sflnotify.c:220 #, c-format @@ -248,9 +245,9 @@ msgid "ZRTP negotiation failed with %s" msgstr "" #: ../sflphone-client-gnome/src/sflnotify.c:235 -#, fuzzy, c-format +#, c-format msgid "<i>With:</i> %s" -msgstr "<i>拨入方</i> %s" +msgstr "" #: ../sflphone-client-gnome/src/sliders.c:162 msgid "Speakers volume" @@ -365,12 +362,11 @@ msgstr "语音信箱号码(V)" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:340 msgid "Authentication" -msgstr "" +msgstr "身份验证" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:341 -#, fuzzy msgid "Secret" -msgstr "服务器" +msgstr "" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:466 msgid "Credential" @@ -388,7 +384,7 @@ msgstr "密码" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:909 #: ../sflphone-client-gnome/src/config/preferencesdialog.c:201 msgid "Security" -msgstr "" +msgstr "安全" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:547 #: ../sflphone-client-gnome/src/config/preferencesdialog.c:213 @@ -402,14 +398,12 @@ msgstr "" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:558 #: ../sflphone-client-gnome/src/config/preferencesdialog.c:224 -#, fuzzy msgid "Disabled" -msgstr "拨号盘(_D)" +msgstr "禁用" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:674 -#, fuzzy msgid "Registration" -msgstr "帐户注册" +msgstr "注册" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:679 msgid "Registration expire" @@ -422,12 +416,11 @@ msgstr "" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:693 #: ../sflphone-client-gnome/src/config/preferencesdialog.c:463 msgid "Network" -msgstr "" +msgstr "网络" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:707 -#, fuzzy msgid "Local address" -msgstr "邮件地址" +msgstr "" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:744 msgid "Local port" @@ -450,18 +443,16 @@ msgid "Manually" msgstr "" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:769 -#, fuzzy msgid "Published address" -msgstr "启用地址簿" +msgstr "" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:777 msgid "Published port" msgstr "" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:785 -#, fuzzy msgid "STUN server URL" -msgstr "STUN服务器(S)" +msgstr "" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:880 msgid "Account settings" @@ -508,18 +499,16 @@ msgid "are " msgstr "" #: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:508 -#, fuzzy msgid " active account" -msgstr "增加新帐户" +msgstr "" #: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:509 msgid "s" msgstr "" #: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:514 -#, fuzzy msgid "You have no active account" -msgstr "未发现已注册帐户" +msgstr "" #: ../sflphone-client-gnome/src/config/addressbook-config.c:306 #: ../sflphone-client-gnome/src/config/preferencesdialog.c:443 @@ -878,9 +867,8 @@ msgid "days" msgstr "" #: ../sflphone-client-gnome/src/config/preferencesdialog.c:377 -#, fuzzy msgid "Configuration File" -msgstr "Stun配置有误" +msgstr "" #: ../sflphone-client-gnome/src/config/preferencesdialog.c:379 msgid "Store SIP credentials as MD5 hash" @@ -1050,18 +1038,6 @@ msgstr "从拨出电话中查询" #~ msgid "Jérémy Quentin" #~ msgstr "Jérémy Quentin" -#~ msgctxt "NAME OF TRANSLATORS" -#~ msgid "Your names" -#~ msgstr "" -#~ "Yun Liu, ,Launchpad Contributions:,Aron Xu,Yun Liu, ,Launchpad " -#~ "Contributions:,Aron Xu,Yinghua Wang,Yun Liu,rainofchaos" - -#~ msgctxt "EMAIL OF TRANSLATORS" -#~ msgid "Your emails" -#~ msgstr "" -#~ "yunliu2000@gmail.com,,,happyaron.xu@gmail.com,,,,happyaron.xu@gmail.com,,," -#~ "rainofchaos@gmail.com" - #~ msgid "Main screen" #~ msgstr "主屏幕" @@ -1125,35 +1101,29 @@ msgstr "从拨出电话中查询" #~ msgid "" #~ "By default, when you place a call, sflphone will use the first account in " #~ "this list which is \"registered\". Change the order of the accounts using " -#~ "the \"Up\" and \"Down\" arrows. Enable/disable them by checking/" -#~ "unchecking them on the left of the item. Add or remove some with \"Plus\" " -#~ "and \"Sub\" buttons. Edit the selected account with the form on the right." +#~ "the \"Up\" and \"Down\" arrows. Enable/disable them by checking/unchecking " +#~ "them on the left of the item. Add or remove some with \"Plus\" and \"Sub\" " +#~ "buttons. Edit the selected account with the form on the right." #~ msgstr "" -#~ "在默认情况下,当你打电话时,sflphone会使用列表当中第一个已注册的帐户。使用" -#~ "箭头\"上\"和\"下\"可以改变账户的顺序。选择账户名称左边的方框可以启用帐户," -#~ "取消选择则会禁用该账户。通过\"加\"\"减\"按钮可以添加或删除账户。点击\"编辑" -#~ "\"按钮可以改变账户的设置。" +#~ "在默认情况下,当你打电话时,sflphone会使用列表当中第一个已注册的帐户。使用箭头\"上\"和\"下\"可以改变账户的顺序。选择账户名称左边的方框可以" +#~ "启用帐户,取消选择则会禁用该账户。通过\"加\"\"减\"按钮可以添加或删除账户。点击\"编辑\"按钮可以改变账户的设置。" #~ msgid "Remove the selected account" #~ msgstr "删除所选账户" #~ msgid "" -#~ "This button will remove the selected account in the list below. Be sure " -#~ "you really don't need it anymore. If you think you might use it again " -#~ "later, just uncheck it." -#~ msgstr "" -#~ "该按钮会删除列表中被选定的账户。请确认你的操作。如果你希望继续使用某个账" -#~ "户,请取消对该账户的选择" +#~ "This button will remove the selected account in the list below. Be sure you " +#~ "really don't need it anymore. If you think you might use it again later, " +#~ "just uncheck it." +#~ msgstr "该按钮会删除列表中被选定的账户。请确认你的操作。如果你希望继续使用某个账户,请取消对该账户的选择" #~ msgid "Remove" #~ msgstr "删除" #~ msgid "" -#~ "This button enables you to initialize a new account. You will then be " -#~ "able to edit it using the form on the right." -#~ msgstr "" -#~ "通过该按钮可以创建一个新账户。添加该账户之后你还可以通过编辑按钮来修改设" -#~ "置。" +#~ "This button enables you to initialize a new account. You will then be able " +#~ "to edit it using the form on the right." +#~ msgstr "通过该按钮可以创建一个新账户。添加该账户之后你还可以通过编辑按钮来修改设置。" #~ msgid "Add" #~ msgstr "添加" @@ -1166,9 +1136,8 @@ msgstr "从拨出电话中查询" #~ "this list which is \"registered\". Change the order of the accounts using " #~ "the \"Up\" and \"Down\" arrows." #~ msgstr "" -#~ "在默认情况下,当你打电话时,sflphone会使用列表当中第一个已注册的帐户。使用" -#~ "箭头\"上\"和\"下\"可以改变账户的顺序。选择账户名称左边的方框可以启用帐户," -#~ "取消选择则会禁用该账户。通过\"加\"\"减\"按钮可以添加或删除账户。" +#~ "在默认情况下,当你打电话时,sflphone会使用列表当中第一个已注册的帐户。使用箭头\"上\"和\"下\"可以改变账户的顺序。选择账户名称左边的方框可以" +#~ "启用帐户,取消选择则会禁用该账户。通过\"加\"\"减\"按钮可以添加或删除账户。" #~ msgid "Down" #~ msgstr "下" @@ -1266,32 +1235,14 @@ msgstr "从拨出电话中查询" #~ msgid "Prefix dialed numbers with" #~ msgstr "号码前缀" -#~ msgid "History" -#~ msgstr "历史" - #~ msgid "Attention:number of results exceeds max displayed." #~ msgstr "注意:结果超过可显示的最大值" -#~ msgid "_Help" -#~ msgstr "帮助(_H)" - -#~ msgid "_Account creation wizard" -#~ msgstr "帐户创建向导(_A)" - -#~ msgid "_Call" -#~ msgstr "电话(_C)" - -#~ msgid "Clear _history" -#~ msgstr "清空历史记录(_H)" - -#~ msgid "_Accounts" -#~ msgstr "账户(_A)" - -#~ msgid "_Edit" -#~ msgstr "编辑(_E)" +#~ msgid "_Volume controls" +#~ msgstr "音量控制(V)" -#~ msgid "_View" -#~ msgstr "查看(_V)" +#~ msgid "History" +#~ msgstr "历史" #~ msgid "_Enable this account" #~ msgstr "启用该账户(E)" @@ -1302,9 +1253,6 @@ msgstr "从拨出电话中查询" #~ msgid "Port" #~ msgstr "端口" -#~ msgid "_Volume controls" -#~ msgstr "音量控制(V)" - #~ msgctxt "Config section" #~ msgid "Accounts" #~ msgstr "帐户" @@ -1595,3 +1543,39 @@ msgstr "从拨出电话中查询" #~ msgid "_STUN Server" #~ msgstr "STUN服务器(S)" + +#~ msgid "_Edit" +#~ msgstr "编辑(_E)" + +#~ msgid "_View" +#~ msgstr "查看(_V)" + +#~ msgid "_Help" +#~ msgstr "帮助(_H)" + +#~ msgid "_Account creation wizard" +#~ msgstr "帐户创建向导(_A)" + +#~ msgid "_Call" +#~ msgstr "电话(_C)" + +#~ msgid "Clear _history" +#~ msgstr "清空历史记录(_H)" + +#~ msgid "_Accounts" +#~ msgstr "账户(_A)" + +#~ msgctxt "NAME OF TRANSLATORS" +#~ msgid "Your names" +#~ msgstr "" +#~ "Yun Liu, ,Launchpad Contributions:,Aron Xu,Yun Liu, ,Launchpad " +#~ "Contributions:,Aron Xu,Yinghua Wang,Yun Liu,rainofchaos, ,Launchpad " +#~ "Contributions:,Aron Xu,Yinghua Wang,Yun Liu,冯超, ,Launchpad " +#~ "Contributions:,Aron Xu,Emmanuel Milou,Yun Liu,冯超,王英华" + +#~ msgctxt "EMAIL OF TRANSLATORS" +#~ msgid "Your emails" +#~ msgstr "" +#~ "yunliu2000@gmail.com,,,happyaron.xu@gmail.com,,,,happyaron.xu@gmail.com,,,rai" +#~ "nofchaos@gmail.com,,,happyaron.xu@gmail.com,,,rainofchaos@gmail.com,,,,emmanu" +#~ "el.milou@savoirfairelinux.com,,rainofchaos@gmail.com,wantinghard@gmail.com" diff --git a/lang/zh_HK/zh_HK.po b/lang/zh_HK/zh_HK.po index 6cc983115e..a4ba19605e 100644 --- a/lang/zh_HK/zh_HK.po +++ b/lang/zh_HK/zh_HK.po @@ -4,20 +4,19 @@ # # Yun Liu <yun.liu@savoirfairelinux.com>, 2008. # -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:509 msgid "" msgstr "" "Project-Id-Version: SFLphone 0.9.2\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2009-10-14 11:18-0400\n" -"PO-Revision-Date: 2009-10-07 16:34+0000\n" +"PO-Revision-Date: 2009-10-26 20:46+0000\n" "Last-Translator: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com>\n" "Language-Team: SavoirFaireLinux Inc <sflphoneteam@savoirfairelinux.com>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Launchpad-Export-Date: 2009-10-14 15:20+0000\n" +"X-Launchpad-Export-Date: 2009-12-03 15:32+0000\n" "X-Generator: Launchpad (build Unknown)\n" #: ../sflphone-client-gnome/src/accountlist.c:175 @@ -101,13 +100,12 @@ msgstr "編碼" msgid "" "<b>Error: No audio codecs found.\n" "\n" -"</b> SFL audio codecs have to be placed in <i>%s</i> or in the <b>.sflphone</" -"b> directory in your home( <i>%s</i> )" +"</b> SFL audio codecs have to be placed in <i>%s</i> or in the " +"<b>.sflphone</b> directory in your home( <i>%s</i> )" msgstr "" "<b>錯誤:無法找到音訊編碼檔案.\n" "\n" -"</b> SFL聲音編碼檔案應該位于<i>%s</i> 或者位于主目錄( <i>%s</i> )的<b>." -"sflphone</b>目錄下" +"</b> SFL聲音編碼檔案應該位于<i>%s</i> 或者位于主目錄( <i>%s</i> )的<b>.sflphone</b>目錄下" #: ../sflphone-client-gnome/src/errors.c:29 msgid "" @@ -166,9 +164,8 @@ msgstr "" #: ../sflphone-client-gnome/src/mainwindow.c:393 #: ../sflphone-client-gnome/src/mainwindow.c:415 -#, fuzzy msgid "Continue" -msgstr "連接" +msgstr "" #: ../sflphone-client-gnome/src/mainwindow.c:394 #: ../sflphone-client-gnome/src/mainwindow.c:416 @@ -248,9 +245,9 @@ msgid "ZRTP negotiation failed with %s" msgstr "" #: ../sflphone-client-gnome/src/sflnotify.c:235 -#, fuzzy, c-format +#, c-format msgid "<i>With:</i> %s" -msgstr "<i>撥入方</i> %s" +msgstr "" #: ../sflphone-client-gnome/src/sliders.c:162 msgid "Speakers volume" @@ -368,9 +365,8 @@ msgid "Authentication" msgstr "" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:341 -#, fuzzy msgid "Secret" -msgstr "伺服器" +msgstr "" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:466 msgid "Credential" @@ -402,14 +398,12 @@ msgstr "" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:558 #: ../sflphone-client-gnome/src/config/preferencesdialog.c:224 -#, fuzzy msgid "Disabled" -msgstr "撥號面板" +msgstr "" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:674 -#, fuzzy msgid "Registration" -msgstr "帳戶註冊" +msgstr "" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:679 msgid "Registration expire" @@ -425,9 +419,8 @@ msgid "Network" msgstr "" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:707 -#, fuzzy msgid "Local address" -msgstr "郵件地址" +msgstr "" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:744 msgid "Local port" @@ -450,18 +443,16 @@ msgid "Manually" msgstr "" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:769 -#, fuzzy msgid "Published address" -msgstr "啟用地址簿" +msgstr "" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:777 msgid "Published port" msgstr "" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:785 -#, fuzzy msgid "STUN server URL" -msgstr "STUN伺服器(S)" +msgstr "" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:880 msgid "Account settings" @@ -508,18 +499,16 @@ msgid "are " msgstr "" #: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:508 -#, fuzzy msgid " active account" -msgstr "增加新帳戶" +msgstr "" #: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:509 msgid "s" msgstr "" #: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:514 -#, fuzzy msgid "You have no active account" -msgstr "未發現已註冊帳戶" +msgstr "" #: ../sflphone-client-gnome/src/config/addressbook-config.c:306 #: ../sflphone-client-gnome/src/config/preferencesdialog.c:443 @@ -878,9 +867,8 @@ msgid "days" msgstr "" #: ../sflphone-client-gnome/src/config/preferencesdialog.c:377 -#, fuzzy msgid "Configuration File" -msgstr "Stun配置有誤" +msgstr "" #: ../sflphone-client-gnome/src/config/preferencesdialog.c:379 msgid "Store SIP credentials as MD5 hash" @@ -1050,16 +1038,6 @@ msgstr "從撥出電話中查詢" #~ msgid "Jérémy Quentin" #~ msgstr "Jérémy Quentin" -#~ msgctxt "NAME OF TRANSLATORS" -#~ msgid "Your names" -#~ msgstr "" -#~ "Yun Liu, ,Launchpad Contributions:,Yun Liu, ,Launchpad Contributions:," -#~ "Emmanuel Milou,Yun Liu" - -#~ msgctxt "EMAIL OF TRANSLATORS" -#~ msgid "Your emails" -#~ msgstr "yunliu2000@gmail.com,,,,,,emmanuel.milou@savoirfairelinux.com," - #~ msgid "Main screen" #~ msgstr "主屏幕" @@ -1123,35 +1101,29 @@ msgstr "從撥出電話中查詢" #~ msgid "" #~ "By default, when you place a call, sflphone will use the first account in " #~ "this list which is \"registered\". Change the order of the accounts using " -#~ "the \"Up\" and \"Down\" arrows. Enable/disable them by checking/" -#~ "unchecking them on the left of the item. Add or remove some with \"Plus\" " -#~ "and \"Sub\" buttons. Edit the selected account with the form on the right." +#~ "the \"Up\" and \"Down\" arrows. Enable/disable them by checking/unchecking " +#~ "them on the left of the item. Add or remove some with \"Plus\" and \"Sub\" " +#~ "buttons. Edit the selected account with the form on the right." #~ msgstr "" -#~ "在默認情況下,當你打電話時,sflphone會使用列表當中第一個已註冊的帳戶。使用" -#~ "箭頭\"上\"和\"下\"可以改變賬戶的順序。選擇賬戶名稱左邊的方框可以啟用帳戶," -#~ "取消選擇則會禁用該賬戶。通過\"加\"\"減\"按鈕可以添加或刪除賬戶。點擊\"編輯" -#~ "\"按鈕可以改變賬戶的設置。" +#~ "在默認情況下,當你打電話時,sflphone會使用列表當中第一個已註冊的帳戶。使用箭頭\"上\"和\"下\"可以改變賬戶的順序。選擇賬戶名稱左邊的方框可以" +#~ "啟用帳戶,取消選擇則會禁用該賬戶。通過\"加\"\"減\"按鈕可以添加或刪除賬戶。點擊\"編輯\"按鈕可以改變賬戶的設置。" #~ msgid "Remove the selected account" #~ msgstr "刪除所選賬戶" #~ msgid "" -#~ "This button will remove the selected account in the list below. Be sure " -#~ "you really don't need it anymore. If you think you might use it again " -#~ "later, just uncheck it." -#~ msgstr "" -#~ "該按鈕會刪除列表中被選定的賬戶。請確認你的操作。如果你希望繼續使用某個賬" -#~ "戶,請取消對該賬戶的選擇" +#~ "This button will remove the selected account in the list below. Be sure you " +#~ "really don't need it anymore. If you think you might use it again later, " +#~ "just uncheck it." +#~ msgstr "該按鈕會刪除列表中被選定的賬戶。請確認你的操作。如果你希望繼續使用某個賬戶,請取消對該賬戶的選擇" #~ msgid "Remove" #~ msgstr "刪除" #~ msgid "" -#~ "This button enables you to initialize a new account. You will then be " -#~ "able to edit it using the form on the right." -#~ msgstr "" -#~ "通過該按鈕可以創建一個新賬戶。添加該賬戶之後你還可以通過編輯按鈕來修改設" -#~ "置。" +#~ "This button enables you to initialize a new account. You will then be able " +#~ "to edit it using the form on the right." +#~ msgstr "通過該按鈕可以創建一個新賬戶。添加該賬戶之後你還可以通過編輯按鈕來修改設置。" #~ msgid "Add" #~ msgstr "添加" @@ -1164,9 +1136,8 @@ msgstr "從撥出電話中查詢" #~ "this list which is \"registered\". Change the order of the accounts using " #~ "the \"Up\" and \"Down\" arrows." #~ msgstr "" -#~ "在默認情況下,當你打電話時,sflphone會使用列表當中第一個已註冊的帳戶。使用" -#~ "箭頭\"上\"和\"下\"可以改變賬戶的順序。選擇賬戶名稱左邊的方框可以啟用帳戶," -#~ "取消選擇則會禁用該賬戶。通過\"加\"\"減\"按鈕可以添加或刪除賬戶。" +#~ "在默認情況下,當你打電話時,sflphone會使用列表當中第一個已註冊的帳戶。使用箭頭\"上\"和\"下\"可以改變賬戶的順序。選擇賬戶名稱左邊的方框可以" +#~ "啟用帳戶,取消選擇則會禁用該賬戶。通過\"加\"\"減\"按鈕可以添加或刪除賬戶。" #~ msgid "Down" #~ msgstr "下" @@ -1264,9 +1235,6 @@ msgstr "從撥出電話中查詢" #~ msgid "Prefix dialed numbers with" #~ msgstr "號碼前綴" -#~ msgid "History" -#~ msgstr "歷史" - #~ msgid "Attention:number of results exceeds max displayed." #~ msgstr "注意:結果超過可顯示的最大值" @@ -1288,9 +1256,15 @@ msgstr "從撥出電話中查詢" #~ msgid "_Edit" #~ msgstr "編輯(E)" +#~ msgid "_Volume controls" +#~ msgstr "音量控制(V)" + #~ msgid "_View" #~ msgstr "查看(V)" +#~ msgid "History" +#~ msgstr "歷史" + #~ msgid "_Enable this account" #~ msgstr "啟用該賬戶(E)" @@ -1300,9 +1274,6 @@ msgstr "從撥出電話中查詢" #~ msgid "Port" #~ msgstr "端口" -#~ msgid "_Volume controls" -#~ msgstr "音量控制(V)" - #~ msgctxt "Config section" #~ msgid "Accounts" #~ msgstr "帳戶" @@ -1595,3 +1566,16 @@ msgstr "從撥出電話中查詢" #~ msgid "_STUN Server" #~ msgstr "STUN伺服器(S)" + +#~ msgctxt "NAME OF TRANSLATORS" +#~ msgid "Your names" +#~ msgstr "" +#~ "Yun Liu, ,Launchpad Contributions:,Yun Liu, ,Launchpad " +#~ "Contributions:,Emmanuel Milou,Yun Liu, ,Launchpad Contributions:,Emmanuel " +#~ "Milou,Yun Liu, ,Launchpad Contributions:,Emmanuel Milou,Yun Liu" + +#~ msgctxt "EMAIL OF TRANSLATORS" +#~ msgid "Your emails" +#~ msgstr "" +#~ "yunliu2000@gmail.com,,,,,,emmanuel.milou@savoirfairelinux.com,,,,emmanuel.mil" +#~ "ou@savoirfairelinux.com,,,,emmanuel.milou@savoirfairelinux.com," diff --git a/lang/zh_TW/zh_TW.po b/lang/zh_TW/zh_TW.po index dfc3c4a511..e4a57b9b81 100644 --- a/lang/zh_TW/zh_TW.po +++ b/lang/zh_TW/zh_TW.po @@ -3,20 +3,19 @@ # This file is distributed under the same license as the sflphone package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2009. # -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:509 msgid "" msgstr "" "Project-Id-Version: sflphone\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2009-10-14 11:18-0400\n" -"PO-Revision-Date: 2009-10-07 16:57+0000\n" +"PO-Revision-Date: 2009-10-26 20:46+0000\n" "Last-Translator: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com>\n" "Language-Team: Traditional Chinese <zh_TW@li.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Launchpad-Export-Date: 2009-10-14 15:20+0000\n" +"X-Launchpad-Export-Date: 2009-12-03 15:32+0000\n" "X-Generator: Launchpad (build Unknown)\n" #: ../sflphone-client-gnome/src/accountlist.c:175 @@ -99,8 +98,8 @@ msgstr "" msgid "" "<b>Error: No audio codecs found.\n" "\n" -"</b> SFL audio codecs have to be placed in <i>%s</i> or in the <b>.sflphone</" -"b> directory in your home( <i>%s</i> )" +"</b> SFL audio codecs have to be placed in <i>%s</i> or in the " +"<b>.sflphone</b> directory in your home( <i>%s</i> )" msgstr "" #: ../sflphone-client-gnome/src/errors.c:29 @@ -996,8 +995,13 @@ msgstr "" #~ msgctxt "NAME OF TRANSLATORS" #~ msgid "Your names" -#~ msgstr ",Launchpad Contributions:, ,Launchpad Contributions:,Emmanuel Milou" +#~ msgstr "" +#~ ",Launchpad Contributions:, ,Launchpad Contributions:,Emmanuel Milou, " +#~ ",Launchpad Contributions:,Emmanuel Milou, ,Launchpad Contributions:,Emmanuel " +#~ "Milou" #~ msgctxt "EMAIL OF TRANSLATORS" #~ msgid "Your emails" -#~ msgstr ",,,,emmanuel.milou@savoirfairelinux.com" +#~ msgstr "" +#~ ",,,,emmanuel.milou@savoirfairelinux.com,,,emmanuel.milou@savoirfairelinux.com" +#~ ",,,emmanuel.milou@savoirfairelinux.com" -- GitLab From 760939dbfd09dd07cf7a104d7b2ab19e3df50d29 Mon Sep 17 00:00:00 2001 From: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> Date: Thu, 3 Dec 2009 11:07:44 -0500 Subject: [PATCH 049/188] [#1060] Merge new translations in GNOME client --- lang/da/da.po | 727 +++++++++----- lang/de/de.po | 794 +++++++++------ lang/es/es.po | 827 ++++++++------- lang/fr/fr.po | 481 ++++----- lang/it/it.po | 750 ++++++++------ lang/ko/ko.po | 677 ++++++++----- lang/merge-po-with-template.sh | 8 + lang/pl/pl.po | 691 ++++++++----- lang/pt/pt.po | 725 ++++++++------ lang/pt_BR/pt_BR.po | 815 ++++++++------- lang/ru/ru.po | 799 +++++++++------ lang/update-template.sh | 6 + lang/update.sh | 13 - lang/zh_CN/zh_CN.po | 780 +++++++++------ lang/zh_HK/zh_HK.po | 783 +++++++++------ lang/zh_TW/zh_TW.po | 679 ++++++++----- sflphone-client-gnome/po/Makefile.am | 6 +- sflphone-client-gnome/po/de/de.po | 851 +++++++++------- sflphone-client-gnome/po/es/es.po | 831 ++++++++------- sflphone-client-gnome/po/fr/fr.po | 481 ++++----- sflphone-client-gnome/po/it/it.po | 944 ++++++++++-------- sflphone-client-gnome/po/pt_BR/pt_BR.po | 820 ++++++++------- sflphone-client-gnome/po/ru/ru.po | 802 +++++++++------ sflphone-client-gnome/po/sflphone_es.po.patch | 395 -------- sflphone-client-gnome/po/zh_CN/zh_CN.po | 788 +++++++++------ sflphone-client-gnome/po/zh_HK/zh_HK.po | 787 +++++++++------ 26 files changed, 9273 insertions(+), 6987 deletions(-) create mode 100755 lang/merge-po-with-template.sh create mode 100755 lang/update-template.sh delete mode 100755 lang/update.sh delete mode 100644 sflphone-client-gnome/po/sflphone_es.po.patch diff --git a/lang/da/da.po b/lang/da/da.po index a90aa624db..1c011969ac 100644 --- a/lang/da/da.po +++ b/lang/da/da.po @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: sflphone\n" -"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" -"POT-Creation-Date: 2009-10-14 11:18-0400\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-12-03 10:22-0500\n" "PO-Revision-Date: 2009-11-03 03:52+0000\n" "Last-Translator: Jonas Fonseca <fonseca@diku.dk>\n" "Language-Team: Danish <da@li.org>\n" @@ -60,25 +60,15 @@ msgstr "Stun server ugyldig" msgid "Invalid" msgstr "Ugyldig" -#: ../sflphone-client-gnome/src/actions.c:54 -#: ../sflphone-client-gnome/src/sflnotify.c:94 -#, c-format -msgid "%d voice mail" -msgid_plural "%d voice mails" -msgstr[0] "%d indtalt besked" -msgstr[1] "%d indtalte beskeder" - -#: ../sflphone-client-gnome/src/actions.c:83 -#: ../sflphone-client-gnome/src/actions.c:919 -#: ../sflphone-client-gnome/src/actions.c:926 +#: ../sflphone-client-gnome/src/actions.c:98 msgid "Using account" msgstr "Benytter konto" -#: ../sflphone-client-gnome/src/actions.c:89 +#: ../sflphone-client-gnome/src/actions.c:104 msgid "No registered accounts" msgstr "Ingen registrerede konti" -#: ../sflphone-client-gnome/src/actions.c:268 +#: ../sflphone-client-gnome/src/actions.c:285 msgid "" "Unable to connect to the SFLphone server.\n" "Make sure the daemon is running." @@ -86,27 +76,23 @@ msgstr "" "Forbindelse til SFLphone serveren kan ikke oprettes.\n" "Sørg for at server-dæmonen kører." -#: ../sflphone-client-gnome/src/actions.c:913 -#, c-format -msgid "IP call - %s" -msgstr "IP opkald - %s" - -#: ../sflphone-client-gnome/src/actions.c:922 -msgid "Codec" -msgstr "Kodning" +#: ../sflphone-client-gnome/src/actions.c:589 +#: ../sflphone-client-gnome/src/actions.c:911 +msgid "Direct SIP call" +msgstr "Direkte IP opkald" -#: ../sflphone-client-gnome/src/actions.c:1119 +#: ../sflphone-client-gnome/src/actions.c:1103 #, c-format msgid "" "<b>Error: No audio codecs found.\n" "\n" -"</b> SFL audio codecs have to be placed in <i>%s</i> or in the " -"<b>.sflphone</b> directory in your home( <i>%s</i> )" +"</b> SFL audio codecs have to be placed in <i>%s</i> or in the <b>.sflphone</" +"b> directory in your home( <i>%s</i> )" msgstr "" "<b>Fejl: Ingen audio-codec fundet\n" "\n" -"</b>SFL audio-codecs skal installeres i <i>%s</i> eller i mappen " -"<b>.sflphone</b> i dit hjemmekatalog (<i>%s</i>)" +"</b>SFL audio-codecs skal installeres i <i>%s</i> eller i mappen <b>." +"sflphone</b> i dit hjemmekatalog (<i>%s</i>)" #: ../sflphone-client-gnome/src/errors.c:29 msgid "" @@ -150,31 +136,31 @@ msgstr "Igangværende opkald eksisterer" msgid "Do you still want to quit?" msgstr "Ønsker du stadig at afslutte" -#: ../sflphone-client-gnome/src/mainwindow.c:299 +#: ../sflphone-client-gnome/src/mainwindow.c:298 msgid "SFLphone Error" msgstr "SFLphone fejl" -#: ../sflphone-client-gnome/src/mainwindow.c:391 +#: ../sflphone-client-gnome/src/mainwindow.c:392 #, c-format msgid "ZRTP is not supported by peer %s\n" msgstr "ZRTP er ikke understøttet af modtageren %s\n" -#: ../sflphone-client-gnome/src/mainwindow.c:392 +#: ../sflphone-client-gnome/src/mainwindow.c:393 msgid "Secure Communication Unavailable" msgstr "Sikker kommunikation ikke tilgængelig" -#: ../sflphone-client-gnome/src/mainwindow.c:393 -#: ../sflphone-client-gnome/src/mainwindow.c:415 +#: ../sflphone-client-gnome/src/mainwindow.c:394 +#: ../sflphone-client-gnome/src/mainwindow.c:416 msgid "Continue" msgstr "Fortsæt" -#: ../sflphone-client-gnome/src/mainwindow.c:394 -#: ../sflphone-client-gnome/src/mainwindow.c:416 -#: ../sflphone-client-gnome/src/mainwindow.c:430 +#: ../sflphone-client-gnome/src/mainwindow.c:395 +#: ../sflphone-client-gnome/src/mainwindow.c:417 +#: ../sflphone-client-gnome/src/mainwindow.c:431 msgid "Stop Call" msgstr "Afslut opkald" -#: ../sflphone-client-gnome/src/mainwindow.c:413 +#: ../sflphone-client-gnome/src/mainwindow.c:414 #, c-format msgid "" "A %s error forced the call with %s to fall under unencrypted mode.\n" @@ -184,11 +170,11 @@ msgstr "" "tilstand.\n" "Den præcise årsag: %s\n" -#: ../sflphone-client-gnome/src/mainwindow.c:414 +#: ../sflphone-client-gnome/src/mainwindow.c:415 msgid "ZRTP negotiation failed" msgstr "ZRTP-forhandling mislykkedes" -#: ../sflphone-client-gnome/src/mainwindow.c:427 +#: ../sflphone-client-gnome/src/mainwindow.c:428 #, c-format msgid "" "%s wants to stop using secure communication. Confirm will resume " @@ -197,11 +183,11 @@ msgstr "" "%s ønsker at afslutte brugen af sikker kommunikation. Ved at godkende vil " "samtalen fortætte uden SRTP\n" -#: ../sflphone-client-gnome/src/mainwindow.c:428 +#: ../sflphone-client-gnome/src/mainwindow.c:429 msgid "Confirm Go Clear" msgstr "Godkend sikkerhedsændring" -#: ../sflphone-client-gnome/src/mainwindow.c:429 +#: ../sflphone-client-gnome/src/mainwindow.c:430 msgid "Confirm" msgstr "Godkend" @@ -216,6 +202,13 @@ msgstr "%s konto : %s" msgid "<i>From</i> %s" msgstr "<i>Fra</i> %s" +#: ../sflphone-client-gnome/src/sflnotify.c:94 +#, c-format +msgid "%d voice mail" +msgid_plural "%d voice mails" +msgstr[0] "%d indtalt besked" +msgstr[1] "%d indtalte beskeder" + #: ../sflphone-client-gnome/src/sflnotify.c:111 #, c-format msgid "Calling with %s account <i>%s</i>" @@ -265,15 +258,15 @@ msgstr "Højtaler lydstyrke" msgid "Mic volume" msgstr "Mikrofon lydstyrke" -#: ../sflphone-client-gnome/src/statusicon.c:91 +#: ../sflphone-client-gnome/src/statusicon.c:96 msgid "_Show main window" msgstr "_Vis hovedvindue" -#: ../sflphone-client-gnome/src/statusicon.c:126 +#: ../sflphone-client-gnome/src/statusicon.c:131 msgid "SFLphone" msgstr "SFLphone" -#: ../sflphone-client-gnome/src/statusicon.c:127 +#: ../sflphone-client-gnome/src/statusicon.c:132 #, c-format msgid "%i account configured" msgid_plural "%i accounts configured" @@ -281,202 +274,397 @@ msgstr[0] "%i konto oprettet" msgstr[1] "%i konti oprettet" #: ../sflphone-client-gnome/src/toolbar.c:38 -#: ../sflphone-client-gnome/src/uimanager.c:750 +#: ../sflphone-client-gnome/src/uimanager.c:693 +#: ../sflphone-client-gnome/src/uimanager.c:727 msgid "Voicemail" msgstr "Talebesked" -#: ../sflphone-client-gnome/src/uimanager.c:403 +#: ../sflphone-client-gnome/src/uimanager.c:117 +msgid "No address book selected" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:137 +#: ../sflphone-client-gnome/src/uimanager.c:756 +msgid "Address book" +msgstr "Adressebog" + +#: ../sflphone-client-gnome/src/uimanager.c:279 +msgid "Voicemail (%i)" +msgstr "Talebesked" + +#: ../sflphone-client-gnome/src/uimanager.c:342 msgid "SFLphone is a VoIP client compatible with SIP and IAX2 protocols." msgstr "SFLphone er en VoIP-klient kompatibel med SIP og IAX2 protokoller" -#: ../sflphone-client-gnome/src/uimanager.c:406 +#: ../sflphone-client-gnome/src/uimanager.c:345 msgid "About SFLphone" msgstr "Om SFLphone" -#: ../sflphone-client-gnome/src/uimanager.c:1028 +#: ../sflphone-client-gnome/src/uimanager.c:719 +msgid "Call" +msgstr "Afslut opkald" + +#: ../sflphone-client-gnome/src/uimanager.c:720 +#: ../sflphone-client-gnome/src/uimanager.c:1184 +msgid "_New call" +msgstr "_Nyt opkald" + +#: ../sflphone-client-gnome/src/uimanager.c:720 +msgid "Place a new call" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:721 +#: ../sflphone-client-gnome/src/uimanager.c:979 msgid "_Pick up" msgstr "_Svar" -#: ../sflphone-client-gnome/src/uimanager.c:1040 -#: ../sflphone-client-gnome/src/uimanager.c:1081 +#: ../sflphone-client-gnome/src/uimanager.c:721 +msgid "Answer the call" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:722 +#: ../sflphone-client-gnome/src/uimanager.c:991 +#: ../sflphone-client-gnome/src/uimanager.c:1032 msgid "_Hang up" msgstr "_Læg på" -#: ../sflphone-client-gnome/src/uimanager.c:1052 -#: ../sflphone-client-gnome/src/uimanager.c:1093 -msgid "On _Hold" +#: ../sflphone-client-gnome/src/uimanager.c:722 +msgid "Finish the call" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:723 +msgid "O_n hold" msgstr "I _venteposition" -#: ../sflphone-client-gnome/src/uimanager.c:1064 +#: ../sflphone-client-gnome/src/uimanager.c:723 +msgid "Place the call on hold" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:724 +msgid "O_ff hold" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:724 +msgid "Place the call off hold" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:725 +#: ../sflphone-client-gnome/src/uimanager.c:1015 msgid "_Record" msgstr "_Optag" -#: ../sflphone-client-gnome/src/uimanager.c:1154 +#: ../sflphone-client-gnome/src/uimanager.c:725 +msgid "Record the current conversation" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:726 +msgid "Configuration _Assistant" +msgstr "Konfigurationsfil" + +#: ../sflphone-client-gnome/src/uimanager.c:726 +msgid "Run the configuration assistant" +msgstr "Stun konfigureringsfejl" + +#: ../sflphone-client-gnome/src/uimanager.c:727 +msgid "Call your voicemail" +msgstr "%d indtalt besked" + +#: ../sflphone-client-gnome/src/uimanager.c:728 +msgid "_Close" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:728 +msgid "Minimize to system tray" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:729 +msgid "_Quit" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:729 +msgid "Quit the program" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:732 +msgid "_Edit" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:733 +msgid "_Copy" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:733 +msgid "Copy the selection" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:734 +msgid "_Paste" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:734 +msgid "Paste the clipboard" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:735 +msgid "Clear _history" +msgstr "Opkaldshistorik" + +#: ../sflphone-client-gnome/src/uimanager.c:735 +msgid "Clear the call history" +msgstr "Opkaldshistorik" + +#: ../sflphone-client-gnome/src/uimanager.c:736 +msgid "_Accounts" +msgstr "Konti" + +#: ../sflphone-client-gnome/src/uimanager.c:736 +msgid "Edit your accounts" +msgstr "Nuværende konto" + +#: ../sflphone-client-gnome/src/uimanager.c:737 +msgid "_Preferences" +msgstr "Indstillinger" + +#: ../sflphone-client-gnome/src/uimanager.c:737 +msgid "Change your preferences" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:740 +msgid "_View" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:743 +msgid "_Help" +msgstr "_Hjem" + +#: ../sflphone-client-gnome/src/uimanager.c:744 +msgid "Contents" +msgstr "Fortsæt" + +#: ../sflphone-client-gnome/src/uimanager.c:744 +msgid "Open the manual" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:745 +msgid "About this application" +msgstr "Godkendelse" + +#: ../sflphone-client-gnome/src/uimanager.c:751 +msgid "_Transfer" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:751 +msgid "Transfer the call" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:752 +msgid "_Show toolbar" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:752 +msgid "Show the toolbar" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:753 +msgid "_Dialpad" +msgstr "Deaktiveret" + +#: ../sflphone-client-gnome/src/uimanager.c:753 +msgid "Show the dialpad" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:754 +msgid "_Volume controls" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:754 +msgid "Show the volume controls" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:755 +msgid "_History" +msgstr "Opkaldshistorik" + +#: ../sflphone-client-gnome/src/uimanager.c:755 +msgid "Calls history" +msgstr "Opkaldshistorik" + +#: ../sflphone-client-gnome/src/uimanager.c:756 +msgid "_Address book" +msgstr "Adressebog" + +#: ../sflphone-client-gnome/src/uimanager.c:1003 +#: ../sflphone-client-gnome/src/uimanager.c:1044 +msgid "On _Hold" +msgstr "I _venteposition" + +#: ../sflphone-client-gnome/src/uimanager.c:1107 msgid "_Call back" msgstr "_Besvar opkald" -#: ../sflphone-client-gnome/src/uimanager.c:1226 -msgid "_New call" -msgstr "_Nyt opkald" - -#: ../sflphone-client-gnome/src/uimanager.c:1300 +#: ../sflphone-client-gnome/src/uimanager.c:1258 msgid "Edit phone number" msgstr "Ændre telefonnummer" -#: ../sflphone-client-gnome/src/uimanager.c:1311 +#: ../sflphone-client-gnome/src/uimanager.c:1269 msgid "Edit the phone number before making a call" msgstr "Ændre telefonnummeret før opkald" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:164 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:180 msgid "Account Parameters" msgstr "Kontoparametre" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:173 -#: ../sflphone-client-gnome/src/config/assistant.c:294 -#: ../sflphone-client-gnome/src/config/assistant.c:402 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:189 +#: ../sflphone-client-gnome/src/config/assistant.c:314 +#: ../sflphone-client-gnome/src/config/assistant.c:427 msgid "_Alias" msgstr "_Alias" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:181 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:197 msgid "_Protocol" msgstr "_Protokol" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:199 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:215 msgid "Unknown" msgstr "Ukendt" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:209 -#: ../sflphone-client-gnome/src/config/assistant.c:302 -#: ../sflphone-client-gnome/src/config/assistant.c:410 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:225 +#: ../sflphone-client-gnome/src/config/assistant.c:322 +#: ../sflphone-client-gnome/src/config/assistant.c:435 msgid "_Host name" msgstr "_Værtsnavn" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:217 -#: ../sflphone-client-gnome/src/config/assistant.c:310 -#: ../sflphone-client-gnome/src/config/assistant.c:418 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:233 +#: ../sflphone-client-gnome/src/config/assistant.c:330 +#: ../sflphone-client-gnome/src/config/assistant.c:443 msgid "_User name" msgstr "_Brugernavn" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:234 -#: ../sflphone-client-gnome/src/config/assistant.c:326 -#: ../sflphone-client-gnome/src/config/assistant.c:433 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:250 +#: ../sflphone-client-gnome/src/config/assistant.c:346 +#: ../sflphone-client-gnome/src/config/assistant.c:458 msgid "_Password" msgstr "_Adgangskode" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:254 -#: ../sflphone-client-gnome/src/config/assistant.c:344 -#: ../sflphone-client-gnome/src/config/assistant.c:449 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:270 +#: ../sflphone-client-gnome/src/config/assistant.c:363 +#: ../sflphone-client-gnome/src/config/assistant.c:473 +msgid "Show password" +msgstr "Adgangskode" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:274 +#: ../sflphone-client-gnome/src/config/assistant.c:368 +#: ../sflphone-client-gnome/src/config/assistant.c:478 msgid "_Voicemail number" msgstr "_Nummer for talebesked" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:340 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:361 msgid "Authentication" msgstr "Godkendelse" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:341 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:362 msgid "Secret" msgstr "Hemmelig" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:466 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:605 msgid "Credential" msgstr "Legitimationsoplysning" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:501 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:640 msgid "Authentication name" msgstr "Godkendelsesnavn" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:512 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:651 msgid "Password" msgstr "Adgangskode" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:535 -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:909 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:201 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:674 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1056 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:321 msgid "Security" msgstr "Sikkerhed" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:547 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:213 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:687 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:333 msgid "Use TLS transport (sips)" msgstr "Benyt TLS transport (sips)" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:552 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:218 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:693 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:338 msgid "SRTP key exchange" msgstr "SRTP-nøgleudveksling" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:558 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:224 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:699 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:344 msgid "Disabled" msgstr "Deaktiveret" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:674 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:795 msgid "Registration" msgstr "Registrering" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:679 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:800 msgid "Registration expire" msgstr "Forældelse af registrering" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:687 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:809 msgid "_Comply with RFC 3263" msgstr "_Overhold RFC 3263" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:693 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:463 -msgid "Network" -msgstr "Netværk" +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:816 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:234 +msgid "Network Interface" +msgstr "Netværk kan ikke nås" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:707 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:830 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:249 msgid "Local address" msgstr "Lokal adresse" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:744 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:880 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:301 msgid "Local port" msgstr "Lokal port" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:752 -msgid "Set published address and port:" -msgstr "Konfigurer offentliggjort adresse og port:" +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:893 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:928 +msgid "Published address" +msgstr "Offentliggjort adresse" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:756 -msgid "Using STUN " +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:899 +msgid "Using STUN" msgstr "Ved brug af STUN " -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:761 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:906 +msgid "STUN server URL" +msgstr "STUN serveradresse" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:914 msgid "Same as local parameters" msgstr "Samme som lokale parametre" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:764 -msgid "Manually" -msgstr "Manuelt" - -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:769 -msgid "Published address" -msgstr "Offentliggjort adresse" +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:917 +msgid "Set published address and port:" +msgstr "Konfigurer offentliggjort adresse og port:" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:777 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:936 msgid "Published port" msgstr "Offentliggjort port" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:785 -msgid "STUN server URL" -msgstr "STUN serveradresse" - -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:880 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1027 msgid "Account settings" msgstr "Kontoindstillinger" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:899 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1046 msgid "Basic" msgstr "Grundlæggende" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:904 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1051 msgid "Advanced" msgstr "Advanceret" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:169 -msgid "Server returned \"" +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:164 +msgid "Server returned \"%s\" (%d)" msgstr "Server svarede \"" #: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:389 @@ -495,32 +683,18 @@ msgstr "Konti" msgid "Configured Accounts" msgstr "Oprettede konti" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:505 -msgid "There " -msgstr "Der " +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:501 +msgid "There is %d active account" +msgid_plural "There are %d active accounts" +msgstr[0] " aktiv konto" +msgstr[1] " aktiv konto" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:506 -msgid "is " -msgstr "er " - -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:506 -msgid "are " -msgstr "er " - -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:508 -msgid " active account" -msgstr " aktiv konto" - -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:509 -msgid "s" -msgstr "s" - -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:514 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:507 msgid "You have no active account" msgstr "Der er ingen aktive konti" #: ../sflphone-client-gnome/src/config/addressbook-config.c:306 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:443 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:556 msgid "General" msgstr "Generelt" @@ -565,16 +739,16 @@ msgid "Select which Evolution address books to use" msgstr "Vælg hvilke af Evolutions adressekartoteker skal benyttes" #: ../sflphone-client-gnome/src/config/addressbook-config.c:404 -#: ../sflphone-client-gnome/src/config/audioconf.c:578 +#: ../sflphone-client-gnome/src/config/audioconf.c:577 msgid "Name" msgstr "Navn" -#: ../sflphone-client-gnome/src/config/assistant.c:69 +#: ../sflphone-client-gnome/src/config/assistant.c:75 #, c-format msgid "This assistant is now finished." msgstr "Denne vejledning er nu fuldført" -#: ../sflphone-client-gnome/src/config/assistant.c:71 +#: ../sflphone-client-gnome/src/config/assistant.c:77 msgid "" "You can at any time check your registration state or modify your accounts " "parameters in the Options/Accounts window." @@ -582,212 +756,206 @@ msgstr "" "Du kan til enhver tid undersøge din registrering eller ændre dine kontis " "parametre i vinduet Indstillinger/Konti" -#: ../sflphone-client-gnome/src/config/assistant.c:74 +#: ../sflphone-client-gnome/src/config/assistant.c:80 msgid "Alias" msgstr "Alias" -#: ../sflphone-client-gnome/src/config/assistant.c:78 +#: ../sflphone-client-gnome/src/config/assistant.c:84 msgid "Server" msgstr "Server" -#: ../sflphone-client-gnome/src/config/assistant.c:82 +#: ../sflphone-client-gnome/src/config/assistant.c:88 msgid "Username" msgstr "Brugernavn" -#: ../sflphone-client-gnome/src/config/assistant.c:86 +#: ../sflphone-client-gnome/src/config/assistant.c:92 msgid "Security: " msgstr "Sikkerhed: " -#: ../sflphone-client-gnome/src/config/assistant.c:88 +#: ../sflphone-client-gnome/src/config/assistant.c:94 msgid "SRTP/ZRTP draft-zimmermann" msgstr "SRTP/ZRTP draft-zimmermann" -#: ../sflphone-client-gnome/src/config/assistant.c:90 -#: ../sflphone-client-gnome/src/config/assistant.c:182 +#: ../sflphone-client-gnome/src/config/assistant.c:96 msgid "None" msgstr "Ingen" -#: ../sflphone-client-gnome/src/config/assistant.c:210 +#: ../sflphone-client-gnome/src/config/assistant.c:229 msgid "SFLphone account creation wizard" msgstr "SFLphone-guiden til oprettelse af konto" -#: ../sflphone-client-gnome/src/config/assistant.c:236 +#: ../sflphone-client-gnome/src/config/assistant.c:255 msgid "Welcome to the Account creation wizard of SFLphone!" msgstr "Velkommen til kontooperettelsesvejledning for SFLphone" -#: ../sflphone-client-gnome/src/config/assistant.c:237 +#: ../sflphone-client-gnome/src/config/assistant.c:256 msgid "This installation wizard will help you configure an account." msgstr "" "Denne installeringsvejledning vil hjælpe dig med at konfigurere en konto" -#: ../sflphone-client-gnome/src/config/assistant.c:251 +#: ../sflphone-client-gnome/src/config/assistant.c:270 msgid "VoIP Protocols" msgstr "VoIP protokoller" -#: ../sflphone-client-gnome/src/config/assistant.c:251 +#: ../sflphone-client-gnome/src/config/assistant.c:270 msgid "Select an account type" msgstr "Vælg en kontotype" -#: ../sflphone-client-gnome/src/config/assistant.c:253 +#: ../sflphone-client-gnome/src/config/assistant.c:272 msgid "SIP (Session Initiation Protocol)" msgstr "SIP (Session Initiation Protocol)" -#: ../sflphone-client-gnome/src/config/assistant.c:255 +#: ../sflphone-client-gnome/src/config/assistant.c:274 msgid "IAX2 (InterAsterix Exchange)" msgstr "IAX2 (InterAsterix Exchange)" -#: ../sflphone-client-gnome/src/config/assistant.c:269 +#: ../sflphone-client-gnome/src/config/assistant.c:288 msgid "Account" msgstr "Konto" -#: ../sflphone-client-gnome/src/config/assistant.c:269 +#: ../sflphone-client-gnome/src/config/assistant.c:288 msgid "Please select one of the following options" msgstr "Vælg en af følgende indstillinger" -#: ../sflphone-client-gnome/src/config/assistant.c:271 +#: ../sflphone-client-gnome/src/config/assistant.c:290 msgid "Create a free SIP/IAX2 account on sflphone.org" msgstr "Opret en gratis SIP/IAX2 konto hos sflphone.org" -#: ../sflphone-client-gnome/src/config/assistant.c:273 +#: ../sflphone-client-gnome/src/config/assistant.c:292 msgid "Register an existing SIP or IAX2 account" msgstr "Registrer en eksisterende SIP eller IAX2 konto" -#: ../sflphone-client-gnome/src/config/assistant.c:286 +#: ../sflphone-client-gnome/src/config/assistant.c:306 msgid "SIP account settings" msgstr "SIP kontoindstillinger" -#: ../sflphone-client-gnome/src/config/assistant.c:286 -#: ../sflphone-client-gnome/src/config/assistant.c:394 +#: ../sflphone-client-gnome/src/config/assistant.c:306 +#: ../sflphone-client-gnome/src/config/assistant.c:419 msgid "Please fill the following information" msgstr "Udfyld venligst følgende information" -#: ../sflphone-client-gnome/src/config/assistant.c:352 -#: ../sflphone-client-gnome/src/config/assistant.c:381 +#: ../sflphone-client-gnome/src/config/assistant.c:376 +#: ../sflphone-client-gnome/src/config/assistant.c:405 msgid "Secure communications with _ZRTP" msgstr "Sikker kommunikation med _ZRTP" -#: ../sflphone-client-gnome/src/config/assistant.c:365 +#: ../sflphone-client-gnome/src/config/assistant.c:389 msgid "Optional email address" msgstr "Valgfri emailadresse" -#: ../sflphone-client-gnome/src/config/assistant.c:365 +#: ../sflphone-client-gnome/src/config/assistant.c:389 msgid "This email address will be used to send your voicemail messages." -msgstr "" -"Denne emailadresse vil blive brugt til at sende dig indtalte beskeder" +msgstr "Denne emailadresse vil blive brugt til at sende dig indtalte beskeder" -#: ../sflphone-client-gnome/src/config/assistant.c:373 +#: ../sflphone-client-gnome/src/config/assistant.c:397 msgid "_Email address" msgstr "_Emailadresse" -#: ../sflphone-client-gnome/src/config/assistant.c:394 +#: ../sflphone-client-gnome/src/config/assistant.c:419 msgid "IAX2 account settings" msgstr "IAX2 kontoindstillinger" -#: ../sflphone-client-gnome/src/config/assistant.c:467 +#: ../sflphone-client-gnome/src/config/assistant.c:496 msgid "Network Address Translation (NAT)" msgstr "Network Address Translation (NAT)" -#: ../sflphone-client-gnome/src/config/assistant.c:467 +#: ../sflphone-client-gnome/src/config/assistant.c:496 msgid "You should probably enable this if you are behind a firewall." msgstr "Du opfordres til at aktivere dette hvis du er bag en firewall" -#: ../sflphone-client-gnome/src/config/assistant.c:476 +#: ../sflphone-client-gnome/src/config/assistant.c:505 msgid "E_nable STUN" msgstr "_Benyt STUN" -#: ../sflphone-client-gnome/src/config/assistant.c:483 +#: ../sflphone-client-gnome/src/config/assistant.c:512 msgid "_STUN server" msgstr "_STUN server" -#: ../sflphone-client-gnome/src/config/assistant.c:497 +#: ../sflphone-client-gnome/src/config/assistant.c:526 msgid "Account Registration" msgstr "Kontoregistrering" -#: ../sflphone-client-gnome/src/config/assistant.c:497 +#: ../sflphone-client-gnome/src/config/assistant.c:526 msgid "Congratulations!" msgstr "Tillykke!" -#: ../sflphone-client-gnome/src/config/audioconf.c:583 +#: ../sflphone-client-gnome/src/config/audioconf.c:582 msgid "Frequency" msgstr "Frekvens" -#: ../sflphone-client-gnome/src/config/audioconf.c:588 +#: ../sflphone-client-gnome/src/config/audioconf.c:587 msgid "Bitrate" msgstr "Bithastighed" -#: ../sflphone-client-gnome/src/config/audioconf.c:593 +#: ../sflphone-client-gnome/src/config/audioconf.c:592 msgid "Bandwidth" msgstr "Båndbredde" -#: ../sflphone-client-gnome/src/config/audioconf.c:673 +#: ../sflphone-client-gnome/src/config/audioconf.c:670 msgid "ALSA plugin" msgstr "ALSA plugin" -#: ../sflphone-client-gnome/src/config/audioconf.c:695 +#: ../sflphone-client-gnome/src/config/audioconf.c:692 msgid "Output" msgstr "Uddata" -#: ../sflphone-client-gnome/src/config/audioconf.c:717 +#: ../sflphone-client-gnome/src/config/audioconf.c:714 msgid "Input" msgstr "Inddata" -#: ../sflphone-client-gnome/src/config/audioconf.c:752 +#: ../sflphone-client-gnome/src/config/audioconf.c:749 msgid "_Voice Activity Detection" msgstr "_Detektering af taleaktivitet" -#: ../sflphone-client-gnome/src/config/audioconf.c:762 +#: ../sflphone-client-gnome/src/config/audioconf.c:759 msgid "_Noise Reduction (Narrow-Band Companding)" msgstr "_Støjreducering (Narrow-Band Companding)" -#: ../sflphone-client-gnome/src/config/audioconf.c:798 +#: ../sflphone-client-gnome/src/config/audioconf.c:800 msgid "Sound Manager" msgstr "Lydhåndtering" -#: ../sflphone-client-gnome/src/config/audioconf.c:807 +#: ../sflphone-client-gnome/src/config/audioconf.c:809 msgid "_Pulseaudio" msgstr "_PulseAudio" -#: ../sflphone-client-gnome/src/config/audioconf.c:811 +#: ../sflphone-client-gnome/src/config/audioconf.c:813 msgid "_ALSA" msgstr "_ALSA" -#: ../sflphone-client-gnome/src/config/audioconf.c:816 -msgid "_Mute other applications during a call" -msgstr "_Dæmp andre programmer ved opkald" - -#: ../sflphone-client-gnome/src/config/audioconf.c:823 +#: ../sflphone-client-gnome/src/config/audioconf.c:819 msgid "ALSA settings" msgstr "ALSA indstillinger" -#: ../sflphone-client-gnome/src/config/audioconf.c:840 +#: ../sflphone-client-gnome/src/config/audioconf.c:836 msgid "Codecs" msgstr "Codecs" -#: ../sflphone-client-gnome/src/config/audioconf.c:869 +#: ../sflphone-client-gnome/src/config/audioconf.c:865 msgid "Recordings" msgstr "Optagelser" -#: ../sflphone-client-gnome/src/config/audioconf.c:873 +#: ../sflphone-client-gnome/src/config/audioconf.c:869 msgid "Destination folder" msgstr "Destinationsmappe" -#: ../sflphone-client-gnome/src/config/audioconf.c:877 +#: ../sflphone-client-gnome/src/config/audioconf.c:873 msgid "Select a folder" msgstr "Vælg en mappe" -#: ../sflphone-client-gnome/src/config/audioconf.c:883 +#: ../sflphone-client-gnome/src/config/audioconf.c:879 msgid "Ringtones" msgstr "Ringetoner" -#: ../sflphone-client-gnome/src/config/audioconf.c:889 +#: ../sflphone-client-gnome/src/config/audioconf.c:885 msgid "_Enable ringtones" msgstr "Aktiver _ringetoner" -#: ../sflphone-client-gnome/src/config/audioconf.c:895 +#: ../sflphone-client-gnome/src/config/audioconf.c:891 msgid "Choose a ringtone" msgstr "Vælg en ringetone" -#: ../sflphone-client-gnome/src/config/audioconf.c:901 +#: ../sflphone-client-gnome/src/config/audioconf.c:897 msgid "Audio Files" msgstr "Lydfiler" @@ -824,7 +992,7 @@ msgstr "Omskrivning af telefonnummer" msgid "_Prefix dialed numbers with" msgstr "_Præfiks for indtastede numre" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:195 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:225 msgid "" "This profile is used when you want to reach a remote peer simply by typing a " "sip URI such as <b>sip:remotepeer</b>. The settings you define here will " @@ -835,79 +1003,59 @@ msgstr "" "du definerer her vil også benyttes hvis ingen konto kan tilknyttes et " "indgående eller udgående opkald." -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:274 -msgid "SIP Port" -msgstr "SIP Port" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:281 -msgid "UDP Transport" -msgstr "UDP transport" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:319 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:440 msgid "Desktop Notifications" msgstr "Meddelelser" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:323 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:444 msgid "_Enable notifications" msgstr "_Aktiver meddelelser" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:329 -msgid "Enable voicemail _notifications" -msgstr "Aktiver _talebeskedsmeddelelser" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:341 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:450 msgid "System Tray Icon" msgstr "Systembakke-ikon" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:344 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:453 msgid "_Popup main window on incoming call" msgstr "_Vis hovedvindue ved indgående opkald" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:349 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:457 msgid "Ne_ver popup main window" msgstr "Aldrig _pop-op hovedvindue" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:353 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:463 msgid "Hide SFLphone window on _startup" msgstr "Skjul SFLphone vinduet ved _start" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:359 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:469 msgid "Calls History" msgstr "Opkaldshistorik" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:362 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:472 msgid "_Keep my history for at least" msgstr "_Gem min historik i mindst" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:373 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:483 msgid "days" msgstr "dage" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:377 -msgid "Configuration File" -msgstr "Konfigurationsfil" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:379 -msgid "Store SIP credentials as MD5 hash" -msgstr "Gem SIP-legitimationsoplysninger som _MD5-hash-værdi" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:423 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:536 msgid "Preferences" msgstr "Indstillinger" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:448 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:561 msgid "Audio" msgstr "Audio" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:453 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:566 msgid "Address Book" msgstr "Adressebog" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:458 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:571 msgid "Hooks" msgstr "Hooks" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:468 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:581 msgid "Direct IP calls" msgstr "Direkte IP opkald" @@ -915,11 +1063,11 @@ msgstr "Direkte IP opkald" msgid "Advanced options for TLS" msgstr "Advancerede indstillinger for TLS" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:55 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:56 msgid "TLS transport" msgstr "TLS transport" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:59 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:60 msgid "" "TLS transport can be used along with UDP for those calls that would\n" "require secure sip transactions (aka SIPS). You can configure a different\n" @@ -932,55 +1080,55 @@ msgstr "" "TLS transporter for de enkelte konti. Bemærk dog at de hver vil benytte\n" "en dedikeret port forskellig fra hinanden.\n" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:100 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:103 msgid "Certificate of Authority list" msgstr "Autoritetscertifikatsliste" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:104 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:107 msgid "Choose a CA list file (optional)" msgstr "Vælg en fil med en autoritetscertifikatsliste (valgfri)" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:115 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:131 msgid "Public endpoint certificate file" msgstr "Offentlig endpoint certifikatsfil" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:119 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:135 msgid "Choose a public endpoint certificate (optional)" msgstr "Vælg et offentligt endpoint-certifikat (valgfri)" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:134 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:159 msgid "Choose a private key file (optional)" msgstr "Vælg en privat nøglefil (valgfri)" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:145 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:181 msgid "Password for the private key" msgstr "Adgangskode for den private nøgle" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:168 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:204 msgid "TLS protocol method" msgstr "TLS protokolmetode" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:202 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:238 msgid "TLS cipher list" msgstr "TLS cifferliste" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:211 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:247 msgid "Server name instance for outgoing TLS connection" msgstr "Server navneinstans for udgående TLS forbindelse" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:219 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:255 msgid "Negotiation timeout (sec:msec)" msgstr "Forhandlingstimeout" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:236 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:272 msgid "Verify incoming certificates, as a server" msgstr "Udfør kontrol af indgående certifikater, som en server" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:242 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:278 msgid "Verify certificates from answer, as a client" msgstr "Udfør kontrol af certifikater fra svar, som en klient" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:248 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:284 msgid "Require certificate for incoming tls connections" msgstr "Kræv certifikat for indgående TLS forbindelser" @@ -988,41 +1136,80 @@ msgstr "Kræv certifikat for indgående TLS forbindelser" msgid "ZRTP Options" msgstr "ZRTP indstillinger" -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:68 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:69 msgid "Send Hello Hash in S_DP" msgstr "Send \"Hello Hash\" i S_DP" -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:74 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:75 msgid "Ask User to Confirm SAS" msgstr "_Spørg bruger om at godkende SAS" -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:80 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:81 msgid "_Warn if ZRTP not supported" msgstr "_Advar hvis ZRTP ikke understøttes" -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:86 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:87 msgid "Display SAS once for hold events" msgstr "_Vis SAS en enkelt gang for vente-hændelser" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:56 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:58 msgid "Search all" msgstr "Søg alle" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:57 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:70 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:82 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:94 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:59 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:72 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:84 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:96 msgid "Click here to change the search type" msgstr "Klik her for at ændre søgningstypen" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:69 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:71 msgid "Search by missed call" msgstr "Søg i ubesvarede opkald" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:81 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:83 msgid "Search by incoming call" msgstr "Søg i indgående opkald" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:93 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:95 msgid "Search by outgoing call" msgstr "Søg i udgående opkald" + +#~ msgid "IP call - %s" +#~ msgstr "IP opkald - %s" + +#~ msgid "Codec" +#~ msgstr "Kodning" + +#~ msgid "Network" +#~ msgstr "Netværk" + +#~ msgid "Manually" +#~ msgstr "Manuelt" + +#~ msgid "There " +#~ msgstr "Der " + +#~ msgid "is " +#~ msgstr "er " + +#~ msgid "are " +#~ msgstr "er " + +#~ msgid "s" +#~ msgstr "s" + +#~ msgid "_Mute other applications during a call" +#~ msgstr "_Dæmp andre programmer ved opkald" + +#~ msgid "SIP Port" +#~ msgstr "SIP Port" + +#~ msgid "UDP Transport" +#~ msgstr "UDP transport" + +#~ msgid "Enable voicemail _notifications" +#~ msgstr "Aktiver _talebeskedsmeddelelser" + +#~ msgid "Store SIP credentials as MD5 hash" +#~ msgstr "Gem SIP-legitimationsoplysninger som _MD5-hash-værdi" diff --git a/lang/de/de.po b/lang/de/de.po index ccf215dcdc..ca1afd15a4 100644 --- a/lang/de/de.po +++ b/lang/de/de.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: sflphone\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-10-14 11:18-0400\n" +"POT-Creation-Date: 2009-12-03 10:22-0500\n" "PO-Revision-Date: 2009-10-26 20:46+0000\n" "Last-Translator: Maxime Chambreuil <maxime.chambreuil@gmail.com>\n" "Language-Team: SavoirFaire Linux Inc <sflphoneteam@savoirfairelinux.com>\n" @@ -60,25 +60,15 @@ msgstr "Ungültiger Stun server" msgid "Invalid" msgstr "Ungültig" -#: ../sflphone-client-gnome/src/actions.c:54 -#: ../sflphone-client-gnome/src/sflnotify.c:94 -#, c-format -msgid "%d voice mail" -msgid_plural "%d voice mails" -msgstr[0] "%d Voice Nachricht" -msgstr[1] "%d Voice Nachricht" - -#: ../sflphone-client-gnome/src/actions.c:83 -#: ../sflphone-client-gnome/src/actions.c:919 -#: ../sflphone-client-gnome/src/actions.c:926 +#: ../sflphone-client-gnome/src/actions.c:98 msgid "Using account" msgstr "Mit Konto" -#: ../sflphone-client-gnome/src/actions.c:89 +#: ../sflphone-client-gnome/src/actions.c:104 msgid "No registered accounts" msgstr "Kein registriertes Konto" -#: ../sflphone-client-gnome/src/actions.c:268 +#: ../sflphone-client-gnome/src/actions.c:285 msgid "" "Unable to connect to the SFLphone server.\n" "Make sure the daemon is running." @@ -86,22 +76,18 @@ msgstr "" "SFLphone Server kann nicht verbunden werden. Stellen Sie sicher, dass der " "Dämon läuft." -#: ../sflphone-client-gnome/src/actions.c:913 -#, c-format -msgid "IP call - %s" -msgstr "IP Anruf - %s" - -#: ../sflphone-client-gnome/src/actions.c:922 -msgid "Codec" -msgstr "Codec" +#: ../sflphone-client-gnome/src/actions.c:589 +#: ../sflphone-client-gnome/src/actions.c:911 +msgid "Direct SIP call" +msgstr "" -#: ../sflphone-client-gnome/src/actions.c:1119 +#: ../sflphone-client-gnome/src/actions.c:1103 #, c-format msgid "" "<b>Error: No audio codecs found.\n" "\n" -"</b> SFL audio codecs have to be placed in <i>%s</i> or in the " -"<b>.sflphone</b> directory in your home( <i>%s</i> )" +"</b> SFL audio codecs have to be placed in <i>%s</i> or in the <b>.sflphone</" +"b> directory in your home( <i>%s</i> )" msgstr "" "<b>Fehler: Kein Audio-Codec gefunden.\n" "\n" @@ -150,53 +136,53 @@ msgstr "Laufende Anrufe." msgid "Do you still want to quit?" msgstr "Bitte bestätigen, dass Sie die Anwendung beenden möchten" -#: ../sflphone-client-gnome/src/mainwindow.c:299 +#: ../sflphone-client-gnome/src/mainwindow.c:298 msgid "SFLphone Error" msgstr "SFLphone Fehler" -#: ../sflphone-client-gnome/src/mainwindow.c:391 +#: ../sflphone-client-gnome/src/mainwindow.c:392 #, c-format msgid "ZRTP is not supported by peer %s\n" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:392 +#: ../sflphone-client-gnome/src/mainwindow.c:393 msgid "Secure Communication Unavailable" msgstr "Sichere Verbindung nicht verfügbar" -#: ../sflphone-client-gnome/src/mainwindow.c:393 -#: ../sflphone-client-gnome/src/mainwindow.c:415 +#: ../sflphone-client-gnome/src/mainwindow.c:394 +#: ../sflphone-client-gnome/src/mainwindow.c:416 msgid "Continue" msgstr "Weiter" -#: ../sflphone-client-gnome/src/mainwindow.c:394 -#: ../sflphone-client-gnome/src/mainwindow.c:416 -#: ../sflphone-client-gnome/src/mainwindow.c:430 +#: ../sflphone-client-gnome/src/mainwindow.c:395 +#: ../sflphone-client-gnome/src/mainwindow.c:417 +#: ../sflphone-client-gnome/src/mainwindow.c:431 msgid "Stop Call" msgstr "Anruf beenden" -#: ../sflphone-client-gnome/src/mainwindow.c:413 +#: ../sflphone-client-gnome/src/mainwindow.c:414 #, c-format msgid "" "A %s error forced the call with %s to fall under unencrypted mode.\n" "Exact reason: %s\n" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:414 +#: ../sflphone-client-gnome/src/mainwindow.c:415 msgid "ZRTP negotiation failed" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:427 +#: ../sflphone-client-gnome/src/mainwindow.c:428 #, c-format msgid "" "%s wants to stop using secure communication. Confirm will resume " "conversation without SRTP.\n" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:428 +#: ../sflphone-client-gnome/src/mainwindow.c:429 msgid "Confirm Go Clear" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:429 +#: ../sflphone-client-gnome/src/mainwindow.c:430 msgid "Confirm" msgstr "Bestätigen" @@ -211,6 +197,13 @@ msgstr "Konto %s : %s" msgid "<i>From</i> %s" msgstr "<i>Von</i> %s" +#: ../sflphone-client-gnome/src/sflnotify.c:94 +#, c-format +msgid "%d voice mail" +msgid_plural "%d voice mails" +msgstr[0] "%d Voice Nachricht" +msgstr[1] "%d Voice Nachricht" + #: ../sflphone-client-gnome/src/sflnotify.c:111 #, c-format msgid "Calling with %s account <i>%s</i>" @@ -258,15 +251,15 @@ msgstr "Lautsprecher Lautstärke" msgid "Mic volume" msgstr "Mikro Lautstärke" -#: ../sflphone-client-gnome/src/statusicon.c:91 +#: ../sflphone-client-gnome/src/statusicon.c:96 msgid "_Show main window" msgstr "_Hauptfenster anzeigen" -#: ../sflphone-client-gnome/src/statusicon.c:126 +#: ../sflphone-client-gnome/src/statusicon.c:131 msgid "SFLphone" msgstr "SFLphone" -#: ../sflphone-client-gnome/src/statusicon.c:127 +#: ../sflphone-client-gnome/src/statusicon.c:132 #, c-format msgid "%i account configured" msgid_plural "%i accounts configured" @@ -274,203 +267,398 @@ msgstr[0] "%i Konto konfiguriert" msgstr[1] "%i Konten konfiguriert" #: ../sflphone-client-gnome/src/toolbar.c:38 -#: ../sflphone-client-gnome/src/uimanager.c:750 +#: ../sflphone-client-gnome/src/uimanager.c:693 +#: ../sflphone-client-gnome/src/uimanager.c:727 msgid "Voicemail" msgstr "Voicemail" -#: ../sflphone-client-gnome/src/uimanager.c:403 +#: ../sflphone-client-gnome/src/uimanager.c:117 +msgid "No address book selected" +msgstr "Adressbuch" + +#: ../sflphone-client-gnome/src/uimanager.c:137 +#: ../sflphone-client-gnome/src/uimanager.c:756 +msgid "Address book" +msgstr "Adressbuch" + +#: ../sflphone-client-gnome/src/uimanager.c:279 +msgid "Voicemail (%i)" +msgstr "Voicemail (%i)" + +#: ../sflphone-client-gnome/src/uimanager.c:342 msgid "SFLphone is a VoIP client compatible with SIP and IAX2 protocols." -msgstr "" -"SFLphone ist ein VoIP Client (kompatibel mit SIP und IAX2 Protokolle)" +msgstr "SFLphone ist ein VoIP Client (kompatibel mit SIP und IAX2 Protokolle)" -#: ../sflphone-client-gnome/src/uimanager.c:406 +#: ../sflphone-client-gnome/src/uimanager.c:345 msgid "About SFLphone" msgstr "Über SFLphone" -#: ../sflphone-client-gnome/src/uimanager.c:1028 +#: ../sflphone-client-gnome/src/uimanager.c:719 +msgid "Call" +msgstr "_Anruf" + +#: ../sflphone-client-gnome/src/uimanager.c:720 +#: ../sflphone-client-gnome/src/uimanager.c:1184 +msgid "_New call" +msgstr "_Neuer Anruf" + +#: ../sflphone-client-gnome/src/uimanager.c:720 +msgid "Place a new call" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:721 +#: ../sflphone-client-gnome/src/uimanager.c:979 msgid "_Pick up" msgstr "_Abnehmen" -#: ../sflphone-client-gnome/src/uimanager.c:1040 -#: ../sflphone-client-gnome/src/uimanager.c:1081 +#: ../sflphone-client-gnome/src/uimanager.c:721 +msgid "Answer the call" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:722 +#: ../sflphone-client-gnome/src/uimanager.c:991 +#: ../sflphone-client-gnome/src/uimanager.c:1032 msgid "_Hang up" msgstr "A_uflegen" -#: ../sflphone-client-gnome/src/uimanager.c:1052 -#: ../sflphone-client-gnome/src/uimanager.c:1093 -msgid "On _Hold" +#: ../sflphone-client-gnome/src/uimanager.c:722 +msgid "Finish the call" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:723 +msgid "O_n hold" msgstr "in _Warteschleife" -#: ../sflphone-client-gnome/src/uimanager.c:1064 +#: ../sflphone-client-gnome/src/uimanager.c:723 +msgid "Place the call on hold" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:724 +msgid "O_ff hold" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:724 +msgid "Place the call off hold" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:725 +#: ../sflphone-client-gnome/src/uimanager.c:1015 msgid "_Record" msgstr "_Gespräch aufzeichnen" -#: ../sflphone-client-gnome/src/uimanager.c:1154 +#: ../sflphone-client-gnome/src/uimanager.c:725 +msgid "Record the current conversation" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:726 +msgid "Configuration _Assistant" +msgstr "Einrichtungsdatei" + +#: ../sflphone-client-gnome/src/uimanager.c:726 +msgid "Run the configuration assistant" +msgstr "Stun: Konfigurationsfehler" + +#: ../sflphone-client-gnome/src/uimanager.c:727 +msgid "Call your voicemail" +msgstr "%d Voice Nachricht" + +#: ../sflphone-client-gnome/src/uimanager.c:728 +msgid "_Close" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:728 +msgid "Minimize to system tray" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:729 +msgid "_Quit" +msgstr "_Editieren" + +#: ../sflphone-client-gnome/src/uimanager.c:729 +msgid "Quit the program" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:732 +msgid "_Edit" +msgstr "_Editieren" + +#: ../sflphone-client-gnome/src/uimanager.c:733 +msgid "_Copy" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:733 +msgid "Copy the selection" +msgstr "Entfernen Sie das ausgewählte Konto" + +#: ../sflphone-client-gnome/src/uimanager.c:734 +msgid "_Paste" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:734 +msgid "Paste the clipboard" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:735 +msgid "Clear _history" +msgstr "Liste der vorherigen Anrufen _leeren" + +#: ../sflphone-client-gnome/src/uimanager.c:735 +msgid "Clear the call history" +msgstr "Vorherigen Anrufen leeren" + +#: ../sflphone-client-gnome/src/uimanager.c:736 +msgid "_Accounts" +msgstr "_Konten" + +#: ../sflphone-client-gnome/src/uimanager.c:736 +msgid "Edit your accounts" +msgstr "Aktuelles Konto" + +#: ../sflphone-client-gnome/src/uimanager.c:737 +msgid "_Preferences" +msgstr "Einstellungen" + +#: ../sflphone-client-gnome/src/uimanager.c:737 +msgid "Change your preferences" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:740 +msgid "_View" +msgstr "_Anzeigen" + +#: ../sflphone-client-gnome/src/uimanager.c:743 +msgid "_Help" +msgstr "_Hilfe" + +#: ../sflphone-client-gnome/src/uimanager.c:744 +msgid "Contents" +msgstr "Weiter" + +#: ../sflphone-client-gnome/src/uimanager.c:744 +msgid "Open the manual" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:745 +msgid "About this application" +msgstr "Authentifizierung" + +#: ../sflphone-client-gnome/src/uimanager.c:751 +msgid "_Transfer" +msgstr "Weiterleiten" + +#: ../sflphone-client-gnome/src/uimanager.c:751 +msgid "Transfer the call" +msgstr "Weiterleiten zu : " + +#: ../sflphone-client-gnome/src/uimanager.c:752 +msgid "_Show toolbar" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:752 +msgid "Show the toolbar" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:753 +msgid "_Dialpad" +msgstr "_Wählscheibe" + +#: ../sflphone-client-gnome/src/uimanager.c:753 +msgid "Show the dialpad" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:754 +msgid "_Volume controls" +msgstr "Lautstärke-Regler anzeigen" + +#: ../sflphone-client-gnome/src/uimanager.c:754 +msgid "Show the volume controls" +msgstr "Lautstärke-Regler anzeigen" + +#: ../sflphone-client-gnome/src/uimanager.c:755 +msgid "_History" +msgstr "Vorherige Anrufe" + +#: ../sflphone-client-gnome/src/uimanager.c:755 +msgid "Calls history" +msgstr "Liste der vorherigen Anrufen" + +#: ../sflphone-client-gnome/src/uimanager.c:756 +msgid "_Address book" +msgstr "Adressbuch" + +#: ../sflphone-client-gnome/src/uimanager.c:1003 +#: ../sflphone-client-gnome/src/uimanager.c:1044 +msgid "On _Hold" +msgstr "in _Warteschleife" + +#: ../sflphone-client-gnome/src/uimanager.c:1107 msgid "_Call back" msgstr "_Zurückrufen" -#: ../sflphone-client-gnome/src/uimanager.c:1226 -msgid "_New call" -msgstr "_Neuer Anruf" - -#: ../sflphone-client-gnome/src/uimanager.c:1300 +#: ../sflphone-client-gnome/src/uimanager.c:1258 msgid "Edit phone number" msgstr "Nummer editieren" -#: ../sflphone-client-gnome/src/uimanager.c:1311 +#: ../sflphone-client-gnome/src/uimanager.c:1269 msgid "Edit the phone number before making a call" msgstr "Nummer vor dem Anruf editieren" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:164 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:180 msgid "Account Parameters" msgstr "Konto parameter" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:173 -#: ../sflphone-client-gnome/src/config/assistant.c:294 -#: ../sflphone-client-gnome/src/config/assistant.c:402 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:189 +#: ../sflphone-client-gnome/src/config/assistant.c:314 +#: ../sflphone-client-gnome/src/config/assistant.c:427 msgid "_Alias" msgstr "_Alias" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:181 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:197 msgid "_Protocol" msgstr "_Protokoll" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:199 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:215 msgid "Unknown" msgstr "Unbekannt" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:209 -#: ../sflphone-client-gnome/src/config/assistant.c:302 -#: ../sflphone-client-gnome/src/config/assistant.c:410 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:225 +#: ../sflphone-client-gnome/src/config/assistant.c:322 +#: ../sflphone-client-gnome/src/config/assistant.c:435 msgid "_Host name" msgstr "_Hostname" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:217 -#: ../sflphone-client-gnome/src/config/assistant.c:310 -#: ../sflphone-client-gnome/src/config/assistant.c:418 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:233 +#: ../sflphone-client-gnome/src/config/assistant.c:330 +#: ../sflphone-client-gnome/src/config/assistant.c:443 msgid "_User name" msgstr "_Benutzername" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:234 -#: ../sflphone-client-gnome/src/config/assistant.c:326 -#: ../sflphone-client-gnome/src/config/assistant.c:433 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:250 +#: ../sflphone-client-gnome/src/config/assistant.c:346 +#: ../sflphone-client-gnome/src/config/assistant.c:458 msgid "_Password" msgstr "_Passwort" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:254 -#: ../sflphone-client-gnome/src/config/assistant.c:344 -#: ../sflphone-client-gnome/src/config/assistant.c:449 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:270 +#: ../sflphone-client-gnome/src/config/assistant.c:363 +#: ../sflphone-client-gnome/src/config/assistant.c:473 +msgid "Show password" +msgstr "Passwort" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:274 +#: ../sflphone-client-gnome/src/config/assistant.c:368 +#: ../sflphone-client-gnome/src/config/assistant.c:478 msgid "_Voicemail number" msgstr "_Voicemail Nummer" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:340 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:361 msgid "Authentication" msgstr "Authentifizierung" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:341 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:362 msgid "Secret" msgstr "Geheim" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:466 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:605 msgid "Credential" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:501 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:640 msgid "Authentication name" msgstr "Authentifizierung Name" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:512 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:651 msgid "Password" msgstr "Passwort" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:535 -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:909 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:201 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:674 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1056 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:321 msgid "Security" msgstr "Sicherheit" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:547 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:213 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:687 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:333 msgid "Use TLS transport (sips)" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:552 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:218 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:693 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:338 msgid "SRTP key exchange" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:558 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:224 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:699 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:344 msgid "Disabled" msgstr "Deaktiviert" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:674 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:795 msgid "Registration" msgstr "Anmeldung" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:679 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:800 msgid "Registration expire" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:687 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:809 msgid "_Comply with RFC 3263" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:693 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:463 -msgid "Network" -msgstr "Netzwerk" +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:816 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:234 +msgid "Network Interface" +msgstr "Kein netzwerk" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:707 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:830 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:249 msgid "Local address" msgstr "Adresse (lokal)" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:744 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:880 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:301 msgid "Local port" msgstr "Port (lokal)" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:752 -msgid "Set published address and port:" +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:893 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:928 +msgid "Published address" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:756 -msgid "Using STUN " +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:899 +msgid "Using STUN" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:761 -msgid "Same as local parameters" +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:906 +msgid "STUN server URL" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:764 -msgid "Manually" -msgstr "Manuell" - -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:769 -msgid "Published address" +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:914 +msgid "Same as local parameters" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:777 -msgid "Published port" +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:917 +msgid "Set published address and port:" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:785 -msgid "STUN server URL" +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:936 +msgid "Published port" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:880 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1027 msgid "Account settings" msgstr "Kontoeinstellungen" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:899 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1046 msgid "Basic" msgstr "Allgemein" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:904 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1051 msgid "Advanced" msgstr "Erweitert" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:169 -msgid "Server returned \"" +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:164 +#, c-format +msgid "Server returned \"%s\" (%d)" msgstr "" #: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:389 @@ -489,32 +677,18 @@ msgstr "Konten" msgid "Configured Accounts" msgstr "Konfigurierten Konten" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:505 -msgid "There " -msgstr "Es " - -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:506 -msgid "is " -msgstr "gibt " - -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:506 -msgid "are " -msgstr "gibt " - -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:508 -msgid " active account" -msgstr " aktive Konten" +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:501 +msgid "There is %d active account" +msgid_plural "There are %d active accounts" +msgstr[0] " aktive Konten" +msgstr[1] " aktive Konten" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:509 -msgid "s" -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:514 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:507 msgid "You have no active account" msgstr "Sie haben kein aktives Konto" #: ../sflphone-client-gnome/src/config/addressbook-config.c:306 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:443 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:556 msgid "General" msgstr "Allgemein" @@ -559,16 +733,16 @@ msgid "Select which Evolution address books to use" msgstr "Adressbücher von Evolution zum verwenden auswählen" #: ../sflphone-client-gnome/src/config/addressbook-config.c:404 -#: ../sflphone-client-gnome/src/config/audioconf.c:578 +#: ../sflphone-client-gnome/src/config/audioconf.c:577 msgid "Name" msgstr "Name" -#: ../sflphone-client-gnome/src/config/assistant.c:69 +#: ../sflphone-client-gnome/src/config/assistant.c:75 #, c-format msgid "This assistant is now finished." msgstr "Assistent beendet." -#: ../sflphone-client-gnome/src/config/assistant.c:71 +#: ../sflphone-client-gnome/src/config/assistant.c:77 msgid "" "You can at any time check your registration state or modify your accounts " "parameters in the Options/Accounts window." @@ -576,213 +750,207 @@ msgstr "" "Sie können jederzeit Ihres Registrierungsstatus überprüfen oder " "IhreKontoparameter ändern (Optionen/Konten)." -#: ../sflphone-client-gnome/src/config/assistant.c:74 +#: ../sflphone-client-gnome/src/config/assistant.c:80 msgid "Alias" msgstr "Alias" -#: ../sflphone-client-gnome/src/config/assistant.c:78 +#: ../sflphone-client-gnome/src/config/assistant.c:84 msgid "Server" msgstr "Server" -#: ../sflphone-client-gnome/src/config/assistant.c:82 +#: ../sflphone-client-gnome/src/config/assistant.c:88 msgid "Username" msgstr "Benutzername" -#: ../sflphone-client-gnome/src/config/assistant.c:86 +#: ../sflphone-client-gnome/src/config/assistant.c:92 msgid "Security: " msgstr "Sicherheit: " -#: ../sflphone-client-gnome/src/config/assistant.c:88 +#: ../sflphone-client-gnome/src/config/assistant.c:94 msgid "SRTP/ZRTP draft-zimmermann" msgstr "SRTP/ZRTP draft-zimmermann" -#: ../sflphone-client-gnome/src/config/assistant.c:90 -#: ../sflphone-client-gnome/src/config/assistant.c:182 +#: ../sflphone-client-gnome/src/config/assistant.c:96 msgid "None" msgstr "Nichts" -#: ../sflphone-client-gnome/src/config/assistant.c:210 +#: ../sflphone-client-gnome/src/config/assistant.c:229 msgid "SFLphone account creation wizard" msgstr "SFLphone Konto (Konfigurationsassistent)" -#: ../sflphone-client-gnome/src/config/assistant.c:236 +#: ../sflphone-client-gnome/src/config/assistant.c:255 msgid "Welcome to the Account creation wizard of SFLphone!" msgstr "Wilkommen zu SFLphone!" -#: ../sflphone-client-gnome/src/config/assistant.c:237 +#: ../sflphone-client-gnome/src/config/assistant.c:256 msgid "This installation wizard will help you configure an account." msgstr "" "The Installationsassistent wird Ihnen helfen, ein Konto zu konfigurieren." -#: ../sflphone-client-gnome/src/config/assistant.c:251 +#: ../sflphone-client-gnome/src/config/assistant.c:270 msgid "VoIP Protocols" msgstr "VoIP Protokoll" -#: ../sflphone-client-gnome/src/config/assistant.c:251 +#: ../sflphone-client-gnome/src/config/assistant.c:270 msgid "Select an account type" msgstr "Kontotyp auswählen" -#: ../sflphone-client-gnome/src/config/assistant.c:253 +#: ../sflphone-client-gnome/src/config/assistant.c:272 msgid "SIP (Session Initiation Protocol)" msgstr "SIP (Session Initiation Protocol)" -#: ../sflphone-client-gnome/src/config/assistant.c:255 +#: ../sflphone-client-gnome/src/config/assistant.c:274 msgid "IAX2 (InterAsterix Exchange)" msgstr "IAX2 (InterAsterisk Exchange)" -#: ../sflphone-client-gnome/src/config/assistant.c:269 +#: ../sflphone-client-gnome/src/config/assistant.c:288 msgid "Account" msgstr "Konto" -#: ../sflphone-client-gnome/src/config/assistant.c:269 +#: ../sflphone-client-gnome/src/config/assistant.c:288 msgid "Please select one of the following options" msgstr "Bitte eine Option auswählen" -#: ../sflphone-client-gnome/src/config/assistant.c:271 +#: ../sflphone-client-gnome/src/config/assistant.c:290 msgid "Create a free SIP/IAX2 account on sflphone.org" msgstr "SIP/IAX2 Konto bei sflphone.org erstellen lassen" -#: ../sflphone-client-gnome/src/config/assistant.c:273 +#: ../sflphone-client-gnome/src/config/assistant.c:292 msgid "Register an existing SIP or IAX2 account" msgstr "Existierendes SIP/IAX2 Konto registrieren" -#: ../sflphone-client-gnome/src/config/assistant.c:286 +#: ../sflphone-client-gnome/src/config/assistant.c:306 msgid "SIP account settings" msgstr "Konfiguration des SIP Konto" -#: ../sflphone-client-gnome/src/config/assistant.c:286 -#: ../sflphone-client-gnome/src/config/assistant.c:394 +#: ../sflphone-client-gnome/src/config/assistant.c:306 +#: ../sflphone-client-gnome/src/config/assistant.c:419 msgid "Please fill the following information" msgstr "Folgende Informationen bitte ausfühlen" -#: ../sflphone-client-gnome/src/config/assistant.c:352 -#: ../sflphone-client-gnome/src/config/assistant.c:381 +#: ../sflphone-client-gnome/src/config/assistant.c:376 +#: ../sflphone-client-gnome/src/config/assistant.c:405 msgid "Secure communications with _ZRTP" msgstr "Sichere Kommunikation mit _ZRTP" -#: ../sflphone-client-gnome/src/config/assistant.c:365 +#: ../sflphone-client-gnome/src/config/assistant.c:389 msgid "Optional email address" msgstr "Fakultative E-mail-Adresse" -#: ../sflphone-client-gnome/src/config/assistant.c:365 +#: ../sflphone-client-gnome/src/config/assistant.c:389 msgid "This email address will be used to send your voicemail messages." msgstr "" "Diese E-mail-Adresse wird benutzt, um Ihnen voicemail Meldungen zu schicken." -#: ../sflphone-client-gnome/src/config/assistant.c:373 +#: ../sflphone-client-gnome/src/config/assistant.c:397 msgid "_Email address" msgstr "_Email" -#: ../sflphone-client-gnome/src/config/assistant.c:394 +#: ../sflphone-client-gnome/src/config/assistant.c:419 msgid "IAX2 account settings" msgstr "Konfiguration des IAX2 Konto" -#: ../sflphone-client-gnome/src/config/assistant.c:467 +#: ../sflphone-client-gnome/src/config/assistant.c:496 msgid "Network Address Translation (NAT)" msgstr "Network Address Translation (NAT)" -#: ../sflphone-client-gnome/src/config/assistant.c:467 +#: ../sflphone-client-gnome/src/config/assistant.c:496 msgid "You should probably enable this if you are behind a firewall." -msgstr "" -"Sie sollten dieses einschalten, falls Sie hinter einer Firewall sind." +msgstr "Sie sollten dieses einschalten, falls Sie hinter einer Firewall sind." -#: ../sflphone-client-gnome/src/config/assistant.c:476 +#: ../sflphone-client-gnome/src/config/assistant.c:505 msgid "E_nable STUN" msgstr "STUN Ei_nschalten" -#: ../sflphone-client-gnome/src/config/assistant.c:483 +#: ../sflphone-client-gnome/src/config/assistant.c:512 msgid "_STUN server" msgstr "_STUN Server" -#: ../sflphone-client-gnome/src/config/assistant.c:497 +#: ../sflphone-client-gnome/src/config/assistant.c:526 msgid "Account Registration" msgstr "Konto Registrierung" -#: ../sflphone-client-gnome/src/config/assistant.c:497 +#: ../sflphone-client-gnome/src/config/assistant.c:526 msgid "Congratulations!" msgstr "Gratulation!" -#: ../sflphone-client-gnome/src/config/audioconf.c:583 +#: ../sflphone-client-gnome/src/config/audioconf.c:582 msgid "Frequency" msgstr "Frequenz" -#: ../sflphone-client-gnome/src/config/audioconf.c:588 +#: ../sflphone-client-gnome/src/config/audioconf.c:587 msgid "Bitrate" msgstr "Bitrate" -#: ../sflphone-client-gnome/src/config/audioconf.c:593 +#: ../sflphone-client-gnome/src/config/audioconf.c:592 msgid "Bandwidth" msgstr "Bandbreite" -#: ../sflphone-client-gnome/src/config/audioconf.c:673 +#: ../sflphone-client-gnome/src/config/audioconf.c:670 msgid "ALSA plugin" msgstr "ALSA Plugin" -#: ../sflphone-client-gnome/src/config/audioconf.c:695 +#: ../sflphone-client-gnome/src/config/audioconf.c:692 msgid "Output" msgstr "Ausgabe" -#: ../sflphone-client-gnome/src/config/audioconf.c:717 +#: ../sflphone-client-gnome/src/config/audioconf.c:714 msgid "Input" msgstr "Eingabe" -#: ../sflphone-client-gnome/src/config/audioconf.c:752 +#: ../sflphone-client-gnome/src/config/audioconf.c:749 msgid "_Voice Activity Detection" msgstr "\"Voice Activity\" Erkennung" -#: ../sflphone-client-gnome/src/config/audioconf.c:762 +#: ../sflphone-client-gnome/src/config/audioconf.c:759 msgid "_Noise Reduction (Narrow-Band Companding)" msgstr "_Geräuschreduzierung (Narrow-Band Companding)" -#: ../sflphone-client-gnome/src/config/audioconf.c:798 +#: ../sflphone-client-gnome/src/config/audioconf.c:800 msgid "Sound Manager" msgstr "Sound Manager" -#: ../sflphone-client-gnome/src/config/audioconf.c:807 +#: ../sflphone-client-gnome/src/config/audioconf.c:809 msgid "_Pulseaudio" msgstr "Pulseaudio" -#: ../sflphone-client-gnome/src/config/audioconf.c:811 +#: ../sflphone-client-gnome/src/config/audioconf.c:813 msgid "_ALSA" msgstr "ALSA" -#: ../sflphone-client-gnome/src/config/audioconf.c:816 -msgid "_Mute other applications during a call" -msgstr "_Während eines Anrufs andere Anwendungen stumm schalten" - -#: ../sflphone-client-gnome/src/config/audioconf.c:823 +#: ../sflphone-client-gnome/src/config/audioconf.c:819 msgid "ALSA settings" msgstr "ALSA Konfiguration" -#: ../sflphone-client-gnome/src/config/audioconf.c:840 +#: ../sflphone-client-gnome/src/config/audioconf.c:836 msgid "Codecs" msgstr "Codecs" -#: ../sflphone-client-gnome/src/config/audioconf.c:869 +#: ../sflphone-client-gnome/src/config/audioconf.c:865 msgid "Recordings" msgstr "Aufnahmen" -#: ../sflphone-client-gnome/src/config/audioconf.c:873 +#: ../sflphone-client-gnome/src/config/audioconf.c:869 msgid "Destination folder" msgstr "Zielverzeichnis" -#: ../sflphone-client-gnome/src/config/audioconf.c:877 +#: ../sflphone-client-gnome/src/config/audioconf.c:873 msgid "Select a folder" msgstr "Verzeichnis auswählen" -#: ../sflphone-client-gnome/src/config/audioconf.c:883 +#: ../sflphone-client-gnome/src/config/audioconf.c:879 msgid "Ringtones" msgstr "Klingeltöne" -#: ../sflphone-client-gnome/src/config/audioconf.c:889 +#: ../sflphone-client-gnome/src/config/audioconf.c:885 msgid "_Enable ringtones" msgstr "Klingeltöne _einschalten" -#: ../sflphone-client-gnome/src/config/audioconf.c:895 +#: ../sflphone-client-gnome/src/config/audioconf.c:891 msgid "Choose a ringtone" msgstr "Klingelton auswählen" -#: ../sflphone-client-gnome/src/config/audioconf.c:901 +#: ../sflphone-client-gnome/src/config/audioconf.c:897 msgid "Audio Files" msgstr "Audio Dateien" @@ -819,86 +987,66 @@ msgstr "Telefonnummer umformen" msgid "_Prefix dialed numbers with" msgstr "_Präfix vor Nummern einfügen" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:195 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:225 msgid "" "This profile is used when you want to reach a remote peer simply by typing a " "sip URI such as <b>sip:remotepeer</b>. The settings you define here will " "also be used if no account can be matched to an incoming or outgoing call." msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:274 -msgid "SIP Port" -msgstr "SIP Port" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:281 -msgid "UDP Transport" -msgstr "UDP Transport" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:319 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:440 msgid "Desktop Notifications" msgstr "Desktopbenachrichtigungen" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:323 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:444 msgid "_Enable notifications" msgstr "Benachrichtigungen _einschalten" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:329 -msgid "Enable voicemail _notifications" -msgstr "_Benachrichtigung für Voice Nachrichten" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:341 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:450 msgid "System Tray Icon" msgstr "Benachrichtigungsfeld (\"System Tray\") Icon" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:344 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:453 msgid "_Popup main window on incoming call" msgstr "Hauptfenster anzeigen wenn eingehendes Gespräch" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:349 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:457 msgid "Ne_ver popup main window" msgstr "_Hauptfenster nie anzeigen" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:353 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:463 msgid "Hide SFLphone window on _startup" msgstr "_Unsichtbar beim Start" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:359 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:469 msgid "Calls History" msgstr "Liste der vorherigen Anrufen" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:362 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:472 msgid "_Keep my history for at least" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:373 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:483 msgid "days" msgstr "Tage" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:377 -msgid "Configuration File" -msgstr "Einrichtungsdatei" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:379 -msgid "Store SIP credentials as MD5 hash" -msgstr "" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:423 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:536 msgid "Preferences" msgstr "Einstellungen" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:448 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:561 msgid "Audio" msgstr "Audio" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:453 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:566 msgid "Address Book" msgstr "Adressbuch" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:458 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:571 msgid "Hooks" msgstr "Hooks" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:468 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:581 msgid "Direct IP calls" msgstr "" @@ -906,11 +1054,11 @@ msgstr "" msgid "Advanced options for TLS" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:55 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:56 msgid "TLS transport" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:59 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:60 msgid "" "TLS transport can be used along with UDP for those calls that would\n" "require secure sip transactions (aka SIPS). You can configure a different\n" @@ -919,55 +1067,55 @@ msgid "" "port, different one from each other\n" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:100 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:103 msgid "Certificate of Authority list" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:104 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:107 msgid "Choose a CA list file (optional)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:115 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:131 msgid "Public endpoint certificate file" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:119 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:135 msgid "Choose a public endpoint certificate (optional)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:134 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:159 msgid "Choose a private key file (optional)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:145 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:181 msgid "Password for the private key" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:168 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:204 msgid "TLS protocol method" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:202 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:238 msgid "TLS cipher list" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:211 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:247 msgid "Server name instance for outgoing TLS connection" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:219 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:255 msgid "Negotiation timeout (sec:msec)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:236 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:272 msgid "Verify incoming certificates, as a server" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:242 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:278 msgid "Verify certificates from answer, as a client" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:248 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:284 msgid "Require certificate for incoming tls connections" msgstr "" @@ -975,45 +1123,78 @@ msgstr "" msgid "ZRTP Options" msgstr "ZRTP Optionen" -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:68 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:69 msgid "Send Hello Hash in S_DP" msgstr "" -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:74 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:75 msgid "Ask User to Confirm SAS" msgstr "" -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:80 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:81 msgid "_Warn if ZRTP not supported" msgstr "_Warnung wenn ZRTP nicht unterstüzt" -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:86 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:87 msgid "Display SAS once for hold events" msgstr "" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:56 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:58 msgid "Search all" msgstr "Suche alle" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:57 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:70 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:82 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:94 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:59 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:72 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:84 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:96 msgid "Click here to change the search type" msgstr "Klicken Sie hier, um Suchtyp zu wechseln" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:69 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:71 msgid "Search by missed call" msgstr "Suche nach Anruf in Abwesenheit" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:81 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:83 msgid "Search by incoming call" msgstr "Suche nach eingehenden Anruf" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:93 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:95 msgid "Search by outgoing call" msgstr "Suche nach ausgehenden Anru" +#~ msgid "IP call - %s" +#~ msgstr "IP Anruf - %s" + +#~ msgid "Codec" +#~ msgstr "Codec" + +#~ msgid "Network" +#~ msgstr "Netzwerk" + +#~ msgid "Manually" +#~ msgstr "Manuell" + +#~ msgid "There " +#~ msgstr "Es " + +#~ msgid "is " +#~ msgstr "gibt " + +#~ msgid "are " +#~ msgstr "gibt " + +#~ msgid "_Mute other applications during a call" +#~ msgstr "_Während eines Anrufs andere Anwendungen stumm schalten" + +#~ msgid "SIP Port" +#~ msgstr "SIP Port" + +#~ msgid "UDP Transport" +#~ msgstr "UDP Transport" + +#~ msgid "Enable voicemail _notifications" +#~ msgstr "_Benachrichtigung für Voice Nachrichten" + #~ msgctxt "account state" #~ msgid "Error" #~ msgstr "Fehler" @@ -1050,9 +1231,6 @@ msgstr "Suche nach ausgehenden Anru" #~ msgid "Default account" #~ msgstr "Default Konto" -#~ msgid "Transfer to : " -#~ msgstr "Weiterleiten zu : " - #~ msgid "SFLphone KDE Client" #~ msgstr "SFLphone KDE Client" @@ -1077,12 +1255,6 @@ msgstr "Suche nach ausgehenden Anru" #~ msgid "Main screen" #~ msgstr "Hauptbildschirm" -#~ msgid "Call history" -#~ msgstr "Liste der vorherigen Anrufen" - -#~ msgid "Address book" -#~ msgstr "Adressbuch" - #~ msgid "Edit before call" #~ msgstr "Vor Aufruf bearbeiten" @@ -1095,9 +1267,6 @@ msgstr "Suche nach ausgehenden Anru" #~ msgid "Hold on" #~ msgstr "In Warteschleife" -#~ msgid "Transfer" -#~ msgstr "Weiterleiten" - #~ msgid "Record" #~ msgstr "Gespräch aufzeichnen" @@ -1116,22 +1285,19 @@ msgstr "Suche nach ausgehenden Anru" #~ msgid "" #~ "By default, when you place a call, sflphone will use the first account in " #~ "this list which is \"registered\". Change the order of the accounts using " -#~ "the \"Up\" and \"Down\" arrows. Enable/disable them by checking/unchecking " -#~ "them on the left of the item. Add or remove some with \"Plus\" and \"Sub\" " -#~ "buttons. Edit the selected account with the form on the right." +#~ "the \"Up\" and \"Down\" arrows. Enable/disable them by checking/" +#~ "unchecking them on the left of the item. Add or remove some with \"Plus\" " +#~ "and \"Sub\" buttons. Edit the selected account with the form on the right." #~ msgstr "" -#~ "Sflphone verwendet das erste \"registrierte\" Konto in der Liste, wenn Sie " -#~ "anrufen. Benutzen Sie die Pfeile, um die Anordnung der Kontos zu ändern. Mit " -#~ "\"Plus\" und \"Minus\" können Sie ein Konto anlegen bzgl. entfernen. Mit " -#~ "\"Editieren\" können Sie ein Konto bearbeiten." - -#~ msgid "Remove the selected account" -#~ msgstr "Entfernen Sie das ausgewählte Konto" +#~ "Sflphone verwendet das erste \"registrierte\" Konto in der Liste, wenn " +#~ "Sie anrufen. Benutzen Sie die Pfeile, um die Anordnung der Kontos zu " +#~ "ändern. Mit \"Plus\" und \"Minus\" können Sie ein Konto anlegen bzgl. " +#~ "entfernen. Mit \"Editieren\" können Sie ein Konto bearbeiten." #~ msgid "" -#~ "This button will remove the selected account in the list below. Be sure you " -#~ "really don't need it anymore. If you think you might use it again later, " -#~ "just uncheck it." +#~ "This button will remove the selected account in the list below. Be sure " +#~ "you really don't need it anymore. If you think you might use it again " +#~ "later, just uncheck it." #~ msgstr "" #~ "Diese Aktion entfernt das ausgewählte Konto aus der Liste. Stellen Sie " #~ "sicher, dass Sie es wirklich nicht mehr brauchen." @@ -1153,8 +1319,9 @@ msgstr "Suche nach ausgehenden Anru" #~ "this list which is \"registered\". Change the order of the accounts using " #~ "the \"Up\" and \"Down\" arrows." #~ msgstr "" -#~ "Sflphone verwendet das erste \"registrierte\" Konto in der Liste, wenn Sie " -#~ "anrufen. Benutzen Sie die Pfeile, um die Anordnung der Kontos zu ändern." +#~ "Sflphone verwendet das erste \"registrierte\" Konto in der Liste, wenn " +#~ "Sie anrufen. Benutzen Sie die Pfeile, um die Anordnung der Kontos zu " +#~ "ändern." #~ msgid "Down" #~ msgstr "Unten" @@ -1240,9 +1407,6 @@ msgstr "Suche nach ausgehenden Anru" #~ msgid "On start" #~ msgstr "Beim Start" -#~ msgid "Clear history" -#~ msgstr "Vorherigen Anrufen leeren" - #~ msgid "Connection" #~ msgstr "Anbindung" @@ -1258,15 +1422,9 @@ msgstr "Suche nach ausgehenden Anru" #~ msgid "Prefix dialed numbers with" #~ msgstr "Präfix vor Nummern einfügen" -#~ msgid "History" -#~ msgstr "Vorherige Anrufe" - #~ msgid "Configure SFLphone" #~ msgstr "Konfigurieren SFLphone" -#~ msgid "Display volume controls" -#~ msgstr "Lautstärke-Regler anzeigen" - #~ msgid "Display dialpad" #~ msgstr "Wählscheibe anzeigen" @@ -1277,27 +1435,6 @@ msgstr "Suche nach ausgehenden Anru" #~ msgid "Attention:number of results exceeds max displayed." #~ msgstr "Warnung: Anzahl Resultate überschreit definiertes Maximum" -#~ msgid "_Help" -#~ msgstr "_Hilfe" - -#~ msgid "_Call" -#~ msgstr "_Anruf" - -#~ msgid "Clear _history" -#~ msgstr "Liste der vorherigen Anrufen _leeren" - -#~ msgid "_Accounts" -#~ msgstr "_Konten" - -#~ msgid "_Edit" -#~ msgstr "_Editieren" - -#~ msgid "_Dialpad" -#~ msgstr "_Wählscheibe" - -#~ msgid "_View" -#~ msgstr "_Anzeigen" - #~ msgid "%s - %s" #~ msgstr "%s - %s" @@ -1313,12 +1450,11 @@ msgstr "Suche nach ausgehenden Anru" #~ msgctxt "NAME OF TRANSLATORS" #~ msgid "Your names" #~ msgstr "" -#~ "Ihre Namen, ,Launchpad Contributions:,Maxime Chambreuil,Sven Werlen, " -#~ ",Launchpad Contributions:,Maxime Chambreuil,Sven Werlen,Sven Werlen" +#~ "Ihre Namen, ,Launchpad Contributions:,Maxime Chambreuil,Sven Werlen, ," +#~ "Launchpad Contributions:,Maxime Chambreuil,Sven Werlen,Sven Werlen" #~ msgctxt "EMAIL OF TRANSLATORS" #~ msgid "Your emails" #~ msgstr "" -#~ "Ihre E-Mail-" -#~ "Adressen,,,maxime.chambreuil@gmail.com,,,,maxime.chambreuil@gmail.com,,sven.w" -#~ "erlen@gmail.com" +#~ "Ihre E-Mail-Adressen,,,maxime.chambreuil@gmail.com,,,,maxime." +#~ "chambreuil@gmail.com,,sven.werlen@gmail.com" diff --git a/lang/es/es.po b/lang/es/es.po index e05252337d..a40c09ce90 100644 --- a/lang/es/es.po +++ b/lang/es/es.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: SFLphone 0.9.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-10-14 11:18-0400\n" +"POT-Creation-Date: 2009-12-03 10:22-0500\n" "PO-Revision-Date: 2009-10-26 20:46+0000\n" "Last-Translator: Maxime Chambreuil <maxime.chambreuil@gmail.com>\n" "Language-Team: SavoirFaireLinux Inc <sflphoneteam@savoirfairelinux.com>\n" @@ -62,25 +62,15 @@ msgstr "Servidor stun inválido" msgid "Invalid" msgstr "Inválido" -#: ../sflphone-client-gnome/src/actions.c:54 -#: ../sflphone-client-gnome/src/sflnotify.c:94 -#, c-format -msgid "%d voice mail" -msgid_plural "%d voice mails" -msgstr[0] "%d mensaje de voz" -msgstr[1] "%d mensajes de voz" - -#: ../sflphone-client-gnome/src/actions.c:83 -#: ../sflphone-client-gnome/src/actions.c:919 -#: ../sflphone-client-gnome/src/actions.c:926 +#: ../sflphone-client-gnome/src/actions.c:98 msgid "Using account" msgstr "Usando la cuenta" -#: ../sflphone-client-gnome/src/actions.c:89 +#: ../sflphone-client-gnome/src/actions.c:104 msgid "No registered accounts" msgstr "Ninguna cuenta registrada" -#: ../sflphone-client-gnome/src/actions.c:268 +#: ../sflphone-client-gnome/src/actions.c:285 msgid "" "Unable to connect to the SFLphone server.\n" "Make sure the daemon is running." @@ -88,22 +78,18 @@ msgstr "" "Incapaz de conectar con el servidor SFLphone.\n" " Asegúrese que el demonio esté funcionando." -#: ../sflphone-client-gnome/src/actions.c:913 -#, c-format -msgid "IP call - %s" -msgstr "Llamada IP - %s" - -#: ../sflphone-client-gnome/src/actions.c:922 -msgid "Codec" -msgstr "Códec" +#: ../sflphone-client-gnome/src/actions.c:589 +#: ../sflphone-client-gnome/src/actions.c:911 +msgid "Direct SIP call" +msgstr "Llamadas IP directas" -#: ../sflphone-client-gnome/src/actions.c:1119 +#: ../sflphone-client-gnome/src/actions.c:1103 #, c-format msgid "" "<b>Error: No audio codecs found.\n" "\n" -"</b> SFL audio codecs have to be placed in <i>%s</i> or in the " -"<b>.sflphone</b> directory in your home( <i>%s</i> )" +"</b> SFL audio codecs have to be placed in <i>%s</i> or in the <b>.sflphone</" +"b> directory in your home( <i>%s</i> )" msgstr "" "<b>Error: Codecs de audio no encontrados.\n" "\n" @@ -152,31 +138,31 @@ msgstr "Hay llamadas en curso." msgid "Do you still want to quit?" msgstr "Aún quiere salir ?" -#: ../sflphone-client-gnome/src/mainwindow.c:299 +#: ../sflphone-client-gnome/src/mainwindow.c:298 msgid "SFLphone Error" msgstr "Error SFLphone" -#: ../sflphone-client-gnome/src/mainwindow.c:391 +#: ../sflphone-client-gnome/src/mainwindow.c:392 #, c-format msgid "ZRTP is not supported by peer %s\n" msgstr "ZRTP no es compatible con %s\n" -#: ../sflphone-client-gnome/src/mainwindow.c:392 +#: ../sflphone-client-gnome/src/mainwindow.c:393 msgid "Secure Communication Unavailable" msgstr "Comunicación segura no disponible" -#: ../sflphone-client-gnome/src/mainwindow.c:393 -#: ../sflphone-client-gnome/src/mainwindow.c:415 +#: ../sflphone-client-gnome/src/mainwindow.c:394 +#: ../sflphone-client-gnome/src/mainwindow.c:416 msgid "Continue" msgstr "Seguir" -#: ../sflphone-client-gnome/src/mainwindow.c:394 -#: ../sflphone-client-gnome/src/mainwindow.c:416 -#: ../sflphone-client-gnome/src/mainwindow.c:430 +#: ../sflphone-client-gnome/src/mainwindow.c:395 +#: ../sflphone-client-gnome/src/mainwindow.c:417 +#: ../sflphone-client-gnome/src/mainwindow.c:431 msgid "Stop Call" msgstr "Terminar llamada" -#: ../sflphone-client-gnome/src/mainwindow.c:413 +#: ../sflphone-client-gnome/src/mainwindow.c:414 #, c-format msgid "" "A %s error forced the call with %s to fall under unencrypted mode.\n" @@ -185,11 +171,11 @@ msgstr "" "Un error de %s obliga la llamada con %s a caer bajo un modo decifrado.\n" "Razón exacta: %s\n" -#: ../sflphone-client-gnome/src/mainwindow.c:414 +#: ../sflphone-client-gnome/src/mainwindow.c:415 msgid "ZRTP negotiation failed" msgstr "Negociación ZRTP fracasada" -#: ../sflphone-client-gnome/src/mainwindow.c:427 +#: ../sflphone-client-gnome/src/mainwindow.c:428 #, c-format msgid "" "%s wants to stop using secure communication. Confirm will resume " @@ -198,11 +184,11 @@ msgstr "" "%s quiere parar la comunicación segura. Confirmar reanudará la conversación " "sin SRTP.\n" -#: ../sflphone-client-gnome/src/mainwindow.c:428 +#: ../sflphone-client-gnome/src/mainwindow.c:429 msgid "Confirm Go Clear" msgstr "Confirmar" -#: ../sflphone-client-gnome/src/mainwindow.c:429 +#: ../sflphone-client-gnome/src/mainwindow.c:430 msgid "Confirm" msgstr "Confirmar" @@ -217,6 +203,13 @@ msgstr "%s cuenta : %s" msgid "<i>From</i> %s" msgstr "<i>De</i> %s" +#: ../sflphone-client-gnome/src/sflnotify.c:94 +#, c-format +msgid "%d voice mail" +msgid_plural "%d voice mails" +msgstr[0] "%d mensaje de voz" +msgstr[1] "%d mensajes de voz" + #: ../sflphone-client-gnome/src/sflnotify.c:111 #, c-format msgid "Calling with %s account <i>%s</i>" @@ -266,15 +259,15 @@ msgstr "Volumen de altavoces" msgid "Mic volume" msgstr "Volumen del micrófono" -#: ../sflphone-client-gnome/src/statusicon.c:91 +#: ../sflphone-client-gnome/src/statusicon.c:96 msgid "_Show main window" msgstr "Mostrar ventana principal" -#: ../sflphone-client-gnome/src/statusicon.c:126 +#: ../sflphone-client-gnome/src/statusicon.c:131 msgid "SFLphone" msgstr "SFLphone" -#: ../sflphone-client-gnome/src/statusicon.c:127 +#: ../sflphone-client-gnome/src/statusicon.c:132 #, c-format msgid "%i account configured" msgid_plural "%i accounts configured" @@ -282,203 +275,397 @@ msgstr[0] "%i cuenta configurada" msgstr[1] "%i cuentas configuradas" #: ../sflphone-client-gnome/src/toolbar.c:38 -#: ../sflphone-client-gnome/src/uimanager.c:750 +#: ../sflphone-client-gnome/src/uimanager.c:693 +#: ../sflphone-client-gnome/src/uimanager.c:727 msgid "Voicemail" msgstr "Mensaje de voz" -#: ../sflphone-client-gnome/src/uimanager.c:403 +#: ../sflphone-client-gnome/src/uimanager.c:117 +msgid "No address book selected" +msgstr "Libreta de contactos" + +#: ../sflphone-client-gnome/src/uimanager.c:137 +#: ../sflphone-client-gnome/src/uimanager.c:756 +msgid "Address book" +msgstr "Libreta de contactos" + +#: ../sflphone-client-gnome/src/uimanager.c:279 +msgid "Voicemail (%i)" +msgstr "Mensaje de voz (%i)" + +#: ../sflphone-client-gnome/src/uimanager.c:342 msgid "SFLphone is a VoIP client compatible with SIP and IAX2 protocols." -msgstr "" -"SFLphone es un teléfono VoIP compatible con los protocolos SIP y IAX2" +msgstr "SFLphone es un teléfono VoIP compatible con los protocolos SIP y IAX2" -#: ../sflphone-client-gnome/src/uimanager.c:406 +#: ../sflphone-client-gnome/src/uimanager.c:345 msgid "About SFLphone" msgstr "Sobre SFLphone" -#: ../sflphone-client-gnome/src/uimanager.c:1028 +#: ../sflphone-client-gnome/src/uimanager.c:719 +msgid "Call" +msgstr "_Llamar" + +#: ../sflphone-client-gnome/src/uimanager.c:720 +#: ../sflphone-client-gnome/src/uimanager.c:1184 +msgid "_New call" +msgstr "_Nueva llamada" + +#: ../sflphone-client-gnome/src/uimanager.c:720 +msgid "Place a new call" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:721 +#: ../sflphone-client-gnome/src/uimanager.c:979 msgid "_Pick up" msgstr "_Descolgar" -#: ../sflphone-client-gnome/src/uimanager.c:1040 -#: ../sflphone-client-gnome/src/uimanager.c:1081 +#: ../sflphone-client-gnome/src/uimanager.c:721 +msgid "Answer the call" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:722 +#: ../sflphone-client-gnome/src/uimanager.c:991 +#: ../sflphone-client-gnome/src/uimanager.c:1032 msgid "_Hang up" msgstr "_Colgar" -#: ../sflphone-client-gnome/src/uimanager.c:1052 -#: ../sflphone-client-gnome/src/uimanager.c:1093 -msgid "On _Hold" +#: ../sflphone-client-gnome/src/uimanager.c:722 +msgid "Finish the call" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:723 +msgid "O_n hold" msgstr "En _Espera" -#: ../sflphone-client-gnome/src/uimanager.c:1064 +#: ../sflphone-client-gnome/src/uimanager.c:723 +msgid "Place the call on hold" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:724 +msgid "O_ff hold" +msgstr "Seguir" + +#: ../sflphone-client-gnome/src/uimanager.c:724 +msgid "Place the call off hold" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:725 +#: ../sflphone-client-gnome/src/uimanager.c:1015 msgid "_Record" msgstr "G_rabar" -#: ../sflphone-client-gnome/src/uimanager.c:1154 +#: ../sflphone-client-gnome/src/uimanager.c:725 +msgid "Record the current conversation" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:726 +msgid "Configuration _Assistant" +msgstr "Archivo de configuración" + +#: ../sflphone-client-gnome/src/uimanager.c:726 +msgid "Run the configuration assistant" +msgstr "Error de configuración Stun" + +#: ../sflphone-client-gnome/src/uimanager.c:727 +msgid "Call your voicemail" +msgstr "%d mensaje de voz" + +#: ../sflphone-client-gnome/src/uimanager.c:728 +msgid "_Close" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:728 +msgid "Minimize to system tray" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:729 +msgid "_Quit" +msgstr "_Editar" + +#: ../sflphone-client-gnome/src/uimanager.c:729 +msgid "Quit the program" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:732 +msgid "_Edit" +msgstr "_Editar" + +#: ../sflphone-client-gnome/src/uimanager.c:733 +msgid "_Copy" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:733 +msgid "Copy the selection" +msgstr "Eliminar la cuenta seleccionada" + +#: ../sflphone-client-gnome/src/uimanager.c:734 +msgid "_Paste" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:734 +msgid "Paste the clipboard" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:735 +msgid "Clear _history" +msgstr "_Limpiar historial" + +#: ../sflphone-client-gnome/src/uimanager.c:735 +msgid "Clear the call history" +msgstr "Limpiar historial" + +#: ../sflphone-client-gnome/src/uimanager.c:736 +msgid "_Accounts" +msgstr "_Cuentas" + +#: ../sflphone-client-gnome/src/uimanager.c:736 +msgid "Edit your accounts" +msgstr "Cuenta actual" + +#: ../sflphone-client-gnome/src/uimanager.c:737 +msgid "_Preferences" +msgstr "Preferencias" + +#: ../sflphone-client-gnome/src/uimanager.c:737 +msgid "Change your preferences" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:740 +msgid "_View" +msgstr "_Ver" + +#: ../sflphone-client-gnome/src/uimanager.c:743 +msgid "_Help" +msgstr "_Ayuda" + +#: ../sflphone-client-gnome/src/uimanager.c:744 +msgid "Contents" +msgstr "Seguir" + +#: ../sflphone-client-gnome/src/uimanager.c:744 +msgid "Open the manual" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:745 +msgid "About this application" +msgstr "Autentificación" + +#: ../sflphone-client-gnome/src/uimanager.c:751 +msgid "_Transfer" +msgstr "Transferir" + +#: ../sflphone-client-gnome/src/uimanager.c:751 +msgid "Transfer the call" +msgstr "Transferir a : " + +#: ../sflphone-client-gnome/src/uimanager.c:752 +msgid "_Show toolbar" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:752 +msgid "Show the toolbar" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:753 +msgid "_Dialpad" +msgstr "Desactivado" + +#: ../sflphone-client-gnome/src/uimanager.c:753 +msgid "Show the dialpad" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:754 +msgid "_Volume controls" +msgstr "_Controles de volumen" + +#: ../sflphone-client-gnome/src/uimanager.c:754 +msgid "Show the volume controls" +msgstr "_Controles de volumen" + +#: ../sflphone-client-gnome/src/uimanager.c:755 +msgid "_History" +msgstr "Historia de Llamada" + +#: ../sflphone-client-gnome/src/uimanager.c:755 +msgid "Calls history" +msgstr "Historia de Llamada" + +#: ../sflphone-client-gnome/src/uimanager.c:756 +msgid "_Address book" +msgstr "Libreta de contactos" + +#: ../sflphone-client-gnome/src/uimanager.c:1003 +#: ../sflphone-client-gnome/src/uimanager.c:1044 +msgid "On _Hold" +msgstr "En _Espera" + +#: ../sflphone-client-gnome/src/uimanager.c:1107 msgid "_Call back" msgstr "_Llamar" -#: ../sflphone-client-gnome/src/uimanager.c:1226 -msgid "_New call" -msgstr "_Nueva llamada" - -#: ../sflphone-client-gnome/src/uimanager.c:1300 +#: ../sflphone-client-gnome/src/uimanager.c:1258 msgid "Edit phone number" msgstr "Editar número de teléfono" -#: ../sflphone-client-gnome/src/uimanager.c:1311 +#: ../sflphone-client-gnome/src/uimanager.c:1269 msgid "Edit the phone number before making a call" msgstr "Editar el número de teléfono antes de llamar" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:164 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:180 msgid "Account Parameters" msgstr "Parámetros de cuenta" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:173 -#: ../sflphone-client-gnome/src/config/assistant.c:294 -#: ../sflphone-client-gnome/src/config/assistant.c:402 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:189 +#: ../sflphone-client-gnome/src/config/assistant.c:314 +#: ../sflphone-client-gnome/src/config/assistant.c:427 msgid "_Alias" msgstr "_Alias" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:181 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:197 msgid "_Protocol" msgstr "_Protocolo" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:199 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:215 msgid "Unknown" msgstr "Desconocido" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:209 -#: ../sflphone-client-gnome/src/config/assistant.c:302 -#: ../sflphone-client-gnome/src/config/assistant.c:410 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:225 +#: ../sflphone-client-gnome/src/config/assistant.c:322 +#: ../sflphone-client-gnome/src/config/assistant.c:435 msgid "_Host name" msgstr "_Nombre de equipo" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:217 -#: ../sflphone-client-gnome/src/config/assistant.c:310 -#: ../sflphone-client-gnome/src/config/assistant.c:418 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:233 +#: ../sflphone-client-gnome/src/config/assistant.c:330 +#: ../sflphone-client-gnome/src/config/assistant.c:443 msgid "_User name" msgstr "_Usuario" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:234 -#: ../sflphone-client-gnome/src/config/assistant.c:326 -#: ../sflphone-client-gnome/src/config/assistant.c:433 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:250 +#: ../sflphone-client-gnome/src/config/assistant.c:346 +#: ../sflphone-client-gnome/src/config/assistant.c:458 msgid "_Password" msgstr "_Contraseña" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:254 -#: ../sflphone-client-gnome/src/config/assistant.c:344 -#: ../sflphone-client-gnome/src/config/assistant.c:449 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:270 +#: ../sflphone-client-gnome/src/config/assistant.c:363 +#: ../sflphone-client-gnome/src/config/assistant.c:473 +msgid "Show password" +msgstr "Contraseña" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:274 +#: ../sflphone-client-gnome/src/config/assistant.c:368 +#: ../sflphone-client-gnome/src/config/assistant.c:478 msgid "_Voicemail number" msgstr "_Número de buzón de voz" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:340 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:361 msgid "Authentication" msgstr "Autentificación" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:341 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:362 msgid "Secret" msgstr "Secreto" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:466 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:605 msgid "Credential" msgstr "Informaciónes" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:501 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:640 msgid "Authentication name" msgstr "Nombre de autentificación" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:512 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:651 msgid "Password" msgstr "Contraseña" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:535 -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:909 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:201 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:674 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1056 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:321 msgid "Security" msgstr "Seguridad" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:547 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:213 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:687 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:333 msgid "Use TLS transport (sips)" msgstr "Usa transporte TLS (sips)" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:552 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:218 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:693 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:338 msgid "SRTP key exchange" msgstr "Intercambió de clave SRTP" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:558 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:224 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:699 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:344 msgid "Disabled" msgstr "Desactivado" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:674 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:795 msgid "Registration" msgstr "Registración" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:679 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:800 msgid "Registration expire" msgstr "Registracíon expira" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:687 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:809 msgid "_Comply with RFC 3263" msgstr "_Cumplir con RFC 3263" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:693 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:463 -msgid "Network" -msgstr "Red" +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:816 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:234 +msgid "Network Interface" +msgstr "Red Inaccesible" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:707 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:830 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:249 msgid "Local address" msgstr "Dirección local" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:744 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:880 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:301 msgid "Local port" msgstr "Puerto local" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:752 -msgid "Set published address and port:" -msgstr "Publicar dirección y puerto:" +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:893 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:928 +msgid "Published address" +msgstr "Dirección publicada" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:756 -msgid "Using STUN " +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:899 +msgid "Using STUN" msgstr "Usando STUN " -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:761 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:906 +msgid "STUN server URL" +msgstr "URL del servidor STUN" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:914 msgid "Same as local parameters" msgstr "Igual que parámetros locales" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:764 -msgid "Manually" -msgstr "Manualmente" - -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:769 -msgid "Published address" -msgstr "Dirección publicada" +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:917 +msgid "Set published address and port:" +msgstr "Publicar dirección y puerto:" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:777 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:936 msgid "Published port" msgstr "Puerto publicado" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:785 -msgid "STUN server URL" -msgstr "URL del servidor STUN" - -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:880 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1027 msgid "Account settings" msgstr "Configuración de cuentas" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:899 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1046 msgid "Basic" msgstr "Básico" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:904 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1051 msgid "Advanced" msgstr "Avanzado" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:169 -msgid "Server returned \"" +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:164 +msgid "Server returned \"%s\" (%d)" msgstr "Servidor contesta \"" #: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:389 @@ -497,32 +684,18 @@ msgstr "Cuentas" msgid "Configured Accounts" msgstr "Cuentas Configuradas" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:505 -msgid "There " -msgstr "Alla " - -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:506 -msgid "is " -msgstr "es " - -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:506 -msgid "are " -msgstr "son " - -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:508 -msgid " active account" -msgstr " cuenta activada" +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:501 +msgid "There is %d active account" +msgid_plural "There are %d active accounts" +msgstr[0] " cuenta activada" +msgstr[1] " cuenta activada" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:509 -msgid "s" -msgstr "s" - -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:514 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:507 msgid "You have no active account" msgstr "No tienes ninguna cuenta activada" #: ../sflphone-client-gnome/src/config/addressbook-config.c:306 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:443 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:556 msgid "General" msgstr "General" @@ -544,8 +717,7 @@ msgstr "_Mostrar fotos de contactos, si están disponibles" #: ../sflphone-client-gnome/src/config/addressbook-config.c:341 msgid "Fields from Evolution's address books" -msgstr "" -"Usar los siguientes campos de la libreta de direcciones de Evolution:" +msgstr "Usar los siguientes campos de la libreta de direcciones de Evolution:" #: ../sflphone-client-gnome/src/config/addressbook-config.c:345 msgid "_Work" @@ -568,16 +740,16 @@ msgid "Select which Evolution address books to use" msgstr "Seleccione la libreta de contactos de Evolution a usar" #: ../sflphone-client-gnome/src/config/addressbook-config.c:404 -#: ../sflphone-client-gnome/src/config/audioconf.c:578 +#: ../sflphone-client-gnome/src/config/audioconf.c:577 msgid "Name" msgstr "Nombre" -#: ../sflphone-client-gnome/src/config/assistant.c:69 +#: ../sflphone-client-gnome/src/config/assistant.c:75 #, c-format msgid "This assistant is now finished." msgstr "El asistente ha finalizado" -#: ../sflphone-client-gnome/src/config/assistant.c:71 +#: ../sflphone-client-gnome/src/config/assistant.c:77 msgid "" "You can at any time check your registration state or modify your accounts " "parameters in the Options/Accounts window." @@ -585,211 +757,205 @@ msgstr "" "Puede comprobar en cualquier momento su estado de registro o modificar la " "configuración de sus cuentas en la ventana de Opciones/Cuentas." -#: ../sflphone-client-gnome/src/config/assistant.c:74 +#: ../sflphone-client-gnome/src/config/assistant.c:80 msgid "Alias" msgstr "Alias" -#: ../sflphone-client-gnome/src/config/assistant.c:78 +#: ../sflphone-client-gnome/src/config/assistant.c:84 msgid "Server" msgstr "Servidor" -#: ../sflphone-client-gnome/src/config/assistant.c:82 +#: ../sflphone-client-gnome/src/config/assistant.c:88 msgid "Username" msgstr "Usuario" -#: ../sflphone-client-gnome/src/config/assistant.c:86 +#: ../sflphone-client-gnome/src/config/assistant.c:92 msgid "Security: " msgstr "Seguridad: " -#: ../sflphone-client-gnome/src/config/assistant.c:88 +#: ../sflphone-client-gnome/src/config/assistant.c:94 msgid "SRTP/ZRTP draft-zimmermann" msgstr "SRTP/ZRTP draft-zimmermann" -#: ../sflphone-client-gnome/src/config/assistant.c:90 -#: ../sflphone-client-gnome/src/config/assistant.c:182 +#: ../sflphone-client-gnome/src/config/assistant.c:96 msgid "None" msgstr "Ninguno" -#: ../sflphone-client-gnome/src/config/assistant.c:210 +#: ../sflphone-client-gnome/src/config/assistant.c:229 msgid "SFLphone account creation wizard" msgstr "Asistente de creación de cuentas" -#: ../sflphone-client-gnome/src/config/assistant.c:236 +#: ../sflphone-client-gnome/src/config/assistant.c:255 msgid "Welcome to the Account creation wizard of SFLphone!" msgstr "¡Bienvenido al asistente de configuración de cuentas de SFLphone" -#: ../sflphone-client-gnome/src/config/assistant.c:237 +#: ../sflphone-client-gnome/src/config/assistant.c:256 msgid "This installation wizard will help you configure an account." msgstr "Este asistente de instalación le ayudará a configurar una cuenta." -#: ../sflphone-client-gnome/src/config/assistant.c:251 +#: ../sflphone-client-gnome/src/config/assistant.c:270 msgid "VoIP Protocols" msgstr "Protocolos VoIP" -#: ../sflphone-client-gnome/src/config/assistant.c:251 +#: ../sflphone-client-gnome/src/config/assistant.c:270 msgid "Select an account type" msgstr "Escoja un tipo de cuenta" -#: ../sflphone-client-gnome/src/config/assistant.c:253 +#: ../sflphone-client-gnome/src/config/assistant.c:272 msgid "SIP (Session Initiation Protocol)" msgstr "SIP (Session Initiation Protocol)" -#: ../sflphone-client-gnome/src/config/assistant.c:255 +#: ../sflphone-client-gnome/src/config/assistant.c:274 msgid "IAX2 (InterAsterix Exchange)" msgstr "IAX2 (InterAsterix Exchange)" -#: ../sflphone-client-gnome/src/config/assistant.c:269 +#: ../sflphone-client-gnome/src/config/assistant.c:288 msgid "Account" msgstr "Cuenta" -#: ../sflphone-client-gnome/src/config/assistant.c:269 +#: ../sflphone-client-gnome/src/config/assistant.c:288 msgid "Please select one of the following options" msgstr "Por favor, elija una de las siguientes opciones" -#: ../sflphone-client-gnome/src/config/assistant.c:271 +#: ../sflphone-client-gnome/src/config/assistant.c:290 msgid "Create a free SIP/IAX2 account on sflphone.org" msgstr "Crear una cuenta SIP/IAX2 gratis en sflphone.org" -#: ../sflphone-client-gnome/src/config/assistant.c:273 +#: ../sflphone-client-gnome/src/config/assistant.c:292 msgid "Register an existing SIP or IAX2 account" msgstr "Registrar una cuenta SIP o IAX2 existente" -#: ../sflphone-client-gnome/src/config/assistant.c:286 +#: ../sflphone-client-gnome/src/config/assistant.c:306 msgid "SIP account settings" msgstr "Configuración de cuenta SIP" -#: ../sflphone-client-gnome/src/config/assistant.c:286 -#: ../sflphone-client-gnome/src/config/assistant.c:394 +#: ../sflphone-client-gnome/src/config/assistant.c:306 +#: ../sflphone-client-gnome/src/config/assistant.c:419 msgid "Please fill the following information" msgstr "Por favor, ingrese la siguiente información" -#: ../sflphone-client-gnome/src/config/assistant.c:352 -#: ../sflphone-client-gnome/src/config/assistant.c:381 +#: ../sflphone-client-gnome/src/config/assistant.c:376 +#: ../sflphone-client-gnome/src/config/assistant.c:405 msgid "Secure communications with _ZRTP" msgstr "Communicaciòn segura con _ZRTP" -#: ../sflphone-client-gnome/src/config/assistant.c:365 +#: ../sflphone-client-gnome/src/config/assistant.c:389 msgid "Optional email address" msgstr "Dirección de correo opcional" -#: ../sflphone-client-gnome/src/config/assistant.c:365 +#: ../sflphone-client-gnome/src/config/assistant.c:389 msgid "This email address will be used to send your voicemail messages." msgstr "Esta dirección de correo se usará para mandar sus mensajes de voz" -#: ../sflphone-client-gnome/src/config/assistant.c:373 +#: ../sflphone-client-gnome/src/config/assistant.c:397 msgid "_Email address" msgstr "_Correo" -#: ../sflphone-client-gnome/src/config/assistant.c:394 +#: ../sflphone-client-gnome/src/config/assistant.c:419 msgid "IAX2 account settings" msgstr "Configuración de cuenta IAX2" -#: ../sflphone-client-gnome/src/config/assistant.c:467 +#: ../sflphone-client-gnome/src/config/assistant.c:496 msgid "Network Address Translation (NAT)" msgstr "Conversión de Dirección de Red (NAT)" -#: ../sflphone-client-gnome/src/config/assistant.c:467 +#: ../sflphone-client-gnome/src/config/assistant.c:496 msgid "You should probably enable this if you are behind a firewall." -msgstr "" -"Probablemente tiene que activar esto si está detrás de un cortafuegos." +msgstr "Probablemente tiene que activar esto si está detrás de un cortafuegos." -#: ../sflphone-client-gnome/src/config/assistant.c:476 +#: ../sflphone-client-gnome/src/config/assistant.c:505 msgid "E_nable STUN" msgstr "A_ctivar STUN" -#: ../sflphone-client-gnome/src/config/assistant.c:483 +#: ../sflphone-client-gnome/src/config/assistant.c:512 msgid "_STUN server" msgstr "_Servidor STUN" -#: ../sflphone-client-gnome/src/config/assistant.c:497 +#: ../sflphone-client-gnome/src/config/assistant.c:526 msgid "Account Registration" msgstr "Registro de cuenta" -#: ../sflphone-client-gnome/src/config/assistant.c:497 +#: ../sflphone-client-gnome/src/config/assistant.c:526 msgid "Congratulations!" msgstr "¡Enhorabuena!" -#: ../sflphone-client-gnome/src/config/audioconf.c:583 +#: ../sflphone-client-gnome/src/config/audioconf.c:582 msgid "Frequency" msgstr "Frecuencia" -#: ../sflphone-client-gnome/src/config/audioconf.c:588 +#: ../sflphone-client-gnome/src/config/audioconf.c:587 msgid "Bitrate" msgstr "Tasa de transferencia" -#: ../sflphone-client-gnome/src/config/audioconf.c:593 +#: ../sflphone-client-gnome/src/config/audioconf.c:592 msgid "Bandwidth" msgstr "Ancho de banda" -#: ../sflphone-client-gnome/src/config/audioconf.c:673 +#: ../sflphone-client-gnome/src/config/audioconf.c:670 msgid "ALSA plugin" msgstr "Plugin ALSA" -#: ../sflphone-client-gnome/src/config/audioconf.c:695 +#: ../sflphone-client-gnome/src/config/audioconf.c:692 msgid "Output" msgstr "Salida" -#: ../sflphone-client-gnome/src/config/audioconf.c:717 +#: ../sflphone-client-gnome/src/config/audioconf.c:714 msgid "Input" msgstr "Entrada" -#: ../sflphone-client-gnome/src/config/audioconf.c:752 +#: ../sflphone-client-gnome/src/config/audioconf.c:749 msgid "_Voice Activity Detection" msgstr "_Detección de actividad de voz" -#: ../sflphone-client-gnome/src/config/audioconf.c:762 +#: ../sflphone-client-gnome/src/config/audioconf.c:759 msgid "_Noise Reduction (Narrow-Band Companding)" msgstr "_Reducción de ruido" -#: ../sflphone-client-gnome/src/config/audioconf.c:798 +#: ../sflphone-client-gnome/src/config/audioconf.c:800 msgid "Sound Manager" msgstr "Gestor de audio" -#: ../sflphone-client-gnome/src/config/audioconf.c:807 +#: ../sflphone-client-gnome/src/config/audioconf.c:809 msgid "_Pulseaudio" msgstr "_Pulseaudio" -#: ../sflphone-client-gnome/src/config/audioconf.c:811 +#: ../sflphone-client-gnome/src/config/audioconf.c:813 msgid "_ALSA" msgstr "_ALSA" -#: ../sflphone-client-gnome/src/config/audioconf.c:816 -msgid "_Mute other applications during a call" -msgstr "Silenciar otras aplicaciones durante una llamada" - -#: ../sflphone-client-gnome/src/config/audioconf.c:823 +#: ../sflphone-client-gnome/src/config/audioconf.c:819 msgid "ALSA settings" msgstr "Configuración de ALSA" -#: ../sflphone-client-gnome/src/config/audioconf.c:840 +#: ../sflphone-client-gnome/src/config/audioconf.c:836 msgid "Codecs" msgstr "Códecs" -#: ../sflphone-client-gnome/src/config/audioconf.c:869 +#: ../sflphone-client-gnome/src/config/audioconf.c:865 msgid "Recordings" msgstr "Grabaciones" -#: ../sflphone-client-gnome/src/config/audioconf.c:873 +#: ../sflphone-client-gnome/src/config/audioconf.c:869 msgid "Destination folder" msgstr "Carpeta de destino" -#: ../sflphone-client-gnome/src/config/audioconf.c:877 +#: ../sflphone-client-gnome/src/config/audioconf.c:873 msgid "Select a folder" msgstr "Seleccione una carpeta" -#: ../sflphone-client-gnome/src/config/audioconf.c:883 +#: ../sflphone-client-gnome/src/config/audioconf.c:879 msgid "Ringtones" msgstr "Tonos de llamada" -#: ../sflphone-client-gnome/src/config/audioconf.c:889 +#: ../sflphone-client-gnome/src/config/audioconf.c:885 msgid "_Enable ringtones" msgstr "_Habilitar tonos de llamada" -#: ../sflphone-client-gnome/src/config/audioconf.c:895 +#: ../sflphone-client-gnome/src/config/audioconf.c:891 msgid "Choose a ringtone" msgstr "Elija un tono de llmada" -#: ../sflphone-client-gnome/src/config/audioconf.c:901 +#: ../sflphone-client-gnome/src/config/audioconf.c:897 msgid "Audio Files" msgstr "Archivos de Audio" @@ -826,7 +992,7 @@ msgstr "Reescritura de número de teléfono" msgid "_Prefix dialed numbers with" msgstr "_Prefijar los números marcados con" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:195 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:225 msgid "" "This profile is used when you want to reach a remote peer simply by typing a " "sip URI such as <b>sip:remotepeer</b>. The settings you define here will " @@ -837,79 +1003,59 @@ msgstr "" "usted define aqui serán también utilizados si ninguná cuenta puede ser " "igualada a una llamada entrante o saliente." -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:274 -msgid "SIP Port" -msgstr "Puerto SIP" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:281 -msgid "UDP Transport" -msgstr "Transporte UDP" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:319 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:440 msgid "Desktop Notifications" msgstr "Notificación de escritorio" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:323 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:444 msgid "_Enable notifications" msgstr "_Activar notificaciones" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:329 -msgid "Enable voicemail _notifications" -msgstr "Activar _notificaciones de mensajes de voz" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:341 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:450 msgid "System Tray Icon" msgstr "Icono de bandeja del sistema" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:344 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:453 msgid "_Popup main window on incoming call" msgstr "_Popup ventana principal al recibir llamadas" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:349 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:457 msgid "Ne_ver popup main window" msgstr "_Nunca mostrar ventana principal" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:353 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:463 msgid "Hide SFLphone window on _startup" msgstr "Esconder SFLphone al principio" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:359 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:469 msgid "Calls History" msgstr "Historia de llamadas" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:362 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:472 msgid "_Keep my history for at least" msgstr "_Guardar mi historia por lo menos" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:373 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:483 msgid "days" msgstr "días" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:377 -msgid "Configuration File" -msgstr "Archivo de configuración" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:379 -msgid "Store SIP credentials as MD5 hash" -msgstr "Guarda informaciòn SIP como hash MD5" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:423 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:536 msgid "Preferences" msgstr "Preferencias" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:448 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:561 msgid "Audio" msgstr "Sonido" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:453 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:566 msgid "Address Book" msgstr "Libreta de Direcciones" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:458 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:571 msgid "Hooks" msgstr "Disparadores" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:468 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:581 msgid "Direct IP calls" msgstr "Llamadas IP directas" @@ -917,11 +1063,11 @@ msgstr "Llamadas IP directas" msgid "Advanced options for TLS" msgstr "Opciones avanzadas por TLS" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:55 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:56 msgid "TLS transport" msgstr "Transporte TLS" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:59 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:60 msgid "" "TLS transport can be used along with UDP for those calls that would\n" "require secure sip transactions (aka SIPS). You can configure a different\n" @@ -934,55 +1080,55 @@ msgstr "" "diferente transporte TLS para cada cuenta. De cualquier forma, cada uno de " "ellos usará un puerto dedicado, diferente el uno del otro.\n" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:100 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:103 msgid "Certificate of Authority list" msgstr "Lista de Certificados de Autoridad" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:104 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:107 msgid "Choose a CA list file (optional)" msgstr "Escoge un archivo de lista de CA (opcional)" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:115 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:131 msgid "Public endpoint certificate file" msgstr "Archivo del certificado del par público" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:119 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:135 msgid "Choose a public endpoint certificate (optional)" msgstr "Escoge un certificado de par público (opcional)" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:134 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:159 msgid "Choose a private key file (optional)" msgstr "Escoge un archivo de clave privada" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:145 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:181 msgid "Password for the private key" msgstr "Contraseña de clave privada" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:168 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:204 msgid "TLS protocol method" msgstr "Método de protocolo TLS" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:202 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:238 msgid "TLS cipher list" msgstr "Lista de cifrado TLS" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:211 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:247 msgid "Server name instance for outgoing TLS connection" msgstr "Nombre del servidor para conección TLS saliente" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:219 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:255 msgid "Negotiation timeout (sec:msec)" msgstr "Negociación expirada" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:236 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:272 msgid "Verify incoming certificates, as a server" msgstr "Checar certificados entrantes, como un servidor" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:242 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:278 msgid "Verify certificates from answer, as a client" msgstr "Checar certificados de la respuesta, como cliente" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:248 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:284 msgid "Require certificate for incoming tls connections" msgstr "Requiere certificado para conecciones TLS entrantes" @@ -990,45 +1136,84 @@ msgstr "Requiere certificado para conecciones TLS entrantes" msgid "ZRTP Options" msgstr "Opciones ZRTP" -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:68 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:69 msgid "Send Hello Hash in S_DP" msgstr "Enviar Hello Hash en S_DP" -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:74 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:75 msgid "Ask User to Confirm SAS" msgstr "Preguntar al usuario de confirmar SAS" -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:80 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:81 msgid "_Warn if ZRTP not supported" msgstr "_Prevenir si ZRTP no es compatible" -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:86 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:87 msgid "Display SAS once for hold events" msgstr "Presentar SAS una vez para eventos en espera" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:56 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:58 msgid "Search all" msgstr "Buscar todos" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:57 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:70 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:82 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:94 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:59 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:72 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:84 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:96 msgid "Click here to change the search type" msgstr "Haz clic aqui para cambiar el type de busqueda" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:69 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:71 msgid "Search by missed call" msgstr "Buscar en llamadas pérdidas" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:81 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:83 msgid "Search by incoming call" msgstr "Buscar en llamadas entrantes" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:93 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:95 msgid "Search by outgoing call" msgstr "Buscar en llamadas salientes" +#~ msgid "IP call - %s" +#~ msgstr "Llamada IP - %s" + +#~ msgid "Codec" +#~ msgstr "Códec" + +#~ msgid "Network" +#~ msgstr "Red" + +#~ msgid "Manually" +#~ msgstr "Manualmente" + +#~ msgid "There " +#~ msgstr "Alla " + +#~ msgid "is " +#~ msgstr "es " + +#~ msgid "are " +#~ msgstr "son " + +#~ msgid "s" +#~ msgstr "s" + +#~ msgid "_Mute other applications during a call" +#~ msgstr "Silenciar otras aplicaciones durante una llamada" + +#~ msgid "SIP Port" +#~ msgstr "Puerto SIP" + +#~ msgid "UDP Transport" +#~ msgstr "Transporte UDP" + +#~ msgid "Enable voicemail _notifications" +#~ msgstr "Activar _notificaciones de mensajes de voz" + +#~ msgid "Store SIP credentials as MD5 hash" +#~ msgstr "Guarda informaciòn SIP como hash MD5" + #~ msgctxt "account state" #~ msgid "Registered" #~ msgstr "Registrado" @@ -1047,9 +1232,6 @@ msgstr "Buscar en llamadas salientes" #~ msgid "Stun Server" #~ msgstr "Servidor STUN" -#~ msgid "Transfer to : " -#~ msgstr "Transferir a : " - #~ msgid "Default account" #~ msgstr "Cuenta por defecto" @@ -1065,9 +1247,6 @@ msgstr "Buscar en llamadas salientes" #~ msgid "Incoming call" #~ msgstr "Llamada entrante" -#~ msgid "Transfer" -#~ msgstr "Transferir" - #~ msgid "Hang up" #~ msgstr "Colgar" @@ -1090,9 +1269,6 @@ msgstr "Buscar en llamadas salientes" #~ msgid "Recordings" #~ msgstr "Grabaciones" -#~ msgid "Remove the selected account" -#~ msgstr "Eliminar la cuenta seleccionada" - #~ msgid "Remove" #~ msgstr "Eliminar" @@ -1130,21 +1306,6 @@ msgstr "Buscar en llamadas salientes" #~ msgid "Configure SFLphone" #~ msgstr "Configurar SFLphone" -#~ msgid "_Help" -#~ msgstr "_Ayuda" - -#~ msgid "_Call" -#~ msgstr "_Llamar" - -#~ msgid "_Edit" -#~ msgstr "_Editar" - -#~ msgid "_Accounts" -#~ msgstr "_Cuentas" - -#~ msgid "_View" -#~ msgstr "_Ver" - #~ msgid "Port" #~ msgstr "Puerto" @@ -1198,12 +1359,6 @@ msgstr "Buscar en llamadas salientes" #~ msgid "Address book loading..." #~ msgstr "Cargando el directorio..." -#~ msgid "Call history" -#~ msgstr "Historia de Llamada" - -#~ msgid "Address book" -#~ msgstr "Libreta de contactos" - #~ msgid "Edit before call" #~ msgstr "Editar antes de llamar" @@ -1294,18 +1449,12 @@ msgstr "Buscar en llamadas salientes" #~ msgid "Prefix dialed numbers with" #~ msgstr "Prefijar los números marcados con" -#~ msgid "History" -#~ msgstr "Historia de Llamada" - #~ msgid "Attention:number of results exceeds max displayed." #~ msgstr "Cuidado:número de resultatos excede el maximo a mostrar." #~ msgid "_Account creation wizard" #~ msgstr "Asistente de configuración de cuentas" -#~ msgid "_Volume controls" -#~ msgstr "_Controles de volumen" - #~ msgid "_Enable this account" #~ msgstr "_Habilitar esta cuenta" @@ -1435,9 +1584,6 @@ msgstr "Buscar en llamadas salientes" #~ msgid "\"Voicemail\" <%s>" #~ msgstr "\"Mensaje\" <%s>" -#~ msgid "Off Hold" -#~ msgstr "Seguir" - #~ msgid "Record a call" #~ msgstr "Grabar una llamada" @@ -1535,20 +1681,20 @@ msgstr "Buscar en llamadas salientes" #~ msgstr "Retomar" #~ msgid "" -#~ "This button will remove the selected account in the list below. Be sure you " -#~ "really don't need it anymore. If you think you might use it again later, " -#~ "just uncheck it." +#~ "This button will remove the selected account in the list below. Be sure " +#~ "you really don't need it anymore. If you think you might use it again " +#~ "later, just uncheck it." #~ msgstr "" -#~ "Este botón elimina la cuenta seleccionada en la siguiente lista. Asegúrese " -#~ "de no necesitarla más. Si cree que la pueda necesitar más adelante, " -#~ "simplemente quité la selección." +#~ "Este botón elimina la cuenta seleccionada en la siguiente lista. " +#~ "Asegúrese de no necesitarla más. Si cree que la pueda necesitar más " +#~ "adelante, simplemente quité la selección." #~ msgid "" -#~ "This button enables you to initialize a new account. You will then be able " -#~ "to edit it using the form on the right." +#~ "This button enables you to initialize a new account. You will then be " +#~ "able to edit it using the form on the right." #~ msgstr "" -#~ "Este botón le permite inicializar una nueva cuenta. Usted podrá corregirlo " -#~ "con el formulario a la derecha." +#~ "Este botón le permite inicializar una nueva cuenta. Usted podrá " +#~ "corregirlo con el formulario a la derecha." #~ msgid "" #~ "By default, when you place a call, sflphone will use the first account in " @@ -1571,18 +1717,12 @@ msgstr "Buscar en llamadas salientes" #~ msgid "Display phone numbers of these types :" #~ msgstr "Mostrar números de este tipo:" -#~ msgid "Clear history" -#~ msgstr "Limpiar historial" - #~ msgid "Display dialpad" #~ msgstr "Mostrar teclado" #~ msgid "Command to run" #~ msgstr "Comando a ejecutar" -#~ msgid "Clear _history" -#~ msgstr "_Limpiar historial" - #~ msgid "Keep my history for at least" #~ msgstr "Guardar el historial al menos" @@ -1598,11 +1738,11 @@ msgstr "Buscar en llamadas salientes" #~ msgstr "NAT Traversal" #~ msgid "" -#~ "Pressing \"apply\" will restart the network layer. Otherwise, SFLPhone would " -#~ "have to be restarted." +#~ "Pressing \"apply\" will restart the network layer. Otherwise, SFLPhone " +#~ "would have to be restarted." #~ msgstr "" -#~ "Presionar “aplica” recomenzará la capa de red. Si no, SFLPhone tendría que " -#~ "ser reiniciado." +#~ "Presionar “aplica” recomenzará la capa de red. Si no, SFLPhone tendría " +#~ "que ser reiniciado." #~ msgid "_Volume Controls" #~ msgstr "_Controles de Volumen" @@ -1619,28 +1759,29 @@ msgstr "Buscar en llamadas salientes" #~ msgid "" #~ "By default, when you place a call, sflphone will use the first account in " #~ "this list which is \"registered\". Change the order of the accounts using " -#~ "the \"Up\" and \"Down\" arrows. Enable/disable them by checking/unchecking " -#~ "them on the left of the item. Add or remove some with \"Plus\" and \"Sub\" " -#~ "buttons. Edit the selected account with the form on the right." +#~ "the \"Up\" and \"Down\" arrows. Enable/disable them by checking/" +#~ "unchecking them on the left of the item. Add or remove some with \"Plus\" " +#~ "and \"Sub\" buttons. Edit the selected account with the form on the right." #~ msgstr "" #~ "Por defecto, cuando usted realiza una llamada, sflphone usará la primera " -#~ "cuenta en esta lista que este \"registrada\". Cambie el orden de las cuentas " -#~ "usando las flechas \"Arriba\" y \"Abajo\". Las Activa/desactiva marcando la " -#~ "opción de la izquierda. Adiciona o elimina con los botones de \"Más\" o " -#~ "\"Menos\". Edita la cuenta seleccionada con el formulario a la derecha." +#~ "cuenta en esta lista que este \"registrada\". Cambie el orden de las " +#~ "cuentas usando las flechas \"Arriba\" y \"Abajo\". Las Activa/desactiva " +#~ "marcando la opción de la izquierda. Adiciona o elimina con los botones de " +#~ "\"Más\" o \"Menos\". Edita la cuenta seleccionada con el formulario a la " +#~ "derecha." #~ msgctxt "NAME OF TRANSLATORS" #~ msgid "Your names" #~ msgstr "" #~ "Maxime Chambreuil, ,Launchpad Contributions:,Andres Mujica,Maxime " -#~ "Chambreuil, ,Launchpad Contributions:,Andres Mujica,Maxime Chambreuil, " -#~ ",Launchpad Contributions:,Andres Mujica,Maxime Chambreuil, ,Launchpad " +#~ "Chambreuil, ,Launchpad Contributions:,Andres Mujica,Maxime Chambreuil, ," +#~ "Launchpad Contributions:,Andres Mujica,Maxime Chambreuil, ,Launchpad " #~ "Contributions:,Andres Mujica,Maxime Chambreuil" #~ msgctxt "EMAIL OF TRANSLATORS" #~ msgid "Your emails" #~ msgstr "" -#~ "maxime.chambreuil@savoirfairelinux.com,,,andres.mujica@seaq.com.co,maxime.cha" -#~ "mbreuil@gmail.com,,,andres.mujica@seaq.com.co,maxime.chambreuil@gmail.com,,,a" -#~ "ndres.mujica@seaq.com.co,maxime.chambreuil@gmail.com,,,andres.mujica@seaq.com" -#~ ".co,maxime.chambreuil@gmail.com" +#~ "maxime.chambreuil@savoirfairelinux.com,,,andres.mujica@seaq.com.co,maxime." +#~ "chambreuil@gmail.com,,,andres.mujica@seaq.com.co,maxime.chambreuil@gmail." +#~ "com,,,andres.mujica@seaq.com.co,maxime.chambreuil@gmail.com,,,andres." +#~ "mujica@seaq.com.co,maxime.chambreuil@gmail.com" diff --git a/lang/fr/fr.po b/lang/fr/fr.po index 53cac66386..c7ace4f55b 100644 --- a/lang/fr/fr.po +++ b/lang/fr/fr.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: SFLphone 0.9.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-11-12 14:02-0500\n" +"POT-Creation-Date: 2009-12-03 10:22-0500\n" "PO-Revision-Date: 2009-10-26 20:46+0000\n" "Last-Translator: Maxime Chambreuil <maxime.chambreuil@gmail.com>\n" "Language-Team: SavoirFaireLinux Inc <sflphoneteam@savoirfairelinux.com>\n" @@ -62,15 +62,15 @@ msgstr "Serveur Stun invalide" msgid "Invalid" msgstr "Non valide" -#: ../sflphone-client-gnome/src/actions.c:72 +#: ../sflphone-client-gnome/src/actions.c:98 msgid "Using account" msgstr "Utilise le compte" -#: ../sflphone-client-gnome/src/actions.c:78 +#: ../sflphone-client-gnome/src/actions.c:104 msgid "No registered accounts" msgstr "Pas de compte enregistré" -#: ../sflphone-client-gnome/src/actions.c:259 +#: ../sflphone-client-gnome/src/actions.c:285 msgid "" "Unable to connect to the SFLphone server.\n" "Make sure the daemon is running." @@ -78,11 +78,12 @@ msgstr "" "Impossible de se connecter au serveur SFLphone.\n" " Assurez-vous que le démon est lancé." -#: ../sflphone-client-gnome/src/actions.c:879 +#: ../sflphone-client-gnome/src/actions.c:589 +#: ../sflphone-client-gnome/src/actions.c:911 msgid "Direct SIP call" msgstr "Appel direct SIP" -#: ../sflphone-client-gnome/src/actions.c:1071 +#: ../sflphone-client-gnome/src/actions.c:1103 #, c-format msgid "" "<b>Error: No audio codecs found.\n" @@ -137,31 +138,31 @@ msgstr "Vous avez des appels en cours." msgid "Do you still want to quit?" msgstr "Voulez-vous quitter?" -#: ../sflphone-client-gnome/src/mainwindow.c:297 +#: ../sflphone-client-gnome/src/mainwindow.c:298 msgid "SFLphone Error" msgstr "Erreur SFLphone" -#: ../sflphone-client-gnome/src/mainwindow.c:391 +#: ../sflphone-client-gnome/src/mainwindow.c:392 #, c-format msgid "ZRTP is not supported by peer %s\n" msgstr "ZRTP n'est pas supporté par %s\n" -#: ../sflphone-client-gnome/src/mainwindow.c:392 +#: ../sflphone-client-gnome/src/mainwindow.c:393 msgid "Secure Communication Unavailable" msgstr "Communications sécurisées non disponibles" -#: ../sflphone-client-gnome/src/mainwindow.c:393 -#: ../sflphone-client-gnome/src/mainwindow.c:415 +#: ../sflphone-client-gnome/src/mainwindow.c:394 +#: ../sflphone-client-gnome/src/mainwindow.c:416 msgid "Continue" msgstr "Continuer" -#: ../sflphone-client-gnome/src/mainwindow.c:394 -#: ../sflphone-client-gnome/src/mainwindow.c:416 -#: ../sflphone-client-gnome/src/mainwindow.c:430 +#: ../sflphone-client-gnome/src/mainwindow.c:395 +#: ../sflphone-client-gnome/src/mainwindow.c:417 +#: ../sflphone-client-gnome/src/mainwindow.c:431 msgid "Stop Call" msgstr "Arrêter l'appel" -#: ../sflphone-client-gnome/src/mainwindow.c:413 +#: ../sflphone-client-gnome/src/mainwindow.c:414 #, c-format msgid "" "A %s error forced the call with %s to fall under unencrypted mode.\n" @@ -170,11 +171,11 @@ msgstr "" "L'appel avec %s est passé en mode non-crypté à cause d'une erreur %s.\n" "Raison exacte: %s\n" -#: ../sflphone-client-gnome/src/mainwindow.c:414 +#: ../sflphone-client-gnome/src/mainwindow.c:415 msgid "ZRTP negotiation failed" msgstr "Erreur d'authentification" -#: ../sflphone-client-gnome/src/mainwindow.c:427 +#: ../sflphone-client-gnome/src/mainwindow.c:428 #, c-format msgid "" "%s wants to stop using secure communication. Confirm will resume " @@ -183,11 +184,11 @@ msgstr "" "%s ne désire plus utiliser la communication sécurisée. Confirmer que vous " "voulez continuer sans ZRTP.\n" -#: ../sflphone-client-gnome/src/mainwindow.c:428 +#: ../sflphone-client-gnome/src/mainwindow.c:429 msgid "Confirm Go Clear" msgstr "Confirmer Communication en clair" -#: ../sflphone-client-gnome/src/mainwindow.c:429 +#: ../sflphone-client-gnome/src/mainwindow.c:430 msgid "Confirm" msgstr "Confirmer" @@ -258,15 +259,15 @@ msgstr "Volume des hauts-parleurs" msgid "Mic volume" msgstr "Volume du micro" -#: ../sflphone-client-gnome/src/statusicon.c:91 +#: ../sflphone-client-gnome/src/statusicon.c:96 msgid "_Show main window" msgstr "_Afficher la fenêtre principale" -#: ../sflphone-client-gnome/src/statusicon.c:126 +#: ../sflphone-client-gnome/src/statusicon.c:131 msgid "SFLphone" msgstr "SFLphone" -#: ../sflphone-client-gnome/src/statusicon.c:127 +#: ../sflphone-client-gnome/src/statusicon.c:132 #, c-format msgid "%i account configured" msgid_plural "%i accounts configured" @@ -274,388 +275,395 @@ msgstr[0] "%i compte configuré" msgstr[1] "%i comptes configurés" #: ../sflphone-client-gnome/src/toolbar.c:38 -#: ../sflphone-client-gnome/src/uimanager.c:628 -#: ../sflphone-client-gnome/src/uimanager.c:662 +#: ../sflphone-client-gnome/src/uimanager.c:693 +#: ../sflphone-client-gnome/src/uimanager.c:727 msgid "Voicemail" msgstr "Boite vocale" -#: ../sflphone-client-gnome/src/uimanager.c:115 +#: ../sflphone-client-gnome/src/uimanager.c:117 msgid "No address book selected" msgstr "Aucun carnet d'adresses sélectionné" -#: ../sflphone-client-gnome/src/uimanager.c:135 -#: ../sflphone-client-gnome/src/uimanager.c:691 +#: ../sflphone-client-gnome/src/uimanager.c:137 +#: ../sflphone-client-gnome/src/uimanager.c:756 msgid "Address book" msgstr "Carnet d'adresses" -#: ../sflphone-client-gnome/src/uimanager.c:237 +#: ../sflphone-client-gnome/src/uimanager.c:279 #, c-format msgid "Voicemail (%i)" msgstr "Boite vocale (%i)" -#: ../sflphone-client-gnome/src/uimanager.c:300 +#: ../sflphone-client-gnome/src/uimanager.c:342 msgid "SFLphone is a VoIP client compatible with SIP and IAX2 protocols." msgstr "" "SFLphone est un client VoIP compatible avec les protocoles SIP et IAX2." -#: ../sflphone-client-gnome/src/uimanager.c:303 +#: ../sflphone-client-gnome/src/uimanager.c:345 msgid "About SFLphone" msgstr "A propos de SFLphone" -#: ../sflphone-client-gnome/src/uimanager.c:654 +#: ../sflphone-client-gnome/src/uimanager.c:719 msgid "Call" msgstr "Actions" -#: ../sflphone-client-gnome/src/uimanager.c:655 -#: ../sflphone-client-gnome/src/uimanager.c:1119 +#: ../sflphone-client-gnome/src/uimanager.c:720 +#: ../sflphone-client-gnome/src/uimanager.c:1184 msgid "_New call" msgstr "_Nouvel appel" -#: ../sflphone-client-gnome/src/uimanager.c:655 +#: ../sflphone-client-gnome/src/uimanager.c:720 msgid "Place a new call" msgstr "Appeler" -#: ../sflphone-client-gnome/src/uimanager.c:656 -#: ../sflphone-client-gnome/src/uimanager.c:914 +#: ../sflphone-client-gnome/src/uimanager.c:721 +#: ../sflphone-client-gnome/src/uimanager.c:979 msgid "_Pick up" msgstr "_Décrocher" -#: ../sflphone-client-gnome/src/uimanager.c:656 +#: ../sflphone-client-gnome/src/uimanager.c:721 msgid "Answer the call" msgstr "Répondre à l'appel" -#: ../sflphone-client-gnome/src/uimanager.c:657 -#: ../sflphone-client-gnome/src/uimanager.c:926 -#: ../sflphone-client-gnome/src/uimanager.c:967 +#: ../sflphone-client-gnome/src/uimanager.c:722 +#: ../sflphone-client-gnome/src/uimanager.c:991 +#: ../sflphone-client-gnome/src/uimanager.c:1032 msgid "_Hang up" msgstr "_Raccrocher" -#: ../sflphone-client-gnome/src/uimanager.c:657 +#: ../sflphone-client-gnome/src/uimanager.c:722 msgid "Finish the call" msgstr "Terminer l'appel" -#: ../sflphone-client-gnome/src/uimanager.c:658 +#: ../sflphone-client-gnome/src/uimanager.c:723 msgid "O_n hold" msgstr "Mettre en attente" -#: ../sflphone-client-gnome/src/uimanager.c:658 +#: ../sflphone-client-gnome/src/uimanager.c:723 msgid "Place the call on hold" msgstr "Mettre l'appel en attente" -#: ../sflphone-client-gnome/src/uimanager.c:659 +#: ../sflphone-client-gnome/src/uimanager.c:724 msgid "O_ff hold" msgstr "Reprendre" -#: ../sflphone-client-gnome/src/uimanager.c:659 +#: ../sflphone-client-gnome/src/uimanager.c:724 msgid "Place the call off hold" msgstr "Reprendre l'appel" -#: ../sflphone-client-gnome/src/uimanager.c:660 -#: ../sflphone-client-gnome/src/uimanager.c:950 +#: ../sflphone-client-gnome/src/uimanager.c:725 +#: ../sflphone-client-gnome/src/uimanager.c:1015 msgid "_Record" msgstr "Enregistrer" -#: ../sflphone-client-gnome/src/uimanager.c:660 +#: ../sflphone-client-gnome/src/uimanager.c:725 msgid "Record the current conversation" msgstr "Enregistrer la conversation courante" -#: ../sflphone-client-gnome/src/uimanager.c:661 +#: ../sflphone-client-gnome/src/uimanager.c:726 msgid "Configuration _Assistant" msgstr "_Assistant de configuration" -#: ../sflphone-client-gnome/src/uimanager.c:661 +#: ../sflphone-client-gnome/src/uimanager.c:726 msgid "Run the configuration assistant" msgstr "Lancer l'assistant de configuration" -#: ../sflphone-client-gnome/src/uimanager.c:662 +#: ../sflphone-client-gnome/src/uimanager.c:727 msgid "Call your voicemail" msgstr "Appeler la boite vocale" -#: ../sflphone-client-gnome/src/uimanager.c:663 +#: ../sflphone-client-gnome/src/uimanager.c:728 msgid "_Close" msgstr "_Fermer" -#: ../sflphone-client-gnome/src/uimanager.c:663 +#: ../sflphone-client-gnome/src/uimanager.c:728 msgid "Minimize to system tray" msgstr "Minimiser dans la barre des tâches" -#: ../sflphone-client-gnome/src/uimanager.c:664 +#: ../sflphone-client-gnome/src/uimanager.c:729 msgid "_Quit" msgstr "_Quitter" -#: ../sflphone-client-gnome/src/uimanager.c:664 +#: ../sflphone-client-gnome/src/uimanager.c:729 msgid "Quit the program" msgstr "Quitter le programme" -#: ../sflphone-client-gnome/src/uimanager.c:667 +#: ../sflphone-client-gnome/src/uimanager.c:732 msgid "_Edit" msgstr "_Editer" -#: ../sflphone-client-gnome/src/uimanager.c:668 +#: ../sflphone-client-gnome/src/uimanager.c:733 msgid "_Copy" msgstr "_Copier" -#: ../sflphone-client-gnome/src/uimanager.c:668 +#: ../sflphone-client-gnome/src/uimanager.c:733 msgid "Copy the selection" msgstr "Copier la sélection" -#: ../sflphone-client-gnome/src/uimanager.c:669 +#: ../sflphone-client-gnome/src/uimanager.c:734 msgid "_Paste" msgstr "C_oller" -#: ../sflphone-client-gnome/src/uimanager.c:669 +#: ../sflphone-client-gnome/src/uimanager.c:734 msgid "Paste the clipboard" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:670 +#: ../sflphone-client-gnome/src/uimanager.c:735 msgid "Clear _history" msgstr "Effacer l'_historique" -#: ../sflphone-client-gnome/src/uimanager.c:670 +#: ../sflphone-client-gnome/src/uimanager.c:735 msgid "Clear the call history" msgstr "Effacer l'historique" -#: ../sflphone-client-gnome/src/uimanager.c:671 +#: ../sflphone-client-gnome/src/uimanager.c:736 msgid "_Accounts" msgstr "Co_mptes" -#: ../sflphone-client-gnome/src/uimanager.c:671 +#: ../sflphone-client-gnome/src/uimanager.c:736 msgid "Edit your accounts" msgstr "Éditer les comptes" -#: ../sflphone-client-gnome/src/uimanager.c:672 +#: ../sflphone-client-gnome/src/uimanager.c:737 msgid "_Preferences" msgstr "Préférences" -#: ../sflphone-client-gnome/src/uimanager.c:672 +#: ../sflphone-client-gnome/src/uimanager.c:737 msgid "Change your preferences" msgstr "Modifier les préférences" -#: ../sflphone-client-gnome/src/uimanager.c:675 +#: ../sflphone-client-gnome/src/uimanager.c:740 msgid "_View" msgstr "A_ffichage" -#: ../sflphone-client-gnome/src/uimanager.c:678 +#: ../sflphone-client-gnome/src/uimanager.c:743 msgid "_Help" msgstr "A_ide" -#: ../sflphone-client-gnome/src/uimanager.c:679 +#: ../sflphone-client-gnome/src/uimanager.c:744 msgid "Contents" msgstr "Sommaire" -#: ../sflphone-client-gnome/src/uimanager.c:679 +#: ../sflphone-client-gnome/src/uimanager.c:744 msgid "Open the manual" msgstr "Ouvrir le manuel" -#: ../sflphone-client-gnome/src/uimanager.c:680 +#: ../sflphone-client-gnome/src/uimanager.c:745 msgid "About this application" msgstr "À propos de cette application" -#: ../sflphone-client-gnome/src/uimanager.c:686 +#: ../sflphone-client-gnome/src/uimanager.c:751 msgid "_Transfer" msgstr "Transférer" -#: ../sflphone-client-gnome/src/uimanager.c:686 +#: ../sflphone-client-gnome/src/uimanager.c:751 msgid "Transfer the call" msgstr "Transférer à : " -#: ../sflphone-client-gnome/src/uimanager.c:687 +#: ../sflphone-client-gnome/src/uimanager.c:752 msgid "_Show toolbar" msgstr "Afficher la _barre d'outil" -#: ../sflphone-client-gnome/src/uimanager.c:687 +#: ../sflphone-client-gnome/src/uimanager.c:752 msgid "Show the toolbar" msgstr "Afficher la barre d'outil" -#: ../sflphone-client-gnome/src/uimanager.c:688 +#: ../sflphone-client-gnome/src/uimanager.c:753 msgid "_Dialpad" msgstr "_Clavier" -#: ../sflphone-client-gnome/src/uimanager.c:688 +#: ../sflphone-client-gnome/src/uimanager.c:753 msgid "Show the dialpad" msgstr "Afficher le clavier" -#: ../sflphone-client-gnome/src/uimanager.c:689 +#: ../sflphone-client-gnome/src/uimanager.c:754 msgid "_Volume controls" msgstr "Contrôle du _volume" -#: ../sflphone-client-gnome/src/uimanager.c:689 +#: ../sflphone-client-gnome/src/uimanager.c:754 msgid "Show the volume controls" msgstr "Afficher les controles du volume" -#: ../sflphone-client-gnome/src/uimanager.c:690 +#: ../sflphone-client-gnome/src/uimanager.c:755 msgid "_History" msgstr "Historique" -#: ../sflphone-client-gnome/src/uimanager.c:690 +#: ../sflphone-client-gnome/src/uimanager.c:755 msgid "Calls history" msgstr "Historique d'appels" -#: ../sflphone-client-gnome/src/uimanager.c:691 +#: ../sflphone-client-gnome/src/uimanager.c:756 msgid "_Address book" msgstr "Carnet d'adresses" -#: ../sflphone-client-gnome/src/uimanager.c:938 -#: ../sflphone-client-gnome/src/uimanager.c:979 +#: ../sflphone-client-gnome/src/uimanager.c:1003 +#: ../sflphone-client-gnome/src/uimanager.c:1044 msgid "On _Hold" msgstr "_Mettre en attente" -#: ../sflphone-client-gnome/src/uimanager.c:1042 +#: ../sflphone-client-gnome/src/uimanager.c:1107 msgid "_Call back" msgstr "_Rappeler" -#: ../sflphone-client-gnome/src/uimanager.c:1193 +#: ../sflphone-client-gnome/src/uimanager.c:1258 msgid "Edit phone number" msgstr "Éditer le numéro" -#: ../sflphone-client-gnome/src/uimanager.c:1204 +#: ../sflphone-client-gnome/src/uimanager.c:1269 msgid "Edit the phone number before making a call" msgstr "Éditer le numéro de téléphone avant d'appeler" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:172 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:180 msgid "Account Parameters" msgstr "Paramètres du Compte" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:181 -#: ../sflphone-client-gnome/src/config/assistant.c:307 -#: ../sflphone-client-gnome/src/config/assistant.c:415 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:189 +#: ../sflphone-client-gnome/src/config/assistant.c:314 +#: ../sflphone-client-gnome/src/config/assistant.c:427 msgid "_Alias" msgstr "A_lias" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:189 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:197 msgid "_Protocol" msgstr "P_rotocole" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:207 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:215 msgid "Unknown" msgstr "Inconnu" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:217 -#: ../sflphone-client-gnome/src/config/assistant.c:315 -#: ../sflphone-client-gnome/src/config/assistant.c:423 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:225 +#: ../sflphone-client-gnome/src/config/assistant.c:322 +#: ../sflphone-client-gnome/src/config/assistant.c:435 msgid "_Host name" msgstr "_Serveur" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:225 -#: ../sflphone-client-gnome/src/config/assistant.c:323 -#: ../sflphone-client-gnome/src/config/assistant.c:431 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:233 +#: ../sflphone-client-gnome/src/config/assistant.c:330 +#: ../sflphone-client-gnome/src/config/assistant.c:443 msgid "_User name" msgstr "Usa_ger" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:242 -#: ../sflphone-client-gnome/src/config/assistant.c:339 -#: ../sflphone-client-gnome/src/config/assistant.c:446 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:250 +#: ../sflphone-client-gnome/src/config/assistant.c:346 +#: ../sflphone-client-gnome/src/config/assistant.c:458 msgid "_Password" msgstr "_Mot de passe" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:262 -#: ../sflphone-client-gnome/src/config/assistant.c:357 -#: ../sflphone-client-gnome/src/config/assistant.c:462 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:270 +#: ../sflphone-client-gnome/src/config/assistant.c:363 +#: ../sflphone-client-gnome/src/config/assistant.c:473 +#, fuzzy +msgid "Show password" +msgstr "Mot de passe" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:274 +#: ../sflphone-client-gnome/src/config/assistant.c:368 +#: ../sflphone-client-gnome/src/config/assistant.c:478 msgid "_Voicemail number" msgstr "_Boite vocale #" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:348 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:361 msgid "Authentication" msgstr "Identification" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:349 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:362 msgid "Secret" msgstr "Mot de passe" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:579 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:605 msgid "Credential" msgstr "Informations" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:614 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:640 msgid "Authentication name" msgstr "Nom d'authentification" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:625 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:651 msgid "Password" msgstr "Mot de passe" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:649 -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1029 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:306 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:674 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1056 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:321 msgid "Security" msgstr "Sécurité" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:662 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:318 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:687 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:333 msgid "Use TLS transport (sips)" msgstr "Utiliser un transport TLS (sips)" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:668 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:323 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:693 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:338 msgid "SRTP key exchange" msgstr "Échange de clé SRTP" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:674 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:329 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:699 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:344 msgid "Disabled" msgstr "Désactivé" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:770 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:795 msgid "Registration" msgstr "Expiration d'enregistrement" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:775 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:800 msgid "Registration expire" msgstr "Expiration d'enregistrement" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:784 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:809 msgid "_Comply with RFC 3263" msgstr "Respecter RFC 3263" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:791 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:221 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:816 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:234 msgid "Network Interface" msgstr "Interface réseau" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:805 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:236 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:830 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:249 msgid "Local address" msgstr "Adresse locale" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:855 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:292 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:880 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:301 msgid "Local port" msgstr "Port local" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:868 -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:903 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:893 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:928 msgid "Published address" msgstr "Adresse de publication" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:874 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:899 msgid "Using STUN" msgstr "Utiliser STUN " -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:881 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:906 msgid "STUN server URL" msgstr "URL du serveur STUN" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:889 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:914 msgid "Same as local parameters" msgstr "Identique aux paramètres locaux" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:892 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:917 msgid "Set published address and port:" msgstr "Configurer l'adresse et le port à publier" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:911 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:936 msgid "Published port" msgstr "Port de publication" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1000 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1027 msgid "Account settings" msgstr "Paramètre des comptes" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1019 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1046 msgid "Basic" msgstr "Général" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1024 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1051 msgid "Advanced" msgstr "Avancé" @@ -664,35 +672,35 @@ msgstr "Avancé" msgid "Server returned \"%s\" (%d)" msgstr "Le serveur a répondu \"%s\" (%d)" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:387 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:389 msgid "Protocol" msgstr "Protocole" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:394 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:396 msgid "Status" msgstr "Statut" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:472 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:474 msgid "Accounts" msgstr "Comptes" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:482 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:484 msgid "Configured Accounts" msgstr "Comptes Configurés" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:499 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:501 #, c-format msgid "There is %d active account" msgid_plural "There are %d active accounts" msgstr[0] " %d compte actif" msgstr[1] " %d comptes actifs" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:505 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:507 msgid "You have no active account" msgstr "Vous n'avez aucun compte actif" #: ../sflphone-client-gnome/src/config/addressbook-config.c:306 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:537 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:556 msgid "General" msgstr "Général" @@ -741,12 +749,12 @@ msgstr "Sélectionnez les carnets d'adresses d'Evolution à utiliser" msgid "Name" msgstr "Nom" -#: ../sflphone-client-gnome/src/config/assistant.c:69 +#: ../sflphone-client-gnome/src/config/assistant.c:75 #, c-format msgid "This assistant is now finished." msgstr "Cet assistant est maintenant terminé." -#: ../sflphone-client-gnome/src/config/assistant.c:71 +#: ../sflphone-client-gnome/src/config/assistant.c:77 msgid "" "You can at any time check your registration state or modify your accounts " "parameters in the Options/Accounts window." @@ -754,127 +762,127 @@ msgstr "" "Vous pouvez à tout moment vérifier votre état d'enregistrement ou modifier " "les paramètres de vos comptes dans la fenêtre Options/Comptes." -#: ../sflphone-client-gnome/src/config/assistant.c:74 +#: ../sflphone-client-gnome/src/config/assistant.c:80 msgid "Alias" msgstr "Alias" -#: ../sflphone-client-gnome/src/config/assistant.c:78 +#: ../sflphone-client-gnome/src/config/assistant.c:84 msgid "Server" msgstr "Serveur" -#: ../sflphone-client-gnome/src/config/assistant.c:82 +#: ../sflphone-client-gnome/src/config/assistant.c:88 msgid "Username" msgstr "Nom d'utilisateur" -#: ../sflphone-client-gnome/src/config/assistant.c:86 +#: ../sflphone-client-gnome/src/config/assistant.c:92 msgid "Security: " msgstr "Sécurité: " -#: ../sflphone-client-gnome/src/config/assistant.c:88 +#: ../sflphone-client-gnome/src/config/assistant.c:94 msgid "SRTP/ZRTP draft-zimmermann" msgstr "SRTP/ZRTP draft-zimmermann" -#: ../sflphone-client-gnome/src/config/assistant.c:90 +#: ../sflphone-client-gnome/src/config/assistant.c:96 msgid "None" msgstr "Aucun" -#: ../sflphone-client-gnome/src/config/assistant.c:223 +#: ../sflphone-client-gnome/src/config/assistant.c:229 msgid "SFLphone account creation wizard" msgstr "Assistant de création de compte de SFLphone" -#: ../sflphone-client-gnome/src/config/assistant.c:249 +#: ../sflphone-client-gnome/src/config/assistant.c:255 msgid "Welcome to the Account creation wizard of SFLphone!" msgstr "Bienvenue dans l'assistant de création de compte de SFLphone !" -#: ../sflphone-client-gnome/src/config/assistant.c:250 +#: ../sflphone-client-gnome/src/config/assistant.c:256 msgid "This installation wizard will help you configure an account." msgstr "Cet assistant vous guidera dans la configuration d'un compte." -#: ../sflphone-client-gnome/src/config/assistant.c:264 +#: ../sflphone-client-gnome/src/config/assistant.c:270 msgid "VoIP Protocols" msgstr "Protocoles VoIP" -#: ../sflphone-client-gnome/src/config/assistant.c:264 +#: ../sflphone-client-gnome/src/config/assistant.c:270 msgid "Select an account type" msgstr "Sélectionnez un type de compte" -#: ../sflphone-client-gnome/src/config/assistant.c:266 +#: ../sflphone-client-gnome/src/config/assistant.c:272 msgid "SIP (Session Initiation Protocol)" msgstr "SIP (Session Initiation Protocol)" -#: ../sflphone-client-gnome/src/config/assistant.c:268 +#: ../sflphone-client-gnome/src/config/assistant.c:274 msgid "IAX2 (InterAsterix Exchange)" msgstr "IAX2 (InterAsterix Exchange)" -#: ../sflphone-client-gnome/src/config/assistant.c:282 +#: ../sflphone-client-gnome/src/config/assistant.c:288 msgid "Account" msgstr "Compte" -#: ../sflphone-client-gnome/src/config/assistant.c:282 +#: ../sflphone-client-gnome/src/config/assistant.c:288 msgid "Please select one of the following options" msgstr "Veuillez sélectionner une des options suivantes" -#: ../sflphone-client-gnome/src/config/assistant.c:284 +#: ../sflphone-client-gnome/src/config/assistant.c:290 msgid "Create a free SIP/IAX2 account on sflphone.org" msgstr "Créer un compte SIP/IAX2 gratuit sur sflphone.org" -#: ../sflphone-client-gnome/src/config/assistant.c:286 +#: ../sflphone-client-gnome/src/config/assistant.c:292 msgid "Register an existing SIP or IAX2 account" msgstr "Enregistrer un compte SIP ou IAX2 existant" -#: ../sflphone-client-gnome/src/config/assistant.c:299 +#: ../sflphone-client-gnome/src/config/assistant.c:306 msgid "SIP account settings" msgstr "Paramètres de compte SIP" -#: ../sflphone-client-gnome/src/config/assistant.c:299 -#: ../sflphone-client-gnome/src/config/assistant.c:407 +#: ../sflphone-client-gnome/src/config/assistant.c:306 +#: ../sflphone-client-gnome/src/config/assistant.c:419 msgid "Please fill the following information" msgstr "Veuillez remplir les champs suivants" -#: ../sflphone-client-gnome/src/config/assistant.c:365 -#: ../sflphone-client-gnome/src/config/assistant.c:394 +#: ../sflphone-client-gnome/src/config/assistant.c:376 +#: ../sflphone-client-gnome/src/config/assistant.c:405 msgid "Secure communications with _ZRTP" msgstr "Communications sécurisées avec _ZRTP" -#: ../sflphone-client-gnome/src/config/assistant.c:378 +#: ../sflphone-client-gnome/src/config/assistant.c:389 msgid "Optional email address" msgstr "Adresse courriel optionnelle" -#: ../sflphone-client-gnome/src/config/assistant.c:378 +#: ../sflphone-client-gnome/src/config/assistant.c:389 msgid "This email address will be used to send your voicemail messages." msgstr "Vos messages vocaux seront envoyés par courriel à cette adresse." -#: ../sflphone-client-gnome/src/config/assistant.c:386 +#: ../sflphone-client-gnome/src/config/assistant.c:397 msgid "_Email address" msgstr "A_dresse courriel" -#: ../sflphone-client-gnome/src/config/assistant.c:407 +#: ../sflphone-client-gnome/src/config/assistant.c:419 msgid "IAX2 account settings" msgstr "Paramètres de compte IAX2" -#: ../sflphone-client-gnome/src/config/assistant.c:480 +#: ../sflphone-client-gnome/src/config/assistant.c:496 msgid "Network Address Translation (NAT)" msgstr "Network Address Translation (NAT)" -#: ../sflphone-client-gnome/src/config/assistant.c:480 +#: ../sflphone-client-gnome/src/config/assistant.c:496 msgid "You should probably enable this if you are behind a firewall." msgstr "" "Vous devriez probablement activer cette option si vous vous trouvez derrière " "un pare-feu." -#: ../sflphone-client-gnome/src/config/assistant.c:489 +#: ../sflphone-client-gnome/src/config/assistant.c:505 msgid "E_nable STUN" msgstr "A_ctiver STUN" -#: ../sflphone-client-gnome/src/config/assistant.c:496 +#: ../sflphone-client-gnome/src/config/assistant.c:512 msgid "_STUN server" msgstr "S_erveur STUN" -#: ../sflphone-client-gnome/src/config/assistant.c:510 +#: ../sflphone-client-gnome/src/config/assistant.c:526 msgid "Account Registration" msgstr "Enregistrement du compte" -#: ../sflphone-client-gnome/src/config/assistant.c:510 +#: ../sflphone-client-gnome/src/config/assistant.c:526 msgid "Congratulations!" msgstr "Félicitations!" @@ -910,51 +918,51 @@ msgstr "Détection de l'activité de la voix" msgid "_Noise Reduction (Narrow-Band Companding)" msgstr "Réduction du bruit (Compresseur extenseur LBR)" -#: ../sflphone-client-gnome/src/config/audioconf.c:795 +#: ../sflphone-client-gnome/src/config/audioconf.c:800 msgid "Sound Manager" msgstr "Interface Audio" -#: ../sflphone-client-gnome/src/config/audioconf.c:804 +#: ../sflphone-client-gnome/src/config/audioconf.c:809 msgid "_Pulseaudio" msgstr "_Pulseaudio" -#: ../sflphone-client-gnome/src/config/audioconf.c:808 +#: ../sflphone-client-gnome/src/config/audioconf.c:813 msgid "_ALSA" msgstr "_ALSA" -#: ../sflphone-client-gnome/src/config/audioconf.c:814 +#: ../sflphone-client-gnome/src/config/audioconf.c:819 msgid "ALSA settings" msgstr "Paramètres ALSA" -#: ../sflphone-client-gnome/src/config/audioconf.c:831 +#: ../sflphone-client-gnome/src/config/audioconf.c:836 msgid "Codecs" msgstr "Codecs" -#: ../sflphone-client-gnome/src/config/audioconf.c:860 +#: ../sflphone-client-gnome/src/config/audioconf.c:865 msgid "Recordings" msgstr "Enregistrements" -#: ../sflphone-client-gnome/src/config/audioconf.c:864 +#: ../sflphone-client-gnome/src/config/audioconf.c:869 msgid "Destination folder" msgstr "Dossier de destination" -#: ../sflphone-client-gnome/src/config/audioconf.c:868 +#: ../sflphone-client-gnome/src/config/audioconf.c:873 msgid "Select a folder" msgstr "Choisissez un dossier" -#: ../sflphone-client-gnome/src/config/audioconf.c:874 +#: ../sflphone-client-gnome/src/config/audioconf.c:879 msgid "Ringtones" msgstr "Sonneries" -#: ../sflphone-client-gnome/src/config/audioconf.c:880 +#: ../sflphone-client-gnome/src/config/audioconf.c:885 msgid "_Enable ringtones" msgstr "_Activer les sonneries" -#: ../sflphone-client-gnome/src/config/audioconf.c:886 +#: ../sflphone-client-gnome/src/config/audioconf.c:891 msgid "Choose a ringtone" msgstr "Sélectionner une sonnerie" -#: ../sflphone-client-gnome/src/config/audioconf.c:892 +#: ../sflphone-client-gnome/src/config/audioconf.c:897 msgid "Audio Files" msgstr "Fichier Audio" @@ -991,7 +999,7 @@ msgstr "Réécriture des numéros appelés" msgid "_Prefix dialed numbers with" msgstr "_Préfixer les numéros composés par" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:212 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:225 msgid "" "This profile is used when you want to reach a remote peer simply by typing a " "sip URI such as <b>sip:remotepeer</b>. The settings you define here will " @@ -1002,67 +1010,59 @@ msgstr "" "sont aussi utilisé si aucun compte ne peut être attribué à un appel entrant " "ou sortant." -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:425 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:440 msgid "Desktop Notifications" msgstr "Notifications de Bureau" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:429 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:444 msgid "_Enable notifications" msgstr "_Activer les notifications" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:435 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:450 msgid "System Tray Icon" msgstr "Icône dans la barre des tâches" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:438 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:453 msgid "_Popup main window on incoming call" msgstr "Faire apparaître la fenêtre _principale lors d'appel entrant" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:443 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:457 msgid "Ne_ver popup main window" msgstr "Ne _jamais afficher la fenêtre principale" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:447 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:463 msgid "Hide SFLphone window on _startup" msgstr "_Cacher la fenêtre de SFLphone au démarrage" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:453 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:469 msgid "Calls History" msgstr "Historique des appels" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:456 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:472 msgid "_Keep my history for at least" msgstr "Garder mon historique au moins" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:467 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:483 msgid "days" msgstr "jours" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:471 -msgid "Configuration File" -msgstr "Fichier de configuration" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:473 -msgid "Store SIP credentials as MD5 hash" -msgstr "Stocker les informations d'authentification sour forme encryptée (MD5)" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:517 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:536 msgid "Preferences" msgstr "Préférences" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:542 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:561 msgid "Audio" msgstr "Audio" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:547 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:566 msgid "Address Book" msgstr "Carnet d'adresse" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:552 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:571 msgid "Hooks" msgstr "Ancrage" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:562 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:581 msgid "Direct IP calls" msgstr "Appels IP" @@ -1070,11 +1070,11 @@ msgstr "Appels IP" msgid "Advanced options for TLS" msgstr "Options avancées TLS" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:55 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:56 msgid "TLS transport" msgstr "Transport TLS" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:59 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:60 msgid "" "TLS transport can be used along with UDP for those calls that would\n" "require secure sip transactions (aka SIPS). You can configure a different\n" @@ -1087,55 +1087,55 @@ msgstr "" "TLS différent pour chaque compte. Cependant, chacun écoutera sur un port " "différent.\n" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:100 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:103 msgid "Certificate of Authority list" msgstr "Liste des autorités de certification" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:104 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:107 msgid "Choose a CA list file (optional)" msgstr "Choisir une liste d'AC (optionnel)" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:128 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:131 msgid "Public endpoint certificate file" msgstr "Fichier de certificats de l'extrémité public" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:132 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:135 msgid "Choose a public endpoint certificate (optional)" msgstr "Sélectionner le certificat de l'extrémité public" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:156 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:159 msgid "Choose a private key file (optional)" msgstr "Choisir une clé privée (optionnel)" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:178 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:181 msgid "Password for the private key" msgstr "Mot de passe pour la clé privée" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:201 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:204 msgid "TLS protocol method" msgstr "Méthode pour TLS" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:235 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:238 msgid "TLS cipher list" msgstr "Liste de cryptogramme TLS" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:244 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:247 msgid "Server name instance for outgoing TLS connection" msgstr "Instance du serveur pour les connections TLS sortantes" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:252 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:255 msgid "Negotiation timeout (sec:msec)" msgstr "Expiration de la négociation" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:269 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:272 msgid "Verify incoming certificates, as a server" msgstr "En tant que serveur, vérifier les certificats entrants" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:275 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:278 msgid "Verify certificates from answer, as a client" msgstr "En tant que client, vérifier les certificats dans les réponses" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:281 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:284 msgid "Require certificate for incoming tls connections" msgstr "Exiger un certificat pour les connexions TLS entrantes" @@ -1159,29 +1159,36 @@ msgstr "_Avertir si ZRTP n'est pas supporté" msgid "Display SAS once for hold events" msgstr "Afficher le SAS seulement une fois sur les mises en attente" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:56 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:58 msgid "Search all" msgstr "Rechercher dans tous" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:57 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:70 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:82 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:94 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:59 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:72 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:84 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:96 msgid "Click here to change the search type" msgstr "Cliquez ici pour changer le type de recherche" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:69 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:71 msgid "Search by missed call" msgstr "Rechercher dans les appels manqués" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:81 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:83 msgid "Search by incoming call" msgstr "Rechercher dans les appels entrants" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:93 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:95 msgid "Search by outgoing call" msgstr "Rechercher dans les appels sortants" +#~ msgid "Configuration File" +#~ msgstr "Fichier de configuration" + +#~ msgid "Store SIP credentials as MD5 hash" +#~ msgstr "" +#~ "Stocker les informations d'authentification sour forme encryptée (MD5)" + #~ msgid "IP call - %s" #~ msgstr "Appel IP - %s" diff --git a/lang/it/it.po b/lang/it/it.po index 52a0a6a5f3..cf8644aea9 100644 --- a/lang/it/it.po +++ b/lang/it/it.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-10-14 11:18-0400\n" +"POT-Creation-Date: 2009-12-03 10:22-0500\n" "PO-Revision-Date: 2009-10-14 17:47+0000\n" "Last-Translator: Maxime Chambreuil <maxime.chambreuil@gmail.com>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -60,25 +60,15 @@ msgstr "Server STUN non valido" msgid "Invalid" msgstr "Non valido" -#: ../sflphone-client-gnome/src/actions.c:54 -#: ../sflphone-client-gnome/src/sflnotify.c:94 -#, c-format -msgid "%d voice mail" -msgid_plural "%d voice mails" -msgstr[0] "%d messaggio vocale" -msgstr[1] "%d messaggi vocali" - -#: ../sflphone-client-gnome/src/actions.c:83 -#: ../sflphone-client-gnome/src/actions.c:919 -#: ../sflphone-client-gnome/src/actions.c:926 +#: ../sflphone-client-gnome/src/actions.c:98 msgid "Using account" msgstr "Account in uso:" -#: ../sflphone-client-gnome/src/actions.c:89 +#: ../sflphone-client-gnome/src/actions.c:104 msgid "No registered accounts" msgstr "Nessun account registrato" -#: ../sflphone-client-gnome/src/actions.c:268 +#: ../sflphone-client-gnome/src/actions.c:285 msgid "" "Unable to connect to the SFLphone server.\n" "Make sure the daemon is running." @@ -86,27 +76,23 @@ msgstr "" "Impossibile connettersi al server SFLphone.\n" "Accertarsi che il demone sia in esecuzione." -#: ../sflphone-client-gnome/src/actions.c:913 -#, c-format -msgid "IP call - %s" -msgstr "Chiamata IP diretta - %s" - -#: ../sflphone-client-gnome/src/actions.c:922 -msgid "Codec" -msgstr "Codec" +#: ../sflphone-client-gnome/src/actions.c:589 +#: ../sflphone-client-gnome/src/actions.c:911 +msgid "Direct SIP call" +msgstr "" -#: ../sflphone-client-gnome/src/actions.c:1119 +#: ../sflphone-client-gnome/src/actions.c:1103 #, c-format msgid "" "<b>Error: No audio codecs found.\n" "\n" -"</b> SFL audio codecs have to be placed in <i>%s</i> or in the " -"<b>.sflphone</b> directory in your home( <i>%s</i> )" +"</b> SFL audio codecs have to be placed in <i>%s</i> or in the <b>.sflphone</" +"b> directory in your home( <i>%s</i> )" msgstr "" "<b>Errore: Non è stato trovato alcun codec audio.</b>\n" "\n" -"I codec audio SFL devono trovarsi in <i>%s</i> o nella sottocartella " -"<b>.sflphone</b> della cartella home dell'utente (</i>%s</i>)" +"I codec audio SFL devono trovarsi in <i>%s</i> o nella sottocartella <b>." +"sflphone</b> della cartella home dell'utente (</i>%s</i>)" #: ../sflphone-client-gnome/src/errors.c:29 msgid "" @@ -147,53 +133,53 @@ msgstr "Ci sono chiamate in corso." msgid "Do you still want to quit?" msgstr "Vuoi veramente uscire?" -#: ../sflphone-client-gnome/src/mainwindow.c:299 +#: ../sflphone-client-gnome/src/mainwindow.c:298 msgid "SFLphone Error" msgstr "Errore SFLphone" -#: ../sflphone-client-gnome/src/mainwindow.c:391 +#: ../sflphone-client-gnome/src/mainwindow.c:392 #, c-format msgid "ZRTP is not supported by peer %s\n" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:392 +#: ../sflphone-client-gnome/src/mainwindow.c:393 msgid "Secure Communication Unavailable" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:393 -#: ../sflphone-client-gnome/src/mainwindow.c:415 +#: ../sflphone-client-gnome/src/mainwindow.c:394 +#: ../sflphone-client-gnome/src/mainwindow.c:416 msgid "Continue" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:394 -#: ../sflphone-client-gnome/src/mainwindow.c:416 -#: ../sflphone-client-gnome/src/mainwindow.c:430 +#: ../sflphone-client-gnome/src/mainwindow.c:395 +#: ../sflphone-client-gnome/src/mainwindow.c:417 +#: ../sflphone-client-gnome/src/mainwindow.c:431 msgid "Stop Call" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:413 +#: ../sflphone-client-gnome/src/mainwindow.c:414 #, c-format msgid "" "A %s error forced the call with %s to fall under unencrypted mode.\n" "Exact reason: %s\n" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:414 +#: ../sflphone-client-gnome/src/mainwindow.c:415 msgid "ZRTP negotiation failed" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:427 +#: ../sflphone-client-gnome/src/mainwindow.c:428 #, c-format msgid "" "%s wants to stop using secure communication. Confirm will resume " "conversation without SRTP.\n" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:428 +#: ../sflphone-client-gnome/src/mainwindow.c:429 msgid "Confirm Go Clear" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:429 +#: ../sflphone-client-gnome/src/mainwindow.c:430 msgid "Confirm" msgstr "" @@ -208,6 +194,13 @@ msgstr "Account %s: %s" msgid "<i>From</i> %s" msgstr "<i>Da</i> %s" +#: ../sflphone-client-gnome/src/sflnotify.c:94 +#, c-format +msgid "%d voice mail" +msgid_plural "%d voice mails" +msgstr[0] "%d messaggio vocale" +msgstr[1] "%d messaggi vocali" + #: ../sflphone-client-gnome/src/sflnotify.c:111 #, c-format msgid "Calling with %s account <i>%s</i>" @@ -255,15 +248,15 @@ msgstr "Volume altoparlante" msgid "Mic volume" msgstr "Volume microfono" -#: ../sflphone-client-gnome/src/statusicon.c:91 +#: ../sflphone-client-gnome/src/statusicon.c:96 msgid "_Show main window" msgstr "Mostra la finestra principale" -#: ../sflphone-client-gnome/src/statusicon.c:126 +#: ../sflphone-client-gnome/src/statusicon.c:131 msgid "SFLphone" msgstr "SFLphone" -#: ../sflphone-client-gnome/src/statusicon.c:127 +#: ../sflphone-client-gnome/src/statusicon.c:132 #, c-format msgid "%i account configured" msgid_plural "%i accounts configured" @@ -271,202 +264,398 @@ msgstr[0] "%i account configurato" msgstr[1] "%i account configurati" #: ../sflphone-client-gnome/src/toolbar.c:38 -#: ../sflphone-client-gnome/src/uimanager.c:750 +#: ../sflphone-client-gnome/src/uimanager.c:693 +#: ../sflphone-client-gnome/src/uimanager.c:727 msgid "Voicemail" msgstr "Segreteria telefonica" -#: ../sflphone-client-gnome/src/uimanager.c:403 +#: ../sflphone-client-gnome/src/uimanager.c:117 +msgid "No address book selected" +msgstr "Rubrica" + +#: ../sflphone-client-gnome/src/uimanager.c:137 +#: ../sflphone-client-gnome/src/uimanager.c:756 +msgid "Address book" +msgstr "Rubrica" + +#: ../sflphone-client-gnome/src/uimanager.c:279 +msgid "Voicemail (%i)" +msgstr "Segreteria telefonica (%i)" + +#: ../sflphone-client-gnome/src/uimanager.c:342 msgid "SFLphone is a VoIP client compatible with SIP and IAX2 protocols." msgstr "SFLphone è un client VoIP compatibile con i protocolli SIP e IAX2." -#: ../sflphone-client-gnome/src/uimanager.c:406 +#: ../sflphone-client-gnome/src/uimanager.c:345 msgid "About SFLphone" msgstr "Informazioni su SFLphone" -#: ../sflphone-client-gnome/src/uimanager.c:1028 +#: ../sflphone-client-gnome/src/uimanager.c:719 +msgid "Call" +msgstr "_Chiama" + +#: ../sflphone-client-gnome/src/uimanager.c:720 +#: ../sflphone-client-gnome/src/uimanager.c:1184 +msgid "_New call" +msgstr "Chiama" + +#: ../sflphone-client-gnome/src/uimanager.c:720 +msgid "Place a new call" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:721 +#: ../sflphone-client-gnome/src/uimanager.c:979 msgid "_Pick up" msgstr "Rispondi" -#: ../sflphone-client-gnome/src/uimanager.c:1040 -#: ../sflphone-client-gnome/src/uimanager.c:1081 +#: ../sflphone-client-gnome/src/uimanager.c:721 +msgid "Answer the call" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:722 +#: ../sflphone-client-gnome/src/uimanager.c:991 +#: ../sflphone-client-gnome/src/uimanager.c:1032 msgid "_Hang up" msgstr "_Chiudi" -#: ../sflphone-client-gnome/src/uimanager.c:1052 -#: ../sflphone-client-gnome/src/uimanager.c:1093 -msgid "On _Hold" +#: ../sflphone-client-gnome/src/uimanager.c:722 +msgid "Finish the call" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:723 +msgid "O_n hold" msgstr "Attesa" -#: ../sflphone-client-gnome/src/uimanager.c:1064 +#: ../sflphone-client-gnome/src/uimanager.c:723 +msgid "Place the call on hold" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:724 +msgid "O_ff hold" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:724 +msgid "Place the call off hold" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:725 +#: ../sflphone-client-gnome/src/uimanager.c:1015 msgid "_Record" msgstr "_Registra" -#: ../sflphone-client-gnome/src/uimanager.c:1154 -msgid "_Call back" +#: ../sflphone-client-gnome/src/uimanager.c:725 +msgid "Record the current conversation" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:1226 -msgid "_New call" -msgstr "Chiama" +#: ../sflphone-client-gnome/src/uimanager.c:726 +msgid "Configuration _Assistant" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:726 +msgid "Run the configuration assistant" +msgstr "Errore di configurazione STUN" + +#: ../sflphone-client-gnome/src/uimanager.c:727 +msgid "Call your voicemail" +msgstr "%d messaggio vocale" + +#: ../sflphone-client-gnome/src/uimanager.c:728 +msgid "_Close" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:728 +msgid "Minimize to system tray" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:729 +msgid "_Quit" +msgstr "_Modifica" + +#: ../sflphone-client-gnome/src/uimanager.c:729 +msgid "Quit the program" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:732 +msgid "_Edit" +msgstr "_Modifica" + +#: ../sflphone-client-gnome/src/uimanager.c:733 +msgid "_Copy" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:733 +msgid "Copy the selection" +msgstr "Elimina l'account selezionato" + +#: ../sflphone-client-gnome/src/uimanager.c:734 +msgid "_Paste" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:734 +msgid "Paste the clipboard" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:735 +msgid "Clear _history" +msgstr "Cancella la cronologia" + +#: ../sflphone-client-gnome/src/uimanager.c:735 +msgid "Clear the call history" +msgstr "Cancella la cronologia" + +#: ../sflphone-client-gnome/src/uimanager.c:736 +msgid "_Accounts" +msgstr "_Account" + +#: ../sflphone-client-gnome/src/uimanager.c:736 +msgid "Edit your accounts" +msgstr "Account attivo" + +#: ../sflphone-client-gnome/src/uimanager.c:737 +msgid "_Preferences" +msgstr "Preferenze" + +#: ../sflphone-client-gnome/src/uimanager.c:737 +msgid "Change your preferences" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:740 +msgid "_View" +msgstr "_Visualizza" + +#: ../sflphone-client-gnome/src/uimanager.c:743 +msgid "_Help" +msgstr "_Aiuto" + +#: ../sflphone-client-gnome/src/uimanager.c:744 +msgid "Contents" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:744 +msgid "Open the manual" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:745 +msgid "About this application" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:751 +msgid "_Transfer" +msgstr "Inoltra" + +#: ../sflphone-client-gnome/src/uimanager.c:751 +msgid "Transfer the call" +msgstr "Inoltra a: " -#: ../sflphone-client-gnome/src/uimanager.c:1300 +#: ../sflphone-client-gnome/src/uimanager.c:752 +msgid "_Show toolbar" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:752 +msgid "Show the toolbar" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:753 +msgid "_Dialpad" +msgstr "Mostra tastiera" + +#: ../sflphone-client-gnome/src/uimanager.c:753 +msgid "Show the dialpad" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:754 +msgid "_Volume controls" +msgstr "Mostra i controlli del volume" + +#: ../sflphone-client-gnome/src/uimanager.c:754 +msgid "Show the volume controls" +msgstr "Mostra i controlli del volume" + +#: ../sflphone-client-gnome/src/uimanager.c:755 +msgid "_History" +msgstr "Cronologia" + +#: ../sflphone-client-gnome/src/uimanager.c:755 +msgid "Calls history" +msgstr "Cronologia chiamate" + +#: ../sflphone-client-gnome/src/uimanager.c:756 +msgid "_Address book" +msgstr "Rubrica" + +#: ../sflphone-client-gnome/src/uimanager.c:1003 +#: ../sflphone-client-gnome/src/uimanager.c:1044 +msgid "On _Hold" +msgstr "Attesa" + +#: ../sflphone-client-gnome/src/uimanager.c:1107 +msgid "_Call back" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:1258 msgid "Edit phone number" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:1311 +#: ../sflphone-client-gnome/src/uimanager.c:1269 msgid "Edit the phone number before making a call" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:164 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:180 msgid "Account Parameters" msgstr "Parametri account" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:173 -#: ../sflphone-client-gnome/src/config/assistant.c:294 -#: ../sflphone-client-gnome/src/config/assistant.c:402 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:189 +#: ../sflphone-client-gnome/src/config/assistant.c:314 +#: ../sflphone-client-gnome/src/config/assistant.c:427 msgid "_Alias" msgstr "_Pseudonimo" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:181 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:197 msgid "_Protocol" msgstr "_Protocollo" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:199 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:215 msgid "Unknown" msgstr "Sconosciuto" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:209 -#: ../sflphone-client-gnome/src/config/assistant.c:302 -#: ../sflphone-client-gnome/src/config/assistant.c:410 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:225 +#: ../sflphone-client-gnome/src/config/assistant.c:322 +#: ../sflphone-client-gnome/src/config/assistant.c:435 msgid "_Host name" msgstr "Nome _host" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:217 -#: ../sflphone-client-gnome/src/config/assistant.c:310 -#: ../sflphone-client-gnome/src/config/assistant.c:418 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:233 +#: ../sflphone-client-gnome/src/config/assistant.c:330 +#: ../sflphone-client-gnome/src/config/assistant.c:443 msgid "_User name" msgstr "Nome _utente" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:234 -#: ../sflphone-client-gnome/src/config/assistant.c:326 -#: ../sflphone-client-gnome/src/config/assistant.c:433 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:250 +#: ../sflphone-client-gnome/src/config/assistant.c:346 +#: ../sflphone-client-gnome/src/config/assistant.c:458 msgid "_Password" msgstr "_Password" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:254 -#: ../sflphone-client-gnome/src/config/assistant.c:344 -#: ../sflphone-client-gnome/src/config/assistant.c:449 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:270 +#: ../sflphone-client-gnome/src/config/assistant.c:363 +#: ../sflphone-client-gnome/src/config/assistant.c:473 +msgid "Show password" +msgstr "Password" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:274 +#: ../sflphone-client-gnome/src/config/assistant.c:368 +#: ../sflphone-client-gnome/src/config/assistant.c:478 msgid "_Voicemail number" msgstr "Numero segreteria telefonica" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:340 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:361 msgid "Authentication" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:341 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:362 msgid "Secret" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:466 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:605 msgid "Credential" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:501 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:640 msgid "Authentication name" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:512 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:651 msgid "Password" msgstr "Password" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:535 -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:909 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:201 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:674 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1056 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:321 msgid "Security" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:547 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:213 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:687 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:333 msgid "Use TLS transport (sips)" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:552 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:218 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:693 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:338 msgid "SRTP key exchange" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:558 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:224 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:699 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:344 msgid "Disabled" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:674 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:795 msgid "Registration" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:679 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:800 msgid "Registration expire" msgstr "Scadenza registrazione" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:687 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:809 msgid "_Comply with RFC 3263" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:693 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:463 -msgid "Network" -msgstr "Rete" +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:816 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:234 +msgid "Network Interface" +msgstr "Rete irraggiungibile" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:707 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:830 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:249 msgid "Local address" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:744 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:880 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:301 msgid "Local port" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:752 -msgid "Set published address and port:" +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:893 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:928 +msgid "Published address" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:756 -msgid "Using STUN " +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:899 +msgid "Using STUN" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:761 -msgid "Same as local parameters" +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:906 +msgid "STUN server URL" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:764 -msgid "Manually" +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:914 +msgid "Same as local parameters" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:769 -msgid "Published address" +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:917 +msgid "Set published address and port:" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:777 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:936 msgid "Published port" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:785 -msgid "STUN server URL" -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:880 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1027 msgid "Account settings" msgstr "Impostazioni dell'account" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:899 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1046 msgid "Basic" msgstr "Generale" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:904 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1051 msgid "Advanced" msgstr "Avanzate" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:169 -msgid "Server returned \"" +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:164 +#, c-format +msgid "Server returned \"%s\" (%d)" msgstr "" #: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:389 @@ -485,32 +674,19 @@ msgstr "Account" msgid "Configured Accounts" msgstr "Account configurati" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:505 -msgid "There " -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:506 -msgid "is " -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:506 -msgid "are " -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:508 -msgid " active account" -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:509 -msgid "s" -msgstr "" +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:501 +#, c-format +msgid "There is %d active account" +msgid_plural "There are %d active accounts" +msgstr[0] "" +msgstr[1] "" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:514 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:507 msgid "You have no active account" msgstr "" #: ../sflphone-client-gnome/src/config/addressbook-config.c:306 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:443 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:556 msgid "General" msgstr "" @@ -555,228 +731,223 @@ msgid "Select which Evolution address books to use" msgstr "Selezionare la rubrica di Evolution da usare" #: ../sflphone-client-gnome/src/config/addressbook-config.c:404 -#: ../sflphone-client-gnome/src/config/audioconf.c:578 +#: ../sflphone-client-gnome/src/config/audioconf.c:577 msgid "Name" msgstr "Nome" -#: ../sflphone-client-gnome/src/config/assistant.c:69 +#: ../sflphone-client-gnome/src/config/assistant.c:75 #, c-format msgid "This assistant is now finished." msgstr "La procedura guidata è terminata." -#: ../sflphone-client-gnome/src/config/assistant.c:71 +#: ../sflphone-client-gnome/src/config/assistant.c:77 msgid "" "You can at any time check your registration state or modify your accounts " "parameters in the Options/Accounts window." msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:74 +#: ../sflphone-client-gnome/src/config/assistant.c:80 msgid "Alias" msgstr "Pseudonimo" -#: ../sflphone-client-gnome/src/config/assistant.c:78 +#: ../sflphone-client-gnome/src/config/assistant.c:84 msgid "Server" msgstr "Server" -#: ../sflphone-client-gnome/src/config/assistant.c:82 +#: ../sflphone-client-gnome/src/config/assistant.c:88 msgid "Username" msgstr "Nome utente" -#: ../sflphone-client-gnome/src/config/assistant.c:86 +#: ../sflphone-client-gnome/src/config/assistant.c:92 msgid "Security: " msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:88 +#: ../sflphone-client-gnome/src/config/assistant.c:94 msgid "SRTP/ZRTP draft-zimmermann" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:90 -#: ../sflphone-client-gnome/src/config/assistant.c:182 +#: ../sflphone-client-gnome/src/config/assistant.c:96 msgid "None" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:210 +#: ../sflphone-client-gnome/src/config/assistant.c:229 msgid "SFLphone account creation wizard" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:236 +#: ../sflphone-client-gnome/src/config/assistant.c:255 msgid "Welcome to the Account creation wizard of SFLphone!" msgstr "" "Benvenuti alla procedura guidata per la creazione di un account SFLphone" -#: ../sflphone-client-gnome/src/config/assistant.c:237 +#: ../sflphone-client-gnome/src/config/assistant.c:256 msgid "This installation wizard will help you configure an account." msgstr "Questa procedura permetterà di configurare un account." -#: ../sflphone-client-gnome/src/config/assistant.c:251 +#: ../sflphone-client-gnome/src/config/assistant.c:270 msgid "VoIP Protocols" msgstr "Protocolli VoIP" -#: ../sflphone-client-gnome/src/config/assistant.c:251 +#: ../sflphone-client-gnome/src/config/assistant.c:270 msgid "Select an account type" msgstr "Selezionare un tipo di account" -#: ../sflphone-client-gnome/src/config/assistant.c:253 +#: ../sflphone-client-gnome/src/config/assistant.c:272 msgid "SIP (Session Initiation Protocol)" msgstr "SIP (Session Initiation Protocol)" -#: ../sflphone-client-gnome/src/config/assistant.c:255 +#: ../sflphone-client-gnome/src/config/assistant.c:274 msgid "IAX2 (InterAsterix Exchange)" msgstr "IAX2 (InterAsterix Exchange)" -#: ../sflphone-client-gnome/src/config/assistant.c:269 +#: ../sflphone-client-gnome/src/config/assistant.c:288 msgid "Account" msgstr "Account" -#: ../sflphone-client-gnome/src/config/assistant.c:269 +#: ../sflphone-client-gnome/src/config/assistant.c:288 msgid "Please select one of the following options" msgstr "Scegliere una delle seguenti opzioni" -#: ../sflphone-client-gnome/src/config/assistant.c:271 +#: ../sflphone-client-gnome/src/config/assistant.c:290 msgid "Create a free SIP/IAX2 account on sflphone.org" msgstr "Creare un account SIP/IAX2 gratuito su sflphone.org" -#: ../sflphone-client-gnome/src/config/assistant.c:273 +#: ../sflphone-client-gnome/src/config/assistant.c:292 msgid "Register an existing SIP or IAX2 account" msgstr "Registrare un account SIP o IAX2 esistente" -#: ../sflphone-client-gnome/src/config/assistant.c:286 +#: ../sflphone-client-gnome/src/config/assistant.c:306 msgid "SIP account settings" msgstr "Impostazioni account SIP" -#: ../sflphone-client-gnome/src/config/assistant.c:286 -#: ../sflphone-client-gnome/src/config/assistant.c:394 +#: ../sflphone-client-gnome/src/config/assistant.c:306 +#: ../sflphone-client-gnome/src/config/assistant.c:419 msgid "Please fill the following information" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:352 -#: ../sflphone-client-gnome/src/config/assistant.c:381 +#: ../sflphone-client-gnome/src/config/assistant.c:376 +#: ../sflphone-client-gnome/src/config/assistant.c:405 msgid "Secure communications with _ZRTP" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:365 +#: ../sflphone-client-gnome/src/config/assistant.c:389 msgid "Optional email address" msgstr "Indirizzo email opzionale" -#: ../sflphone-client-gnome/src/config/assistant.c:365 +#: ../sflphone-client-gnome/src/config/assistant.c:389 msgid "This email address will be used to send your voicemail messages." msgstr "" "L'indirizzo email sarà usato per l'invio dei messaggi della segreteria " "telefonica." -#: ../sflphone-client-gnome/src/config/assistant.c:373 +#: ../sflphone-client-gnome/src/config/assistant.c:397 msgid "_Email address" msgstr "Indirizzo _email" -#: ../sflphone-client-gnome/src/config/assistant.c:394 +#: ../sflphone-client-gnome/src/config/assistant.c:419 msgid "IAX2 account settings" msgstr "Impostazioni account IAX2" -#: ../sflphone-client-gnome/src/config/assistant.c:467 +#: ../sflphone-client-gnome/src/config/assistant.c:496 msgid "Network Address Translation (NAT)" msgstr "Network Address Translation (NAT)" -#: ../sflphone-client-gnome/src/config/assistant.c:467 +#: ../sflphone-client-gnome/src/config/assistant.c:496 msgid "You should probably enable this if you are behind a firewall." msgstr "Dovrebbe essere abilitato se ci si trova dietro ad un firewall." -#: ../sflphone-client-gnome/src/config/assistant.c:476 +#: ../sflphone-client-gnome/src/config/assistant.c:505 msgid "E_nable STUN" msgstr "Abilita STUN" -#: ../sflphone-client-gnome/src/config/assistant.c:483 +#: ../sflphone-client-gnome/src/config/assistant.c:512 msgid "_STUN server" msgstr "Server STUN" -#: ../sflphone-client-gnome/src/config/assistant.c:497 +#: ../sflphone-client-gnome/src/config/assistant.c:526 msgid "Account Registration" msgstr "Registrazione account" -#: ../sflphone-client-gnome/src/config/assistant.c:497 +#: ../sflphone-client-gnome/src/config/assistant.c:526 msgid "Congratulations!" msgstr "Congratulazioni!" -#: ../sflphone-client-gnome/src/config/audioconf.c:583 +#: ../sflphone-client-gnome/src/config/audioconf.c:582 msgid "Frequency" msgstr "Frequenza" -#: ../sflphone-client-gnome/src/config/audioconf.c:588 +#: ../sflphone-client-gnome/src/config/audioconf.c:587 msgid "Bitrate" msgstr "Bitrate" -#: ../sflphone-client-gnome/src/config/audioconf.c:593 +#: ../sflphone-client-gnome/src/config/audioconf.c:592 msgid "Bandwidth" msgstr "Banda" -#: ../sflphone-client-gnome/src/config/audioconf.c:673 +#: ../sflphone-client-gnome/src/config/audioconf.c:670 msgid "ALSA plugin" msgstr "Plugin ALSA" -#: ../sflphone-client-gnome/src/config/audioconf.c:695 +#: ../sflphone-client-gnome/src/config/audioconf.c:692 msgid "Output" msgstr "Uscita" -#: ../sflphone-client-gnome/src/config/audioconf.c:717 +#: ../sflphone-client-gnome/src/config/audioconf.c:714 msgid "Input" msgstr "Ingresso" -#: ../sflphone-client-gnome/src/config/audioconf.c:752 +#: ../sflphone-client-gnome/src/config/audioconf.c:749 msgid "_Voice Activity Detection" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:762 +#: ../sflphone-client-gnome/src/config/audioconf.c:759 msgid "_Noise Reduction (Narrow-Band Companding)" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:798 +#: ../sflphone-client-gnome/src/config/audioconf.c:800 msgid "Sound Manager" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:807 +#: ../sflphone-client-gnome/src/config/audioconf.c:809 msgid "_Pulseaudio" msgstr "_Pulseaudio" -#: ../sflphone-client-gnome/src/config/audioconf.c:811 +#: ../sflphone-client-gnome/src/config/audioconf.c:813 msgid "_ALSA" msgstr "_ALSA" -#: ../sflphone-client-gnome/src/config/audioconf.c:816 -msgid "_Mute other applications during a call" -msgstr "Spegni l'audio delle altre applicazioni durante una chiamata" - -#: ../sflphone-client-gnome/src/config/audioconf.c:823 +#: ../sflphone-client-gnome/src/config/audioconf.c:819 msgid "ALSA settings" msgstr "Impostazioni ALSA" -#: ../sflphone-client-gnome/src/config/audioconf.c:840 +#: ../sflphone-client-gnome/src/config/audioconf.c:836 msgid "Codecs" msgstr "Codec" -#: ../sflphone-client-gnome/src/config/audioconf.c:869 +#: ../sflphone-client-gnome/src/config/audioconf.c:865 msgid "Recordings" msgstr "Registrazioni" -#: ../sflphone-client-gnome/src/config/audioconf.c:873 +#: ../sflphone-client-gnome/src/config/audioconf.c:869 msgid "Destination folder" msgstr "Cartella di destinazione" -#: ../sflphone-client-gnome/src/config/audioconf.c:877 +#: ../sflphone-client-gnome/src/config/audioconf.c:873 msgid "Select a folder" msgstr "Seleziona una cartella" -#: ../sflphone-client-gnome/src/config/audioconf.c:883 +#: ../sflphone-client-gnome/src/config/audioconf.c:879 msgid "Ringtones" msgstr "Suonerie" -#: ../sflphone-client-gnome/src/config/audioconf.c:889 +#: ../sflphone-client-gnome/src/config/audioconf.c:885 msgid "_Enable ringtones" msgstr "Abilita suonerie" -#: ../sflphone-client-gnome/src/config/audioconf.c:895 +#: ../sflphone-client-gnome/src/config/audioconf.c:891 msgid "Choose a ringtone" msgstr "Selezionare una suoneria" -#: ../sflphone-client-gnome/src/config/audioconf.c:901 +#: ../sflphone-client-gnome/src/config/audioconf.c:897 msgid "Audio Files" msgstr "File audio" @@ -813,86 +984,66 @@ msgstr "Riscrittura numero telefonico" msgid "_Prefix dialed numbers with" msgstr "Prefisso da aggiungere ai numeri da chiamare" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:195 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:225 msgid "" "This profile is used when you want to reach a remote peer simply by typing a " "sip URI such as <b>sip:remotepeer</b>. The settings you define here will " "also be used if no account can be matched to an incoming or outgoing call." msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:274 -msgid "SIP Port" -msgstr "SIP Port" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:281 -msgid "UDP Transport" -msgstr "" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:319 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:440 msgid "Desktop Notifications" msgstr "Notifiche" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:323 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:444 msgid "_Enable notifications" msgstr "Abilita notifiche" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:329 -msgid "Enable voicemail _notifications" -msgstr "Abilita notifiche messaggi vocali" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:341 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:450 msgid "System Tray Icon" msgstr "Icona per area di notifica" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:344 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:453 msgid "_Popup main window on incoming call" msgstr "Mostra la finestra principale all'arrivo delle chiamate" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:349 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:457 msgid "Ne_ver popup main window" msgstr "Non mostrare mai la finestra principale" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:353 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:463 msgid "Hide SFLphone window on _startup" msgstr "Nascondi la finestra di SFLphone all'avvio" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:359 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:469 msgid "Calls History" msgstr "Cronologia chiamate" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:362 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:472 msgid "_Keep my history for at least" msgstr "Mantieni la cronologia per almeno" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:373 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:483 msgid "days" msgstr "giorni" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:377 -msgid "Configuration File" -msgstr "" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:379 -msgid "Store SIP credentials as MD5 hash" -msgstr "" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:423 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:536 msgid "Preferences" msgstr "Preferenze" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:448 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:561 msgid "Audio" msgstr "Audio" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:453 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:566 msgid "Address Book" msgstr "Rubrica" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:458 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:571 msgid "Hooks" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:468 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:581 msgid "Direct IP calls" msgstr "" @@ -900,11 +1051,11 @@ msgstr "" msgid "Advanced options for TLS" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:55 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:56 msgid "TLS transport" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:59 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:60 msgid "" "TLS transport can be used along with UDP for those calls that would\n" "require secure sip transactions (aka SIPS). You can configure a different\n" @@ -913,55 +1064,55 @@ msgid "" "port, different one from each other\n" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:100 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:103 msgid "Certificate of Authority list" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:104 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:107 msgid "Choose a CA list file (optional)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:115 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:131 msgid "Public endpoint certificate file" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:119 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:135 msgid "Choose a public endpoint certificate (optional)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:134 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:159 msgid "Choose a private key file (optional)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:145 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:181 msgid "Password for the private key" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:168 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:204 msgid "TLS protocol method" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:202 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:238 msgid "TLS cipher list" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:211 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:247 msgid "Server name instance for outgoing TLS connection" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:219 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:255 msgid "Negotiation timeout (sec:msec)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:236 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:272 msgid "Verify incoming certificates, as a server" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:242 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:278 msgid "Verify certificates from answer, as a client" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:248 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:284 msgid "Require certificate for incoming tls connections" msgstr "" @@ -969,57 +1120,69 @@ msgstr "" msgid "ZRTP Options" msgstr "" -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:68 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:69 msgid "Send Hello Hash in S_DP" msgstr "" -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:74 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:75 msgid "Ask User to Confirm SAS" msgstr "" -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:80 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:81 msgid "_Warn if ZRTP not supported" msgstr "" -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:86 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:87 msgid "Display SAS once for hold events" msgstr "" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:56 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:58 msgid "Search all" msgstr "Cerca tra tutte le chiamate" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:57 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:70 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:82 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:94 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:59 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:72 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:84 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:96 msgid "Click here to change the search type" msgstr "Fare clic qui per cambiare il tipo di ricerca" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:69 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:71 msgid "Search by missed call" msgstr "Cerca tra le chiamate perse" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:81 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:83 msgid "Search by incoming call" msgstr "Cerca tra le chiamate ricevute" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:93 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:95 msgid "Search by outgoing call" msgstr "Cerca tra le chiamate effettuate" +#~ msgid "IP call - %s" +#~ msgstr "Chiamata IP diretta - %s" + +#~ msgid "Codec" +#~ msgstr "Codec" + +#~ msgid "Network" +#~ msgstr "Rete" + +#~ msgid "_Mute other applications during a call" +#~ msgstr "Spegni l'audio delle altre applicazioni durante una chiamata" + +#~ msgid "SIP Port" +#~ msgstr "SIP Port" + +#~ msgid "Enable voicemail _notifications" +#~ msgstr "Abilita notifiche messaggi vocali" + #~ msgid "(C) 2009 Savoir-faire Linux" #~ msgstr "(C) 2009 Savoir-faire Linux" #~ msgid "Jérémy Quentin" #~ msgstr "Jérémy Quentin" -#~ msgid "Address book" -#~ msgstr "Rubrica" - -#~ msgid "Call history" -#~ msgstr "Cronologia chiamate" - #~ msgid "Hang up" #~ msgstr "Chiudi" @@ -1065,24 +1228,6 @@ msgstr "Cerca tra le chiamate effettuate" #~ msgid "Enable notifications" #~ msgstr "Attiva le notifiche" -#~ msgid "History" -#~ msgstr "Cronologia" - -#~ msgid "_Call" -#~ msgstr "_Chiama" - -#~ msgid "_Help" -#~ msgstr "_Aiuto" - -#~ msgid "_View" -#~ msgstr "_Visualizza" - -#~ msgid "_Edit" -#~ msgstr "_Modifica" - -#~ msgid "_Accounts" -#~ msgstr "_Account" - #~ msgid "Port" #~ msgstr "Port" @@ -1095,9 +1240,6 @@ msgstr "Cerca tra le chiamate effettuate" #~ msgid "You have an incoming call from" #~ msgstr "Chiamata in arrivo da" -#~ msgid "Transfer" -#~ msgstr "Inoltra" - #~ msgid "Hold on" #~ msgstr "Attesa" @@ -1110,15 +1252,6 @@ msgstr "Cerca tra le chiamate effettuate" #~ msgid "Command to run" #~ msgstr "Comando da eseguire" -#~ msgid "Display volume controls" -#~ msgstr "Mostra i controlli del volume" - -#~ msgid "Display dialpad" -#~ msgstr "Mostra tastiera" - -#~ msgid "Clear _history" -#~ msgstr "Cancella la cronologia" - #~ msgid "_Enable this account" #~ msgstr "Abilita questo account" @@ -1131,9 +1264,6 @@ msgstr "Cerca tra le chiamate effettuate" #~ msgid "Stun Server" #~ msgstr "Server STUN" -#~ msgid "Transfer to : " -#~ msgstr "Inoltra a: " - #~ msgid "Address book loading..." #~ msgstr "Caricamento rubrica..." @@ -1149,9 +1279,6 @@ msgstr "Cerca tra le chiamate effettuate" #~ msgid "Incoming call" #~ msgstr "Chiamata in arrivo" -#~ msgid "Remove the selected account" -#~ msgstr "Elimina l'account selezionato" - #~ msgid "Display photo if available" #~ msgstr "Mostrare foto se disponibile" @@ -1167,9 +1294,6 @@ msgstr "Cerca tra le chiamate effettuate" #~ msgid "Show main window" #~ msgstr "Mostra finestra principale" -#~ msgid "Clear history" -#~ msgstr "Cancella la cronologia" - #~ msgid "Prefix dialed numbers with" #~ msgstr "Prefisso da aggiungere al numero da chiamare" @@ -1180,8 +1304,8 @@ msgstr "Cerca tra le chiamate effettuate" #~ msgstr "Scadenza registrazione" #~ msgid "" -#~ "Pressing \"apply\" will restart the network layer. Otherwise, SFLPhone would " -#~ "have to be restarted." +#~ "Pressing \"apply\" will restart the network layer. Otherwise, SFLPhone " +#~ "would have to be restarted." #~ msgstr "" #~ "Premendo il tasto \"Applica\" il modulo di rete verrà riavviato. In " #~ "alternativa occorrerebbe riavviare SFLphone." @@ -1202,5 +1326,5 @@ msgstr "Cerca tra le chiamate effettuate" #~ msgctxt "EMAIL OF TRANSLATORS" #~ msgid "Your emails" #~ msgstr "" -#~ ",,,maxime.chambreuil@gmail.com,,,,maxime.chambreuil@gmail.com,,,,maxime.chamb" -#~ "reuil@gmail.com" +#~ ",,,maxime.chambreuil@gmail.com,,,,maxime.chambreuil@gmail.com,,,,maxime." +#~ "chambreuil@gmail.com" diff --git a/lang/ko/ko.po b/lang/ko/ko.po index 977d90d869..c7ebb3c80f 100644 --- a/lang/ko/ko.po +++ b/lang/ko/ko.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: sflphone\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-10-14 11:18-0400\n" +"POT-Creation-Date: 2009-12-03 10:22-0500\n" "PO-Revision-Date: 2009-10-26 20:46+0000\n" "Last-Translator: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com>\n" "Language-Team: Korean <ko@li.org>\n" @@ -60,46 +60,32 @@ msgstr "" msgid "Invalid" msgstr "" -#: ../sflphone-client-gnome/src/actions.c:54 -#: ../sflphone-client-gnome/src/sflnotify.c:94 -#, c-format -msgid "%d voice mail" -msgid_plural "%d voice mails" -msgstr[0] "" -msgstr[1] "" - -#: ../sflphone-client-gnome/src/actions.c:83 -#: ../sflphone-client-gnome/src/actions.c:919 -#: ../sflphone-client-gnome/src/actions.c:926 +#: ../sflphone-client-gnome/src/actions.c:98 msgid "Using account" msgstr "" -#: ../sflphone-client-gnome/src/actions.c:89 +#: ../sflphone-client-gnome/src/actions.c:104 msgid "No registered accounts" msgstr "" -#: ../sflphone-client-gnome/src/actions.c:268 +#: ../sflphone-client-gnome/src/actions.c:285 msgid "" "Unable to connect to the SFLphone server.\n" "Make sure the daemon is running." msgstr "" -#: ../sflphone-client-gnome/src/actions.c:913 -#, c-format -msgid "IP call - %s" -msgstr "" - -#: ../sflphone-client-gnome/src/actions.c:922 -msgid "Codec" +#: ../sflphone-client-gnome/src/actions.c:589 +#: ../sflphone-client-gnome/src/actions.c:911 +msgid "Direct SIP call" msgstr "" -#: ../sflphone-client-gnome/src/actions.c:1119 +#: ../sflphone-client-gnome/src/actions.c:1103 #, c-format msgid "" "<b>Error: No audio codecs found.\n" "\n" -"</b> SFL audio codecs have to be placed in <i>%s</i> or in the " -"<b>.sflphone</b> directory in your home( <i>%s</i> )" +"</b> SFL audio codecs have to be placed in <i>%s</i> or in the <b>.sflphone</" +"b> directory in your home( <i>%s</i> )" msgstr "" #: ../sflphone-client-gnome/src/errors.c:29 @@ -135,53 +121,53 @@ msgstr "" msgid "Do you still want to quit?" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:299 +#: ../sflphone-client-gnome/src/mainwindow.c:298 msgid "SFLphone Error" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:391 +#: ../sflphone-client-gnome/src/mainwindow.c:392 #, c-format msgid "ZRTP is not supported by peer %s\n" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:392 +#: ../sflphone-client-gnome/src/mainwindow.c:393 msgid "Secure Communication Unavailable" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:393 -#: ../sflphone-client-gnome/src/mainwindow.c:415 +#: ../sflphone-client-gnome/src/mainwindow.c:394 +#: ../sflphone-client-gnome/src/mainwindow.c:416 msgid "Continue" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:394 -#: ../sflphone-client-gnome/src/mainwindow.c:416 -#: ../sflphone-client-gnome/src/mainwindow.c:430 +#: ../sflphone-client-gnome/src/mainwindow.c:395 +#: ../sflphone-client-gnome/src/mainwindow.c:417 +#: ../sflphone-client-gnome/src/mainwindow.c:431 msgid "Stop Call" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:413 +#: ../sflphone-client-gnome/src/mainwindow.c:414 #, c-format msgid "" "A %s error forced the call with %s to fall under unencrypted mode.\n" "Exact reason: %s\n" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:414 +#: ../sflphone-client-gnome/src/mainwindow.c:415 msgid "ZRTP negotiation failed" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:427 +#: ../sflphone-client-gnome/src/mainwindow.c:428 #, c-format msgid "" "%s wants to stop using secure communication. Confirm will resume " "conversation without SRTP.\n" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:428 +#: ../sflphone-client-gnome/src/mainwindow.c:429 msgid "Confirm Go Clear" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:429 +#: ../sflphone-client-gnome/src/mainwindow.c:430 msgid "Confirm" msgstr "" @@ -196,6 +182,13 @@ msgstr "" msgid "<i>From</i> %s" msgstr "" +#: ../sflphone-client-gnome/src/sflnotify.c:94 +#, c-format +msgid "%d voice mail" +msgid_plural "%d voice mails" +msgstr[0] "" +msgstr[1] "" + #: ../sflphone-client-gnome/src/sflnotify.c:111 #, c-format msgid "Calling with %s account <i>%s</i>" @@ -243,15 +236,15 @@ msgstr "" msgid "Mic volume" msgstr "" -#: ../sflphone-client-gnome/src/statusicon.c:91 +#: ../sflphone-client-gnome/src/statusicon.c:96 msgid "_Show main window" msgstr "" -#: ../sflphone-client-gnome/src/statusicon.c:126 +#: ../sflphone-client-gnome/src/statusicon.c:131 msgid "SFLphone" msgstr "" -#: ../sflphone-client-gnome/src/statusicon.c:127 +#: ../sflphone-client-gnome/src/statusicon.c:132 #, c-format msgid "%i account configured" msgid_plural "%i accounts configured" @@ -259,202 +252,399 @@ msgstr[0] "" msgstr[1] "" #: ../sflphone-client-gnome/src/toolbar.c:38 -#: ../sflphone-client-gnome/src/uimanager.c:750 +#: ../sflphone-client-gnome/src/uimanager.c:693 +#: ../sflphone-client-gnome/src/uimanager.c:727 msgid "Voicemail" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:403 +#: ../sflphone-client-gnome/src/uimanager.c:117 +msgid "No address book selected" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:137 +#: ../sflphone-client-gnome/src/uimanager.c:756 +msgid "Address book" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:279 +#, c-format +msgid "Voicemail (%i)" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:342 msgid "SFLphone is a VoIP client compatible with SIP and IAX2 protocols." msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:406 +#: ../sflphone-client-gnome/src/uimanager.c:345 msgid "About SFLphone" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:1028 +#: ../sflphone-client-gnome/src/uimanager.c:719 +msgid "Call" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:720 +#: ../sflphone-client-gnome/src/uimanager.c:1184 +msgid "_New call" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:720 +msgid "Place a new call" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:721 +#: ../sflphone-client-gnome/src/uimanager.c:979 msgid "_Pick up" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:1040 -#: ../sflphone-client-gnome/src/uimanager.c:1081 +#: ../sflphone-client-gnome/src/uimanager.c:721 +msgid "Answer the call" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:722 +#: ../sflphone-client-gnome/src/uimanager.c:991 +#: ../sflphone-client-gnome/src/uimanager.c:1032 msgid "_Hang up" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:1052 -#: ../sflphone-client-gnome/src/uimanager.c:1093 -msgid "On _Hold" +#: ../sflphone-client-gnome/src/uimanager.c:722 +msgid "Finish the call" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:723 +msgid "O_n hold" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:723 +msgid "Place the call on hold" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:724 +msgid "O_ff hold" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:1064 +#: ../sflphone-client-gnome/src/uimanager.c:724 +msgid "Place the call off hold" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:725 +#: ../sflphone-client-gnome/src/uimanager.c:1015 msgid "_Record" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:1154 -msgid "_Call back" +#: ../sflphone-client-gnome/src/uimanager.c:725 +msgid "Record the current conversation" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:1226 -msgid "_New call" +#: ../sflphone-client-gnome/src/uimanager.c:726 +msgid "Configuration _Assistant" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:726 +msgid "Run the configuration assistant" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:727 +msgid "Call your voicemail" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:728 +msgid "_Close" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:728 +msgid "Minimize to system tray" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:729 +msgid "_Quit" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:729 +msgid "Quit the program" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:732 +msgid "_Edit" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:733 +msgid "_Copy" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:733 +msgid "Copy the selection" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:734 +msgid "_Paste" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:734 +msgid "Paste the clipboard" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:735 +msgid "Clear _history" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:735 +msgid "Clear the call history" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:736 +msgid "_Accounts" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:736 +msgid "Edit your accounts" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:737 +msgid "_Preferences" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:737 +msgid "Change your preferences" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:740 +msgid "_View" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:743 +msgid "_Help" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:744 +msgid "Contents" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:744 +msgid "Open the manual" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:745 +msgid "About this application" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:751 +msgid "_Transfer" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:751 +msgid "Transfer the call" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:752 +msgid "_Show toolbar" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:752 +msgid "Show the toolbar" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:753 +msgid "_Dialpad" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:753 +msgid "Show the dialpad" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:754 +msgid "_Volume controls" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:754 +msgid "Show the volume controls" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:1300 +#: ../sflphone-client-gnome/src/uimanager.c:755 +msgid "_History" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:755 +msgid "Calls history" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:756 +msgid "_Address book" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:1003 +#: ../sflphone-client-gnome/src/uimanager.c:1044 +msgid "On _Hold" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:1107 +msgid "_Call back" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:1258 msgid "Edit phone number" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:1311 +#: ../sflphone-client-gnome/src/uimanager.c:1269 msgid "Edit the phone number before making a call" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:164 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:180 msgid "Account Parameters" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:173 -#: ../sflphone-client-gnome/src/config/assistant.c:294 -#: ../sflphone-client-gnome/src/config/assistant.c:402 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:189 +#: ../sflphone-client-gnome/src/config/assistant.c:314 +#: ../sflphone-client-gnome/src/config/assistant.c:427 msgid "_Alias" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:181 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:197 msgid "_Protocol" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:199 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:215 msgid "Unknown" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:209 -#: ../sflphone-client-gnome/src/config/assistant.c:302 -#: ../sflphone-client-gnome/src/config/assistant.c:410 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:225 +#: ../sflphone-client-gnome/src/config/assistant.c:322 +#: ../sflphone-client-gnome/src/config/assistant.c:435 msgid "_Host name" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:217 -#: ../sflphone-client-gnome/src/config/assistant.c:310 -#: ../sflphone-client-gnome/src/config/assistant.c:418 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:233 +#: ../sflphone-client-gnome/src/config/assistant.c:330 +#: ../sflphone-client-gnome/src/config/assistant.c:443 msgid "_User name" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:234 -#: ../sflphone-client-gnome/src/config/assistant.c:326 -#: ../sflphone-client-gnome/src/config/assistant.c:433 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:250 +#: ../sflphone-client-gnome/src/config/assistant.c:346 +#: ../sflphone-client-gnome/src/config/assistant.c:458 msgid "_Password" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:254 -#: ../sflphone-client-gnome/src/config/assistant.c:344 -#: ../sflphone-client-gnome/src/config/assistant.c:449 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:270 +#: ../sflphone-client-gnome/src/config/assistant.c:363 +#: ../sflphone-client-gnome/src/config/assistant.c:473 +msgid "Show password" +msgstr "" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:274 +#: ../sflphone-client-gnome/src/config/assistant.c:368 +#: ../sflphone-client-gnome/src/config/assistant.c:478 msgid "_Voicemail number" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:340 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:361 msgid "Authentication" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:341 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:362 msgid "Secret" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:466 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:605 msgid "Credential" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:501 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:640 msgid "Authentication name" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:512 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:651 msgid "Password" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:535 -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:909 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:201 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:674 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1056 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:321 msgid "Security" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:547 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:213 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:687 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:333 msgid "Use TLS transport (sips)" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:552 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:218 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:693 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:338 msgid "SRTP key exchange" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:558 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:224 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:699 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:344 msgid "Disabled" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:674 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:795 msgid "Registration" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:679 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:800 msgid "Registration expire" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:687 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:809 msgid "_Comply with RFC 3263" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:693 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:463 -msgid "Network" +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:816 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:234 +msgid "Network Interface" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:707 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:830 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:249 msgid "Local address" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:744 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:880 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:301 msgid "Local port" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:752 -msgid "Set published address and port:" +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:893 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:928 +msgid "Published address" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:756 -msgid "Using STUN " +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:899 +msgid "Using STUN" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:761 -msgid "Same as local parameters" +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:906 +msgid "STUN server URL" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:764 -msgid "Manually" +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:914 +msgid "Same as local parameters" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:769 -msgid "Published address" +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:917 +msgid "Set published address and port:" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:777 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:936 msgid "Published port" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:785 -msgid "STUN server URL" -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:880 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1027 msgid "Account settings" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:899 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1046 msgid "Basic" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:904 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1051 msgid "Advanced" msgstr "" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:169 -msgid "Server returned \"" +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:164 +#, c-format +msgid "Server returned \"%s\" (%d)" msgstr "" #: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:389 @@ -473,32 +663,18 @@ msgstr "" msgid "Configured Accounts" msgstr "" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:505 -msgid "There " -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:506 -msgid "is " -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:506 -msgid "are " -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:508 -msgid " active account" -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:509 -msgid "s" -msgstr "" +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:501 +#, c-format +msgid "There is %d active account" +msgid_plural "There are %d active accounts" +msgstr[0] "" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:514 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:507 msgid "You have no active account" msgstr "" #: ../sflphone-client-gnome/src/config/addressbook-config.c:306 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:443 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:556 msgid "General" msgstr "" @@ -543,225 +719,220 @@ msgid "Select which Evolution address books to use" msgstr "" #: ../sflphone-client-gnome/src/config/addressbook-config.c:404 -#: ../sflphone-client-gnome/src/config/audioconf.c:578 +#: ../sflphone-client-gnome/src/config/audioconf.c:577 msgid "Name" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:69 +#: ../sflphone-client-gnome/src/config/assistant.c:75 #, c-format msgid "This assistant is now finished." msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:71 +#: ../sflphone-client-gnome/src/config/assistant.c:77 msgid "" "You can at any time check your registration state or modify your accounts " "parameters in the Options/Accounts window." msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:74 +#: ../sflphone-client-gnome/src/config/assistant.c:80 msgid "Alias" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:78 +#: ../sflphone-client-gnome/src/config/assistant.c:84 msgid "Server" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:82 +#: ../sflphone-client-gnome/src/config/assistant.c:88 msgid "Username" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:86 +#: ../sflphone-client-gnome/src/config/assistant.c:92 msgid "Security: " msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:88 +#: ../sflphone-client-gnome/src/config/assistant.c:94 msgid "SRTP/ZRTP draft-zimmermann" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:90 -#: ../sflphone-client-gnome/src/config/assistant.c:182 +#: ../sflphone-client-gnome/src/config/assistant.c:96 msgid "None" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:210 +#: ../sflphone-client-gnome/src/config/assistant.c:229 msgid "SFLphone account creation wizard" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:236 +#: ../sflphone-client-gnome/src/config/assistant.c:255 msgid "Welcome to the Account creation wizard of SFLphone!" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:237 +#: ../sflphone-client-gnome/src/config/assistant.c:256 msgid "This installation wizard will help you configure an account." msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:251 +#: ../sflphone-client-gnome/src/config/assistant.c:270 msgid "VoIP Protocols" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:251 +#: ../sflphone-client-gnome/src/config/assistant.c:270 msgid "Select an account type" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:253 +#: ../sflphone-client-gnome/src/config/assistant.c:272 msgid "SIP (Session Initiation Protocol)" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:255 +#: ../sflphone-client-gnome/src/config/assistant.c:274 msgid "IAX2 (InterAsterix Exchange)" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:269 +#: ../sflphone-client-gnome/src/config/assistant.c:288 msgid "Account" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:269 +#: ../sflphone-client-gnome/src/config/assistant.c:288 msgid "Please select one of the following options" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:271 +#: ../sflphone-client-gnome/src/config/assistant.c:290 msgid "Create a free SIP/IAX2 account on sflphone.org" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:273 +#: ../sflphone-client-gnome/src/config/assistant.c:292 msgid "Register an existing SIP or IAX2 account" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:286 +#: ../sflphone-client-gnome/src/config/assistant.c:306 msgid "SIP account settings" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:286 -#: ../sflphone-client-gnome/src/config/assistant.c:394 +#: ../sflphone-client-gnome/src/config/assistant.c:306 +#: ../sflphone-client-gnome/src/config/assistant.c:419 msgid "Please fill the following information" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:352 -#: ../sflphone-client-gnome/src/config/assistant.c:381 +#: ../sflphone-client-gnome/src/config/assistant.c:376 +#: ../sflphone-client-gnome/src/config/assistant.c:405 msgid "Secure communications with _ZRTP" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:365 +#: ../sflphone-client-gnome/src/config/assistant.c:389 msgid "Optional email address" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:365 +#: ../sflphone-client-gnome/src/config/assistant.c:389 msgid "This email address will be used to send your voicemail messages." msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:373 +#: ../sflphone-client-gnome/src/config/assistant.c:397 msgid "_Email address" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:394 +#: ../sflphone-client-gnome/src/config/assistant.c:419 msgid "IAX2 account settings" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:467 +#: ../sflphone-client-gnome/src/config/assistant.c:496 msgid "Network Address Translation (NAT)" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:467 +#: ../sflphone-client-gnome/src/config/assistant.c:496 msgid "You should probably enable this if you are behind a firewall." msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:476 +#: ../sflphone-client-gnome/src/config/assistant.c:505 msgid "E_nable STUN" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:483 +#: ../sflphone-client-gnome/src/config/assistant.c:512 msgid "_STUN server" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:497 +#: ../sflphone-client-gnome/src/config/assistant.c:526 msgid "Account Registration" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:497 +#: ../sflphone-client-gnome/src/config/assistant.c:526 msgid "Congratulations!" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:583 +#: ../sflphone-client-gnome/src/config/audioconf.c:582 msgid "Frequency" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:588 +#: ../sflphone-client-gnome/src/config/audioconf.c:587 msgid "Bitrate" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:593 +#: ../sflphone-client-gnome/src/config/audioconf.c:592 msgid "Bandwidth" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:673 +#: ../sflphone-client-gnome/src/config/audioconf.c:670 msgid "ALSA plugin" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:695 +#: ../sflphone-client-gnome/src/config/audioconf.c:692 msgid "Output" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:717 +#: ../sflphone-client-gnome/src/config/audioconf.c:714 msgid "Input" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:752 +#: ../sflphone-client-gnome/src/config/audioconf.c:749 msgid "_Voice Activity Detection" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:762 +#: ../sflphone-client-gnome/src/config/audioconf.c:759 msgid "_Noise Reduction (Narrow-Band Companding)" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:798 +#: ../sflphone-client-gnome/src/config/audioconf.c:800 msgid "Sound Manager" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:807 +#: ../sflphone-client-gnome/src/config/audioconf.c:809 msgid "_Pulseaudio" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:811 +#: ../sflphone-client-gnome/src/config/audioconf.c:813 msgid "_ALSA" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:816 -msgid "_Mute other applications during a call" -msgstr "" - -#: ../sflphone-client-gnome/src/config/audioconf.c:823 +#: ../sflphone-client-gnome/src/config/audioconf.c:819 msgid "ALSA settings" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:840 +#: ../sflphone-client-gnome/src/config/audioconf.c:836 msgid "Codecs" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:869 +#: ../sflphone-client-gnome/src/config/audioconf.c:865 msgid "Recordings" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:873 +#: ../sflphone-client-gnome/src/config/audioconf.c:869 msgid "Destination folder" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:877 +#: ../sflphone-client-gnome/src/config/audioconf.c:873 msgid "Select a folder" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:883 +#: ../sflphone-client-gnome/src/config/audioconf.c:879 msgid "Ringtones" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:889 +#: ../sflphone-client-gnome/src/config/audioconf.c:885 msgid "_Enable ringtones" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:895 +#: ../sflphone-client-gnome/src/config/audioconf.c:891 msgid "Choose a ringtone" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:901 +#: ../sflphone-client-gnome/src/config/audioconf.c:897 msgid "Audio Files" msgstr "" @@ -798,86 +969,66 @@ msgstr "" msgid "_Prefix dialed numbers with" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:195 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:225 msgid "" "This profile is used when you want to reach a remote peer simply by typing a " "sip URI such as <b>sip:remotepeer</b>. The settings you define here will " "also be used if no account can be matched to an incoming or outgoing call." msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:274 -msgid "SIP Port" -msgstr "" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:281 -msgid "UDP Transport" -msgstr "" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:319 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:440 msgid "Desktop Notifications" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:323 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:444 msgid "_Enable notifications" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:329 -msgid "Enable voicemail _notifications" -msgstr "" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:341 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:450 msgid "System Tray Icon" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:344 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:453 msgid "_Popup main window on incoming call" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:349 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:457 msgid "Ne_ver popup main window" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:353 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:463 msgid "Hide SFLphone window on _startup" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:359 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:469 msgid "Calls History" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:362 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:472 msgid "_Keep my history for at least" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:373 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:483 msgid "days" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:377 -msgid "Configuration File" -msgstr "" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:379 -msgid "Store SIP credentials as MD5 hash" -msgstr "" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:423 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:536 msgid "Preferences" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:448 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:561 msgid "Audio" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:453 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:566 msgid "Address Book" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:458 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:571 msgid "Hooks" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:468 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:581 msgid "Direct IP calls" msgstr "" @@ -885,11 +1036,11 @@ msgstr "" msgid "Advanced options for TLS" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:55 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:56 msgid "TLS transport" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:59 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:60 msgid "" "TLS transport can be used along with UDP for those calls that would\n" "require secure sip transactions (aka SIPS). You can configure a different\n" @@ -898,55 +1049,55 @@ msgid "" "port, different one from each other\n" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:100 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:103 msgid "Certificate of Authority list" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:104 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:107 msgid "Choose a CA list file (optional)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:115 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:131 msgid "Public endpoint certificate file" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:119 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:135 msgid "Choose a public endpoint certificate (optional)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:134 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:159 msgid "Choose a private key file (optional)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:145 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:181 msgid "Password for the private key" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:168 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:204 msgid "TLS protocol method" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:202 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:238 msgid "TLS cipher list" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:211 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:247 msgid "Server name instance for outgoing TLS connection" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:219 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:255 msgid "Negotiation timeout (sec:msec)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:236 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:272 msgid "Verify incoming certificates, as a server" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:242 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:278 msgid "Verify certificates from answer, as a client" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:248 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:284 msgid "Require certificate for incoming tls connections" msgstr "" @@ -954,54 +1105,54 @@ msgstr "" msgid "ZRTP Options" msgstr "" -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:68 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:69 msgid "Send Hello Hash in S_DP" msgstr "" -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:74 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:75 msgid "Ask User to Confirm SAS" msgstr "" -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:80 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:81 msgid "_Warn if ZRTP not supported" msgstr "" -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:86 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:87 msgid "Display SAS once for hold events" msgstr "" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:56 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:58 msgid "Search all" msgstr "" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:57 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:70 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:82 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:94 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:59 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:72 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:84 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:96 msgid "Click here to change the search type" msgstr "" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:69 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:71 msgid "Search by missed call" msgstr "" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:81 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:83 msgid "Search by incoming call" msgstr "" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:93 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:95 msgid "Search by outgoing call" msgstr "" #~ msgctxt "NAME OF TRANSLATORS" #~ msgid "Your names" #~ msgstr "" -#~ ",Launchpad Contributions:, ,Launchpad Contributions:,Emmanuel Milou,Scion, " -#~ ",Launchpad Contributions:,Emmanuel Milou,Scion, ,Launchpad " +#~ ",Launchpad Contributions:, ,Launchpad Contributions:,Emmanuel Milou," +#~ "Scion, ,Launchpad Contributions:,Emmanuel Milou,Scion, ,Launchpad " #~ "Contributions:,Emmanuel Milou,Scion" #~ msgctxt "EMAIL OF TRANSLATORS" #~ msgid "Your emails" #~ msgstr "" -#~ ",,,,emmanuel.milou@savoirfairelinux.com,,,,emmanuel.milou@savoirfairelinux.co" -#~ "m,,,,emmanuel.milou@savoirfairelinux.com," +#~ ",,,,emmanuel.milou@savoirfairelinux.com,,,,emmanuel." +#~ "milou@savoirfairelinux.com,,,,emmanuel.milou@savoirfairelinux.com," diff --git a/lang/merge-po-with-template.sh b/lang/merge-po-with-template.sh new file mode 100755 index 0000000000..122b2b262a --- /dev/null +++ b/lang/merge-po-with-template.sh @@ -0,0 +1,8 @@ +#!/bin/bash + +# Merge sflphone template into the existing po files + +for fichier in `find . -name *.po` +do +msgmerge --update $fichier sflphone.pot +done diff --git a/lang/pl/pl.po b/lang/pl/pl.po index 062ad393b5..6d2a4515be 100644 --- a/lang/pl/pl.po +++ b/lang/pl/pl.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: sflphone\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-10-14 11:18-0400\n" +"POT-Creation-Date: 2009-12-03 10:22-0500\n" "PO-Revision-Date: 2009-11-04 12:08+0000\n" "Last-Translator: Mariusz Bednarz <mbednarz@bedmar.pl>\n" "Language-Team: Polish <pl@li.org>\n" @@ -61,25 +61,15 @@ msgstr "" msgid "Invalid" msgstr "Niepoprawny" -#: ../sflphone-client-gnome/src/actions.c:54 -#: ../sflphone-client-gnome/src/sflnotify.c:94 -#, c-format -msgid "%d voice mail" -msgid_plural "%d voice mails" -msgstr[0] "%d głosowa wiadomość" -msgstr[1] "%d głosowych wiadomości" - -#: ../sflphone-client-gnome/src/actions.c:83 -#: ../sflphone-client-gnome/src/actions.c:919 -#: ../sflphone-client-gnome/src/actions.c:926 +#: ../sflphone-client-gnome/src/actions.c:98 msgid "Using account" msgstr "Używane konto" -#: ../sflphone-client-gnome/src/actions.c:89 +#: ../sflphone-client-gnome/src/actions.c:104 msgid "No registered accounts" msgstr "Brak zarejestrowanych kont" -#: ../sflphone-client-gnome/src/actions.c:268 +#: ../sflphone-client-gnome/src/actions.c:285 msgid "" "Unable to connect to the SFLphone server.\n" "Make sure the daemon is running." @@ -87,22 +77,18 @@ msgstr "" "Nie można połączyć się z serwerem SFLphone.\n" "Upewnij się, że został uruchomiony daemon SFLphone" -#: ../sflphone-client-gnome/src/actions.c:913 -#, c-format -msgid "IP call - %s" -msgstr "Telefonów IP - %s" - -#: ../sflphone-client-gnome/src/actions.c:922 -msgid "Codec" -msgstr "Kodek" +#: ../sflphone-client-gnome/src/actions.c:589 +#: ../sflphone-client-gnome/src/actions.c:911 +msgid "Direct SIP call" +msgstr "" -#: ../sflphone-client-gnome/src/actions.c:1119 +#: ../sflphone-client-gnome/src/actions.c:1103 #, c-format msgid "" "<b>Error: No audio codecs found.\n" "\n" -"</b> SFL audio codecs have to be placed in <i>%s</i> or in the " -"<b>.sflphone</b> directory in your home( <i>%s</i> )" +"</b> SFL audio codecs have to be placed in <i>%s</i> or in the <b>.sflphone</" +"b> directory in your home( <i>%s</i> )" msgstr "" #: ../sflphone-client-gnome/src/errors.c:29 @@ -144,53 +130,53 @@ msgstr "" msgid "Do you still want to quit?" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:299 +#: ../sflphone-client-gnome/src/mainwindow.c:298 msgid "SFLphone Error" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:391 +#: ../sflphone-client-gnome/src/mainwindow.c:392 #, c-format msgid "ZRTP is not supported by peer %s\n" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:392 +#: ../sflphone-client-gnome/src/mainwindow.c:393 msgid "Secure Communication Unavailable" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:393 -#: ../sflphone-client-gnome/src/mainwindow.c:415 +#: ../sflphone-client-gnome/src/mainwindow.c:394 +#: ../sflphone-client-gnome/src/mainwindow.c:416 msgid "Continue" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:394 -#: ../sflphone-client-gnome/src/mainwindow.c:416 -#: ../sflphone-client-gnome/src/mainwindow.c:430 +#: ../sflphone-client-gnome/src/mainwindow.c:395 +#: ../sflphone-client-gnome/src/mainwindow.c:417 +#: ../sflphone-client-gnome/src/mainwindow.c:431 msgid "Stop Call" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:413 +#: ../sflphone-client-gnome/src/mainwindow.c:414 #, c-format msgid "" "A %s error forced the call with %s to fall under unencrypted mode.\n" "Exact reason: %s\n" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:414 +#: ../sflphone-client-gnome/src/mainwindow.c:415 msgid "ZRTP negotiation failed" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:427 +#: ../sflphone-client-gnome/src/mainwindow.c:428 #, c-format msgid "" "%s wants to stop using secure communication. Confirm will resume " "conversation without SRTP.\n" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:428 +#: ../sflphone-client-gnome/src/mainwindow.c:429 msgid "Confirm Go Clear" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:429 +#: ../sflphone-client-gnome/src/mainwindow.c:430 msgid "Confirm" msgstr "" @@ -205,6 +191,13 @@ msgstr "" msgid "<i>From</i> %s" msgstr "" +#: ../sflphone-client-gnome/src/sflnotify.c:94 +#, c-format +msgid "%d voice mail" +msgid_plural "%d voice mails" +msgstr[0] "%d głosowa wiadomość" +msgstr[1] "%d głosowych wiadomości" + #: ../sflphone-client-gnome/src/sflnotify.c:111 #, c-format msgid "Calling with %s account <i>%s</i>" @@ -252,15 +245,15 @@ msgstr "" msgid "Mic volume" msgstr "" -#: ../sflphone-client-gnome/src/statusicon.c:91 +#: ../sflphone-client-gnome/src/statusicon.c:96 msgid "_Show main window" msgstr "" -#: ../sflphone-client-gnome/src/statusicon.c:126 +#: ../sflphone-client-gnome/src/statusicon.c:131 msgid "SFLphone" msgstr "" -#: ../sflphone-client-gnome/src/statusicon.c:127 +#: ../sflphone-client-gnome/src/statusicon.c:132 #, c-format msgid "%i account configured" msgid_plural "%i accounts configured" @@ -268,202 +261,399 @@ msgstr[0] "" msgstr[1] "" #: ../sflphone-client-gnome/src/toolbar.c:38 -#: ../sflphone-client-gnome/src/uimanager.c:750 +#: ../sflphone-client-gnome/src/uimanager.c:693 +#: ../sflphone-client-gnome/src/uimanager.c:727 msgid "Voicemail" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:403 +#: ../sflphone-client-gnome/src/uimanager.c:117 +msgid "No address book selected" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:137 +#: ../sflphone-client-gnome/src/uimanager.c:756 +msgid "Address book" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:279 +#, c-format +msgid "Voicemail (%i)" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:342 msgid "SFLphone is a VoIP client compatible with SIP and IAX2 protocols." msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:406 +#: ../sflphone-client-gnome/src/uimanager.c:345 msgid "About SFLphone" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:1028 +#: ../sflphone-client-gnome/src/uimanager.c:719 +msgid "Call" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:720 +#: ../sflphone-client-gnome/src/uimanager.c:1184 +msgid "_New call" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:720 +msgid "Place a new call" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:721 +#: ../sflphone-client-gnome/src/uimanager.c:979 msgid "_Pick up" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:1040 -#: ../sflphone-client-gnome/src/uimanager.c:1081 +#: ../sflphone-client-gnome/src/uimanager.c:721 +msgid "Answer the call" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:722 +#: ../sflphone-client-gnome/src/uimanager.c:991 +#: ../sflphone-client-gnome/src/uimanager.c:1032 msgid "_Hang up" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:1052 -#: ../sflphone-client-gnome/src/uimanager.c:1093 -msgid "On _Hold" +#: ../sflphone-client-gnome/src/uimanager.c:722 +msgid "Finish the call" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:723 +msgid "O_n hold" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:1064 +#: ../sflphone-client-gnome/src/uimanager.c:723 +msgid "Place the call on hold" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:724 +msgid "O_ff hold" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:724 +msgid "Place the call off hold" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:725 +#: ../sflphone-client-gnome/src/uimanager.c:1015 msgid "_Record" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:1154 -msgid "_Call back" +#: ../sflphone-client-gnome/src/uimanager.c:725 +msgid "Record the current conversation" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:1226 -msgid "_New call" +#: ../sflphone-client-gnome/src/uimanager.c:726 +msgid "Configuration _Assistant" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:726 +msgid "Run the configuration assistant" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:727 +msgid "Call your voicemail" +msgstr "%d głosowa wiadomość" + +#: ../sflphone-client-gnome/src/uimanager.c:728 +msgid "_Close" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:728 +msgid "Minimize to system tray" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:729 +msgid "_Quit" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:729 +msgid "Quit the program" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:732 +msgid "_Edit" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:733 +msgid "_Copy" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:733 +msgid "Copy the selection" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:734 +msgid "_Paste" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:734 +msgid "Paste the clipboard" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:735 +msgid "Clear _history" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:735 +msgid "Clear the call history" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:736 +msgid "_Accounts" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:736 +msgid "Edit your accounts" +msgstr "Brak zarejestrowanych kont" + +#: ../sflphone-client-gnome/src/uimanager.c:737 +msgid "_Preferences" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:737 +msgid "Change your preferences" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:740 +msgid "_View" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:743 +msgid "_Help" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:1300 +#: ../sflphone-client-gnome/src/uimanager.c:744 +msgid "Contents" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:744 +msgid "Open the manual" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:745 +msgid "About this application" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:751 +msgid "_Transfer" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:751 +msgid "Transfer the call" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:752 +msgid "_Show toolbar" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:752 +msgid "Show the toolbar" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:753 +msgid "_Dialpad" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:753 +msgid "Show the dialpad" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:754 +msgid "_Volume controls" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:754 +msgid "Show the volume controls" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:755 +msgid "_History" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:755 +msgid "Calls history" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:756 +msgid "_Address book" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:1003 +#: ../sflphone-client-gnome/src/uimanager.c:1044 +msgid "On _Hold" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:1107 +msgid "_Call back" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:1258 msgid "Edit phone number" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:1311 +#: ../sflphone-client-gnome/src/uimanager.c:1269 msgid "Edit the phone number before making a call" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:164 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:180 msgid "Account Parameters" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:173 -#: ../sflphone-client-gnome/src/config/assistant.c:294 -#: ../sflphone-client-gnome/src/config/assistant.c:402 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:189 +#: ../sflphone-client-gnome/src/config/assistant.c:314 +#: ../sflphone-client-gnome/src/config/assistant.c:427 msgid "_Alias" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:181 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:197 msgid "_Protocol" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:199 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:215 msgid "Unknown" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:209 -#: ../sflphone-client-gnome/src/config/assistant.c:302 -#: ../sflphone-client-gnome/src/config/assistant.c:410 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:225 +#: ../sflphone-client-gnome/src/config/assistant.c:322 +#: ../sflphone-client-gnome/src/config/assistant.c:435 msgid "_Host name" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:217 -#: ../sflphone-client-gnome/src/config/assistant.c:310 -#: ../sflphone-client-gnome/src/config/assistant.c:418 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:233 +#: ../sflphone-client-gnome/src/config/assistant.c:330 +#: ../sflphone-client-gnome/src/config/assistant.c:443 msgid "_User name" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:234 -#: ../sflphone-client-gnome/src/config/assistant.c:326 -#: ../sflphone-client-gnome/src/config/assistant.c:433 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:250 +#: ../sflphone-client-gnome/src/config/assistant.c:346 +#: ../sflphone-client-gnome/src/config/assistant.c:458 msgid "_Password" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:254 -#: ../sflphone-client-gnome/src/config/assistant.c:344 -#: ../sflphone-client-gnome/src/config/assistant.c:449 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:270 +#: ../sflphone-client-gnome/src/config/assistant.c:363 +#: ../sflphone-client-gnome/src/config/assistant.c:473 +msgid "Show password" +msgstr "" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:274 +#: ../sflphone-client-gnome/src/config/assistant.c:368 +#: ../sflphone-client-gnome/src/config/assistant.c:478 msgid "_Voicemail number" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:340 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:361 msgid "Authentication" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:341 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:362 msgid "Secret" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:466 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:605 msgid "Credential" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:501 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:640 msgid "Authentication name" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:512 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:651 msgid "Password" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:535 -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:909 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:201 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:674 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1056 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:321 msgid "Security" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:547 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:213 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:687 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:333 msgid "Use TLS transport (sips)" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:552 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:218 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:693 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:338 msgid "SRTP key exchange" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:558 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:224 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:699 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:344 msgid "Disabled" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:674 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:795 msgid "Registration" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:679 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:800 msgid "Registration expire" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:687 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:809 msgid "_Comply with RFC 3263" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:693 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:463 -msgid "Network" -msgstr "" +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:816 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:234 +msgid "Network Interface" +msgstr "Sieć niedostępna" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:707 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:830 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:249 msgid "Local address" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:744 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:880 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:301 msgid "Local port" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:752 -msgid "Set published address and port:" +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:893 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:928 +msgid "Published address" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:756 -msgid "Using STUN " +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:899 +msgid "Using STUN" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:761 -msgid "Same as local parameters" +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:906 +msgid "STUN server URL" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:764 -msgid "Manually" +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:914 +msgid "Same as local parameters" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:769 -msgid "Published address" +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:917 +msgid "Set published address and port:" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:777 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:936 msgid "Published port" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:785 -msgid "STUN server URL" -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:880 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1027 msgid "Account settings" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:899 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1046 msgid "Basic" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:904 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1051 msgid "Advanced" msgstr "" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:169 -msgid "Server returned \"" +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:164 +#, c-format +msgid "Server returned \"%s\" (%d)" msgstr "" #: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:389 @@ -482,32 +672,20 @@ msgstr "" msgid "Configured Accounts" msgstr "" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:505 -msgid "There " -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:506 -msgid "is " -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:506 -msgid "are " -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:508 -msgid " active account" -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:509 -msgid "s" -msgstr "" +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:501 +#, c-format +msgid "There is %d active account" +msgid_plural "There are %d active accounts" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:514 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:507 msgid "You have no active account" msgstr "" #: ../sflphone-client-gnome/src/config/addressbook-config.c:306 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:443 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:556 msgid "General" msgstr "" @@ -552,225 +730,220 @@ msgid "Select which Evolution address books to use" msgstr "" #: ../sflphone-client-gnome/src/config/addressbook-config.c:404 -#: ../sflphone-client-gnome/src/config/audioconf.c:578 +#: ../sflphone-client-gnome/src/config/audioconf.c:577 msgid "Name" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:69 +#: ../sflphone-client-gnome/src/config/assistant.c:75 #, c-format msgid "This assistant is now finished." msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:71 +#: ../sflphone-client-gnome/src/config/assistant.c:77 msgid "" "You can at any time check your registration state or modify your accounts " "parameters in the Options/Accounts window." msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:74 +#: ../sflphone-client-gnome/src/config/assistant.c:80 msgid "Alias" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:78 +#: ../sflphone-client-gnome/src/config/assistant.c:84 msgid "Server" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:82 +#: ../sflphone-client-gnome/src/config/assistant.c:88 msgid "Username" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:86 +#: ../sflphone-client-gnome/src/config/assistant.c:92 msgid "Security: " msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:88 +#: ../sflphone-client-gnome/src/config/assistant.c:94 msgid "SRTP/ZRTP draft-zimmermann" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:90 -#: ../sflphone-client-gnome/src/config/assistant.c:182 +#: ../sflphone-client-gnome/src/config/assistant.c:96 msgid "None" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:210 +#: ../sflphone-client-gnome/src/config/assistant.c:229 msgid "SFLphone account creation wizard" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:236 +#: ../sflphone-client-gnome/src/config/assistant.c:255 msgid "Welcome to the Account creation wizard of SFLphone!" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:237 +#: ../sflphone-client-gnome/src/config/assistant.c:256 msgid "This installation wizard will help you configure an account." msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:251 +#: ../sflphone-client-gnome/src/config/assistant.c:270 msgid "VoIP Protocols" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:251 +#: ../sflphone-client-gnome/src/config/assistant.c:270 msgid "Select an account type" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:253 +#: ../sflphone-client-gnome/src/config/assistant.c:272 msgid "SIP (Session Initiation Protocol)" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:255 +#: ../sflphone-client-gnome/src/config/assistant.c:274 msgid "IAX2 (InterAsterix Exchange)" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:269 +#: ../sflphone-client-gnome/src/config/assistant.c:288 msgid "Account" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:269 +#: ../sflphone-client-gnome/src/config/assistant.c:288 msgid "Please select one of the following options" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:271 +#: ../sflphone-client-gnome/src/config/assistant.c:290 msgid "Create a free SIP/IAX2 account on sflphone.org" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:273 +#: ../sflphone-client-gnome/src/config/assistant.c:292 msgid "Register an existing SIP or IAX2 account" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:286 +#: ../sflphone-client-gnome/src/config/assistant.c:306 msgid "SIP account settings" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:286 -#: ../sflphone-client-gnome/src/config/assistant.c:394 +#: ../sflphone-client-gnome/src/config/assistant.c:306 +#: ../sflphone-client-gnome/src/config/assistant.c:419 msgid "Please fill the following information" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:352 -#: ../sflphone-client-gnome/src/config/assistant.c:381 +#: ../sflphone-client-gnome/src/config/assistant.c:376 +#: ../sflphone-client-gnome/src/config/assistant.c:405 msgid "Secure communications with _ZRTP" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:365 +#: ../sflphone-client-gnome/src/config/assistant.c:389 msgid "Optional email address" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:365 +#: ../sflphone-client-gnome/src/config/assistant.c:389 msgid "This email address will be used to send your voicemail messages." msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:373 +#: ../sflphone-client-gnome/src/config/assistant.c:397 msgid "_Email address" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:394 +#: ../sflphone-client-gnome/src/config/assistant.c:419 msgid "IAX2 account settings" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:467 +#: ../sflphone-client-gnome/src/config/assistant.c:496 msgid "Network Address Translation (NAT)" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:467 +#: ../sflphone-client-gnome/src/config/assistant.c:496 msgid "You should probably enable this if you are behind a firewall." msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:476 +#: ../sflphone-client-gnome/src/config/assistant.c:505 msgid "E_nable STUN" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:483 +#: ../sflphone-client-gnome/src/config/assistant.c:512 msgid "_STUN server" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:497 +#: ../sflphone-client-gnome/src/config/assistant.c:526 msgid "Account Registration" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:497 +#: ../sflphone-client-gnome/src/config/assistant.c:526 msgid "Congratulations!" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:583 +#: ../sflphone-client-gnome/src/config/audioconf.c:582 msgid "Frequency" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:588 +#: ../sflphone-client-gnome/src/config/audioconf.c:587 msgid "Bitrate" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:593 +#: ../sflphone-client-gnome/src/config/audioconf.c:592 msgid "Bandwidth" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:673 +#: ../sflphone-client-gnome/src/config/audioconf.c:670 msgid "ALSA plugin" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:695 +#: ../sflphone-client-gnome/src/config/audioconf.c:692 msgid "Output" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:717 +#: ../sflphone-client-gnome/src/config/audioconf.c:714 msgid "Input" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:752 +#: ../sflphone-client-gnome/src/config/audioconf.c:749 msgid "_Voice Activity Detection" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:762 +#: ../sflphone-client-gnome/src/config/audioconf.c:759 msgid "_Noise Reduction (Narrow-Band Companding)" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:798 +#: ../sflphone-client-gnome/src/config/audioconf.c:800 msgid "Sound Manager" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:807 +#: ../sflphone-client-gnome/src/config/audioconf.c:809 msgid "_Pulseaudio" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:811 +#: ../sflphone-client-gnome/src/config/audioconf.c:813 msgid "_ALSA" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:816 -msgid "_Mute other applications during a call" -msgstr "" - -#: ../sflphone-client-gnome/src/config/audioconf.c:823 +#: ../sflphone-client-gnome/src/config/audioconf.c:819 msgid "ALSA settings" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:840 +#: ../sflphone-client-gnome/src/config/audioconf.c:836 msgid "Codecs" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:869 +#: ../sflphone-client-gnome/src/config/audioconf.c:865 msgid "Recordings" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:873 +#: ../sflphone-client-gnome/src/config/audioconf.c:869 msgid "Destination folder" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:877 +#: ../sflphone-client-gnome/src/config/audioconf.c:873 msgid "Select a folder" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:883 +#: ../sflphone-client-gnome/src/config/audioconf.c:879 msgid "Ringtones" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:889 +#: ../sflphone-client-gnome/src/config/audioconf.c:885 msgid "_Enable ringtones" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:895 +#: ../sflphone-client-gnome/src/config/audioconf.c:891 msgid "Choose a ringtone" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:901 +#: ../sflphone-client-gnome/src/config/audioconf.c:897 msgid "Audio Files" msgstr "" @@ -807,86 +980,66 @@ msgstr "" msgid "_Prefix dialed numbers with" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:195 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:225 msgid "" "This profile is used when you want to reach a remote peer simply by typing a " "sip URI such as <b>sip:remotepeer</b>. The settings you define here will " "also be used if no account can be matched to an incoming or outgoing call." msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:274 -msgid "SIP Port" -msgstr "" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:281 -msgid "UDP Transport" -msgstr "" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:319 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:440 msgid "Desktop Notifications" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:323 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:444 msgid "_Enable notifications" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:329 -msgid "Enable voicemail _notifications" -msgstr "" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:341 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:450 msgid "System Tray Icon" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:344 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:453 msgid "_Popup main window on incoming call" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:349 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:457 msgid "Ne_ver popup main window" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:353 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:463 msgid "Hide SFLphone window on _startup" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:359 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:469 msgid "Calls History" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:362 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:472 msgid "_Keep my history for at least" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:373 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:483 msgid "days" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:377 -msgid "Configuration File" -msgstr "" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:379 -msgid "Store SIP credentials as MD5 hash" -msgstr "" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:423 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:536 msgid "Preferences" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:448 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:561 msgid "Audio" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:453 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:566 msgid "Address Book" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:458 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:571 msgid "Hooks" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:468 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:581 msgid "Direct IP calls" msgstr "" @@ -894,11 +1047,11 @@ msgstr "" msgid "Advanced options for TLS" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:55 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:56 msgid "TLS transport" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:59 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:60 msgid "" "TLS transport can be used along with UDP for those calls that would\n" "require secure sip transactions (aka SIPS). You can configure a different\n" @@ -907,55 +1060,55 @@ msgid "" "port, different one from each other\n" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:100 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:103 msgid "Certificate of Authority list" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:104 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:107 msgid "Choose a CA list file (optional)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:115 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:131 msgid "Public endpoint certificate file" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:119 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:135 msgid "Choose a public endpoint certificate (optional)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:134 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:159 msgid "Choose a private key file (optional)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:145 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:181 msgid "Password for the private key" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:168 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:204 msgid "TLS protocol method" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:202 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:238 msgid "TLS cipher list" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:211 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:247 msgid "Server name instance for outgoing TLS connection" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:219 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:255 msgid "Negotiation timeout (sec:msec)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:236 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:272 msgid "Verify incoming certificates, as a server" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:242 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:278 msgid "Verify certificates from answer, as a client" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:248 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:284 msgid "Require certificate for incoming tls connections" msgstr "" @@ -963,54 +1116,60 @@ msgstr "" msgid "ZRTP Options" msgstr "" -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:68 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:69 msgid "Send Hello Hash in S_DP" msgstr "" -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:74 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:75 msgid "Ask User to Confirm SAS" msgstr "" -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:80 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:81 msgid "_Warn if ZRTP not supported" msgstr "" -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:86 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:87 msgid "Display SAS once for hold events" msgstr "" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:56 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:58 msgid "Search all" msgstr "" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:57 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:70 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:82 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:94 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:59 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:72 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:84 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:96 msgid "Click here to change the search type" msgstr "" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:69 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:71 msgid "Search by missed call" msgstr "" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:81 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:83 msgid "Search by incoming call" msgstr "" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:93 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:95 msgid "Search by outgoing call" msgstr "" +#~ msgid "IP call - %s" +#~ msgstr "Telefonów IP - %s" + +#~ msgid "Codec" +#~ msgstr "Kodek" + #~ msgctxt "NAME OF TRANSLATORS" #~ msgid "Your names" #~ msgstr "" -#~ ",Launchpad Contributions:,Maxime Chambreuil, ,Launchpad " -#~ "Contributions:,Maxime Chambreuil, ,Launchpad Contributions:,Maxime " -#~ "Chambreuil, ,Launchpad Contributions:,Mariusz Bednarz,Maxime Chambreuil" +#~ ",Launchpad Contributions:,Maxime Chambreuil, ,Launchpad Contributions:," +#~ "Maxime Chambreuil, ,Launchpad Contributions:,Maxime Chambreuil, ," +#~ "Launchpad Contributions:,Mariusz Bednarz,Maxime Chambreuil" #~ msgctxt "EMAIL OF TRANSLATORS" #~ msgid "Your emails" #~ msgstr "" -#~ ",,maxime.chambreuil@gmail.com,,,maxime.chambreuil@gmail.com,,,maxime.chambreu" -#~ "il@gmail.com,,,mbednarz@bedmar.pl,maxime.chambreuil@gmail.com" +#~ ",,maxime.chambreuil@gmail.com,,,maxime.chambreuil@gmail.com,,,maxime." +#~ "chambreuil@gmail.com,,,mbednarz@bedmar.pl,maxime.chambreuil@gmail.com" diff --git a/lang/pt/pt.po b/lang/pt/pt.po index 436992737a..ef406f9445 100644 --- a/lang/pt/pt.po +++ b/lang/pt/pt.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-10-14 11:18-0400\n" +"POT-Creation-Date: 2009-12-03 10:22-0500\n" "PO-Revision-Date: 2009-10-26 20:46+0000\n" "Last-Translator: Maxime Chambreuil <maxime.chambreuil@gmail.com>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -60,46 +60,32 @@ msgstr "" msgid "Invalid" msgstr "Inválido" -#: ../sflphone-client-gnome/src/actions.c:54 -#: ../sflphone-client-gnome/src/sflnotify.c:94 -#, c-format -msgid "%d voice mail" -msgid_plural "%d voice mails" -msgstr[0] "" -msgstr[1] "" - -#: ../sflphone-client-gnome/src/actions.c:83 -#: ../sflphone-client-gnome/src/actions.c:919 -#: ../sflphone-client-gnome/src/actions.c:926 +#: ../sflphone-client-gnome/src/actions.c:98 msgid "Using account" msgstr "" -#: ../sflphone-client-gnome/src/actions.c:89 +#: ../sflphone-client-gnome/src/actions.c:104 msgid "No registered accounts" msgstr "" -#: ../sflphone-client-gnome/src/actions.c:268 +#: ../sflphone-client-gnome/src/actions.c:285 msgid "" "Unable to connect to the SFLphone server.\n" "Make sure the daemon is running." msgstr "" -#: ../sflphone-client-gnome/src/actions.c:913 -#, c-format -msgid "IP call - %s" +#: ../sflphone-client-gnome/src/actions.c:589 +#: ../sflphone-client-gnome/src/actions.c:911 +msgid "Direct SIP call" msgstr "" -#: ../sflphone-client-gnome/src/actions.c:922 -msgid "Codec" -msgstr "Codec" - -#: ../sflphone-client-gnome/src/actions.c:1119 +#: ../sflphone-client-gnome/src/actions.c:1103 #, c-format msgid "" "<b>Error: No audio codecs found.\n" "\n" -"</b> SFL audio codecs have to be placed in <i>%s</i> or in the " -"<b>.sflphone</b> directory in your home( <i>%s</i> )" +"</b> SFL audio codecs have to be placed in <i>%s</i> or in the <b>.sflphone</" +"b> directory in your home( <i>%s</i> )" msgstr "" #: ../sflphone-client-gnome/src/errors.c:29 @@ -135,53 +121,53 @@ msgstr "" msgid "Do you still want to quit?" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:299 +#: ../sflphone-client-gnome/src/mainwindow.c:298 msgid "SFLphone Error" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:391 +#: ../sflphone-client-gnome/src/mainwindow.c:392 #, c-format msgid "ZRTP is not supported by peer %s\n" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:392 +#: ../sflphone-client-gnome/src/mainwindow.c:393 msgid "Secure Communication Unavailable" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:393 -#: ../sflphone-client-gnome/src/mainwindow.c:415 +#: ../sflphone-client-gnome/src/mainwindow.c:394 +#: ../sflphone-client-gnome/src/mainwindow.c:416 msgid "Continue" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:394 -#: ../sflphone-client-gnome/src/mainwindow.c:416 -#: ../sflphone-client-gnome/src/mainwindow.c:430 +#: ../sflphone-client-gnome/src/mainwindow.c:395 +#: ../sflphone-client-gnome/src/mainwindow.c:417 +#: ../sflphone-client-gnome/src/mainwindow.c:431 msgid "Stop Call" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:413 +#: ../sflphone-client-gnome/src/mainwindow.c:414 #, c-format msgid "" "A %s error forced the call with %s to fall under unencrypted mode.\n" "Exact reason: %s\n" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:414 +#: ../sflphone-client-gnome/src/mainwindow.c:415 msgid "ZRTP negotiation failed" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:427 +#: ../sflphone-client-gnome/src/mainwindow.c:428 #, c-format msgid "" "%s wants to stop using secure communication. Confirm will resume " "conversation without SRTP.\n" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:428 +#: ../sflphone-client-gnome/src/mainwindow.c:429 msgid "Confirm Go Clear" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:429 +#: ../sflphone-client-gnome/src/mainwindow.c:430 msgid "Confirm" msgstr "" @@ -196,6 +182,13 @@ msgstr "conta %s : %s" msgid "<i>From</i> %s" msgstr "" +#: ../sflphone-client-gnome/src/sflnotify.c:94 +#, c-format +msgid "%d voice mail" +msgid_plural "%d voice mails" +msgstr[0] "" +msgstr[1] "" + #: ../sflphone-client-gnome/src/sflnotify.c:111 #, c-format msgid "Calling with %s account <i>%s</i>" @@ -243,15 +236,15 @@ msgstr "" msgid "Mic volume" msgstr "" -#: ../sflphone-client-gnome/src/statusicon.c:91 +#: ../sflphone-client-gnome/src/statusicon.c:96 msgid "_Show main window" msgstr "" -#: ../sflphone-client-gnome/src/statusicon.c:126 +#: ../sflphone-client-gnome/src/statusicon.c:131 msgid "SFLphone" msgstr "SFLphone" -#: ../sflphone-client-gnome/src/statusicon.c:127 +#: ../sflphone-client-gnome/src/statusicon.c:132 #, c-format msgid "%i account configured" msgid_plural "%i accounts configured" @@ -259,202 +252,398 @@ msgstr[0] "" msgstr[1] "" #: ../sflphone-client-gnome/src/toolbar.c:38 -#: ../sflphone-client-gnome/src/uimanager.c:750 +#: ../sflphone-client-gnome/src/uimanager.c:693 +#: ../sflphone-client-gnome/src/uimanager.c:727 msgid "Voicemail" msgstr "Correio de voz" -#: ../sflphone-client-gnome/src/uimanager.c:403 +#: ../sflphone-client-gnome/src/uimanager.c:117 +msgid "No address book selected" +msgstr "Livro de endereços" + +#: ../sflphone-client-gnome/src/uimanager.c:137 +#: ../sflphone-client-gnome/src/uimanager.c:756 +msgid "Address book" +msgstr "Livro de endereços" + +#: ../sflphone-client-gnome/src/uimanager.c:279 +msgid "Voicemail (%i)" +msgstr "Correio de voz (%i)" + +#: ../sflphone-client-gnome/src/uimanager.c:342 msgid "SFLphone is a VoIP client compatible with SIP and IAX2 protocols." msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:406 +#: ../sflphone-client-gnome/src/uimanager.c:345 msgid "About SFLphone" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:1028 +#: ../sflphone-client-gnome/src/uimanager.c:719 +msgid "Call" +msgstr "_Chamar" + +#: ../sflphone-client-gnome/src/uimanager.c:720 +#: ../sflphone-client-gnome/src/uimanager.c:1184 +msgid "_New call" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:720 +msgid "Place a new call" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:721 +#: ../sflphone-client-gnome/src/uimanager.c:979 msgid "_Pick up" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:1040 -#: ../sflphone-client-gnome/src/uimanager.c:1081 +#: ../sflphone-client-gnome/src/uimanager.c:721 +msgid "Answer the call" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:722 +#: ../sflphone-client-gnome/src/uimanager.c:991 +#: ../sflphone-client-gnome/src/uimanager.c:1032 msgid "_Hang up" msgstr "_Desligar" -#: ../sflphone-client-gnome/src/uimanager.c:1052 -#: ../sflphone-client-gnome/src/uimanager.c:1093 -msgid "On _Hold" +#: ../sflphone-client-gnome/src/uimanager.c:722 +msgid "Finish the call" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:723 +msgid "O_n hold" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:1064 +#: ../sflphone-client-gnome/src/uimanager.c:723 +msgid "Place the call on hold" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:724 +msgid "O_ff hold" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:724 +msgid "Place the call off hold" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:725 +#: ../sflphone-client-gnome/src/uimanager.c:1015 msgid "_Record" msgstr "_Gravar" -#: ../sflphone-client-gnome/src/uimanager.c:1154 -msgid "_Call back" +#: ../sflphone-client-gnome/src/uimanager.c:725 +msgid "Record the current conversation" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:1226 -msgid "_New call" +#: ../sflphone-client-gnome/src/uimanager.c:726 +msgid "Configuration _Assistant" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:726 +msgid "Run the configuration assistant" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:727 +msgid "Call your voicemail" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:1300 +#: ../sflphone-client-gnome/src/uimanager.c:728 +msgid "_Close" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:728 +msgid "Minimize to system tray" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:729 +msgid "_Quit" +msgstr "_Editar" + +#: ../sflphone-client-gnome/src/uimanager.c:729 +msgid "Quit the program" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:732 +msgid "_Edit" +msgstr "_Editar" + +#: ../sflphone-client-gnome/src/uimanager.c:733 +msgid "_Copy" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:733 +msgid "Copy the selection" +msgstr "Remover a conta seleccionada" + +#: ../sflphone-client-gnome/src/uimanager.c:734 +msgid "_Paste" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:734 +msgid "Paste the clipboard" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:735 +msgid "Clear _history" +msgstr "Histórico de chamadas" + +#: ../sflphone-client-gnome/src/uimanager.c:735 +msgid "Clear the call history" +msgstr "Histórico de chamadas" + +#: ../sflphone-client-gnome/src/uimanager.c:736 +msgid "_Accounts" +msgstr "_Contas" + +#: ../sflphone-client-gnome/src/uimanager.c:736 +msgid "Edit your accounts" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:737 +msgid "_Preferences" +msgstr "Preferências" + +#: ../sflphone-client-gnome/src/uimanager.c:737 +msgid "Change your preferences" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:740 +msgid "_View" +msgstr "_Ver" + +#: ../sflphone-client-gnome/src/uimanager.c:743 +msgid "_Help" +msgstr "_Ajuda" + +#: ../sflphone-client-gnome/src/uimanager.c:744 +msgid "Contents" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:744 +msgid "Open the manual" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:745 +msgid "About this application" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:751 +msgid "_Transfer" +msgstr "Transferir" + +#: ../sflphone-client-gnome/src/uimanager.c:751 +msgid "Transfer the call" +msgstr "Transferir" + +#: ../sflphone-client-gnome/src/uimanager.c:752 +msgid "_Show toolbar" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:752 +msgid "Show the toolbar" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:753 +msgid "_Dialpad" +msgstr "Marca_dor" + +#: ../sflphone-client-gnome/src/uimanager.c:753 +msgid "Show the dialpad" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:754 +msgid "_Volume controls" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:754 +msgid "Show the volume controls" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:755 +msgid "_History" +msgstr "Histórico" + +#: ../sflphone-client-gnome/src/uimanager.c:755 +msgid "Calls history" +msgstr "Histórico de chamadas" + +#: ../sflphone-client-gnome/src/uimanager.c:756 +msgid "_Address book" +msgstr "Livro de endereços" + +#: ../sflphone-client-gnome/src/uimanager.c:1003 +#: ../sflphone-client-gnome/src/uimanager.c:1044 +msgid "On _Hold" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:1107 +msgid "_Call back" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:1258 msgid "Edit phone number" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:1311 +#: ../sflphone-client-gnome/src/uimanager.c:1269 msgid "Edit the phone number before making a call" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:164 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:180 msgid "Account Parameters" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:173 -#: ../sflphone-client-gnome/src/config/assistant.c:294 -#: ../sflphone-client-gnome/src/config/assistant.c:402 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:189 +#: ../sflphone-client-gnome/src/config/assistant.c:314 +#: ../sflphone-client-gnome/src/config/assistant.c:427 msgid "_Alias" msgstr "_Nomear" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:181 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:197 msgid "_Protocol" msgstr "_Protocolo" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:199 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:215 msgid "Unknown" msgstr "Desconhecido" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:209 -#: ../sflphone-client-gnome/src/config/assistant.c:302 -#: ../sflphone-client-gnome/src/config/assistant.c:410 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:225 +#: ../sflphone-client-gnome/src/config/assistant.c:322 +#: ../sflphone-client-gnome/src/config/assistant.c:435 msgid "_Host name" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:217 -#: ../sflphone-client-gnome/src/config/assistant.c:310 -#: ../sflphone-client-gnome/src/config/assistant.c:418 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:233 +#: ../sflphone-client-gnome/src/config/assistant.c:330 +#: ../sflphone-client-gnome/src/config/assistant.c:443 msgid "_User name" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:234 -#: ../sflphone-client-gnome/src/config/assistant.c:326 -#: ../sflphone-client-gnome/src/config/assistant.c:433 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:250 +#: ../sflphone-client-gnome/src/config/assistant.c:346 +#: ../sflphone-client-gnome/src/config/assistant.c:458 msgid "_Password" msgstr "_Senha" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:254 -#: ../sflphone-client-gnome/src/config/assistant.c:344 -#: ../sflphone-client-gnome/src/config/assistant.c:449 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:270 +#: ../sflphone-client-gnome/src/config/assistant.c:363 +#: ../sflphone-client-gnome/src/config/assistant.c:473 +msgid "Show password" +msgstr "Senha" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:274 +#: ../sflphone-client-gnome/src/config/assistant.c:368 +#: ../sflphone-client-gnome/src/config/assistant.c:478 msgid "_Voicemail number" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:340 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:361 msgid "Authentication" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:341 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:362 msgid "Secret" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:466 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:605 msgid "Credential" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:501 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:640 msgid "Authentication name" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:512 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:651 msgid "Password" msgstr "Senha" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:535 -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:909 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:201 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:674 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1056 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:321 msgid "Security" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:547 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:213 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:687 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:333 msgid "Use TLS transport (sips)" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:552 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:218 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:693 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:338 msgid "SRTP key exchange" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:558 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:224 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:699 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:344 msgid "Disabled" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:674 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:795 msgid "Registration" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:679 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:800 msgid "Registration expire" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:687 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:809 msgid "_Comply with RFC 3263" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:693 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:463 -msgid "Network" -msgstr "Rede" +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:816 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:234 +msgid "Network Interface" +msgstr "A rede está inacessível" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:707 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:830 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:249 msgid "Local address" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:744 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:880 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:301 msgid "Local port" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:752 -msgid "Set published address and port:" +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:893 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:928 +msgid "Published address" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:756 -msgid "Using STUN " +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:899 +msgid "Using STUN" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:761 -msgid "Same as local parameters" +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:906 +msgid "STUN server URL" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:764 -msgid "Manually" +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:914 +msgid "Same as local parameters" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:769 -msgid "Published address" +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:917 +msgid "Set published address and port:" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:777 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:936 msgid "Published port" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:785 -msgid "STUN server URL" -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:880 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1027 msgid "Account settings" msgstr "Configurações da conta" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:899 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1046 msgid "Basic" msgstr "Básico" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:904 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1051 msgid "Advanced" msgstr "Avançado" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:169 -msgid "Server returned \"" +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:164 +#, c-format +msgid "Server returned \"%s\" (%d)" msgstr "" #: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:389 @@ -473,32 +662,19 @@ msgstr "Contas" msgid "Configured Accounts" msgstr "" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:505 -msgid "There " -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:506 -msgid "is " -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:506 -msgid "are " -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:508 -msgid " active account" -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:509 -msgid "s" -msgstr "" +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:501 +#, c-format +msgid "There is %d active account" +msgid_plural "There are %d active accounts" +msgstr[0] "" +msgstr[1] "" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:514 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:507 msgid "You have no active account" msgstr "" #: ../sflphone-client-gnome/src/config/addressbook-config.c:306 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:443 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:556 msgid "General" msgstr "Geral" @@ -543,225 +719,220 @@ msgid "Select which Evolution address books to use" msgstr "" #: ../sflphone-client-gnome/src/config/addressbook-config.c:404 -#: ../sflphone-client-gnome/src/config/audioconf.c:578 +#: ../sflphone-client-gnome/src/config/audioconf.c:577 msgid "Name" msgstr "Nome" -#: ../sflphone-client-gnome/src/config/assistant.c:69 +#: ../sflphone-client-gnome/src/config/assistant.c:75 #, c-format msgid "This assistant is now finished." msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:71 +#: ../sflphone-client-gnome/src/config/assistant.c:77 msgid "" "You can at any time check your registration state or modify your accounts " "parameters in the Options/Accounts window." msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:74 +#: ../sflphone-client-gnome/src/config/assistant.c:80 msgid "Alias" msgstr "Nome Alternativo" -#: ../sflphone-client-gnome/src/config/assistant.c:78 +#: ../sflphone-client-gnome/src/config/assistant.c:84 msgid "Server" msgstr "Servidor" -#: ../sflphone-client-gnome/src/config/assistant.c:82 +#: ../sflphone-client-gnome/src/config/assistant.c:88 msgid "Username" msgstr "Utilizador" -#: ../sflphone-client-gnome/src/config/assistant.c:86 +#: ../sflphone-client-gnome/src/config/assistant.c:92 msgid "Security: " msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:88 +#: ../sflphone-client-gnome/src/config/assistant.c:94 msgid "SRTP/ZRTP draft-zimmermann" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:90 -#: ../sflphone-client-gnome/src/config/assistant.c:182 +#: ../sflphone-client-gnome/src/config/assistant.c:96 msgid "None" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:210 +#: ../sflphone-client-gnome/src/config/assistant.c:229 msgid "SFLphone account creation wizard" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:236 +#: ../sflphone-client-gnome/src/config/assistant.c:255 msgid "Welcome to the Account creation wizard of SFLphone!" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:237 +#: ../sflphone-client-gnome/src/config/assistant.c:256 msgid "This installation wizard will help you configure an account." msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:251 +#: ../sflphone-client-gnome/src/config/assistant.c:270 msgid "VoIP Protocols" msgstr "Protocolos VoIP" -#: ../sflphone-client-gnome/src/config/assistant.c:251 +#: ../sflphone-client-gnome/src/config/assistant.c:270 msgid "Select an account type" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:253 +#: ../sflphone-client-gnome/src/config/assistant.c:272 msgid "SIP (Session Initiation Protocol)" msgstr "SIP (Session Initiation Protocol)" -#: ../sflphone-client-gnome/src/config/assistant.c:255 +#: ../sflphone-client-gnome/src/config/assistant.c:274 msgid "IAX2 (InterAsterix Exchange)" msgstr "IAX2 (InterAsterix Exchange)" -#: ../sflphone-client-gnome/src/config/assistant.c:269 +#: ../sflphone-client-gnome/src/config/assistant.c:288 msgid "Account" msgstr "Conta" -#: ../sflphone-client-gnome/src/config/assistant.c:269 +#: ../sflphone-client-gnome/src/config/assistant.c:288 msgid "Please select one of the following options" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:271 +#: ../sflphone-client-gnome/src/config/assistant.c:290 msgid "Create a free SIP/IAX2 account on sflphone.org" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:273 +#: ../sflphone-client-gnome/src/config/assistant.c:292 msgid "Register an existing SIP or IAX2 account" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:286 +#: ../sflphone-client-gnome/src/config/assistant.c:306 msgid "SIP account settings" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:286 -#: ../sflphone-client-gnome/src/config/assistant.c:394 +#: ../sflphone-client-gnome/src/config/assistant.c:306 +#: ../sflphone-client-gnome/src/config/assistant.c:419 msgid "Please fill the following information" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:352 -#: ../sflphone-client-gnome/src/config/assistant.c:381 +#: ../sflphone-client-gnome/src/config/assistant.c:376 +#: ../sflphone-client-gnome/src/config/assistant.c:405 msgid "Secure communications with _ZRTP" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:365 +#: ../sflphone-client-gnome/src/config/assistant.c:389 msgid "Optional email address" msgstr "Endereço de email opcional" -#: ../sflphone-client-gnome/src/config/assistant.c:365 +#: ../sflphone-client-gnome/src/config/assistant.c:389 msgid "This email address will be used to send your voicemail messages." msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:373 +#: ../sflphone-client-gnome/src/config/assistant.c:397 msgid "_Email address" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:394 +#: ../sflphone-client-gnome/src/config/assistant.c:419 msgid "IAX2 account settings" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:467 +#: ../sflphone-client-gnome/src/config/assistant.c:496 msgid "Network Address Translation (NAT)" msgstr "Network Address Translation (NAT)" -#: ../sflphone-client-gnome/src/config/assistant.c:467 +#: ../sflphone-client-gnome/src/config/assistant.c:496 msgid "You should probably enable this if you are behind a firewall." msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:476 +#: ../sflphone-client-gnome/src/config/assistant.c:505 msgid "E_nable STUN" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:483 +#: ../sflphone-client-gnome/src/config/assistant.c:512 msgid "_STUN server" msgstr "_Servidor STUN" -#: ../sflphone-client-gnome/src/config/assistant.c:497 +#: ../sflphone-client-gnome/src/config/assistant.c:526 msgid "Account Registration" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:497 +#: ../sflphone-client-gnome/src/config/assistant.c:526 msgid "Congratulations!" msgstr "Parabéns!" -#: ../sflphone-client-gnome/src/config/audioconf.c:583 +#: ../sflphone-client-gnome/src/config/audioconf.c:582 msgid "Frequency" msgstr "Frequência" -#: ../sflphone-client-gnome/src/config/audioconf.c:588 +#: ../sflphone-client-gnome/src/config/audioconf.c:587 msgid "Bitrate" msgstr "Taxa de Dados" -#: ../sflphone-client-gnome/src/config/audioconf.c:593 +#: ../sflphone-client-gnome/src/config/audioconf.c:592 msgid "Bandwidth" msgstr "Largura de Banda" -#: ../sflphone-client-gnome/src/config/audioconf.c:673 +#: ../sflphone-client-gnome/src/config/audioconf.c:670 msgid "ALSA plugin" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:695 +#: ../sflphone-client-gnome/src/config/audioconf.c:692 msgid "Output" msgstr "Saída" -#: ../sflphone-client-gnome/src/config/audioconf.c:717 +#: ../sflphone-client-gnome/src/config/audioconf.c:714 msgid "Input" msgstr "Entrada" -#: ../sflphone-client-gnome/src/config/audioconf.c:752 +#: ../sflphone-client-gnome/src/config/audioconf.c:749 msgid "_Voice Activity Detection" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:762 +#: ../sflphone-client-gnome/src/config/audioconf.c:759 msgid "_Noise Reduction (Narrow-Band Companding)" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:798 +#: ../sflphone-client-gnome/src/config/audioconf.c:800 msgid "Sound Manager" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:807 +#: ../sflphone-client-gnome/src/config/audioconf.c:809 msgid "_Pulseaudio" msgstr "_Pulseaudio" -#: ../sflphone-client-gnome/src/config/audioconf.c:811 +#: ../sflphone-client-gnome/src/config/audioconf.c:813 msgid "_ALSA" msgstr "_ALSA" -#: ../sflphone-client-gnome/src/config/audioconf.c:816 -msgid "_Mute other applications during a call" -msgstr "" - -#: ../sflphone-client-gnome/src/config/audioconf.c:823 +#: ../sflphone-client-gnome/src/config/audioconf.c:819 msgid "ALSA settings" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:840 +#: ../sflphone-client-gnome/src/config/audioconf.c:836 msgid "Codecs" msgstr "Codecs" -#: ../sflphone-client-gnome/src/config/audioconf.c:869 +#: ../sflphone-client-gnome/src/config/audioconf.c:865 msgid "Recordings" msgstr "Gravações" -#: ../sflphone-client-gnome/src/config/audioconf.c:873 +#: ../sflphone-client-gnome/src/config/audioconf.c:869 msgid "Destination folder" msgstr "Pasta de destino" -#: ../sflphone-client-gnome/src/config/audioconf.c:877 +#: ../sflphone-client-gnome/src/config/audioconf.c:873 msgid "Select a folder" msgstr "Seleccione uma pasta" -#: ../sflphone-client-gnome/src/config/audioconf.c:883 +#: ../sflphone-client-gnome/src/config/audioconf.c:879 msgid "Ringtones" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:889 +#: ../sflphone-client-gnome/src/config/audioconf.c:885 msgid "_Enable ringtones" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:895 +#: ../sflphone-client-gnome/src/config/audioconf.c:891 msgid "Choose a ringtone" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:901 +#: ../sflphone-client-gnome/src/config/audioconf.c:897 msgid "Audio Files" msgstr "Ficheiros Áudio" @@ -798,86 +969,66 @@ msgstr "" msgid "_Prefix dialed numbers with" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:195 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:225 msgid "" "This profile is used when you want to reach a remote peer simply by typing a " "sip URI such as <b>sip:remotepeer</b>. The settings you define here will " "also be used if no account can be matched to an incoming or outgoing call." msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:274 -msgid "SIP Port" -msgstr "Porta SIP" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:281 -msgid "UDP Transport" -msgstr "" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:319 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:440 msgid "Desktop Notifications" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:323 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:444 msgid "_Enable notifications" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:329 -msgid "Enable voicemail _notifications" -msgstr "" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:341 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:450 msgid "System Tray Icon" msgstr "Ícone de Notificação" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:344 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:453 msgid "_Popup main window on incoming call" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:349 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:457 msgid "Ne_ver popup main window" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:353 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:463 msgid "Hide SFLphone window on _startup" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:359 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:469 msgid "Calls History" msgstr "Histórico de Chamadas" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:362 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:472 msgid "_Keep my history for at least" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:373 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:483 msgid "days" msgstr "dias" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:377 -msgid "Configuration File" -msgstr "" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:379 -msgid "Store SIP credentials as MD5 hash" -msgstr "" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:423 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:536 msgid "Preferences" msgstr "Preferências" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:448 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:561 msgid "Audio" msgstr "Áudio" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:453 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:566 msgid "Address Book" msgstr "Livro de Endereços" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:458 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:571 msgid "Hooks" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:468 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:581 msgid "Direct IP calls" msgstr "" @@ -885,11 +1036,11 @@ msgstr "" msgid "Advanced options for TLS" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:55 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:56 msgid "TLS transport" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:59 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:60 msgid "" "TLS transport can be used along with UDP for those calls that would\n" "require secure sip transactions (aka SIPS). You can configure a different\n" @@ -898,55 +1049,55 @@ msgid "" "port, different one from each other\n" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:100 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:103 msgid "Certificate of Authority list" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:104 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:107 msgid "Choose a CA list file (optional)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:115 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:131 msgid "Public endpoint certificate file" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:119 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:135 msgid "Choose a public endpoint certificate (optional)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:134 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:159 msgid "Choose a private key file (optional)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:145 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:181 msgid "Password for the private key" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:168 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:204 msgid "TLS protocol method" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:202 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:238 msgid "TLS cipher list" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:211 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:247 msgid "Server name instance for outgoing TLS connection" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:219 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:255 msgid "Negotiation timeout (sec:msec)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:236 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:272 msgid "Verify incoming certificates, as a server" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:242 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:278 msgid "Verify certificates from answer, as a client" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:248 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:284 msgid "Require certificate for incoming tls connections" msgstr "" @@ -954,45 +1105,54 @@ msgstr "" msgid "ZRTP Options" msgstr "" -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:68 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:69 msgid "Send Hello Hash in S_DP" msgstr "" -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:74 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:75 msgid "Ask User to Confirm SAS" msgstr "" -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:80 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:81 msgid "_Warn if ZRTP not supported" msgstr "" -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:86 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:87 msgid "Display SAS once for hold events" msgstr "" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:56 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:58 msgid "Search all" msgstr "" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:57 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:70 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:82 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:94 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:59 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:72 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:84 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:96 msgid "Click here to change the search type" msgstr "Clique aqui para alterar o tipo de procura" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:69 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:71 msgid "Search by missed call" msgstr "" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:81 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:83 msgid "Search by incoming call" msgstr "" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:93 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:95 msgid "Search by outgoing call" msgstr "" +#~ msgid "Codec" +#~ msgstr "Codec" + +#~ msgid "Network" +#~ msgstr "Rede" + +#~ msgid "SIP Port" +#~ msgstr "Porta SIP" + #~ msgid "Email address" #~ msgstr "Endereço de correiro electrónico" @@ -1005,27 +1165,15 @@ msgstr "" #~ msgid "Incoming call" #~ msgstr "Chamada recebida" -#~ msgid "Call history" -#~ msgstr "Histórico de chamadas" - -#~ msgid "Address book" -#~ msgstr "Livro de endereços" - #~ msgid "Pick up" #~ msgstr "Atender" #~ msgid "Record" #~ msgstr "Gravar" -#~ msgid "Transfer" -#~ msgstr "Transferir" - #~ msgid "Hang up" #~ msgstr "Desligar" -#~ msgid "Remove the selected account" -#~ msgstr "Remover a conta seleccionada" - #~ msgid "Remove" #~ msgstr "Remover" @@ -1065,27 +1213,6 @@ msgstr "" #~ msgid "Connection" #~ msgstr "Connecção" -#~ msgid "History" -#~ msgstr "Histórico" - -#~ msgid "_Help" -#~ msgstr "_Ajuda" - -#~ msgid "_Call" -#~ msgstr "_Chamar" - -#~ msgid "_Dialpad" -#~ msgstr "Marca_dor" - -#~ msgid "_Edit" -#~ msgstr "_Editar" - -#~ msgid "_Accounts" -#~ msgstr "_Contas" - -#~ msgid "_View" -#~ msgstr "_Ver" - #~ msgid "PulseAudio sound server" #~ msgstr "Servidor de som PulseAudio" @@ -1110,13 +1237,13 @@ msgstr "" #~ msgctxt "NAME OF TRANSLATORS" #~ msgid "Your names" #~ msgstr "" -#~ ",Launchpad Contributions:,Maxime Chambreuil, ,Launchpad " -#~ "Contributions:,Maxime Chambreuil,Tiago Silva, ,Launchpad " -#~ "Contributions:,Maxime Chambreuil,Tiago Silva, ,Launchpad " -#~ "Contributions:,Maxime Chambreuil,Tiago Silva" +#~ ",Launchpad Contributions:,Maxime Chambreuil, ,Launchpad Contributions:," +#~ "Maxime Chambreuil,Tiago Silva, ,Launchpad Contributions:,Maxime " +#~ "Chambreuil,Tiago Silva, ,Launchpad Contributions:,Maxime Chambreuil,Tiago " +#~ "Silva" #~ msgctxt "EMAIL OF TRANSLATORS" #~ msgid "Your emails" #~ msgstr "" -#~ ",,maxime.chambreuil@gmail.com,,,maxime.chambreuil@gmail.com,,,,maxime.chambre" -#~ "uil@gmail.com,,,,maxime.chambreuil@gmail.com," +#~ ",,maxime.chambreuil@gmail.com,,,maxime.chambreuil@gmail.com,,,,maxime." +#~ "chambreuil@gmail.com,,,,maxime.chambreuil@gmail.com," diff --git a/lang/pt_BR/pt_BR.po b/lang/pt_BR/pt_BR.po index ca804b75ce..0a5429e6c0 100644 --- a/lang/pt_BR/pt_BR.po +++ b/lang/pt_BR/pt_BR.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: sflphone\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-10-14 11:18-0400\n" +"POT-Creation-Date: 2009-12-03 10:22-0500\n" "PO-Revision-Date: 2009-10-26 20:46+0000\n" "Last-Translator: kalib <kalibslack@gmail.com>\n" "Language-Team: Brazilian Portuguese <pt_BR@li.org>\n" @@ -60,25 +60,15 @@ msgstr "Servidor stun inválido" msgid "Invalid" msgstr "Inválido" -#: ../sflphone-client-gnome/src/actions.c:54 -#: ../sflphone-client-gnome/src/sflnotify.c:94 -#, c-format -msgid "%d voice mail" -msgid_plural "%d voice mails" -msgstr[0] "%d mensagem de voz" -msgstr[1] "%d mensagens de voz" - -#: ../sflphone-client-gnome/src/actions.c:83 -#: ../sflphone-client-gnome/src/actions.c:919 -#: ../sflphone-client-gnome/src/actions.c:926 +#: ../sflphone-client-gnome/src/actions.c:98 msgid "Using account" msgstr "Utilizando conta" -#: ../sflphone-client-gnome/src/actions.c:89 +#: ../sflphone-client-gnome/src/actions.c:104 msgid "No registered accounts" msgstr "Sem contas registradas" -#: ../sflphone-client-gnome/src/actions.c:268 +#: ../sflphone-client-gnome/src/actions.c:285 msgid "" "Unable to connect to the SFLphone server.\n" "Make sure the daemon is running." @@ -86,22 +76,18 @@ msgstr "" "Incapaz de conectar ao servidor SFLphone.\n" "Tenha certeza de que o daemon está rodando." -#: ../sflphone-client-gnome/src/actions.c:913 -#, c-format -msgid "IP call - %s" -msgstr "Ligação IP - %s" - -#: ../sflphone-client-gnome/src/actions.c:922 -msgid "Codec" -msgstr "Codec" +#: ../sflphone-client-gnome/src/actions.c:589 +#: ../sflphone-client-gnome/src/actions.c:911 +msgid "Direct SIP call" +msgstr "Ligações IP diretas" -#: ../sflphone-client-gnome/src/actions.c:1119 +#: ../sflphone-client-gnome/src/actions.c:1103 #, c-format msgid "" "<b>Error: No audio codecs found.\n" "\n" -"</b> SFL audio codecs have to be placed in <i>%s</i> or in the " -"<b>.sflphone</b> directory in your home( <i>%s</i> )" +"</b> SFL audio codecs have to be placed in <i>%s</i> or in the <b>.sflphone</" +"b> directory in your home( <i>%s</i> )" msgstr "" "<b>Erro: Não foram encontrados codecs de áudio.\n" "\n" @@ -150,31 +136,31 @@ msgstr "Existem ligações em progresso" msgid "Do you still want to quit?" msgstr "Você ainda deseja sair?" -#: ../sflphone-client-gnome/src/mainwindow.c:299 +#: ../sflphone-client-gnome/src/mainwindow.c:298 msgid "SFLphone Error" msgstr "Erro no SFLphone" -#: ../sflphone-client-gnome/src/mainwindow.c:391 +#: ../sflphone-client-gnome/src/mainwindow.c:392 #, c-format msgid "ZRTP is not supported by peer %s\n" msgstr "ZRTP não é suportado pelo peer %s\n" -#: ../sflphone-client-gnome/src/mainwindow.c:392 +#: ../sflphone-client-gnome/src/mainwindow.c:393 msgid "Secure Communication Unavailable" msgstr "Comunicação Segura Indisponível" -#: ../sflphone-client-gnome/src/mainwindow.c:393 -#: ../sflphone-client-gnome/src/mainwindow.c:415 +#: ../sflphone-client-gnome/src/mainwindow.c:394 +#: ../sflphone-client-gnome/src/mainwindow.c:416 msgid "Continue" msgstr "Continuar" -#: ../sflphone-client-gnome/src/mainwindow.c:394 -#: ../sflphone-client-gnome/src/mainwindow.c:416 -#: ../sflphone-client-gnome/src/mainwindow.c:430 +#: ../sflphone-client-gnome/src/mainwindow.c:395 +#: ../sflphone-client-gnome/src/mainwindow.c:417 +#: ../sflphone-client-gnome/src/mainwindow.c:431 msgid "Stop Call" msgstr "Finalizar Chamada" -#: ../sflphone-client-gnome/src/mainwindow.c:413 +#: ../sflphone-client-gnome/src/mainwindow.c:414 #, c-format msgid "" "A %s error forced the call with %s to fall under unencrypted mode.\n" @@ -183,11 +169,11 @@ msgstr "" "Um erro %s forçou a ligação com %s a mudar para um modo não encriptado.\n" "Motivo exato: %s\n" -#: ../sflphone-client-gnome/src/mainwindow.c:414 +#: ../sflphone-client-gnome/src/mainwindow.c:415 msgid "ZRTP negotiation failed" msgstr "Negociação ZRTP falhou" -#: ../sflphone-client-gnome/src/mainwindow.c:427 +#: ../sflphone-client-gnome/src/mainwindow.c:428 #, c-format msgid "" "%s wants to stop using secure communication. Confirm will resume " @@ -196,11 +182,11 @@ msgstr "" "%s deseja finalizar a utilização de comunicação segura. A confirmação irá " "retomar sem SRTP.\n" -#: ../sflphone-client-gnome/src/mainwindow.c:428 +#: ../sflphone-client-gnome/src/mainwindow.c:429 msgid "Confirm Go Clear" msgstr "Confirmar Vá Limpar" -#: ../sflphone-client-gnome/src/mainwindow.c:429 +#: ../sflphone-client-gnome/src/mainwindow.c:430 msgid "Confirm" msgstr "Confirmar" @@ -215,6 +201,13 @@ msgstr "%s conta : %s" msgid "<i>From</i> %s" msgstr "<i>De</i> %s" +#: ../sflphone-client-gnome/src/sflnotify.c:94 +#, c-format +msgid "%d voice mail" +msgid_plural "%d voice mails" +msgstr[0] "%d mensagem de voz" +msgstr[1] "%d mensagens de voz" + #: ../sflphone-client-gnome/src/sflnotify.c:111 #, c-format msgid "Calling with %s account <i>%s</i>" @@ -264,15 +257,15 @@ msgstr "Volume dos auto-falantes" msgid "Mic volume" msgstr "Volume do microfone" -#: ../sflphone-client-gnome/src/statusicon.c:91 +#: ../sflphone-client-gnome/src/statusicon.c:96 msgid "_Show main window" msgstr "_Apresentar janela principal" -#: ../sflphone-client-gnome/src/statusicon.c:126 +#: ../sflphone-client-gnome/src/statusicon.c:131 msgid "SFLphone" msgstr "SFLphone" -#: ../sflphone-client-gnome/src/statusicon.c:127 +#: ../sflphone-client-gnome/src/statusicon.c:132 #, c-format msgid "%i account configured" msgid_plural "%i accounts configured" @@ -280,202 +273,397 @@ msgstr[0] "%i conta configurada" msgstr[1] "%i contas configuradas" #: ../sflphone-client-gnome/src/toolbar.c:38 -#: ../sflphone-client-gnome/src/uimanager.c:750 +#: ../sflphone-client-gnome/src/uimanager.c:693 +#: ../sflphone-client-gnome/src/uimanager.c:727 msgid "Voicemail" msgstr "Correio de voz" -#: ../sflphone-client-gnome/src/uimanager.c:403 +#: ../sflphone-client-gnome/src/uimanager.c:117 +msgid "No address book selected" +msgstr "Catálogo de endereços" + +#: ../sflphone-client-gnome/src/uimanager.c:137 +#: ../sflphone-client-gnome/src/uimanager.c:756 +msgid "Address book" +msgstr "Catálogo de endereços" + +#: ../sflphone-client-gnome/src/uimanager.c:279 +msgid "Voicemail (%i)" +msgstr "Correio de voz (%i)" + +#: ../sflphone-client-gnome/src/uimanager.c:342 msgid "SFLphone is a VoIP client compatible with SIP and IAX2 protocols." msgstr "SFLphone é um cliente VoIP compatível com os protocolos SIP e IAX2." -#: ../sflphone-client-gnome/src/uimanager.c:406 +#: ../sflphone-client-gnome/src/uimanager.c:345 msgid "About SFLphone" msgstr "Sobre o SFLphone" -#: ../sflphone-client-gnome/src/uimanager.c:1028 +#: ../sflphone-client-gnome/src/uimanager.c:719 +msgid "Call" +msgstr "_Chamar" + +#: ../sflphone-client-gnome/src/uimanager.c:720 +#: ../sflphone-client-gnome/src/uimanager.c:1184 +msgid "_New call" +msgstr "_Nova ligação" + +#: ../sflphone-client-gnome/src/uimanager.c:720 +msgid "Place a new call" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:721 +#: ../sflphone-client-gnome/src/uimanager.c:979 msgid "_Pick up" msgstr "_Atender" -#: ../sflphone-client-gnome/src/uimanager.c:1040 -#: ../sflphone-client-gnome/src/uimanager.c:1081 +#: ../sflphone-client-gnome/src/uimanager.c:721 +msgid "Answer the call" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:722 +#: ../sflphone-client-gnome/src/uimanager.c:991 +#: ../sflphone-client-gnome/src/uimanager.c:1032 msgid "_Hang up" msgstr "_Desligar" -#: ../sflphone-client-gnome/src/uimanager.c:1052 -#: ../sflphone-client-gnome/src/uimanager.c:1093 -msgid "On _Hold" +#: ../sflphone-client-gnome/src/uimanager.c:722 +msgid "Finish the call" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:723 +msgid "O_n hold" msgstr "Em _Espera" -#: ../sflphone-client-gnome/src/uimanager.c:1064 +#: ../sflphone-client-gnome/src/uimanager.c:723 +msgid "Place the call on hold" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:724 +msgid "O_ff hold" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:724 +msgid "Place the call off hold" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:725 +#: ../sflphone-client-gnome/src/uimanager.c:1015 msgid "_Record" msgstr "_Gravar" -#: ../sflphone-client-gnome/src/uimanager.c:1154 +#: ../sflphone-client-gnome/src/uimanager.c:725 +msgid "Record the current conversation" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:726 +msgid "Configuration _Assistant" +msgstr "Arquivo de Configuração" + +#: ../sflphone-client-gnome/src/uimanager.c:726 +msgid "Run the configuration assistant" +msgstr "Erro de configuração no stun" + +#: ../sflphone-client-gnome/src/uimanager.c:727 +msgid "Call your voicemail" +msgstr "%d mensagem de voz" + +#: ../sflphone-client-gnome/src/uimanager.c:728 +msgid "_Close" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:728 +msgid "Minimize to system tray" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:729 +msgid "_Quit" +msgstr "_Editar" + +#: ../sflphone-client-gnome/src/uimanager.c:729 +msgid "Quit the program" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:732 +msgid "_Edit" +msgstr "_Editar" + +#: ../sflphone-client-gnome/src/uimanager.c:733 +msgid "_Copy" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:733 +msgid "Copy the selection" +msgstr "Remover a conta selecionada" + +#: ../sflphone-client-gnome/src/uimanager.c:734 +msgid "_Paste" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:734 +msgid "Paste the clipboard" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:735 +msgid "Clear _history" +msgstr "Limpar _histórico" + +#: ../sflphone-client-gnome/src/uimanager.c:735 +msgid "Clear the call history" +msgstr "Limpar histórico" + +#: ../sflphone-client-gnome/src/uimanager.c:736 +msgid "_Accounts" +msgstr "_Contas" + +#: ../sflphone-client-gnome/src/uimanager.c:736 +msgid "Edit your accounts" +msgstr "Conta atual" + +#: ../sflphone-client-gnome/src/uimanager.c:737 +msgid "_Preferences" +msgstr "Preferências" + +#: ../sflphone-client-gnome/src/uimanager.c:737 +msgid "Change your preferences" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:740 +msgid "_View" +msgstr "_Exibir" + +#: ../sflphone-client-gnome/src/uimanager.c:743 +msgid "_Help" +msgstr "_Ajuda" + +#: ../sflphone-client-gnome/src/uimanager.c:744 +msgid "Contents" +msgstr "Continuar" + +#: ../sflphone-client-gnome/src/uimanager.c:744 +msgid "Open the manual" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:745 +msgid "About this application" +msgstr "Autenticação" + +#: ../sflphone-client-gnome/src/uimanager.c:751 +msgid "_Transfer" +msgstr "Transferir" + +#: ../sflphone-client-gnome/src/uimanager.c:751 +msgid "Transfer the call" +msgstr "Transfirir para: " + +#: ../sflphone-client-gnome/src/uimanager.c:752 +msgid "_Show toolbar" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:752 +msgid "Show the toolbar" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:753 +msgid "_Dialpad" +msgstr "Desabilitado" + +#: ../sflphone-client-gnome/src/uimanager.c:753 +msgid "Show the dialpad" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:754 +msgid "_Volume controls" +msgstr "_Controle de Volumes" + +#: ../sflphone-client-gnome/src/uimanager.c:754 +msgid "Show the volume controls" +msgstr "Exibir controles de volume" + +#: ../sflphone-client-gnome/src/uimanager.c:755 +msgid "_History" +msgstr "Histórico" + +#: ../sflphone-client-gnome/src/uimanager.c:755 +msgid "Calls history" +msgstr "Histórico de chamadas" + +#: ../sflphone-client-gnome/src/uimanager.c:756 +msgid "_Address book" +msgstr "Catálogo de endereços" + +#: ../sflphone-client-gnome/src/uimanager.c:1003 +#: ../sflphone-client-gnome/src/uimanager.c:1044 +msgid "On _Hold" +msgstr "Em _Espera" + +#: ../sflphone-client-gnome/src/uimanager.c:1107 msgid "_Call back" msgstr "_Ligar de volta" -#: ../sflphone-client-gnome/src/uimanager.c:1226 -msgid "_New call" -msgstr "_Nova ligação" - -#: ../sflphone-client-gnome/src/uimanager.c:1300 +#: ../sflphone-client-gnome/src/uimanager.c:1258 msgid "Edit phone number" msgstr "Editar número de telefone" -#: ../sflphone-client-gnome/src/uimanager.c:1311 +#: ../sflphone-client-gnome/src/uimanager.c:1269 msgid "Edit the phone number before making a call" msgstr "Edite o número de telefone antes de fazer uma ligação" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:164 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:180 msgid "Account Parameters" msgstr "Parâmetros de conta" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:173 -#: ../sflphone-client-gnome/src/config/assistant.c:294 -#: ../sflphone-client-gnome/src/config/assistant.c:402 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:189 +#: ../sflphone-client-gnome/src/config/assistant.c:314 +#: ../sflphone-client-gnome/src/config/assistant.c:427 msgid "_Alias" msgstr "_Apelido" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:181 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:197 msgid "_Protocol" msgstr "_Protocolo" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:199 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:215 msgid "Unknown" msgstr "Desconhecido" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:209 -#: ../sflphone-client-gnome/src/config/assistant.c:302 -#: ../sflphone-client-gnome/src/config/assistant.c:410 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:225 +#: ../sflphone-client-gnome/src/config/assistant.c:322 +#: ../sflphone-client-gnome/src/config/assistant.c:435 msgid "_Host name" msgstr "_Nome do host" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:217 -#: ../sflphone-client-gnome/src/config/assistant.c:310 -#: ../sflphone-client-gnome/src/config/assistant.c:418 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:233 +#: ../sflphone-client-gnome/src/config/assistant.c:330 +#: ../sflphone-client-gnome/src/config/assistant.c:443 msgid "_User name" msgstr "_Nome do usuário" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:234 -#: ../sflphone-client-gnome/src/config/assistant.c:326 -#: ../sflphone-client-gnome/src/config/assistant.c:433 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:250 +#: ../sflphone-client-gnome/src/config/assistant.c:346 +#: ../sflphone-client-gnome/src/config/assistant.c:458 msgid "_Password" msgstr "_Senha" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:254 -#: ../sflphone-client-gnome/src/config/assistant.c:344 -#: ../sflphone-client-gnome/src/config/assistant.c:449 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:270 +#: ../sflphone-client-gnome/src/config/assistant.c:363 +#: ../sflphone-client-gnome/src/config/assistant.c:473 +msgid "Show password" +msgstr "Senha" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:274 +#: ../sflphone-client-gnome/src/config/assistant.c:368 +#: ../sflphone-client-gnome/src/config/assistant.c:478 msgid "_Voicemail number" msgstr "_Senha da caixa postal de voz" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:340 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:361 msgid "Authentication" msgstr "Autenticação" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:341 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:362 msgid "Secret" msgstr "Segredo" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:466 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:605 msgid "Credential" msgstr "Credencial" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:501 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:640 msgid "Authentication name" msgstr "Nome de autenticação" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:512 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:651 msgid "Password" msgstr "Senha" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:535 -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:909 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:201 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:674 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1056 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:321 msgid "Security" msgstr "Segurança" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:547 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:213 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:687 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:333 msgid "Use TLS transport (sips)" msgstr "Use transporte TLS (sips)" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:552 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:218 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:693 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:338 msgid "SRTP key exchange" msgstr "Troca de chave SRTP" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:558 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:224 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:699 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:344 msgid "Disabled" msgstr "Desabilitado" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:674 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:795 msgid "Registration" msgstr "Registro" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:679 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:800 msgid "Registration expire" msgstr "Registro expira" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:687 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:809 msgid "_Comply with RFC 3263" msgstr "_De acordo com RFC 3263" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:693 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:463 -msgid "Network" -msgstr "Rede" +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:816 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:234 +msgid "Network Interface" +msgstr "A rede está inacessível" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:707 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:830 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:249 msgid "Local address" msgstr "Endereço local" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:744 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:880 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:301 msgid "Local port" msgstr "Porta local" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:752 -msgid "Set published address and port:" -msgstr "Indique endereço e portas publicadas" +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:893 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:928 +msgid "Published address" +msgstr "Endereço publicado" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:756 -msgid "Using STUN " +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:899 +msgid "Using STUN" msgstr "Utilizando STUN " -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:761 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:906 +msgid "STUN server URL" +msgstr "URL do servidor STUN" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:914 msgid "Same as local parameters" msgstr "Igual aos parâmetros locais" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:764 -msgid "Manually" -msgstr "Manualmente" - -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:769 -msgid "Published address" -msgstr "Endereço publicado" +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:917 +msgid "Set published address and port:" +msgstr "Indique endereço e portas publicadas" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:777 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:936 msgid "Published port" msgstr "Porta publicada" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:785 -msgid "STUN server URL" -msgstr "URL do servidor STUN" - -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:880 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1027 msgid "Account settings" msgstr "Configurações da conta" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:899 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1046 msgid "Basic" msgstr "Básico" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:904 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1051 msgid "Advanced" msgstr "Avançado" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:169 -msgid "Server returned \"" +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:164 +msgid "Server returned \"%s\" (%d)" msgstr "Servidor retornou \"" #: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:389 @@ -494,32 +682,18 @@ msgstr "Contas" msgid "Configured Accounts" msgstr "Contas Configuradas" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:505 -msgid "There " -msgstr "Ali " - -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:506 -msgid "is " -msgstr "está " - -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:506 -msgid "are " -msgstr "estão " +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:501 +msgid "There is %d active account" +msgid_plural "There are %d active accounts" +msgstr[0] " conta ativa" +msgstr[1] " conta ativa" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:508 -msgid " active account" -msgstr " conta ativa" - -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:509 -msgid "s" -msgstr "s" - -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:514 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:507 msgid "You have no active account" msgstr "Você não possui uma conta ativa" #: ../sflphone-client-gnome/src/config/addressbook-config.c:306 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:443 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:556 msgid "General" msgstr "Geral" @@ -564,16 +738,16 @@ msgid "Select which Evolution address books to use" msgstr "Selecione qual catálogo de endereços do Evolution deseja utilizar" #: ../sflphone-client-gnome/src/config/addressbook-config.c:404 -#: ../sflphone-client-gnome/src/config/audioconf.c:578 +#: ../sflphone-client-gnome/src/config/audioconf.c:577 msgid "Name" msgstr "Nome" -#: ../sflphone-client-gnome/src/config/assistant.c:69 +#: ../sflphone-client-gnome/src/config/assistant.c:75 #, c-format msgid "This assistant is now finished." msgstr "Este assistente está finalizado." -#: ../sflphone-client-gnome/src/config/assistant.c:71 +#: ../sflphone-client-gnome/src/config/assistant.c:77 msgid "" "You can at any time check your registration state or modify your accounts " "parameters in the Options/Accounts window." @@ -581,213 +755,208 @@ msgstr "" "Você pode a qualquer momento checar seu estado de registro ou modificar seus " "parâmetros de conta na janela Opções/Contas." -#: ../sflphone-client-gnome/src/config/assistant.c:74 +#: ../sflphone-client-gnome/src/config/assistant.c:80 msgid "Alias" msgstr "Apelido" -#: ../sflphone-client-gnome/src/config/assistant.c:78 +#: ../sflphone-client-gnome/src/config/assistant.c:84 msgid "Server" msgstr "Servidor" -#: ../sflphone-client-gnome/src/config/assistant.c:82 +#: ../sflphone-client-gnome/src/config/assistant.c:88 msgid "Username" msgstr "Nome de usuário" -#: ../sflphone-client-gnome/src/config/assistant.c:86 +#: ../sflphone-client-gnome/src/config/assistant.c:92 msgid "Security: " msgstr "Segurança: " -#: ../sflphone-client-gnome/src/config/assistant.c:88 +#: ../sflphone-client-gnome/src/config/assistant.c:94 msgid "SRTP/ZRTP draft-zimmermann" msgstr "SRTP/ZRTP rascunho-zimmermann" -#: ../sflphone-client-gnome/src/config/assistant.c:90 -#: ../sflphone-client-gnome/src/config/assistant.c:182 +#: ../sflphone-client-gnome/src/config/assistant.c:96 msgid "None" msgstr "Nenhum" -#: ../sflphone-client-gnome/src/config/assistant.c:210 +#: ../sflphone-client-gnome/src/config/assistant.c:229 msgid "SFLphone account creation wizard" msgstr "Assistente de criação de contas do SFLphone" -#: ../sflphone-client-gnome/src/config/assistant.c:236 +#: ../sflphone-client-gnome/src/config/assistant.c:255 msgid "Welcome to the Account creation wizard of SFLphone!" msgstr "Bem vindo ao assistente de criação de contas do SFLphone!" -#: ../sflphone-client-gnome/src/config/assistant.c:237 +#: ../sflphone-client-gnome/src/config/assistant.c:256 msgid "This installation wizard will help you configure an account." msgstr "Este assistente de instalação irá lhe ajudar a configurar uma conta." -#: ../sflphone-client-gnome/src/config/assistant.c:251 +#: ../sflphone-client-gnome/src/config/assistant.c:270 msgid "VoIP Protocols" msgstr "Protocolos VoIP" -#: ../sflphone-client-gnome/src/config/assistant.c:251 +#: ../sflphone-client-gnome/src/config/assistant.c:270 msgid "Select an account type" msgstr "Selecione um tipo de conta" -#: ../sflphone-client-gnome/src/config/assistant.c:253 +#: ../sflphone-client-gnome/src/config/assistant.c:272 msgid "SIP (Session Initiation Protocol)" msgstr "SIP (Session Initiation Protocol)" -#: ../sflphone-client-gnome/src/config/assistant.c:255 +#: ../sflphone-client-gnome/src/config/assistant.c:274 msgid "IAX2 (InterAsterix Exchange)" msgstr "IAX2 (InterAsterix Exchange)" -#: ../sflphone-client-gnome/src/config/assistant.c:269 +#: ../sflphone-client-gnome/src/config/assistant.c:288 msgid "Account" msgstr "Conta" -#: ../sflphone-client-gnome/src/config/assistant.c:269 +#: ../sflphone-client-gnome/src/config/assistant.c:288 msgid "Please select one of the following options" msgstr "Por favor, selecione uma das seguintes opções" -#: ../sflphone-client-gnome/src/config/assistant.c:271 +#: ../sflphone-client-gnome/src/config/assistant.c:290 msgid "Create a free SIP/IAX2 account on sflphone.org" msgstr "Criar uma conta gratuita SIP/IAX2 em sflphone.org" -#: ../sflphone-client-gnome/src/config/assistant.c:273 +#: ../sflphone-client-gnome/src/config/assistant.c:292 msgid "Register an existing SIP or IAX2 account" msgstr "Registrar uma conta SIP ou IAX2 existente" -#: ../sflphone-client-gnome/src/config/assistant.c:286 +#: ../sflphone-client-gnome/src/config/assistant.c:306 msgid "SIP account settings" msgstr "Configurações de conta SIP" -#: ../sflphone-client-gnome/src/config/assistant.c:286 -#: ../sflphone-client-gnome/src/config/assistant.c:394 +#: ../sflphone-client-gnome/src/config/assistant.c:306 +#: ../sflphone-client-gnome/src/config/assistant.c:419 msgid "Please fill the following information" msgstr "Por favor, preencha as informações a seguir" -#: ../sflphone-client-gnome/src/config/assistant.c:352 -#: ../sflphone-client-gnome/src/config/assistant.c:381 +#: ../sflphone-client-gnome/src/config/assistant.c:376 +#: ../sflphone-client-gnome/src/config/assistant.c:405 msgid "Secure communications with _ZRTP" msgstr "Comunicações seguras com _ZRTP" -#: ../sflphone-client-gnome/src/config/assistant.c:365 +#: ../sflphone-client-gnome/src/config/assistant.c:389 msgid "Optional email address" msgstr "Endereço de e-mail opcional" -#: ../sflphone-client-gnome/src/config/assistant.c:365 +#: ../sflphone-client-gnome/src/config/assistant.c:389 msgid "This email address will be used to send your voicemail messages." msgstr "" "Este endereço de email será utilizado para enviar as mensagens de voz em sua " "caixa postal." -#: ../sflphone-client-gnome/src/config/assistant.c:373 +#: ../sflphone-client-gnome/src/config/assistant.c:397 msgid "_Email address" msgstr "_endereço de email" -#: ../sflphone-client-gnome/src/config/assistant.c:394 +#: ../sflphone-client-gnome/src/config/assistant.c:419 msgid "IAX2 account settings" msgstr "Configurações de conta IAX2" -#: ../sflphone-client-gnome/src/config/assistant.c:467 +#: ../sflphone-client-gnome/src/config/assistant.c:496 msgid "Network Address Translation (NAT)" msgstr "Network Address Translation (NAT)" -#: ../sflphone-client-gnome/src/config/assistant.c:467 +#: ../sflphone-client-gnome/src/config/assistant.c:496 msgid "You should probably enable this if you are behind a firewall." msgstr "" "Você provavelmente precise habilitar isto se estiver por trás de um firewall." -#: ../sflphone-client-gnome/src/config/assistant.c:476 +#: ../sflphone-client-gnome/src/config/assistant.c:505 msgid "E_nable STUN" msgstr "Ha_bilitar STUN" -#: ../sflphone-client-gnome/src/config/assistant.c:483 +#: ../sflphone-client-gnome/src/config/assistant.c:512 msgid "_STUN server" msgstr "_Servidor STUN" -#: ../sflphone-client-gnome/src/config/assistant.c:497 +#: ../sflphone-client-gnome/src/config/assistant.c:526 msgid "Account Registration" msgstr "Registro de conta" -#: ../sflphone-client-gnome/src/config/assistant.c:497 +#: ../sflphone-client-gnome/src/config/assistant.c:526 msgid "Congratulations!" msgstr "Parabéns!" -#: ../sflphone-client-gnome/src/config/audioconf.c:583 +#: ../sflphone-client-gnome/src/config/audioconf.c:582 msgid "Frequency" msgstr "Frequência" -#: ../sflphone-client-gnome/src/config/audioconf.c:588 +#: ../sflphone-client-gnome/src/config/audioconf.c:587 msgid "Bitrate" msgstr "Taxa de bits" -#: ../sflphone-client-gnome/src/config/audioconf.c:593 +#: ../sflphone-client-gnome/src/config/audioconf.c:592 msgid "Bandwidth" msgstr "Largura de banda" -#: ../sflphone-client-gnome/src/config/audioconf.c:673 +#: ../sflphone-client-gnome/src/config/audioconf.c:670 msgid "ALSA plugin" msgstr "Plugin ALSA" -#: ../sflphone-client-gnome/src/config/audioconf.c:695 +#: ../sflphone-client-gnome/src/config/audioconf.c:692 msgid "Output" msgstr "Saída" -#: ../sflphone-client-gnome/src/config/audioconf.c:717 +#: ../sflphone-client-gnome/src/config/audioconf.c:714 msgid "Input" msgstr "Entrada" -#: ../sflphone-client-gnome/src/config/audioconf.c:752 +#: ../sflphone-client-gnome/src/config/audioconf.c:749 msgid "_Voice Activity Detection" msgstr "_Detecção de atividade de voz" -#: ../sflphone-client-gnome/src/config/audioconf.c:762 +#: ../sflphone-client-gnome/src/config/audioconf.c:759 msgid "_Noise Reduction (Narrow-Band Companding)" msgstr "_Redução de ruído (Utilização de banda-estreita)" -#: ../sflphone-client-gnome/src/config/audioconf.c:798 +#: ../sflphone-client-gnome/src/config/audioconf.c:800 msgid "Sound Manager" msgstr "Gerenciador de Som" -#: ../sflphone-client-gnome/src/config/audioconf.c:807 +#: ../sflphone-client-gnome/src/config/audioconf.c:809 msgid "_Pulseaudio" msgstr "_Pulseaudio" -#: ../sflphone-client-gnome/src/config/audioconf.c:811 +#: ../sflphone-client-gnome/src/config/audioconf.c:813 msgid "_ALSA" msgstr "_ALSA" -#: ../sflphone-client-gnome/src/config/audioconf.c:816 -msgid "_Mute other applications during a call" -msgstr "_Silenciar outras aplicações durante uma ligação" - -#: ../sflphone-client-gnome/src/config/audioconf.c:823 +#: ../sflphone-client-gnome/src/config/audioconf.c:819 msgid "ALSA settings" msgstr "Configurações do ALSA" -#: ../sflphone-client-gnome/src/config/audioconf.c:840 +#: ../sflphone-client-gnome/src/config/audioconf.c:836 msgid "Codecs" msgstr "Codecs" -#: ../sflphone-client-gnome/src/config/audioconf.c:869 +#: ../sflphone-client-gnome/src/config/audioconf.c:865 msgid "Recordings" msgstr "Gravações" -#: ../sflphone-client-gnome/src/config/audioconf.c:873 +#: ../sflphone-client-gnome/src/config/audioconf.c:869 msgid "Destination folder" msgstr "Pasta de destino" -#: ../sflphone-client-gnome/src/config/audioconf.c:877 +#: ../sflphone-client-gnome/src/config/audioconf.c:873 msgid "Select a folder" msgstr "Selecione uma pasta" -#: ../sflphone-client-gnome/src/config/audioconf.c:883 +#: ../sflphone-client-gnome/src/config/audioconf.c:879 msgid "Ringtones" msgstr "Ringtones" -#: ../sflphone-client-gnome/src/config/audioconf.c:889 +#: ../sflphone-client-gnome/src/config/audioconf.c:885 msgid "_Enable ringtones" msgstr "_Habilitar ringtones" -#: ../sflphone-client-gnome/src/config/audioconf.c:895 +#: ../sflphone-client-gnome/src/config/audioconf.c:891 msgid "Choose a ringtone" msgstr "Escolha um ringtone" -#: ../sflphone-client-gnome/src/config/audioconf.c:901 +#: ../sflphone-client-gnome/src/config/audioconf.c:897 msgid "Audio Files" msgstr "Arquivos de Áudio" @@ -824,7 +993,7 @@ msgstr "Reescrevendo número do telefone" msgid "_Prefix dialed numbers with" msgstr "_Prefixo de números discados com" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:195 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:225 msgid "" "This profile is used when you want to reach a remote peer simply by typing a " "sip URI such as <b>sip:remotepeer</b>. The settings you define here will " @@ -835,79 +1004,59 @@ msgstr "" "configurações que você definir aqui também serão utilizadas se nenhuma conta " "puder ser combinada a uma chamada de entrada ou de saída." -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:274 -msgid "SIP Port" -msgstr "Porta SIP" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:281 -msgid "UDP Transport" -msgstr "Transporte UDP" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:319 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:440 msgid "Desktop Notifications" msgstr "Notificações de Desktop" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:323 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:444 msgid "_Enable notifications" msgstr "_Habilitar notificações" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:329 -msgid "Enable voicemail _notifications" -msgstr "Habilitar _notificações de correio de voz" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:341 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:450 msgid "System Tray Icon" msgstr "Ícone da bandeja do sistema" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:344 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:453 msgid "_Popup main window on incoming call" msgstr "_Popup na janela principal ao receber ligação" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:349 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:457 msgid "Ne_ver popup main window" msgstr "Nu_nca apresentar popup na janela principal" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:353 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:463 msgid "Hide SFLphone window on _startup" msgstr "Esconder o SFLphone na _inicialização" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:359 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:469 msgid "Calls History" msgstr "Histórico de Chamadas" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:362 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:472 msgid "_Keep my history for at least" msgstr "_Manter meu histórico por pelo ao menos" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:373 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:483 msgid "days" msgstr "dias" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:377 -msgid "Configuration File" -msgstr "Arquivo de Configuração" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:379 -msgid "Store SIP credentials as MD5 hash" -msgstr "Armazenar as credenciais SIP como hash MD5" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:423 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:536 msgid "Preferences" msgstr "Preferências" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:448 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:561 msgid "Audio" msgstr "Áudio" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:453 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:566 msgid "Address Book" msgstr "Catálogo de endereços" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:458 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:571 msgid "Hooks" msgstr "Ganchos" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:468 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:581 msgid "Direct IP calls" msgstr "Ligações IP diretas" @@ -915,11 +1064,11 @@ msgstr "Ligações IP diretas" msgid "Advanced options for TLS" msgstr "Opções avançadas para o TLS" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:55 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:56 msgid "TLS transport" msgstr "Transporte TLS" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:59 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:60 msgid "" "TLS transport can be used along with UDP for those calls that would\n" "require secure sip transactions (aka SIPS). You can configure a different\n" @@ -934,55 +1083,55 @@ msgstr "" "funcionar em uma\n" "porta dedicada, uma diferente da outra\n" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:100 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:103 msgid "Certificate of Authority list" msgstr "Certificado da lista de Autoridades" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:104 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:107 msgid "Choose a CA list file (optional)" msgstr "Escolha um arquivo de lista CA (opcional)" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:115 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:131 msgid "Public endpoint certificate file" msgstr "Arquivo certificado endpoint público" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:119 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:135 msgid "Choose a public endpoint certificate (optional)" msgstr "Escolha um certificado endpoint público (opcional)" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:134 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:159 msgid "Choose a private key file (optional)" msgstr "Escolha um arquivo de chave privada (opcional)" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:145 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:181 msgid "Password for the private key" msgstr "Senha para a chave privada" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:168 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:204 msgid "TLS protocol method" msgstr "Método do protocolo TLS" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:202 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:238 msgid "TLS cipher list" msgstr "Lista de cifras TLS" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:211 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:247 msgid "Server name instance for outgoing TLS connection" msgstr "Instância de nome do servidor para saída da conexão TLS" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:219 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:255 msgid "Negotiation timeout (sec:msec)" msgstr "Tempo de negociação expirado (seg:mseg)" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:236 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:272 msgid "Verify incoming certificates, as a server" msgstr "Verificar os certificados de entrada, como um servidor" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:242 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:278 msgid "Verify certificates from answer, as a client" msgstr "Verificar certificados de resposta, como um cliente" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:248 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:284 msgid "Require certificate for incoming tls connections" msgstr "Requer certificado para conexões tls entrantes" @@ -990,51 +1139,87 @@ msgstr "Requer certificado para conexões tls entrantes" msgid "ZRTP Options" msgstr "Opções ZRTP" -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:68 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:69 msgid "Send Hello Hash in S_DP" msgstr "Enviar um Hash Olá no S_DP" -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:74 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:75 msgid "Ask User to Confirm SAS" msgstr "Pergunta ao Usuário para Confirmar SAS" -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:80 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:81 msgid "_Warn if ZRTP not supported" msgstr "_Alerta se o ZRTP não é suportado" -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:86 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:87 msgid "Display SAS once for hold events" msgstr "Apresenta o SAS uma vez para realizar eventos" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:56 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:58 msgid "Search all" msgstr "Buscar todos" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:57 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:70 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:82 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:94 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:59 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:72 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:84 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:96 msgid "Click here to change the search type" msgstr "Clique aqui para alterar o tipo de pesquisa" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:69 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:71 msgid "Search by missed call" msgstr "Buscar por ligações perdidas" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:81 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:83 msgid "Search by incoming call" msgstr "Buscar por ligações recebidas" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:93 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:95 msgid "Search by outgoing call" msgstr "Buscar por ligações feitas" +#~ msgid "IP call - %s" +#~ msgstr "Ligação IP - %s" + +#~ msgid "Codec" +#~ msgstr "Codec" + +#~ msgid "Network" +#~ msgstr "Rede" + +#~ msgid "Manually" +#~ msgstr "Manualmente" + +#~ msgid "There " +#~ msgstr "Ali " + +#~ msgid "is " +#~ msgstr "está " + +#~ msgid "are " +#~ msgstr "estão " + +#~ msgid "s" +#~ msgstr "s" + +#~ msgid "_Mute other applications during a call" +#~ msgstr "_Silenciar outras aplicações durante uma ligação" + +#~ msgid "SIP Port" +#~ msgstr "Porta SIP" + +#~ msgid "UDP Transport" +#~ msgstr "Transporte UDP" + +#~ msgid "Enable voicemail _notifications" +#~ msgstr "Habilitar _notificações de correio de voz" + +#~ msgid "Store SIP credentials as MD5 hash" +#~ msgstr "Armazenar as credenciais SIP como hash MD5" + #~ msgid "Stun Server" #~ msgstr "Servidor STUN" -#~ msgid "Call history" -#~ msgstr "Histórico de chamadas" - #~ msgid "(C) 2009 Savoir-faire Linux" #~ msgstr "(C) 2009 Savoir-faire Linux" @@ -1050,15 +1235,9 @@ msgstr "Buscar por ligações feitas" #~ msgid "Record" #~ msgstr "Gravar" -#~ msgid "Transfer" -#~ msgstr "Transferir" - #~ msgid "Hang up" #~ msgstr "Desligar" -#~ msgid "Remove the selected account" -#~ msgstr "Remover a conta selecionada" - #~ msgid "Display" #~ msgstr "Exibir" @@ -1095,18 +1274,6 @@ msgstr "Buscar por ligações feitas" #~ msgid "Enable notifications" #~ msgstr "Habilitar notificações" -#~ msgid "History" -#~ msgstr "Histórico" - -#~ msgid "_Help" -#~ msgstr "_Ajuda" - -#~ msgid "_Call" -#~ msgstr "_Chamar" - -#~ msgid "_Edit" -#~ msgstr "_Editar" - #~ msgid "NAT Traversal" #~ msgstr "NAT Traversal" @@ -1126,15 +1293,12 @@ msgstr "Buscar por ligações feitas" #~ "After checking the settings you chose, click \"Finish\" to create the " #~ "account." #~ msgstr "" -#~ "Após checar as configurações que deseja, clique em \"Finalizar\" para criar " -#~ "a conta." +#~ "Após checar as configurações que deseja, clique em \"Finalizar\" para " +#~ "criar a conta." #~ msgid "Enable STUN" #~ msgstr "Habilitar STUN" -#~ msgid "Transfer to : " -#~ msgstr "Transfirir para: " - #~ msgid "Default account" #~ msgstr "Conta padrão" @@ -1144,12 +1308,6 @@ msgstr "Buscar por ligações feitas" #~ msgid "Main screen" #~ msgstr "Tela principal" -#~ msgid "Address book" -#~ msgstr "Catálogo de endereços" - -#~ msgid "Display volume controls" -#~ msgstr "Exibir controles de volume" - #~ msgid "Configure SFLphone" #~ msgstr "Configurar SFLphone" @@ -1186,32 +1344,32 @@ msgstr "Buscar por ligações feitas" #~ msgid "" #~ "By default, when you place a call, sflphone will use the first account in " #~ "this list which is \"registered\". Change the order of the accounts using " -#~ "the \"Up\" and \"Down\" arrows. Enable/disable them by checking/unchecking " -#~ "them on the left of the item. Add or remove some with \"Plus\" and \"Sub\" " -#~ "buttons. Edit the selected account with the form on the right." +#~ "the \"Up\" and \"Down\" arrows. Enable/disable them by checking/" +#~ "unchecking them on the left of the item. Add or remove some with \"Plus\" " +#~ "and \"Sub\" buttons. Edit the selected account with the form on the right." #~ msgstr "" #~ "Por padrão, quando você realiza uma ligação, sflphone utilizará a prieira " -#~ "conta desta lista que estiver \"registrada\". Modifique a ordem das contas " -#~ "utilizando as setas de \"Cima\" e \"Baixo\". Habilite/desabilite as " -#~ "marcando/desmarcando à esquerda de cada item. Adicione ou remova algumas com " -#~ "os botões \"Adicionar\" e \"Remover\". Edite a conta selecionada com o " -#~ "formulário à direita." +#~ "conta desta lista que estiver \"registrada\". Modifique a ordem das " +#~ "contas utilizando as setas de \"Cima\" e \"Baixo\". Habilite/desabilite " +#~ "as marcando/desmarcando à esquerda de cada item. Adicione ou remova " +#~ "algumas com os botões \"Adicionar\" e \"Remover\". Edite a conta " +#~ "selecionada com o formulário à direita." #~ msgid "" -#~ "This button will remove the selected account in the list below. Be sure you " -#~ "really don't need it anymore. If you think you might use it again later, " -#~ "just uncheck it." +#~ "This button will remove the selected account in the list below. Be sure " +#~ "you really don't need it anymore. If you think you might use it again " +#~ "later, just uncheck it." #~ msgstr "" #~ "Este botão irá remover a conta selecionada na lista apresentada. Tenha " #~ "certeza de que você não precisa mais dela. Se você acha que você irá " #~ "utilizar ela novamente, apenas desmarque a opção." #~ msgid "" -#~ "This button enables you to initialize a new account. You will then be able " -#~ "to edit it using the form on the right." +#~ "This button enables you to initialize a new account. You will then be " +#~ "able to edit it using the form on the right." #~ msgstr "" -#~ "Este botão lhe permite iniciar uma nova conta. Em seguida você poderá edita-" -#~ "la utilizando o formulário à direita." +#~ "Este botão lhe permite iniciar uma nova conta. Em seguida você poderá " +#~ "edita-la utilizando o formulário à direita." #~ msgid "Get this account down" #~ msgstr "Desabilitar esta conta" @@ -1222,8 +1380,8 @@ msgstr "Buscar por ligações feitas" #~ "the \"Up\" and \"Down\" arrows." #~ msgstr "" #~ "Por padrão, quando você inicia uma ligação, o sflphone irá utilizar a " -#~ "primeira conta desta lista que estiver \"registrada\". Modifique a ordem das " -#~ "contas utilizando as setas para \"Cima\" e para \"Baixo\"." +#~ "primeira conta desta lista que estiver \"registrada\". Modifique a ordem " +#~ "das contas utilizando as setas para \"Cima\" e para \"Baixo\"." #~ msgid "Get this account up" #~ msgstr "Habilite esta conta" @@ -1294,9 +1452,6 @@ msgstr "Buscar por ligações feitas" #~ msgid "Trigger on specific SIP header" #~ msgstr "Gancho no cabeçalho SIP específico" -#~ msgid "Clear history" -#~ msgstr "Limpar histórico" - #~ msgid "Attention:number of results exceeds max displayed." #~ msgstr "Atencão:número de resultados excede o máximo de exibição" @@ -1306,18 +1461,6 @@ msgstr "Buscar por ligações feitas" #~ msgid "_Account creation wizard" #~ msgstr "_Assistante de criação de conta" -#~ msgid "_View" -#~ msgstr "_Exibir" - -#~ msgid "_Accounts" -#~ msgstr "_Contas" - -#~ msgid "Clear _history" -#~ msgstr "Limpar _histórico" - -#~ msgid "_Volume Controls" -#~ msgstr "_Controle de Volumes" - #~ msgid "_Enable this account" #~ msgstr "_Habilitar esta conta" @@ -1333,11 +1476,11 @@ msgstr "Buscar por ligações feitas" #~ "sessões." #~ msgid "" -#~ "Pressing \"apply\" will restart the network layer. Otherwise, SFLPhone would " -#~ "have to be restarted." +#~ "Pressing \"apply\" will restart the network layer. Otherwise, SFLPhone " +#~ "would have to be restarted." #~ msgstr "" -#~ "Pressionando \"aplicar\" a camada de rede será reiniciada. De outra forma o " -#~ "SFKPhone teria que ser reiniciado." +#~ "Pressionando \"aplicar\" a camada de rede será reiniciada. De outra forma " +#~ "o SFKPhone teria que ser reiniciado." #~ msgid "PulseAudio sound server" #~ msgstr "Servidor de som PulseAudio" @@ -1352,6 +1495,6 @@ msgstr "Buscar por ligações feitas" #~ msgctxt "EMAIL OF TRANSLATORS" #~ msgid "Your emails" #~ msgstr "" -#~ ",,maxime.chambreuil@gmail.com,kalibslack@gmail.com,,,maxime.chambreuil@gmail." -#~ "com,kalibslack@gmail.com,,,maxime.chambreuil@gmail.com,kalibslack@gmail.com,," -#~ ",maxime.chambreuil@gmail.com,kalibslack@gmail.com" +#~ ",,maxime.chambreuil@gmail.com,kalibslack@gmail.com,,,maxime." +#~ "chambreuil@gmail.com,kalibslack@gmail.com,,,maxime.chambreuil@gmail.com," +#~ "kalibslack@gmail.com,,,maxime.chambreuil@gmail.com,kalibslack@gmail.com" diff --git a/lang/ru/ru.po b/lang/ru/ru.po index 0cdec3479d..18045ccd61 100644 --- a/lang/ru/ru.po +++ b/lang/ru/ru.po @@ -7,15 +7,15 @@ msgid "" msgstr "" "Project-Id-Version: SFLphone 0.9.6\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-10-14 11:18-0400\n" +"POT-Creation-Date: 2009-12-03 10:22-0500\n" "PO-Revision-Date: 2009-10-26 20:46+0000\n" "Last-Translator: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com>\n" "Language-Team: Savoir-Faire Linux Inc <sflphoneteam@savoirfairelinux.com>\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%10==1 && n%100!=11 ? 0 : n%10>=2 && " -"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" +"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" "X-Launchpad-Export-Date: 2009-12-03 15:32+0000\n" "X-Generator: Launchpad (build Unknown)\n" @@ -61,26 +61,15 @@ msgstr "Неверный сервер Stun" msgid "Invalid" msgstr "Неверный" -#: ../sflphone-client-gnome/src/actions.c:54 -#: ../sflphone-client-gnome/src/sflnotify.c:94 -#, c-format -msgid "%d voice mail" -msgid_plural "%d voice mails" -msgstr[0] "%d голосовое письмо" -msgstr[1] "%d голосовые письма" -msgstr[2] "%d голосовые письма" - -#: ../sflphone-client-gnome/src/actions.c:83 -#: ../sflphone-client-gnome/src/actions.c:919 -#: ../sflphone-client-gnome/src/actions.c:926 +#: ../sflphone-client-gnome/src/actions.c:98 msgid "Using account" msgstr "Используя учетную запись" -#: ../sflphone-client-gnome/src/actions.c:89 +#: ../sflphone-client-gnome/src/actions.c:104 msgid "No registered accounts" msgstr "У вас нет зарегистрированных аккаунтов" -#: ../sflphone-client-gnome/src/actions.c:268 +#: ../sflphone-client-gnome/src/actions.c:285 msgid "" "Unable to connect to the SFLphone server.\n" "Make sure the daemon is running." @@ -88,27 +77,23 @@ msgstr "" "Невозможно подключиться к SFLphone-серверу.\n" "Проверьте если демон работает." -#: ../sflphone-client-gnome/src/actions.c:913 -#, c-format -msgid "IP call - %s" -msgstr "IP звонок - %s" - -#: ../sflphone-client-gnome/src/actions.c:922 -msgid "Codec" -msgstr "Codec" +#: ../sflphone-client-gnome/src/actions.c:589 +#: ../sflphone-client-gnome/src/actions.c:911 +msgid "Direct SIP call" +msgstr "Прямые IP-звонки" -#: ../sflphone-client-gnome/src/actions.c:1119 +#: ../sflphone-client-gnome/src/actions.c:1103 #, c-format msgid "" "<b>Error: No audio codecs found.\n" "\n" -"</b> SFL audio codecs have to be placed in <i>%s</i> or in the " -"<b>.sflphone</b> directory in your home( <i>%s</i> )" +"</b> SFL audio codecs have to be placed in <i>%s</i> or in the <b>.sflphone</" +"b> directory in your home( <i>%s</i> )" msgstr "" "<b>Ошибка: звуковые кодеки не найдены.\n" "\n" -"</b> Звуковые кодеки SFL должны находиться в <i>%s</i> или в " -"<b>.sflphone</b> каталоге в вашем домашнем каталоге( <i>%s</i> )" +"</b> Звуковые кодеки SFL должны находиться в <i>%s</i> или в <b>.sflphone</" +"b> каталоге в вашем домашнем каталоге( <i>%s</i> )" #: ../sflphone-client-gnome/src/errors.c:29 msgid "" @@ -152,31 +137,31 @@ msgstr "Несколько звонков ещё не окончены." msgid "Do you still want to quit?" msgstr "Вы уверенны что хотите выйти?" -#: ../sflphone-client-gnome/src/mainwindow.c:299 +#: ../sflphone-client-gnome/src/mainwindow.c:298 msgid "SFLphone Error" msgstr "Ошибка SFLphone." -#: ../sflphone-client-gnome/src/mainwindow.c:391 +#: ../sflphone-client-gnome/src/mainwindow.c:392 #, c-format msgid "ZRTP is not supported by peer %s\n" msgstr "не поддерживается устройством %s\n" -#: ../sflphone-client-gnome/src/mainwindow.c:392 +#: ../sflphone-client-gnome/src/mainwindow.c:393 msgid "Secure Communication Unavailable" msgstr "Зашифрованная связь недоступна." -#: ../sflphone-client-gnome/src/mainwindow.c:393 -#: ../sflphone-client-gnome/src/mainwindow.c:415 +#: ../sflphone-client-gnome/src/mainwindow.c:394 +#: ../sflphone-client-gnome/src/mainwindow.c:416 msgid "Continue" msgstr "Продолжить" -#: ../sflphone-client-gnome/src/mainwindow.c:394 -#: ../sflphone-client-gnome/src/mainwindow.c:416 -#: ../sflphone-client-gnome/src/mainwindow.c:430 +#: ../sflphone-client-gnome/src/mainwindow.c:395 +#: ../sflphone-client-gnome/src/mainwindow.c:417 +#: ../sflphone-client-gnome/src/mainwindow.c:431 msgid "Stop Call" msgstr "Закончить звонок" -#: ../sflphone-client-gnome/src/mainwindow.c:413 +#: ../sflphone-client-gnome/src/mainwindow.c:414 #, c-format msgid "" "A %s error forced the call with %s to fall under unencrypted mode.\n" @@ -185,11 +170,11 @@ msgstr "" "Из-за ошибки %s переговор с %s перейдëт в не зашифрованный режим.\n" "Точная причина: %s\n" -#: ../sflphone-client-gnome/src/mainwindow.c:414 +#: ../sflphone-client-gnome/src/mainwindow.c:415 msgid "ZRTP negotiation failed" msgstr "Неудачный обмен информации ZRTP" -#: ../sflphone-client-gnome/src/mainwindow.c:427 +#: ../sflphone-client-gnome/src/mainwindow.c:428 #, c-format msgid "" "%s wants to stop using secure communication. Confirm will resume " @@ -198,11 +183,11 @@ msgstr "" "%s хочет остановить зашифрованную связь. В случае подтверждения переговор " "продолжится без SRTP.\n" -#: ../sflphone-client-gnome/src/mainwindow.c:428 +#: ../sflphone-client-gnome/src/mainwindow.c:429 msgid "Confirm Go Clear" msgstr "Подтвердить переход на незашифрованную связь" -#: ../sflphone-client-gnome/src/mainwindow.c:429 +#: ../sflphone-client-gnome/src/mainwindow.c:430 msgid "Confirm" msgstr "Подтвердить" @@ -217,6 +202,14 @@ msgstr "%s аккаунт: %s" msgid "<i>From</i> %s" msgstr "<i>От:</i> %s" +#: ../sflphone-client-gnome/src/sflnotify.c:94 +#, c-format +msgid "%d voice mail" +msgid_plural "%d voice mails" +msgstr[0] "%d голосовое письмо" +msgstr[1] "%d голосовые письма" +msgstr[2] "%d голосовые письма" + #: ../sflphone-client-gnome/src/sflnotify.c:111 #, c-format msgid "Calling with %s account <i>%s</i>" @@ -266,15 +259,15 @@ msgstr "Громкость" msgid "Mic volume" msgstr "Громкость микрофона" -#: ../sflphone-client-gnome/src/statusicon.c:91 +#: ../sflphone-client-gnome/src/statusicon.c:96 msgid "_Show main window" msgstr "_Показать главное окно" -#: ../sflphone-client-gnome/src/statusicon.c:126 +#: ../sflphone-client-gnome/src/statusicon.c:131 msgid "SFLphone" msgstr "SFLphone" -#: ../sflphone-client-gnome/src/statusicon.c:127 +#: ../sflphone-client-gnome/src/statusicon.c:132 #, c-format msgid "%i account configured" msgid_plural "%i accounts configured" @@ -283,202 +276,397 @@ msgstr[1] "%i аккаунтов настроены" msgstr[2] "%i аккаунтов настроены" #: ../sflphone-client-gnome/src/toolbar.c:38 -#: ../sflphone-client-gnome/src/uimanager.c:750 +#: ../sflphone-client-gnome/src/uimanager.c:693 +#: ../sflphone-client-gnome/src/uimanager.c:727 msgid "Voicemail" msgstr "Автоответчик" -#: ../sflphone-client-gnome/src/uimanager.c:403 +#: ../sflphone-client-gnome/src/uimanager.c:117 +msgid "No address book selected" +msgstr "Адресная книга" + +#: ../sflphone-client-gnome/src/uimanager.c:137 +#: ../sflphone-client-gnome/src/uimanager.c:756 +msgid "Address book" +msgstr "Адресная книга" + +#: ../sflphone-client-gnome/src/uimanager.c:279 +msgid "Voicemail (%i)" +msgstr "Автоответчик" + +#: ../sflphone-client-gnome/src/uimanager.c:342 msgid "SFLphone is a VoIP client compatible with SIP and IAX2 protocols." msgstr "SFLphone - SIP и IAX2-совместимый VoIP-клиент" -#: ../sflphone-client-gnome/src/uimanager.c:406 +#: ../sflphone-client-gnome/src/uimanager.c:345 msgid "About SFLphone" msgstr "О SFLphone" -#: ../sflphone-client-gnome/src/uimanager.c:1028 +#: ../sflphone-client-gnome/src/uimanager.c:719 +msgid "Call" +msgstr "_Звонок" + +#: ../sflphone-client-gnome/src/uimanager.c:720 +#: ../sflphone-client-gnome/src/uimanager.c:1184 +msgid "_New call" +msgstr "_Новый звонок" + +#: ../sflphone-client-gnome/src/uimanager.c:720 +msgid "Place a new call" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:721 +#: ../sflphone-client-gnome/src/uimanager.c:979 msgid "_Pick up" msgstr "_Взять трубку" -#: ../sflphone-client-gnome/src/uimanager.c:1040 -#: ../sflphone-client-gnome/src/uimanager.c:1081 +#: ../sflphone-client-gnome/src/uimanager.c:721 +msgid "Answer the call" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:722 +#: ../sflphone-client-gnome/src/uimanager.c:991 +#: ../sflphone-client-gnome/src/uimanager.c:1032 msgid "_Hang up" msgstr "_Положить трубку" -#: ../sflphone-client-gnome/src/uimanager.c:1052 -#: ../sflphone-client-gnome/src/uimanager.c:1093 -msgid "On _Hold" +#: ../sflphone-client-gnome/src/uimanager.c:722 +msgid "Finish the call" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:723 +msgid "O_n hold" msgstr "_Удержать звонок" -#: ../sflphone-client-gnome/src/uimanager.c:1064 +#: ../sflphone-client-gnome/src/uimanager.c:723 +msgid "Place the call on hold" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:724 +msgid "O_ff hold" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:724 +msgid "Place the call off hold" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:725 +#: ../sflphone-client-gnome/src/uimanager.c:1015 msgid "_Record" msgstr "Записать" -#: ../sflphone-client-gnome/src/uimanager.c:1154 +#: ../sflphone-client-gnome/src/uimanager.c:725 +msgid "Record the current conversation" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:726 +msgid "Configuration _Assistant" +msgstr "Файл конфигурации" + +#: ../sflphone-client-gnome/src/uimanager.c:726 +msgid "Run the configuration assistant" +msgstr "Ошибка конфигурации Stun" + +#: ../sflphone-client-gnome/src/uimanager.c:727 +msgid "Call your voicemail" +msgstr "%d голосовое письмо" + +#: ../sflphone-client-gnome/src/uimanager.c:728 +msgid "_Close" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:728 +msgid "Minimize to system tray" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:729 +msgid "_Quit" +msgstr "_Правка" + +#: ../sflphone-client-gnome/src/uimanager.c:729 +msgid "Quit the program" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:732 +msgid "_Edit" +msgstr "_Правка" + +#: ../sflphone-client-gnome/src/uimanager.c:733 +msgid "_Copy" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:733 +msgid "Copy the selection" +msgstr "Удалить выбранную учетную запись" + +#: ../sflphone-client-gnome/src/uimanager.c:734 +msgid "_Paste" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:734 +msgid "Paste the clipboard" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:735 +msgid "Clear _history" +msgstr "_Стереть журнал" + +#: ../sflphone-client-gnome/src/uimanager.c:735 +msgid "Clear the call history" +msgstr "Очистить историю" + +#: ../sflphone-client-gnome/src/uimanager.c:736 +msgid "_Accounts" +msgstr "_Аккаунты" + +#: ../sflphone-client-gnome/src/uimanager.c:736 +msgid "Edit your accounts" +msgstr "Нынешний аккаунт" + +#: ../sflphone-client-gnome/src/uimanager.c:737 +msgid "_Preferences" +msgstr "Предпочтения" + +#: ../sflphone-client-gnome/src/uimanager.c:737 +msgid "Change your preferences" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:740 +msgid "_View" +msgstr "_Вид" + +#: ../sflphone-client-gnome/src/uimanager.c:743 +msgid "_Help" +msgstr "_Помощь" + +#: ../sflphone-client-gnome/src/uimanager.c:744 +msgid "Contents" +msgstr "Продолжить" + +#: ../sflphone-client-gnome/src/uimanager.c:744 +msgid "Open the manual" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:745 +msgid "About this application" +msgstr "Идентификация" + +#: ../sflphone-client-gnome/src/uimanager.c:751 +msgid "_Transfer" +msgstr "Переслать звонок на другой номер" + +#: ../sflphone-client-gnome/src/uimanager.c:751 +msgid "Transfer the call" +msgstr "Передать : " + +#: ../sflphone-client-gnome/src/uimanager.c:752 +msgid "_Show toolbar" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:752 +msgid "Show the toolbar" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:753 +msgid "_Dialpad" +msgstr "Отключен" + +#: ../sflphone-client-gnome/src/uimanager.c:753 +msgid "Show the dialpad" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:754 +msgid "_Volume controls" +msgstr "_Настройки громкости" + +#: ../sflphone-client-gnome/src/uimanager.c:754 +msgid "Show the volume controls" +msgstr "_Настройки громкости" + +#: ../sflphone-client-gnome/src/uimanager.c:755 +msgid "_History" +msgstr "Журнал" + +#: ../sflphone-client-gnome/src/uimanager.c:755 +msgid "Calls history" +msgstr "История звонков" + +#: ../sflphone-client-gnome/src/uimanager.c:756 +msgid "_Address book" +msgstr "Адресная книга" + +#: ../sflphone-client-gnome/src/uimanager.c:1003 +#: ../sflphone-client-gnome/src/uimanager.c:1044 +msgid "On _Hold" +msgstr "_Удержать звонок" + +#: ../sflphone-client-gnome/src/uimanager.c:1107 msgid "_Call back" msgstr "_Перезвонить" -#: ../sflphone-client-gnome/src/uimanager.c:1226 -msgid "_New call" -msgstr "_Новый звонок" - -#: ../sflphone-client-gnome/src/uimanager.c:1300 +#: ../sflphone-client-gnome/src/uimanager.c:1258 msgid "Edit phone number" msgstr "Мобильный телефон" -#: ../sflphone-client-gnome/src/uimanager.c:1311 +#: ../sflphone-client-gnome/src/uimanager.c:1269 msgid "Edit the phone number before making a call" msgstr "Изменить номер телефона перед звонком" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:164 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:180 msgid "Account Parameters" msgstr "Параметры учетной записи" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:173 -#: ../sflphone-client-gnome/src/config/assistant.c:294 -#: ../sflphone-client-gnome/src/config/assistant.c:402 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:189 +#: ../sflphone-client-gnome/src/config/assistant.c:314 +#: ../sflphone-client-gnome/src/config/assistant.c:427 msgid "_Alias" msgstr "_Псевдоним" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:181 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:197 msgid "_Protocol" msgstr "Пр_отокол" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:199 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:215 msgid "Unknown" msgstr "Неизвестный" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:209 -#: ../sflphone-client-gnome/src/config/assistant.c:302 -#: ../sflphone-client-gnome/src/config/assistant.c:410 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:225 +#: ../sflphone-client-gnome/src/config/assistant.c:322 +#: ../sflphone-client-gnome/src/config/assistant.c:435 msgid "_Host name" msgstr "Имя или IP-адрес _сервера" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:217 -#: ../sflphone-client-gnome/src/config/assistant.c:310 -#: ../sflphone-client-gnome/src/config/assistant.c:418 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:233 +#: ../sflphone-client-gnome/src/config/assistant.c:330 +#: ../sflphone-client-gnome/src/config/assistant.c:443 msgid "_User name" msgstr "Имя или _номер пользователя" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:234 -#: ../sflphone-client-gnome/src/config/assistant.c:326 -#: ../sflphone-client-gnome/src/config/assistant.c:433 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:250 +#: ../sflphone-client-gnome/src/config/assistant.c:346 +#: ../sflphone-client-gnome/src/config/assistant.c:458 msgid "_Password" msgstr "Па_роль" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:254 -#: ../sflphone-client-gnome/src/config/assistant.c:344 -#: ../sflphone-client-gnome/src/config/assistant.c:449 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:270 +#: ../sflphone-client-gnome/src/config/assistant.c:363 +#: ../sflphone-client-gnome/src/config/assistant.c:473 +msgid "Show password" +msgstr "Пароль" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:274 +#: ../sflphone-client-gnome/src/config/assistant.c:368 +#: ../sflphone-client-gnome/src/config/assistant.c:478 msgid "_Voicemail number" msgstr "Номер _автоответчика #" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:340 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:361 msgid "Authentication" msgstr "Идентификация" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:341 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:362 msgid "Secret" msgstr "Секретный" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:466 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:605 msgid "Credential" msgstr "Параметры доступа" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:501 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:640 msgid "Authentication name" msgstr "Имя для аутентификации" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:512 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:651 msgid "Password" msgstr "Пароль" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:535 -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:909 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:201 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:674 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1056 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:321 msgid "Security" msgstr "Безопасность" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:547 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:213 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:687 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:333 msgid "Use TLS transport (sips)" msgstr "Имя для аутентификации" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:552 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:218 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:693 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:338 msgid "SRTP key exchange" msgstr "Обмена ключей SRTP" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:558 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:224 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:699 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:344 msgid "Disabled" msgstr "Отключен" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:674 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:795 msgid "Registration" msgstr "Регистрация" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:679 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:800 msgid "Registration expire" msgstr "Истек срок регистрации" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:687 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:809 msgid "_Comply with RFC 3263" msgstr "_Соотвествует RFC 3263" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:693 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:463 -msgid "Network" -msgstr "Сеть" +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:816 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:234 +msgid "Network Interface" +msgstr "Сеть недоступна" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:707 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:830 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:249 msgid "Local address" msgstr "Локальный адрес" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:744 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:880 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:301 msgid "Local port" msgstr "Локальный порт" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:752 -msgid "Set published address and port:" -msgstr "Настроить видимый адрес и порт :" +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:893 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:928 +msgid "Published address" +msgstr "издаваемый адрес" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:756 -msgid "Using STUN " +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:899 +msgid "Using STUN" msgstr "Использует STUN " -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:761 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:906 +msgid "STUN server URL" +msgstr "URL STUN-сервера" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:914 msgid "Same as local parameters" msgstr "Использовать локальный адрес и порт" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:764 -msgid "Manually" -msgstr "Вручную" - -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:769 -msgid "Published address" -msgstr "издаваемый адрес" +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:917 +msgid "Set published address and port:" +msgstr "Настроить видимый адрес и порт :" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:777 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:936 msgid "Published port" msgstr "издаваемый порт" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:785 -msgid "STUN server URL" -msgstr "URL STUN-сервера" - -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:880 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1027 msgid "Account settings" msgstr "Настройки аккаунта" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:899 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1046 msgid "Basic" msgstr "Основные" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:904 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1051 msgid "Advanced" msgstr "Дополнительные" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:169 -msgid "Server returned \"" +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:164 +msgid "Server returned \"%s\" (%d)" msgstr "Сервер ответил \"" #: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:389 @@ -497,32 +685,19 @@ msgstr "Учётные записи" msgid "Configured Accounts" msgstr "Нынешний аккаунт" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:505 -msgid "There " -msgstr "Здесь " - -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:506 -msgid "is " -msgstr "Зарегестрирован " - -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:506 -msgid "are " -msgstr "Зарегестрированны " +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:501 +msgid "There is %d active account" +msgid_plural "There are %d active accounts" +msgstr[0] " действующий аккаунт" +msgstr[1] " действующий аккаунт" +msgstr[2] " действующий аккаунт" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:508 -msgid " active account" -msgstr " действующий аккаунт" - -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:509 -msgid "s" -msgstr "a" - -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:514 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:507 msgid "You have no active account" msgstr "У вас нет активного аккаунта" #: ../sflphone-client-gnome/src/config/addressbook-config.c:306 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:443 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:556 msgid "General" msgstr "Общие настройки" @@ -567,16 +742,16 @@ msgid "Select which Evolution address books to use" msgstr "Выбрать адресную книгу Evolution:" #: ../sflphone-client-gnome/src/config/addressbook-config.c:404 -#: ../sflphone-client-gnome/src/config/audioconf.c:578 +#: ../sflphone-client-gnome/src/config/audioconf.c:577 msgid "Name" msgstr "Имя" -#: ../sflphone-client-gnome/src/config/assistant.c:69 +#: ../sflphone-client-gnome/src/config/assistant.c:75 #, c-format msgid "This assistant is now finished." msgstr "Мастер закончил настройку." -#: ../sflphone-client-gnome/src/config/assistant.c:71 +#: ../sflphone-client-gnome/src/config/assistant.c:77 msgid "" "You can at any time check your registration state or modify your accounts " "parameters in the Options/Accounts window." @@ -584,211 +759,205 @@ msgstr "" "Вы можете в любое время проверить статус регистрации или изменитьпараметры " "ваших аккаунтов в меню Правка / Аккаунты." -#: ../sflphone-client-gnome/src/config/assistant.c:74 +#: ../sflphone-client-gnome/src/config/assistant.c:80 msgid "Alias" msgstr "Псевдоним" -#: ../sflphone-client-gnome/src/config/assistant.c:78 +#: ../sflphone-client-gnome/src/config/assistant.c:84 msgid "Server" msgstr "Сервер" -#: ../sflphone-client-gnome/src/config/assistant.c:82 +#: ../sflphone-client-gnome/src/config/assistant.c:88 msgid "Username" msgstr "Пользователь" -#: ../sflphone-client-gnome/src/config/assistant.c:86 +#: ../sflphone-client-gnome/src/config/assistant.c:92 msgid "Security: " msgstr "Безопасность " -#: ../sflphone-client-gnome/src/config/assistant.c:88 +#: ../sflphone-client-gnome/src/config/assistant.c:94 msgid "SRTP/ZRTP draft-zimmermann" msgstr "SRTP/ZRTP draft-zimmermann" -#: ../sflphone-client-gnome/src/config/assistant.c:90 -#: ../sflphone-client-gnome/src/config/assistant.c:182 +#: ../sflphone-client-gnome/src/config/assistant.c:96 msgid "None" msgstr "Нет" -#: ../sflphone-client-gnome/src/config/assistant.c:210 +#: ../sflphone-client-gnome/src/config/assistant.c:229 msgid "SFLphone account creation wizard" msgstr "Мастер настройки SFLphone" -#: ../sflphone-client-gnome/src/config/assistant.c:236 +#: ../sflphone-client-gnome/src/config/assistant.c:255 msgid "Welcome to the Account creation wizard of SFLphone!" msgstr "Добро пожаловать в SFLphone!" -#: ../sflphone-client-gnome/src/config/assistant.c:237 +#: ../sflphone-client-gnome/src/config/assistant.c:256 msgid "This installation wizard will help you configure an account." msgstr "Этот мастер установки поможет вам настроить ваш аккаунт." -#: ../sflphone-client-gnome/src/config/assistant.c:251 +#: ../sflphone-client-gnome/src/config/assistant.c:270 msgid "VoIP Protocols" msgstr "VoIP-протоколы" -#: ../sflphone-client-gnome/src/config/assistant.c:251 +#: ../sflphone-client-gnome/src/config/assistant.c:270 msgid "Select an account type" msgstr "Выберите тип аккаунта" -#: ../sflphone-client-gnome/src/config/assistant.c:253 +#: ../sflphone-client-gnome/src/config/assistant.c:272 msgid "SIP (Session Initiation Protocol)" msgstr "SIP (Session Initiation Protocol)" -#: ../sflphone-client-gnome/src/config/assistant.c:255 +#: ../sflphone-client-gnome/src/config/assistant.c:274 msgid "IAX2 (InterAsterix Exchange)" msgstr "IAX2 (InterAsterix Exchange)" -#: ../sflphone-client-gnome/src/config/assistant.c:269 +#: ../sflphone-client-gnome/src/config/assistant.c:288 msgid "Account" msgstr "Аккаунты" -#: ../sflphone-client-gnome/src/config/assistant.c:269 +#: ../sflphone-client-gnome/src/config/assistant.c:288 msgid "Please select one of the following options" msgstr "Введите пожалуйста следующие данные" -#: ../sflphone-client-gnome/src/config/assistant.c:271 +#: ../sflphone-client-gnome/src/config/assistant.c:290 msgid "Create a free SIP/IAX2 account on sflphone.org" msgstr "Создать бесплатный SIP/IAX2-аккаунт на sflphone.org" -#: ../sflphone-client-gnome/src/config/assistant.c:273 +#: ../sflphone-client-gnome/src/config/assistant.c:292 msgid "Register an existing SIP or IAX2 account" msgstr "Зарегистрировать существующий SIP или IAX2 аккаунт" -#: ../sflphone-client-gnome/src/config/assistant.c:286 +#: ../sflphone-client-gnome/src/config/assistant.c:306 msgid "SIP account settings" msgstr "Настройка SIP-аккаунта" -#: ../sflphone-client-gnome/src/config/assistant.c:286 -#: ../sflphone-client-gnome/src/config/assistant.c:394 +#: ../sflphone-client-gnome/src/config/assistant.c:306 +#: ../sflphone-client-gnome/src/config/assistant.c:419 msgid "Please fill the following information" msgstr "Введите пожалуйста следующие данные" -#: ../sflphone-client-gnome/src/config/assistant.c:352 -#: ../sflphone-client-gnome/src/config/assistant.c:381 +#: ../sflphone-client-gnome/src/config/assistant.c:376 +#: ../sflphone-client-gnome/src/config/assistant.c:405 msgid "Secure communications with _ZRTP" msgstr "Защищëнная связь с _ZRTP" -#: ../sflphone-client-gnome/src/config/assistant.c:365 +#: ../sflphone-client-gnome/src/config/assistant.c:389 msgid "Optional email address" msgstr "Электронный адрес (необязательный)" -#: ../sflphone-client-gnome/src/config/assistant.c:365 +#: ../sflphone-client-gnome/src/config/assistant.c:389 msgid "This email address will be used to send your voicemail messages." msgstr "Этот электронный адрес будет использоваться для речевых сообщений" -#: ../sflphone-client-gnome/src/config/assistant.c:373 +#: ../sflphone-client-gnome/src/config/assistant.c:397 msgid "_Email address" msgstr "_Адрес эл. почты" -#: ../sflphone-client-gnome/src/config/assistant.c:394 +#: ../sflphone-client-gnome/src/config/assistant.c:419 msgid "IAX2 account settings" msgstr "Настройка IAX2-аккаунта" -#: ../sflphone-client-gnome/src/config/assistant.c:467 +#: ../sflphone-client-gnome/src/config/assistant.c:496 msgid "Network Address Translation (NAT)" msgstr "Network Address Translation (NAT)" -#: ../sflphone-client-gnome/src/config/assistant.c:467 +#: ../sflphone-client-gnome/src/config/assistant.c:496 msgid "You should probably enable this if you are behind a firewall." -msgstr "" -"Вы наверное должны это включить если вы находитесь за сетевым экраном." +msgstr "Вы наверное должны это включить если вы находитесь за сетевым экраном." -#: ../sflphone-client-gnome/src/config/assistant.c:476 +#: ../sflphone-client-gnome/src/config/assistant.c:505 msgid "E_nable STUN" msgstr "Включить STUN" -#: ../sflphone-client-gnome/src/config/assistant.c:483 +#: ../sflphone-client-gnome/src/config/assistant.c:512 msgid "_STUN server" msgstr "_STUN-сервер" -#: ../sflphone-client-gnome/src/config/assistant.c:497 +#: ../sflphone-client-gnome/src/config/assistant.c:526 msgid "Account Registration" msgstr "Регистрация аккаунта" -#: ../sflphone-client-gnome/src/config/assistant.c:497 +#: ../sflphone-client-gnome/src/config/assistant.c:526 msgid "Congratulations!" msgstr "Поздравляем!" -#: ../sflphone-client-gnome/src/config/audioconf.c:583 +#: ../sflphone-client-gnome/src/config/audioconf.c:582 msgid "Frequency" msgstr "Частота" -#: ../sflphone-client-gnome/src/config/audioconf.c:588 +#: ../sflphone-client-gnome/src/config/audioconf.c:587 msgid "Bitrate" msgstr "Битрейт" -#: ../sflphone-client-gnome/src/config/audioconf.c:593 +#: ../sflphone-client-gnome/src/config/audioconf.c:592 msgid "Bandwidth" msgstr "Пропускная способность" -#: ../sflphone-client-gnome/src/config/audioconf.c:673 +#: ../sflphone-client-gnome/src/config/audioconf.c:670 msgid "ALSA plugin" msgstr "ALSA-плагин" -#: ../sflphone-client-gnome/src/config/audioconf.c:695 +#: ../sflphone-client-gnome/src/config/audioconf.c:692 msgid "Output" msgstr "Выход" -#: ../sflphone-client-gnome/src/config/audioconf.c:717 +#: ../sflphone-client-gnome/src/config/audioconf.c:714 msgid "Input" msgstr "Вход" -#: ../sflphone-client-gnome/src/config/audioconf.c:752 +#: ../sflphone-client-gnome/src/config/audioconf.c:749 msgid "_Voice Activity Detection" msgstr "Включить детектор тишины" -#: ../sflphone-client-gnome/src/config/audioconf.c:762 +#: ../sflphone-client-gnome/src/config/audioconf.c:759 msgid "_Noise Reduction (Narrow-Band Companding)" msgstr "Шумоподавление" -#: ../sflphone-client-gnome/src/config/audioconf.c:798 +#: ../sflphone-client-gnome/src/config/audioconf.c:800 msgid "Sound Manager" msgstr "Менеджер звука" -#: ../sflphone-client-gnome/src/config/audioconf.c:807 +#: ../sflphone-client-gnome/src/config/audioconf.c:809 msgid "_Pulseaudio" msgstr "_Pulseaudio" -#: ../sflphone-client-gnome/src/config/audioconf.c:811 +#: ../sflphone-client-gnome/src/config/audioconf.c:813 msgid "_ALSA" msgstr "_ALSA" -#: ../sflphone-client-gnome/src/config/audioconf.c:816 -msgid "_Mute other applications during a call" -msgstr "Приглушать звук других програм во время звонка" - -#: ../sflphone-client-gnome/src/config/audioconf.c:823 +#: ../sflphone-client-gnome/src/config/audioconf.c:819 msgid "ALSA settings" msgstr "Настройка ALSA" -#: ../sflphone-client-gnome/src/config/audioconf.c:840 +#: ../sflphone-client-gnome/src/config/audioconf.c:836 msgid "Codecs" msgstr "Кодеки" -#: ../sflphone-client-gnome/src/config/audioconf.c:869 +#: ../sflphone-client-gnome/src/config/audioconf.c:865 msgid "Recordings" msgstr "Записи" -#: ../sflphone-client-gnome/src/config/audioconf.c:873 +#: ../sflphone-client-gnome/src/config/audioconf.c:869 msgid "Destination folder" msgstr "Папка назначения" -#: ../sflphone-client-gnome/src/config/audioconf.c:877 +#: ../sflphone-client-gnome/src/config/audioconf.c:873 msgid "Select a folder" msgstr "Выберите папку" -#: ../sflphone-client-gnome/src/config/audioconf.c:883 +#: ../sflphone-client-gnome/src/config/audioconf.c:879 msgid "Ringtones" msgstr "Звонки" -#: ../sflphone-client-gnome/src/config/audioconf.c:889 +#: ../sflphone-client-gnome/src/config/audioconf.c:885 msgid "_Enable ringtones" msgstr "Включить звонок" -#: ../sflphone-client-gnome/src/config/audioconf.c:895 +#: ../sflphone-client-gnome/src/config/audioconf.c:891 msgid "Choose a ringtone" msgstr "Выберите звонок" -#: ../sflphone-client-gnome/src/config/audioconf.c:901 +#: ../sflphone-client-gnome/src/config/audioconf.c:897 msgid "Audio Files" msgstr "Звуковые файлы" @@ -825,7 +994,7 @@ msgstr "Переписка номера телефона" msgid "_Prefix dialed numbers with" msgstr "Добавить перед на набранными номерами" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:195 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:225 msgid "" "This profile is used when you want to reach a remote peer simply by typing a " "sip URI such as <b>sip:remotepeer</b>. The settings you define here will " @@ -836,79 +1005,59 @@ msgstr "" "настройки так-же будут использованы если не будет подходящего аккаунта для " "входящего или выходящего звонка." -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:274 -msgid "SIP Port" -msgstr "SIP-порт" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:281 -msgid "UDP Transport" -msgstr "Транспорт UDP" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:319 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:440 msgid "Desktop Notifications" msgstr "Извещения на рабочем столе" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:323 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:444 msgid "_Enable notifications" msgstr "Включить звонок" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:329 -msgid "Enable voicemail _notifications" -msgstr "Включить предупреждения о речевых сообщениях" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:341 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:450 msgid "System Tray Icon" msgstr "System Tray Icon" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:344 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:453 msgid "_Popup main window on incoming call" msgstr "_Показать главное окно при входящем звонке" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:349 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:457 msgid "Ne_ver popup main window" msgstr "Никогда не показывать главное окно" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:353 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:463 msgid "Hide SFLphone window on _startup" msgstr "Спрятать окно SFLphone при пуске" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:359 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:469 msgid "Calls History" msgstr "Журнал звонков" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:362 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:472 msgid "_Keep my history for at least" msgstr "Со_хранить мой журнал звонков как минимум в течении" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:373 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:483 msgid "days" msgstr "дней" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:377 -msgid "Configuration File" -msgstr "Файл конфигурации" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:379 -msgid "Store SIP credentials as MD5 hash" -msgstr "Записать параметры доступа SIP с шифровкой MD5." - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:423 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:536 msgid "Preferences" msgstr "Предпочтения" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:448 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:561 msgid "Audio" msgstr "Звук" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:453 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:566 msgid "Address Book" msgstr "Адресная книга" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:458 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:571 msgid "Hooks" msgstr "Зацепки" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:468 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:581 msgid "Direct IP calls" msgstr "Прямые IP-звонки" @@ -916,11 +1065,11 @@ msgstr "Прямые IP-звонки" msgid "Advanced options for TLS" msgstr "Дополнительные опции для TLS" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:55 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:56 msgid "TLS transport" msgstr "Транспорт TLS" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:59 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:60 msgid "" "TLS transport can be used along with UDP for those calls that would\n" "require secure sip transactions (aka SIPS). You can configure a different\n" @@ -933,55 +1082,55 @@ msgstr "" "каждого аккаунта (но каждый из них будет использовать свой выделенный " "порт).\n" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:100 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:103 msgid "Certificate of Authority list" msgstr "Список центра сертификации" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:104 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:107 msgid "Choose a CA list file (optional)" msgstr "Выберите файл Центра сертификации (необязательный)" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:115 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:131 msgid "Public endpoint certificate file" msgstr "Файл с публичным сертификатом" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:119 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:135 msgid "Choose a public endpoint certificate (optional)" msgstr "Выберите публичный сертификат (необязательный)" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:134 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:159 msgid "Choose a private key file (optional)" msgstr "Выберите файл с секретным ключом (необязательно)" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:145 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:181 msgid "Password for the private key" msgstr "Пароль для секретного ключа" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:168 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:204 msgid "TLS protocol method" msgstr "Метод протокола TLS" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:202 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:238 msgid "TLS cipher list" msgstr "Список шифров TLS" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:211 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:247 msgid "Server name instance for outgoing TLS connection" msgstr "Имя сервера для выходящих TLS-подключений." -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:219 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:255 msgid "Negotiation timeout (sec:msec)" msgstr "Время ожидания соединения (сек:мсек)" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:236 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:272 msgid "Verify incoming certificates, as a server" msgstr "Проверять входящие сертификаты (в качестве сервера)" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:242 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:278 msgid "Verify certificates from answer, as a client" msgstr "Проверять входящие сертификаты (в качестве клиента)" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:248 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:284 msgid "Require certificate for incoming tls connections" msgstr "Требовать сертификат для входящих TLS-подключений" @@ -989,54 +1138,90 @@ msgstr "Требовать сертификат для входящих TLS-по msgid "ZRTP Options" msgstr "Опции ZRTP" -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:68 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:69 msgid "Send Hello Hash in S_DP" msgstr "Послать hello-хэш в S_DP" -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:74 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:75 msgid "Ask User to Confirm SAS" msgstr "Попросить пользователя подтвердить пароль SAS" -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:80 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:81 msgid "_Warn if ZRTP not supported" msgstr "_Предупредить если ZRTP не пддерживается" -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:86 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:87 msgid "Display SAS once for hold events" msgstr "Показать SAS один раз" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:56 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:58 msgid "Search all" msgstr "Искать все" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:57 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:70 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:82 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:94 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:59 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:72 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:84 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:96 msgid "Click here to change the search type" msgstr "Нажмите, чтобы изменить тип поиска" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:69 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:71 msgid "Search by missed call" msgstr "Поиск по пропущенным вызовам" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:81 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:83 msgid "Search by incoming call" msgstr "Поиск по входящим вызовам" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:93 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:95 msgid "Search by outgoing call" msgstr "Поиск по исходящим вызовам" +#~ msgid "IP call - %s" +#~ msgstr "IP звонок - %s" + +#~ msgid "Codec" +#~ msgstr "Codec" + +#~ msgid "Network" +#~ msgstr "Сеть" + +#~ msgid "Manually" +#~ msgstr "Вручную" + +#~ msgid "There " +#~ msgstr "Здесь " + +#~ msgid "is " +#~ msgstr "Зарегестрирован " + +#~ msgid "are " +#~ msgstr "Зарегестрированны " + +#~ msgid "s" +#~ msgstr "a" + +#~ msgid "_Mute other applications during a call" +#~ msgstr "Приглушать звук других програм во время звонка" + +#~ msgid "SIP Port" +#~ msgstr "SIP-порт" + +#~ msgid "UDP Transport" +#~ msgstr "Транспорт UDP" + +#~ msgid "Enable voicemail _notifications" +#~ msgstr "Включить предупреждения о речевых сообщениях" + +#~ msgid "Store SIP credentials as MD5 hash" +#~ msgstr "Записать параметры доступа SIP с шифровкой MD5." + #~ msgid "Account creation wizard" #~ msgstr "Мастер настройки SFLphone" #~ msgid "Voicemail number" #~ msgstr "Номер автоответчика #" -#~ msgid "Address book" -#~ msgstr "Адресная книга" - #~ msgid "Display volume controls" #~ msgstr "_Настройки громкости" @@ -1049,9 +1234,6 @@ msgstr "Поиск по исходящим вызовам" #~ msgid "Hold on" #~ msgstr "Удержать звонок" -#~ msgid "Transfer" -#~ msgstr "Переслать звонок на другой номер" - #~ msgid "Record" #~ msgstr "Записать переговор" @@ -1091,33 +1273,9 @@ msgstr "Поиск по исходящим вызовам" #~ msgid "Prefix dialed numbers with" #~ msgstr "Добавить перед на набранными номерами" -#~ msgid "_Help" -#~ msgstr "_Помощь" - #~ msgid "_Account creation wizard" #~ msgstr "Мастер настройки SFLphone" -#~ msgid "_Call" -#~ msgstr "_Звонок" - -#~ msgid "Clear _history" -#~ msgstr "_Стереть журнал" - -#~ msgid "_Accounts" -#~ msgstr "_Аккаунты" - -#~ msgid "_Edit" -#~ msgstr "_Правка" - -#~ msgid "_Volume controls" -#~ msgstr "_Настройки громкости" - -#~ msgid "_View" -#~ msgstr "_Вид" - -#~ msgid "History" -#~ msgstr "Журнал" - #~ msgid "_Enable this account" #~ msgstr "_Включить" @@ -1185,9 +1343,6 @@ msgstr "Поиск по исходящим вызовам" #~ msgid "Enable STUN" #~ msgstr "Задействовать STUN" -#~ msgid "Transfer to : " -#~ msgstr "Передать : " - #~ msgid "Default account" #~ msgstr "Учетная запись по умолчанию" @@ -1218,12 +1373,9 @@ msgstr "Поиск по исходящим вызовам" #~ msgid "Give up transfer" #~ msgstr "Прекратить передачу" -#~ msgid "Remove the selected account" -#~ msgstr "Удалить выбранную учетную запись" - #~ msgid "" -#~ "This button enables you to initialize a new account. You will then be able " -#~ "to edit it using the form on the right." +#~ "This button enables you to initialize a new account. You will then be " +#~ "able to edit it using the form on the right." #~ msgstr "" #~ "Эта кнопка позволяет инициализировать новую учетную запись. Редактировать " #~ "данные будет возможно в форме справа." @@ -1275,18 +1427,9 @@ msgstr "Поиск по исходящим вызовам" #~ msgid "Keep my history for at least" #~ msgstr "По крайней мере хранить историю" -#~ msgid "Clear history" -#~ msgstr "Очистить историю" - -#~ msgid "Call history" -#~ msgstr "История звонков" - #~ msgid "Incoming call" #~ msgstr "Входящий звонок" -#~ msgid "Call back" -#~ msgstr "Обратный вызов" - #~ msgid "(C) 2009 Savoir-faire Linux" #~ msgstr "(C) 2009 Savoir-faire Linux" @@ -1317,16 +1460,16 @@ msgstr "Поиск по исходящим вызовам" #~ msgctxt "NAME OF TRANSLATORS" #~ msgid "Your names" #~ msgstr "" -#~ ",Launchpad Contributions:,Hussein Abdallah, ,Launchpad " -#~ "Contributions:,Emmanuel Milou,Hussein Abdallah,Maxime Chambreuil,Pavlo " -#~ "Kucheriavyi,Sergei Sedov, ,Launchpad Contributions:,Emmanuel Milou,Hussein " -#~ "Abdallah,Hussein Abdallah,Maxime Chambreuil,Pavlo Kucheriavyi,Sergei Sedov, " -#~ ",Launchpad Contributions:,Emmanuel Milou,Hussein Abdallah,Hussein " -#~ "Abdallah,Maxime Chambreuil,Pavlo Kucheriavyi,Sergey Sedov" +#~ ",Launchpad Contributions:,Hussein Abdallah, ,Launchpad Contributions:," +#~ "Emmanuel Milou,Hussein Abdallah,Maxime Chambreuil,Pavlo Kucheriavyi," +#~ "Sergei Sedov, ,Launchpad Contributions:,Emmanuel Milou,Hussein Abdallah," +#~ "Hussein Abdallah,Maxime Chambreuil,Pavlo Kucheriavyi,Sergei Sedov, ," +#~ "Launchpad Contributions:,Emmanuel Milou,Hussein Abdallah,Hussein Abdallah," +#~ "Maxime Chambreuil,Pavlo Kucheriavyi,Sergey Sedov" #~ msgctxt "EMAIL OF TRANSLATORS" #~ msgid "Your emails" #~ msgstr "" -#~ ",,,,,emmanuel.milou@savoirfairelinux.com,,maxime.chambreuil@gmail.com,,,,,emm" -#~ "anuel.milou@savoirfairelinux.com,,,maxime.chambreuil@gmail.com,,,,,emmanuel.m" -#~ "ilou@savoirfairelinux.com,,,maxime.chambreuil@gmail.com,," +#~ ",,,,,emmanuel.milou@savoirfairelinux.com,,maxime.chambreuil@gmail.com,,,,," +#~ "emmanuel.milou@savoirfairelinux.com,,,maxime.chambreuil@gmail.com,,,,," +#~ "emmanuel.milou@savoirfairelinux.com,,,maxime.chambreuil@gmail.com,," diff --git a/lang/update-template.sh b/lang/update-template.sh new file mode 100755 index 0000000000..6d91e60fe9 --- /dev/null +++ b/lang/update-template.sh @@ -0,0 +1,6 @@ +#!/bin/bash + +# Parse the GNOME client only to build the langage template + +xgettext --from-code=utf-8 --language=C -k_ -kN_ -kc_:1c,2 -kn_:1,2 -ktr2i18n -ktr2i18n:2c,1 -kki18nc:1c,2 -kki18n -ki18n -ki18nc:1c,2 -o sflphone.pot ../sflphone-client-gnome/src/*.c ../sflphone-client-gnome/src/dbus/*.c ../sflphone-client-gnome/src/config/*.c ../sflphone-client-gnome/src/contacts/*.c ../sflphone-client-gnome/src/icons/*.c ../sflphone-client-gnome/src/widget/*.c + diff --git a/lang/update.sh b/lang/update.sh deleted file mode 100755 index 2903b9fba1..0000000000 --- a/lang/update.sh +++ /dev/null @@ -1,13 +0,0 @@ -xgettext --from-code=utf-8 --language=C --language=C++ --kde \ - -k_ -kc_:1c,2 -kn_:1,2 -ktr2i18n -ktr2i18n:2c,1 -kki18nc:1c,2 -kki18n -ki18n -ki18nc:1c,2 \ - -o sflphone.pot \ - ../sflphone-client-kde/src/*.cpp ../sflphone-client-kde/src/*.h \ - ../sflphone-client-kde/src/conf/*.h ../sflphone-client-kde/src/conf/*.cpp \ - ../sflphone-client-kde/build/src/*.h ../sflphone-client-kde/build/src/*.cpp \ - ../sflphone-client-gnome/src/*.c ../sflphone-client-gnome/src/config/*.c \ - ../sflphone-client-gnome/src/dbus/*.c ../sflphone-client-gnome/src/contacts/*.c - -for fichier in `find . -name *.po ` -do -msgmerge --update $fichier sflphone.pot -done \ No newline at end of file diff --git a/lang/zh_CN/zh_CN.po b/lang/zh_CN/zh_CN.po index 65542440d8..bfc3429d51 100644 --- a/lang/zh_CN/zh_CN.po +++ b/lang/zh_CN/zh_CN.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: SFLphone 0.9.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-10-14 11:18-0400\n" +"POT-Creation-Date: 2009-12-03 10:22-0500\n" "PO-Revision-Date: 2009-10-26 20:46+0000\n" "Last-Translator: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com>\n" "Language-Team: SavoirFaireLinux Inc <sflphoneteam@savoirfairelinux.com>\n" @@ -61,24 +61,15 @@ msgstr "Stun服务器无效" msgid "Invalid" msgstr "无效" -#: ../sflphone-client-gnome/src/actions.c:54 -#: ../sflphone-client-gnome/src/sflnotify.c:94 -#, c-format -msgid "%d voice mail" -msgid_plural "%d voice mails" -msgstr[0] "%d 个语音信息" - -#: ../sflphone-client-gnome/src/actions.c:83 -#: ../sflphone-client-gnome/src/actions.c:919 -#: ../sflphone-client-gnome/src/actions.c:926 +#: ../sflphone-client-gnome/src/actions.c:98 msgid "Using account" msgstr "使用账户" -#: ../sflphone-client-gnome/src/actions.c:89 +#: ../sflphone-client-gnome/src/actions.c:104 msgid "No registered accounts" msgstr "没有已注册帐户" -#: ../sflphone-client-gnome/src/actions.c:268 +#: ../sflphone-client-gnome/src/actions.c:285 msgid "" "Unable to connect to the SFLphone server.\n" "Make sure the daemon is running." @@ -86,26 +77,23 @@ msgstr "" "连接SFLphone服务器失败.\n" "请检查daemon是否还在运行." -#: ../sflphone-client-gnome/src/actions.c:913 -#, c-format -msgid "IP call - %s" -msgstr "IP 电话 - %s" - -#: ../sflphone-client-gnome/src/actions.c:922 -msgid "Codec" -msgstr "编码" +#: ../sflphone-client-gnome/src/actions.c:589 +#: ../sflphone-client-gnome/src/actions.c:911 +msgid "Direct SIP call" +msgstr "" -#: ../sflphone-client-gnome/src/actions.c:1119 +#: ../sflphone-client-gnome/src/actions.c:1103 #, c-format msgid "" "<b>Error: No audio codecs found.\n" "\n" -"</b> SFL audio codecs have to be placed in <i>%s</i> or in the " -"<b>.sflphone</b> directory in your home( <i>%s</i> )" +"</b> SFL audio codecs have to be placed in <i>%s</i> or in the <b>.sflphone</" +"b> directory in your home( <i>%s</i> )" msgstr "" "<b>错误:无法找到codecs编码文件.\n" "\n" -"</b> SFL声音codecs文件应位于<i>%s</i> 或 位于主目录( <i>%s</i> )的<b>.sflphone</b>目录下" +"</b> SFL声音codecs文件应位于<i>%s</i> 或 位于主目录( <i>%s</i> )的<b>." +"sflphone</b>目录下" #: ../sflphone-client-gnome/src/errors.c:29 msgid "" @@ -149,53 +137,53 @@ msgstr "有电话正在处理中" msgid "Do you still want to quit?" msgstr "确认要退出?" -#: ../sflphone-client-gnome/src/mainwindow.c:299 +#: ../sflphone-client-gnome/src/mainwindow.c:298 msgid "SFLphone Error" msgstr "SFLphone出错" -#: ../sflphone-client-gnome/src/mainwindow.c:391 +#: ../sflphone-client-gnome/src/mainwindow.c:392 #, c-format msgid "ZRTP is not supported by peer %s\n" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:392 +#: ../sflphone-client-gnome/src/mainwindow.c:393 msgid "Secure Communication Unavailable" msgstr "安全通信不可用" -#: ../sflphone-client-gnome/src/mainwindow.c:393 -#: ../sflphone-client-gnome/src/mainwindow.c:415 +#: ../sflphone-client-gnome/src/mainwindow.c:394 +#: ../sflphone-client-gnome/src/mainwindow.c:416 msgid "Continue" msgstr "继续" -#: ../sflphone-client-gnome/src/mainwindow.c:394 -#: ../sflphone-client-gnome/src/mainwindow.c:416 -#: ../sflphone-client-gnome/src/mainwindow.c:430 +#: ../sflphone-client-gnome/src/mainwindow.c:395 +#: ../sflphone-client-gnome/src/mainwindow.c:417 +#: ../sflphone-client-gnome/src/mainwindow.c:431 msgid "Stop Call" msgstr "停止呼叫" -#: ../sflphone-client-gnome/src/mainwindow.c:413 +#: ../sflphone-client-gnome/src/mainwindow.c:414 #, c-format msgid "" "A %s error forced the call with %s to fall under unencrypted mode.\n" "Exact reason: %s\n" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:414 +#: ../sflphone-client-gnome/src/mainwindow.c:415 msgid "ZRTP negotiation failed" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:427 +#: ../sflphone-client-gnome/src/mainwindow.c:428 #, c-format msgid "" "%s wants to stop using secure communication. Confirm will resume " "conversation without SRTP.\n" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:428 +#: ../sflphone-client-gnome/src/mainwindow.c:429 msgid "Confirm Go Clear" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:429 +#: ../sflphone-client-gnome/src/mainwindow.c:430 msgid "Confirm" msgstr "确认" @@ -210,6 +198,12 @@ msgstr "%s 帐户: %s" msgid "<i>From</i> %s" msgstr "<i>拨入方</i> %s" +#: ../sflphone-client-gnome/src/sflnotify.c:94 +#, c-format +msgid "%d voice mail" +msgid_plural "%d voice mails" +msgstr[0] "%d 个语音信息" + #: ../sflphone-client-gnome/src/sflnotify.c:111 #, c-format msgid "Calling with %s account <i>%s</i>" @@ -257,217 +251,413 @@ msgstr "扬声器音量" msgid "Mic volume" msgstr "话筒音量" -#: ../sflphone-client-gnome/src/statusicon.c:91 +#: ../sflphone-client-gnome/src/statusicon.c:96 msgid "_Show main window" msgstr "显示主窗口(S)" -#: ../sflphone-client-gnome/src/statusicon.c:126 +#: ../sflphone-client-gnome/src/statusicon.c:131 msgid "SFLphone" msgstr "SFLphone" -#: ../sflphone-client-gnome/src/statusicon.c:127 +#: ../sflphone-client-gnome/src/statusicon.c:132 #, c-format msgid "%i account configured" msgid_plural "%i accounts configured" msgstr[0] "已配置了%i个账户" #: ../sflphone-client-gnome/src/toolbar.c:38 -#: ../sflphone-client-gnome/src/uimanager.c:750 +#: ../sflphone-client-gnome/src/uimanager.c:693 +#: ../sflphone-client-gnome/src/uimanager.c:727 msgid "Voicemail" msgstr "语音信箱" -#: ../sflphone-client-gnome/src/uimanager.c:403 +#: ../sflphone-client-gnome/src/uimanager.c:117 +msgid "No address book selected" +msgstr "地址簿" + +#: ../sflphone-client-gnome/src/uimanager.c:137 +#: ../sflphone-client-gnome/src/uimanager.c:756 +msgid "Address book" +msgstr "地址簿" + +#: ../sflphone-client-gnome/src/uimanager.c:279 +msgid "Voicemail (%i)" +msgstr "语音信箱 (%i)" + +#: ../sflphone-client-gnome/src/uimanager.c:342 msgid "SFLphone is a VoIP client compatible with SIP and IAX2 protocols." msgstr "SFLphone是一个VoIP客户端,它兼容SIP和IAX2协议." -#: ../sflphone-client-gnome/src/uimanager.c:406 +#: ../sflphone-client-gnome/src/uimanager.c:345 msgid "About SFLphone" msgstr "关于SFLphone" -#: ../sflphone-client-gnome/src/uimanager.c:1028 +#: ../sflphone-client-gnome/src/uimanager.c:719 +msgid "Call" +msgstr "电话(_C)" + +#: ../sflphone-client-gnome/src/uimanager.c:720 +#: ../sflphone-client-gnome/src/uimanager.c:1184 +msgid "_New call" +msgstr "新电话(_N)" + +#: ../sflphone-client-gnome/src/uimanager.c:720 +msgid "Place a new call" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:721 +#: ../sflphone-client-gnome/src/uimanager.c:979 msgid "_Pick up" msgstr "接听(_P)" -#: ../sflphone-client-gnome/src/uimanager.c:1040 -#: ../sflphone-client-gnome/src/uimanager.c:1081 +#: ../sflphone-client-gnome/src/uimanager.c:721 +msgid "Answer the call" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:722 +#: ../sflphone-client-gnome/src/uimanager.c:991 +#: ../sflphone-client-gnome/src/uimanager.c:1032 msgid "_Hang up" msgstr "挂断(_H)" -#: ../sflphone-client-gnome/src/uimanager.c:1052 -#: ../sflphone-client-gnome/src/uimanager.c:1093 -msgid "On _Hold" +#: ../sflphone-client-gnome/src/uimanager.c:722 +msgid "Finish the call" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:723 +msgid "O_n hold" msgstr "保持(_H)" -#: ../sflphone-client-gnome/src/uimanager.c:1064 +#: ../sflphone-client-gnome/src/uimanager.c:723 +msgid "Place the call on hold" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:724 +msgid "O_ff hold" +msgstr "恢复通话" + +#: ../sflphone-client-gnome/src/uimanager.c:724 +msgid "Place the call off hold" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:725 +#: ../sflphone-client-gnome/src/uimanager.c:1015 msgid "_Record" msgstr "录音(_R)" -#: ../sflphone-client-gnome/src/uimanager.c:1154 +#: ../sflphone-client-gnome/src/uimanager.c:725 +msgid "Record the current conversation" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:726 +msgid "Configuration _Assistant" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:726 +msgid "Run the configuration assistant" +msgstr "Stun配置有误" + +#: ../sflphone-client-gnome/src/uimanager.c:727 +msgid "Call your voicemail" +msgstr "%d 个语音信息" + +#: ../sflphone-client-gnome/src/uimanager.c:728 +msgid "_Close" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:728 +msgid "Minimize to system tray" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:729 +msgid "_Quit" +msgstr "编辑(_E)" + +#: ../sflphone-client-gnome/src/uimanager.c:729 +msgid "Quit the program" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:732 +msgid "_Edit" +msgstr "编辑(_E)" + +#: ../sflphone-client-gnome/src/uimanager.c:733 +msgid "_Copy" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:733 +msgid "Copy the selection" +msgstr "删除所选账户" + +#: ../sflphone-client-gnome/src/uimanager.c:734 +msgid "_Paste" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:734 +msgid "Paste the clipboard" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:735 +msgid "Clear _history" +msgstr "清空历史记录(_H)" + +#: ../sflphone-client-gnome/src/uimanager.c:735 +msgid "Clear the call history" +msgstr "清空历史记录" + +#: ../sflphone-client-gnome/src/uimanager.c:736 +msgid "_Accounts" +msgstr "账户(_A)" + +#: ../sflphone-client-gnome/src/uimanager.c:736 +msgid "Edit your accounts" +msgstr "当前帐户" + +#: ../sflphone-client-gnome/src/uimanager.c:737 +msgid "_Preferences" +msgstr "首选项" + +#: ../sflphone-client-gnome/src/uimanager.c:737 +msgid "Change your preferences" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:740 +msgid "_View" +msgstr "查看(_V)" + +#: ../sflphone-client-gnome/src/uimanager.c:743 +msgid "_Help" +msgstr "帮助(_H)" + +#: ../sflphone-client-gnome/src/uimanager.c:744 +msgid "Contents" +msgstr "继续" + +#: ../sflphone-client-gnome/src/uimanager.c:744 +msgid "Open the manual" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:745 +msgid "About this application" +msgstr "身份验证" + +#: ../sflphone-client-gnome/src/uimanager.c:751 +msgid "_Transfer" +msgstr "转接" + +#: ../sflphone-client-gnome/src/uimanager.c:751 +msgid "Transfer the call" +msgstr "转给: " + +#: ../sflphone-client-gnome/src/uimanager.c:752 +msgid "_Show toolbar" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:752 +msgid "Show the toolbar" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:753 +msgid "_Dialpad" +msgstr "禁用" + +#: ../sflphone-client-gnome/src/uimanager.c:753 +msgid "Show the dialpad" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:754 +msgid "_Volume controls" +msgstr "音量控制(V)" + +#: ../sflphone-client-gnome/src/uimanager.c:754 +msgid "Show the volume controls" +msgstr "音量控制(V)" + +#: ../sflphone-client-gnome/src/uimanager.c:755 +msgid "_History" +msgstr "历史" + +#: ../sflphone-client-gnome/src/uimanager.c:755 +msgid "Calls history" +msgstr "呼叫记录" + +#: ../sflphone-client-gnome/src/uimanager.c:756 +msgid "_Address book" +msgstr "地址簿" + +#: ../sflphone-client-gnome/src/uimanager.c:1003 +#: ../sflphone-client-gnome/src/uimanager.c:1044 +msgid "On _Hold" +msgstr "保持(_H)" + +#: ../sflphone-client-gnome/src/uimanager.c:1107 msgid "_Call back" msgstr "回叫(_C)" -#: ../sflphone-client-gnome/src/uimanager.c:1226 -msgid "_New call" -msgstr "新电话(_N)" - -#: ../sflphone-client-gnome/src/uimanager.c:1300 +#: ../sflphone-client-gnome/src/uimanager.c:1258 msgid "Edit phone number" msgstr "编辑电话号码" -#: ../sflphone-client-gnome/src/uimanager.c:1311 +#: ../sflphone-client-gnome/src/uimanager.c:1269 msgid "Edit the phone number before making a call" msgstr "拨出电话前编辑电话号码" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:164 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:180 msgid "Account Parameters" msgstr "帐户相关参数" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:173 -#: ../sflphone-client-gnome/src/config/assistant.c:294 -#: ../sflphone-client-gnome/src/config/assistant.c:402 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:189 +#: ../sflphone-client-gnome/src/config/assistant.c:314 +#: ../sflphone-client-gnome/src/config/assistant.c:427 msgid "_Alias" msgstr "别名(A)" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:181 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:197 msgid "_Protocol" msgstr "协议(P)" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:199 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:215 msgid "Unknown" msgstr "未知" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:209 -#: ../sflphone-client-gnome/src/config/assistant.c:302 -#: ../sflphone-client-gnome/src/config/assistant.c:410 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:225 +#: ../sflphone-client-gnome/src/config/assistant.c:322 +#: ../sflphone-client-gnome/src/config/assistant.c:435 msgid "_Host name" msgstr "主机名(H)" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:217 -#: ../sflphone-client-gnome/src/config/assistant.c:310 -#: ../sflphone-client-gnome/src/config/assistant.c:418 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:233 +#: ../sflphone-client-gnome/src/config/assistant.c:330 +#: ../sflphone-client-gnome/src/config/assistant.c:443 msgid "_User name" msgstr "用户名(U)" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:234 -#: ../sflphone-client-gnome/src/config/assistant.c:326 -#: ../sflphone-client-gnome/src/config/assistant.c:433 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:250 +#: ../sflphone-client-gnome/src/config/assistant.c:346 +#: ../sflphone-client-gnome/src/config/assistant.c:458 msgid "_Password" msgstr "密码(P)" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:254 -#: ../sflphone-client-gnome/src/config/assistant.c:344 -#: ../sflphone-client-gnome/src/config/assistant.c:449 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:270 +#: ../sflphone-client-gnome/src/config/assistant.c:363 +#: ../sflphone-client-gnome/src/config/assistant.c:473 +msgid "Show password" +msgstr "密码" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:274 +#: ../sflphone-client-gnome/src/config/assistant.c:368 +#: ../sflphone-client-gnome/src/config/assistant.c:478 msgid "_Voicemail number" msgstr "语音信箱号码(V)" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:340 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:361 msgid "Authentication" msgstr "身份验证" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:341 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:362 msgid "Secret" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:466 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:605 msgid "Credential" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:501 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:640 msgid "Authentication name" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:512 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:651 msgid "Password" msgstr "密码" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:535 -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:909 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:201 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:674 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1056 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:321 msgid "Security" msgstr "安全" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:547 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:213 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:687 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:333 msgid "Use TLS transport (sips)" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:552 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:218 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:693 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:338 msgid "SRTP key exchange" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:558 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:224 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:699 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:344 msgid "Disabled" msgstr "禁用" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:674 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:795 msgid "Registration" msgstr "注册" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:679 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:800 msgid "Registration expire" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:687 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:809 msgid "_Comply with RFC 3263" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:693 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:463 -msgid "Network" -msgstr "网络" +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:816 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:234 +msgid "Network Interface" +msgstr "网络连接失败" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:707 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:830 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:249 msgid "Local address" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:744 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:880 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:301 msgid "Local port" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:752 -msgid "Set published address and port:" +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:893 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:928 +msgid "Published address" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:756 -msgid "Using STUN " +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:899 +msgid "Using STUN" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:761 -msgid "Same as local parameters" +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:906 +msgid "STUN server URL" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:764 -msgid "Manually" +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:914 +msgid "Same as local parameters" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:769 -msgid "Published address" +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:917 +msgid "Set published address and port:" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:777 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:936 msgid "Published port" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:785 -msgid "STUN server URL" -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:880 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1027 msgid "Account settings" msgstr "帐户设置" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:899 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1046 msgid "Basic" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:904 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1051 msgid "Advanced" msgstr "" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:169 -msgid "Server returned \"" +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:164 +#, c-format +msgid "Server returned \"%s\" (%d)" msgstr "" #: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:389 @@ -486,32 +676,18 @@ msgstr "帐户" msgid "Configured Accounts" msgstr "已配置帐户" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:505 -msgid "There " -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:506 -msgid "is " -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:506 -msgid "are " -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:508 -msgid " active account" -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:509 -msgid "s" -msgstr "" +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:501 +#, c-format +msgid "There is %d active account" +msgid_plural "There are %d active accounts" +msgstr[0] "" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:514 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:507 msgid "You have no active account" msgstr "" #: ../sflphone-client-gnome/src/config/addressbook-config.c:306 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:443 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:556 msgid "General" msgstr "常用配置" @@ -556,225 +732,220 @@ msgid "Select which Evolution address books to use" msgstr "选择使用如下Evolution地址薄" #: ../sflphone-client-gnome/src/config/addressbook-config.c:404 -#: ../sflphone-client-gnome/src/config/audioconf.c:578 +#: ../sflphone-client-gnome/src/config/audioconf.c:577 msgid "Name" msgstr "名称" -#: ../sflphone-client-gnome/src/config/assistant.c:69 +#: ../sflphone-client-gnome/src/config/assistant.c:75 #, c-format msgid "This assistant is now finished." msgstr "配置完成." -#: ../sflphone-client-gnome/src/config/assistant.c:71 +#: ../sflphone-client-gnome/src/config/assistant.c:77 msgid "" "You can at any time check your registration state or modify your accounts " "parameters in the Options/Accounts window." msgstr "你可以随时在 选项/帐户 窗口中查看注册状态或者修改帐户参数." -#: ../sflphone-client-gnome/src/config/assistant.c:74 +#: ../sflphone-client-gnome/src/config/assistant.c:80 msgid "Alias" msgstr "别名" -#: ../sflphone-client-gnome/src/config/assistant.c:78 +#: ../sflphone-client-gnome/src/config/assistant.c:84 msgid "Server" msgstr "服务器" -#: ../sflphone-client-gnome/src/config/assistant.c:82 +#: ../sflphone-client-gnome/src/config/assistant.c:88 msgid "Username" msgstr "用户名" -#: ../sflphone-client-gnome/src/config/assistant.c:86 +#: ../sflphone-client-gnome/src/config/assistant.c:92 msgid "Security: " msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:88 +#: ../sflphone-client-gnome/src/config/assistant.c:94 msgid "SRTP/ZRTP draft-zimmermann" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:90 -#: ../sflphone-client-gnome/src/config/assistant.c:182 +#: ../sflphone-client-gnome/src/config/assistant.c:96 msgid "None" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:210 +#: ../sflphone-client-gnome/src/config/assistant.c:229 msgid "SFLphone account creation wizard" msgstr "SFLphone账户创建向导" -#: ../sflphone-client-gnome/src/config/assistant.c:236 +#: ../sflphone-client-gnome/src/config/assistant.c:255 msgid "Welcome to the Account creation wizard of SFLphone!" msgstr "欢迎使用SFLphone帐户创建向导!" -#: ../sflphone-client-gnome/src/config/assistant.c:237 +#: ../sflphone-client-gnome/src/config/assistant.c:256 msgid "This installation wizard will help you configure an account." msgstr "安装向导将帮助您配置帐户" -#: ../sflphone-client-gnome/src/config/assistant.c:251 +#: ../sflphone-client-gnome/src/config/assistant.c:270 msgid "VoIP Protocols" msgstr "VoIP协议" -#: ../sflphone-client-gnome/src/config/assistant.c:251 +#: ../sflphone-client-gnome/src/config/assistant.c:270 msgid "Select an account type" msgstr "选择帐户类型" -#: ../sflphone-client-gnome/src/config/assistant.c:253 +#: ../sflphone-client-gnome/src/config/assistant.c:272 msgid "SIP (Session Initiation Protocol)" msgstr "SIP(会话初始化协议)" -#: ../sflphone-client-gnome/src/config/assistant.c:255 +#: ../sflphone-client-gnome/src/config/assistant.c:274 msgid "IAX2 (InterAsterix Exchange)" msgstr "IAX2(Asterisk内部交换协议)" -#: ../sflphone-client-gnome/src/config/assistant.c:269 +#: ../sflphone-client-gnome/src/config/assistant.c:288 msgid "Account" msgstr "帐户" -#: ../sflphone-client-gnome/src/config/assistant.c:269 +#: ../sflphone-client-gnome/src/config/assistant.c:288 msgid "Please select one of the following options" msgstr "请选择以下选项中的一个" -#: ../sflphone-client-gnome/src/config/assistant.c:271 +#: ../sflphone-client-gnome/src/config/assistant.c:290 msgid "Create a free SIP/IAX2 account on sflphone.org" msgstr "在sflphone.org上创建免费的SIP/IAX2帐户" -#: ../sflphone-client-gnome/src/config/assistant.c:273 +#: ../sflphone-client-gnome/src/config/assistant.c:292 msgid "Register an existing SIP or IAX2 account" msgstr "注册已存在的SIP或IAX2帐户" -#: ../sflphone-client-gnome/src/config/assistant.c:286 +#: ../sflphone-client-gnome/src/config/assistant.c:306 msgid "SIP account settings" msgstr "SIP帐户设置" -#: ../sflphone-client-gnome/src/config/assistant.c:286 -#: ../sflphone-client-gnome/src/config/assistant.c:394 +#: ../sflphone-client-gnome/src/config/assistant.c:306 +#: ../sflphone-client-gnome/src/config/assistant.c:419 msgid "Please fill the following information" msgstr "请填写以下信息" -#: ../sflphone-client-gnome/src/config/assistant.c:352 -#: ../sflphone-client-gnome/src/config/assistant.c:381 +#: ../sflphone-client-gnome/src/config/assistant.c:376 +#: ../sflphone-client-gnome/src/config/assistant.c:405 msgid "Secure communications with _ZRTP" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:365 +#: ../sflphone-client-gnome/src/config/assistant.c:389 msgid "Optional email address" msgstr "可选邮件地址" -#: ../sflphone-client-gnome/src/config/assistant.c:365 +#: ../sflphone-client-gnome/src/config/assistant.c:389 msgid "This email address will be used to send your voicemail messages." msgstr "这个邮件地址将被用来发送您的语音邮箱消息" -#: ../sflphone-client-gnome/src/config/assistant.c:373 +#: ../sflphone-client-gnome/src/config/assistant.c:397 msgid "_Email address" msgstr "邮件地址(E)" -#: ../sflphone-client-gnome/src/config/assistant.c:394 +#: ../sflphone-client-gnome/src/config/assistant.c:419 msgid "IAX2 account settings" msgstr "IAX2帐户设置" -#: ../sflphone-client-gnome/src/config/assistant.c:467 +#: ../sflphone-client-gnome/src/config/assistant.c:496 msgid "Network Address Translation (NAT)" msgstr "网络地址解析(NAT)" -#: ../sflphone-client-gnome/src/config/assistant.c:467 +#: ../sflphone-client-gnome/src/config/assistant.c:496 msgid "You should probably enable this if you are behind a firewall." msgstr "如果你使用网络使用防火墙,你很有可能需要设定此项." -#: ../sflphone-client-gnome/src/config/assistant.c:476 +#: ../sflphone-client-gnome/src/config/assistant.c:505 msgid "E_nable STUN" msgstr "使用STUN(n)" -#: ../sflphone-client-gnome/src/config/assistant.c:483 +#: ../sflphone-client-gnome/src/config/assistant.c:512 msgid "_STUN server" msgstr "STUN服务器(S)" -#: ../sflphone-client-gnome/src/config/assistant.c:497 +#: ../sflphone-client-gnome/src/config/assistant.c:526 msgid "Account Registration" msgstr "帐户注册" -#: ../sflphone-client-gnome/src/config/assistant.c:497 +#: ../sflphone-client-gnome/src/config/assistant.c:526 msgid "Congratulations!" msgstr "恭喜!" -#: ../sflphone-client-gnome/src/config/audioconf.c:583 +#: ../sflphone-client-gnome/src/config/audioconf.c:582 msgid "Frequency" msgstr "频率" -#: ../sflphone-client-gnome/src/config/audioconf.c:588 +#: ../sflphone-client-gnome/src/config/audioconf.c:587 msgid "Bitrate" msgstr "比率" -#: ../sflphone-client-gnome/src/config/audioconf.c:593 +#: ../sflphone-client-gnome/src/config/audioconf.c:592 msgid "Bandwidth" msgstr "带宽" -#: ../sflphone-client-gnome/src/config/audioconf.c:673 +#: ../sflphone-client-gnome/src/config/audioconf.c:670 msgid "ALSA plugin" msgstr "ALSA插件" -#: ../sflphone-client-gnome/src/config/audioconf.c:695 +#: ../sflphone-client-gnome/src/config/audioconf.c:692 msgid "Output" msgstr "输出" -#: ../sflphone-client-gnome/src/config/audioconf.c:717 +#: ../sflphone-client-gnome/src/config/audioconf.c:714 msgid "Input" msgstr "输入" -#: ../sflphone-client-gnome/src/config/audioconf.c:752 +#: ../sflphone-client-gnome/src/config/audioconf.c:749 msgid "_Voice Activity Detection" msgstr "声音状态检测(V)" -#: ../sflphone-client-gnome/src/config/audioconf.c:762 +#: ../sflphone-client-gnome/src/config/audioconf.c:759 msgid "_Noise Reduction (Narrow-Band Companding)" msgstr "降噪处理-窄频压缩(N)" -#: ../sflphone-client-gnome/src/config/audioconf.c:798 +#: ../sflphone-client-gnome/src/config/audioconf.c:800 msgid "Sound Manager" msgstr "音频管理器" -#: ../sflphone-client-gnome/src/config/audioconf.c:807 +#: ../sflphone-client-gnome/src/config/audioconf.c:809 msgid "_Pulseaudio" msgstr "Pulseaudio" -#: ../sflphone-client-gnome/src/config/audioconf.c:811 +#: ../sflphone-client-gnome/src/config/audioconf.c:813 msgid "_ALSA" msgstr "ALSA" -#: ../sflphone-client-gnome/src/config/audioconf.c:816 -msgid "_Mute other applications during a call" -msgstr "当有来电时静音其它应用程序(c)" - -#: ../sflphone-client-gnome/src/config/audioconf.c:823 +#: ../sflphone-client-gnome/src/config/audioconf.c:819 msgid "ALSA settings" msgstr "ALSA设置" -#: ../sflphone-client-gnome/src/config/audioconf.c:840 +#: ../sflphone-client-gnome/src/config/audioconf.c:836 msgid "Codecs" msgstr "Codecs编码" -#: ../sflphone-client-gnome/src/config/audioconf.c:869 +#: ../sflphone-client-gnome/src/config/audioconf.c:865 msgid "Recordings" msgstr "记录" -#: ../sflphone-client-gnome/src/config/audioconf.c:873 +#: ../sflphone-client-gnome/src/config/audioconf.c:869 msgid "Destination folder" msgstr "目标文件夹" -#: ../sflphone-client-gnome/src/config/audioconf.c:877 +#: ../sflphone-client-gnome/src/config/audioconf.c:873 msgid "Select a folder" msgstr "选择文件夹" -#: ../sflphone-client-gnome/src/config/audioconf.c:883 +#: ../sflphone-client-gnome/src/config/audioconf.c:879 msgid "Ringtones" msgstr "铃声" -#: ../sflphone-client-gnome/src/config/audioconf.c:889 +#: ../sflphone-client-gnome/src/config/audioconf.c:885 msgid "_Enable ringtones" msgstr "启用铃声(E)" -#: ../sflphone-client-gnome/src/config/audioconf.c:895 +#: ../sflphone-client-gnome/src/config/audioconf.c:891 msgid "Choose a ringtone" msgstr "选择铃声" -#: ../sflphone-client-gnome/src/config/audioconf.c:901 +#: ../sflphone-client-gnome/src/config/audioconf.c:897 msgid "Audio Files" msgstr "音频文件" @@ -811,86 +982,66 @@ msgstr "重设电话号码" msgid "_Prefix dialed numbers with" msgstr "号码前缀(P)" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:195 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:225 msgid "" "This profile is used when you want to reach a remote peer simply by typing a " "sip URI such as <b>sip:remotepeer</b>. The settings you define here will " "also be used if no account can be matched to an incoming or outgoing call." msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:274 -msgid "SIP Port" -msgstr "SIP端口号" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:281 -msgid "UDP Transport" -msgstr "" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:319 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:440 msgid "Desktop Notifications" msgstr "桌面提示" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:323 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:444 msgid "_Enable notifications" msgstr "启用提示(E)" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:329 -msgid "Enable voicemail _notifications" -msgstr "启用语音邮箱提示(n)" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:341 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:450 msgid "System Tray Icon" msgstr "系统托盘图标" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:344 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:453 msgid "_Popup main window on incoming call" msgstr "来电时弹出主窗口(P)" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:349 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:457 msgid "Ne_ver popup main window" msgstr "从不弹出主窗口(v)" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:353 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:463 msgid "Hide SFLphone window on _startup" msgstr "在启动时隐藏SFLphone主窗口" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:359 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:469 msgid "Calls History" msgstr "拨号历史" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:362 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:472 msgid "_Keep my history for at least" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:373 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:483 msgid "days" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:377 -msgid "Configuration File" -msgstr "" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:379 -msgid "Store SIP credentials as MD5 hash" -msgstr "" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:423 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:536 msgid "Preferences" msgstr "首选项" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:448 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:561 msgid "Audio" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:453 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:566 msgid "Address Book" msgstr "地址簿" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:458 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:571 msgid "Hooks" msgstr "钩键" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:468 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:581 msgid "Direct IP calls" msgstr "" @@ -898,11 +1049,11 @@ msgstr "" msgid "Advanced options for TLS" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:55 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:56 msgid "TLS transport" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:59 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:60 msgid "" "TLS transport can be used along with UDP for those calls that would\n" "require secure sip transactions (aka SIPS). You can configure a different\n" @@ -911,55 +1062,55 @@ msgid "" "port, different one from each other\n" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:100 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:103 msgid "Certificate of Authority list" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:104 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:107 msgid "Choose a CA list file (optional)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:115 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:131 msgid "Public endpoint certificate file" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:119 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:135 msgid "Choose a public endpoint certificate (optional)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:134 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:159 msgid "Choose a private key file (optional)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:145 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:181 msgid "Password for the private key" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:168 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:204 msgid "TLS protocol method" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:202 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:238 msgid "TLS cipher list" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:211 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:247 msgid "Server name instance for outgoing TLS connection" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:219 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:255 msgid "Negotiation timeout (sec:msec)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:236 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:272 msgid "Verify incoming certificates, as a server" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:242 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:278 msgid "Verify certificates from answer, as a client" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:248 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:284 msgid "Require certificate for incoming tls connections" msgstr "" @@ -967,45 +1118,63 @@ msgstr "" msgid "ZRTP Options" msgstr "" -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:68 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:69 msgid "Send Hello Hash in S_DP" msgstr "" -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:74 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:75 msgid "Ask User to Confirm SAS" msgstr "" -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:80 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:81 msgid "_Warn if ZRTP not supported" msgstr "" -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:86 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:87 msgid "Display SAS once for hold events" msgstr "" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:56 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:58 msgid "Search all" msgstr "查询所有" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:57 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:70 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:82 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:94 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:59 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:72 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:84 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:96 msgid "Click here to change the search type" msgstr "请点击此处改变查询方式" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:69 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:71 msgid "Search by missed call" msgstr "从未接电话中查询" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:81 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:83 msgid "Search by incoming call" msgstr "从来电中查询" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:93 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:95 msgid "Search by outgoing call" msgstr "从拨出电话中查询" +#~ msgid "IP call - %s" +#~ msgstr "IP 电话 - %s" + +#~ msgid "Codec" +#~ msgstr "编码" + +#~ msgid "Network" +#~ msgstr "网络" + +#~ msgid "_Mute other applications during a call" +#~ msgstr "当有来电时静音其它应用程序(c)" + +#~ msgid "SIP Port" +#~ msgstr "SIP端口号" + +#~ msgid "Enable voicemail _notifications" +#~ msgstr "启用语音邮箱提示(n)" + #~ msgid "Account creation wizard" #~ msgstr "帐户创建向导" @@ -1026,9 +1195,6 @@ msgstr "从拨出电话中查询" #~ msgid "Default account" #~ msgstr "默认帐户" -#~ msgid "Transfer to : " -#~ msgstr "转给: " - #~ msgid "SFLphone KDE Client" #~ msgstr "SFLphone KDE客户端" @@ -1041,12 +1207,6 @@ msgstr "从拨出电话中查询" #~ msgid "Main screen" #~ msgstr "主屏幕" -#~ msgid "Call history" -#~ msgstr "呼叫记录" - -#~ msgid "Address book" -#~ msgstr "地址簿" - #~ msgid "Configure SFLphone" #~ msgstr "配置SFLphone" @@ -1080,9 +1240,6 @@ msgstr "从拨出电话中查询" #~ msgid "Hold on" #~ msgstr "呼叫保持" -#~ msgid "Transfer" -#~ msgstr "转接" - #~ msgid "Record" #~ msgstr "记录" @@ -1101,29 +1258,32 @@ msgstr "从拨出电话中查询" #~ msgid "" #~ "By default, when you place a call, sflphone will use the first account in " #~ "this list which is \"registered\". Change the order of the accounts using " -#~ "the \"Up\" and \"Down\" arrows. Enable/disable them by checking/unchecking " -#~ "them on the left of the item. Add or remove some with \"Plus\" and \"Sub\" " -#~ "buttons. Edit the selected account with the form on the right." +#~ "the \"Up\" and \"Down\" arrows. Enable/disable them by checking/" +#~ "unchecking them on the left of the item. Add or remove some with \"Plus\" " +#~ "and \"Sub\" buttons. Edit the selected account with the form on the right." #~ msgstr "" -#~ "在默认情况下,当你打电话时,sflphone会使用列表当中第一个已注册的帐户。使用箭头\"上\"和\"下\"可以改变账户的顺序。选择账户名称左边的方框可以" -#~ "启用帐户,取消选择则会禁用该账户。通过\"加\"\"减\"按钮可以添加或删除账户。点击\"编辑\"按钮可以改变账户的设置。" - -#~ msgid "Remove the selected account" -#~ msgstr "删除所选账户" +#~ "在默认情况下,当你打电话时,sflphone会使用列表当中第一个已注册的帐户。使用" +#~ "箭头\"上\"和\"下\"可以改变账户的顺序。选择账户名称左边的方框可以启用帐户," +#~ "取消选择则会禁用该账户。通过\"加\"\"减\"按钮可以添加或删除账户。点击\"编辑" +#~ "\"按钮可以改变账户的设置。" #~ msgid "" -#~ "This button will remove the selected account in the list below. Be sure you " -#~ "really don't need it anymore. If you think you might use it again later, " -#~ "just uncheck it." -#~ msgstr "该按钮会删除列表中被选定的账户。请确认你的操作。如果你希望继续使用某个账户,请取消对该账户的选择" +#~ "This button will remove the selected account in the list below. Be sure " +#~ "you really don't need it anymore. If you think you might use it again " +#~ "later, just uncheck it." +#~ msgstr "" +#~ "该按钮会删除列表中被选定的账户。请确认你的操作。如果你希望继续使用某个账" +#~ "户,请取消对该账户的选择" #~ msgid "Remove" #~ msgstr "删除" #~ msgid "" -#~ "This button enables you to initialize a new account. You will then be able " -#~ "to edit it using the form on the right." -#~ msgstr "通过该按钮可以创建一个新账户。添加该账户之后你还可以通过编辑按钮来修改设置。" +#~ "This button enables you to initialize a new account. You will then be " +#~ "able to edit it using the form on the right." +#~ msgstr "" +#~ "通过该按钮可以创建一个新账户。添加该账户之后你还可以通过编辑按钮来修改设" +#~ "置。" #~ msgid "Add" #~ msgstr "添加" @@ -1136,8 +1296,9 @@ msgstr "从拨出电话中查询" #~ "this list which is \"registered\". Change the order of the accounts using " #~ "the \"Up\" and \"Down\" arrows." #~ msgstr "" -#~ "在默认情况下,当你打电话时,sflphone会使用列表当中第一个已注册的帐户。使用箭头\"上\"和\"下\"可以改变账户的顺序。选择账户名称左边的方框可以" -#~ "启用帐户,取消选择则会禁用该账户。通过\"加\"\"减\"按钮可以添加或删除账户。" +#~ "在默认情况下,当你打电话时,sflphone会使用列表当中第一个已注册的帐户。使用" +#~ "箭头\"上\"和\"下\"可以改变账户的顺序。选择账户名称左边的方框可以启用帐户," +#~ "取消选择则会禁用该账户。通过\"加\"\"减\"按钮可以添加或删除账户。" #~ msgid "Down" #~ msgstr "下" @@ -1220,9 +1381,6 @@ msgstr "从拨出电话中查询" #~ msgid "On start" #~ msgstr "正在启动" -#~ msgid "Clear history" -#~ msgstr "清空历史记录" - #~ msgid "Trigger on specific SIP header" #~ msgstr "激活指定的SIP头" @@ -1238,12 +1396,6 @@ msgstr "从拨出电话中查询" #~ msgid "Attention:number of results exceeds max displayed." #~ msgstr "注意:结果超过可显示的最大值" -#~ msgid "_Volume controls" -#~ msgstr "音量控制(V)" - -#~ msgid "History" -#~ msgstr "历史" - #~ msgid "_Enable this account" #~ msgstr "启用该账户(E)" @@ -1392,9 +1544,6 @@ msgstr "从拨出电话中查询" #~ msgid "\"Voicemail\" <%s>" #~ msgstr "\"语音邮件\" <%s>" -#~ msgid "Off Hold" -#~ msgstr "恢复通话" - #~ msgid "Record a call" #~ msgstr "记录通话" @@ -1544,27 +1693,9 @@ msgstr "从拨出电话中查询" #~ msgid "_STUN Server" #~ msgstr "STUN服务器(S)" -#~ msgid "_Edit" -#~ msgstr "编辑(_E)" - -#~ msgid "_View" -#~ msgstr "查看(_V)" - -#~ msgid "_Help" -#~ msgstr "帮助(_H)" - #~ msgid "_Account creation wizard" #~ msgstr "帐户创建向导(_A)" -#~ msgid "_Call" -#~ msgstr "电话(_C)" - -#~ msgid "Clear _history" -#~ msgstr "清空历史记录(_H)" - -#~ msgid "_Accounts" -#~ msgstr "账户(_A)" - #~ msgctxt "NAME OF TRANSLATORS" #~ msgid "Your names" #~ msgstr "" @@ -1576,6 +1707,7 @@ msgstr "从拨出电话中查询" #~ msgctxt "EMAIL OF TRANSLATORS" #~ msgid "Your emails" #~ msgstr "" -#~ "yunliu2000@gmail.com,,,happyaron.xu@gmail.com,,,,happyaron.xu@gmail.com,,,rai" -#~ "nofchaos@gmail.com,,,happyaron.xu@gmail.com,,,rainofchaos@gmail.com,,,,emmanu" -#~ "el.milou@savoirfairelinux.com,,rainofchaos@gmail.com,wantinghard@gmail.com" +#~ "yunliu2000@gmail.com,,,happyaron.xu@gmail.com,,,,happyaron.xu@gmail.com,,," +#~ "rainofchaos@gmail.com,,,happyaron.xu@gmail.com,,,rainofchaos@gmail.com,,,," +#~ "emmanuel.milou@savoirfairelinux.com,,rainofchaos@gmail.com," +#~ "wantinghard@gmail.com" diff --git a/lang/zh_HK/zh_HK.po b/lang/zh_HK/zh_HK.po index a4ba19605e..0e4afca0c5 100644 --- a/lang/zh_HK/zh_HK.po +++ b/lang/zh_HK/zh_HK.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: SFLphone 0.9.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-10-14 11:18-0400\n" +"POT-Creation-Date: 2009-12-03 10:22-0500\n" "PO-Revision-Date: 2009-10-26 20:46+0000\n" "Last-Translator: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com>\n" "Language-Team: SavoirFaireLinux Inc <sflphoneteam@savoirfairelinux.com>\n" @@ -61,24 +61,15 @@ msgstr "Stun伺服器無效" msgid "Invalid" msgstr "無效" -#: ../sflphone-client-gnome/src/actions.c:54 -#: ../sflphone-client-gnome/src/sflnotify.c:94 -#, c-format -msgid "%d voice mail" -msgid_plural "%d voice mails" -msgstr[0] "%d 個語音郵件" - -#: ../sflphone-client-gnome/src/actions.c:83 -#: ../sflphone-client-gnome/src/actions.c:919 -#: ../sflphone-client-gnome/src/actions.c:926 +#: ../sflphone-client-gnome/src/actions.c:98 msgid "Using account" msgstr "使用賬戶" -#: ../sflphone-client-gnome/src/actions.c:89 +#: ../sflphone-client-gnome/src/actions.c:104 msgid "No registered accounts" msgstr "沒有已註冊帳戶" -#: ../sflphone-client-gnome/src/actions.c:268 +#: ../sflphone-client-gnome/src/actions.c:285 msgid "" "Unable to connect to the SFLphone server.\n" "Make sure the daemon is running." @@ -86,26 +77,23 @@ msgstr "" "連接SFLphone伺服器失敗.\n" "請核查daemon是否正在運行." -#: ../sflphone-client-gnome/src/actions.c:913 -#, c-format -msgid "IP call - %s" -msgstr "IP電話- %s" - -#: ../sflphone-client-gnome/src/actions.c:922 -msgid "Codec" -msgstr "編碼" +#: ../sflphone-client-gnome/src/actions.c:589 +#: ../sflphone-client-gnome/src/actions.c:911 +msgid "Direct SIP call" +msgstr "" -#: ../sflphone-client-gnome/src/actions.c:1119 +#: ../sflphone-client-gnome/src/actions.c:1103 #, c-format msgid "" "<b>Error: No audio codecs found.\n" "\n" -"</b> SFL audio codecs have to be placed in <i>%s</i> or in the " -"<b>.sflphone</b> directory in your home( <i>%s</i> )" +"</b> SFL audio codecs have to be placed in <i>%s</i> or in the <b>.sflphone</" +"b> directory in your home( <i>%s</i> )" msgstr "" "<b>錯誤:無法找到音訊編碼檔案.\n" "\n" -"</b> SFL聲音編碼檔案應該位于<i>%s</i> 或者位于主目錄( <i>%s</i> )的<b>.sflphone</b>目錄下" +"</b> SFL聲音編碼檔案應該位于<i>%s</i> 或者位于主目錄( <i>%s</i> )的<b>." +"sflphone</b>目錄下" #: ../sflphone-client-gnome/src/errors.c:29 msgid "" @@ -149,53 +137,53 @@ msgstr "有電話正在處理中." msgid "Do you still want to quit?" msgstr "確認要退出?" -#: ../sflphone-client-gnome/src/mainwindow.c:299 +#: ../sflphone-client-gnome/src/mainwindow.c:298 msgid "SFLphone Error" msgstr "SFLphone 出錯" -#: ../sflphone-client-gnome/src/mainwindow.c:391 +#: ../sflphone-client-gnome/src/mainwindow.c:392 #, c-format msgid "ZRTP is not supported by peer %s\n" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:392 +#: ../sflphone-client-gnome/src/mainwindow.c:393 msgid "Secure Communication Unavailable" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:393 -#: ../sflphone-client-gnome/src/mainwindow.c:415 +#: ../sflphone-client-gnome/src/mainwindow.c:394 +#: ../sflphone-client-gnome/src/mainwindow.c:416 msgid "Continue" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:394 -#: ../sflphone-client-gnome/src/mainwindow.c:416 -#: ../sflphone-client-gnome/src/mainwindow.c:430 +#: ../sflphone-client-gnome/src/mainwindow.c:395 +#: ../sflphone-client-gnome/src/mainwindow.c:417 +#: ../sflphone-client-gnome/src/mainwindow.c:431 msgid "Stop Call" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:413 +#: ../sflphone-client-gnome/src/mainwindow.c:414 #, c-format msgid "" "A %s error forced the call with %s to fall under unencrypted mode.\n" "Exact reason: %s\n" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:414 +#: ../sflphone-client-gnome/src/mainwindow.c:415 msgid "ZRTP negotiation failed" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:427 +#: ../sflphone-client-gnome/src/mainwindow.c:428 #, c-format msgid "" "%s wants to stop using secure communication. Confirm will resume " "conversation without SRTP.\n" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:428 +#: ../sflphone-client-gnome/src/mainwindow.c:429 msgid "Confirm Go Clear" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:429 +#: ../sflphone-client-gnome/src/mainwindow.c:430 msgid "Confirm" msgstr "" @@ -210,6 +198,12 @@ msgstr "%s 帳戶 : %s" msgid "<i>From</i> %s" msgstr "<i>撥入方</i> %s" +#: ../sflphone-client-gnome/src/sflnotify.c:94 +#, c-format +msgid "%d voice mail" +msgid_plural "%d voice mails" +msgstr[0] "%d 個語音郵件" + #: ../sflphone-client-gnome/src/sflnotify.c:111 #, c-format msgid "Calling with %s account <i>%s</i>" @@ -257,217 +251,413 @@ msgstr "揚聲器音量" msgid "Mic volume" msgstr "話筒音量" -#: ../sflphone-client-gnome/src/statusicon.c:91 +#: ../sflphone-client-gnome/src/statusicon.c:96 msgid "_Show main window" msgstr "顯示主窗口(S)" -#: ../sflphone-client-gnome/src/statusicon.c:126 +#: ../sflphone-client-gnome/src/statusicon.c:131 msgid "SFLphone" msgstr "SFLphone" -#: ../sflphone-client-gnome/src/statusicon.c:127 +#: ../sflphone-client-gnome/src/statusicon.c:132 #, c-format msgid "%i account configured" msgid_plural "%i accounts configured" msgstr[0] "已配置了%i個賬戶" #: ../sflphone-client-gnome/src/toolbar.c:38 -#: ../sflphone-client-gnome/src/uimanager.c:750 +#: ../sflphone-client-gnome/src/uimanager.c:693 +#: ../sflphone-client-gnome/src/uimanager.c:727 msgid "Voicemail" msgstr "語音郵件" -#: ../sflphone-client-gnome/src/uimanager.c:403 +#: ../sflphone-client-gnome/src/uimanager.c:117 +msgid "No address book selected" +msgstr "地址簿" + +#: ../sflphone-client-gnome/src/uimanager.c:137 +#: ../sflphone-client-gnome/src/uimanager.c:756 +msgid "Address book" +msgstr "地址簿" + +#: ../sflphone-client-gnome/src/uimanager.c:279 +msgid "Voicemail (%i)" +msgstr "語音郵件 (%i)" + +#: ../sflphone-client-gnome/src/uimanager.c:342 msgid "SFLphone is a VoIP client compatible with SIP and IAX2 protocols." msgstr "SFLphone是一個VoIP客戶端,它兼容SIP和IAX2协议." -#: ../sflphone-client-gnome/src/uimanager.c:406 +#: ../sflphone-client-gnome/src/uimanager.c:345 msgid "About SFLphone" msgstr "有關SFLphone" -#: ../sflphone-client-gnome/src/uimanager.c:1028 +#: ../sflphone-client-gnome/src/uimanager.c:719 +msgid "Call" +msgstr "電話" + +#: ../sflphone-client-gnome/src/uimanager.c:720 +#: ../sflphone-client-gnome/src/uimanager.c:1184 +msgid "_New call" +msgstr "新電話(N)" + +#: ../sflphone-client-gnome/src/uimanager.c:720 +msgid "Place a new call" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:721 +#: ../sflphone-client-gnome/src/uimanager.c:979 msgid "_Pick up" msgstr "撥出(P)" -#: ../sflphone-client-gnome/src/uimanager.c:1040 -#: ../sflphone-client-gnome/src/uimanager.c:1081 +#: ../sflphone-client-gnome/src/uimanager.c:721 +msgid "Answer the call" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:722 +#: ../sflphone-client-gnome/src/uimanager.c:991 +#: ../sflphone-client-gnome/src/uimanager.c:1032 msgid "_Hang up" msgstr "放下(H)" -#: ../sflphone-client-gnome/src/uimanager.c:1052 -#: ../sflphone-client-gnome/src/uimanager.c:1093 -msgid "On _Hold" +#: ../sflphone-client-gnome/src/uimanager.c:722 +msgid "Finish the call" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:723 +msgid "O_n hold" msgstr "待机" -#: ../sflphone-client-gnome/src/uimanager.c:1064 +#: ../sflphone-client-gnome/src/uimanager.c:723 +msgid "Place the call on hold" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:724 +msgid "O_ff hold" +msgstr "恢复通話" + +#: ../sflphone-client-gnome/src/uimanager.c:724 +msgid "Place the call off hold" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:725 +#: ../sflphone-client-gnome/src/uimanager.c:1015 msgid "_Record" msgstr "記錄(R)" -#: ../sflphone-client-gnome/src/uimanager.c:1154 +#: ../sflphone-client-gnome/src/uimanager.c:725 +msgid "Record the current conversation" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:726 +msgid "Configuration _Assistant" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:726 +msgid "Run the configuration assistant" +msgstr "Stun配置有誤" + +#: ../sflphone-client-gnome/src/uimanager.c:727 +msgid "Call your voicemail" +msgstr "%d 個語音郵件" + +#: ../sflphone-client-gnome/src/uimanager.c:728 +msgid "_Close" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:728 +msgid "Minimize to system tray" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:729 +msgid "_Quit" +msgstr "編輯(E)" + +#: ../sflphone-client-gnome/src/uimanager.c:729 +msgid "Quit the program" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:732 +msgid "_Edit" +msgstr "編輯(E)" + +#: ../sflphone-client-gnome/src/uimanager.c:733 +msgid "_Copy" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:733 +msgid "Copy the selection" +msgstr "刪除所選賬戶" + +#: ../sflphone-client-gnome/src/uimanager.c:734 +msgid "_Paste" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:734 +msgid "Paste the clipboard" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:735 +msgid "Clear _history" +msgstr "清空曆史記錄(C)" + +#: ../sflphone-client-gnome/src/uimanager.c:735 +msgid "Clear the call history" +msgstr "清空曆史記錄" + +#: ../sflphone-client-gnome/src/uimanager.c:736 +msgid "_Accounts" +msgstr "帳戶(A)" + +#: ../sflphone-client-gnome/src/uimanager.c:736 +msgid "Edit your accounts" +msgstr "當前帳戶" + +#: ../sflphone-client-gnome/src/uimanager.c:737 +msgid "_Preferences" +msgstr "屬性" + +#: ../sflphone-client-gnome/src/uimanager.c:737 +msgid "Change your preferences" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:740 +msgid "_View" +msgstr "查看(V)" + +#: ../sflphone-client-gnome/src/uimanager.c:743 +msgid "_Help" +msgstr "幫助(H)" + +#: ../sflphone-client-gnome/src/uimanager.c:744 +msgid "Contents" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:744 +msgid "Open the manual" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:745 +msgid "About this application" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:751 +msgid "_Transfer" +msgstr "轉接" + +#: ../sflphone-client-gnome/src/uimanager.c:751 +msgid "Transfer the call" +msgstr "轉給: " + +#: ../sflphone-client-gnome/src/uimanager.c:752 +msgid "_Show toolbar" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:752 +msgid "Show the toolbar" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:753 +msgid "_Dialpad" +msgstr "顯示撥號鍵盤" + +#: ../sflphone-client-gnome/src/uimanager.c:753 +msgid "Show the dialpad" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:754 +msgid "_Volume controls" +msgstr "音量控制(V)" + +#: ../sflphone-client-gnome/src/uimanager.c:754 +msgid "Show the volume controls" +msgstr "音量控制(V)" + +#: ../sflphone-client-gnome/src/uimanager.c:755 +msgid "_History" +msgstr "歷史" + +#: ../sflphone-client-gnome/src/uimanager.c:755 +msgid "Calls history" +msgstr "呼叫記錄" + +#: ../sflphone-client-gnome/src/uimanager.c:756 +msgid "_Address book" +msgstr "地址簿" + +#: ../sflphone-client-gnome/src/uimanager.c:1003 +#: ../sflphone-client-gnome/src/uimanager.c:1044 +msgid "On _Hold" +msgstr "待机" + +#: ../sflphone-client-gnome/src/uimanager.c:1107 msgid "_Call back" msgstr "回叫(C)" -#: ../sflphone-client-gnome/src/uimanager.c:1226 -msgid "_New call" -msgstr "新電話(N)" - -#: ../sflphone-client-gnome/src/uimanager.c:1300 +#: ../sflphone-client-gnome/src/uimanager.c:1258 msgid "Edit phone number" msgstr "編輯電話號碼" -#: ../sflphone-client-gnome/src/uimanager.c:1311 +#: ../sflphone-client-gnome/src/uimanager.c:1269 msgid "Edit the phone number before making a call" msgstr "撥出電話前編輯電話號碼" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:164 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:180 msgid "Account Parameters" msgstr "帳戶相關參數" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:173 -#: ../sflphone-client-gnome/src/config/assistant.c:294 -#: ../sflphone-client-gnome/src/config/assistant.c:402 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:189 +#: ../sflphone-client-gnome/src/config/assistant.c:314 +#: ../sflphone-client-gnome/src/config/assistant.c:427 msgid "_Alias" msgstr "別稱(A)" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:181 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:197 msgid "_Protocol" msgstr "協議(P)" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:199 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:215 msgid "Unknown" msgstr "未知" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:209 -#: ../sflphone-client-gnome/src/config/assistant.c:302 -#: ../sflphone-client-gnome/src/config/assistant.c:410 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:225 +#: ../sflphone-client-gnome/src/config/assistant.c:322 +#: ../sflphone-client-gnome/src/config/assistant.c:435 msgid "_Host name" msgstr "主机名稱(H)" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:217 -#: ../sflphone-client-gnome/src/config/assistant.c:310 -#: ../sflphone-client-gnome/src/config/assistant.c:418 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:233 +#: ../sflphone-client-gnome/src/config/assistant.c:330 +#: ../sflphone-client-gnome/src/config/assistant.c:443 msgid "_User name" msgstr "使用者名稱(U)" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:234 -#: ../sflphone-client-gnome/src/config/assistant.c:326 -#: ../sflphone-client-gnome/src/config/assistant.c:433 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:250 +#: ../sflphone-client-gnome/src/config/assistant.c:346 +#: ../sflphone-client-gnome/src/config/assistant.c:458 msgid "_Password" msgstr "密碼(P)" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:254 -#: ../sflphone-client-gnome/src/config/assistant.c:344 -#: ../sflphone-client-gnome/src/config/assistant.c:449 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:270 +#: ../sflphone-client-gnome/src/config/assistant.c:363 +#: ../sflphone-client-gnome/src/config/assistant.c:473 +msgid "Show password" +msgstr "密碼" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:274 +#: ../sflphone-client-gnome/src/config/assistant.c:368 +#: ../sflphone-client-gnome/src/config/assistant.c:478 msgid "_Voicemail number" msgstr "語音郵箱(V)" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:340 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:361 msgid "Authentication" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:341 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:362 msgid "Secret" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:466 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:605 msgid "Credential" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:501 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:640 msgid "Authentication name" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:512 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:651 msgid "Password" msgstr "密碼" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:535 -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:909 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:201 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:674 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1056 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:321 msgid "Security" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:547 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:213 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:687 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:333 msgid "Use TLS transport (sips)" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:552 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:218 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:693 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:338 msgid "SRTP key exchange" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:558 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:224 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:699 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:344 msgid "Disabled" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:674 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:795 msgid "Registration" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:679 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:800 msgid "Registration expire" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:687 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:809 msgid "_Comply with RFC 3263" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:693 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:463 -msgid "Network" -msgstr "" +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:816 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:234 +msgid "Network Interface" +msgstr "網路連線失敗" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:707 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:830 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:249 msgid "Local address" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:744 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:880 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:301 msgid "Local port" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:752 -msgid "Set published address and port:" +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:893 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:928 +msgid "Published address" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:756 -msgid "Using STUN " +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:899 +msgid "Using STUN" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:761 -msgid "Same as local parameters" +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:906 +msgid "STUN server URL" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:764 -msgid "Manually" +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:914 +msgid "Same as local parameters" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:769 -msgid "Published address" +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:917 +msgid "Set published address and port:" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:777 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:936 msgid "Published port" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:785 -msgid "STUN server URL" -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:880 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1027 msgid "Account settings" msgstr "帳戶設置" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:899 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1046 msgid "Basic" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:904 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1051 msgid "Advanced" msgstr "" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:169 -msgid "Server returned \"" +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:164 +#, c-format +msgid "Server returned \"%s\" (%d)" msgstr "" #: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:389 @@ -486,32 +676,18 @@ msgstr "帳戶" msgid "Configured Accounts" msgstr "已配置帳戶" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:505 -msgid "There " -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:506 -msgid "is " -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:506 -msgid "are " -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:508 -msgid " active account" -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:509 -msgid "s" -msgstr "" +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:501 +#, c-format +msgid "There is %d active account" +msgid_plural "There are %d active accounts" +msgstr[0] "" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:514 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:507 msgid "You have no active account" msgstr "" #: ../sflphone-client-gnome/src/config/addressbook-config.c:306 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:443 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:556 msgid "General" msgstr "常用配置" @@ -556,225 +732,220 @@ msgid "Select which Evolution address books to use" msgstr "選擇使用如下Evolution地址薄" #: ../sflphone-client-gnome/src/config/addressbook-config.c:404 -#: ../sflphone-client-gnome/src/config/audioconf.c:578 +#: ../sflphone-client-gnome/src/config/audioconf.c:577 msgid "Name" msgstr "名稱" -#: ../sflphone-client-gnome/src/config/assistant.c:69 +#: ../sflphone-client-gnome/src/config/assistant.c:75 #, c-format msgid "This assistant is now finished." msgstr "配置完成." -#: ../sflphone-client-gnome/src/config/assistant.c:71 +#: ../sflphone-client-gnome/src/config/assistant.c:77 msgid "" "You can at any time check your registration state or modify your accounts " "parameters in the Options/Accounts window." msgstr "你可以隨時在 選項/帳戶 中查看註冊狀態或者修改帳戶信息." -#: ../sflphone-client-gnome/src/config/assistant.c:74 +#: ../sflphone-client-gnome/src/config/assistant.c:80 msgid "Alias" msgstr "別稱" -#: ../sflphone-client-gnome/src/config/assistant.c:78 +#: ../sflphone-client-gnome/src/config/assistant.c:84 msgid "Server" msgstr "伺服器" -#: ../sflphone-client-gnome/src/config/assistant.c:82 +#: ../sflphone-client-gnome/src/config/assistant.c:88 msgid "Username" msgstr "使用者名稱" -#: ../sflphone-client-gnome/src/config/assistant.c:86 +#: ../sflphone-client-gnome/src/config/assistant.c:92 msgid "Security: " msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:88 +#: ../sflphone-client-gnome/src/config/assistant.c:94 msgid "SRTP/ZRTP draft-zimmermann" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:90 -#: ../sflphone-client-gnome/src/config/assistant.c:182 +#: ../sflphone-client-gnome/src/config/assistant.c:96 msgid "None" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:210 +#: ../sflphone-client-gnome/src/config/assistant.c:229 msgid "SFLphone account creation wizard" msgstr "SFLphone賬戶創建嚮導" -#: ../sflphone-client-gnome/src/config/assistant.c:236 +#: ../sflphone-client-gnome/src/config/assistant.c:255 msgid "Welcome to the Account creation wizard of SFLphone!" msgstr "歡迎使用SFLphone帳戶創建嚮導!" -#: ../sflphone-client-gnome/src/config/assistant.c:237 +#: ../sflphone-client-gnome/src/config/assistant.c:256 msgid "This installation wizard will help you configure an account." msgstr "安裝向導將幫助您配置帳戶" -#: ../sflphone-client-gnome/src/config/assistant.c:251 +#: ../sflphone-client-gnome/src/config/assistant.c:270 msgid "VoIP Protocols" msgstr "VoIP協議" -#: ../sflphone-client-gnome/src/config/assistant.c:251 +#: ../sflphone-client-gnome/src/config/assistant.c:270 msgid "Select an account type" msgstr "選擇帳戶類型" -#: ../sflphone-client-gnome/src/config/assistant.c:253 +#: ../sflphone-client-gnome/src/config/assistant.c:272 msgid "SIP (Session Initiation Protocol)" msgstr "SIP(會話初始化協議)" -#: ../sflphone-client-gnome/src/config/assistant.c:255 +#: ../sflphone-client-gnome/src/config/assistant.c:274 msgid "IAX2 (InterAsterix Exchange)" msgstr "IAX2(Asterisk內部交換協議)" -#: ../sflphone-client-gnome/src/config/assistant.c:269 +#: ../sflphone-client-gnome/src/config/assistant.c:288 msgid "Account" msgstr "帳戶" -#: ../sflphone-client-gnome/src/config/assistant.c:269 +#: ../sflphone-client-gnome/src/config/assistant.c:288 msgid "Please select one of the following options" msgstr "請選擇以下選項中的一個" -#: ../sflphone-client-gnome/src/config/assistant.c:271 +#: ../sflphone-client-gnome/src/config/assistant.c:290 msgid "Create a free SIP/IAX2 account on sflphone.org" msgstr "在sflphone.org上創建免費的SIP/IAX2帳戶" -#: ../sflphone-client-gnome/src/config/assistant.c:273 +#: ../sflphone-client-gnome/src/config/assistant.c:292 msgid "Register an existing SIP or IAX2 account" msgstr "註冊已存在的SIP或IAX2帳戶" -#: ../sflphone-client-gnome/src/config/assistant.c:286 +#: ../sflphone-client-gnome/src/config/assistant.c:306 msgid "SIP account settings" msgstr "SIP帳戶配置" -#: ../sflphone-client-gnome/src/config/assistant.c:286 -#: ../sflphone-client-gnome/src/config/assistant.c:394 +#: ../sflphone-client-gnome/src/config/assistant.c:306 +#: ../sflphone-client-gnome/src/config/assistant.c:419 msgid "Please fill the following information" msgstr "請填寫如下信息" -#: ../sflphone-client-gnome/src/config/assistant.c:352 -#: ../sflphone-client-gnome/src/config/assistant.c:381 +#: ../sflphone-client-gnome/src/config/assistant.c:376 +#: ../sflphone-client-gnome/src/config/assistant.c:405 msgid "Secure communications with _ZRTP" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:365 +#: ../sflphone-client-gnome/src/config/assistant.c:389 msgid "Optional email address" msgstr "可選郵件地址" -#: ../sflphone-client-gnome/src/config/assistant.c:365 +#: ../sflphone-client-gnome/src/config/assistant.c:389 msgid "This email address will be used to send your voicemail messages." msgstr "這個郵件地址將被用來發送您的語音" -#: ../sflphone-client-gnome/src/config/assistant.c:373 +#: ../sflphone-client-gnome/src/config/assistant.c:397 msgid "_Email address" msgstr "郵件地址(E)" -#: ../sflphone-client-gnome/src/config/assistant.c:394 +#: ../sflphone-client-gnome/src/config/assistant.c:419 msgid "IAX2 account settings" msgstr "IAX2帳戶配置" -#: ../sflphone-client-gnome/src/config/assistant.c:467 +#: ../sflphone-client-gnome/src/config/assistant.c:496 msgid "Network Address Translation (NAT)" msgstr "网络地址解析(NAT)" -#: ../sflphone-client-gnome/src/config/assistant.c:467 +#: ../sflphone-client-gnome/src/config/assistant.c:496 msgid "You should probably enable this if you are behind a firewall." msgstr "如果你使用網路防火牆,你很有可能需要設定該項." -#: ../sflphone-client-gnome/src/config/assistant.c:476 +#: ../sflphone-client-gnome/src/config/assistant.c:505 msgid "E_nable STUN" msgstr "啟用STUN(n)" -#: ../sflphone-client-gnome/src/config/assistant.c:483 +#: ../sflphone-client-gnome/src/config/assistant.c:512 msgid "_STUN server" msgstr "STUN伺服器(S)" -#: ../sflphone-client-gnome/src/config/assistant.c:497 +#: ../sflphone-client-gnome/src/config/assistant.c:526 msgid "Account Registration" msgstr "帳戶註冊" -#: ../sflphone-client-gnome/src/config/assistant.c:497 +#: ../sflphone-client-gnome/src/config/assistant.c:526 msgid "Congratulations!" msgstr "恭喜!" -#: ../sflphone-client-gnome/src/config/audioconf.c:583 +#: ../sflphone-client-gnome/src/config/audioconf.c:582 msgid "Frequency" msgstr "顰律" -#: ../sflphone-client-gnome/src/config/audioconf.c:588 +#: ../sflphone-client-gnome/src/config/audioconf.c:587 msgid "Bitrate" msgstr "比率" -#: ../sflphone-client-gnome/src/config/audioconf.c:593 +#: ../sflphone-client-gnome/src/config/audioconf.c:592 msgid "Bandwidth" msgstr "顰寬" -#: ../sflphone-client-gnome/src/config/audioconf.c:673 +#: ../sflphone-client-gnome/src/config/audioconf.c:670 msgid "ALSA plugin" msgstr "ALSA插件" -#: ../sflphone-client-gnome/src/config/audioconf.c:695 +#: ../sflphone-client-gnome/src/config/audioconf.c:692 msgid "Output" msgstr "輸出" -#: ../sflphone-client-gnome/src/config/audioconf.c:717 +#: ../sflphone-client-gnome/src/config/audioconf.c:714 msgid "Input" msgstr "輸入" -#: ../sflphone-client-gnome/src/config/audioconf.c:752 +#: ../sflphone-client-gnome/src/config/audioconf.c:749 msgid "_Voice Activity Detection" msgstr "聲音狀態檢測(V)" -#: ../sflphone-client-gnome/src/config/audioconf.c:762 +#: ../sflphone-client-gnome/src/config/audioconf.c:759 msgid "_Noise Reduction (Narrow-Band Companding)" msgstr "降噪處理-窄頻壓縮(N)" -#: ../sflphone-client-gnome/src/config/audioconf.c:798 +#: ../sflphone-client-gnome/src/config/audioconf.c:800 msgid "Sound Manager" msgstr "聲音管理器" -#: ../sflphone-client-gnome/src/config/audioconf.c:807 +#: ../sflphone-client-gnome/src/config/audioconf.c:809 msgid "_Pulseaudio" msgstr "Pulseaudio" -#: ../sflphone-client-gnome/src/config/audioconf.c:811 +#: ../sflphone-client-gnome/src/config/audioconf.c:813 msgid "_ALSA" msgstr "ALSA" -#: ../sflphone-client-gnome/src/config/audioconf.c:816 -msgid "_Mute other applications during a call" -msgstr "當有來電時靜音其它應用程序(c)" - -#: ../sflphone-client-gnome/src/config/audioconf.c:823 +#: ../sflphone-client-gnome/src/config/audioconf.c:819 msgid "ALSA settings" msgstr "ALSA 配置" -#: ../sflphone-client-gnome/src/config/audioconf.c:840 +#: ../sflphone-client-gnome/src/config/audioconf.c:836 msgid "Codecs" msgstr "編碼" -#: ../sflphone-client-gnome/src/config/audioconf.c:869 +#: ../sflphone-client-gnome/src/config/audioconf.c:865 msgid "Recordings" msgstr "記錄" -#: ../sflphone-client-gnome/src/config/audioconf.c:873 +#: ../sflphone-client-gnome/src/config/audioconf.c:869 msgid "Destination folder" msgstr "目標文件夾" -#: ../sflphone-client-gnome/src/config/audioconf.c:877 +#: ../sflphone-client-gnome/src/config/audioconf.c:873 msgid "Select a folder" msgstr "選擇文件夾" -#: ../sflphone-client-gnome/src/config/audioconf.c:883 +#: ../sflphone-client-gnome/src/config/audioconf.c:879 msgid "Ringtones" msgstr "鈴聲" -#: ../sflphone-client-gnome/src/config/audioconf.c:889 +#: ../sflphone-client-gnome/src/config/audioconf.c:885 msgid "_Enable ringtones" msgstr "啟動鈴聲(E)" -#: ../sflphone-client-gnome/src/config/audioconf.c:895 +#: ../sflphone-client-gnome/src/config/audioconf.c:891 msgid "Choose a ringtone" msgstr "鈴聲選擇" -#: ../sflphone-client-gnome/src/config/audioconf.c:901 +#: ../sflphone-client-gnome/src/config/audioconf.c:897 msgid "Audio Files" msgstr "音訊檔案" @@ -811,86 +982,66 @@ msgstr "重設電話號碼" msgid "_Prefix dialed numbers with" msgstr "號碼前綴(P)" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:195 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:225 msgid "" "This profile is used when you want to reach a remote peer simply by typing a " "sip URI such as <b>sip:remotepeer</b>. The settings you define here will " "also be used if no account can be matched to an incoming or outgoing call." msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:274 -msgid "SIP Port" -msgstr "SIP端口" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:281 -msgid "UDP Transport" -msgstr "" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:319 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:440 msgid "Desktop Notifications" msgstr "桌面提示" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:323 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:444 msgid "_Enable notifications" msgstr "啟動提示(E)" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:329 -msgid "Enable voicemail _notifications" -msgstr "啟用語音郵箱提示(n)" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:341 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:450 msgid "System Tray Icon" msgstr "系統托盤圖標" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:344 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:453 msgid "_Popup main window on incoming call" msgstr "來電話時彈出主視窗(P)" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:349 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:457 msgid "Ne_ver popup main window" msgstr "從不彈出主視窗(v)" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:353 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:463 msgid "Hide SFLphone window on _startup" msgstr "在啟動時隱藏SFLphone主窗口" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:359 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:469 msgid "Calls History" msgstr "打電話歷史" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:362 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:472 msgid "_Keep my history for at least" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:373 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:483 msgid "days" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:377 -msgid "Configuration File" -msgstr "" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:379 -msgid "Store SIP credentials as MD5 hash" -msgstr "" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:423 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:536 msgid "Preferences" msgstr "屬性" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:448 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:561 msgid "Audio" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:453 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:566 msgid "Address Book" msgstr "地址簿" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:458 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:571 msgid "Hooks" msgstr "鉤鍵" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:468 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:581 msgid "Direct IP calls" msgstr "" @@ -898,11 +1049,11 @@ msgstr "" msgid "Advanced options for TLS" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:55 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:56 msgid "TLS transport" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:59 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:60 msgid "" "TLS transport can be used along with UDP for those calls that would\n" "require secure sip transactions (aka SIPS). You can configure a different\n" @@ -911,55 +1062,55 @@ msgid "" "port, different one from each other\n" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:100 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:103 msgid "Certificate of Authority list" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:104 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:107 msgid "Choose a CA list file (optional)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:115 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:131 msgid "Public endpoint certificate file" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:119 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:135 msgid "Choose a public endpoint certificate (optional)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:134 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:159 msgid "Choose a private key file (optional)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:145 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:181 msgid "Password for the private key" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:168 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:204 msgid "TLS protocol method" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:202 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:238 msgid "TLS cipher list" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:211 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:247 msgid "Server name instance for outgoing TLS connection" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:219 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:255 msgid "Negotiation timeout (sec:msec)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:236 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:272 msgid "Verify incoming certificates, as a server" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:242 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:278 msgid "Verify certificates from answer, as a client" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:248 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:284 msgid "Require certificate for incoming tls connections" msgstr "" @@ -967,45 +1118,60 @@ msgstr "" msgid "ZRTP Options" msgstr "" -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:68 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:69 msgid "Send Hello Hash in S_DP" msgstr "" -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:74 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:75 msgid "Ask User to Confirm SAS" msgstr "" -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:80 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:81 msgid "_Warn if ZRTP not supported" msgstr "" -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:86 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:87 msgid "Display SAS once for hold events" msgstr "" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:56 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:58 msgid "Search all" msgstr "查詢所有" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:57 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:70 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:82 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:94 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:59 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:72 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:84 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:96 msgid "Click here to change the search type" msgstr "請點擊此處改變查詢方式" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:69 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:71 msgid "Search by missed call" msgstr "從未接電話中查詢" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:81 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:83 msgid "Search by incoming call" msgstr "從來電中查詢" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:93 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:95 msgid "Search by outgoing call" msgstr "從撥出電話中查詢" +#~ msgid "IP call - %s" +#~ msgstr "IP電話- %s" + +#~ msgid "Codec" +#~ msgstr "編碼" + +#~ msgid "_Mute other applications during a call" +#~ msgstr "當有來電時靜音其它應用程序(c)" + +#~ msgid "SIP Port" +#~ msgstr "SIP端口" + +#~ msgid "Enable voicemail _notifications" +#~ msgstr "啟用語音郵箱提示(n)" + #~ msgid "Account creation wizard" #~ msgstr "帳戶創建向導" @@ -1026,9 +1192,6 @@ msgstr "從撥出電話中查詢" #~ msgid "Default account" #~ msgstr "默認帳戶" -#~ msgid "Transfer to : " -#~ msgstr "轉給: " - #~ msgid "SFLphone KDE Client" #~ msgstr "SFLphone KDE客戶端" @@ -1041,21 +1204,12 @@ msgstr "從撥出電話中查詢" #~ msgid "Main screen" #~ msgstr "主屏幕" -#~ msgid "Call history" -#~ msgstr "呼叫記錄" - -#~ msgid "Address book" -#~ msgstr "地址簿" - #~ msgid "Configure SFLphone" #~ msgstr "配置SFLphone" #~ msgid "Display volume controls" #~ msgstr "顯示音量控制" -#~ msgid "Display dialpad" -#~ msgstr "顯示撥號鍵盤" - #~ msgid "Incoming call" #~ msgstr "來電" @@ -1080,9 +1234,6 @@ msgstr "從撥出電話中查詢" #~ msgid "Hold on" #~ msgstr "呼叫保持" -#~ msgid "Transfer" -#~ msgstr "轉接" - #~ msgid "Record" #~ msgstr "記錄" @@ -1101,29 +1252,32 @@ msgstr "從撥出電話中查詢" #~ msgid "" #~ "By default, when you place a call, sflphone will use the first account in " #~ "this list which is \"registered\". Change the order of the accounts using " -#~ "the \"Up\" and \"Down\" arrows. Enable/disable them by checking/unchecking " -#~ "them on the left of the item. Add or remove some with \"Plus\" and \"Sub\" " -#~ "buttons. Edit the selected account with the form on the right." +#~ "the \"Up\" and \"Down\" arrows. Enable/disable them by checking/" +#~ "unchecking them on the left of the item. Add or remove some with \"Plus\" " +#~ "and \"Sub\" buttons. Edit the selected account with the form on the right." #~ msgstr "" -#~ "在默認情況下,當你打電話時,sflphone會使用列表當中第一個已註冊的帳戶。使用箭頭\"上\"和\"下\"可以改變賬戶的順序。選擇賬戶名稱左邊的方框可以" -#~ "啟用帳戶,取消選擇則會禁用該賬戶。通過\"加\"\"減\"按鈕可以添加或刪除賬戶。點擊\"編輯\"按鈕可以改變賬戶的設置。" - -#~ msgid "Remove the selected account" -#~ msgstr "刪除所選賬戶" +#~ "在默認情況下,當你打電話時,sflphone會使用列表當中第一個已註冊的帳戶。使用" +#~ "箭頭\"上\"和\"下\"可以改變賬戶的順序。選擇賬戶名稱左邊的方框可以啟用帳戶," +#~ "取消選擇則會禁用該賬戶。通過\"加\"\"減\"按鈕可以添加或刪除賬戶。點擊\"編輯" +#~ "\"按鈕可以改變賬戶的設置。" #~ msgid "" -#~ "This button will remove the selected account in the list below. Be sure you " -#~ "really don't need it anymore. If you think you might use it again later, " -#~ "just uncheck it." -#~ msgstr "該按鈕會刪除列表中被選定的賬戶。請確認你的操作。如果你希望繼續使用某個賬戶,請取消對該賬戶的選擇" +#~ "This button will remove the selected account in the list below. Be sure " +#~ "you really don't need it anymore. If you think you might use it again " +#~ "later, just uncheck it." +#~ msgstr "" +#~ "該按鈕會刪除列表中被選定的賬戶。請確認你的操作。如果你希望繼續使用某個賬" +#~ "戶,請取消對該賬戶的選擇" #~ msgid "Remove" #~ msgstr "刪除" #~ msgid "" -#~ "This button enables you to initialize a new account. You will then be able " -#~ "to edit it using the form on the right." -#~ msgstr "通過該按鈕可以創建一個新賬戶。添加該賬戶之後你還可以通過編輯按鈕來修改設置。" +#~ "This button enables you to initialize a new account. You will then be " +#~ "able to edit it using the form on the right." +#~ msgstr "" +#~ "通過該按鈕可以創建一個新賬戶。添加該賬戶之後你還可以通過編輯按鈕來修改設" +#~ "置。" #~ msgid "Add" #~ msgstr "添加" @@ -1136,8 +1290,9 @@ msgstr "從撥出電話中查詢" #~ "this list which is \"registered\". Change the order of the accounts using " #~ "the \"Up\" and \"Down\" arrows." #~ msgstr "" -#~ "在默認情況下,當你打電話時,sflphone會使用列表當中第一個已註冊的帳戶。使用箭頭\"上\"和\"下\"可以改變賬戶的順序。選擇賬戶名稱左邊的方框可以" -#~ "啟用帳戶,取消選擇則會禁用該賬戶。通過\"加\"\"減\"按鈕可以添加或刪除賬戶。" +#~ "在默認情況下,當你打電話時,sflphone會使用列表當中第一個已註冊的帳戶。使用" +#~ "箭頭\"上\"和\"下\"可以改變賬戶的順序。選擇賬戶名稱左邊的方框可以啟用帳戶," +#~ "取消選擇則會禁用該賬戶。通過\"加\"\"減\"按鈕可以添加或刪除賬戶。" #~ msgid "Down" #~ msgstr "下" @@ -1220,9 +1375,6 @@ msgstr "從撥出電話中查詢" #~ msgid "On start" #~ msgstr "正在啟動" -#~ msgid "Clear history" -#~ msgstr "清空曆史記錄" - #~ msgid "Trigger on specific SIP header" #~ msgstr "激活指定的SIP頭" @@ -1238,33 +1390,9 @@ msgstr "從撥出電話中查詢" #~ msgid "Attention:number of results exceeds max displayed." #~ msgstr "注意:結果超過可顯示的最大值" -#~ msgid "_Help" -#~ msgstr "幫助(H)" - #~ msgid "_Account creation wizard" #~ msgstr "帳戶創建向導(A)" -#~ msgid "_Call" -#~ msgstr "電話" - -#~ msgid "Clear _history" -#~ msgstr "清空曆史記錄(C)" - -#~ msgid "_Accounts" -#~ msgstr "帳戶(A)" - -#~ msgid "_Edit" -#~ msgstr "編輯(E)" - -#~ msgid "_Volume controls" -#~ msgstr "音量控制(V)" - -#~ msgid "_View" -#~ msgstr "查看(V)" - -#~ msgid "History" -#~ msgstr "歷史" - #~ msgid "_Enable this account" #~ msgstr "啟用該賬戶(E)" @@ -1412,9 +1540,6 @@ msgstr "從撥出電話中查詢" #~ msgid "\"Voicemail\" <%s>" #~ msgstr "\"語音郵件\" <%s>" -#~ msgid "Off Hold" -#~ msgstr "恢复通話" - #~ msgid "Record a call" #~ msgstr "記錄通話" @@ -1570,12 +1695,12 @@ msgstr "從撥出電話中查詢" #~ msgctxt "NAME OF TRANSLATORS" #~ msgid "Your names" #~ msgstr "" -#~ "Yun Liu, ,Launchpad Contributions:,Yun Liu, ,Launchpad " -#~ "Contributions:,Emmanuel Milou,Yun Liu, ,Launchpad Contributions:,Emmanuel " -#~ "Milou,Yun Liu, ,Launchpad Contributions:,Emmanuel Milou,Yun Liu" +#~ "Yun Liu, ,Launchpad Contributions:,Yun Liu, ,Launchpad Contributions:," +#~ "Emmanuel Milou,Yun Liu, ,Launchpad Contributions:,Emmanuel Milou,Yun " +#~ "Liu, ,Launchpad Contributions:,Emmanuel Milou,Yun Liu" #~ msgctxt "EMAIL OF TRANSLATORS" #~ msgid "Your emails" #~ msgstr "" -#~ "yunliu2000@gmail.com,,,,,,emmanuel.milou@savoirfairelinux.com,,,,emmanuel.mil" -#~ "ou@savoirfairelinux.com,,,,emmanuel.milou@savoirfairelinux.com," +#~ "yunliu2000@gmail.com,,,,,,emmanuel.milou@savoirfairelinux.com,,,,emmanuel." +#~ "milou@savoirfairelinux.com,,,,emmanuel.milou@savoirfairelinux.com," diff --git a/lang/zh_TW/zh_TW.po b/lang/zh_TW/zh_TW.po index e4a57b9b81..f7992fe2b8 100644 --- a/lang/zh_TW/zh_TW.po +++ b/lang/zh_TW/zh_TW.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: sflphone\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-10-14 11:18-0400\n" +"POT-Creation-Date: 2009-12-03 10:22-0500\n" "PO-Revision-Date: 2009-10-26 20:46+0000\n" "Last-Translator: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com>\n" "Language-Team: Traditional Chinese <zh_TW@li.org>\n" @@ -60,46 +60,32 @@ msgstr "" msgid "Invalid" msgstr "" -#: ../sflphone-client-gnome/src/actions.c:54 -#: ../sflphone-client-gnome/src/sflnotify.c:94 -#, c-format -msgid "%d voice mail" -msgid_plural "%d voice mails" -msgstr[0] "" -msgstr[1] "" - -#: ../sflphone-client-gnome/src/actions.c:83 -#: ../sflphone-client-gnome/src/actions.c:919 -#: ../sflphone-client-gnome/src/actions.c:926 +#: ../sflphone-client-gnome/src/actions.c:98 msgid "Using account" msgstr "" -#: ../sflphone-client-gnome/src/actions.c:89 +#: ../sflphone-client-gnome/src/actions.c:104 msgid "No registered accounts" msgstr "" -#: ../sflphone-client-gnome/src/actions.c:268 +#: ../sflphone-client-gnome/src/actions.c:285 msgid "" "Unable to connect to the SFLphone server.\n" "Make sure the daemon is running." msgstr "" -#: ../sflphone-client-gnome/src/actions.c:913 -#, c-format -msgid "IP call - %s" -msgstr "" - -#: ../sflphone-client-gnome/src/actions.c:922 -msgid "Codec" +#: ../sflphone-client-gnome/src/actions.c:589 +#: ../sflphone-client-gnome/src/actions.c:911 +msgid "Direct SIP call" msgstr "" -#: ../sflphone-client-gnome/src/actions.c:1119 +#: ../sflphone-client-gnome/src/actions.c:1103 #, c-format msgid "" "<b>Error: No audio codecs found.\n" "\n" -"</b> SFL audio codecs have to be placed in <i>%s</i> or in the " -"<b>.sflphone</b> directory in your home( <i>%s</i> )" +"</b> SFL audio codecs have to be placed in <i>%s</i> or in the <b>.sflphone</" +"b> directory in your home( <i>%s</i> )" msgstr "" #: ../sflphone-client-gnome/src/errors.c:29 @@ -135,53 +121,53 @@ msgstr "" msgid "Do you still want to quit?" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:299 +#: ../sflphone-client-gnome/src/mainwindow.c:298 msgid "SFLphone Error" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:391 +#: ../sflphone-client-gnome/src/mainwindow.c:392 #, c-format msgid "ZRTP is not supported by peer %s\n" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:392 +#: ../sflphone-client-gnome/src/mainwindow.c:393 msgid "Secure Communication Unavailable" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:393 -#: ../sflphone-client-gnome/src/mainwindow.c:415 +#: ../sflphone-client-gnome/src/mainwindow.c:394 +#: ../sflphone-client-gnome/src/mainwindow.c:416 msgid "Continue" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:394 -#: ../sflphone-client-gnome/src/mainwindow.c:416 -#: ../sflphone-client-gnome/src/mainwindow.c:430 +#: ../sflphone-client-gnome/src/mainwindow.c:395 +#: ../sflphone-client-gnome/src/mainwindow.c:417 +#: ../sflphone-client-gnome/src/mainwindow.c:431 msgid "Stop Call" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:413 +#: ../sflphone-client-gnome/src/mainwindow.c:414 #, c-format msgid "" "A %s error forced the call with %s to fall under unencrypted mode.\n" "Exact reason: %s\n" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:414 +#: ../sflphone-client-gnome/src/mainwindow.c:415 msgid "ZRTP negotiation failed" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:427 +#: ../sflphone-client-gnome/src/mainwindow.c:428 #, c-format msgid "" "%s wants to stop using secure communication. Confirm will resume " "conversation without SRTP.\n" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:428 +#: ../sflphone-client-gnome/src/mainwindow.c:429 msgid "Confirm Go Clear" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:429 +#: ../sflphone-client-gnome/src/mainwindow.c:430 msgid "Confirm" msgstr "" @@ -196,6 +182,13 @@ msgstr "" msgid "<i>From</i> %s" msgstr "" +#: ../sflphone-client-gnome/src/sflnotify.c:94 +#, c-format +msgid "%d voice mail" +msgid_plural "%d voice mails" +msgstr[0] "" +msgstr[1] "" + #: ../sflphone-client-gnome/src/sflnotify.c:111 #, c-format msgid "Calling with %s account <i>%s</i>" @@ -243,15 +236,15 @@ msgstr "" msgid "Mic volume" msgstr "" -#: ../sflphone-client-gnome/src/statusicon.c:91 +#: ../sflphone-client-gnome/src/statusicon.c:96 msgid "_Show main window" msgstr "" -#: ../sflphone-client-gnome/src/statusicon.c:126 +#: ../sflphone-client-gnome/src/statusicon.c:131 msgid "SFLphone" msgstr "" -#: ../sflphone-client-gnome/src/statusicon.c:127 +#: ../sflphone-client-gnome/src/statusicon.c:132 #, c-format msgid "%i account configured" msgid_plural "%i accounts configured" @@ -259,202 +252,399 @@ msgstr[0] "" msgstr[1] "" #: ../sflphone-client-gnome/src/toolbar.c:38 -#: ../sflphone-client-gnome/src/uimanager.c:750 +#: ../sflphone-client-gnome/src/uimanager.c:693 +#: ../sflphone-client-gnome/src/uimanager.c:727 msgid "Voicemail" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:403 +#: ../sflphone-client-gnome/src/uimanager.c:117 +msgid "No address book selected" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:137 +#: ../sflphone-client-gnome/src/uimanager.c:756 +msgid "Address book" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:279 +#, c-format +msgid "Voicemail (%i)" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:342 msgid "SFLphone is a VoIP client compatible with SIP and IAX2 protocols." msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:406 +#: ../sflphone-client-gnome/src/uimanager.c:345 msgid "About SFLphone" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:1028 +#: ../sflphone-client-gnome/src/uimanager.c:719 +msgid "Call" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:720 +#: ../sflphone-client-gnome/src/uimanager.c:1184 +msgid "_New call" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:720 +msgid "Place a new call" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:721 +#: ../sflphone-client-gnome/src/uimanager.c:979 msgid "_Pick up" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:1040 -#: ../sflphone-client-gnome/src/uimanager.c:1081 +#: ../sflphone-client-gnome/src/uimanager.c:721 +msgid "Answer the call" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:722 +#: ../sflphone-client-gnome/src/uimanager.c:991 +#: ../sflphone-client-gnome/src/uimanager.c:1032 msgid "_Hang up" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:1052 -#: ../sflphone-client-gnome/src/uimanager.c:1093 -msgid "On _Hold" +#: ../sflphone-client-gnome/src/uimanager.c:722 +msgid "Finish the call" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:723 +msgid "O_n hold" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:723 +msgid "Place the call on hold" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:724 +msgid "O_ff hold" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:1064 +#: ../sflphone-client-gnome/src/uimanager.c:724 +msgid "Place the call off hold" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:725 +#: ../sflphone-client-gnome/src/uimanager.c:1015 msgid "_Record" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:1154 -msgid "_Call back" +#: ../sflphone-client-gnome/src/uimanager.c:725 +msgid "Record the current conversation" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:1226 -msgid "_New call" +#: ../sflphone-client-gnome/src/uimanager.c:726 +msgid "Configuration _Assistant" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:726 +msgid "Run the configuration assistant" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:727 +msgid "Call your voicemail" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:728 +msgid "_Close" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:728 +msgid "Minimize to system tray" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:729 +msgid "_Quit" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:729 +msgid "Quit the program" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:732 +msgid "_Edit" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:733 +msgid "_Copy" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:733 +msgid "Copy the selection" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:734 +msgid "_Paste" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:734 +msgid "Paste the clipboard" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:735 +msgid "Clear _history" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:735 +msgid "Clear the call history" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:736 +msgid "_Accounts" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:736 +msgid "Edit your accounts" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:737 +msgid "_Preferences" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:737 +msgid "Change your preferences" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:740 +msgid "_View" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:743 +msgid "_Help" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:744 +msgid "Contents" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:744 +msgid "Open the manual" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:745 +msgid "About this application" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:751 +msgid "_Transfer" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:751 +msgid "Transfer the call" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:752 +msgid "_Show toolbar" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:752 +msgid "Show the toolbar" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:753 +msgid "_Dialpad" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:753 +msgid "Show the dialpad" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:754 +msgid "_Volume controls" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:754 +msgid "Show the volume controls" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:1300 +#: ../sflphone-client-gnome/src/uimanager.c:755 +msgid "_History" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:755 +msgid "Calls history" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:756 +msgid "_Address book" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:1003 +#: ../sflphone-client-gnome/src/uimanager.c:1044 +msgid "On _Hold" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:1107 +msgid "_Call back" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:1258 msgid "Edit phone number" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:1311 +#: ../sflphone-client-gnome/src/uimanager.c:1269 msgid "Edit the phone number before making a call" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:164 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:180 msgid "Account Parameters" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:173 -#: ../sflphone-client-gnome/src/config/assistant.c:294 -#: ../sflphone-client-gnome/src/config/assistant.c:402 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:189 +#: ../sflphone-client-gnome/src/config/assistant.c:314 +#: ../sflphone-client-gnome/src/config/assistant.c:427 msgid "_Alias" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:181 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:197 msgid "_Protocol" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:199 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:215 msgid "Unknown" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:209 -#: ../sflphone-client-gnome/src/config/assistant.c:302 -#: ../sflphone-client-gnome/src/config/assistant.c:410 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:225 +#: ../sflphone-client-gnome/src/config/assistant.c:322 +#: ../sflphone-client-gnome/src/config/assistant.c:435 msgid "_Host name" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:217 -#: ../sflphone-client-gnome/src/config/assistant.c:310 -#: ../sflphone-client-gnome/src/config/assistant.c:418 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:233 +#: ../sflphone-client-gnome/src/config/assistant.c:330 +#: ../sflphone-client-gnome/src/config/assistant.c:443 msgid "_User name" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:234 -#: ../sflphone-client-gnome/src/config/assistant.c:326 -#: ../sflphone-client-gnome/src/config/assistant.c:433 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:250 +#: ../sflphone-client-gnome/src/config/assistant.c:346 +#: ../sflphone-client-gnome/src/config/assistant.c:458 msgid "_Password" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:254 -#: ../sflphone-client-gnome/src/config/assistant.c:344 -#: ../sflphone-client-gnome/src/config/assistant.c:449 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:270 +#: ../sflphone-client-gnome/src/config/assistant.c:363 +#: ../sflphone-client-gnome/src/config/assistant.c:473 +msgid "Show password" +msgstr "" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:274 +#: ../sflphone-client-gnome/src/config/assistant.c:368 +#: ../sflphone-client-gnome/src/config/assistant.c:478 msgid "_Voicemail number" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:340 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:361 msgid "Authentication" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:341 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:362 msgid "Secret" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:466 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:605 msgid "Credential" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:501 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:640 msgid "Authentication name" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:512 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:651 msgid "Password" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:535 -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:909 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:201 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:674 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1056 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:321 msgid "Security" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:547 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:213 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:687 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:333 msgid "Use TLS transport (sips)" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:552 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:218 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:693 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:338 msgid "SRTP key exchange" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:558 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:224 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:699 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:344 msgid "Disabled" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:674 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:795 msgid "Registration" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:679 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:800 msgid "Registration expire" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:687 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:809 msgid "_Comply with RFC 3263" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:693 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:463 -msgid "Network" +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:816 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:234 +msgid "Network Interface" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:707 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:830 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:249 msgid "Local address" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:744 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:880 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:301 msgid "Local port" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:752 -msgid "Set published address and port:" +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:893 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:928 +msgid "Published address" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:756 -msgid "Using STUN " +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:899 +msgid "Using STUN" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:761 -msgid "Same as local parameters" +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:906 +msgid "STUN server URL" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:764 -msgid "Manually" +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:914 +msgid "Same as local parameters" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:769 -msgid "Published address" +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:917 +msgid "Set published address and port:" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:777 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:936 msgid "Published port" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:785 -msgid "STUN server URL" -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:880 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1027 msgid "Account settings" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:899 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1046 msgid "Basic" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:904 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1051 msgid "Advanced" msgstr "" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:169 -msgid "Server returned \"" +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:164 +#, c-format +msgid "Server returned \"%s\" (%d)" msgstr "" #: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:389 @@ -473,32 +663,18 @@ msgstr "" msgid "Configured Accounts" msgstr "" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:505 -msgid "There " -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:506 -msgid "is " -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:506 -msgid "are " -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:508 -msgid " active account" -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:509 -msgid "s" -msgstr "" +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:501 +#, c-format +msgid "There is %d active account" +msgid_plural "There are %d active accounts" +msgstr[0] "" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:514 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:507 msgid "You have no active account" msgstr "" #: ../sflphone-client-gnome/src/config/addressbook-config.c:306 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:443 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:556 msgid "General" msgstr "" @@ -543,225 +719,220 @@ msgid "Select which Evolution address books to use" msgstr "" #: ../sflphone-client-gnome/src/config/addressbook-config.c:404 -#: ../sflphone-client-gnome/src/config/audioconf.c:578 +#: ../sflphone-client-gnome/src/config/audioconf.c:577 msgid "Name" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:69 +#: ../sflphone-client-gnome/src/config/assistant.c:75 #, c-format msgid "This assistant is now finished." msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:71 +#: ../sflphone-client-gnome/src/config/assistant.c:77 msgid "" "You can at any time check your registration state or modify your accounts " "parameters in the Options/Accounts window." msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:74 +#: ../sflphone-client-gnome/src/config/assistant.c:80 msgid "Alias" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:78 +#: ../sflphone-client-gnome/src/config/assistant.c:84 msgid "Server" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:82 +#: ../sflphone-client-gnome/src/config/assistant.c:88 msgid "Username" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:86 +#: ../sflphone-client-gnome/src/config/assistant.c:92 msgid "Security: " msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:88 +#: ../sflphone-client-gnome/src/config/assistant.c:94 msgid "SRTP/ZRTP draft-zimmermann" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:90 -#: ../sflphone-client-gnome/src/config/assistant.c:182 +#: ../sflphone-client-gnome/src/config/assistant.c:96 msgid "None" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:210 +#: ../sflphone-client-gnome/src/config/assistant.c:229 msgid "SFLphone account creation wizard" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:236 +#: ../sflphone-client-gnome/src/config/assistant.c:255 msgid "Welcome to the Account creation wizard of SFLphone!" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:237 +#: ../sflphone-client-gnome/src/config/assistant.c:256 msgid "This installation wizard will help you configure an account." msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:251 +#: ../sflphone-client-gnome/src/config/assistant.c:270 msgid "VoIP Protocols" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:251 +#: ../sflphone-client-gnome/src/config/assistant.c:270 msgid "Select an account type" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:253 +#: ../sflphone-client-gnome/src/config/assistant.c:272 msgid "SIP (Session Initiation Protocol)" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:255 +#: ../sflphone-client-gnome/src/config/assistant.c:274 msgid "IAX2 (InterAsterix Exchange)" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:269 +#: ../sflphone-client-gnome/src/config/assistant.c:288 msgid "Account" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:269 +#: ../sflphone-client-gnome/src/config/assistant.c:288 msgid "Please select one of the following options" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:271 +#: ../sflphone-client-gnome/src/config/assistant.c:290 msgid "Create a free SIP/IAX2 account on sflphone.org" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:273 +#: ../sflphone-client-gnome/src/config/assistant.c:292 msgid "Register an existing SIP or IAX2 account" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:286 +#: ../sflphone-client-gnome/src/config/assistant.c:306 msgid "SIP account settings" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:286 -#: ../sflphone-client-gnome/src/config/assistant.c:394 +#: ../sflphone-client-gnome/src/config/assistant.c:306 +#: ../sflphone-client-gnome/src/config/assistant.c:419 msgid "Please fill the following information" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:352 -#: ../sflphone-client-gnome/src/config/assistant.c:381 +#: ../sflphone-client-gnome/src/config/assistant.c:376 +#: ../sflphone-client-gnome/src/config/assistant.c:405 msgid "Secure communications with _ZRTP" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:365 +#: ../sflphone-client-gnome/src/config/assistant.c:389 msgid "Optional email address" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:365 +#: ../sflphone-client-gnome/src/config/assistant.c:389 msgid "This email address will be used to send your voicemail messages." msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:373 +#: ../sflphone-client-gnome/src/config/assistant.c:397 msgid "_Email address" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:394 +#: ../sflphone-client-gnome/src/config/assistant.c:419 msgid "IAX2 account settings" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:467 +#: ../sflphone-client-gnome/src/config/assistant.c:496 msgid "Network Address Translation (NAT)" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:467 +#: ../sflphone-client-gnome/src/config/assistant.c:496 msgid "You should probably enable this if you are behind a firewall." msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:476 +#: ../sflphone-client-gnome/src/config/assistant.c:505 msgid "E_nable STUN" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:483 +#: ../sflphone-client-gnome/src/config/assistant.c:512 msgid "_STUN server" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:497 +#: ../sflphone-client-gnome/src/config/assistant.c:526 msgid "Account Registration" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:497 +#: ../sflphone-client-gnome/src/config/assistant.c:526 msgid "Congratulations!" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:583 +#: ../sflphone-client-gnome/src/config/audioconf.c:582 msgid "Frequency" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:588 +#: ../sflphone-client-gnome/src/config/audioconf.c:587 msgid "Bitrate" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:593 +#: ../sflphone-client-gnome/src/config/audioconf.c:592 msgid "Bandwidth" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:673 +#: ../sflphone-client-gnome/src/config/audioconf.c:670 msgid "ALSA plugin" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:695 +#: ../sflphone-client-gnome/src/config/audioconf.c:692 msgid "Output" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:717 +#: ../sflphone-client-gnome/src/config/audioconf.c:714 msgid "Input" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:752 +#: ../sflphone-client-gnome/src/config/audioconf.c:749 msgid "_Voice Activity Detection" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:762 +#: ../sflphone-client-gnome/src/config/audioconf.c:759 msgid "_Noise Reduction (Narrow-Band Companding)" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:798 +#: ../sflphone-client-gnome/src/config/audioconf.c:800 msgid "Sound Manager" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:807 +#: ../sflphone-client-gnome/src/config/audioconf.c:809 msgid "_Pulseaudio" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:811 +#: ../sflphone-client-gnome/src/config/audioconf.c:813 msgid "_ALSA" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:816 -msgid "_Mute other applications during a call" -msgstr "" - -#: ../sflphone-client-gnome/src/config/audioconf.c:823 +#: ../sflphone-client-gnome/src/config/audioconf.c:819 msgid "ALSA settings" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:840 +#: ../sflphone-client-gnome/src/config/audioconf.c:836 msgid "Codecs" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:869 +#: ../sflphone-client-gnome/src/config/audioconf.c:865 msgid "Recordings" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:873 +#: ../sflphone-client-gnome/src/config/audioconf.c:869 msgid "Destination folder" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:877 +#: ../sflphone-client-gnome/src/config/audioconf.c:873 msgid "Select a folder" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:883 +#: ../sflphone-client-gnome/src/config/audioconf.c:879 msgid "Ringtones" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:889 +#: ../sflphone-client-gnome/src/config/audioconf.c:885 msgid "_Enable ringtones" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:895 +#: ../sflphone-client-gnome/src/config/audioconf.c:891 msgid "Choose a ringtone" msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:901 +#: ../sflphone-client-gnome/src/config/audioconf.c:897 msgid "Audio Files" msgstr "" @@ -798,86 +969,66 @@ msgstr "" msgid "_Prefix dialed numbers with" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:195 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:225 msgid "" "This profile is used when you want to reach a remote peer simply by typing a " "sip URI such as <b>sip:remotepeer</b>. The settings you define here will " "also be used if no account can be matched to an incoming or outgoing call." msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:274 -msgid "SIP Port" -msgstr "" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:281 -msgid "UDP Transport" -msgstr "" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:319 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:440 msgid "Desktop Notifications" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:323 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:444 msgid "_Enable notifications" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:329 -msgid "Enable voicemail _notifications" -msgstr "" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:341 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:450 msgid "System Tray Icon" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:344 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:453 msgid "_Popup main window on incoming call" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:349 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:457 msgid "Ne_ver popup main window" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:353 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:463 msgid "Hide SFLphone window on _startup" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:359 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:469 msgid "Calls History" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:362 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:472 msgid "_Keep my history for at least" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:373 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:483 msgid "days" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:377 -msgid "Configuration File" -msgstr "" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:379 -msgid "Store SIP credentials as MD5 hash" -msgstr "" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:423 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:536 msgid "Preferences" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:448 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:561 msgid "Audio" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:453 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:566 msgid "Address Book" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:458 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:571 msgid "Hooks" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:468 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:581 msgid "Direct IP calls" msgstr "" @@ -885,11 +1036,11 @@ msgstr "" msgid "Advanced options for TLS" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:55 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:56 msgid "TLS transport" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:59 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:60 msgid "" "TLS transport can be used along with UDP for those calls that would\n" "require secure sip transactions (aka SIPS). You can configure a different\n" @@ -898,55 +1049,55 @@ msgid "" "port, different one from each other\n" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:100 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:103 msgid "Certificate of Authority list" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:104 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:107 msgid "Choose a CA list file (optional)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:115 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:131 msgid "Public endpoint certificate file" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:119 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:135 msgid "Choose a public endpoint certificate (optional)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:134 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:159 msgid "Choose a private key file (optional)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:145 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:181 msgid "Password for the private key" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:168 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:204 msgid "TLS protocol method" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:202 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:238 msgid "TLS cipher list" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:211 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:247 msgid "Server name instance for outgoing TLS connection" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:219 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:255 msgid "Negotiation timeout (sec:msec)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:236 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:272 msgid "Verify incoming certificates, as a server" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:242 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:278 msgid "Verify certificates from answer, as a client" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:248 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:284 msgid "Require certificate for incoming tls connections" msgstr "" @@ -954,54 +1105,54 @@ msgstr "" msgid "ZRTP Options" msgstr "" -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:68 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:69 msgid "Send Hello Hash in S_DP" msgstr "" -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:74 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:75 msgid "Ask User to Confirm SAS" msgstr "" -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:80 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:81 msgid "_Warn if ZRTP not supported" msgstr "" -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:86 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:87 msgid "Display SAS once for hold events" msgstr "" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:56 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:58 msgid "Search all" msgstr "" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:57 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:70 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:82 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:94 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:59 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:72 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:84 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:96 msgid "Click here to change the search type" msgstr "" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:69 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:71 msgid "Search by missed call" msgstr "" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:81 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:83 msgid "Search by incoming call" msgstr "" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:93 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:95 msgid "Search by outgoing call" msgstr "" #~ msgctxt "NAME OF TRANSLATORS" #~ msgid "Your names" #~ msgstr "" -#~ ",Launchpad Contributions:, ,Launchpad Contributions:,Emmanuel Milou, " -#~ ",Launchpad Contributions:,Emmanuel Milou, ,Launchpad Contributions:,Emmanuel " -#~ "Milou" +#~ ",Launchpad Contributions:, ,Launchpad Contributions:,Emmanuel Milou, ," +#~ "Launchpad Contributions:,Emmanuel Milou, ,Launchpad Contributions:," +#~ "Emmanuel Milou" #~ msgctxt "EMAIL OF TRANSLATORS" #~ msgid "Your emails" #~ msgstr "" -#~ ",,,,emmanuel.milou@savoirfairelinux.com,,,emmanuel.milou@savoirfairelinux.com" -#~ ",,,emmanuel.milou@savoirfairelinux.com" +#~ ",,,,emmanuel.milou@savoirfairelinux.com,,,emmanuel.milou@savoirfairelinux." +#~ "com,,,emmanuel.milou@savoirfairelinux.com" diff --git a/sflphone-client-gnome/po/Makefile.am b/sflphone-client-gnome/po/Makefile.am index 04a94d39ff..6d2d320a9b 100644 --- a/sflphone-client-gnome/po/Makefile.am +++ b/sflphone-client-gnome/po/Makefile.am @@ -11,7 +11,8 @@ POFILES=\ zh_HK/zh_HK.po \ ru/ru.po \ it/it.po \ - pt_BR/pt_BR.po + pt_BR/pt_BR.po \ + da/da.po MOFILES=\ fr/fr.mo \ @@ -21,7 +22,8 @@ MOFILES=\ zh_HK/zh_HK.mo \ ru/ru.mo \ it/it.mo \ - pt_BR/pt_BR.mo + pt_BR/pt_BR.mo \ + da/da.mo MSGFMT=msgfmt diff --git a/sflphone-client-gnome/po/de/de.po b/sflphone-client-gnome/po/de/de.po index 7459095a39..ca1afd15a4 100644 --- a/sflphone-client-gnome/po/de/de.po +++ b/sflphone-client-gnome/po/de/de.po @@ -7,15 +7,15 @@ msgid "" msgstr "" "Project-Id-Version: sflphone\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-10-14 11:18-0400\n" -"PO-Revision-Date: 2009-10-15 00:00+0000\n" +"POT-Creation-Date: 2009-12-03 10:22-0500\n" +"PO-Revision-Date: 2009-10-26 20:46+0000\n" "Last-Translator: Maxime Chambreuil <maxime.chambreuil@gmail.com>\n" "Language-Team: SavoirFaire Linux Inc <sflphoneteam@savoirfairelinux.com>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Launchpad-Export-Date: 2009-10-26 15:48+0000\n" +"X-Launchpad-Export-Date: 2009-12-03 15:32+0000\n" "X-Generator: Launchpad (build Unknown)\n" #: ../sflphone-client-gnome/src/accountlist.c:175 @@ -60,25 +60,15 @@ msgstr "Ungültiger Stun server" msgid "Invalid" msgstr "Ungültig" -#: ../sflphone-client-gnome/src/actions.c:54 -#: ../sflphone-client-gnome/src/sflnotify.c:94 -#, c-format -msgid "%d voice mail" -msgid_plural "%d voice mails" -msgstr[0] "%d Voice Nachricht" -msgstr[1] "%d Voice Nachricht" - -#: ../sflphone-client-gnome/src/actions.c:83 -#: ../sflphone-client-gnome/src/actions.c:919 -#: ../sflphone-client-gnome/src/actions.c:926 +#: ../sflphone-client-gnome/src/actions.c:98 msgid "Using account" msgstr "Mit Konto" -#: ../sflphone-client-gnome/src/actions.c:89 +#: ../sflphone-client-gnome/src/actions.c:104 msgid "No registered accounts" msgstr "Kein registriertes Konto" -#: ../sflphone-client-gnome/src/actions.c:268 +#: ../sflphone-client-gnome/src/actions.c:285 msgid "" "Unable to connect to the SFLphone server.\n" "Make sure the daemon is running." @@ -86,22 +76,18 @@ msgstr "" "SFLphone Server kann nicht verbunden werden. Stellen Sie sicher, dass der " "Dämon läuft." -#: ../sflphone-client-gnome/src/actions.c:913 -#, c-format -msgid "IP call - %s" -msgstr "IP Anruf - %s" - -#: ../sflphone-client-gnome/src/actions.c:922 -msgid "Codec" -msgstr "Codec" +#: ../sflphone-client-gnome/src/actions.c:589 +#: ../sflphone-client-gnome/src/actions.c:911 +msgid "Direct SIP call" +msgstr "" -#: ../sflphone-client-gnome/src/actions.c:1119 +#: ../sflphone-client-gnome/src/actions.c:1103 #, c-format msgid "" "<b>Error: No audio codecs found.\n" "\n" -"</b> SFL audio codecs have to be placed in <i>%s</i> or in the " -"<b>.sflphone</b> directory in your home( <i>%s</i> )" +"</b> SFL audio codecs have to be placed in <i>%s</i> or in the <b>.sflphone</" +"b> directory in your home( <i>%s</i> )" msgstr "" "<b>Fehler: Kein Audio-Codec gefunden.\n" "\n" @@ -150,55 +136,55 @@ msgstr "Laufende Anrufe." msgid "Do you still want to quit?" msgstr "Bitte bestätigen, dass Sie die Anwendung beenden möchten" -#: ../sflphone-client-gnome/src/mainwindow.c:299 +#: ../sflphone-client-gnome/src/mainwindow.c:298 msgid "SFLphone Error" msgstr "SFLphone Fehler" -#: ../sflphone-client-gnome/src/mainwindow.c:391 +#: ../sflphone-client-gnome/src/mainwindow.c:392 #, c-format msgid "ZRTP is not supported by peer %s\n" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:392 -msgid "Secure Communication Unavailable" -msgstr "" - #: ../sflphone-client-gnome/src/mainwindow.c:393 -#: ../sflphone-client-gnome/src/mainwindow.c:415 -msgid "Continue" -msgstr "" +msgid "Secure Communication Unavailable" +msgstr "Sichere Verbindung nicht verfügbar" #: ../sflphone-client-gnome/src/mainwindow.c:394 #: ../sflphone-client-gnome/src/mainwindow.c:416 -#: ../sflphone-client-gnome/src/mainwindow.c:430 +msgid "Continue" +msgstr "Weiter" + +#: ../sflphone-client-gnome/src/mainwindow.c:395 +#: ../sflphone-client-gnome/src/mainwindow.c:417 +#: ../sflphone-client-gnome/src/mainwindow.c:431 msgid "Stop Call" -msgstr "" +msgstr "Anruf beenden" -#: ../sflphone-client-gnome/src/mainwindow.c:413 +#: ../sflphone-client-gnome/src/mainwindow.c:414 #, c-format msgid "" "A %s error forced the call with %s to fall under unencrypted mode.\n" "Exact reason: %s\n" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:414 +#: ../sflphone-client-gnome/src/mainwindow.c:415 msgid "ZRTP negotiation failed" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:427 +#: ../sflphone-client-gnome/src/mainwindow.c:428 #, c-format msgid "" "%s wants to stop using secure communication. Confirm will resume " "conversation without SRTP.\n" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:428 +#: ../sflphone-client-gnome/src/mainwindow.c:429 msgid "Confirm Go Clear" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:429 +#: ../sflphone-client-gnome/src/mainwindow.c:430 msgid "Confirm" -msgstr "" +msgstr "Bestätigen" #: ../sflphone-client-gnome/src/sflnotify.c:71 #: ../sflphone-client-gnome/src/sflnotify.c:91 @@ -211,6 +197,13 @@ msgstr "Konto %s : %s" msgid "<i>From</i> %s" msgstr "<i>Von</i> %s" +#: ../sflphone-client-gnome/src/sflnotify.c:94 +#, c-format +msgid "%d voice mail" +msgid_plural "%d voice mails" +msgstr[0] "%d Voice Nachricht" +msgstr[1] "%d Voice Nachricht" + #: ../sflphone-client-gnome/src/sflnotify.c:111 #, c-format msgid "Calling with %s account <i>%s</i>" @@ -258,15 +251,15 @@ msgstr "Lautsprecher Lautstärke" msgid "Mic volume" msgstr "Mikro Lautstärke" -#: ../sflphone-client-gnome/src/statusicon.c:91 +#: ../sflphone-client-gnome/src/statusicon.c:96 msgid "_Show main window" msgstr "_Hauptfenster anzeigen" -#: ../sflphone-client-gnome/src/statusicon.c:126 +#: ../sflphone-client-gnome/src/statusicon.c:131 msgid "SFLphone" msgstr "SFLphone" -#: ../sflphone-client-gnome/src/statusicon.c:127 +#: ../sflphone-client-gnome/src/statusicon.c:132 #, c-format msgid "%i account configured" msgid_plural "%i accounts configured" @@ -274,203 +267,398 @@ msgstr[0] "%i Konto konfiguriert" msgstr[1] "%i Konten konfiguriert" #: ../sflphone-client-gnome/src/toolbar.c:38 -#: ../sflphone-client-gnome/src/uimanager.c:750 +#: ../sflphone-client-gnome/src/uimanager.c:693 +#: ../sflphone-client-gnome/src/uimanager.c:727 msgid "Voicemail" msgstr "Voicemail" -#: ../sflphone-client-gnome/src/uimanager.c:403 +#: ../sflphone-client-gnome/src/uimanager.c:117 +msgid "No address book selected" +msgstr "Adressbuch" + +#: ../sflphone-client-gnome/src/uimanager.c:137 +#: ../sflphone-client-gnome/src/uimanager.c:756 +msgid "Address book" +msgstr "Adressbuch" + +#: ../sflphone-client-gnome/src/uimanager.c:279 +msgid "Voicemail (%i)" +msgstr "Voicemail (%i)" + +#: ../sflphone-client-gnome/src/uimanager.c:342 msgid "SFLphone is a VoIP client compatible with SIP and IAX2 protocols." -msgstr "" -"SFLphone ist ein VoIP Client (kompatibel mit SIP und IAX2 Protokolle)" +msgstr "SFLphone ist ein VoIP Client (kompatibel mit SIP und IAX2 Protokolle)" -#: ../sflphone-client-gnome/src/uimanager.c:406 +#: ../sflphone-client-gnome/src/uimanager.c:345 msgid "About SFLphone" msgstr "Über SFLphone" -#: ../sflphone-client-gnome/src/uimanager.c:1028 +#: ../sflphone-client-gnome/src/uimanager.c:719 +msgid "Call" +msgstr "_Anruf" + +#: ../sflphone-client-gnome/src/uimanager.c:720 +#: ../sflphone-client-gnome/src/uimanager.c:1184 +msgid "_New call" +msgstr "_Neuer Anruf" + +#: ../sflphone-client-gnome/src/uimanager.c:720 +msgid "Place a new call" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:721 +#: ../sflphone-client-gnome/src/uimanager.c:979 msgid "_Pick up" msgstr "_Abnehmen" -#: ../sflphone-client-gnome/src/uimanager.c:1040 -#: ../sflphone-client-gnome/src/uimanager.c:1081 +#: ../sflphone-client-gnome/src/uimanager.c:721 +msgid "Answer the call" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:722 +#: ../sflphone-client-gnome/src/uimanager.c:991 +#: ../sflphone-client-gnome/src/uimanager.c:1032 msgid "_Hang up" msgstr "A_uflegen" -#: ../sflphone-client-gnome/src/uimanager.c:1052 -#: ../sflphone-client-gnome/src/uimanager.c:1093 -msgid "On _Hold" +#: ../sflphone-client-gnome/src/uimanager.c:722 +msgid "Finish the call" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:723 +msgid "O_n hold" msgstr "in _Warteschleife" -#: ../sflphone-client-gnome/src/uimanager.c:1064 +#: ../sflphone-client-gnome/src/uimanager.c:723 +msgid "Place the call on hold" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:724 +msgid "O_ff hold" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:724 +msgid "Place the call off hold" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:725 +#: ../sflphone-client-gnome/src/uimanager.c:1015 msgid "_Record" msgstr "_Gespräch aufzeichnen" -#: ../sflphone-client-gnome/src/uimanager.c:1154 +#: ../sflphone-client-gnome/src/uimanager.c:725 +msgid "Record the current conversation" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:726 +msgid "Configuration _Assistant" +msgstr "Einrichtungsdatei" + +#: ../sflphone-client-gnome/src/uimanager.c:726 +msgid "Run the configuration assistant" +msgstr "Stun: Konfigurationsfehler" + +#: ../sflphone-client-gnome/src/uimanager.c:727 +msgid "Call your voicemail" +msgstr "%d Voice Nachricht" + +#: ../sflphone-client-gnome/src/uimanager.c:728 +msgid "_Close" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:728 +msgid "Minimize to system tray" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:729 +msgid "_Quit" +msgstr "_Editieren" + +#: ../sflphone-client-gnome/src/uimanager.c:729 +msgid "Quit the program" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:732 +msgid "_Edit" +msgstr "_Editieren" + +#: ../sflphone-client-gnome/src/uimanager.c:733 +msgid "_Copy" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:733 +msgid "Copy the selection" +msgstr "Entfernen Sie das ausgewählte Konto" + +#: ../sflphone-client-gnome/src/uimanager.c:734 +msgid "_Paste" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:734 +msgid "Paste the clipboard" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:735 +msgid "Clear _history" +msgstr "Liste der vorherigen Anrufen _leeren" + +#: ../sflphone-client-gnome/src/uimanager.c:735 +msgid "Clear the call history" +msgstr "Vorherigen Anrufen leeren" + +#: ../sflphone-client-gnome/src/uimanager.c:736 +msgid "_Accounts" +msgstr "_Konten" + +#: ../sflphone-client-gnome/src/uimanager.c:736 +msgid "Edit your accounts" +msgstr "Aktuelles Konto" + +#: ../sflphone-client-gnome/src/uimanager.c:737 +msgid "_Preferences" +msgstr "Einstellungen" + +#: ../sflphone-client-gnome/src/uimanager.c:737 +msgid "Change your preferences" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:740 +msgid "_View" +msgstr "_Anzeigen" + +#: ../sflphone-client-gnome/src/uimanager.c:743 +msgid "_Help" +msgstr "_Hilfe" + +#: ../sflphone-client-gnome/src/uimanager.c:744 +msgid "Contents" +msgstr "Weiter" + +#: ../sflphone-client-gnome/src/uimanager.c:744 +msgid "Open the manual" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:745 +msgid "About this application" +msgstr "Authentifizierung" + +#: ../sflphone-client-gnome/src/uimanager.c:751 +msgid "_Transfer" +msgstr "Weiterleiten" + +#: ../sflphone-client-gnome/src/uimanager.c:751 +msgid "Transfer the call" +msgstr "Weiterleiten zu : " + +#: ../sflphone-client-gnome/src/uimanager.c:752 +msgid "_Show toolbar" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:752 +msgid "Show the toolbar" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:753 +msgid "_Dialpad" +msgstr "_Wählscheibe" + +#: ../sflphone-client-gnome/src/uimanager.c:753 +msgid "Show the dialpad" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:754 +msgid "_Volume controls" +msgstr "Lautstärke-Regler anzeigen" + +#: ../sflphone-client-gnome/src/uimanager.c:754 +msgid "Show the volume controls" +msgstr "Lautstärke-Regler anzeigen" + +#: ../sflphone-client-gnome/src/uimanager.c:755 +msgid "_History" +msgstr "Vorherige Anrufe" + +#: ../sflphone-client-gnome/src/uimanager.c:755 +msgid "Calls history" +msgstr "Liste der vorherigen Anrufen" + +#: ../sflphone-client-gnome/src/uimanager.c:756 +msgid "_Address book" +msgstr "Adressbuch" + +#: ../sflphone-client-gnome/src/uimanager.c:1003 +#: ../sflphone-client-gnome/src/uimanager.c:1044 +msgid "On _Hold" +msgstr "in _Warteschleife" + +#: ../sflphone-client-gnome/src/uimanager.c:1107 msgid "_Call back" msgstr "_Zurückrufen" -#: ../sflphone-client-gnome/src/uimanager.c:1226 -msgid "_New call" -msgstr "_Neuer Anruf" - -#: ../sflphone-client-gnome/src/uimanager.c:1300 +#: ../sflphone-client-gnome/src/uimanager.c:1258 msgid "Edit phone number" msgstr "Nummer editieren" -#: ../sflphone-client-gnome/src/uimanager.c:1311 +#: ../sflphone-client-gnome/src/uimanager.c:1269 msgid "Edit the phone number before making a call" msgstr "Nummer vor dem Anruf editieren" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:164 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:180 msgid "Account Parameters" -msgstr "" +msgstr "Konto parameter" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:173 -#: ../sflphone-client-gnome/src/config/assistant.c:294 -#: ../sflphone-client-gnome/src/config/assistant.c:402 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:189 +#: ../sflphone-client-gnome/src/config/assistant.c:314 +#: ../sflphone-client-gnome/src/config/assistant.c:427 msgid "_Alias" msgstr "_Alias" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:181 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:197 msgid "_Protocol" msgstr "_Protokoll" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:199 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:215 msgid "Unknown" msgstr "Unbekannt" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:209 -#: ../sflphone-client-gnome/src/config/assistant.c:302 -#: ../sflphone-client-gnome/src/config/assistant.c:410 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:225 +#: ../sflphone-client-gnome/src/config/assistant.c:322 +#: ../sflphone-client-gnome/src/config/assistant.c:435 msgid "_Host name" msgstr "_Hostname" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:217 -#: ../sflphone-client-gnome/src/config/assistant.c:310 -#: ../sflphone-client-gnome/src/config/assistant.c:418 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:233 +#: ../sflphone-client-gnome/src/config/assistant.c:330 +#: ../sflphone-client-gnome/src/config/assistant.c:443 msgid "_User name" msgstr "_Benutzername" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:234 -#: ../sflphone-client-gnome/src/config/assistant.c:326 -#: ../sflphone-client-gnome/src/config/assistant.c:433 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:250 +#: ../sflphone-client-gnome/src/config/assistant.c:346 +#: ../sflphone-client-gnome/src/config/assistant.c:458 msgid "_Password" msgstr "_Passwort" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:254 -#: ../sflphone-client-gnome/src/config/assistant.c:344 -#: ../sflphone-client-gnome/src/config/assistant.c:449 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:270 +#: ../sflphone-client-gnome/src/config/assistant.c:363 +#: ../sflphone-client-gnome/src/config/assistant.c:473 +msgid "Show password" +msgstr "Passwort" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:274 +#: ../sflphone-client-gnome/src/config/assistant.c:368 +#: ../sflphone-client-gnome/src/config/assistant.c:478 msgid "_Voicemail number" msgstr "_Voicemail Nummer" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:340 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:361 msgid "Authentication" -msgstr "" +msgstr "Authentifizierung" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:341 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:362 msgid "Secret" -msgstr "" +msgstr "Geheim" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:466 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:605 msgid "Credential" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:501 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:640 msgid "Authentication name" -msgstr "" +msgstr "Authentifizierung Name" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:512 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:651 msgid "Password" msgstr "Passwort" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:535 -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:909 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:201 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:674 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1056 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:321 msgid "Security" msgstr "Sicherheit" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:547 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:213 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:687 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:333 msgid "Use TLS transport (sips)" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:552 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:218 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:693 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:338 msgid "SRTP key exchange" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:558 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:224 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:699 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:344 msgid "Disabled" -msgstr "" +msgstr "Deaktiviert" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:674 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:795 msgid "Registration" -msgstr "" +msgstr "Anmeldung" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:679 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:800 msgid "Registration expire" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:687 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:809 msgid "_Comply with RFC 3263" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:693 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:463 -msgid "Network" -msgstr "" +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:816 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:234 +msgid "Network Interface" +msgstr "Kein netzwerk" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:707 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:830 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:249 msgid "Local address" -msgstr "" +msgstr "Adresse (lokal)" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:744 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:880 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:301 msgid "Local port" +msgstr "Port (lokal)" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:893 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:928 +msgid "Published address" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:752 -msgid "Set published address and port:" +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:899 +msgid "Using STUN" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:756 -msgid "Using STUN " +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:906 +msgid "STUN server URL" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:761 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:914 msgid "Same as local parameters" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:764 -msgid "Manually" -msgstr "Manuell" - -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:769 -msgid "Published address" +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:917 +msgid "Set published address and port:" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:777 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:936 msgid "Published port" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:785 -msgid "STUN server URL" -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:880 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1027 msgid "Account settings" msgstr "Kontoeinstellungen" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:899 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1046 msgid "Basic" -msgstr "" +msgstr "Allgemein" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:904 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1051 msgid "Advanced" -msgstr "" +msgstr "Erweitert" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:169 -msgid "Server returned \"" +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:164 +#, c-format +msgid "Server returned \"%s\" (%d)" msgstr "" #: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:389 @@ -483,40 +671,26 @@ msgstr "Status" #: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:474 msgid "Accounts" -msgstr "" +msgstr "Konten" #: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:484 msgid "Configured Accounts" msgstr "Konfigurierten Konten" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:505 -msgid "There " -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:506 -msgid "is " -msgstr "" +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:501 +msgid "There is %d active account" +msgid_plural "There are %d active accounts" +msgstr[0] " aktive Konten" +msgstr[1] " aktive Konten" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:506 -msgid "are " -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:508 -msgid " active account" -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:509 -msgid "s" -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:514 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:507 msgid "You have no active account" -msgstr "" +msgstr "Sie haben kein aktives Konto" #: ../sflphone-client-gnome/src/config/addressbook-config.c:306 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:443 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:556 msgid "General" -msgstr "" +msgstr "Allgemein" #: ../sflphone-client-gnome/src/config/addressbook-config.c:312 msgid "_Use Evolution address books" @@ -559,16 +733,16 @@ msgid "Select which Evolution address books to use" msgstr "Adressbücher von Evolution zum verwenden auswählen" #: ../sflphone-client-gnome/src/config/addressbook-config.c:404 -#: ../sflphone-client-gnome/src/config/audioconf.c:578 +#: ../sflphone-client-gnome/src/config/audioconf.c:577 msgid "Name" msgstr "Name" -#: ../sflphone-client-gnome/src/config/assistant.c:69 +#: ../sflphone-client-gnome/src/config/assistant.c:75 #, c-format msgid "This assistant is now finished." msgstr "Assistent beendet." -#: ../sflphone-client-gnome/src/config/assistant.c:71 +#: ../sflphone-client-gnome/src/config/assistant.c:77 msgid "" "You can at any time check your registration state or modify your accounts " "parameters in the Options/Accounts window." @@ -576,213 +750,207 @@ msgstr "" "Sie können jederzeit Ihres Registrierungsstatus überprüfen oder " "IhreKontoparameter ändern (Optionen/Konten)." -#: ../sflphone-client-gnome/src/config/assistant.c:74 +#: ../sflphone-client-gnome/src/config/assistant.c:80 msgid "Alias" msgstr "Alias" -#: ../sflphone-client-gnome/src/config/assistant.c:78 +#: ../sflphone-client-gnome/src/config/assistant.c:84 msgid "Server" msgstr "Server" -#: ../sflphone-client-gnome/src/config/assistant.c:82 +#: ../sflphone-client-gnome/src/config/assistant.c:88 msgid "Username" msgstr "Benutzername" -#: ../sflphone-client-gnome/src/config/assistant.c:86 +#: ../sflphone-client-gnome/src/config/assistant.c:92 msgid "Security: " -msgstr "" +msgstr "Sicherheit: " -#: ../sflphone-client-gnome/src/config/assistant.c:88 +#: ../sflphone-client-gnome/src/config/assistant.c:94 msgid "SRTP/ZRTP draft-zimmermann" msgstr "SRTP/ZRTP draft-zimmermann" -#: ../sflphone-client-gnome/src/config/assistant.c:90 -#: ../sflphone-client-gnome/src/config/assistant.c:182 +#: ../sflphone-client-gnome/src/config/assistant.c:96 msgid "None" msgstr "Nichts" -#: ../sflphone-client-gnome/src/config/assistant.c:210 +#: ../sflphone-client-gnome/src/config/assistant.c:229 msgid "SFLphone account creation wizard" msgstr "SFLphone Konto (Konfigurationsassistent)" -#: ../sflphone-client-gnome/src/config/assistant.c:236 +#: ../sflphone-client-gnome/src/config/assistant.c:255 msgid "Welcome to the Account creation wizard of SFLphone!" msgstr "Wilkommen zu SFLphone!" -#: ../sflphone-client-gnome/src/config/assistant.c:237 +#: ../sflphone-client-gnome/src/config/assistant.c:256 msgid "This installation wizard will help you configure an account." msgstr "" "The Installationsassistent wird Ihnen helfen, ein Konto zu konfigurieren." -#: ../sflphone-client-gnome/src/config/assistant.c:251 +#: ../sflphone-client-gnome/src/config/assistant.c:270 msgid "VoIP Protocols" msgstr "VoIP Protokoll" -#: ../sflphone-client-gnome/src/config/assistant.c:251 +#: ../sflphone-client-gnome/src/config/assistant.c:270 msgid "Select an account type" msgstr "Kontotyp auswählen" -#: ../sflphone-client-gnome/src/config/assistant.c:253 +#: ../sflphone-client-gnome/src/config/assistant.c:272 msgid "SIP (Session Initiation Protocol)" msgstr "SIP (Session Initiation Protocol)" -#: ../sflphone-client-gnome/src/config/assistant.c:255 +#: ../sflphone-client-gnome/src/config/assistant.c:274 msgid "IAX2 (InterAsterix Exchange)" msgstr "IAX2 (InterAsterisk Exchange)" -#: ../sflphone-client-gnome/src/config/assistant.c:269 +#: ../sflphone-client-gnome/src/config/assistant.c:288 msgid "Account" msgstr "Konto" -#: ../sflphone-client-gnome/src/config/assistant.c:269 +#: ../sflphone-client-gnome/src/config/assistant.c:288 msgid "Please select one of the following options" msgstr "Bitte eine Option auswählen" -#: ../sflphone-client-gnome/src/config/assistant.c:271 +#: ../sflphone-client-gnome/src/config/assistant.c:290 msgid "Create a free SIP/IAX2 account on sflphone.org" msgstr "SIP/IAX2 Konto bei sflphone.org erstellen lassen" -#: ../sflphone-client-gnome/src/config/assistant.c:273 +#: ../sflphone-client-gnome/src/config/assistant.c:292 msgid "Register an existing SIP or IAX2 account" msgstr "Existierendes SIP/IAX2 Konto registrieren" -#: ../sflphone-client-gnome/src/config/assistant.c:286 +#: ../sflphone-client-gnome/src/config/assistant.c:306 msgid "SIP account settings" msgstr "Konfiguration des SIP Konto" -#: ../sflphone-client-gnome/src/config/assistant.c:286 -#: ../sflphone-client-gnome/src/config/assistant.c:394 +#: ../sflphone-client-gnome/src/config/assistant.c:306 +#: ../sflphone-client-gnome/src/config/assistant.c:419 msgid "Please fill the following information" msgstr "Folgende Informationen bitte ausfühlen" -#: ../sflphone-client-gnome/src/config/assistant.c:352 -#: ../sflphone-client-gnome/src/config/assistant.c:381 +#: ../sflphone-client-gnome/src/config/assistant.c:376 +#: ../sflphone-client-gnome/src/config/assistant.c:405 msgid "Secure communications with _ZRTP" -msgstr "" +msgstr "Sichere Kommunikation mit _ZRTP" -#: ../sflphone-client-gnome/src/config/assistant.c:365 +#: ../sflphone-client-gnome/src/config/assistant.c:389 msgid "Optional email address" msgstr "Fakultative E-mail-Adresse" -#: ../sflphone-client-gnome/src/config/assistant.c:365 +#: ../sflphone-client-gnome/src/config/assistant.c:389 msgid "This email address will be used to send your voicemail messages." msgstr "" "Diese E-mail-Adresse wird benutzt, um Ihnen voicemail Meldungen zu schicken." -#: ../sflphone-client-gnome/src/config/assistant.c:373 +#: ../sflphone-client-gnome/src/config/assistant.c:397 msgid "_Email address" msgstr "_Email" -#: ../sflphone-client-gnome/src/config/assistant.c:394 +#: ../sflphone-client-gnome/src/config/assistant.c:419 msgid "IAX2 account settings" msgstr "Konfiguration des IAX2 Konto" -#: ../sflphone-client-gnome/src/config/assistant.c:467 +#: ../sflphone-client-gnome/src/config/assistant.c:496 msgid "Network Address Translation (NAT)" msgstr "Network Address Translation (NAT)" -#: ../sflphone-client-gnome/src/config/assistant.c:467 +#: ../sflphone-client-gnome/src/config/assistant.c:496 msgid "You should probably enable this if you are behind a firewall." -msgstr "" -"Sie sollten dieses einschalten, falls Sie hinter einer Firewall sind." +msgstr "Sie sollten dieses einschalten, falls Sie hinter einer Firewall sind." -#: ../sflphone-client-gnome/src/config/assistant.c:476 +#: ../sflphone-client-gnome/src/config/assistant.c:505 msgid "E_nable STUN" msgstr "STUN Ei_nschalten" -#: ../sflphone-client-gnome/src/config/assistant.c:483 +#: ../sflphone-client-gnome/src/config/assistant.c:512 msgid "_STUN server" msgstr "_STUN Server" -#: ../sflphone-client-gnome/src/config/assistant.c:497 +#: ../sflphone-client-gnome/src/config/assistant.c:526 msgid "Account Registration" msgstr "Konto Registrierung" -#: ../sflphone-client-gnome/src/config/assistant.c:497 +#: ../sflphone-client-gnome/src/config/assistant.c:526 msgid "Congratulations!" msgstr "Gratulation!" -#: ../sflphone-client-gnome/src/config/audioconf.c:583 +#: ../sflphone-client-gnome/src/config/audioconf.c:582 msgid "Frequency" msgstr "Frequenz" -#: ../sflphone-client-gnome/src/config/audioconf.c:588 +#: ../sflphone-client-gnome/src/config/audioconf.c:587 msgid "Bitrate" msgstr "Bitrate" -#: ../sflphone-client-gnome/src/config/audioconf.c:593 +#: ../sflphone-client-gnome/src/config/audioconf.c:592 msgid "Bandwidth" msgstr "Bandbreite" -#: ../sflphone-client-gnome/src/config/audioconf.c:673 +#: ../sflphone-client-gnome/src/config/audioconf.c:670 msgid "ALSA plugin" msgstr "ALSA Plugin" -#: ../sflphone-client-gnome/src/config/audioconf.c:695 +#: ../sflphone-client-gnome/src/config/audioconf.c:692 msgid "Output" msgstr "Ausgabe" -#: ../sflphone-client-gnome/src/config/audioconf.c:717 +#: ../sflphone-client-gnome/src/config/audioconf.c:714 msgid "Input" msgstr "Eingabe" -#: ../sflphone-client-gnome/src/config/audioconf.c:752 +#: ../sflphone-client-gnome/src/config/audioconf.c:749 msgid "_Voice Activity Detection" msgstr "\"Voice Activity\" Erkennung" -#: ../sflphone-client-gnome/src/config/audioconf.c:762 +#: ../sflphone-client-gnome/src/config/audioconf.c:759 msgid "_Noise Reduction (Narrow-Band Companding)" msgstr "_Geräuschreduzierung (Narrow-Band Companding)" -#: ../sflphone-client-gnome/src/config/audioconf.c:798 +#: ../sflphone-client-gnome/src/config/audioconf.c:800 msgid "Sound Manager" msgstr "Sound Manager" -#: ../sflphone-client-gnome/src/config/audioconf.c:807 +#: ../sflphone-client-gnome/src/config/audioconf.c:809 msgid "_Pulseaudio" msgstr "Pulseaudio" -#: ../sflphone-client-gnome/src/config/audioconf.c:811 +#: ../sflphone-client-gnome/src/config/audioconf.c:813 msgid "_ALSA" msgstr "ALSA" -#: ../sflphone-client-gnome/src/config/audioconf.c:816 -msgid "_Mute other applications during a call" -msgstr "_Während eines Anrufs andere Anwendungen stumm schalten" - -#: ../sflphone-client-gnome/src/config/audioconf.c:823 +#: ../sflphone-client-gnome/src/config/audioconf.c:819 msgid "ALSA settings" msgstr "ALSA Konfiguration" -#: ../sflphone-client-gnome/src/config/audioconf.c:840 +#: ../sflphone-client-gnome/src/config/audioconf.c:836 msgid "Codecs" msgstr "Codecs" -#: ../sflphone-client-gnome/src/config/audioconf.c:869 +#: ../sflphone-client-gnome/src/config/audioconf.c:865 msgid "Recordings" -msgstr "" +msgstr "Aufnahmen" -#: ../sflphone-client-gnome/src/config/audioconf.c:873 +#: ../sflphone-client-gnome/src/config/audioconf.c:869 msgid "Destination folder" msgstr "Zielverzeichnis" -#: ../sflphone-client-gnome/src/config/audioconf.c:877 +#: ../sflphone-client-gnome/src/config/audioconf.c:873 msgid "Select a folder" msgstr "Verzeichnis auswählen" -#: ../sflphone-client-gnome/src/config/audioconf.c:883 +#: ../sflphone-client-gnome/src/config/audioconf.c:879 msgid "Ringtones" msgstr "Klingeltöne" -#: ../sflphone-client-gnome/src/config/audioconf.c:889 +#: ../sflphone-client-gnome/src/config/audioconf.c:885 msgid "_Enable ringtones" msgstr "Klingeltöne _einschalten" -#: ../sflphone-client-gnome/src/config/audioconf.c:895 +#: ../sflphone-client-gnome/src/config/audioconf.c:891 msgid "Choose a ringtone" msgstr "Klingelton auswählen" -#: ../sflphone-client-gnome/src/config/audioconf.c:901 +#: ../sflphone-client-gnome/src/config/audioconf.c:897 msgid "Audio Files" msgstr "Audio Dateien" @@ -819,86 +987,66 @@ msgstr "Telefonnummer umformen" msgid "_Prefix dialed numbers with" msgstr "_Präfix vor Nummern einfügen" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:195 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:225 msgid "" "This profile is used when you want to reach a remote peer simply by typing a " "sip URI such as <b>sip:remotepeer</b>. The settings you define here will " "also be used if no account can be matched to an incoming or outgoing call." msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:274 -msgid "SIP Port" -msgstr "SIP Port" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:281 -msgid "UDP Transport" -msgstr "" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:319 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:440 msgid "Desktop Notifications" msgstr "Desktopbenachrichtigungen" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:323 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:444 msgid "_Enable notifications" msgstr "Benachrichtigungen _einschalten" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:329 -msgid "Enable voicemail _notifications" -msgstr "_Benachrichtigung für Voice Nachrichten" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:341 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:450 msgid "System Tray Icon" msgstr "Benachrichtigungsfeld (\"System Tray\") Icon" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:344 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:453 msgid "_Popup main window on incoming call" msgstr "Hauptfenster anzeigen wenn eingehendes Gespräch" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:349 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:457 msgid "Ne_ver popup main window" msgstr "_Hauptfenster nie anzeigen" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:353 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:463 msgid "Hide SFLphone window on _startup" msgstr "_Unsichtbar beim Start" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:359 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:469 msgid "Calls History" msgstr "Liste der vorherigen Anrufen" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:362 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:472 msgid "_Keep my history for at least" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:373 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:483 msgid "days" msgstr "Tage" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:377 -msgid "Configuration File" -msgstr "" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:379 -msgid "Store SIP credentials as MD5 hash" -msgstr "" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:423 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:536 msgid "Preferences" msgstr "Einstellungen" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:448 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:561 msgid "Audio" msgstr "Audio" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:453 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:566 msgid "Address Book" msgstr "Adressbuch" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:458 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:571 msgid "Hooks" msgstr "Hooks" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:468 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:581 msgid "Direct IP calls" msgstr "" @@ -906,11 +1054,11 @@ msgstr "" msgid "Advanced options for TLS" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:55 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:56 msgid "TLS transport" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:59 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:60 msgid "" "TLS transport can be used along with UDP for those calls that would\n" "require secure sip transactions (aka SIPS). You can configure a different\n" @@ -919,101 +1067,134 @@ msgid "" "port, different one from each other\n" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:100 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:103 msgid "Certificate of Authority list" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:104 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:107 msgid "Choose a CA list file (optional)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:115 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:131 msgid "Public endpoint certificate file" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:119 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:135 msgid "Choose a public endpoint certificate (optional)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:134 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:159 msgid "Choose a private key file (optional)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:145 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:181 msgid "Password for the private key" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:168 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:204 msgid "TLS protocol method" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:202 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:238 msgid "TLS cipher list" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:211 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:247 msgid "Server name instance for outgoing TLS connection" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:219 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:255 msgid "Negotiation timeout (sec:msec)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:236 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:272 msgid "Verify incoming certificates, as a server" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:242 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:278 msgid "Verify certificates from answer, as a client" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:248 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:284 msgid "Require certificate for incoming tls connections" msgstr "" #: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:49 msgid "ZRTP Options" -msgstr "" +msgstr "ZRTP Optionen" -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:68 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:69 msgid "Send Hello Hash in S_DP" msgstr "" -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:74 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:75 msgid "Ask User to Confirm SAS" msgstr "" -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:80 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:81 msgid "_Warn if ZRTP not supported" -msgstr "" +msgstr "_Warnung wenn ZRTP nicht unterstüzt" -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:86 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:87 msgid "Display SAS once for hold events" msgstr "" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:56 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:58 msgid "Search all" msgstr "Suche alle" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:57 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:70 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:82 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:94 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:59 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:72 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:84 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:96 msgid "Click here to change the search type" msgstr "Klicken Sie hier, um Suchtyp zu wechseln" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:69 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:71 msgid "Search by missed call" msgstr "Suche nach Anruf in Abwesenheit" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:81 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:83 msgid "Search by incoming call" msgstr "Suche nach eingehenden Anruf" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:93 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:95 msgid "Search by outgoing call" msgstr "Suche nach ausgehenden Anru" +#~ msgid "IP call - %s" +#~ msgstr "IP Anruf - %s" + +#~ msgid "Codec" +#~ msgstr "Codec" + +#~ msgid "Network" +#~ msgstr "Netzwerk" + +#~ msgid "Manually" +#~ msgstr "Manuell" + +#~ msgid "There " +#~ msgstr "Es " + +#~ msgid "is " +#~ msgstr "gibt " + +#~ msgid "are " +#~ msgstr "gibt " + +#~ msgid "_Mute other applications during a call" +#~ msgstr "_Während eines Anrufs andere Anwendungen stumm schalten" + +#~ msgid "SIP Port" +#~ msgstr "SIP Port" + +#~ msgid "UDP Transport" +#~ msgstr "UDP Transport" + +#~ msgid "Enable voicemail _notifications" +#~ msgstr "_Benachrichtigung für Voice Nachrichten" + #~ msgctxt "account state" #~ msgid "Error" #~ msgstr "Fehler" @@ -1050,9 +1231,6 @@ msgstr "Suche nach ausgehenden Anru" #~ msgid "Default account" #~ msgstr "Default Konto" -#~ msgid "Transfer to : " -#~ msgstr "Weiterleiten zu : " - #~ msgid "SFLphone KDE Client" #~ msgstr "SFLphone KDE Client" @@ -1062,14 +1240,6 @@ msgstr "Suche nach ausgehenden Anru" #~ msgid "Jérémy Quentin" #~ msgstr "Jérémy Quentin" -#~ msgctxt "NAME OF TRANSLATORS" -#~ msgid "Your names" -#~ msgstr "Ihre Namen, ,Launchpad Contributions:,Maxime Chambreuil,Sven Werlen" - -#~ msgctxt "EMAIL OF TRANSLATORS" -#~ msgid "Your emails" -#~ msgstr "Ihre E-Mail-Adressen,,,maxime.chambreuil@gmail.com," - #~ msgid "Incoming call" #~ msgstr "Eingehende Anrufe" @@ -1085,12 +1255,6 @@ msgstr "Suche nach ausgehenden Anru" #~ msgid "Main screen" #~ msgstr "Hauptbildschirm" -#~ msgid "Call history" -#~ msgstr "Liste der vorherigen Anrufen" - -#~ msgid "Address book" -#~ msgstr "Adressbuch" - #~ msgid "Edit before call" #~ msgstr "Vor Aufruf bearbeiten" @@ -1103,9 +1267,6 @@ msgstr "Suche nach ausgehenden Anru" #~ msgid "Hold on" #~ msgstr "In Warteschleife" -#~ msgid "Transfer" -#~ msgstr "Weiterleiten" - #~ msgid "Record" #~ msgstr "Gespräch aufzeichnen" @@ -1124,22 +1285,19 @@ msgstr "Suche nach ausgehenden Anru" #~ msgid "" #~ "By default, when you place a call, sflphone will use the first account in " #~ "this list which is \"registered\". Change the order of the accounts using " -#~ "the \"Up\" and \"Down\" arrows. Enable/disable them by checking/unchecking " -#~ "them on the left of the item. Add or remove some with \"Plus\" and \"Sub\" " -#~ "buttons. Edit the selected account with the form on the right." +#~ "the \"Up\" and \"Down\" arrows. Enable/disable them by checking/" +#~ "unchecking them on the left of the item. Add or remove some with \"Plus\" " +#~ "and \"Sub\" buttons. Edit the selected account with the form on the right." #~ msgstr "" -#~ "Sflphone verwendet das erste \"registrierte\" Konto in der Liste, wenn Sie " -#~ "anrufen. Benutzen Sie die Pfeile, um die Anordnung der Kontos zu ändern. Mit " -#~ "\"Plus\" und \"Minus\" können Sie ein Konto anlegen bzgl. entfernen. Mit " -#~ "\"Editieren\" können Sie ein Konto bearbeiten." - -#~ msgid "Remove the selected account" -#~ msgstr "Entfernen Sie das ausgewählte Konto" +#~ "Sflphone verwendet das erste \"registrierte\" Konto in der Liste, wenn " +#~ "Sie anrufen. Benutzen Sie die Pfeile, um die Anordnung der Kontos zu " +#~ "ändern. Mit \"Plus\" und \"Minus\" können Sie ein Konto anlegen bzgl. " +#~ "entfernen. Mit \"Editieren\" können Sie ein Konto bearbeiten." #~ msgid "" -#~ "This button will remove the selected account in the list below. Be sure you " -#~ "really don't need it anymore. If you think you might use it again later, " -#~ "just uncheck it." +#~ "This button will remove the selected account in the list below. Be sure " +#~ "you really don't need it anymore. If you think you might use it again " +#~ "later, just uncheck it." #~ msgstr "" #~ "Diese Aktion entfernt das ausgewählte Konto aus der Liste. Stellen Sie " #~ "sicher, dass Sie es wirklich nicht mehr brauchen." @@ -1161,8 +1319,9 @@ msgstr "Suche nach ausgehenden Anru" #~ "this list which is \"registered\". Change the order of the accounts using " #~ "the \"Up\" and \"Down\" arrows." #~ msgstr "" -#~ "Sflphone verwendet das erste \"registrierte\" Konto in der Liste, wenn Sie " -#~ "anrufen. Benutzen Sie die Pfeile, um die Anordnung der Kontos zu ändern." +#~ "Sflphone verwendet das erste \"registrierte\" Konto in der Liste, wenn " +#~ "Sie anrufen. Benutzen Sie die Pfeile, um die Anordnung der Kontos zu " +#~ "ändern." #~ msgid "Down" #~ msgstr "Unten" @@ -1248,9 +1407,6 @@ msgstr "Suche nach ausgehenden Anru" #~ msgid "On start" #~ msgstr "Beim Start" -#~ msgid "Clear history" -#~ msgstr "Vorherigen Anrufen leeren" - #~ msgid "Connection" #~ msgstr "Anbindung" @@ -1266,15 +1422,9 @@ msgstr "Suche nach ausgehenden Anru" #~ msgid "Prefix dialed numbers with" #~ msgstr "Präfix vor Nummern einfügen" -#~ msgid "History" -#~ msgstr "Vorherige Anrufe" - #~ msgid "Configure SFLphone" #~ msgstr "Konfigurieren SFLphone" -#~ msgid "Display volume controls" -#~ msgstr "Lautstärke-Regler anzeigen" - #~ msgid "Display dialpad" #~ msgstr "Wählscheibe anzeigen" @@ -1285,27 +1435,6 @@ msgstr "Suche nach ausgehenden Anru" #~ msgid "Attention:number of results exceeds max displayed." #~ msgstr "Warnung: Anzahl Resultate überschreit definiertes Maximum" -#~ msgid "_Help" -#~ msgstr "_Hilfe" - -#~ msgid "_Call" -#~ msgstr "_Anruf" - -#~ msgid "Clear _history" -#~ msgstr "Liste der vorherigen Anrufen _leeren" - -#~ msgid "_Accounts" -#~ msgstr "_Konten" - -#~ msgid "_Edit" -#~ msgstr "_Editieren" - -#~ msgid "_Dialpad" -#~ msgstr "_Wählscheibe" - -#~ msgid "_View" -#~ msgstr "_Anzeigen" - #~ msgid "%s - %s" #~ msgstr "%s - %s" @@ -1317,3 +1446,15 @@ msgstr "Suche nach ausgehenden Anru" #~ msgid "Port" #~ msgstr "Port" + +#~ msgctxt "NAME OF TRANSLATORS" +#~ msgid "Your names" +#~ msgstr "" +#~ "Ihre Namen, ,Launchpad Contributions:,Maxime Chambreuil,Sven Werlen, ," +#~ "Launchpad Contributions:,Maxime Chambreuil,Sven Werlen,Sven Werlen" + +#~ msgctxt "EMAIL OF TRANSLATORS" +#~ msgid "Your emails" +#~ msgstr "" +#~ "Ihre E-Mail-Adressen,,,maxime.chambreuil@gmail.com,,,,maxime." +#~ "chambreuil@gmail.com,,sven.werlen@gmail.com" diff --git a/sflphone-client-gnome/po/es/es.po b/sflphone-client-gnome/po/es/es.po index 3ec57681b1..a40c09ce90 100644 --- a/sflphone-client-gnome/po/es/es.po +++ b/sflphone-client-gnome/po/es/es.po @@ -9,15 +9,15 @@ msgid "" msgstr "" "Project-Id-Version: SFLphone 0.9.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-10-14 11:18-0400\n" -"PO-Revision-Date: 2009-10-14 23:39+0000\n" +"POT-Creation-Date: 2009-12-03 10:22-0500\n" +"PO-Revision-Date: 2009-10-26 20:46+0000\n" "Last-Translator: Maxime Chambreuil <maxime.chambreuil@gmail.com>\n" "Language-Team: SavoirFaireLinux Inc <sflphoneteam@savoirfairelinux.com>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Launchpad-Export-Date: 2009-10-26 15:48+0000\n" +"X-Launchpad-Export-Date: 2009-12-03 15:32+0000\n" "X-Generator: Launchpad (build Unknown)\n" #: ../sflphone-client-gnome/src/accountlist.c:175 @@ -62,25 +62,15 @@ msgstr "Servidor stun inválido" msgid "Invalid" msgstr "Inválido" -#: ../sflphone-client-gnome/src/actions.c:54 -#: ../sflphone-client-gnome/src/sflnotify.c:94 -#, c-format -msgid "%d voice mail" -msgid_plural "%d voice mails" -msgstr[0] "%d mensaje de voz" -msgstr[1] "%d mensajes de voz" - -#: ../sflphone-client-gnome/src/actions.c:83 -#: ../sflphone-client-gnome/src/actions.c:919 -#: ../sflphone-client-gnome/src/actions.c:926 +#: ../sflphone-client-gnome/src/actions.c:98 msgid "Using account" msgstr "Usando la cuenta" -#: ../sflphone-client-gnome/src/actions.c:89 +#: ../sflphone-client-gnome/src/actions.c:104 msgid "No registered accounts" msgstr "Ninguna cuenta registrada" -#: ../sflphone-client-gnome/src/actions.c:268 +#: ../sflphone-client-gnome/src/actions.c:285 msgid "" "Unable to connect to the SFLphone server.\n" "Make sure the daemon is running." @@ -88,22 +78,18 @@ msgstr "" "Incapaz de conectar con el servidor SFLphone.\n" " Asegúrese que el demonio esté funcionando." -#: ../sflphone-client-gnome/src/actions.c:913 -#, c-format -msgid "IP call - %s" -msgstr "Llamada IP - %s" - -#: ../sflphone-client-gnome/src/actions.c:922 -msgid "Codec" -msgstr "Códec" +#: ../sflphone-client-gnome/src/actions.c:589 +#: ../sflphone-client-gnome/src/actions.c:911 +msgid "Direct SIP call" +msgstr "Llamadas IP directas" -#: ../sflphone-client-gnome/src/actions.c:1119 +#: ../sflphone-client-gnome/src/actions.c:1103 #, c-format msgid "" "<b>Error: No audio codecs found.\n" "\n" -"</b> SFL audio codecs have to be placed in <i>%s</i> or in the " -"<b>.sflphone</b> directory in your home( <i>%s</i> )" +"</b> SFL audio codecs have to be placed in <i>%s</i> or in the <b>.sflphone</" +"b> directory in your home( <i>%s</i> )" msgstr "" "<b>Error: Codecs de audio no encontrados.\n" "\n" @@ -152,31 +138,31 @@ msgstr "Hay llamadas en curso." msgid "Do you still want to quit?" msgstr "Aún quiere salir ?" -#: ../sflphone-client-gnome/src/mainwindow.c:299 +#: ../sflphone-client-gnome/src/mainwindow.c:298 msgid "SFLphone Error" msgstr "Error SFLphone" -#: ../sflphone-client-gnome/src/mainwindow.c:391 +#: ../sflphone-client-gnome/src/mainwindow.c:392 #, c-format msgid "ZRTP is not supported by peer %s\n" msgstr "ZRTP no es compatible con %s\n" -#: ../sflphone-client-gnome/src/mainwindow.c:392 +#: ../sflphone-client-gnome/src/mainwindow.c:393 msgid "Secure Communication Unavailable" msgstr "Comunicación segura no disponible" -#: ../sflphone-client-gnome/src/mainwindow.c:393 -#: ../sflphone-client-gnome/src/mainwindow.c:415 +#: ../sflphone-client-gnome/src/mainwindow.c:394 +#: ../sflphone-client-gnome/src/mainwindow.c:416 msgid "Continue" msgstr "Seguir" -#: ../sflphone-client-gnome/src/mainwindow.c:394 -#: ../sflphone-client-gnome/src/mainwindow.c:416 -#: ../sflphone-client-gnome/src/mainwindow.c:430 +#: ../sflphone-client-gnome/src/mainwindow.c:395 +#: ../sflphone-client-gnome/src/mainwindow.c:417 +#: ../sflphone-client-gnome/src/mainwindow.c:431 msgid "Stop Call" msgstr "Terminar llamada" -#: ../sflphone-client-gnome/src/mainwindow.c:413 +#: ../sflphone-client-gnome/src/mainwindow.c:414 #, c-format msgid "" "A %s error forced the call with %s to fall under unencrypted mode.\n" @@ -185,11 +171,11 @@ msgstr "" "Un error de %s obliga la llamada con %s a caer bajo un modo decifrado.\n" "Razón exacta: %s\n" -#: ../sflphone-client-gnome/src/mainwindow.c:414 +#: ../sflphone-client-gnome/src/mainwindow.c:415 msgid "ZRTP negotiation failed" msgstr "Negociación ZRTP fracasada" -#: ../sflphone-client-gnome/src/mainwindow.c:427 +#: ../sflphone-client-gnome/src/mainwindow.c:428 #, c-format msgid "" "%s wants to stop using secure communication. Confirm will resume " @@ -198,11 +184,11 @@ msgstr "" "%s quiere parar la comunicación segura. Confirmar reanudará la conversación " "sin SRTP.\n" -#: ../sflphone-client-gnome/src/mainwindow.c:428 +#: ../sflphone-client-gnome/src/mainwindow.c:429 msgid "Confirm Go Clear" msgstr "Confirmar" -#: ../sflphone-client-gnome/src/mainwindow.c:429 +#: ../sflphone-client-gnome/src/mainwindow.c:430 msgid "Confirm" msgstr "Confirmar" @@ -217,6 +203,13 @@ msgstr "%s cuenta : %s" msgid "<i>From</i> %s" msgstr "<i>De</i> %s" +#: ../sflphone-client-gnome/src/sflnotify.c:94 +#, c-format +msgid "%d voice mail" +msgid_plural "%d voice mails" +msgstr[0] "%d mensaje de voz" +msgstr[1] "%d mensajes de voz" + #: ../sflphone-client-gnome/src/sflnotify.c:111 #, c-format msgid "Calling with %s account <i>%s</i>" @@ -266,15 +259,15 @@ msgstr "Volumen de altavoces" msgid "Mic volume" msgstr "Volumen del micrófono" -#: ../sflphone-client-gnome/src/statusicon.c:91 +#: ../sflphone-client-gnome/src/statusicon.c:96 msgid "_Show main window" msgstr "Mostrar ventana principal" -#: ../sflphone-client-gnome/src/statusicon.c:126 +#: ../sflphone-client-gnome/src/statusicon.c:131 msgid "SFLphone" msgstr "SFLphone" -#: ../sflphone-client-gnome/src/statusicon.c:127 +#: ../sflphone-client-gnome/src/statusicon.c:132 #, c-format msgid "%i account configured" msgid_plural "%i accounts configured" @@ -282,203 +275,397 @@ msgstr[0] "%i cuenta configurada" msgstr[1] "%i cuentas configuradas" #: ../sflphone-client-gnome/src/toolbar.c:38 -#: ../sflphone-client-gnome/src/uimanager.c:750 +#: ../sflphone-client-gnome/src/uimanager.c:693 +#: ../sflphone-client-gnome/src/uimanager.c:727 msgid "Voicemail" msgstr "Mensaje de voz" -#: ../sflphone-client-gnome/src/uimanager.c:403 +#: ../sflphone-client-gnome/src/uimanager.c:117 +msgid "No address book selected" +msgstr "Libreta de contactos" + +#: ../sflphone-client-gnome/src/uimanager.c:137 +#: ../sflphone-client-gnome/src/uimanager.c:756 +msgid "Address book" +msgstr "Libreta de contactos" + +#: ../sflphone-client-gnome/src/uimanager.c:279 +msgid "Voicemail (%i)" +msgstr "Mensaje de voz (%i)" + +#: ../sflphone-client-gnome/src/uimanager.c:342 msgid "SFLphone is a VoIP client compatible with SIP and IAX2 protocols." -msgstr "" -"SFLphone es un teléfono VoIP compatible con los protocolos SIP y IAX2" +msgstr "SFLphone es un teléfono VoIP compatible con los protocolos SIP y IAX2" -#: ../sflphone-client-gnome/src/uimanager.c:406 +#: ../sflphone-client-gnome/src/uimanager.c:345 msgid "About SFLphone" msgstr "Sobre SFLphone" -#: ../sflphone-client-gnome/src/uimanager.c:1028 +#: ../sflphone-client-gnome/src/uimanager.c:719 +msgid "Call" +msgstr "_Llamar" + +#: ../sflphone-client-gnome/src/uimanager.c:720 +#: ../sflphone-client-gnome/src/uimanager.c:1184 +msgid "_New call" +msgstr "_Nueva llamada" + +#: ../sflphone-client-gnome/src/uimanager.c:720 +msgid "Place a new call" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:721 +#: ../sflphone-client-gnome/src/uimanager.c:979 msgid "_Pick up" msgstr "_Descolgar" -#: ../sflphone-client-gnome/src/uimanager.c:1040 -#: ../sflphone-client-gnome/src/uimanager.c:1081 +#: ../sflphone-client-gnome/src/uimanager.c:721 +msgid "Answer the call" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:722 +#: ../sflphone-client-gnome/src/uimanager.c:991 +#: ../sflphone-client-gnome/src/uimanager.c:1032 msgid "_Hang up" msgstr "_Colgar" -#: ../sflphone-client-gnome/src/uimanager.c:1052 -#: ../sflphone-client-gnome/src/uimanager.c:1093 -msgid "On _Hold" +#: ../sflphone-client-gnome/src/uimanager.c:722 +msgid "Finish the call" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:723 +msgid "O_n hold" msgstr "En _Espera" -#: ../sflphone-client-gnome/src/uimanager.c:1064 +#: ../sflphone-client-gnome/src/uimanager.c:723 +msgid "Place the call on hold" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:724 +msgid "O_ff hold" +msgstr "Seguir" + +#: ../sflphone-client-gnome/src/uimanager.c:724 +msgid "Place the call off hold" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:725 +#: ../sflphone-client-gnome/src/uimanager.c:1015 msgid "_Record" msgstr "G_rabar" -#: ../sflphone-client-gnome/src/uimanager.c:1154 +#: ../sflphone-client-gnome/src/uimanager.c:725 +msgid "Record the current conversation" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:726 +msgid "Configuration _Assistant" +msgstr "Archivo de configuración" + +#: ../sflphone-client-gnome/src/uimanager.c:726 +msgid "Run the configuration assistant" +msgstr "Error de configuración Stun" + +#: ../sflphone-client-gnome/src/uimanager.c:727 +msgid "Call your voicemail" +msgstr "%d mensaje de voz" + +#: ../sflphone-client-gnome/src/uimanager.c:728 +msgid "_Close" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:728 +msgid "Minimize to system tray" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:729 +msgid "_Quit" +msgstr "_Editar" + +#: ../sflphone-client-gnome/src/uimanager.c:729 +msgid "Quit the program" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:732 +msgid "_Edit" +msgstr "_Editar" + +#: ../sflphone-client-gnome/src/uimanager.c:733 +msgid "_Copy" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:733 +msgid "Copy the selection" +msgstr "Eliminar la cuenta seleccionada" + +#: ../sflphone-client-gnome/src/uimanager.c:734 +msgid "_Paste" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:734 +msgid "Paste the clipboard" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:735 +msgid "Clear _history" +msgstr "_Limpiar historial" + +#: ../sflphone-client-gnome/src/uimanager.c:735 +msgid "Clear the call history" +msgstr "Limpiar historial" + +#: ../sflphone-client-gnome/src/uimanager.c:736 +msgid "_Accounts" +msgstr "_Cuentas" + +#: ../sflphone-client-gnome/src/uimanager.c:736 +msgid "Edit your accounts" +msgstr "Cuenta actual" + +#: ../sflphone-client-gnome/src/uimanager.c:737 +msgid "_Preferences" +msgstr "Preferencias" + +#: ../sflphone-client-gnome/src/uimanager.c:737 +msgid "Change your preferences" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:740 +msgid "_View" +msgstr "_Ver" + +#: ../sflphone-client-gnome/src/uimanager.c:743 +msgid "_Help" +msgstr "_Ayuda" + +#: ../sflphone-client-gnome/src/uimanager.c:744 +msgid "Contents" +msgstr "Seguir" + +#: ../sflphone-client-gnome/src/uimanager.c:744 +msgid "Open the manual" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:745 +msgid "About this application" +msgstr "Autentificación" + +#: ../sflphone-client-gnome/src/uimanager.c:751 +msgid "_Transfer" +msgstr "Transferir" + +#: ../sflphone-client-gnome/src/uimanager.c:751 +msgid "Transfer the call" +msgstr "Transferir a : " + +#: ../sflphone-client-gnome/src/uimanager.c:752 +msgid "_Show toolbar" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:752 +msgid "Show the toolbar" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:753 +msgid "_Dialpad" +msgstr "Desactivado" + +#: ../sflphone-client-gnome/src/uimanager.c:753 +msgid "Show the dialpad" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:754 +msgid "_Volume controls" +msgstr "_Controles de volumen" + +#: ../sflphone-client-gnome/src/uimanager.c:754 +msgid "Show the volume controls" +msgstr "_Controles de volumen" + +#: ../sflphone-client-gnome/src/uimanager.c:755 +msgid "_History" +msgstr "Historia de Llamada" + +#: ../sflphone-client-gnome/src/uimanager.c:755 +msgid "Calls history" +msgstr "Historia de Llamada" + +#: ../sflphone-client-gnome/src/uimanager.c:756 +msgid "_Address book" +msgstr "Libreta de contactos" + +#: ../sflphone-client-gnome/src/uimanager.c:1003 +#: ../sflphone-client-gnome/src/uimanager.c:1044 +msgid "On _Hold" +msgstr "En _Espera" + +#: ../sflphone-client-gnome/src/uimanager.c:1107 msgid "_Call back" msgstr "_Llamar" -#: ../sflphone-client-gnome/src/uimanager.c:1226 -msgid "_New call" -msgstr "_Nueva llamada" - -#: ../sflphone-client-gnome/src/uimanager.c:1300 +#: ../sflphone-client-gnome/src/uimanager.c:1258 msgid "Edit phone number" msgstr "Editar número de teléfono" -#: ../sflphone-client-gnome/src/uimanager.c:1311 +#: ../sflphone-client-gnome/src/uimanager.c:1269 msgid "Edit the phone number before making a call" msgstr "Editar el número de teléfono antes de llamar" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:164 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:180 msgid "Account Parameters" msgstr "Parámetros de cuenta" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:173 -#: ../sflphone-client-gnome/src/config/assistant.c:294 -#: ../sflphone-client-gnome/src/config/assistant.c:402 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:189 +#: ../sflphone-client-gnome/src/config/assistant.c:314 +#: ../sflphone-client-gnome/src/config/assistant.c:427 msgid "_Alias" msgstr "_Alias" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:181 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:197 msgid "_Protocol" msgstr "_Protocolo" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:199 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:215 msgid "Unknown" msgstr "Desconocido" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:209 -#: ../sflphone-client-gnome/src/config/assistant.c:302 -#: ../sflphone-client-gnome/src/config/assistant.c:410 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:225 +#: ../sflphone-client-gnome/src/config/assistant.c:322 +#: ../sflphone-client-gnome/src/config/assistant.c:435 msgid "_Host name" msgstr "_Nombre de equipo" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:217 -#: ../sflphone-client-gnome/src/config/assistant.c:310 -#: ../sflphone-client-gnome/src/config/assistant.c:418 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:233 +#: ../sflphone-client-gnome/src/config/assistant.c:330 +#: ../sflphone-client-gnome/src/config/assistant.c:443 msgid "_User name" msgstr "_Usuario" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:234 -#: ../sflphone-client-gnome/src/config/assistant.c:326 -#: ../sflphone-client-gnome/src/config/assistant.c:433 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:250 +#: ../sflphone-client-gnome/src/config/assistant.c:346 +#: ../sflphone-client-gnome/src/config/assistant.c:458 msgid "_Password" msgstr "_Contraseña" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:254 -#: ../sflphone-client-gnome/src/config/assistant.c:344 -#: ../sflphone-client-gnome/src/config/assistant.c:449 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:270 +#: ../sflphone-client-gnome/src/config/assistant.c:363 +#: ../sflphone-client-gnome/src/config/assistant.c:473 +msgid "Show password" +msgstr "Contraseña" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:274 +#: ../sflphone-client-gnome/src/config/assistant.c:368 +#: ../sflphone-client-gnome/src/config/assistant.c:478 msgid "_Voicemail number" msgstr "_Número de buzón de voz" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:340 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:361 msgid "Authentication" msgstr "Autentificación" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:341 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:362 msgid "Secret" msgstr "Secreto" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:466 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:605 msgid "Credential" msgstr "Informaciónes" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:501 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:640 msgid "Authentication name" msgstr "Nombre de autentificación" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:512 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:651 msgid "Password" msgstr "Contraseña" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:535 -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:909 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:201 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:674 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1056 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:321 msgid "Security" msgstr "Seguridad" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:547 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:213 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:687 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:333 msgid "Use TLS transport (sips)" msgstr "Usa transporte TLS (sips)" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:552 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:218 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:693 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:338 msgid "SRTP key exchange" msgstr "Intercambió de clave SRTP" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:558 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:224 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:699 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:344 msgid "Disabled" msgstr "Desactivado" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:674 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:795 msgid "Registration" msgstr "Registración" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:679 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:800 msgid "Registration expire" msgstr "Registracíon expira" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:687 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:809 msgid "_Comply with RFC 3263" msgstr "_Cumplir con RFC 3263" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:693 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:463 -msgid "Network" -msgstr "Red" +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:816 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:234 +msgid "Network Interface" +msgstr "Red Inaccesible" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:707 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:830 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:249 msgid "Local address" msgstr "Dirección local" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:744 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:880 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:301 msgid "Local port" msgstr "Puerto local" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:752 -msgid "Set published address and port:" -msgstr "Publicar dirección y puerto:" +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:893 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:928 +msgid "Published address" +msgstr "Dirección publicada" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:756 -msgid "Using STUN " +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:899 +msgid "Using STUN" msgstr "Usando STUN " -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:761 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:906 +msgid "STUN server URL" +msgstr "URL del servidor STUN" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:914 msgid "Same as local parameters" msgstr "Igual que parámetros locales" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:764 -msgid "Manually" -msgstr "Manualmente" - -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:769 -msgid "Published address" -msgstr "Dirección publicada" +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:917 +msgid "Set published address and port:" +msgstr "Publicar dirección y puerto:" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:777 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:936 msgid "Published port" msgstr "Puerto publicado" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:785 -msgid "STUN server URL" -msgstr "URL del servidor STUN" - -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:880 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1027 msgid "Account settings" msgstr "Configuración de cuentas" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:899 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1046 msgid "Basic" msgstr "Básico" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:904 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1051 msgid "Advanced" msgstr "Avanzado" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:169 -msgid "Server returned \"" +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:164 +msgid "Server returned \"%s\" (%d)" msgstr "Servidor contesta \"" #: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:389 @@ -497,32 +684,18 @@ msgstr "Cuentas" msgid "Configured Accounts" msgstr "Cuentas Configuradas" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:505 -msgid "There " -msgstr "Alla " - -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:506 -msgid "is " -msgstr "es " - -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:506 -msgid "are " -msgstr "son " - -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:508 -msgid " active account" -msgstr " cuenta activada" +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:501 +msgid "There is %d active account" +msgid_plural "There are %d active accounts" +msgstr[0] " cuenta activada" +msgstr[1] " cuenta activada" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:509 -msgid "s" -msgstr "s" - -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:514 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:507 msgid "You have no active account" msgstr "No tienes ninguna cuenta activada" #: ../sflphone-client-gnome/src/config/addressbook-config.c:306 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:443 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:556 msgid "General" msgstr "General" @@ -544,8 +717,7 @@ msgstr "_Mostrar fotos de contactos, si están disponibles" #: ../sflphone-client-gnome/src/config/addressbook-config.c:341 msgid "Fields from Evolution's address books" -msgstr "" -"Usar los siguientes campos de la libreta de direcciones de Evolution:" +msgstr "Usar los siguientes campos de la libreta de direcciones de Evolution:" #: ../sflphone-client-gnome/src/config/addressbook-config.c:345 msgid "_Work" @@ -568,16 +740,16 @@ msgid "Select which Evolution address books to use" msgstr "Seleccione la libreta de contactos de Evolution a usar" #: ../sflphone-client-gnome/src/config/addressbook-config.c:404 -#: ../sflphone-client-gnome/src/config/audioconf.c:578 +#: ../sflphone-client-gnome/src/config/audioconf.c:577 msgid "Name" msgstr "Nombre" -#: ../sflphone-client-gnome/src/config/assistant.c:69 +#: ../sflphone-client-gnome/src/config/assistant.c:75 #, c-format msgid "This assistant is now finished." msgstr "El asistente ha finalizado" -#: ../sflphone-client-gnome/src/config/assistant.c:71 +#: ../sflphone-client-gnome/src/config/assistant.c:77 msgid "" "You can at any time check your registration state or modify your accounts " "parameters in the Options/Accounts window." @@ -585,211 +757,205 @@ msgstr "" "Puede comprobar en cualquier momento su estado de registro o modificar la " "configuración de sus cuentas en la ventana de Opciones/Cuentas." -#: ../sflphone-client-gnome/src/config/assistant.c:74 +#: ../sflphone-client-gnome/src/config/assistant.c:80 msgid "Alias" msgstr "Alias" -#: ../sflphone-client-gnome/src/config/assistant.c:78 +#: ../sflphone-client-gnome/src/config/assistant.c:84 msgid "Server" msgstr "Servidor" -#: ../sflphone-client-gnome/src/config/assistant.c:82 +#: ../sflphone-client-gnome/src/config/assistant.c:88 msgid "Username" msgstr "Usuario" -#: ../sflphone-client-gnome/src/config/assistant.c:86 +#: ../sflphone-client-gnome/src/config/assistant.c:92 msgid "Security: " msgstr "Seguridad: " -#: ../sflphone-client-gnome/src/config/assistant.c:88 +#: ../sflphone-client-gnome/src/config/assistant.c:94 msgid "SRTP/ZRTP draft-zimmermann" msgstr "SRTP/ZRTP draft-zimmermann" -#: ../sflphone-client-gnome/src/config/assistant.c:90 -#: ../sflphone-client-gnome/src/config/assistant.c:182 +#: ../sflphone-client-gnome/src/config/assistant.c:96 msgid "None" msgstr "Ninguno" -#: ../sflphone-client-gnome/src/config/assistant.c:210 +#: ../sflphone-client-gnome/src/config/assistant.c:229 msgid "SFLphone account creation wizard" msgstr "Asistente de creación de cuentas" -#: ../sflphone-client-gnome/src/config/assistant.c:236 +#: ../sflphone-client-gnome/src/config/assistant.c:255 msgid "Welcome to the Account creation wizard of SFLphone!" msgstr "¡Bienvenido al asistente de configuración de cuentas de SFLphone" -#: ../sflphone-client-gnome/src/config/assistant.c:237 +#: ../sflphone-client-gnome/src/config/assistant.c:256 msgid "This installation wizard will help you configure an account." msgstr "Este asistente de instalación le ayudará a configurar una cuenta." -#: ../sflphone-client-gnome/src/config/assistant.c:251 +#: ../sflphone-client-gnome/src/config/assistant.c:270 msgid "VoIP Protocols" msgstr "Protocolos VoIP" -#: ../sflphone-client-gnome/src/config/assistant.c:251 +#: ../sflphone-client-gnome/src/config/assistant.c:270 msgid "Select an account type" msgstr "Escoja un tipo de cuenta" -#: ../sflphone-client-gnome/src/config/assistant.c:253 +#: ../sflphone-client-gnome/src/config/assistant.c:272 msgid "SIP (Session Initiation Protocol)" msgstr "SIP (Session Initiation Protocol)" -#: ../sflphone-client-gnome/src/config/assistant.c:255 +#: ../sflphone-client-gnome/src/config/assistant.c:274 msgid "IAX2 (InterAsterix Exchange)" msgstr "IAX2 (InterAsterix Exchange)" -#: ../sflphone-client-gnome/src/config/assistant.c:269 +#: ../sflphone-client-gnome/src/config/assistant.c:288 msgid "Account" msgstr "Cuenta" -#: ../sflphone-client-gnome/src/config/assistant.c:269 +#: ../sflphone-client-gnome/src/config/assistant.c:288 msgid "Please select one of the following options" msgstr "Por favor, elija una de las siguientes opciones" -#: ../sflphone-client-gnome/src/config/assistant.c:271 +#: ../sflphone-client-gnome/src/config/assistant.c:290 msgid "Create a free SIP/IAX2 account on sflphone.org" msgstr "Crear una cuenta SIP/IAX2 gratis en sflphone.org" -#: ../sflphone-client-gnome/src/config/assistant.c:273 +#: ../sflphone-client-gnome/src/config/assistant.c:292 msgid "Register an existing SIP or IAX2 account" msgstr "Registrar una cuenta SIP o IAX2 existente" -#: ../sflphone-client-gnome/src/config/assistant.c:286 +#: ../sflphone-client-gnome/src/config/assistant.c:306 msgid "SIP account settings" msgstr "Configuración de cuenta SIP" -#: ../sflphone-client-gnome/src/config/assistant.c:286 -#: ../sflphone-client-gnome/src/config/assistant.c:394 +#: ../sflphone-client-gnome/src/config/assistant.c:306 +#: ../sflphone-client-gnome/src/config/assistant.c:419 msgid "Please fill the following information" msgstr "Por favor, ingrese la siguiente información" -#: ../sflphone-client-gnome/src/config/assistant.c:352 -#: ../sflphone-client-gnome/src/config/assistant.c:381 +#: ../sflphone-client-gnome/src/config/assistant.c:376 +#: ../sflphone-client-gnome/src/config/assistant.c:405 msgid "Secure communications with _ZRTP" msgstr "Communicaciòn segura con _ZRTP" -#: ../sflphone-client-gnome/src/config/assistant.c:365 +#: ../sflphone-client-gnome/src/config/assistant.c:389 msgid "Optional email address" msgstr "Dirección de correo opcional" -#: ../sflphone-client-gnome/src/config/assistant.c:365 +#: ../sflphone-client-gnome/src/config/assistant.c:389 msgid "This email address will be used to send your voicemail messages." msgstr "Esta dirección de correo se usará para mandar sus mensajes de voz" -#: ../sflphone-client-gnome/src/config/assistant.c:373 +#: ../sflphone-client-gnome/src/config/assistant.c:397 msgid "_Email address" msgstr "_Correo" -#: ../sflphone-client-gnome/src/config/assistant.c:394 +#: ../sflphone-client-gnome/src/config/assistant.c:419 msgid "IAX2 account settings" msgstr "Configuración de cuenta IAX2" -#: ../sflphone-client-gnome/src/config/assistant.c:467 +#: ../sflphone-client-gnome/src/config/assistant.c:496 msgid "Network Address Translation (NAT)" msgstr "Conversión de Dirección de Red (NAT)" -#: ../sflphone-client-gnome/src/config/assistant.c:467 +#: ../sflphone-client-gnome/src/config/assistant.c:496 msgid "You should probably enable this if you are behind a firewall." -msgstr "" -"Probablemente tiene que activar esto si está detrás de un cortafuegos." +msgstr "Probablemente tiene que activar esto si está detrás de un cortafuegos." -#: ../sflphone-client-gnome/src/config/assistant.c:476 +#: ../sflphone-client-gnome/src/config/assistant.c:505 msgid "E_nable STUN" msgstr "A_ctivar STUN" -#: ../sflphone-client-gnome/src/config/assistant.c:483 +#: ../sflphone-client-gnome/src/config/assistant.c:512 msgid "_STUN server" msgstr "_Servidor STUN" -#: ../sflphone-client-gnome/src/config/assistant.c:497 +#: ../sflphone-client-gnome/src/config/assistant.c:526 msgid "Account Registration" msgstr "Registro de cuenta" -#: ../sflphone-client-gnome/src/config/assistant.c:497 +#: ../sflphone-client-gnome/src/config/assistant.c:526 msgid "Congratulations!" msgstr "¡Enhorabuena!" -#: ../sflphone-client-gnome/src/config/audioconf.c:583 +#: ../sflphone-client-gnome/src/config/audioconf.c:582 msgid "Frequency" msgstr "Frecuencia" -#: ../sflphone-client-gnome/src/config/audioconf.c:588 +#: ../sflphone-client-gnome/src/config/audioconf.c:587 msgid "Bitrate" msgstr "Tasa de transferencia" -#: ../sflphone-client-gnome/src/config/audioconf.c:593 +#: ../sflphone-client-gnome/src/config/audioconf.c:592 msgid "Bandwidth" msgstr "Ancho de banda" -#: ../sflphone-client-gnome/src/config/audioconf.c:673 +#: ../sflphone-client-gnome/src/config/audioconf.c:670 msgid "ALSA plugin" msgstr "Plugin ALSA" -#: ../sflphone-client-gnome/src/config/audioconf.c:695 +#: ../sflphone-client-gnome/src/config/audioconf.c:692 msgid "Output" msgstr "Salida" -#: ../sflphone-client-gnome/src/config/audioconf.c:717 +#: ../sflphone-client-gnome/src/config/audioconf.c:714 msgid "Input" msgstr "Entrada" -#: ../sflphone-client-gnome/src/config/audioconf.c:752 +#: ../sflphone-client-gnome/src/config/audioconf.c:749 msgid "_Voice Activity Detection" msgstr "_Detección de actividad de voz" -#: ../sflphone-client-gnome/src/config/audioconf.c:762 +#: ../sflphone-client-gnome/src/config/audioconf.c:759 msgid "_Noise Reduction (Narrow-Band Companding)" msgstr "_Reducción de ruido" -#: ../sflphone-client-gnome/src/config/audioconf.c:798 +#: ../sflphone-client-gnome/src/config/audioconf.c:800 msgid "Sound Manager" msgstr "Gestor de audio" -#: ../sflphone-client-gnome/src/config/audioconf.c:807 +#: ../sflphone-client-gnome/src/config/audioconf.c:809 msgid "_Pulseaudio" msgstr "_Pulseaudio" -#: ../sflphone-client-gnome/src/config/audioconf.c:811 +#: ../sflphone-client-gnome/src/config/audioconf.c:813 msgid "_ALSA" msgstr "_ALSA" -#: ../sflphone-client-gnome/src/config/audioconf.c:816 -msgid "_Mute other applications during a call" -msgstr "Silenciar otras aplicaciones durante una llamada" - -#: ../sflphone-client-gnome/src/config/audioconf.c:823 +#: ../sflphone-client-gnome/src/config/audioconf.c:819 msgid "ALSA settings" msgstr "Configuración de ALSA" -#: ../sflphone-client-gnome/src/config/audioconf.c:840 +#: ../sflphone-client-gnome/src/config/audioconf.c:836 msgid "Codecs" msgstr "Códecs" -#: ../sflphone-client-gnome/src/config/audioconf.c:869 +#: ../sflphone-client-gnome/src/config/audioconf.c:865 msgid "Recordings" msgstr "Grabaciones" -#: ../sflphone-client-gnome/src/config/audioconf.c:873 +#: ../sflphone-client-gnome/src/config/audioconf.c:869 msgid "Destination folder" msgstr "Carpeta de destino" -#: ../sflphone-client-gnome/src/config/audioconf.c:877 +#: ../sflphone-client-gnome/src/config/audioconf.c:873 msgid "Select a folder" msgstr "Seleccione una carpeta" -#: ../sflphone-client-gnome/src/config/audioconf.c:883 +#: ../sflphone-client-gnome/src/config/audioconf.c:879 msgid "Ringtones" msgstr "Tonos de llamada" -#: ../sflphone-client-gnome/src/config/audioconf.c:889 +#: ../sflphone-client-gnome/src/config/audioconf.c:885 msgid "_Enable ringtones" msgstr "_Habilitar tonos de llamada" -#: ../sflphone-client-gnome/src/config/audioconf.c:895 +#: ../sflphone-client-gnome/src/config/audioconf.c:891 msgid "Choose a ringtone" msgstr "Elija un tono de llmada" -#: ../sflphone-client-gnome/src/config/audioconf.c:901 +#: ../sflphone-client-gnome/src/config/audioconf.c:897 msgid "Audio Files" msgstr "Archivos de Audio" @@ -826,7 +992,7 @@ msgstr "Reescritura de número de teléfono" msgid "_Prefix dialed numbers with" msgstr "_Prefijar los números marcados con" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:195 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:225 msgid "" "This profile is used when you want to reach a remote peer simply by typing a " "sip URI such as <b>sip:remotepeer</b>. The settings you define here will " @@ -837,79 +1003,59 @@ msgstr "" "usted define aqui serán también utilizados si ninguná cuenta puede ser " "igualada a una llamada entrante o saliente." -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:274 -msgid "SIP Port" -msgstr "Puerto SIP" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:281 -msgid "UDP Transport" -msgstr "Transporte UDP" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:319 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:440 msgid "Desktop Notifications" msgstr "Notificación de escritorio" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:323 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:444 msgid "_Enable notifications" msgstr "_Activar notificaciones" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:329 -msgid "Enable voicemail _notifications" -msgstr "Activar _notificaciones de mensajes de voz" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:341 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:450 msgid "System Tray Icon" msgstr "Icono de bandeja del sistema" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:344 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:453 msgid "_Popup main window on incoming call" msgstr "_Popup ventana principal al recibir llamadas" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:349 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:457 msgid "Ne_ver popup main window" msgstr "_Nunca mostrar ventana principal" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:353 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:463 msgid "Hide SFLphone window on _startup" msgstr "Esconder SFLphone al principio" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:359 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:469 msgid "Calls History" msgstr "Historia de llamadas" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:362 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:472 msgid "_Keep my history for at least" msgstr "_Guardar mi historia por lo menos" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:373 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:483 msgid "days" msgstr "días" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:377 -msgid "Configuration File" -msgstr "Archivo de configuración" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:379 -msgid "Store SIP credentials as MD5 hash" -msgstr "Guarda informaciòn SIP como hash MD5" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:423 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:536 msgid "Preferences" msgstr "Preferencias" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:448 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:561 msgid "Audio" msgstr "Sonido" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:453 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:566 msgid "Address Book" msgstr "Libreta de Direcciones" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:458 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:571 msgid "Hooks" msgstr "Disparadores" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:468 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:581 msgid "Direct IP calls" msgstr "Llamadas IP directas" @@ -917,11 +1063,11 @@ msgstr "Llamadas IP directas" msgid "Advanced options for TLS" msgstr "Opciones avanzadas por TLS" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:55 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:56 msgid "TLS transport" msgstr "Transporte TLS" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:59 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:60 msgid "" "TLS transport can be used along with UDP for those calls that would\n" "require secure sip transactions (aka SIPS). You can configure a different\n" @@ -934,55 +1080,55 @@ msgstr "" "diferente transporte TLS para cada cuenta. De cualquier forma, cada uno de " "ellos usará un puerto dedicado, diferente el uno del otro.\n" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:100 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:103 msgid "Certificate of Authority list" msgstr "Lista de Certificados de Autoridad" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:104 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:107 msgid "Choose a CA list file (optional)" msgstr "Escoge un archivo de lista de CA (opcional)" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:115 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:131 msgid "Public endpoint certificate file" msgstr "Archivo del certificado del par público" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:119 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:135 msgid "Choose a public endpoint certificate (optional)" msgstr "Escoge un certificado de par público (opcional)" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:134 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:159 msgid "Choose a private key file (optional)" msgstr "Escoge un archivo de clave privada" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:145 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:181 msgid "Password for the private key" msgstr "Contraseña de clave privada" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:168 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:204 msgid "TLS protocol method" msgstr "Método de protocolo TLS" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:202 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:238 msgid "TLS cipher list" msgstr "Lista de cifrado TLS" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:211 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:247 msgid "Server name instance for outgoing TLS connection" msgstr "Nombre del servidor para conección TLS saliente" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:219 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:255 msgid "Negotiation timeout (sec:msec)" msgstr "Negociación expirada" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:236 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:272 msgid "Verify incoming certificates, as a server" msgstr "Checar certificados entrantes, como un servidor" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:242 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:278 msgid "Verify certificates from answer, as a client" msgstr "Checar certificados de la respuesta, como cliente" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:248 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:284 msgid "Require certificate for incoming tls connections" msgstr "Requiere certificado para conecciones TLS entrantes" @@ -990,45 +1136,84 @@ msgstr "Requiere certificado para conecciones TLS entrantes" msgid "ZRTP Options" msgstr "Opciones ZRTP" -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:68 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:69 msgid "Send Hello Hash in S_DP" msgstr "Enviar Hello Hash en S_DP" -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:74 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:75 msgid "Ask User to Confirm SAS" msgstr "Preguntar al usuario de confirmar SAS" -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:80 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:81 msgid "_Warn if ZRTP not supported" msgstr "_Prevenir si ZRTP no es compatible" -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:86 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:87 msgid "Display SAS once for hold events" msgstr "Presentar SAS una vez para eventos en espera" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:56 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:58 msgid "Search all" msgstr "Buscar todos" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:57 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:70 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:82 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:94 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:59 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:72 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:84 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:96 msgid "Click here to change the search type" msgstr "Haz clic aqui para cambiar el type de busqueda" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:69 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:71 msgid "Search by missed call" msgstr "Buscar en llamadas pérdidas" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:81 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:83 msgid "Search by incoming call" msgstr "Buscar en llamadas entrantes" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:93 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:95 msgid "Search by outgoing call" msgstr "Buscar en llamadas salientes" +#~ msgid "IP call - %s" +#~ msgstr "Llamada IP - %s" + +#~ msgid "Codec" +#~ msgstr "Códec" + +#~ msgid "Network" +#~ msgstr "Red" + +#~ msgid "Manually" +#~ msgstr "Manualmente" + +#~ msgid "There " +#~ msgstr "Alla " + +#~ msgid "is " +#~ msgstr "es " + +#~ msgid "are " +#~ msgstr "son " + +#~ msgid "s" +#~ msgstr "s" + +#~ msgid "_Mute other applications during a call" +#~ msgstr "Silenciar otras aplicaciones durante una llamada" + +#~ msgid "SIP Port" +#~ msgstr "Puerto SIP" + +#~ msgid "UDP Transport" +#~ msgstr "Transporte UDP" + +#~ msgid "Enable voicemail _notifications" +#~ msgstr "Activar _notificaciones de mensajes de voz" + +#~ msgid "Store SIP credentials as MD5 hash" +#~ msgstr "Guarda informaciòn SIP como hash MD5" + #~ msgctxt "account state" #~ msgid "Registered" #~ msgstr "Registrado" @@ -1047,9 +1232,6 @@ msgstr "Buscar en llamadas salientes" #~ msgid "Stun Server" #~ msgstr "Servidor STUN" -#~ msgid "Transfer to : " -#~ msgstr "Transferir a : " - #~ msgid "Default account" #~ msgstr "Cuenta por defecto" @@ -1065,9 +1247,6 @@ msgstr "Buscar en llamadas salientes" #~ msgid "Incoming call" #~ msgstr "Llamada entrante" -#~ msgid "Transfer" -#~ msgstr "Transferir" - #~ msgid "Hang up" #~ msgstr "Colgar" @@ -1090,9 +1269,6 @@ msgstr "Buscar en llamadas salientes" #~ msgid "Recordings" #~ msgstr "Grabaciones" -#~ msgid "Remove the selected account" -#~ msgstr "Eliminar la cuenta seleccionada" - #~ msgid "Remove" #~ msgstr "Eliminar" @@ -1130,21 +1306,6 @@ msgstr "Buscar en llamadas salientes" #~ msgid "Configure SFLphone" #~ msgstr "Configurar SFLphone" -#~ msgid "_Help" -#~ msgstr "_Ayuda" - -#~ msgid "_Call" -#~ msgstr "_Llamar" - -#~ msgid "_Edit" -#~ msgstr "_Editar" - -#~ msgid "_Accounts" -#~ msgstr "_Cuentas" - -#~ msgid "_View" -#~ msgstr "_Ver" - #~ msgid "Port" #~ msgstr "Puerto" @@ -1198,12 +1359,6 @@ msgstr "Buscar en llamadas salientes" #~ msgid "Address book loading..." #~ msgstr "Cargando el directorio..." -#~ msgid "Call history" -#~ msgstr "Historia de Llamada" - -#~ msgid "Address book" -#~ msgstr "Libreta de contactos" - #~ msgid "Edit before call" #~ msgstr "Editar antes de llamar" @@ -1294,18 +1449,12 @@ msgstr "Buscar en llamadas salientes" #~ msgid "Prefix dialed numbers with" #~ msgstr "Prefijar los números marcados con" -#~ msgid "History" -#~ msgstr "Historia de Llamada" - #~ msgid "Attention:number of results exceeds max displayed." #~ msgstr "Cuidado:número de resultatos excede el maximo a mostrar." #~ msgid "_Account creation wizard" #~ msgstr "Asistente de configuración de cuentas" -#~ msgid "_Volume controls" -#~ msgstr "_Controles de volumen" - #~ msgid "_Enable this account" #~ msgstr "_Habilitar esta cuenta" @@ -1435,9 +1584,6 @@ msgstr "Buscar en llamadas salientes" #~ msgid "\"Voicemail\" <%s>" #~ msgstr "\"Mensaje\" <%s>" -#~ msgid "Off Hold" -#~ msgstr "Seguir" - #~ msgid "Record a call" #~ msgstr "Grabar una llamada" @@ -1535,20 +1681,20 @@ msgstr "Buscar en llamadas salientes" #~ msgstr "Retomar" #~ msgid "" -#~ "This button will remove the selected account in the list below. Be sure you " -#~ "really don't need it anymore. If you think you might use it again later, " -#~ "just uncheck it." +#~ "This button will remove the selected account in the list below. Be sure " +#~ "you really don't need it anymore. If you think you might use it again " +#~ "later, just uncheck it." #~ msgstr "" -#~ "Este botón elimina la cuenta seleccionada en la siguiente lista. Asegúrese " -#~ "de no necesitarla más. Si cree que la pueda necesitar más adelante, " -#~ "simplemente quité la selección." +#~ "Este botón elimina la cuenta seleccionada en la siguiente lista. " +#~ "Asegúrese de no necesitarla más. Si cree que la pueda necesitar más " +#~ "adelante, simplemente quité la selección." #~ msgid "" -#~ "This button enables you to initialize a new account. You will then be able " -#~ "to edit it using the form on the right." +#~ "This button enables you to initialize a new account. You will then be " +#~ "able to edit it using the form on the right." #~ msgstr "" -#~ "Este botón le permite inicializar una nueva cuenta. Usted podrá corregirlo " -#~ "con el formulario a la derecha." +#~ "Este botón le permite inicializar una nueva cuenta. Usted podrá " +#~ "corregirlo con el formulario a la derecha." #~ msgid "" #~ "By default, when you place a call, sflphone will use the first account in " @@ -1571,18 +1717,12 @@ msgstr "Buscar en llamadas salientes" #~ msgid "Display phone numbers of these types :" #~ msgstr "Mostrar números de este tipo:" -#~ msgid "Clear history" -#~ msgstr "Limpiar historial" - #~ msgid "Display dialpad" #~ msgstr "Mostrar teclado" #~ msgid "Command to run" #~ msgstr "Comando a ejecutar" -#~ msgid "Clear _history" -#~ msgstr "_Limpiar historial" - #~ msgid "Keep my history for at least" #~ msgstr "Guardar el historial al menos" @@ -1598,11 +1738,11 @@ msgstr "Buscar en llamadas salientes" #~ msgstr "NAT Traversal" #~ msgid "" -#~ "Pressing \"apply\" will restart the network layer. Otherwise, SFLPhone would " -#~ "have to be restarted." +#~ "Pressing \"apply\" will restart the network layer. Otherwise, SFLPhone " +#~ "would have to be restarted." #~ msgstr "" -#~ "Presionar “aplica” recomenzará la capa de red. Si no, SFLPhone tendría que " -#~ "ser reiniciado." +#~ "Presionar “aplica” recomenzará la capa de red. Si no, SFLPhone tendría " +#~ "que ser reiniciado." #~ msgid "_Volume Controls" #~ msgstr "_Controles de Volumen" @@ -1619,26 +1759,29 @@ msgstr "Buscar en llamadas salientes" #~ msgid "" #~ "By default, when you place a call, sflphone will use the first account in " #~ "this list which is \"registered\". Change the order of the accounts using " -#~ "the \"Up\" and \"Down\" arrows. Enable/disable them by checking/unchecking " -#~ "them on the left of the item. Add or remove some with \"Plus\" and \"Sub\" " -#~ "buttons. Edit the selected account with the form on the right." +#~ "the \"Up\" and \"Down\" arrows. Enable/disable them by checking/" +#~ "unchecking them on the left of the item. Add or remove some with \"Plus\" " +#~ "and \"Sub\" buttons. Edit the selected account with the form on the right." #~ msgstr "" #~ "Por defecto, cuando usted realiza una llamada, sflphone usará la primera " -#~ "cuenta en esta lista que este \"registrada\". Cambie el orden de las cuentas " -#~ "usando las flechas \"Arriba\" y \"Abajo\". Las Activa/desactiva marcando la " -#~ "opción de la izquierda. Adiciona o elimina con los botones de \"Más\" o " -#~ "\"Menos\". Edita la cuenta seleccionada con el formulario a la derecha." +#~ "cuenta en esta lista que este \"registrada\". Cambie el orden de las " +#~ "cuentas usando las flechas \"Arriba\" y \"Abajo\". Las Activa/desactiva " +#~ "marcando la opción de la izquierda. Adiciona o elimina con los botones de " +#~ "\"Más\" o \"Menos\". Edita la cuenta seleccionada con el formulario a la " +#~ "derecha." #~ msgctxt "NAME OF TRANSLATORS" #~ msgid "Your names" #~ msgstr "" #~ "Maxime Chambreuil, ,Launchpad Contributions:,Andres Mujica,Maxime " -#~ "Chambreuil, ,Launchpad Contributions:,Andres Mujica,Maxime Chambreuil, " -#~ ",Launchpad Contributions:,Andres Mujica,Maxime Chambreuil" +#~ "Chambreuil, ,Launchpad Contributions:,Andres Mujica,Maxime Chambreuil, ," +#~ "Launchpad Contributions:,Andres Mujica,Maxime Chambreuil, ,Launchpad " +#~ "Contributions:,Andres Mujica,Maxime Chambreuil" #~ msgctxt "EMAIL OF TRANSLATORS" #~ msgid "Your emails" #~ msgstr "" -#~ "maxime.chambreuil@savoirfairelinux.com,,,andres.mujica@seaq.com.co,maxime.cha" -#~ "mbreuil@gmail.com,,,andres.mujica@seaq.com.co,maxime.chambreuil@gmail.com,,,a" -#~ "ndres.mujica@seaq.com.co,maxime.chambreuil@gmail.com" +#~ "maxime.chambreuil@savoirfairelinux.com,,,andres.mujica@seaq.com.co,maxime." +#~ "chambreuil@gmail.com,,,andres.mujica@seaq.com.co,maxime.chambreuil@gmail." +#~ "com,,,andres.mujica@seaq.com.co,maxime.chambreuil@gmail.com,,,andres." +#~ "mujica@seaq.com.co,maxime.chambreuil@gmail.com" diff --git a/sflphone-client-gnome/po/fr/fr.po b/sflphone-client-gnome/po/fr/fr.po index 53cac66386..c7ace4f55b 100644 --- a/sflphone-client-gnome/po/fr/fr.po +++ b/sflphone-client-gnome/po/fr/fr.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: SFLphone 0.9.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-11-12 14:02-0500\n" +"POT-Creation-Date: 2009-12-03 10:22-0500\n" "PO-Revision-Date: 2009-10-26 20:46+0000\n" "Last-Translator: Maxime Chambreuil <maxime.chambreuil@gmail.com>\n" "Language-Team: SavoirFaireLinux Inc <sflphoneteam@savoirfairelinux.com>\n" @@ -62,15 +62,15 @@ msgstr "Serveur Stun invalide" msgid "Invalid" msgstr "Non valide" -#: ../sflphone-client-gnome/src/actions.c:72 +#: ../sflphone-client-gnome/src/actions.c:98 msgid "Using account" msgstr "Utilise le compte" -#: ../sflphone-client-gnome/src/actions.c:78 +#: ../sflphone-client-gnome/src/actions.c:104 msgid "No registered accounts" msgstr "Pas de compte enregistré" -#: ../sflphone-client-gnome/src/actions.c:259 +#: ../sflphone-client-gnome/src/actions.c:285 msgid "" "Unable to connect to the SFLphone server.\n" "Make sure the daemon is running." @@ -78,11 +78,12 @@ msgstr "" "Impossible de se connecter au serveur SFLphone.\n" " Assurez-vous que le démon est lancé." -#: ../sflphone-client-gnome/src/actions.c:879 +#: ../sflphone-client-gnome/src/actions.c:589 +#: ../sflphone-client-gnome/src/actions.c:911 msgid "Direct SIP call" msgstr "Appel direct SIP" -#: ../sflphone-client-gnome/src/actions.c:1071 +#: ../sflphone-client-gnome/src/actions.c:1103 #, c-format msgid "" "<b>Error: No audio codecs found.\n" @@ -137,31 +138,31 @@ msgstr "Vous avez des appels en cours." msgid "Do you still want to quit?" msgstr "Voulez-vous quitter?" -#: ../sflphone-client-gnome/src/mainwindow.c:297 +#: ../sflphone-client-gnome/src/mainwindow.c:298 msgid "SFLphone Error" msgstr "Erreur SFLphone" -#: ../sflphone-client-gnome/src/mainwindow.c:391 +#: ../sflphone-client-gnome/src/mainwindow.c:392 #, c-format msgid "ZRTP is not supported by peer %s\n" msgstr "ZRTP n'est pas supporté par %s\n" -#: ../sflphone-client-gnome/src/mainwindow.c:392 +#: ../sflphone-client-gnome/src/mainwindow.c:393 msgid "Secure Communication Unavailable" msgstr "Communications sécurisées non disponibles" -#: ../sflphone-client-gnome/src/mainwindow.c:393 -#: ../sflphone-client-gnome/src/mainwindow.c:415 +#: ../sflphone-client-gnome/src/mainwindow.c:394 +#: ../sflphone-client-gnome/src/mainwindow.c:416 msgid "Continue" msgstr "Continuer" -#: ../sflphone-client-gnome/src/mainwindow.c:394 -#: ../sflphone-client-gnome/src/mainwindow.c:416 -#: ../sflphone-client-gnome/src/mainwindow.c:430 +#: ../sflphone-client-gnome/src/mainwindow.c:395 +#: ../sflphone-client-gnome/src/mainwindow.c:417 +#: ../sflphone-client-gnome/src/mainwindow.c:431 msgid "Stop Call" msgstr "Arrêter l'appel" -#: ../sflphone-client-gnome/src/mainwindow.c:413 +#: ../sflphone-client-gnome/src/mainwindow.c:414 #, c-format msgid "" "A %s error forced the call with %s to fall under unencrypted mode.\n" @@ -170,11 +171,11 @@ msgstr "" "L'appel avec %s est passé en mode non-crypté à cause d'une erreur %s.\n" "Raison exacte: %s\n" -#: ../sflphone-client-gnome/src/mainwindow.c:414 +#: ../sflphone-client-gnome/src/mainwindow.c:415 msgid "ZRTP negotiation failed" msgstr "Erreur d'authentification" -#: ../sflphone-client-gnome/src/mainwindow.c:427 +#: ../sflphone-client-gnome/src/mainwindow.c:428 #, c-format msgid "" "%s wants to stop using secure communication. Confirm will resume " @@ -183,11 +184,11 @@ msgstr "" "%s ne désire plus utiliser la communication sécurisée. Confirmer que vous " "voulez continuer sans ZRTP.\n" -#: ../sflphone-client-gnome/src/mainwindow.c:428 +#: ../sflphone-client-gnome/src/mainwindow.c:429 msgid "Confirm Go Clear" msgstr "Confirmer Communication en clair" -#: ../sflphone-client-gnome/src/mainwindow.c:429 +#: ../sflphone-client-gnome/src/mainwindow.c:430 msgid "Confirm" msgstr "Confirmer" @@ -258,15 +259,15 @@ msgstr "Volume des hauts-parleurs" msgid "Mic volume" msgstr "Volume du micro" -#: ../sflphone-client-gnome/src/statusicon.c:91 +#: ../sflphone-client-gnome/src/statusicon.c:96 msgid "_Show main window" msgstr "_Afficher la fenêtre principale" -#: ../sflphone-client-gnome/src/statusicon.c:126 +#: ../sflphone-client-gnome/src/statusicon.c:131 msgid "SFLphone" msgstr "SFLphone" -#: ../sflphone-client-gnome/src/statusicon.c:127 +#: ../sflphone-client-gnome/src/statusicon.c:132 #, c-format msgid "%i account configured" msgid_plural "%i accounts configured" @@ -274,388 +275,395 @@ msgstr[0] "%i compte configuré" msgstr[1] "%i comptes configurés" #: ../sflphone-client-gnome/src/toolbar.c:38 -#: ../sflphone-client-gnome/src/uimanager.c:628 -#: ../sflphone-client-gnome/src/uimanager.c:662 +#: ../sflphone-client-gnome/src/uimanager.c:693 +#: ../sflphone-client-gnome/src/uimanager.c:727 msgid "Voicemail" msgstr "Boite vocale" -#: ../sflphone-client-gnome/src/uimanager.c:115 +#: ../sflphone-client-gnome/src/uimanager.c:117 msgid "No address book selected" msgstr "Aucun carnet d'adresses sélectionné" -#: ../sflphone-client-gnome/src/uimanager.c:135 -#: ../sflphone-client-gnome/src/uimanager.c:691 +#: ../sflphone-client-gnome/src/uimanager.c:137 +#: ../sflphone-client-gnome/src/uimanager.c:756 msgid "Address book" msgstr "Carnet d'adresses" -#: ../sflphone-client-gnome/src/uimanager.c:237 +#: ../sflphone-client-gnome/src/uimanager.c:279 #, c-format msgid "Voicemail (%i)" msgstr "Boite vocale (%i)" -#: ../sflphone-client-gnome/src/uimanager.c:300 +#: ../sflphone-client-gnome/src/uimanager.c:342 msgid "SFLphone is a VoIP client compatible with SIP and IAX2 protocols." msgstr "" "SFLphone est un client VoIP compatible avec les protocoles SIP et IAX2." -#: ../sflphone-client-gnome/src/uimanager.c:303 +#: ../sflphone-client-gnome/src/uimanager.c:345 msgid "About SFLphone" msgstr "A propos de SFLphone" -#: ../sflphone-client-gnome/src/uimanager.c:654 +#: ../sflphone-client-gnome/src/uimanager.c:719 msgid "Call" msgstr "Actions" -#: ../sflphone-client-gnome/src/uimanager.c:655 -#: ../sflphone-client-gnome/src/uimanager.c:1119 +#: ../sflphone-client-gnome/src/uimanager.c:720 +#: ../sflphone-client-gnome/src/uimanager.c:1184 msgid "_New call" msgstr "_Nouvel appel" -#: ../sflphone-client-gnome/src/uimanager.c:655 +#: ../sflphone-client-gnome/src/uimanager.c:720 msgid "Place a new call" msgstr "Appeler" -#: ../sflphone-client-gnome/src/uimanager.c:656 -#: ../sflphone-client-gnome/src/uimanager.c:914 +#: ../sflphone-client-gnome/src/uimanager.c:721 +#: ../sflphone-client-gnome/src/uimanager.c:979 msgid "_Pick up" msgstr "_Décrocher" -#: ../sflphone-client-gnome/src/uimanager.c:656 +#: ../sflphone-client-gnome/src/uimanager.c:721 msgid "Answer the call" msgstr "Répondre à l'appel" -#: ../sflphone-client-gnome/src/uimanager.c:657 -#: ../sflphone-client-gnome/src/uimanager.c:926 -#: ../sflphone-client-gnome/src/uimanager.c:967 +#: ../sflphone-client-gnome/src/uimanager.c:722 +#: ../sflphone-client-gnome/src/uimanager.c:991 +#: ../sflphone-client-gnome/src/uimanager.c:1032 msgid "_Hang up" msgstr "_Raccrocher" -#: ../sflphone-client-gnome/src/uimanager.c:657 +#: ../sflphone-client-gnome/src/uimanager.c:722 msgid "Finish the call" msgstr "Terminer l'appel" -#: ../sflphone-client-gnome/src/uimanager.c:658 +#: ../sflphone-client-gnome/src/uimanager.c:723 msgid "O_n hold" msgstr "Mettre en attente" -#: ../sflphone-client-gnome/src/uimanager.c:658 +#: ../sflphone-client-gnome/src/uimanager.c:723 msgid "Place the call on hold" msgstr "Mettre l'appel en attente" -#: ../sflphone-client-gnome/src/uimanager.c:659 +#: ../sflphone-client-gnome/src/uimanager.c:724 msgid "O_ff hold" msgstr "Reprendre" -#: ../sflphone-client-gnome/src/uimanager.c:659 +#: ../sflphone-client-gnome/src/uimanager.c:724 msgid "Place the call off hold" msgstr "Reprendre l'appel" -#: ../sflphone-client-gnome/src/uimanager.c:660 -#: ../sflphone-client-gnome/src/uimanager.c:950 +#: ../sflphone-client-gnome/src/uimanager.c:725 +#: ../sflphone-client-gnome/src/uimanager.c:1015 msgid "_Record" msgstr "Enregistrer" -#: ../sflphone-client-gnome/src/uimanager.c:660 +#: ../sflphone-client-gnome/src/uimanager.c:725 msgid "Record the current conversation" msgstr "Enregistrer la conversation courante" -#: ../sflphone-client-gnome/src/uimanager.c:661 +#: ../sflphone-client-gnome/src/uimanager.c:726 msgid "Configuration _Assistant" msgstr "_Assistant de configuration" -#: ../sflphone-client-gnome/src/uimanager.c:661 +#: ../sflphone-client-gnome/src/uimanager.c:726 msgid "Run the configuration assistant" msgstr "Lancer l'assistant de configuration" -#: ../sflphone-client-gnome/src/uimanager.c:662 +#: ../sflphone-client-gnome/src/uimanager.c:727 msgid "Call your voicemail" msgstr "Appeler la boite vocale" -#: ../sflphone-client-gnome/src/uimanager.c:663 +#: ../sflphone-client-gnome/src/uimanager.c:728 msgid "_Close" msgstr "_Fermer" -#: ../sflphone-client-gnome/src/uimanager.c:663 +#: ../sflphone-client-gnome/src/uimanager.c:728 msgid "Minimize to system tray" msgstr "Minimiser dans la barre des tâches" -#: ../sflphone-client-gnome/src/uimanager.c:664 +#: ../sflphone-client-gnome/src/uimanager.c:729 msgid "_Quit" msgstr "_Quitter" -#: ../sflphone-client-gnome/src/uimanager.c:664 +#: ../sflphone-client-gnome/src/uimanager.c:729 msgid "Quit the program" msgstr "Quitter le programme" -#: ../sflphone-client-gnome/src/uimanager.c:667 +#: ../sflphone-client-gnome/src/uimanager.c:732 msgid "_Edit" msgstr "_Editer" -#: ../sflphone-client-gnome/src/uimanager.c:668 +#: ../sflphone-client-gnome/src/uimanager.c:733 msgid "_Copy" msgstr "_Copier" -#: ../sflphone-client-gnome/src/uimanager.c:668 +#: ../sflphone-client-gnome/src/uimanager.c:733 msgid "Copy the selection" msgstr "Copier la sélection" -#: ../sflphone-client-gnome/src/uimanager.c:669 +#: ../sflphone-client-gnome/src/uimanager.c:734 msgid "_Paste" msgstr "C_oller" -#: ../sflphone-client-gnome/src/uimanager.c:669 +#: ../sflphone-client-gnome/src/uimanager.c:734 msgid "Paste the clipboard" msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:670 +#: ../sflphone-client-gnome/src/uimanager.c:735 msgid "Clear _history" msgstr "Effacer l'_historique" -#: ../sflphone-client-gnome/src/uimanager.c:670 +#: ../sflphone-client-gnome/src/uimanager.c:735 msgid "Clear the call history" msgstr "Effacer l'historique" -#: ../sflphone-client-gnome/src/uimanager.c:671 +#: ../sflphone-client-gnome/src/uimanager.c:736 msgid "_Accounts" msgstr "Co_mptes" -#: ../sflphone-client-gnome/src/uimanager.c:671 +#: ../sflphone-client-gnome/src/uimanager.c:736 msgid "Edit your accounts" msgstr "Éditer les comptes" -#: ../sflphone-client-gnome/src/uimanager.c:672 +#: ../sflphone-client-gnome/src/uimanager.c:737 msgid "_Preferences" msgstr "Préférences" -#: ../sflphone-client-gnome/src/uimanager.c:672 +#: ../sflphone-client-gnome/src/uimanager.c:737 msgid "Change your preferences" msgstr "Modifier les préférences" -#: ../sflphone-client-gnome/src/uimanager.c:675 +#: ../sflphone-client-gnome/src/uimanager.c:740 msgid "_View" msgstr "A_ffichage" -#: ../sflphone-client-gnome/src/uimanager.c:678 +#: ../sflphone-client-gnome/src/uimanager.c:743 msgid "_Help" msgstr "A_ide" -#: ../sflphone-client-gnome/src/uimanager.c:679 +#: ../sflphone-client-gnome/src/uimanager.c:744 msgid "Contents" msgstr "Sommaire" -#: ../sflphone-client-gnome/src/uimanager.c:679 +#: ../sflphone-client-gnome/src/uimanager.c:744 msgid "Open the manual" msgstr "Ouvrir le manuel" -#: ../sflphone-client-gnome/src/uimanager.c:680 +#: ../sflphone-client-gnome/src/uimanager.c:745 msgid "About this application" msgstr "À propos de cette application" -#: ../sflphone-client-gnome/src/uimanager.c:686 +#: ../sflphone-client-gnome/src/uimanager.c:751 msgid "_Transfer" msgstr "Transférer" -#: ../sflphone-client-gnome/src/uimanager.c:686 +#: ../sflphone-client-gnome/src/uimanager.c:751 msgid "Transfer the call" msgstr "Transférer à : " -#: ../sflphone-client-gnome/src/uimanager.c:687 +#: ../sflphone-client-gnome/src/uimanager.c:752 msgid "_Show toolbar" msgstr "Afficher la _barre d'outil" -#: ../sflphone-client-gnome/src/uimanager.c:687 +#: ../sflphone-client-gnome/src/uimanager.c:752 msgid "Show the toolbar" msgstr "Afficher la barre d'outil" -#: ../sflphone-client-gnome/src/uimanager.c:688 +#: ../sflphone-client-gnome/src/uimanager.c:753 msgid "_Dialpad" msgstr "_Clavier" -#: ../sflphone-client-gnome/src/uimanager.c:688 +#: ../sflphone-client-gnome/src/uimanager.c:753 msgid "Show the dialpad" msgstr "Afficher le clavier" -#: ../sflphone-client-gnome/src/uimanager.c:689 +#: ../sflphone-client-gnome/src/uimanager.c:754 msgid "_Volume controls" msgstr "Contrôle du _volume" -#: ../sflphone-client-gnome/src/uimanager.c:689 +#: ../sflphone-client-gnome/src/uimanager.c:754 msgid "Show the volume controls" msgstr "Afficher les controles du volume" -#: ../sflphone-client-gnome/src/uimanager.c:690 +#: ../sflphone-client-gnome/src/uimanager.c:755 msgid "_History" msgstr "Historique" -#: ../sflphone-client-gnome/src/uimanager.c:690 +#: ../sflphone-client-gnome/src/uimanager.c:755 msgid "Calls history" msgstr "Historique d'appels" -#: ../sflphone-client-gnome/src/uimanager.c:691 +#: ../sflphone-client-gnome/src/uimanager.c:756 msgid "_Address book" msgstr "Carnet d'adresses" -#: ../sflphone-client-gnome/src/uimanager.c:938 -#: ../sflphone-client-gnome/src/uimanager.c:979 +#: ../sflphone-client-gnome/src/uimanager.c:1003 +#: ../sflphone-client-gnome/src/uimanager.c:1044 msgid "On _Hold" msgstr "_Mettre en attente" -#: ../sflphone-client-gnome/src/uimanager.c:1042 +#: ../sflphone-client-gnome/src/uimanager.c:1107 msgid "_Call back" msgstr "_Rappeler" -#: ../sflphone-client-gnome/src/uimanager.c:1193 +#: ../sflphone-client-gnome/src/uimanager.c:1258 msgid "Edit phone number" msgstr "Éditer le numéro" -#: ../sflphone-client-gnome/src/uimanager.c:1204 +#: ../sflphone-client-gnome/src/uimanager.c:1269 msgid "Edit the phone number before making a call" msgstr "Éditer le numéro de téléphone avant d'appeler" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:172 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:180 msgid "Account Parameters" msgstr "Paramètres du Compte" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:181 -#: ../sflphone-client-gnome/src/config/assistant.c:307 -#: ../sflphone-client-gnome/src/config/assistant.c:415 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:189 +#: ../sflphone-client-gnome/src/config/assistant.c:314 +#: ../sflphone-client-gnome/src/config/assistant.c:427 msgid "_Alias" msgstr "A_lias" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:189 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:197 msgid "_Protocol" msgstr "P_rotocole" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:207 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:215 msgid "Unknown" msgstr "Inconnu" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:217 -#: ../sflphone-client-gnome/src/config/assistant.c:315 -#: ../sflphone-client-gnome/src/config/assistant.c:423 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:225 +#: ../sflphone-client-gnome/src/config/assistant.c:322 +#: ../sflphone-client-gnome/src/config/assistant.c:435 msgid "_Host name" msgstr "_Serveur" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:225 -#: ../sflphone-client-gnome/src/config/assistant.c:323 -#: ../sflphone-client-gnome/src/config/assistant.c:431 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:233 +#: ../sflphone-client-gnome/src/config/assistant.c:330 +#: ../sflphone-client-gnome/src/config/assistant.c:443 msgid "_User name" msgstr "Usa_ger" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:242 -#: ../sflphone-client-gnome/src/config/assistant.c:339 -#: ../sflphone-client-gnome/src/config/assistant.c:446 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:250 +#: ../sflphone-client-gnome/src/config/assistant.c:346 +#: ../sflphone-client-gnome/src/config/assistant.c:458 msgid "_Password" msgstr "_Mot de passe" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:262 -#: ../sflphone-client-gnome/src/config/assistant.c:357 -#: ../sflphone-client-gnome/src/config/assistant.c:462 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:270 +#: ../sflphone-client-gnome/src/config/assistant.c:363 +#: ../sflphone-client-gnome/src/config/assistant.c:473 +#, fuzzy +msgid "Show password" +msgstr "Mot de passe" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:274 +#: ../sflphone-client-gnome/src/config/assistant.c:368 +#: ../sflphone-client-gnome/src/config/assistant.c:478 msgid "_Voicemail number" msgstr "_Boite vocale #" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:348 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:361 msgid "Authentication" msgstr "Identification" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:349 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:362 msgid "Secret" msgstr "Mot de passe" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:579 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:605 msgid "Credential" msgstr "Informations" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:614 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:640 msgid "Authentication name" msgstr "Nom d'authentification" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:625 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:651 msgid "Password" msgstr "Mot de passe" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:649 -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1029 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:306 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:674 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1056 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:321 msgid "Security" msgstr "Sécurité" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:662 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:318 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:687 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:333 msgid "Use TLS transport (sips)" msgstr "Utiliser un transport TLS (sips)" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:668 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:323 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:693 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:338 msgid "SRTP key exchange" msgstr "Échange de clé SRTP" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:674 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:329 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:699 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:344 msgid "Disabled" msgstr "Désactivé" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:770 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:795 msgid "Registration" msgstr "Expiration d'enregistrement" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:775 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:800 msgid "Registration expire" msgstr "Expiration d'enregistrement" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:784 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:809 msgid "_Comply with RFC 3263" msgstr "Respecter RFC 3263" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:791 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:221 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:816 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:234 msgid "Network Interface" msgstr "Interface réseau" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:805 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:236 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:830 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:249 msgid "Local address" msgstr "Adresse locale" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:855 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:292 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:880 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:301 msgid "Local port" msgstr "Port local" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:868 -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:903 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:893 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:928 msgid "Published address" msgstr "Adresse de publication" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:874 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:899 msgid "Using STUN" msgstr "Utiliser STUN " -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:881 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:906 msgid "STUN server URL" msgstr "URL du serveur STUN" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:889 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:914 msgid "Same as local parameters" msgstr "Identique aux paramètres locaux" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:892 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:917 msgid "Set published address and port:" msgstr "Configurer l'adresse et le port à publier" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:911 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:936 msgid "Published port" msgstr "Port de publication" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1000 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1027 msgid "Account settings" msgstr "Paramètre des comptes" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1019 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1046 msgid "Basic" msgstr "Général" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1024 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1051 msgid "Advanced" msgstr "Avancé" @@ -664,35 +672,35 @@ msgstr "Avancé" msgid "Server returned \"%s\" (%d)" msgstr "Le serveur a répondu \"%s\" (%d)" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:387 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:389 msgid "Protocol" msgstr "Protocole" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:394 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:396 msgid "Status" msgstr "Statut" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:472 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:474 msgid "Accounts" msgstr "Comptes" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:482 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:484 msgid "Configured Accounts" msgstr "Comptes Configurés" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:499 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:501 #, c-format msgid "There is %d active account" msgid_plural "There are %d active accounts" msgstr[0] " %d compte actif" msgstr[1] " %d comptes actifs" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:505 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:507 msgid "You have no active account" msgstr "Vous n'avez aucun compte actif" #: ../sflphone-client-gnome/src/config/addressbook-config.c:306 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:537 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:556 msgid "General" msgstr "Général" @@ -741,12 +749,12 @@ msgstr "Sélectionnez les carnets d'adresses d'Evolution à utiliser" msgid "Name" msgstr "Nom" -#: ../sflphone-client-gnome/src/config/assistant.c:69 +#: ../sflphone-client-gnome/src/config/assistant.c:75 #, c-format msgid "This assistant is now finished." msgstr "Cet assistant est maintenant terminé." -#: ../sflphone-client-gnome/src/config/assistant.c:71 +#: ../sflphone-client-gnome/src/config/assistant.c:77 msgid "" "You can at any time check your registration state or modify your accounts " "parameters in the Options/Accounts window." @@ -754,127 +762,127 @@ msgstr "" "Vous pouvez à tout moment vérifier votre état d'enregistrement ou modifier " "les paramètres de vos comptes dans la fenêtre Options/Comptes." -#: ../sflphone-client-gnome/src/config/assistant.c:74 +#: ../sflphone-client-gnome/src/config/assistant.c:80 msgid "Alias" msgstr "Alias" -#: ../sflphone-client-gnome/src/config/assistant.c:78 +#: ../sflphone-client-gnome/src/config/assistant.c:84 msgid "Server" msgstr "Serveur" -#: ../sflphone-client-gnome/src/config/assistant.c:82 +#: ../sflphone-client-gnome/src/config/assistant.c:88 msgid "Username" msgstr "Nom d'utilisateur" -#: ../sflphone-client-gnome/src/config/assistant.c:86 +#: ../sflphone-client-gnome/src/config/assistant.c:92 msgid "Security: " msgstr "Sécurité: " -#: ../sflphone-client-gnome/src/config/assistant.c:88 +#: ../sflphone-client-gnome/src/config/assistant.c:94 msgid "SRTP/ZRTP draft-zimmermann" msgstr "SRTP/ZRTP draft-zimmermann" -#: ../sflphone-client-gnome/src/config/assistant.c:90 +#: ../sflphone-client-gnome/src/config/assistant.c:96 msgid "None" msgstr "Aucun" -#: ../sflphone-client-gnome/src/config/assistant.c:223 +#: ../sflphone-client-gnome/src/config/assistant.c:229 msgid "SFLphone account creation wizard" msgstr "Assistant de création de compte de SFLphone" -#: ../sflphone-client-gnome/src/config/assistant.c:249 +#: ../sflphone-client-gnome/src/config/assistant.c:255 msgid "Welcome to the Account creation wizard of SFLphone!" msgstr "Bienvenue dans l'assistant de création de compte de SFLphone !" -#: ../sflphone-client-gnome/src/config/assistant.c:250 +#: ../sflphone-client-gnome/src/config/assistant.c:256 msgid "This installation wizard will help you configure an account." msgstr "Cet assistant vous guidera dans la configuration d'un compte." -#: ../sflphone-client-gnome/src/config/assistant.c:264 +#: ../sflphone-client-gnome/src/config/assistant.c:270 msgid "VoIP Protocols" msgstr "Protocoles VoIP" -#: ../sflphone-client-gnome/src/config/assistant.c:264 +#: ../sflphone-client-gnome/src/config/assistant.c:270 msgid "Select an account type" msgstr "Sélectionnez un type de compte" -#: ../sflphone-client-gnome/src/config/assistant.c:266 +#: ../sflphone-client-gnome/src/config/assistant.c:272 msgid "SIP (Session Initiation Protocol)" msgstr "SIP (Session Initiation Protocol)" -#: ../sflphone-client-gnome/src/config/assistant.c:268 +#: ../sflphone-client-gnome/src/config/assistant.c:274 msgid "IAX2 (InterAsterix Exchange)" msgstr "IAX2 (InterAsterix Exchange)" -#: ../sflphone-client-gnome/src/config/assistant.c:282 +#: ../sflphone-client-gnome/src/config/assistant.c:288 msgid "Account" msgstr "Compte" -#: ../sflphone-client-gnome/src/config/assistant.c:282 +#: ../sflphone-client-gnome/src/config/assistant.c:288 msgid "Please select one of the following options" msgstr "Veuillez sélectionner une des options suivantes" -#: ../sflphone-client-gnome/src/config/assistant.c:284 +#: ../sflphone-client-gnome/src/config/assistant.c:290 msgid "Create a free SIP/IAX2 account on sflphone.org" msgstr "Créer un compte SIP/IAX2 gratuit sur sflphone.org" -#: ../sflphone-client-gnome/src/config/assistant.c:286 +#: ../sflphone-client-gnome/src/config/assistant.c:292 msgid "Register an existing SIP or IAX2 account" msgstr "Enregistrer un compte SIP ou IAX2 existant" -#: ../sflphone-client-gnome/src/config/assistant.c:299 +#: ../sflphone-client-gnome/src/config/assistant.c:306 msgid "SIP account settings" msgstr "Paramètres de compte SIP" -#: ../sflphone-client-gnome/src/config/assistant.c:299 -#: ../sflphone-client-gnome/src/config/assistant.c:407 +#: ../sflphone-client-gnome/src/config/assistant.c:306 +#: ../sflphone-client-gnome/src/config/assistant.c:419 msgid "Please fill the following information" msgstr "Veuillez remplir les champs suivants" -#: ../sflphone-client-gnome/src/config/assistant.c:365 -#: ../sflphone-client-gnome/src/config/assistant.c:394 +#: ../sflphone-client-gnome/src/config/assistant.c:376 +#: ../sflphone-client-gnome/src/config/assistant.c:405 msgid "Secure communications with _ZRTP" msgstr "Communications sécurisées avec _ZRTP" -#: ../sflphone-client-gnome/src/config/assistant.c:378 +#: ../sflphone-client-gnome/src/config/assistant.c:389 msgid "Optional email address" msgstr "Adresse courriel optionnelle" -#: ../sflphone-client-gnome/src/config/assistant.c:378 +#: ../sflphone-client-gnome/src/config/assistant.c:389 msgid "This email address will be used to send your voicemail messages." msgstr "Vos messages vocaux seront envoyés par courriel à cette adresse." -#: ../sflphone-client-gnome/src/config/assistant.c:386 +#: ../sflphone-client-gnome/src/config/assistant.c:397 msgid "_Email address" msgstr "A_dresse courriel" -#: ../sflphone-client-gnome/src/config/assistant.c:407 +#: ../sflphone-client-gnome/src/config/assistant.c:419 msgid "IAX2 account settings" msgstr "Paramètres de compte IAX2" -#: ../sflphone-client-gnome/src/config/assistant.c:480 +#: ../sflphone-client-gnome/src/config/assistant.c:496 msgid "Network Address Translation (NAT)" msgstr "Network Address Translation (NAT)" -#: ../sflphone-client-gnome/src/config/assistant.c:480 +#: ../sflphone-client-gnome/src/config/assistant.c:496 msgid "You should probably enable this if you are behind a firewall." msgstr "" "Vous devriez probablement activer cette option si vous vous trouvez derrière " "un pare-feu." -#: ../sflphone-client-gnome/src/config/assistant.c:489 +#: ../sflphone-client-gnome/src/config/assistant.c:505 msgid "E_nable STUN" msgstr "A_ctiver STUN" -#: ../sflphone-client-gnome/src/config/assistant.c:496 +#: ../sflphone-client-gnome/src/config/assistant.c:512 msgid "_STUN server" msgstr "S_erveur STUN" -#: ../sflphone-client-gnome/src/config/assistant.c:510 +#: ../sflphone-client-gnome/src/config/assistant.c:526 msgid "Account Registration" msgstr "Enregistrement du compte" -#: ../sflphone-client-gnome/src/config/assistant.c:510 +#: ../sflphone-client-gnome/src/config/assistant.c:526 msgid "Congratulations!" msgstr "Félicitations!" @@ -910,51 +918,51 @@ msgstr "Détection de l'activité de la voix" msgid "_Noise Reduction (Narrow-Band Companding)" msgstr "Réduction du bruit (Compresseur extenseur LBR)" -#: ../sflphone-client-gnome/src/config/audioconf.c:795 +#: ../sflphone-client-gnome/src/config/audioconf.c:800 msgid "Sound Manager" msgstr "Interface Audio" -#: ../sflphone-client-gnome/src/config/audioconf.c:804 +#: ../sflphone-client-gnome/src/config/audioconf.c:809 msgid "_Pulseaudio" msgstr "_Pulseaudio" -#: ../sflphone-client-gnome/src/config/audioconf.c:808 +#: ../sflphone-client-gnome/src/config/audioconf.c:813 msgid "_ALSA" msgstr "_ALSA" -#: ../sflphone-client-gnome/src/config/audioconf.c:814 +#: ../sflphone-client-gnome/src/config/audioconf.c:819 msgid "ALSA settings" msgstr "Paramètres ALSA" -#: ../sflphone-client-gnome/src/config/audioconf.c:831 +#: ../sflphone-client-gnome/src/config/audioconf.c:836 msgid "Codecs" msgstr "Codecs" -#: ../sflphone-client-gnome/src/config/audioconf.c:860 +#: ../sflphone-client-gnome/src/config/audioconf.c:865 msgid "Recordings" msgstr "Enregistrements" -#: ../sflphone-client-gnome/src/config/audioconf.c:864 +#: ../sflphone-client-gnome/src/config/audioconf.c:869 msgid "Destination folder" msgstr "Dossier de destination" -#: ../sflphone-client-gnome/src/config/audioconf.c:868 +#: ../sflphone-client-gnome/src/config/audioconf.c:873 msgid "Select a folder" msgstr "Choisissez un dossier" -#: ../sflphone-client-gnome/src/config/audioconf.c:874 +#: ../sflphone-client-gnome/src/config/audioconf.c:879 msgid "Ringtones" msgstr "Sonneries" -#: ../sflphone-client-gnome/src/config/audioconf.c:880 +#: ../sflphone-client-gnome/src/config/audioconf.c:885 msgid "_Enable ringtones" msgstr "_Activer les sonneries" -#: ../sflphone-client-gnome/src/config/audioconf.c:886 +#: ../sflphone-client-gnome/src/config/audioconf.c:891 msgid "Choose a ringtone" msgstr "Sélectionner une sonnerie" -#: ../sflphone-client-gnome/src/config/audioconf.c:892 +#: ../sflphone-client-gnome/src/config/audioconf.c:897 msgid "Audio Files" msgstr "Fichier Audio" @@ -991,7 +999,7 @@ msgstr "Réécriture des numéros appelés" msgid "_Prefix dialed numbers with" msgstr "_Préfixer les numéros composés par" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:212 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:225 msgid "" "This profile is used when you want to reach a remote peer simply by typing a " "sip URI such as <b>sip:remotepeer</b>. The settings you define here will " @@ -1002,67 +1010,59 @@ msgstr "" "sont aussi utilisé si aucun compte ne peut être attribué à un appel entrant " "ou sortant." -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:425 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:440 msgid "Desktop Notifications" msgstr "Notifications de Bureau" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:429 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:444 msgid "_Enable notifications" msgstr "_Activer les notifications" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:435 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:450 msgid "System Tray Icon" msgstr "Icône dans la barre des tâches" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:438 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:453 msgid "_Popup main window on incoming call" msgstr "Faire apparaître la fenêtre _principale lors d'appel entrant" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:443 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:457 msgid "Ne_ver popup main window" msgstr "Ne _jamais afficher la fenêtre principale" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:447 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:463 msgid "Hide SFLphone window on _startup" msgstr "_Cacher la fenêtre de SFLphone au démarrage" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:453 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:469 msgid "Calls History" msgstr "Historique des appels" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:456 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:472 msgid "_Keep my history for at least" msgstr "Garder mon historique au moins" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:467 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:483 msgid "days" msgstr "jours" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:471 -msgid "Configuration File" -msgstr "Fichier de configuration" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:473 -msgid "Store SIP credentials as MD5 hash" -msgstr "Stocker les informations d'authentification sour forme encryptée (MD5)" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:517 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:536 msgid "Preferences" msgstr "Préférences" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:542 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:561 msgid "Audio" msgstr "Audio" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:547 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:566 msgid "Address Book" msgstr "Carnet d'adresse" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:552 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:571 msgid "Hooks" msgstr "Ancrage" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:562 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:581 msgid "Direct IP calls" msgstr "Appels IP" @@ -1070,11 +1070,11 @@ msgstr "Appels IP" msgid "Advanced options for TLS" msgstr "Options avancées TLS" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:55 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:56 msgid "TLS transport" msgstr "Transport TLS" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:59 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:60 msgid "" "TLS transport can be used along with UDP for those calls that would\n" "require secure sip transactions (aka SIPS). You can configure a different\n" @@ -1087,55 +1087,55 @@ msgstr "" "TLS différent pour chaque compte. Cependant, chacun écoutera sur un port " "différent.\n" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:100 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:103 msgid "Certificate of Authority list" msgstr "Liste des autorités de certification" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:104 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:107 msgid "Choose a CA list file (optional)" msgstr "Choisir une liste d'AC (optionnel)" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:128 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:131 msgid "Public endpoint certificate file" msgstr "Fichier de certificats de l'extrémité public" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:132 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:135 msgid "Choose a public endpoint certificate (optional)" msgstr "Sélectionner le certificat de l'extrémité public" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:156 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:159 msgid "Choose a private key file (optional)" msgstr "Choisir une clé privée (optionnel)" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:178 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:181 msgid "Password for the private key" msgstr "Mot de passe pour la clé privée" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:201 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:204 msgid "TLS protocol method" msgstr "Méthode pour TLS" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:235 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:238 msgid "TLS cipher list" msgstr "Liste de cryptogramme TLS" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:244 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:247 msgid "Server name instance for outgoing TLS connection" msgstr "Instance du serveur pour les connections TLS sortantes" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:252 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:255 msgid "Negotiation timeout (sec:msec)" msgstr "Expiration de la négociation" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:269 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:272 msgid "Verify incoming certificates, as a server" msgstr "En tant que serveur, vérifier les certificats entrants" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:275 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:278 msgid "Verify certificates from answer, as a client" msgstr "En tant que client, vérifier les certificats dans les réponses" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:281 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:284 msgid "Require certificate for incoming tls connections" msgstr "Exiger un certificat pour les connexions TLS entrantes" @@ -1159,29 +1159,36 @@ msgstr "_Avertir si ZRTP n'est pas supporté" msgid "Display SAS once for hold events" msgstr "Afficher le SAS seulement une fois sur les mises en attente" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:56 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:58 msgid "Search all" msgstr "Rechercher dans tous" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:57 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:70 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:82 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:94 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:59 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:72 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:84 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:96 msgid "Click here to change the search type" msgstr "Cliquez ici pour changer le type de recherche" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:69 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:71 msgid "Search by missed call" msgstr "Rechercher dans les appels manqués" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:81 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:83 msgid "Search by incoming call" msgstr "Rechercher dans les appels entrants" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:93 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:95 msgid "Search by outgoing call" msgstr "Rechercher dans les appels sortants" +#~ msgid "Configuration File" +#~ msgstr "Fichier de configuration" + +#~ msgid "Store SIP credentials as MD5 hash" +#~ msgstr "" +#~ "Stocker les informations d'authentification sour forme encryptée (MD5)" + #~ msgid "IP call - %s" #~ msgstr "Appel IP - %s" diff --git a/sflphone-client-gnome/po/it/it.po b/sflphone-client-gnome/po/it/it.po index 88fc58458f..cf8644aea9 100644 --- a/sflphone-client-gnome/po/it/it.po +++ b/sflphone-client-gnome/po/it/it.po @@ -1,21 +1,21 @@ -# SFLphone italian translation. +# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. # msgid "" msgstr "" -"Project-Id-Version: 0.9.7\n" +"Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-10-14 11:18-0400\n" +"POT-Creation-Date: 2009-12-03 10:22-0500\n" "PO-Revision-Date: 2009-10-14 17:47+0000\n" -"Last-Translator: Stefano Scamuzzo <stefano.scamuzzo@eng.it>\n" +"Last-Translator: Maxime Chambreuil <maxime.chambreuil@gmail.com>\n" "Language-Team: LANGUAGE <LL@li.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Launchpad-Export-Date: 2009-10-26 15:48+0000\n" +"X-Launchpad-Export-Date: 2009-12-03 15:32+0000\n" "X-Generator: Launchpad (build Unknown)\n" #: ../sflphone-client-gnome/src/accountlist.c:175 @@ -60,25 +60,15 @@ msgstr "Server STUN non valido" msgid "Invalid" msgstr "Non valido" -#: ../sflphone-client-gnome/src/actions.c:54 -#: ../sflphone-client-gnome/src/sflnotify.c:94 -#, c-format -msgid "%d voice mail" -msgid_plural "%d voice mails" -msgstr[0] "%d messaggio vocale" -msgstr[1] "%d messaggi vocali" - -#: ../sflphone-client-gnome/src/actions.c:83 -#: ../sflphone-client-gnome/src/actions.c:919 -#: ../sflphone-client-gnome/src/actions.c:926 +#: ../sflphone-client-gnome/src/actions.c:98 msgid "Using account" msgstr "Account in uso:" -#: ../sflphone-client-gnome/src/actions.c:89 +#: ../sflphone-client-gnome/src/actions.c:104 msgid "No registered accounts" msgstr "Nessun account registrato" -#: ../sflphone-client-gnome/src/actions.c:268 +#: ../sflphone-client-gnome/src/actions.c:285 msgid "" "Unable to connect to the SFLphone server.\n" "Make sure the daemon is running." @@ -86,27 +76,23 @@ msgstr "" "Impossibile connettersi al server SFLphone.\n" "Accertarsi che il demone sia in esecuzione." -#: ../sflphone-client-gnome/src/actions.c:913 -#, c-format -msgid "IP call - %s" -msgstr "Chiamata IP diretta - %s" - -#: ../sflphone-client-gnome/src/actions.c:922 -msgid "Codec" -msgstr "Codec" +#: ../sflphone-client-gnome/src/actions.c:589 +#: ../sflphone-client-gnome/src/actions.c:911 +msgid "Direct SIP call" +msgstr "" -#: ../sflphone-client-gnome/src/actions.c:1119 +#: ../sflphone-client-gnome/src/actions.c:1103 #, c-format msgid "" "<b>Error: No audio codecs found.\n" "\n" -"</b> SFL audio codecs have to be placed in <i>%s</i> or in the " -"<b>.sflphone</b> directory in your home( <i>%s</i> )" +"</b> SFL audio codecs have to be placed in <i>%s</i> or in the <b>.sflphone</" +"b> directory in your home( <i>%s</i> )" msgstr "" -"<b>Errore: Non è stato trovato alcun codec audio.</b>\n" +"<b>Errore: Non è stato trovato alcun codec audio.</b>\n" "\n" -"I codec audio SFL devono trovarsi in <i>%s</i> o nella sottocartella " -"<b>.sflphone</b> della cartella home dell'utente (</i>%s</i>)" +"I codec audio SFL devono trovarsi in <i>%s</i> o nella sottocartella <b>." +"sflphone</b> della cartella home dell'utente (</i>%s</i>)" #: ../sflphone-client-gnome/src/errors.c:29 msgid "" @@ -133,11 +119,11 @@ msgid "" "Pulseaudio is not running" msgstr "" "Notifica PulseAudio\n" -"PulseAudio non è in esecuzione" +"PulseAudio non è in esecuzione" #: ../sflphone-client-gnome/src/mainwindow.c:73 msgid "There is one call in progress." -msgstr "C'è una chiamata in corso." +msgstr "C'è una chiamata in corso." #: ../sflphone-client-gnome/src/mainwindow.c:77 msgid "There are calls in progress." @@ -147,57 +133,55 @@ msgstr "Ci sono chiamate in corso." msgid "Do you still want to quit?" msgstr "Vuoi veramente uscire?" -#: ../sflphone-client-gnome/src/mainwindow.c:299 +#: ../sflphone-client-gnome/src/mainwindow.c:298 msgid "SFLphone Error" msgstr "Errore SFLphone" -#: ../sflphone-client-gnome/src/mainwindow.c:391 +#: ../sflphone-client-gnome/src/mainwindow.c:392 #, c-format msgid "ZRTP is not supported by peer %s\n" -msgstr "ZRPT non supportato dal nodo %s\n" - -#: ../sflphone-client-gnome/src/mainwindow.c:392 -msgid "Secure Communication Unavailable" -msgstr "Comunicazione sicura non disponibile" +msgstr "" #: ../sflphone-client-gnome/src/mainwindow.c:393 -#: ../sflphone-client-gnome/src/mainwindow.c:415 -msgid "Continue" -msgstr "Continua" +msgid "Secure Communication Unavailable" +msgstr "" #: ../sflphone-client-gnome/src/mainwindow.c:394 #: ../sflphone-client-gnome/src/mainwindow.c:416 -#: ../sflphone-client-gnome/src/mainwindow.c:430 +msgid "Continue" +msgstr "" + +#: ../sflphone-client-gnome/src/mainwindow.c:395 +#: ../sflphone-client-gnome/src/mainwindow.c:417 +#: ../sflphone-client-gnome/src/mainwindow.c:431 msgid "Stop Call" -msgstr "Chiudi la chiamata" +msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:413 +#: ../sflphone-client-gnome/src/mainwindow.c:414 #, c-format msgid "" "A %s error forced the call with %s to fall under unencrypted mode.\n" "Exact reason: %s\n" -msgstr "Un errore %s ha provocato il passaggio della chiamata %s in modalità non sicura.\n" -"Motivo esatto: %s\n" +msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:414 +#: ../sflphone-client-gnome/src/mainwindow.c:415 msgid "ZRTP negotiation failed" -msgstr "Negoziazione ZRTP fallita" +msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:427 +#: ../sflphone-client-gnome/src/mainwindow.c:428 #, c-format msgid "" "%s wants to stop using secure communication. Confirm will resume " "conversation without SRTP.\n" -msgstr "%s vuole terminare l'uso della comunicazione sicura. Conferma ripristinerà " -"la converazione senza SRTP.\n" +msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:428 +#: ../sflphone-client-gnome/src/mainwindow.c:429 msgid "Confirm Go Clear" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:429 +#: ../sflphone-client-gnome/src/mainwindow.c:430 msgid "Confirm" -msgstr "Conferma" +msgstr "" #: ../sflphone-client-gnome/src/sflnotify.c:71 #: ../sflphone-client-gnome/src/sflnotify.c:91 @@ -210,6 +194,13 @@ msgstr "Account %s: %s" msgid "<i>From</i> %s" msgstr "<i>Da</i> %s" +#: ../sflphone-client-gnome/src/sflnotify.c:94 +#, c-format +msgid "%d voice mail" +msgid_plural "%d voice mails" +msgstr[0] "%d messaggio vocale" +msgstr[1] "%d messaggi vocali" + #: ../sflphone-client-gnome/src/sflnotify.c:111 #, c-format msgid "Calling with %s account <i>%s</i>" @@ -233,23 +224,21 @@ msgid "" "<i>With:</i> %s \n" "using %s" msgstr "" -"<i>con:</i> %s \n" -"utilizzando $s" #: ../sflphone-client-gnome/src/sflnotify.c:205 #, c-format msgid "%s does not support ZRTP." -msgstr "%s non supporta ZRTP." +msgstr "" #: ../sflphone-client-gnome/src/sflnotify.c:220 #, c-format msgid "ZRTP negotiation failed with %s" -msgstr "Negoziazione ZRTP con %s fallita" +msgstr "" #: ../sflphone-client-gnome/src/sflnotify.c:235 #, c-format msgid "<i>With:</i> %s" -msgstr "<i>Con:</i> %s" +msgstr "" #: ../sflphone-client-gnome/src/sliders.c:162 msgid "Speakers volume" @@ -259,15 +248,15 @@ msgstr "Volume altoparlante" msgid "Mic volume" msgstr "Volume microfono" -#: ../sflphone-client-gnome/src/statusicon.c:91 +#: ../sflphone-client-gnome/src/statusicon.c:96 msgid "_Show main window" msgstr "Mostra la finestra principale" -#: ../sflphone-client-gnome/src/statusicon.c:126 +#: ../sflphone-client-gnome/src/statusicon.c:131 msgid "SFLphone" msgstr "SFLphone" -#: ../sflphone-client-gnome/src/statusicon.c:127 +#: ../sflphone-client-gnome/src/statusicon.c:132 #, c-format msgid "%i account configured" msgid_plural "%i accounts configured" @@ -275,203 +264,399 @@ msgstr[0] "%i account configurato" msgstr[1] "%i account configurati" #: ../sflphone-client-gnome/src/toolbar.c:38 -#: ../sflphone-client-gnome/src/uimanager.c:750 +#: ../sflphone-client-gnome/src/uimanager.c:693 +#: ../sflphone-client-gnome/src/uimanager.c:727 msgid "Voicemail" msgstr "Segreteria telefonica" -#: ../sflphone-client-gnome/src/uimanager.c:403 +#: ../sflphone-client-gnome/src/uimanager.c:117 +msgid "No address book selected" +msgstr "Rubrica" + +#: ../sflphone-client-gnome/src/uimanager.c:137 +#: ../sflphone-client-gnome/src/uimanager.c:756 +msgid "Address book" +msgstr "Rubrica" + +#: ../sflphone-client-gnome/src/uimanager.c:279 +msgid "Voicemail (%i)" +msgstr "Segreteria telefonica (%i)" + +#: ../sflphone-client-gnome/src/uimanager.c:342 msgid "SFLphone is a VoIP client compatible with SIP and IAX2 protocols." -msgstr "SFLphone è un client VoIP compatibile con i protocolli SIP e IAX2." +msgstr "SFLphone è un client VoIP compatibile con i protocolli SIP e IAX2." -#: ../sflphone-client-gnome/src/uimanager.c:406 +#: ../sflphone-client-gnome/src/uimanager.c:345 msgid "About SFLphone" msgstr "Informazioni su SFLphone" -#: ../sflphone-client-gnome/src/uimanager.c:1028 +#: ../sflphone-client-gnome/src/uimanager.c:719 +msgid "Call" +msgstr "_Chiama" + +#: ../sflphone-client-gnome/src/uimanager.c:720 +#: ../sflphone-client-gnome/src/uimanager.c:1184 +msgid "_New call" +msgstr "Chiama" + +#: ../sflphone-client-gnome/src/uimanager.c:720 +msgid "Place a new call" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:721 +#: ../sflphone-client-gnome/src/uimanager.c:979 msgid "_Pick up" msgstr "Rispondi" -#: ../sflphone-client-gnome/src/uimanager.c:1040 -#: ../sflphone-client-gnome/src/uimanager.c:1081 +#: ../sflphone-client-gnome/src/uimanager.c:721 +msgid "Answer the call" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:722 +#: ../sflphone-client-gnome/src/uimanager.c:991 +#: ../sflphone-client-gnome/src/uimanager.c:1032 msgid "_Hang up" msgstr "_Chiudi" -#: ../sflphone-client-gnome/src/uimanager.c:1052 -#: ../sflphone-client-gnome/src/uimanager.c:1093 -msgid "On _Hold" +#: ../sflphone-client-gnome/src/uimanager.c:722 +msgid "Finish the call" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:723 +msgid "O_n hold" msgstr "Attesa" -#: ../sflphone-client-gnome/src/uimanager.c:1064 +#: ../sflphone-client-gnome/src/uimanager.c:723 +msgid "Place the call on hold" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:724 +msgid "O_ff hold" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:724 +msgid "Place the call off hold" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:725 +#: ../sflphone-client-gnome/src/uimanager.c:1015 msgid "_Record" msgstr "_Registra" -#: ../sflphone-client-gnome/src/uimanager.c:1154 -msgid "_Call back" -msgstr "Richiama" +#: ../sflphone-client-gnome/src/uimanager.c:725 +msgid "Record the current conversation" +msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:1226 -msgid "_New call" -msgstr "Chiama" +#: ../sflphone-client-gnome/src/uimanager.c:726 +msgid "Configuration _Assistant" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:726 +msgid "Run the configuration assistant" +msgstr "Errore di configurazione STUN" + +#: ../sflphone-client-gnome/src/uimanager.c:727 +msgid "Call your voicemail" +msgstr "%d messaggio vocale" + +#: ../sflphone-client-gnome/src/uimanager.c:728 +msgid "_Close" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:728 +msgid "Minimize to system tray" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:729 +msgid "_Quit" +msgstr "_Modifica" + +#: ../sflphone-client-gnome/src/uimanager.c:729 +msgid "Quit the program" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:732 +msgid "_Edit" +msgstr "_Modifica" + +#: ../sflphone-client-gnome/src/uimanager.c:733 +msgid "_Copy" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:733 +msgid "Copy the selection" +msgstr "Elimina l'account selezionato" + +#: ../sflphone-client-gnome/src/uimanager.c:734 +msgid "_Paste" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:734 +msgid "Paste the clipboard" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:735 +msgid "Clear _history" +msgstr "Cancella la cronologia" + +#: ../sflphone-client-gnome/src/uimanager.c:735 +msgid "Clear the call history" +msgstr "Cancella la cronologia" + +#: ../sflphone-client-gnome/src/uimanager.c:736 +msgid "_Accounts" +msgstr "_Account" + +#: ../sflphone-client-gnome/src/uimanager.c:736 +msgid "Edit your accounts" +msgstr "Account attivo" + +#: ../sflphone-client-gnome/src/uimanager.c:737 +msgid "_Preferences" +msgstr "Preferenze" -#: ../sflphone-client-gnome/src/uimanager.c:1300 +#: ../sflphone-client-gnome/src/uimanager.c:737 +msgid "Change your preferences" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:740 +msgid "_View" +msgstr "_Visualizza" + +#: ../sflphone-client-gnome/src/uimanager.c:743 +msgid "_Help" +msgstr "_Aiuto" + +#: ../sflphone-client-gnome/src/uimanager.c:744 +msgid "Contents" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:744 +msgid "Open the manual" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:745 +msgid "About this application" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:751 +msgid "_Transfer" +msgstr "Inoltra" + +#: ../sflphone-client-gnome/src/uimanager.c:751 +msgid "Transfer the call" +msgstr "Inoltra a: " + +#: ../sflphone-client-gnome/src/uimanager.c:752 +msgid "_Show toolbar" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:752 +msgid "Show the toolbar" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:753 +msgid "_Dialpad" +msgstr "Mostra tastiera" + +#: ../sflphone-client-gnome/src/uimanager.c:753 +msgid "Show the dialpad" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:754 +msgid "_Volume controls" +msgstr "Mostra i controlli del volume" + +#: ../sflphone-client-gnome/src/uimanager.c:754 +msgid "Show the volume controls" +msgstr "Mostra i controlli del volume" + +#: ../sflphone-client-gnome/src/uimanager.c:755 +msgid "_History" +msgstr "Cronologia" + +#: ../sflphone-client-gnome/src/uimanager.c:755 +msgid "Calls history" +msgstr "Cronologia chiamate" + +#: ../sflphone-client-gnome/src/uimanager.c:756 +msgid "_Address book" +msgstr "Rubrica" + +#: ../sflphone-client-gnome/src/uimanager.c:1003 +#: ../sflphone-client-gnome/src/uimanager.c:1044 +msgid "On _Hold" +msgstr "Attesa" + +#: ../sflphone-client-gnome/src/uimanager.c:1107 +msgid "_Call back" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:1258 msgid "Edit phone number" -msgstr "Modifica numero di telefono" +msgstr "" -#: ../sflphone-client-gnome/src/uimanager.c:1311 +#: ../sflphone-client-gnome/src/uimanager.c:1269 msgid "Edit the phone number before making a call" -msgstr "Modifica il numero di telefono prima di chiamare" +msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:164 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:180 msgid "Account Parameters" msgstr "Parametri account" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:173 -#: ../sflphone-client-gnome/src/config/assistant.c:294 -#: ../sflphone-client-gnome/src/config/assistant.c:402 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:189 +#: ../sflphone-client-gnome/src/config/assistant.c:314 +#: ../sflphone-client-gnome/src/config/assistant.c:427 msgid "_Alias" msgstr "_Pseudonimo" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:181 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:197 msgid "_Protocol" msgstr "_Protocollo" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:199 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:215 msgid "Unknown" msgstr "Sconosciuto" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:209 -#: ../sflphone-client-gnome/src/config/assistant.c:302 -#: ../sflphone-client-gnome/src/config/assistant.c:410 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:225 +#: ../sflphone-client-gnome/src/config/assistant.c:322 +#: ../sflphone-client-gnome/src/config/assistant.c:435 msgid "_Host name" msgstr "Nome _host" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:217 -#: ../sflphone-client-gnome/src/config/assistant.c:310 -#: ../sflphone-client-gnome/src/config/assistant.c:418 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:233 +#: ../sflphone-client-gnome/src/config/assistant.c:330 +#: ../sflphone-client-gnome/src/config/assistant.c:443 msgid "_User name" msgstr "Nome _utente" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:234 -#: ../sflphone-client-gnome/src/config/assistant.c:326 -#: ../sflphone-client-gnome/src/config/assistant.c:433 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:250 +#: ../sflphone-client-gnome/src/config/assistant.c:346 +#: ../sflphone-client-gnome/src/config/assistant.c:458 msgid "_Password" msgstr "_Password" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:254 -#: ../sflphone-client-gnome/src/config/assistant.c:344 -#: ../sflphone-client-gnome/src/config/assistant.c:449 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:270 +#: ../sflphone-client-gnome/src/config/assistant.c:363 +#: ../sflphone-client-gnome/src/config/assistant.c:473 +msgid "Show password" +msgstr "Password" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:274 +#: ../sflphone-client-gnome/src/config/assistant.c:368 +#: ../sflphone-client-gnome/src/config/assistant.c:478 msgid "_Voicemail number" msgstr "Numero segreteria telefonica" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:340 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:361 msgid "Authentication" -msgstr "Autenticazione" +msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:341 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:362 msgid "Secret" -msgstr "Segreto" +msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:466 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:605 msgid "Credential" -msgstr "Credenziali" +msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:501 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:640 msgid "Authentication name" -msgstr "Nome autenticazione" +msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:512 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:651 msgid "Password" msgstr "Password" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:535 -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:909 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:201 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:674 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1056 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:321 msgid "Security" -msgstr "Sicurezza" +msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:547 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:213 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:687 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:333 msgid "Use TLS transport (sips)" -msgstr "Utilizza il trasporto TLS (sips)" +msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:552 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:218 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:693 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:338 msgid "SRTP key exchange" -msgstr "Scambio di chiavi SRTP" +msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:558 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:224 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:699 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:344 msgid "Disabled" -msgstr "Disabilitato" +msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:674 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:795 msgid "Registration" -msgstr "Registrazione" +msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:679 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:800 msgid "Registration expire" msgstr "Scadenza registrazione" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:687 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:809 msgid "_Comply with RFC 3263" -msgstr "Compatibile con RFC 3263" +msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:693 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:463 -msgid "Network" -msgstr "Rete" +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:816 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:234 +msgid "Network Interface" +msgstr "Rete irraggiungibile" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:707 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:830 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:249 msgid "Local address" -msgstr "Indirizzo locale" +msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:744 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:880 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:301 msgid "Local port" -msgstr "Porta locale" +msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:752 -msgid "Set published address and port:" -msgstr "Configura indirizzo pubblicato e porta:" +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:893 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:928 +msgid "Published address" +msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:756 -msgid "Using STUN " -msgstr "Utilizza STUN " +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:899 +msgid "Using STUN" +msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:761 -msgid "Same as local parameters" -msgstr "Come paramteri locali" +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:906 +msgid "STUN server URL" +msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:764 -msgid "Manually" -msgstr "Manuale" +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:914 +msgid "Same as local parameters" +msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:769 -msgid "Published address" -msgstr "Indirizzo pubblicato" +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:917 +msgid "Set published address and port:" +msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:777 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:936 msgid "Published port" -msgstr "Porta pubblicata" - -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:785 -msgid "STUN server URL" -msgstr "URL del server STUN" +msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:880 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1027 msgid "Account settings" msgstr "Impostazioni dell'account" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:899 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1046 msgid "Basic" msgstr "Generale" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:904 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1051 msgid "Advanced" msgstr "Avanzate" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:169 -msgid "Server returned \"" -msgstr "Il server ha restituito \"" +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:164 +#, c-format +msgid "Server returned \"%s\" (%d)" +msgstr "" #: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:389 msgid "Protocol" @@ -483,40 +668,27 @@ msgstr "Stato" #: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:474 msgid "Accounts" -msgstr "Accounts" +msgstr "Account" #: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:484 msgid "Configured Accounts" msgstr "Account configurati" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:505 -msgid "There " -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:506 -msgid "is " -msgstr "è" - -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:506 -msgid "are " -msgstr "sono" - -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:508 -msgid " active account" -msgstr " account attivo" - -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:509 -msgid "s" -msgstr "" +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:501 +#, c-format +msgid "There is %d active account" +msgid_plural "There are %d active accounts" +msgstr[0] "" +msgstr[1] "" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:514 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:507 msgid "You have no active account" -msgstr "Non ci sono account attivi" +msgstr "" #: ../sflphone-client-gnome/src/config/addressbook-config.c:306 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:443 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:556 msgid "General" -msgstr "Generale" +msgstr "" #: ../sflphone-client-gnome/src/config/addressbook-config.c:312 msgid "_Use Evolution address books" @@ -524,11 +696,11 @@ msgstr "_Usa la rubrica di Evolution" #: ../sflphone-client-gnome/src/config/addressbook-config.c:319 msgid "Download limit :" -msgstr "Limite per il download: " +msgstr "" #: ../sflphone-client-gnome/src/config/addressbook-config.c:327 msgid "cards" -msgstr "schede" +msgstr "tessere" #: ../sflphone-client-gnome/src/config/addressbook-config.c:333 msgid "_Display contact photo if available" @@ -559,244 +731,238 @@ msgid "Select which Evolution address books to use" msgstr "Selezionare la rubrica di Evolution da usare" #: ../sflphone-client-gnome/src/config/addressbook-config.c:404 -#: ../sflphone-client-gnome/src/config/audioconf.c:578 +#: ../sflphone-client-gnome/src/config/audioconf.c:577 msgid "Name" msgstr "Nome" -#: ../sflphone-client-gnome/src/config/assistant.c:69 +#: ../sflphone-client-gnome/src/config/assistant.c:75 #, c-format msgid "This assistant is now finished." msgstr "La procedura guidata è terminata." -#: ../sflphone-client-gnome/src/config/assistant.c:71 +#: ../sflphone-client-gnome/src/config/assistant.c:77 msgid "" "You can at any time check your registration state or modify your accounts " "parameters in the Options/Accounts window." -msgstr "In qualsiasi momento puoi controllare lo stato della tua registrazione o modificare i tuoi parametri" -"di acccount nella finestra Opzioni/Accounts." +msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:74 +#: ../sflphone-client-gnome/src/config/assistant.c:80 msgid "Alias" -msgstr "Alias" +msgstr "Pseudonimo" -#: ../sflphone-client-gnome/src/config/assistant.c:78 +#: ../sflphone-client-gnome/src/config/assistant.c:84 msgid "Server" msgstr "Server" -#: ../sflphone-client-gnome/src/config/assistant.c:82 +#: ../sflphone-client-gnome/src/config/assistant.c:88 msgid "Username" msgstr "Nome utente" -#: ../sflphone-client-gnome/src/config/assistant.c:86 +#: ../sflphone-client-gnome/src/config/assistant.c:92 msgid "Security: " -msgstr "Sicurezza: " +msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:88 +#: ../sflphone-client-gnome/src/config/assistant.c:94 msgid "SRTP/ZRTP draft-zimmermann" -msgstr "SRTP/ZRTP draft-zimmermann" +msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:90 -#: ../sflphone-client-gnome/src/config/assistant.c:182 +#: ../sflphone-client-gnome/src/config/assistant.c:96 msgid "None" -msgstr "Nessuno" +msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:210 +#: ../sflphone-client-gnome/src/config/assistant.c:229 msgid "SFLphone account creation wizard" -msgstr "Procedura guidata per la creazione dell'account SFLphone" +msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:236 +#: ../sflphone-client-gnome/src/config/assistant.c:255 msgid "Welcome to the Account creation wizard of SFLphone!" msgstr "" "Benvenuti alla procedura guidata per la creazione di un account SFLphone" -#: ../sflphone-client-gnome/src/config/assistant.c:237 +#: ../sflphone-client-gnome/src/config/assistant.c:256 msgid "This installation wizard will help you configure an account." -msgstr "Questa procedura di installazione permetterà di configurare un account." +msgstr "Questa procedura permetterà di configurare un account." -#: ../sflphone-client-gnome/src/config/assistant.c:251 +#: ../sflphone-client-gnome/src/config/assistant.c:270 msgid "VoIP Protocols" msgstr "Protocolli VoIP" -#: ../sflphone-client-gnome/src/config/assistant.c:251 +#: ../sflphone-client-gnome/src/config/assistant.c:270 msgid "Select an account type" msgstr "Selezionare un tipo di account" -#: ../sflphone-client-gnome/src/config/assistant.c:253 +#: ../sflphone-client-gnome/src/config/assistant.c:272 msgid "SIP (Session Initiation Protocol)" msgstr "SIP (Session Initiation Protocol)" -#: ../sflphone-client-gnome/src/config/assistant.c:255 +#: ../sflphone-client-gnome/src/config/assistant.c:274 msgid "IAX2 (InterAsterix Exchange)" msgstr "IAX2 (InterAsterix Exchange)" -#: ../sflphone-client-gnome/src/config/assistant.c:269 +#: ../sflphone-client-gnome/src/config/assistant.c:288 msgid "Account" msgstr "Account" -#: ../sflphone-client-gnome/src/config/assistant.c:269 +#: ../sflphone-client-gnome/src/config/assistant.c:288 msgid "Please select one of the following options" msgstr "Scegliere una delle seguenti opzioni" -#: ../sflphone-client-gnome/src/config/assistant.c:271 +#: ../sflphone-client-gnome/src/config/assistant.c:290 msgid "Create a free SIP/IAX2 account on sflphone.org" msgstr "Creare un account SIP/IAX2 gratuito su sflphone.org" -#: ../sflphone-client-gnome/src/config/assistant.c:273 +#: ../sflphone-client-gnome/src/config/assistant.c:292 msgid "Register an existing SIP or IAX2 account" msgstr "Registrare un account SIP o IAX2 esistente" -#: ../sflphone-client-gnome/src/config/assistant.c:286 +#: ../sflphone-client-gnome/src/config/assistant.c:306 msgid "SIP account settings" msgstr "Impostazioni account SIP" -#: ../sflphone-client-gnome/src/config/assistant.c:286 -#: ../sflphone-client-gnome/src/config/assistant.c:394 +#: ../sflphone-client-gnome/src/config/assistant.c:306 +#: ../sflphone-client-gnome/src/config/assistant.c:419 msgid "Please fill the following information" -msgstr "Per favore compila le seguenti informazioni" +msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:352 -#: ../sflphone-client-gnome/src/config/assistant.c:381 +#: ../sflphone-client-gnome/src/config/assistant.c:376 +#: ../sflphone-client-gnome/src/config/assistant.c:405 msgid "Secure communications with _ZRTP" -msgstr "Comunicazioni sicure con _ZRTP" +msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:365 +#: ../sflphone-client-gnome/src/config/assistant.c:389 msgid "Optional email address" msgstr "Indirizzo email opzionale" -#: ../sflphone-client-gnome/src/config/assistant.c:365 +#: ../sflphone-client-gnome/src/config/assistant.c:389 msgid "This email address will be used to send your voicemail messages." msgstr "" -"L'indirizzo email sarà usato per l'invio dei messaggi della segreteria " +"L'indirizzo email sarà usato per l'invio dei messaggi della segreteria " "telefonica." -#: ../sflphone-client-gnome/src/config/assistant.c:373 +#: ../sflphone-client-gnome/src/config/assistant.c:397 msgid "_Email address" msgstr "Indirizzo _email" -#: ../sflphone-client-gnome/src/config/assistant.c:394 +#: ../sflphone-client-gnome/src/config/assistant.c:419 msgid "IAX2 account settings" msgstr "Impostazioni account IAX2" -#: ../sflphone-client-gnome/src/config/assistant.c:467 +#: ../sflphone-client-gnome/src/config/assistant.c:496 msgid "Network Address Translation (NAT)" msgstr "Network Address Translation (NAT)" -#: ../sflphone-client-gnome/src/config/assistant.c:467 +#: ../sflphone-client-gnome/src/config/assistant.c:496 msgid "You should probably enable this if you are behind a firewall." msgstr "Dovrebbe essere abilitato se ci si trova dietro ad un firewall." -#: ../sflphone-client-gnome/src/config/assistant.c:476 +#: ../sflphone-client-gnome/src/config/assistant.c:505 msgid "E_nable STUN" msgstr "Abilita STUN" -#: ../sflphone-client-gnome/src/config/assistant.c:483 +#: ../sflphone-client-gnome/src/config/assistant.c:512 msgid "_STUN server" msgstr "Server STUN" -#: ../sflphone-client-gnome/src/config/assistant.c:497 +#: ../sflphone-client-gnome/src/config/assistant.c:526 msgid "Account Registration" msgstr "Registrazione account" -#: ../sflphone-client-gnome/src/config/assistant.c:497 +#: ../sflphone-client-gnome/src/config/assistant.c:526 msgid "Congratulations!" msgstr "Congratulazioni!" -#: ../sflphone-client-gnome/src/config/audioconf.c:583 +#: ../sflphone-client-gnome/src/config/audioconf.c:582 msgid "Frequency" msgstr "Frequenza" -#: ../sflphone-client-gnome/src/config/audioconf.c:588 +#: ../sflphone-client-gnome/src/config/audioconf.c:587 msgid "Bitrate" msgstr "Bitrate" -#: ../sflphone-client-gnome/src/config/audioconf.c:593 +#: ../sflphone-client-gnome/src/config/audioconf.c:592 msgid "Bandwidth" msgstr "Banda" -#: ../sflphone-client-gnome/src/config/audioconf.c:673 +#: ../sflphone-client-gnome/src/config/audioconf.c:670 msgid "ALSA plugin" msgstr "Plugin ALSA" -#: ../sflphone-client-gnome/src/config/audioconf.c:695 +#: ../sflphone-client-gnome/src/config/audioconf.c:692 msgid "Output" msgstr "Uscita" -#: ../sflphone-client-gnome/src/config/audioconf.c:717 +#: ../sflphone-client-gnome/src/config/audioconf.c:714 msgid "Input" msgstr "Ingresso" -#: ../sflphone-client-gnome/src/config/audioconf.c:752 +#: ../sflphone-client-gnome/src/config/audioconf.c:749 msgid "_Voice Activity Detection" -msgstr "Rilevazione dell'attività _Voce" +msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:762 +#: ../sflphone-client-gnome/src/config/audioconf.c:759 msgid "_Noise Reduction (Narrow-Band Companding)" -msgstr "Riduzione del rumore (Narrow-Band Companding)" +msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:798 +#: ../sflphone-client-gnome/src/config/audioconf.c:800 msgid "Sound Manager" -msgstr "Gestore del suono" +msgstr "" -#: ../sflphone-client-gnome/src/config/audioconf.c:807 +#: ../sflphone-client-gnome/src/config/audioconf.c:809 msgid "_Pulseaudio" msgstr "_Pulseaudio" -#: ../sflphone-client-gnome/src/config/audioconf.c:811 +#: ../sflphone-client-gnome/src/config/audioconf.c:813 msgid "_ALSA" msgstr "_ALSA" -#: ../sflphone-client-gnome/src/config/audioconf.c:816 -msgid "_Mute other applications during a call" -msgstr "Spegni l'audio delle altre applicazioni durante una chiamata" - -#: ../sflphone-client-gnome/src/config/audioconf.c:823 +#: ../sflphone-client-gnome/src/config/audioconf.c:819 msgid "ALSA settings" msgstr "Impostazioni ALSA" -#: ../sflphone-client-gnome/src/config/audioconf.c:840 +#: ../sflphone-client-gnome/src/config/audioconf.c:836 msgid "Codecs" msgstr "Codec" -#: ../sflphone-client-gnome/src/config/audioconf.c:869 +#: ../sflphone-client-gnome/src/config/audioconf.c:865 msgid "Recordings" msgstr "Registrazioni" -#: ../sflphone-client-gnome/src/config/audioconf.c:873 +#: ../sflphone-client-gnome/src/config/audioconf.c:869 msgid "Destination folder" msgstr "Cartella di destinazione" -#: ../sflphone-client-gnome/src/config/audioconf.c:877 +#: ../sflphone-client-gnome/src/config/audioconf.c:873 msgid "Select a folder" msgstr "Seleziona una cartella" -#: ../sflphone-client-gnome/src/config/audioconf.c:883 +#: ../sflphone-client-gnome/src/config/audioconf.c:879 msgid "Ringtones" msgstr "Suonerie" -#: ../sflphone-client-gnome/src/config/audioconf.c:889 +#: ../sflphone-client-gnome/src/config/audioconf.c:885 msgid "_Enable ringtones" msgstr "Abilita suonerie" -#: ../sflphone-client-gnome/src/config/audioconf.c:895 +#: ../sflphone-client-gnome/src/config/audioconf.c:891 msgid "Choose a ringtone" msgstr "Selezionare una suoneria" -#: ../sflphone-client-gnome/src/config/audioconf.c:901 +#: ../sflphone-client-gnome/src/config/audioconf.c:897 msgid "Audio Files" msgstr "File audio" #: ../sflphone-client-gnome/src/config/hooks-config.c:130 msgid "URL Argument" -msgstr "Stringa URL" +msgstr "" #: ../sflphone-client-gnome/src/config/hooks-config.c:135 msgid "Custom commands on incoming calls with URL" -msgstr "Comandi custom sulle chiamate in ingresso con URL" +msgstr "" #: ../sflphone-client-gnome/src/config/hooks-config.c:138 #, c-format msgid "%s will be replaced with the passed URL." -msgstr "%s saranno rimpiazzati dall'URL fornito." +msgstr "" #: ../sflphone-client-gnome/src/config/hooks-config.c:141 msgid "Trigger on specific _SIP header" @@ -818,101 +984,78 @@ msgstr "Riscrittura numero telefonico" msgid "_Prefix dialed numbers with" msgstr "Prefisso da aggiungere ai numeri da chiamare" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:195 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:225 msgid "" "This profile is used when you want to reach a remote peer simply by typing a " "sip URI such as <b>sip:remotepeer</b>. The settings you define here will " "also be used if no account can be matched to an incoming or outgoing call." msgstr "" -"Questo profilo è utilizzato quando vuoi raggiungere un nodo remoto semplicemente digitando un " -"URI sip tipo <b>sip:remotepeer</b>. Le configurazione che definisci qui saranno " -"usate anche se nessun account corrisponde ad una chiamata in ingresso o in uscita." -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:274 -msgid "SIP Port" -msgstr "SIP Port" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:281 -msgid "UDP Transport" -msgstr "Trasporto UDP" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:319 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:440 msgid "Desktop Notifications" msgstr "Notifiche" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:323 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:444 msgid "_Enable notifications" msgstr "Abilita notifiche" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:329 -msgid "Enable voicemail _notifications" -msgstr "Abilita notifiche messaggi vocali" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:341 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:450 msgid "System Tray Icon" msgstr "Icona per area di notifica" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:344 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:453 msgid "_Popup main window on incoming call" msgstr "Mostra la finestra principale all'arrivo delle chiamate" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:349 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:457 msgid "Ne_ver popup main window" msgstr "Non mostrare mai la finestra principale" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:353 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:463 msgid "Hide SFLphone window on _startup" msgstr "Nascondi la finestra di SFLphone all'avvio" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:359 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:469 msgid "Calls History" msgstr "Cronologia chiamate" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:362 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:472 msgid "_Keep my history for at least" msgstr "Mantieni la cronologia per almeno" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:373 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:483 msgid "days" msgstr "giorni" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:377 -msgid "Configuration File" -msgstr "File di configurazione" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:379 -msgid "Store SIP credentials as MD5 hash" -msgstr "Memorizza le credenziali SIP in MD5" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:423 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:536 msgid "Preferences" msgstr "Preferenze" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:448 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:561 msgid "Audio" msgstr "Audio" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:453 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:566 msgid "Address Book" msgstr "Rubrica" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:458 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:571 msgid "Hooks" -msgstr "Agganci" +msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:468 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:581 msgid "Direct IP calls" -msgstr "Chiamate IP dirette" +msgstr "" #: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:38 msgid "Advanced options for TLS" -msgstr "Opzioni avanzate per TLS" +msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:55 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:56 msgid "TLS transport" -msgstr "Trasporto TLS" +msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:59 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:60 msgid "" "TLS transport can be used along with UDP for those calls that would\n" "require secure sip transactions (aka SIPS). You can configure a different\n" @@ -920,117 +1063,125 @@ msgid "" "dedicated\n" "port, different one from each other\n" msgstr "" -"Il trasporto TLS può essere utilizzato con UDP per le chiamate che\n" -"richiedono transazioni sip sicure (aka SIPS). Puoi configurare un trasporto\n" -"TLS diverso per ognia account. Tuttavia, ognuino di essi girerà su una " -"porta dedicata, differente dalle altre\n" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:100 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:103 msgid "Certificate of Authority list" -msgstr "Lista delle Autorità di certificazione" +msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:104 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:107 msgid "Choose a CA list file (optional)" -msgstr "Scelgi una lista di CA (opzionale)" +msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:115 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:131 msgid "Public endpoint certificate file" -msgstr "File di certificato dell'endpoint pubblico" +msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:119 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:135 msgid "Choose a public endpoint certificate (optional)" -msgstr "Scegli un certificato dell'endpoint pubblico (opzionale)" +msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:134 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:159 msgid "Choose a private key file (optional)" -msgstr "Scegli un file con la chiave privata (opzionale)" +msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:145 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:181 msgid "Password for the private key" -msgstr "Password per la chiave privata" +msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:168 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:204 msgid "TLS protocol method" -msgstr "Metodo del protocollo TLS" +msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:202 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:238 msgid "TLS cipher list" -msgstr "Cifratura TLS" +msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:211 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:247 msgid "Server name instance for outgoing TLS connection" -msgstr "Nome dell'istanza serfer pre connessioni TLS in uscita" +msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:219 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:255 msgid "Negotiation timeout (sec:msec)" -msgstr "Timeout di negoziazione (sec:msec)" +msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:236 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:272 msgid "Verify incoming certificates, as a server" -msgstr "Verifica certificati in ingresso, come server" +msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:242 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:278 msgid "Verify certificates from answer, as a client" -msgstr "Verifica certificati nella risposta, come client" +msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:248 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:284 msgid "Require certificate for incoming tls connections" -msgstr "Richiede un certificato per le connessioni tls in ingresso" +msgstr "" #: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:49 msgid "ZRTP Options" -msgstr "Opziobi ZRTP" +msgstr "" -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:68 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:69 msgid "Send Hello Hash in S_DP" -msgstr "Invia Hello Hash in S_DP" +msgstr "" -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:74 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:75 msgid "Ask User to Confirm SAS" -msgstr "Chiedi all'utente di confermare SAS" +msgstr "" -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:80 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:81 msgid "_Warn if ZRTP not supported" -msgstr "Notifica se ZRTP non è supportato" +msgstr "" -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:86 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:87 msgid "Display SAS once for hold events" msgstr "" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:56 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:58 msgid "Search all" msgstr "Cerca tra tutte le chiamate" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:57 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:70 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:82 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:94 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:59 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:72 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:84 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:96 msgid "Click here to change the search type" msgstr "Fare clic qui per cambiare il tipo di ricerca" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:69 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:71 msgid "Search by missed call" msgstr "Cerca tra le chiamate perse" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:81 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:83 msgid "Search by incoming call" msgstr "Cerca tra le chiamate ricevute" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:93 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:95 msgid "Search by outgoing call" msgstr "Cerca tra le chiamate effettuate" -#~ msgid "(C) 2009 Savoir-faire Linux" -#~ msgstr "(C) 2009 Savoir-faire Linux" +#~ msgid "IP call - %s" +#~ msgstr "Chiamata IP diretta - %s" + +#~ msgid "Codec" +#~ msgstr "Codec" -#~ msgid "Jérémy Quentin" -#~ msgstr "Jérémy Quentin" +#~ msgid "Network" +#~ msgstr "Rete" -#~ msgid "Address book" -#~ msgstr "Rubrica" +#~ msgid "_Mute other applications during a call" +#~ msgstr "Spegni l'audio delle altre applicazioni durante una chiamata" -#~ msgid "Call history" -#~ msgstr "Cronologia chiamate" +#~ msgid "SIP Port" +#~ msgstr "SIP Port" + +#~ msgid "Enable voicemail _notifications" +#~ msgstr "Abilita notifiche messaggi vocali" + +#~ msgid "(C) 2009 Savoir-faire Linux" +#~ msgstr "(C) 2009 Savoir-faire Linux" + +#~ msgid "Jérémy Quentin" +#~ msgstr "Jérémy Quentin" #~ msgid "Hang up" #~ msgstr "Chiudi" @@ -1077,26 +1228,8 @@ msgstr "Cerca tra le chiamate effettuate" #~ msgid "Enable notifications" #~ msgstr "Attiva le notifiche" -#~ msgid "History" -#~ msgstr "Cronologia" - -#~ msgid "_Call" -#~ msgstr "_Chiama" - -#~ msgid "_Help" -#~ msgstr "_Aiuto" - -#~ msgid "_View" -#~ msgstr "_Visualizza" - -#~ msgid "_Edit" -#~ msgstr "_Modifica" - -#~ msgid "_Accounts" -#~ msgstr "_Account" - #~ msgid "Port" -#~ msgstr "Porta" +#~ msgstr "Port" #~ msgid "PulseAudio sound server" #~ msgstr "Server audio PulseAudio" @@ -1107,9 +1240,6 @@ msgstr "Cerca tra le chiamate effettuate" #~ msgid "You have an incoming call from" #~ msgstr "Chiamata in arrivo da" -#~ msgid "Transfer" -#~ msgstr "Inoltra" - #~ msgid "Hold on" #~ msgstr "Attesa" @@ -1122,15 +1252,6 @@ msgstr "Cerca tra le chiamate effettuate" #~ msgid "Command to run" #~ msgstr "Comando da eseguire" -#~ msgid "Display volume controls" -#~ msgstr "Mostra i controlli del volume" - -#~ msgid "Display dialpad" -#~ msgstr "Mostra tastiera" - -#~ msgid "Clear _history" -#~ msgstr "Cancella la cronologia" - #~ msgid "_Enable this account" #~ msgstr "Abilita questo account" @@ -1143,9 +1264,6 @@ msgstr "Cerca tra le chiamate effettuate" #~ msgid "Stun Server" #~ msgstr "Server STUN" -#~ msgid "Transfer to : " -#~ msgstr "Inoltra a: " - #~ msgid "Address book loading..." #~ msgstr "Caricamento rubrica..." @@ -1156,14 +1274,11 @@ msgstr "Cerca tra le chiamate effettuate" #~ msgstr "Abilita STUN" #~ msgid "Format : name.server:port" -#~ msgstr "Formato: nome.server:porta" +#~ msgstr "Formato: nome.del.server:porta" #~ msgid "Incoming call" #~ msgstr "Chiamata in arrivo" -#~ msgid "Remove the selected account" -#~ msgstr "Elimina l'account selezionato" - #~ msgid "Display photo if available" #~ msgstr "Mostrare foto se disponibile" @@ -1179,9 +1294,6 @@ msgstr "Cerca tra le chiamate effettuate" #~ msgid "Show main window" #~ msgstr "Mostra finestra principale" -#~ msgid "Clear history" -#~ msgstr "Cancella la cronologia" - #~ msgid "Prefix dialed numbers with" #~ msgstr "Prefisso da aggiungere al numero da chiamare" @@ -1192,27 +1304,27 @@ msgstr "Cerca tra le chiamate effettuate" #~ msgstr "Scadenza registrazione" #~ msgid "" -#~ "Pressing \"apply\" will restart the network layer. Otherwise, SFLPhone would " -#~ "have to be restarted." +#~ "Pressing \"apply\" will restart the network layer. Otherwise, SFLPhone " +#~ "would have to be restarted." #~ msgstr "" -#~ "Premendo il tasto \"Applica\" il modulo di rete verrà riavviato. In " +#~ "Premendo il tasto \"Applica\" il modulo di rete verrà riavviato. In " #~ "alternativa occorrerebbe riavviare SFLphone." #~ msgid "Creation of account has failed for the reason" -#~ msgstr "La creazione dell'account è fallita per il seguente motivo" +#~ msgstr "La creazione dell'accound è fallita per il seguente motivo" #~ msgid "Account creation wizard" #~ msgstr "Procedura guidata creazione account" #~ msgctxt "NAME OF TRANSLATORS" #~ msgid "Your names" -#~ msgstr "I tuoi nomi" +#~ msgstr "" #~ ",Launchpad Contributions:,Maurizio Porrato,Maxime Chambreuil, ,Launchpad " #~ "Contributions:,Maurizio Porrato,Maxime Chambreuil, ,Launchpad " #~ "Contributions:,Maurizio Porrato,Maxime Chambreuil" #~ msgctxt "EMAIL OF TRANSLATORS" #~ msgid "Your emails" -#~ msgstr "I tuoi indirizzi email" -#~ ",,,maxime.chambreuil@gmail.com,,,,maxime.chambreuil@gmail.com,,,,maxime.chamb" -#~ "reuil@gmail.com" +#~ msgstr "" +#~ ",,,maxime.chambreuil@gmail.com,,,,maxime.chambreuil@gmail.com,,,,maxime." +#~ "chambreuil@gmail.com" diff --git a/sflphone-client-gnome/po/pt_BR/pt_BR.po b/sflphone-client-gnome/po/pt_BR/pt_BR.po index 34f94f3dfd..0a5429e6c0 100644 --- a/sflphone-client-gnome/po/pt_BR/pt_BR.po +++ b/sflphone-client-gnome/po/pt_BR/pt_BR.po @@ -7,15 +7,15 @@ msgid "" msgstr "" "Project-Id-Version: sflphone\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-10-14 11:18-0400\n" -"PO-Revision-Date: 2009-10-15 18:00+0000\n" +"POT-Creation-Date: 2009-12-03 10:22-0500\n" +"PO-Revision-Date: 2009-10-26 20:46+0000\n" "Last-Translator: kalib <kalibslack@gmail.com>\n" "Language-Team: Brazilian Portuguese <pt_BR@li.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Launchpad-Export-Date: 2009-10-26 15:48+0000\n" +"X-Launchpad-Export-Date: 2009-12-03 15:32+0000\n" "X-Generator: Launchpad (build Unknown)\n" #: ../sflphone-client-gnome/src/accountlist.c:175 @@ -60,25 +60,15 @@ msgstr "Servidor stun inválido" msgid "Invalid" msgstr "Inválido" -#: ../sflphone-client-gnome/src/actions.c:54 -#: ../sflphone-client-gnome/src/sflnotify.c:94 -#, c-format -msgid "%d voice mail" -msgid_plural "%d voice mails" -msgstr[0] "%d mensagem de voz" -msgstr[1] "%d mensagens de voz" - -#: ../sflphone-client-gnome/src/actions.c:83 -#: ../sflphone-client-gnome/src/actions.c:919 -#: ../sflphone-client-gnome/src/actions.c:926 +#: ../sflphone-client-gnome/src/actions.c:98 msgid "Using account" msgstr "Utilizando conta" -#: ../sflphone-client-gnome/src/actions.c:89 +#: ../sflphone-client-gnome/src/actions.c:104 msgid "No registered accounts" msgstr "Sem contas registradas" -#: ../sflphone-client-gnome/src/actions.c:268 +#: ../sflphone-client-gnome/src/actions.c:285 msgid "" "Unable to connect to the SFLphone server.\n" "Make sure the daemon is running." @@ -86,22 +76,18 @@ msgstr "" "Incapaz de conectar ao servidor SFLphone.\n" "Tenha certeza de que o daemon está rodando." -#: ../sflphone-client-gnome/src/actions.c:913 -#, c-format -msgid "IP call - %s" -msgstr "Ligação IP - %s" - -#: ../sflphone-client-gnome/src/actions.c:922 -msgid "Codec" -msgstr "Codec" +#: ../sflphone-client-gnome/src/actions.c:589 +#: ../sflphone-client-gnome/src/actions.c:911 +msgid "Direct SIP call" +msgstr "Ligações IP diretas" -#: ../sflphone-client-gnome/src/actions.c:1119 +#: ../sflphone-client-gnome/src/actions.c:1103 #, c-format msgid "" "<b>Error: No audio codecs found.\n" "\n" -"</b> SFL audio codecs have to be placed in <i>%s</i> or in the " -"<b>.sflphone</b> directory in your home( <i>%s</i> )" +"</b> SFL audio codecs have to be placed in <i>%s</i> or in the <b>.sflphone</" +"b> directory in your home( <i>%s</i> )" msgstr "" "<b>Erro: Não foram encontrados codecs de áudio.\n" "\n" @@ -150,31 +136,31 @@ msgstr "Existem ligações em progresso" msgid "Do you still want to quit?" msgstr "Você ainda deseja sair?" -#: ../sflphone-client-gnome/src/mainwindow.c:299 +#: ../sflphone-client-gnome/src/mainwindow.c:298 msgid "SFLphone Error" msgstr "Erro no SFLphone" -#: ../sflphone-client-gnome/src/mainwindow.c:391 +#: ../sflphone-client-gnome/src/mainwindow.c:392 #, c-format msgid "ZRTP is not supported by peer %s\n" msgstr "ZRTP não é suportado pelo peer %s\n" -#: ../sflphone-client-gnome/src/mainwindow.c:392 +#: ../sflphone-client-gnome/src/mainwindow.c:393 msgid "Secure Communication Unavailable" msgstr "Comunicação Segura Indisponível" -#: ../sflphone-client-gnome/src/mainwindow.c:393 -#: ../sflphone-client-gnome/src/mainwindow.c:415 +#: ../sflphone-client-gnome/src/mainwindow.c:394 +#: ../sflphone-client-gnome/src/mainwindow.c:416 msgid "Continue" msgstr "Continuar" -#: ../sflphone-client-gnome/src/mainwindow.c:394 -#: ../sflphone-client-gnome/src/mainwindow.c:416 -#: ../sflphone-client-gnome/src/mainwindow.c:430 +#: ../sflphone-client-gnome/src/mainwindow.c:395 +#: ../sflphone-client-gnome/src/mainwindow.c:417 +#: ../sflphone-client-gnome/src/mainwindow.c:431 msgid "Stop Call" msgstr "Finalizar Chamada" -#: ../sflphone-client-gnome/src/mainwindow.c:413 +#: ../sflphone-client-gnome/src/mainwindow.c:414 #, c-format msgid "" "A %s error forced the call with %s to fall under unencrypted mode.\n" @@ -183,11 +169,11 @@ msgstr "" "Um erro %s forçou a ligação com %s a mudar para um modo não encriptado.\n" "Motivo exato: %s\n" -#: ../sflphone-client-gnome/src/mainwindow.c:414 +#: ../sflphone-client-gnome/src/mainwindow.c:415 msgid "ZRTP negotiation failed" msgstr "Negociação ZRTP falhou" -#: ../sflphone-client-gnome/src/mainwindow.c:427 +#: ../sflphone-client-gnome/src/mainwindow.c:428 #, c-format msgid "" "%s wants to stop using secure communication. Confirm will resume " @@ -196,11 +182,11 @@ msgstr "" "%s deseja finalizar a utilização de comunicação segura. A confirmação irá " "retomar sem SRTP.\n" -#: ../sflphone-client-gnome/src/mainwindow.c:428 +#: ../sflphone-client-gnome/src/mainwindow.c:429 msgid "Confirm Go Clear" msgstr "Confirmar Vá Limpar" -#: ../sflphone-client-gnome/src/mainwindow.c:429 +#: ../sflphone-client-gnome/src/mainwindow.c:430 msgid "Confirm" msgstr "Confirmar" @@ -215,6 +201,13 @@ msgstr "%s conta : %s" msgid "<i>From</i> %s" msgstr "<i>De</i> %s" +#: ../sflphone-client-gnome/src/sflnotify.c:94 +#, c-format +msgid "%d voice mail" +msgid_plural "%d voice mails" +msgstr[0] "%d mensagem de voz" +msgstr[1] "%d mensagens de voz" + #: ../sflphone-client-gnome/src/sflnotify.c:111 #, c-format msgid "Calling with %s account <i>%s</i>" @@ -264,15 +257,15 @@ msgstr "Volume dos auto-falantes" msgid "Mic volume" msgstr "Volume do microfone" -#: ../sflphone-client-gnome/src/statusicon.c:91 +#: ../sflphone-client-gnome/src/statusicon.c:96 msgid "_Show main window" msgstr "_Apresentar janela principal" -#: ../sflphone-client-gnome/src/statusicon.c:126 +#: ../sflphone-client-gnome/src/statusicon.c:131 msgid "SFLphone" msgstr "SFLphone" -#: ../sflphone-client-gnome/src/statusicon.c:127 +#: ../sflphone-client-gnome/src/statusicon.c:132 #, c-format msgid "%i account configured" msgid_plural "%i accounts configured" @@ -280,202 +273,397 @@ msgstr[0] "%i conta configurada" msgstr[1] "%i contas configuradas" #: ../sflphone-client-gnome/src/toolbar.c:38 -#: ../sflphone-client-gnome/src/uimanager.c:750 +#: ../sflphone-client-gnome/src/uimanager.c:693 +#: ../sflphone-client-gnome/src/uimanager.c:727 msgid "Voicemail" msgstr "Correio de voz" -#: ../sflphone-client-gnome/src/uimanager.c:403 +#: ../sflphone-client-gnome/src/uimanager.c:117 +msgid "No address book selected" +msgstr "Catálogo de endereços" + +#: ../sflphone-client-gnome/src/uimanager.c:137 +#: ../sflphone-client-gnome/src/uimanager.c:756 +msgid "Address book" +msgstr "Catálogo de endereços" + +#: ../sflphone-client-gnome/src/uimanager.c:279 +msgid "Voicemail (%i)" +msgstr "Correio de voz (%i)" + +#: ../sflphone-client-gnome/src/uimanager.c:342 msgid "SFLphone is a VoIP client compatible with SIP and IAX2 protocols." msgstr "SFLphone é um cliente VoIP compatível com os protocolos SIP e IAX2." -#: ../sflphone-client-gnome/src/uimanager.c:406 +#: ../sflphone-client-gnome/src/uimanager.c:345 msgid "About SFLphone" msgstr "Sobre o SFLphone" -#: ../sflphone-client-gnome/src/uimanager.c:1028 +#: ../sflphone-client-gnome/src/uimanager.c:719 +msgid "Call" +msgstr "_Chamar" + +#: ../sflphone-client-gnome/src/uimanager.c:720 +#: ../sflphone-client-gnome/src/uimanager.c:1184 +msgid "_New call" +msgstr "_Nova ligação" + +#: ../sflphone-client-gnome/src/uimanager.c:720 +msgid "Place a new call" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:721 +#: ../sflphone-client-gnome/src/uimanager.c:979 msgid "_Pick up" msgstr "_Atender" -#: ../sflphone-client-gnome/src/uimanager.c:1040 -#: ../sflphone-client-gnome/src/uimanager.c:1081 +#: ../sflphone-client-gnome/src/uimanager.c:721 +msgid "Answer the call" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:722 +#: ../sflphone-client-gnome/src/uimanager.c:991 +#: ../sflphone-client-gnome/src/uimanager.c:1032 msgid "_Hang up" msgstr "_Desligar" -#: ../sflphone-client-gnome/src/uimanager.c:1052 -#: ../sflphone-client-gnome/src/uimanager.c:1093 -msgid "On _Hold" +#: ../sflphone-client-gnome/src/uimanager.c:722 +msgid "Finish the call" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:723 +msgid "O_n hold" msgstr "Em _Espera" -#: ../sflphone-client-gnome/src/uimanager.c:1064 +#: ../sflphone-client-gnome/src/uimanager.c:723 +msgid "Place the call on hold" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:724 +msgid "O_ff hold" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:724 +msgid "Place the call off hold" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:725 +#: ../sflphone-client-gnome/src/uimanager.c:1015 msgid "_Record" msgstr "_Gravar" -#: ../sflphone-client-gnome/src/uimanager.c:1154 +#: ../sflphone-client-gnome/src/uimanager.c:725 +msgid "Record the current conversation" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:726 +msgid "Configuration _Assistant" +msgstr "Arquivo de Configuração" + +#: ../sflphone-client-gnome/src/uimanager.c:726 +msgid "Run the configuration assistant" +msgstr "Erro de configuração no stun" + +#: ../sflphone-client-gnome/src/uimanager.c:727 +msgid "Call your voicemail" +msgstr "%d mensagem de voz" + +#: ../sflphone-client-gnome/src/uimanager.c:728 +msgid "_Close" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:728 +msgid "Minimize to system tray" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:729 +msgid "_Quit" +msgstr "_Editar" + +#: ../sflphone-client-gnome/src/uimanager.c:729 +msgid "Quit the program" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:732 +msgid "_Edit" +msgstr "_Editar" + +#: ../sflphone-client-gnome/src/uimanager.c:733 +msgid "_Copy" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:733 +msgid "Copy the selection" +msgstr "Remover a conta selecionada" + +#: ../sflphone-client-gnome/src/uimanager.c:734 +msgid "_Paste" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:734 +msgid "Paste the clipboard" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:735 +msgid "Clear _history" +msgstr "Limpar _histórico" + +#: ../sflphone-client-gnome/src/uimanager.c:735 +msgid "Clear the call history" +msgstr "Limpar histórico" + +#: ../sflphone-client-gnome/src/uimanager.c:736 +msgid "_Accounts" +msgstr "_Contas" + +#: ../sflphone-client-gnome/src/uimanager.c:736 +msgid "Edit your accounts" +msgstr "Conta atual" + +#: ../sflphone-client-gnome/src/uimanager.c:737 +msgid "_Preferences" +msgstr "Preferências" + +#: ../sflphone-client-gnome/src/uimanager.c:737 +msgid "Change your preferences" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:740 +msgid "_View" +msgstr "_Exibir" + +#: ../sflphone-client-gnome/src/uimanager.c:743 +msgid "_Help" +msgstr "_Ajuda" + +#: ../sflphone-client-gnome/src/uimanager.c:744 +msgid "Contents" +msgstr "Continuar" + +#: ../sflphone-client-gnome/src/uimanager.c:744 +msgid "Open the manual" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:745 +msgid "About this application" +msgstr "Autenticação" + +#: ../sflphone-client-gnome/src/uimanager.c:751 +msgid "_Transfer" +msgstr "Transferir" + +#: ../sflphone-client-gnome/src/uimanager.c:751 +msgid "Transfer the call" +msgstr "Transfirir para: " + +#: ../sflphone-client-gnome/src/uimanager.c:752 +msgid "_Show toolbar" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:752 +msgid "Show the toolbar" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:753 +msgid "_Dialpad" +msgstr "Desabilitado" + +#: ../sflphone-client-gnome/src/uimanager.c:753 +msgid "Show the dialpad" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:754 +msgid "_Volume controls" +msgstr "_Controle de Volumes" + +#: ../sflphone-client-gnome/src/uimanager.c:754 +msgid "Show the volume controls" +msgstr "Exibir controles de volume" + +#: ../sflphone-client-gnome/src/uimanager.c:755 +msgid "_History" +msgstr "Histórico" + +#: ../sflphone-client-gnome/src/uimanager.c:755 +msgid "Calls history" +msgstr "Histórico de chamadas" + +#: ../sflphone-client-gnome/src/uimanager.c:756 +msgid "_Address book" +msgstr "Catálogo de endereços" + +#: ../sflphone-client-gnome/src/uimanager.c:1003 +#: ../sflphone-client-gnome/src/uimanager.c:1044 +msgid "On _Hold" +msgstr "Em _Espera" + +#: ../sflphone-client-gnome/src/uimanager.c:1107 msgid "_Call back" msgstr "_Ligar de volta" -#: ../sflphone-client-gnome/src/uimanager.c:1226 -msgid "_New call" -msgstr "_Nova ligação" - -#: ../sflphone-client-gnome/src/uimanager.c:1300 +#: ../sflphone-client-gnome/src/uimanager.c:1258 msgid "Edit phone number" msgstr "Editar número de telefone" -#: ../sflphone-client-gnome/src/uimanager.c:1311 +#: ../sflphone-client-gnome/src/uimanager.c:1269 msgid "Edit the phone number before making a call" msgstr "Edite o número de telefone antes de fazer uma ligação" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:164 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:180 msgid "Account Parameters" msgstr "Parâmetros de conta" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:173 -#: ../sflphone-client-gnome/src/config/assistant.c:294 -#: ../sflphone-client-gnome/src/config/assistant.c:402 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:189 +#: ../sflphone-client-gnome/src/config/assistant.c:314 +#: ../sflphone-client-gnome/src/config/assistant.c:427 msgid "_Alias" msgstr "_Apelido" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:181 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:197 msgid "_Protocol" msgstr "_Protocolo" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:199 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:215 msgid "Unknown" msgstr "Desconhecido" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:209 -#: ../sflphone-client-gnome/src/config/assistant.c:302 -#: ../sflphone-client-gnome/src/config/assistant.c:410 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:225 +#: ../sflphone-client-gnome/src/config/assistant.c:322 +#: ../sflphone-client-gnome/src/config/assistant.c:435 msgid "_Host name" msgstr "_Nome do host" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:217 -#: ../sflphone-client-gnome/src/config/assistant.c:310 -#: ../sflphone-client-gnome/src/config/assistant.c:418 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:233 +#: ../sflphone-client-gnome/src/config/assistant.c:330 +#: ../sflphone-client-gnome/src/config/assistant.c:443 msgid "_User name" msgstr "_Nome do usuário" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:234 -#: ../sflphone-client-gnome/src/config/assistant.c:326 -#: ../sflphone-client-gnome/src/config/assistant.c:433 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:250 +#: ../sflphone-client-gnome/src/config/assistant.c:346 +#: ../sflphone-client-gnome/src/config/assistant.c:458 msgid "_Password" msgstr "_Senha" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:254 -#: ../sflphone-client-gnome/src/config/assistant.c:344 -#: ../sflphone-client-gnome/src/config/assistant.c:449 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:270 +#: ../sflphone-client-gnome/src/config/assistant.c:363 +#: ../sflphone-client-gnome/src/config/assistant.c:473 +msgid "Show password" +msgstr "Senha" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:274 +#: ../sflphone-client-gnome/src/config/assistant.c:368 +#: ../sflphone-client-gnome/src/config/assistant.c:478 msgid "_Voicemail number" msgstr "_Senha da caixa postal de voz" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:340 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:361 msgid "Authentication" msgstr "Autenticação" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:341 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:362 msgid "Secret" msgstr "Segredo" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:466 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:605 msgid "Credential" msgstr "Credencial" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:501 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:640 msgid "Authentication name" msgstr "Nome de autenticação" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:512 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:651 msgid "Password" msgstr "Senha" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:535 -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:909 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:201 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:674 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1056 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:321 msgid "Security" msgstr "Segurança" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:547 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:213 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:687 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:333 msgid "Use TLS transport (sips)" msgstr "Use transporte TLS (sips)" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:552 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:218 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:693 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:338 msgid "SRTP key exchange" msgstr "Troca de chave SRTP" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:558 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:224 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:699 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:344 msgid "Disabled" msgstr "Desabilitado" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:674 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:795 msgid "Registration" msgstr "Registro" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:679 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:800 msgid "Registration expire" msgstr "Registro expira" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:687 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:809 msgid "_Comply with RFC 3263" msgstr "_De acordo com RFC 3263" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:693 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:463 -msgid "Network" -msgstr "Rede" +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:816 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:234 +msgid "Network Interface" +msgstr "A rede está inacessível" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:707 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:830 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:249 msgid "Local address" msgstr "Endereço local" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:744 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:880 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:301 msgid "Local port" msgstr "Porta local" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:752 -msgid "Set published address and port:" -msgstr "Indique endereço e portas publicadas" +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:893 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:928 +msgid "Published address" +msgstr "Endereço publicado" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:756 -msgid "Using STUN " +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:899 +msgid "Using STUN" msgstr "Utilizando STUN " -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:761 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:906 +msgid "STUN server URL" +msgstr "URL do servidor STUN" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:914 msgid "Same as local parameters" msgstr "Igual aos parâmetros locais" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:764 -msgid "Manually" -msgstr "Manualmente" - -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:769 -msgid "Published address" -msgstr "Endereço publicado" +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:917 +msgid "Set published address and port:" +msgstr "Indique endereço e portas publicadas" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:777 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:936 msgid "Published port" msgstr "Porta publicada" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:785 -msgid "STUN server URL" -msgstr "URL do servidor STUN" - -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:880 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1027 msgid "Account settings" msgstr "Configurações da conta" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:899 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1046 msgid "Basic" msgstr "Básico" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:904 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1051 msgid "Advanced" msgstr "Avançado" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:169 -msgid "Server returned \"" +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:164 +msgid "Server returned \"%s\" (%d)" msgstr "Servidor retornou \"" #: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:389 @@ -494,32 +682,18 @@ msgstr "Contas" msgid "Configured Accounts" msgstr "Contas Configuradas" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:505 -msgid "There " -msgstr "Ali " - -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:506 -msgid "is " -msgstr "está " - -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:506 -msgid "are " -msgstr "estão " +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:501 +msgid "There is %d active account" +msgid_plural "There are %d active accounts" +msgstr[0] " conta ativa" +msgstr[1] " conta ativa" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:508 -msgid " active account" -msgstr " conta ativa" - -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:509 -msgid "s" -msgstr "s" - -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:514 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:507 msgid "You have no active account" msgstr "Você não possui uma conta ativa" #: ../sflphone-client-gnome/src/config/addressbook-config.c:306 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:443 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:556 msgid "General" msgstr "Geral" @@ -564,16 +738,16 @@ msgid "Select which Evolution address books to use" msgstr "Selecione qual catálogo de endereços do Evolution deseja utilizar" #: ../sflphone-client-gnome/src/config/addressbook-config.c:404 -#: ../sflphone-client-gnome/src/config/audioconf.c:578 +#: ../sflphone-client-gnome/src/config/audioconf.c:577 msgid "Name" msgstr "Nome" -#: ../sflphone-client-gnome/src/config/assistant.c:69 +#: ../sflphone-client-gnome/src/config/assistant.c:75 #, c-format msgid "This assistant is now finished." msgstr "Este assistente está finalizado." -#: ../sflphone-client-gnome/src/config/assistant.c:71 +#: ../sflphone-client-gnome/src/config/assistant.c:77 msgid "" "You can at any time check your registration state or modify your accounts " "parameters in the Options/Accounts window." @@ -581,213 +755,208 @@ msgstr "" "Você pode a qualquer momento checar seu estado de registro ou modificar seus " "parâmetros de conta na janela Opções/Contas." -#: ../sflphone-client-gnome/src/config/assistant.c:74 +#: ../sflphone-client-gnome/src/config/assistant.c:80 msgid "Alias" msgstr "Apelido" -#: ../sflphone-client-gnome/src/config/assistant.c:78 +#: ../sflphone-client-gnome/src/config/assistant.c:84 msgid "Server" msgstr "Servidor" -#: ../sflphone-client-gnome/src/config/assistant.c:82 +#: ../sflphone-client-gnome/src/config/assistant.c:88 msgid "Username" msgstr "Nome de usuário" -#: ../sflphone-client-gnome/src/config/assistant.c:86 +#: ../sflphone-client-gnome/src/config/assistant.c:92 msgid "Security: " msgstr "Segurança: " -#: ../sflphone-client-gnome/src/config/assistant.c:88 +#: ../sflphone-client-gnome/src/config/assistant.c:94 msgid "SRTP/ZRTP draft-zimmermann" msgstr "SRTP/ZRTP rascunho-zimmermann" -#: ../sflphone-client-gnome/src/config/assistant.c:90 -#: ../sflphone-client-gnome/src/config/assistant.c:182 +#: ../sflphone-client-gnome/src/config/assistant.c:96 msgid "None" msgstr "Nenhum" -#: ../sflphone-client-gnome/src/config/assistant.c:210 +#: ../sflphone-client-gnome/src/config/assistant.c:229 msgid "SFLphone account creation wizard" msgstr "Assistente de criação de contas do SFLphone" -#: ../sflphone-client-gnome/src/config/assistant.c:236 +#: ../sflphone-client-gnome/src/config/assistant.c:255 msgid "Welcome to the Account creation wizard of SFLphone!" msgstr "Bem vindo ao assistente de criação de contas do SFLphone!" -#: ../sflphone-client-gnome/src/config/assistant.c:237 +#: ../sflphone-client-gnome/src/config/assistant.c:256 msgid "This installation wizard will help you configure an account." msgstr "Este assistente de instalação irá lhe ajudar a configurar uma conta." -#: ../sflphone-client-gnome/src/config/assistant.c:251 +#: ../sflphone-client-gnome/src/config/assistant.c:270 msgid "VoIP Protocols" msgstr "Protocolos VoIP" -#: ../sflphone-client-gnome/src/config/assistant.c:251 +#: ../sflphone-client-gnome/src/config/assistant.c:270 msgid "Select an account type" msgstr "Selecione um tipo de conta" -#: ../sflphone-client-gnome/src/config/assistant.c:253 +#: ../sflphone-client-gnome/src/config/assistant.c:272 msgid "SIP (Session Initiation Protocol)" msgstr "SIP (Session Initiation Protocol)" -#: ../sflphone-client-gnome/src/config/assistant.c:255 +#: ../sflphone-client-gnome/src/config/assistant.c:274 msgid "IAX2 (InterAsterix Exchange)" msgstr "IAX2 (InterAsterix Exchange)" -#: ../sflphone-client-gnome/src/config/assistant.c:269 +#: ../sflphone-client-gnome/src/config/assistant.c:288 msgid "Account" msgstr "Conta" -#: ../sflphone-client-gnome/src/config/assistant.c:269 +#: ../sflphone-client-gnome/src/config/assistant.c:288 msgid "Please select one of the following options" msgstr "Por favor, selecione uma das seguintes opções" -#: ../sflphone-client-gnome/src/config/assistant.c:271 +#: ../sflphone-client-gnome/src/config/assistant.c:290 msgid "Create a free SIP/IAX2 account on sflphone.org" msgstr "Criar uma conta gratuita SIP/IAX2 em sflphone.org" -#: ../sflphone-client-gnome/src/config/assistant.c:273 +#: ../sflphone-client-gnome/src/config/assistant.c:292 msgid "Register an existing SIP or IAX2 account" msgstr "Registrar uma conta SIP ou IAX2 existente" -#: ../sflphone-client-gnome/src/config/assistant.c:286 +#: ../sflphone-client-gnome/src/config/assistant.c:306 msgid "SIP account settings" msgstr "Configurações de conta SIP" -#: ../sflphone-client-gnome/src/config/assistant.c:286 -#: ../sflphone-client-gnome/src/config/assistant.c:394 +#: ../sflphone-client-gnome/src/config/assistant.c:306 +#: ../sflphone-client-gnome/src/config/assistant.c:419 msgid "Please fill the following information" msgstr "Por favor, preencha as informações a seguir" -#: ../sflphone-client-gnome/src/config/assistant.c:352 -#: ../sflphone-client-gnome/src/config/assistant.c:381 +#: ../sflphone-client-gnome/src/config/assistant.c:376 +#: ../sflphone-client-gnome/src/config/assistant.c:405 msgid "Secure communications with _ZRTP" msgstr "Comunicações seguras com _ZRTP" -#: ../sflphone-client-gnome/src/config/assistant.c:365 +#: ../sflphone-client-gnome/src/config/assistant.c:389 msgid "Optional email address" msgstr "Endereço de e-mail opcional" -#: ../sflphone-client-gnome/src/config/assistant.c:365 +#: ../sflphone-client-gnome/src/config/assistant.c:389 msgid "This email address will be used to send your voicemail messages." msgstr "" "Este endereço de email será utilizado para enviar as mensagens de voz em sua " "caixa postal." -#: ../sflphone-client-gnome/src/config/assistant.c:373 +#: ../sflphone-client-gnome/src/config/assistant.c:397 msgid "_Email address" msgstr "_endereço de email" -#: ../sflphone-client-gnome/src/config/assistant.c:394 +#: ../sflphone-client-gnome/src/config/assistant.c:419 msgid "IAX2 account settings" msgstr "Configurações de conta IAX2" -#: ../sflphone-client-gnome/src/config/assistant.c:467 +#: ../sflphone-client-gnome/src/config/assistant.c:496 msgid "Network Address Translation (NAT)" msgstr "Network Address Translation (NAT)" -#: ../sflphone-client-gnome/src/config/assistant.c:467 +#: ../sflphone-client-gnome/src/config/assistant.c:496 msgid "You should probably enable this if you are behind a firewall." msgstr "" "Você provavelmente precise habilitar isto se estiver por trás de um firewall." -#: ../sflphone-client-gnome/src/config/assistant.c:476 +#: ../sflphone-client-gnome/src/config/assistant.c:505 msgid "E_nable STUN" msgstr "Ha_bilitar STUN" -#: ../sflphone-client-gnome/src/config/assistant.c:483 +#: ../sflphone-client-gnome/src/config/assistant.c:512 msgid "_STUN server" msgstr "_Servidor STUN" -#: ../sflphone-client-gnome/src/config/assistant.c:497 +#: ../sflphone-client-gnome/src/config/assistant.c:526 msgid "Account Registration" msgstr "Registro de conta" -#: ../sflphone-client-gnome/src/config/assistant.c:497 +#: ../sflphone-client-gnome/src/config/assistant.c:526 msgid "Congratulations!" msgstr "Parabéns!" -#: ../sflphone-client-gnome/src/config/audioconf.c:583 +#: ../sflphone-client-gnome/src/config/audioconf.c:582 msgid "Frequency" msgstr "Frequência" -#: ../sflphone-client-gnome/src/config/audioconf.c:588 +#: ../sflphone-client-gnome/src/config/audioconf.c:587 msgid "Bitrate" msgstr "Taxa de bits" -#: ../sflphone-client-gnome/src/config/audioconf.c:593 +#: ../sflphone-client-gnome/src/config/audioconf.c:592 msgid "Bandwidth" msgstr "Largura de banda" -#: ../sflphone-client-gnome/src/config/audioconf.c:673 +#: ../sflphone-client-gnome/src/config/audioconf.c:670 msgid "ALSA plugin" msgstr "Plugin ALSA" -#: ../sflphone-client-gnome/src/config/audioconf.c:695 +#: ../sflphone-client-gnome/src/config/audioconf.c:692 msgid "Output" msgstr "Saída" -#: ../sflphone-client-gnome/src/config/audioconf.c:717 +#: ../sflphone-client-gnome/src/config/audioconf.c:714 msgid "Input" msgstr "Entrada" -#: ../sflphone-client-gnome/src/config/audioconf.c:752 +#: ../sflphone-client-gnome/src/config/audioconf.c:749 msgid "_Voice Activity Detection" msgstr "_Detecção de atividade de voz" -#: ../sflphone-client-gnome/src/config/audioconf.c:762 +#: ../sflphone-client-gnome/src/config/audioconf.c:759 msgid "_Noise Reduction (Narrow-Band Companding)" msgstr "_Redução de ruído (Utilização de banda-estreita)" -#: ../sflphone-client-gnome/src/config/audioconf.c:798 +#: ../sflphone-client-gnome/src/config/audioconf.c:800 msgid "Sound Manager" msgstr "Gerenciador de Som" -#: ../sflphone-client-gnome/src/config/audioconf.c:807 +#: ../sflphone-client-gnome/src/config/audioconf.c:809 msgid "_Pulseaudio" msgstr "_Pulseaudio" -#: ../sflphone-client-gnome/src/config/audioconf.c:811 +#: ../sflphone-client-gnome/src/config/audioconf.c:813 msgid "_ALSA" msgstr "_ALSA" -#: ../sflphone-client-gnome/src/config/audioconf.c:816 -msgid "_Mute other applications during a call" -msgstr "_Silenciar outras aplicações durante uma ligação" - -#: ../sflphone-client-gnome/src/config/audioconf.c:823 +#: ../sflphone-client-gnome/src/config/audioconf.c:819 msgid "ALSA settings" msgstr "Configurações do ALSA" -#: ../sflphone-client-gnome/src/config/audioconf.c:840 +#: ../sflphone-client-gnome/src/config/audioconf.c:836 msgid "Codecs" msgstr "Codecs" -#: ../sflphone-client-gnome/src/config/audioconf.c:869 +#: ../sflphone-client-gnome/src/config/audioconf.c:865 msgid "Recordings" msgstr "Gravações" -#: ../sflphone-client-gnome/src/config/audioconf.c:873 +#: ../sflphone-client-gnome/src/config/audioconf.c:869 msgid "Destination folder" msgstr "Pasta de destino" -#: ../sflphone-client-gnome/src/config/audioconf.c:877 +#: ../sflphone-client-gnome/src/config/audioconf.c:873 msgid "Select a folder" msgstr "Selecione uma pasta" -#: ../sflphone-client-gnome/src/config/audioconf.c:883 +#: ../sflphone-client-gnome/src/config/audioconf.c:879 msgid "Ringtones" msgstr "Ringtones" -#: ../sflphone-client-gnome/src/config/audioconf.c:889 +#: ../sflphone-client-gnome/src/config/audioconf.c:885 msgid "_Enable ringtones" msgstr "_Habilitar ringtones" -#: ../sflphone-client-gnome/src/config/audioconf.c:895 +#: ../sflphone-client-gnome/src/config/audioconf.c:891 msgid "Choose a ringtone" msgstr "Escolha um ringtone" -#: ../sflphone-client-gnome/src/config/audioconf.c:901 +#: ../sflphone-client-gnome/src/config/audioconf.c:897 msgid "Audio Files" msgstr "Arquivos de Áudio" @@ -824,7 +993,7 @@ msgstr "Reescrevendo número do telefone" msgid "_Prefix dialed numbers with" msgstr "_Prefixo de números discados com" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:195 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:225 msgid "" "This profile is used when you want to reach a remote peer simply by typing a " "sip URI such as <b>sip:remotepeer</b>. The settings you define here will " @@ -835,79 +1004,59 @@ msgstr "" "configurações que você definir aqui também serão utilizadas se nenhuma conta " "puder ser combinada a uma chamada de entrada ou de saída." -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:274 -msgid "SIP Port" -msgstr "Porta SIP" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:281 -msgid "UDP Transport" -msgstr "Transporte UDP" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:319 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:440 msgid "Desktop Notifications" msgstr "Notificações de Desktop" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:323 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:444 msgid "_Enable notifications" msgstr "_Habilitar notificações" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:329 -msgid "Enable voicemail _notifications" -msgstr "Habilitar _notificações de correio de voz" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:341 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:450 msgid "System Tray Icon" msgstr "Ícone da bandeja do sistema" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:344 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:453 msgid "_Popup main window on incoming call" msgstr "_Popup na janela principal ao receber ligação" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:349 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:457 msgid "Ne_ver popup main window" msgstr "Nu_nca apresentar popup na janela principal" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:353 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:463 msgid "Hide SFLphone window on _startup" msgstr "Esconder o SFLphone na _inicialização" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:359 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:469 msgid "Calls History" msgstr "Histórico de Chamadas" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:362 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:472 msgid "_Keep my history for at least" msgstr "_Manter meu histórico por pelo ao menos" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:373 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:483 msgid "days" msgstr "dias" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:377 -msgid "Configuration File" -msgstr "Arquivo de Configuração" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:379 -msgid "Store SIP credentials as MD5 hash" -msgstr "Armazenar as credenciais SIP como hash MD5" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:423 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:536 msgid "Preferences" msgstr "Preferências" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:448 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:561 msgid "Audio" msgstr "Áudio" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:453 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:566 msgid "Address Book" msgstr "Catálogo de endereços" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:458 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:571 msgid "Hooks" msgstr "Ganchos" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:468 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:581 msgid "Direct IP calls" msgstr "Ligações IP diretas" @@ -915,11 +1064,11 @@ msgstr "Ligações IP diretas" msgid "Advanced options for TLS" msgstr "Opções avançadas para o TLS" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:55 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:56 msgid "TLS transport" msgstr "Transporte TLS" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:59 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:60 msgid "" "TLS transport can be used along with UDP for those calls that would\n" "require secure sip transactions (aka SIPS). You can configure a different\n" @@ -934,55 +1083,55 @@ msgstr "" "funcionar em uma\n" "porta dedicada, uma diferente da outra\n" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:100 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:103 msgid "Certificate of Authority list" msgstr "Certificado da lista de Autoridades" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:104 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:107 msgid "Choose a CA list file (optional)" msgstr "Escolha um arquivo de lista CA (opcional)" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:115 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:131 msgid "Public endpoint certificate file" msgstr "Arquivo certificado endpoint público" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:119 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:135 msgid "Choose a public endpoint certificate (optional)" msgstr "Escolha um certificado endpoint público (opcional)" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:134 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:159 msgid "Choose a private key file (optional)" msgstr "Escolha um arquivo de chave privada (opcional)" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:145 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:181 msgid "Password for the private key" msgstr "Senha para a chave privada" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:168 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:204 msgid "TLS protocol method" msgstr "Método do protocolo TLS" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:202 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:238 msgid "TLS cipher list" msgstr "Lista de cifras TLS" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:211 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:247 msgid "Server name instance for outgoing TLS connection" msgstr "Instância de nome do servidor para saída da conexão TLS" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:219 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:255 msgid "Negotiation timeout (sec:msec)" msgstr "Tempo de negociação expirado (seg:mseg)" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:236 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:272 msgid "Verify incoming certificates, as a server" msgstr "Verificar os certificados de entrada, como um servidor" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:242 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:278 msgid "Verify certificates from answer, as a client" msgstr "Verificar certificados de resposta, como um cliente" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:248 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:284 msgid "Require certificate for incoming tls connections" msgstr "Requer certificado para conexões tls entrantes" @@ -990,51 +1139,87 @@ msgstr "Requer certificado para conexões tls entrantes" msgid "ZRTP Options" msgstr "Opções ZRTP" -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:68 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:69 msgid "Send Hello Hash in S_DP" msgstr "Enviar um Hash Olá no S_DP" -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:74 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:75 msgid "Ask User to Confirm SAS" msgstr "Pergunta ao Usuário para Confirmar SAS" -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:80 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:81 msgid "_Warn if ZRTP not supported" msgstr "_Alerta se o ZRTP não é suportado" -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:86 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:87 msgid "Display SAS once for hold events" msgstr "Apresenta o SAS uma vez para realizar eventos" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:56 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:58 msgid "Search all" msgstr "Buscar todos" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:57 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:70 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:82 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:94 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:59 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:72 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:84 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:96 msgid "Click here to change the search type" msgstr "Clique aqui para alterar o tipo de pesquisa" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:69 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:71 msgid "Search by missed call" msgstr "Buscar por ligações perdidas" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:81 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:83 msgid "Search by incoming call" msgstr "Buscar por ligações recebidas" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:93 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:95 msgid "Search by outgoing call" msgstr "Buscar por ligações feitas" +#~ msgid "IP call - %s" +#~ msgstr "Ligação IP - %s" + +#~ msgid "Codec" +#~ msgstr "Codec" + +#~ msgid "Network" +#~ msgstr "Rede" + +#~ msgid "Manually" +#~ msgstr "Manualmente" + +#~ msgid "There " +#~ msgstr "Ali " + +#~ msgid "is " +#~ msgstr "está " + +#~ msgid "are " +#~ msgstr "estão " + +#~ msgid "s" +#~ msgstr "s" + +#~ msgid "_Mute other applications during a call" +#~ msgstr "_Silenciar outras aplicações durante uma ligação" + +#~ msgid "SIP Port" +#~ msgstr "Porta SIP" + +#~ msgid "UDP Transport" +#~ msgstr "Transporte UDP" + +#~ msgid "Enable voicemail _notifications" +#~ msgstr "Habilitar _notificações de correio de voz" + +#~ msgid "Store SIP credentials as MD5 hash" +#~ msgstr "Armazenar as credenciais SIP como hash MD5" + #~ msgid "Stun Server" #~ msgstr "Servidor STUN" -#~ msgid "Call history" -#~ msgstr "Histórico de chamadas" - #~ msgid "(C) 2009 Savoir-faire Linux" #~ msgstr "(C) 2009 Savoir-faire Linux" @@ -1050,15 +1235,9 @@ msgstr "Buscar por ligações feitas" #~ msgid "Record" #~ msgstr "Gravar" -#~ msgid "Transfer" -#~ msgstr "Transferir" - #~ msgid "Hang up" #~ msgstr "Desligar" -#~ msgid "Remove the selected account" -#~ msgstr "Remover a conta selecionada" - #~ msgid "Display" #~ msgstr "Exibir" @@ -1095,18 +1274,6 @@ msgstr "Buscar por ligações feitas" #~ msgid "Enable notifications" #~ msgstr "Habilitar notificações" -#~ msgid "History" -#~ msgstr "Histórico" - -#~ msgid "_Help" -#~ msgstr "_Ajuda" - -#~ msgid "_Call" -#~ msgstr "_Chamar" - -#~ msgid "_Edit" -#~ msgstr "_Editar" - #~ msgid "NAT Traversal" #~ msgstr "NAT Traversal" @@ -1126,15 +1293,12 @@ msgstr "Buscar por ligações feitas" #~ "After checking the settings you chose, click \"Finish\" to create the " #~ "account." #~ msgstr "" -#~ "Após checar as configurações que deseja, clique em \"Finalizar\" para criar " -#~ "a conta." +#~ "Após checar as configurações que deseja, clique em \"Finalizar\" para " +#~ "criar a conta." #~ msgid "Enable STUN" #~ msgstr "Habilitar STUN" -#~ msgid "Transfer to : " -#~ msgstr "Transfirir para: " - #~ msgid "Default account" #~ msgstr "Conta padrão" @@ -1144,12 +1308,6 @@ msgstr "Buscar por ligações feitas" #~ msgid "Main screen" #~ msgstr "Tela principal" -#~ msgid "Address book" -#~ msgstr "Catálogo de endereços" - -#~ msgid "Display volume controls" -#~ msgstr "Exibir controles de volume" - #~ msgid "Configure SFLphone" #~ msgstr "Configurar SFLphone" @@ -1186,32 +1344,32 @@ msgstr "Buscar por ligações feitas" #~ msgid "" #~ "By default, when you place a call, sflphone will use the first account in " #~ "this list which is \"registered\". Change the order of the accounts using " -#~ "the \"Up\" and \"Down\" arrows. Enable/disable them by checking/unchecking " -#~ "them on the left of the item. Add or remove some with \"Plus\" and \"Sub\" " -#~ "buttons. Edit the selected account with the form on the right." +#~ "the \"Up\" and \"Down\" arrows. Enable/disable them by checking/" +#~ "unchecking them on the left of the item. Add or remove some with \"Plus\" " +#~ "and \"Sub\" buttons. Edit the selected account with the form on the right." #~ msgstr "" #~ "Por padrão, quando você realiza uma ligação, sflphone utilizará a prieira " -#~ "conta desta lista que estiver \"registrada\". Modifique a ordem das contas " -#~ "utilizando as setas de \"Cima\" e \"Baixo\". Habilite/desabilite as " -#~ "marcando/desmarcando à esquerda de cada item. Adicione ou remova algumas com " -#~ "os botões \"Adicionar\" e \"Remover\". Edite a conta selecionada com o " -#~ "formulário à direita." +#~ "conta desta lista que estiver \"registrada\". Modifique a ordem das " +#~ "contas utilizando as setas de \"Cima\" e \"Baixo\". Habilite/desabilite " +#~ "as marcando/desmarcando à esquerda de cada item. Adicione ou remova " +#~ "algumas com os botões \"Adicionar\" e \"Remover\". Edite a conta " +#~ "selecionada com o formulário à direita." #~ msgid "" -#~ "This button will remove the selected account in the list below. Be sure you " -#~ "really don't need it anymore. If you think you might use it again later, " -#~ "just uncheck it." +#~ "This button will remove the selected account in the list below. Be sure " +#~ "you really don't need it anymore. If you think you might use it again " +#~ "later, just uncheck it." #~ msgstr "" #~ "Este botão irá remover a conta selecionada na lista apresentada. Tenha " #~ "certeza de que você não precisa mais dela. Se você acha que você irá " #~ "utilizar ela novamente, apenas desmarque a opção." #~ msgid "" -#~ "This button enables you to initialize a new account. You will then be able " -#~ "to edit it using the form on the right." +#~ "This button enables you to initialize a new account. You will then be " +#~ "able to edit it using the form on the right." #~ msgstr "" -#~ "Este botão lhe permite iniciar uma nova conta. Em seguida você poderá edita-" -#~ "la utilizando o formulário à direita." +#~ "Este botão lhe permite iniciar uma nova conta. Em seguida você poderá " +#~ "edita-la utilizando o formulário à direita." #~ msgid "Get this account down" #~ msgstr "Desabilitar esta conta" @@ -1222,8 +1380,8 @@ msgstr "Buscar por ligações feitas" #~ "the \"Up\" and \"Down\" arrows." #~ msgstr "" #~ "Por padrão, quando você inicia uma ligação, o sflphone irá utilizar a " -#~ "primeira conta desta lista que estiver \"registrada\". Modifique a ordem das " -#~ "contas utilizando as setas para \"Cima\" e para \"Baixo\"." +#~ "primeira conta desta lista que estiver \"registrada\". Modifique a ordem " +#~ "das contas utilizando as setas para \"Cima\" e para \"Baixo\"." #~ msgid "Get this account up" #~ msgstr "Habilite esta conta" @@ -1294,9 +1452,6 @@ msgstr "Buscar por ligações feitas" #~ msgid "Trigger on specific SIP header" #~ msgstr "Gancho no cabeçalho SIP específico" -#~ msgid "Clear history" -#~ msgstr "Limpar histórico" - #~ msgid "Attention:number of results exceeds max displayed." #~ msgstr "Atencão:número de resultados excede o máximo de exibição" @@ -1306,18 +1461,6 @@ msgstr "Buscar por ligações feitas" #~ msgid "_Account creation wizard" #~ msgstr "_Assistante de criação de conta" -#~ msgid "_View" -#~ msgstr "_Exibir" - -#~ msgid "_Accounts" -#~ msgstr "_Contas" - -#~ msgid "Clear _history" -#~ msgstr "Limpar _histórico" - -#~ msgid "_Volume Controls" -#~ msgstr "_Controle de Volumes" - #~ msgid "_Enable this account" #~ msgstr "_Habilitar esta conta" @@ -1333,11 +1476,11 @@ msgstr "Buscar por ligações feitas" #~ "sessões." #~ msgid "" -#~ "Pressing \"apply\" will restart the network layer. Otherwise, SFLPhone would " -#~ "have to be restarted." +#~ "Pressing \"apply\" will restart the network layer. Otherwise, SFLPhone " +#~ "would have to be restarted." #~ msgstr "" -#~ "Pressionando \"aplicar\" a camada de rede será reiniciada. De outra forma o " -#~ "SFKPhone teria que ser reiniciado." +#~ "Pressionando \"aplicar\" a camada de rede será reiniciada. De outra forma " +#~ "o SFKPhone teria que ser reiniciado." #~ msgid "PulseAudio sound server" #~ msgstr "Servidor de som PulseAudio" @@ -1347,10 +1490,11 @@ msgstr "Buscar por ligações feitas" #~ msgstr "" #~ ",Launchpad Contributions:,Maxime Chambreuil,kalib, ,Launchpad " #~ "Contributions:,Maxime Chambreuil,kalib, ,Launchpad Contributions:,Maxime " -#~ "Chambreuil,kalib" +#~ "Chambreuil,kalib, ,Launchpad Contributions:,Maxime Chambreuil,kalib" #~ msgctxt "EMAIL OF TRANSLATORS" #~ msgid "Your emails" #~ msgstr "" -#~ ",,maxime.chambreuil@gmail.com,kalibslack@gmail.com,,,maxime.chambreuil@gmail." -#~ "com,kalibslack@gmail.com,,,maxime.chambreuil@gmail.com,kalibslack@gmail.com" +#~ ",,maxime.chambreuil@gmail.com,kalibslack@gmail.com,,,maxime." +#~ "chambreuil@gmail.com,kalibslack@gmail.com,,,maxime.chambreuil@gmail.com," +#~ "kalibslack@gmail.com,,,maxime.chambreuil@gmail.com,kalibslack@gmail.com" diff --git a/sflphone-client-gnome/po/ru/ru.po b/sflphone-client-gnome/po/ru/ru.po index 319dfce2c0..18045ccd61 100644 --- a/sflphone-client-gnome/po/ru/ru.po +++ b/sflphone-client-gnome/po/ru/ru.po @@ -7,16 +7,16 @@ msgid "" msgstr "" "Project-Id-Version: SFLphone 0.9.6\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-10-14 11:18-0400\n" -"PO-Revision-Date: 2009-10-21 22:26+0000\n" -"Last-Translator: Hussein Abdallah <Unknown>\n" +"POT-Creation-Date: 2009-12-03 10:22-0500\n" +"PO-Revision-Date: 2009-10-26 20:46+0000\n" +"Last-Translator: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com>\n" "Language-Team: Savoir-Faire Linux Inc <sflphoneteam@savoirfairelinux.com>\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%10==1 && n%100!=11 ? 0 : n%10>=2 && " -"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" -"X-Launchpad-Export-Date: 2009-10-26 15:48+0000\n" +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" +"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" +"X-Launchpad-Export-Date: 2009-12-03 15:32+0000\n" "X-Generator: Launchpad (build Unknown)\n" #: ../sflphone-client-gnome/src/accountlist.c:175 @@ -61,26 +61,15 @@ msgstr "Неверный сервер Stun" msgid "Invalid" msgstr "Неверный" -#: ../sflphone-client-gnome/src/actions.c:54 -#: ../sflphone-client-gnome/src/sflnotify.c:94 -#, c-format -msgid "%d voice mail" -msgid_plural "%d voice mails" -msgstr[0] "%d голосовое письмо" -msgstr[1] "%d голосовые письма" -msgstr[2] "%d голосовые письма" - -#: ../sflphone-client-gnome/src/actions.c:83 -#: ../sflphone-client-gnome/src/actions.c:919 -#: ../sflphone-client-gnome/src/actions.c:926 +#: ../sflphone-client-gnome/src/actions.c:98 msgid "Using account" msgstr "Используя учетную запись" -#: ../sflphone-client-gnome/src/actions.c:89 +#: ../sflphone-client-gnome/src/actions.c:104 msgid "No registered accounts" msgstr "У вас нет зарегистрированных аккаунтов" -#: ../sflphone-client-gnome/src/actions.c:268 +#: ../sflphone-client-gnome/src/actions.c:285 msgid "" "Unable to connect to the SFLphone server.\n" "Make sure the daemon is running." @@ -88,27 +77,23 @@ msgstr "" "Невозможно подключиться к SFLphone-серверу.\n" "Проверьте если демон работает." -#: ../sflphone-client-gnome/src/actions.c:913 -#, c-format -msgid "IP call - %s" -msgstr "IP звонок - %s" - -#: ../sflphone-client-gnome/src/actions.c:922 -msgid "Codec" -msgstr "Codec" +#: ../sflphone-client-gnome/src/actions.c:589 +#: ../sflphone-client-gnome/src/actions.c:911 +msgid "Direct SIP call" +msgstr "Прямые IP-звонки" -#: ../sflphone-client-gnome/src/actions.c:1119 +#: ../sflphone-client-gnome/src/actions.c:1103 #, c-format msgid "" "<b>Error: No audio codecs found.\n" "\n" -"</b> SFL audio codecs have to be placed in <i>%s</i> or in the " -"<b>.sflphone</b> directory in your home( <i>%s</i> )" +"</b> SFL audio codecs have to be placed in <i>%s</i> or in the <b>.sflphone</" +"b> directory in your home( <i>%s</i> )" msgstr "" "<b>Ошибка: звуковые кодеки не найдены.\n" "\n" -"</b> Звуковые кодеки SFL должны находиться в <i>%s</i> или в " -"<b>.sflphone</b> каталоге в вашем домашнем каталоге( <i>%s</i> )" +"</b> Звуковые кодеки SFL должны находиться в <i>%s</i> или в <b>.sflphone</" +"b> каталоге в вашем домашнем каталоге( <i>%s</i> )" #: ../sflphone-client-gnome/src/errors.c:29 msgid "" @@ -152,31 +137,31 @@ msgstr "Несколько звонков ещё не окончены." msgid "Do you still want to quit?" msgstr "Вы уверенны что хотите выйти?" -#: ../sflphone-client-gnome/src/mainwindow.c:299 +#: ../sflphone-client-gnome/src/mainwindow.c:298 msgid "SFLphone Error" msgstr "Ошибка SFLphone." -#: ../sflphone-client-gnome/src/mainwindow.c:391 +#: ../sflphone-client-gnome/src/mainwindow.c:392 #, c-format msgid "ZRTP is not supported by peer %s\n" msgstr "не поддерживается устройством %s\n" -#: ../sflphone-client-gnome/src/mainwindow.c:392 +#: ../sflphone-client-gnome/src/mainwindow.c:393 msgid "Secure Communication Unavailable" msgstr "Зашифрованная связь недоступна." -#: ../sflphone-client-gnome/src/mainwindow.c:393 -#: ../sflphone-client-gnome/src/mainwindow.c:415 +#: ../sflphone-client-gnome/src/mainwindow.c:394 +#: ../sflphone-client-gnome/src/mainwindow.c:416 msgid "Continue" msgstr "Продолжить" -#: ../sflphone-client-gnome/src/mainwindow.c:394 -#: ../sflphone-client-gnome/src/mainwindow.c:416 -#: ../sflphone-client-gnome/src/mainwindow.c:430 +#: ../sflphone-client-gnome/src/mainwindow.c:395 +#: ../sflphone-client-gnome/src/mainwindow.c:417 +#: ../sflphone-client-gnome/src/mainwindow.c:431 msgid "Stop Call" msgstr "Закончить звонок" -#: ../sflphone-client-gnome/src/mainwindow.c:413 +#: ../sflphone-client-gnome/src/mainwindow.c:414 #, c-format msgid "" "A %s error forced the call with %s to fall under unencrypted mode.\n" @@ -185,11 +170,11 @@ msgstr "" "Из-за ошибки %s переговор с %s перейдëт в не зашифрованный режим.\n" "Точная причина: %s\n" -#: ../sflphone-client-gnome/src/mainwindow.c:414 +#: ../sflphone-client-gnome/src/mainwindow.c:415 msgid "ZRTP negotiation failed" msgstr "Неудачный обмен информации ZRTP" -#: ../sflphone-client-gnome/src/mainwindow.c:427 +#: ../sflphone-client-gnome/src/mainwindow.c:428 #, c-format msgid "" "%s wants to stop using secure communication. Confirm will resume " @@ -198,11 +183,11 @@ msgstr "" "%s хочет остановить зашифрованную связь. В случае подтверждения переговор " "продолжится без SRTP.\n" -#: ../sflphone-client-gnome/src/mainwindow.c:428 +#: ../sflphone-client-gnome/src/mainwindow.c:429 msgid "Confirm Go Clear" msgstr "Подтвердить переход на незашифрованную связь" -#: ../sflphone-client-gnome/src/mainwindow.c:429 +#: ../sflphone-client-gnome/src/mainwindow.c:430 msgid "Confirm" msgstr "Подтвердить" @@ -217,6 +202,14 @@ msgstr "%s аккаунт: %s" msgid "<i>From</i> %s" msgstr "<i>От:</i> %s" +#: ../sflphone-client-gnome/src/sflnotify.c:94 +#, c-format +msgid "%d voice mail" +msgid_plural "%d voice mails" +msgstr[0] "%d голосовое письмо" +msgstr[1] "%d голосовые письма" +msgstr[2] "%d голосовые письма" + #: ../sflphone-client-gnome/src/sflnotify.c:111 #, c-format msgid "Calling with %s account <i>%s</i>" @@ -266,15 +259,15 @@ msgstr "Громкость" msgid "Mic volume" msgstr "Громкость микрофона" -#: ../sflphone-client-gnome/src/statusicon.c:91 +#: ../sflphone-client-gnome/src/statusicon.c:96 msgid "_Show main window" msgstr "_Показать главное окно" -#: ../sflphone-client-gnome/src/statusicon.c:126 +#: ../sflphone-client-gnome/src/statusicon.c:131 msgid "SFLphone" msgstr "SFLphone" -#: ../sflphone-client-gnome/src/statusicon.c:127 +#: ../sflphone-client-gnome/src/statusicon.c:132 #, c-format msgid "%i account configured" msgid_plural "%i accounts configured" @@ -283,202 +276,397 @@ msgstr[1] "%i аккаунтов настроены" msgstr[2] "%i аккаунтов настроены" #: ../sflphone-client-gnome/src/toolbar.c:38 -#: ../sflphone-client-gnome/src/uimanager.c:750 +#: ../sflphone-client-gnome/src/uimanager.c:693 +#: ../sflphone-client-gnome/src/uimanager.c:727 msgid "Voicemail" msgstr "Автоответчик" -#: ../sflphone-client-gnome/src/uimanager.c:403 +#: ../sflphone-client-gnome/src/uimanager.c:117 +msgid "No address book selected" +msgstr "Адресная книга" + +#: ../sflphone-client-gnome/src/uimanager.c:137 +#: ../sflphone-client-gnome/src/uimanager.c:756 +msgid "Address book" +msgstr "Адресная книга" + +#: ../sflphone-client-gnome/src/uimanager.c:279 +msgid "Voicemail (%i)" +msgstr "Автоответчик" + +#: ../sflphone-client-gnome/src/uimanager.c:342 msgid "SFLphone is a VoIP client compatible with SIP and IAX2 protocols." msgstr "SFLphone - SIP и IAX2-совместимый VoIP-клиент" -#: ../sflphone-client-gnome/src/uimanager.c:406 +#: ../sflphone-client-gnome/src/uimanager.c:345 msgid "About SFLphone" msgstr "О SFLphone" -#: ../sflphone-client-gnome/src/uimanager.c:1028 +#: ../sflphone-client-gnome/src/uimanager.c:719 +msgid "Call" +msgstr "_Звонок" + +#: ../sflphone-client-gnome/src/uimanager.c:720 +#: ../sflphone-client-gnome/src/uimanager.c:1184 +msgid "_New call" +msgstr "_Новый звонок" + +#: ../sflphone-client-gnome/src/uimanager.c:720 +msgid "Place a new call" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:721 +#: ../sflphone-client-gnome/src/uimanager.c:979 msgid "_Pick up" msgstr "_Взять трубку" -#: ../sflphone-client-gnome/src/uimanager.c:1040 -#: ../sflphone-client-gnome/src/uimanager.c:1081 +#: ../sflphone-client-gnome/src/uimanager.c:721 +msgid "Answer the call" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:722 +#: ../sflphone-client-gnome/src/uimanager.c:991 +#: ../sflphone-client-gnome/src/uimanager.c:1032 msgid "_Hang up" msgstr "_Положить трубку" -#: ../sflphone-client-gnome/src/uimanager.c:1052 -#: ../sflphone-client-gnome/src/uimanager.c:1093 -msgid "On _Hold" +#: ../sflphone-client-gnome/src/uimanager.c:722 +msgid "Finish the call" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:723 +msgid "O_n hold" msgstr "_Удержать звонок" -#: ../sflphone-client-gnome/src/uimanager.c:1064 +#: ../sflphone-client-gnome/src/uimanager.c:723 +msgid "Place the call on hold" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:724 +msgid "O_ff hold" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:724 +msgid "Place the call off hold" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:725 +#: ../sflphone-client-gnome/src/uimanager.c:1015 msgid "_Record" msgstr "Записать" -#: ../sflphone-client-gnome/src/uimanager.c:1154 +#: ../sflphone-client-gnome/src/uimanager.c:725 +msgid "Record the current conversation" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:726 +msgid "Configuration _Assistant" +msgstr "Файл конфигурации" + +#: ../sflphone-client-gnome/src/uimanager.c:726 +msgid "Run the configuration assistant" +msgstr "Ошибка конфигурации Stun" + +#: ../sflphone-client-gnome/src/uimanager.c:727 +msgid "Call your voicemail" +msgstr "%d голосовое письмо" + +#: ../sflphone-client-gnome/src/uimanager.c:728 +msgid "_Close" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:728 +msgid "Minimize to system tray" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:729 +msgid "_Quit" +msgstr "_Правка" + +#: ../sflphone-client-gnome/src/uimanager.c:729 +msgid "Quit the program" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:732 +msgid "_Edit" +msgstr "_Правка" + +#: ../sflphone-client-gnome/src/uimanager.c:733 +msgid "_Copy" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:733 +msgid "Copy the selection" +msgstr "Удалить выбранную учетную запись" + +#: ../sflphone-client-gnome/src/uimanager.c:734 +msgid "_Paste" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:734 +msgid "Paste the clipboard" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:735 +msgid "Clear _history" +msgstr "_Стереть журнал" + +#: ../sflphone-client-gnome/src/uimanager.c:735 +msgid "Clear the call history" +msgstr "Очистить историю" + +#: ../sflphone-client-gnome/src/uimanager.c:736 +msgid "_Accounts" +msgstr "_Аккаунты" + +#: ../sflphone-client-gnome/src/uimanager.c:736 +msgid "Edit your accounts" +msgstr "Нынешний аккаунт" + +#: ../sflphone-client-gnome/src/uimanager.c:737 +msgid "_Preferences" +msgstr "Предпочтения" + +#: ../sflphone-client-gnome/src/uimanager.c:737 +msgid "Change your preferences" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:740 +msgid "_View" +msgstr "_Вид" + +#: ../sflphone-client-gnome/src/uimanager.c:743 +msgid "_Help" +msgstr "_Помощь" + +#: ../sflphone-client-gnome/src/uimanager.c:744 +msgid "Contents" +msgstr "Продолжить" + +#: ../sflphone-client-gnome/src/uimanager.c:744 +msgid "Open the manual" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:745 +msgid "About this application" +msgstr "Идентификация" + +#: ../sflphone-client-gnome/src/uimanager.c:751 +msgid "_Transfer" +msgstr "Переслать звонок на другой номер" + +#: ../sflphone-client-gnome/src/uimanager.c:751 +msgid "Transfer the call" +msgstr "Передать : " + +#: ../sflphone-client-gnome/src/uimanager.c:752 +msgid "_Show toolbar" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:752 +msgid "Show the toolbar" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:753 +msgid "_Dialpad" +msgstr "Отключен" + +#: ../sflphone-client-gnome/src/uimanager.c:753 +msgid "Show the dialpad" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:754 +msgid "_Volume controls" +msgstr "_Настройки громкости" + +#: ../sflphone-client-gnome/src/uimanager.c:754 +msgid "Show the volume controls" +msgstr "_Настройки громкости" + +#: ../sflphone-client-gnome/src/uimanager.c:755 +msgid "_History" +msgstr "Журнал" + +#: ../sflphone-client-gnome/src/uimanager.c:755 +msgid "Calls history" +msgstr "История звонков" + +#: ../sflphone-client-gnome/src/uimanager.c:756 +msgid "_Address book" +msgstr "Адресная книга" + +#: ../sflphone-client-gnome/src/uimanager.c:1003 +#: ../sflphone-client-gnome/src/uimanager.c:1044 +msgid "On _Hold" +msgstr "_Удержать звонок" + +#: ../sflphone-client-gnome/src/uimanager.c:1107 msgid "_Call back" msgstr "_Перезвонить" -#: ../sflphone-client-gnome/src/uimanager.c:1226 -msgid "_New call" -msgstr "_Новый звонок" - -#: ../sflphone-client-gnome/src/uimanager.c:1300 +#: ../sflphone-client-gnome/src/uimanager.c:1258 msgid "Edit phone number" msgstr "Мобильный телефон" -#: ../sflphone-client-gnome/src/uimanager.c:1311 +#: ../sflphone-client-gnome/src/uimanager.c:1269 msgid "Edit the phone number before making a call" msgstr "Изменить номер телефона перед звонком" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:164 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:180 msgid "Account Parameters" msgstr "Параметры учетной записи" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:173 -#: ../sflphone-client-gnome/src/config/assistant.c:294 -#: ../sflphone-client-gnome/src/config/assistant.c:402 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:189 +#: ../sflphone-client-gnome/src/config/assistant.c:314 +#: ../sflphone-client-gnome/src/config/assistant.c:427 msgid "_Alias" msgstr "_Псевдоним" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:181 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:197 msgid "_Protocol" msgstr "Пр_отокол" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:199 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:215 msgid "Unknown" msgstr "Неизвестный" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:209 -#: ../sflphone-client-gnome/src/config/assistant.c:302 -#: ../sflphone-client-gnome/src/config/assistant.c:410 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:225 +#: ../sflphone-client-gnome/src/config/assistant.c:322 +#: ../sflphone-client-gnome/src/config/assistant.c:435 msgid "_Host name" msgstr "Имя или IP-адрес _сервера" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:217 -#: ../sflphone-client-gnome/src/config/assistant.c:310 -#: ../sflphone-client-gnome/src/config/assistant.c:418 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:233 +#: ../sflphone-client-gnome/src/config/assistant.c:330 +#: ../sflphone-client-gnome/src/config/assistant.c:443 msgid "_User name" msgstr "Имя или _номер пользователя" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:234 -#: ../sflphone-client-gnome/src/config/assistant.c:326 -#: ../sflphone-client-gnome/src/config/assistant.c:433 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:250 +#: ../sflphone-client-gnome/src/config/assistant.c:346 +#: ../sflphone-client-gnome/src/config/assistant.c:458 msgid "_Password" msgstr "Па_роль" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:254 -#: ../sflphone-client-gnome/src/config/assistant.c:344 -#: ../sflphone-client-gnome/src/config/assistant.c:449 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:270 +#: ../sflphone-client-gnome/src/config/assistant.c:363 +#: ../sflphone-client-gnome/src/config/assistant.c:473 +msgid "Show password" +msgstr "Пароль" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:274 +#: ../sflphone-client-gnome/src/config/assistant.c:368 +#: ../sflphone-client-gnome/src/config/assistant.c:478 msgid "_Voicemail number" msgstr "Номер _автоответчика #" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:340 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:361 msgid "Authentication" msgstr "Идентификация" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:341 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:362 msgid "Secret" msgstr "Секретный" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:466 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:605 msgid "Credential" msgstr "Параметры доступа" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:501 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:640 msgid "Authentication name" msgstr "Имя для аутентификации" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:512 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:651 msgid "Password" msgstr "Пароль" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:535 -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:909 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:201 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:674 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1056 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:321 msgid "Security" msgstr "Безопасность" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:547 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:213 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:687 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:333 msgid "Use TLS transport (sips)" msgstr "Имя для аутентификации" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:552 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:218 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:693 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:338 msgid "SRTP key exchange" msgstr "Обмена ключей SRTP" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:558 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:224 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:699 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:344 msgid "Disabled" msgstr "Отключен" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:674 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:795 msgid "Registration" msgstr "Регистрация" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:679 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:800 msgid "Registration expire" msgstr "Истек срок регистрации" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:687 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:809 msgid "_Comply with RFC 3263" msgstr "_Соотвествует RFC 3263" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:693 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:463 -msgid "Network" -msgstr "Сеть" +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:816 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:234 +msgid "Network Interface" +msgstr "Сеть недоступна" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:707 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:830 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:249 msgid "Local address" msgstr "Локальный адрес" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:744 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:880 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:301 msgid "Local port" msgstr "Локальный порт" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:752 -msgid "Set published address and port:" -msgstr "Настроить видимый адрес и порт :" +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:893 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:928 +msgid "Published address" +msgstr "издаваемый адрес" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:756 -msgid "Using STUN " +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:899 +msgid "Using STUN" msgstr "Использует STUN " -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:761 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:906 +msgid "STUN server URL" +msgstr "URL STUN-сервера" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:914 msgid "Same as local parameters" msgstr "Использовать локальный адрес и порт" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:764 -msgid "Manually" -msgstr "Вручную" - -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:769 -msgid "Published address" -msgstr "издаваемый адрес" +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:917 +msgid "Set published address and port:" +msgstr "Настроить видимый адрес и порт :" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:777 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:936 msgid "Published port" msgstr "издаваемый порт" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:785 -msgid "STUN server URL" -msgstr "URL STUN-сервера" - -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:880 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1027 msgid "Account settings" msgstr "Настройки аккаунта" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:899 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1046 msgid "Basic" msgstr "Основные" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:904 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1051 msgid "Advanced" msgstr "Дополнительные" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:169 -msgid "Server returned \"" +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:164 +msgid "Server returned \"%s\" (%d)" msgstr "Сервер ответил \"" #: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:389 @@ -497,32 +685,19 @@ msgstr "Учётные записи" msgid "Configured Accounts" msgstr "Нынешний аккаунт" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:505 -msgid "There " -msgstr "Здесь " - -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:506 -msgid "is " -msgstr "Зарегестрирован " - -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:506 -msgid "are " -msgstr "Зарегестрированны " +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:501 +msgid "There is %d active account" +msgid_plural "There are %d active accounts" +msgstr[0] " действующий аккаунт" +msgstr[1] " действующий аккаунт" +msgstr[2] " действующий аккаунт" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:508 -msgid " active account" -msgstr " действующий аккаунт" - -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:509 -msgid "s" -msgstr "a" - -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:514 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:507 msgid "You have no active account" msgstr "У вас нет активного аккаунта" #: ../sflphone-client-gnome/src/config/addressbook-config.c:306 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:443 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:556 msgid "General" msgstr "Общие настройки" @@ -567,16 +742,16 @@ msgid "Select which Evolution address books to use" msgstr "Выбрать адресную книгу Evolution:" #: ../sflphone-client-gnome/src/config/addressbook-config.c:404 -#: ../sflphone-client-gnome/src/config/audioconf.c:578 +#: ../sflphone-client-gnome/src/config/audioconf.c:577 msgid "Name" msgstr "Имя" -#: ../sflphone-client-gnome/src/config/assistant.c:69 +#: ../sflphone-client-gnome/src/config/assistant.c:75 #, c-format msgid "This assistant is now finished." msgstr "Мастер закончил настройку." -#: ../sflphone-client-gnome/src/config/assistant.c:71 +#: ../sflphone-client-gnome/src/config/assistant.c:77 msgid "" "You can at any time check your registration state or modify your accounts " "parameters in the Options/Accounts window." @@ -584,211 +759,205 @@ msgstr "" "Вы можете в любое время проверить статус регистрации или изменитьпараметры " "ваших аккаунтов в меню Правка / Аккаунты." -#: ../sflphone-client-gnome/src/config/assistant.c:74 +#: ../sflphone-client-gnome/src/config/assistant.c:80 msgid "Alias" msgstr "Псевдоним" -#: ../sflphone-client-gnome/src/config/assistant.c:78 +#: ../sflphone-client-gnome/src/config/assistant.c:84 msgid "Server" msgstr "Сервер" -#: ../sflphone-client-gnome/src/config/assistant.c:82 +#: ../sflphone-client-gnome/src/config/assistant.c:88 msgid "Username" msgstr "Пользователь" -#: ../sflphone-client-gnome/src/config/assistant.c:86 +#: ../sflphone-client-gnome/src/config/assistant.c:92 msgid "Security: " msgstr "Безопасность " -#: ../sflphone-client-gnome/src/config/assistant.c:88 +#: ../sflphone-client-gnome/src/config/assistant.c:94 msgid "SRTP/ZRTP draft-zimmermann" msgstr "SRTP/ZRTP draft-zimmermann" -#: ../sflphone-client-gnome/src/config/assistant.c:90 -#: ../sflphone-client-gnome/src/config/assistant.c:182 +#: ../sflphone-client-gnome/src/config/assistant.c:96 msgid "None" msgstr "Нет" -#: ../sflphone-client-gnome/src/config/assistant.c:210 +#: ../sflphone-client-gnome/src/config/assistant.c:229 msgid "SFLphone account creation wizard" msgstr "Мастер настройки SFLphone" -#: ../sflphone-client-gnome/src/config/assistant.c:236 +#: ../sflphone-client-gnome/src/config/assistant.c:255 msgid "Welcome to the Account creation wizard of SFLphone!" msgstr "Добро пожаловать в SFLphone!" -#: ../sflphone-client-gnome/src/config/assistant.c:237 +#: ../sflphone-client-gnome/src/config/assistant.c:256 msgid "This installation wizard will help you configure an account." msgstr "Этот мастер установки поможет вам настроить ваш аккаунт." -#: ../sflphone-client-gnome/src/config/assistant.c:251 +#: ../sflphone-client-gnome/src/config/assistant.c:270 msgid "VoIP Protocols" msgstr "VoIP-протоколы" -#: ../sflphone-client-gnome/src/config/assistant.c:251 +#: ../sflphone-client-gnome/src/config/assistant.c:270 msgid "Select an account type" msgstr "Выберите тип аккаунта" -#: ../sflphone-client-gnome/src/config/assistant.c:253 +#: ../sflphone-client-gnome/src/config/assistant.c:272 msgid "SIP (Session Initiation Protocol)" msgstr "SIP (Session Initiation Protocol)" -#: ../sflphone-client-gnome/src/config/assistant.c:255 +#: ../sflphone-client-gnome/src/config/assistant.c:274 msgid "IAX2 (InterAsterix Exchange)" msgstr "IAX2 (InterAsterix Exchange)" -#: ../sflphone-client-gnome/src/config/assistant.c:269 +#: ../sflphone-client-gnome/src/config/assistant.c:288 msgid "Account" msgstr "Аккаунты" -#: ../sflphone-client-gnome/src/config/assistant.c:269 +#: ../sflphone-client-gnome/src/config/assistant.c:288 msgid "Please select one of the following options" msgstr "Введите пожалуйста следующие данные" -#: ../sflphone-client-gnome/src/config/assistant.c:271 +#: ../sflphone-client-gnome/src/config/assistant.c:290 msgid "Create a free SIP/IAX2 account on sflphone.org" msgstr "Создать бесплатный SIP/IAX2-аккаунт на sflphone.org" -#: ../sflphone-client-gnome/src/config/assistant.c:273 +#: ../sflphone-client-gnome/src/config/assistant.c:292 msgid "Register an existing SIP or IAX2 account" msgstr "Зарегистрировать существующий SIP или IAX2 аккаунт" -#: ../sflphone-client-gnome/src/config/assistant.c:286 +#: ../sflphone-client-gnome/src/config/assistant.c:306 msgid "SIP account settings" msgstr "Настройка SIP-аккаунта" -#: ../sflphone-client-gnome/src/config/assistant.c:286 -#: ../sflphone-client-gnome/src/config/assistant.c:394 +#: ../sflphone-client-gnome/src/config/assistant.c:306 +#: ../sflphone-client-gnome/src/config/assistant.c:419 msgid "Please fill the following information" msgstr "Введите пожалуйста следующие данные" -#: ../sflphone-client-gnome/src/config/assistant.c:352 -#: ../sflphone-client-gnome/src/config/assistant.c:381 +#: ../sflphone-client-gnome/src/config/assistant.c:376 +#: ../sflphone-client-gnome/src/config/assistant.c:405 msgid "Secure communications with _ZRTP" msgstr "Защищëнная связь с _ZRTP" -#: ../sflphone-client-gnome/src/config/assistant.c:365 +#: ../sflphone-client-gnome/src/config/assistant.c:389 msgid "Optional email address" msgstr "Электронный адрес (необязательный)" -#: ../sflphone-client-gnome/src/config/assistant.c:365 +#: ../sflphone-client-gnome/src/config/assistant.c:389 msgid "This email address will be used to send your voicemail messages." msgstr "Этот электронный адрес будет использоваться для речевых сообщений" -#: ../sflphone-client-gnome/src/config/assistant.c:373 +#: ../sflphone-client-gnome/src/config/assistant.c:397 msgid "_Email address" msgstr "_Адрес эл. почты" -#: ../sflphone-client-gnome/src/config/assistant.c:394 +#: ../sflphone-client-gnome/src/config/assistant.c:419 msgid "IAX2 account settings" msgstr "Настройка IAX2-аккаунта" -#: ../sflphone-client-gnome/src/config/assistant.c:467 +#: ../sflphone-client-gnome/src/config/assistant.c:496 msgid "Network Address Translation (NAT)" msgstr "Network Address Translation (NAT)" -#: ../sflphone-client-gnome/src/config/assistant.c:467 +#: ../sflphone-client-gnome/src/config/assistant.c:496 msgid "You should probably enable this if you are behind a firewall." -msgstr "" -"Вы наверное должны это включить если вы находитесь за сетевым экраном." +msgstr "Вы наверное должны это включить если вы находитесь за сетевым экраном." -#: ../sflphone-client-gnome/src/config/assistant.c:476 +#: ../sflphone-client-gnome/src/config/assistant.c:505 msgid "E_nable STUN" msgstr "Включить STUN" -#: ../sflphone-client-gnome/src/config/assistant.c:483 +#: ../sflphone-client-gnome/src/config/assistant.c:512 msgid "_STUN server" msgstr "_STUN-сервер" -#: ../sflphone-client-gnome/src/config/assistant.c:497 +#: ../sflphone-client-gnome/src/config/assistant.c:526 msgid "Account Registration" msgstr "Регистрация аккаунта" -#: ../sflphone-client-gnome/src/config/assistant.c:497 +#: ../sflphone-client-gnome/src/config/assistant.c:526 msgid "Congratulations!" msgstr "Поздравляем!" -#: ../sflphone-client-gnome/src/config/audioconf.c:583 +#: ../sflphone-client-gnome/src/config/audioconf.c:582 msgid "Frequency" msgstr "Частота" -#: ../sflphone-client-gnome/src/config/audioconf.c:588 +#: ../sflphone-client-gnome/src/config/audioconf.c:587 msgid "Bitrate" msgstr "Битрейт" -#: ../sflphone-client-gnome/src/config/audioconf.c:593 +#: ../sflphone-client-gnome/src/config/audioconf.c:592 msgid "Bandwidth" msgstr "Пропускная способность" -#: ../sflphone-client-gnome/src/config/audioconf.c:673 +#: ../sflphone-client-gnome/src/config/audioconf.c:670 msgid "ALSA plugin" msgstr "ALSA-плагин" -#: ../sflphone-client-gnome/src/config/audioconf.c:695 +#: ../sflphone-client-gnome/src/config/audioconf.c:692 msgid "Output" msgstr "Выход" -#: ../sflphone-client-gnome/src/config/audioconf.c:717 +#: ../sflphone-client-gnome/src/config/audioconf.c:714 msgid "Input" msgstr "Вход" -#: ../sflphone-client-gnome/src/config/audioconf.c:752 +#: ../sflphone-client-gnome/src/config/audioconf.c:749 msgid "_Voice Activity Detection" msgstr "Включить детектор тишины" -#: ../sflphone-client-gnome/src/config/audioconf.c:762 +#: ../sflphone-client-gnome/src/config/audioconf.c:759 msgid "_Noise Reduction (Narrow-Band Companding)" msgstr "Шумоподавление" -#: ../sflphone-client-gnome/src/config/audioconf.c:798 +#: ../sflphone-client-gnome/src/config/audioconf.c:800 msgid "Sound Manager" msgstr "Менеджер звука" -#: ../sflphone-client-gnome/src/config/audioconf.c:807 +#: ../sflphone-client-gnome/src/config/audioconf.c:809 msgid "_Pulseaudio" msgstr "_Pulseaudio" -#: ../sflphone-client-gnome/src/config/audioconf.c:811 +#: ../sflphone-client-gnome/src/config/audioconf.c:813 msgid "_ALSA" msgstr "_ALSA" -#: ../sflphone-client-gnome/src/config/audioconf.c:816 -msgid "_Mute other applications during a call" -msgstr "Приглушать звук других програм во время звонка" - -#: ../sflphone-client-gnome/src/config/audioconf.c:823 +#: ../sflphone-client-gnome/src/config/audioconf.c:819 msgid "ALSA settings" msgstr "Настройка ALSA" -#: ../sflphone-client-gnome/src/config/audioconf.c:840 +#: ../sflphone-client-gnome/src/config/audioconf.c:836 msgid "Codecs" msgstr "Кодеки" -#: ../sflphone-client-gnome/src/config/audioconf.c:869 +#: ../sflphone-client-gnome/src/config/audioconf.c:865 msgid "Recordings" msgstr "Записи" -#: ../sflphone-client-gnome/src/config/audioconf.c:873 +#: ../sflphone-client-gnome/src/config/audioconf.c:869 msgid "Destination folder" msgstr "Папка назначения" -#: ../sflphone-client-gnome/src/config/audioconf.c:877 +#: ../sflphone-client-gnome/src/config/audioconf.c:873 msgid "Select a folder" msgstr "Выберите папку" -#: ../sflphone-client-gnome/src/config/audioconf.c:883 +#: ../sflphone-client-gnome/src/config/audioconf.c:879 msgid "Ringtones" msgstr "Звонки" -#: ../sflphone-client-gnome/src/config/audioconf.c:889 +#: ../sflphone-client-gnome/src/config/audioconf.c:885 msgid "_Enable ringtones" msgstr "Включить звонок" -#: ../sflphone-client-gnome/src/config/audioconf.c:895 +#: ../sflphone-client-gnome/src/config/audioconf.c:891 msgid "Choose a ringtone" msgstr "Выберите звонок" -#: ../sflphone-client-gnome/src/config/audioconf.c:901 +#: ../sflphone-client-gnome/src/config/audioconf.c:897 msgid "Audio Files" msgstr "Звуковые файлы" @@ -825,7 +994,7 @@ msgstr "Переписка номера телефона" msgid "_Prefix dialed numbers with" msgstr "Добавить перед на набранными номерами" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:195 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:225 msgid "" "This profile is used when you want to reach a remote peer simply by typing a " "sip URI such as <b>sip:remotepeer</b>. The settings you define here will " @@ -836,79 +1005,59 @@ msgstr "" "настройки так-же будут использованы если не будет подходящего аккаунта для " "входящего или выходящего звонка." -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:274 -msgid "SIP Port" -msgstr "SIP-порт" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:281 -msgid "UDP Transport" -msgstr "Транспорт UDP" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:319 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:440 msgid "Desktop Notifications" msgstr "Извещения на рабочем столе" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:323 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:444 msgid "_Enable notifications" msgstr "Включить звонок" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:329 -msgid "Enable voicemail _notifications" -msgstr "Включить предупреждения о речевых сообщениях" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:341 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:450 msgid "System Tray Icon" msgstr "System Tray Icon" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:344 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:453 msgid "_Popup main window on incoming call" msgstr "_Показать главное окно при входящем звонке" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:349 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:457 msgid "Ne_ver popup main window" msgstr "Никогда не показывать главное окно" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:353 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:463 msgid "Hide SFLphone window on _startup" msgstr "Спрятать окно SFLphone при пуске" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:359 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:469 msgid "Calls History" msgstr "Журнал звонков" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:362 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:472 msgid "_Keep my history for at least" msgstr "Со_хранить мой журнал звонков как минимум в течении" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:373 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:483 msgid "days" msgstr "дней" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:377 -msgid "Configuration File" -msgstr "Файл конфигурации" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:379 -msgid "Store SIP credentials as MD5 hash" -msgstr "Записать параметры доступа SIP с шифровкой MD5." - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:423 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:536 msgid "Preferences" msgstr "Предпочтения" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:448 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:561 msgid "Audio" msgstr "Звук" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:453 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:566 msgid "Address Book" msgstr "Адресная книга" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:458 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:571 msgid "Hooks" msgstr "Зацепки" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:468 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:581 msgid "Direct IP calls" msgstr "Прямые IP-звонки" @@ -916,11 +1065,11 @@ msgstr "Прямые IP-звонки" msgid "Advanced options for TLS" msgstr "Дополнительные опции для TLS" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:55 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:56 msgid "TLS transport" msgstr "Транспорт TLS" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:59 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:60 msgid "" "TLS transport can be used along with UDP for those calls that would\n" "require secure sip transactions (aka SIPS). You can configure a different\n" @@ -933,55 +1082,55 @@ msgstr "" "каждого аккаунта (но каждый из них будет использовать свой выделенный " "порт).\n" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:100 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:103 msgid "Certificate of Authority list" msgstr "Список центра сертификации" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:104 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:107 msgid "Choose a CA list file (optional)" msgstr "Выберите файл Центра сертификации (необязательный)" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:115 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:131 msgid "Public endpoint certificate file" msgstr "Файл с публичным сертификатом" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:119 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:135 msgid "Choose a public endpoint certificate (optional)" msgstr "Выберите публичный сертификат (необязательный)" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:134 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:159 msgid "Choose a private key file (optional)" msgstr "Выберите файл с секретным ключом (необязательно)" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:145 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:181 msgid "Password for the private key" msgstr "Пароль для секретного ключа" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:168 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:204 msgid "TLS protocol method" msgstr "Метод протокола TLS" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:202 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:238 msgid "TLS cipher list" msgstr "Список шифров TLS" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:211 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:247 msgid "Server name instance for outgoing TLS connection" msgstr "Имя сервера для выходящих TLS-подключений." -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:219 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:255 msgid "Negotiation timeout (sec:msec)" msgstr "Время ожидания соединения (сек:мсек)" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:236 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:272 msgid "Verify incoming certificates, as a server" msgstr "Проверять входящие сертификаты (в качестве сервера)" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:242 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:278 msgid "Verify certificates from answer, as a client" msgstr "Проверять входящие сертификаты (в качестве клиента)" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:248 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:284 msgid "Require certificate for incoming tls connections" msgstr "Требовать сертификат для входящих TLS-подключений" @@ -989,54 +1138,90 @@ msgstr "Требовать сертификат для входящих TLS-по msgid "ZRTP Options" msgstr "Опции ZRTP" -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:68 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:69 msgid "Send Hello Hash in S_DP" msgstr "Послать hello-хэш в S_DP" -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:74 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:75 msgid "Ask User to Confirm SAS" msgstr "Попросить пользователя подтвердить пароль SAS" -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:80 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:81 msgid "_Warn if ZRTP not supported" msgstr "_Предупредить если ZRTP не пддерживается" -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:86 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:87 msgid "Display SAS once for hold events" msgstr "Показать SAS один раз" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:56 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:58 msgid "Search all" msgstr "Искать все" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:57 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:70 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:82 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:94 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:59 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:72 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:84 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:96 msgid "Click here to change the search type" msgstr "Нажмите, чтобы изменить тип поиска" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:69 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:71 msgid "Search by missed call" msgstr "Поиск по пропущенным вызовам" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:81 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:83 msgid "Search by incoming call" msgstr "Поиск по входящим вызовам" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:93 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:95 msgid "Search by outgoing call" msgstr "Поиск по исходящим вызовам" +#~ msgid "IP call - %s" +#~ msgstr "IP звонок - %s" + +#~ msgid "Codec" +#~ msgstr "Codec" + +#~ msgid "Network" +#~ msgstr "Сеть" + +#~ msgid "Manually" +#~ msgstr "Вручную" + +#~ msgid "There " +#~ msgstr "Здесь " + +#~ msgid "is " +#~ msgstr "Зарегестрирован " + +#~ msgid "are " +#~ msgstr "Зарегестрированны " + +#~ msgid "s" +#~ msgstr "a" + +#~ msgid "_Mute other applications during a call" +#~ msgstr "Приглушать звук других програм во время звонка" + +#~ msgid "SIP Port" +#~ msgstr "SIP-порт" + +#~ msgid "UDP Transport" +#~ msgstr "Транспорт UDP" + +#~ msgid "Enable voicemail _notifications" +#~ msgstr "Включить предупреждения о речевых сообщениях" + +#~ msgid "Store SIP credentials as MD5 hash" +#~ msgstr "Записать параметры доступа SIP с шифровкой MD5." + #~ msgid "Account creation wizard" #~ msgstr "Мастер настройки SFLphone" #~ msgid "Voicemail number" #~ msgstr "Номер автоответчика #" -#~ msgid "Address book" -#~ msgstr "Адресная книга" - #~ msgid "Display volume controls" #~ msgstr "_Настройки громкости" @@ -1049,9 +1234,6 @@ msgstr "Поиск по исходящим вызовам" #~ msgid "Hold on" #~ msgstr "Удержать звонок" -#~ msgid "Transfer" -#~ msgstr "Переслать звонок на другой номер" - #~ msgid "Record" #~ msgstr "Записать переговор" @@ -1091,33 +1273,9 @@ msgstr "Поиск по исходящим вызовам" #~ msgid "Prefix dialed numbers with" #~ msgstr "Добавить перед на набранными номерами" -#~ msgid "_Help" -#~ msgstr "_Помощь" - #~ msgid "_Account creation wizard" #~ msgstr "Мастер настройки SFLphone" -#~ msgid "_Call" -#~ msgstr "_Звонок" - -#~ msgid "Clear _history" -#~ msgstr "_Стереть журнал" - -#~ msgid "_Accounts" -#~ msgstr "_Аккаунты" - -#~ msgid "_Edit" -#~ msgstr "_Правка" - -#~ msgid "_Volume controls" -#~ msgstr "_Настройки громкости" - -#~ msgid "_View" -#~ msgstr "_Вид" - -#~ msgid "History" -#~ msgstr "Журнал" - #~ msgid "_Enable this account" #~ msgstr "_Включить" @@ -1185,9 +1343,6 @@ msgstr "Поиск по исходящим вызовам" #~ msgid "Enable STUN" #~ msgstr "Задействовать STUN" -#~ msgid "Transfer to : " -#~ msgstr "Передать : " - #~ msgid "Default account" #~ msgstr "Учетная запись по умолчанию" @@ -1218,12 +1373,9 @@ msgstr "Поиск по исходящим вызовам" #~ msgid "Give up transfer" #~ msgstr "Прекратить передачу" -#~ msgid "Remove the selected account" -#~ msgstr "Удалить выбранную учетную запись" - #~ msgid "" -#~ "This button enables you to initialize a new account. You will then be able " -#~ "to edit it using the form on the right." +#~ "This button enables you to initialize a new account. You will then be " +#~ "able to edit it using the form on the right." #~ msgstr "" #~ "Эта кнопка позволяет инициализировать новую учетную запись. Редактировать " #~ "данные будет возможно в форме справа." @@ -1275,18 +1427,9 @@ msgstr "Поиск по исходящим вызовам" #~ msgid "Keep my history for at least" #~ msgstr "По крайней мере хранить историю" -#~ msgid "Clear history" -#~ msgstr "Очистить историю" - -#~ msgid "Call history" -#~ msgstr "История звонков" - #~ msgid "Incoming call" #~ msgstr "Входящий звонок" -#~ msgid "Call back" -#~ msgstr "Обратный вызов" - #~ msgid "(C) 2009 Savoir-faire Linux" #~ msgstr "(C) 2009 Savoir-faire Linux" @@ -1317,13 +1460,16 @@ msgstr "Поиск по исходящим вызовам" #~ msgctxt "NAME OF TRANSLATORS" #~ msgid "Your names" #~ msgstr "" -#~ ",Launchpad Contributions:,Hussein Abdallah, ,Launchpad " -#~ "Contributions:,Emmanuel Milou,Hussein Abdallah,Maxime Chambreuil,Pavlo " -#~ "Kucheriavyi,Sergei Sedov, ,Launchpad Contributions:,Emmanuel Milou,Hussein " -#~ "Abdallah,Hussein Abdallah,Maxime Chambreuil,Pavlo Kucheriavyi,Sergei Sedov" +#~ ",Launchpad Contributions:,Hussein Abdallah, ,Launchpad Contributions:," +#~ "Emmanuel Milou,Hussein Abdallah,Maxime Chambreuil,Pavlo Kucheriavyi," +#~ "Sergei Sedov, ,Launchpad Contributions:,Emmanuel Milou,Hussein Abdallah," +#~ "Hussein Abdallah,Maxime Chambreuil,Pavlo Kucheriavyi,Sergei Sedov, ," +#~ "Launchpad Contributions:,Emmanuel Milou,Hussein Abdallah,Hussein Abdallah," +#~ "Maxime Chambreuil,Pavlo Kucheriavyi,Sergey Sedov" #~ msgctxt "EMAIL OF TRANSLATORS" #~ msgid "Your emails" #~ msgstr "" -#~ ",,,,,emmanuel.milou@savoirfairelinux.com,,maxime.chambreuil@gmail.com,,,,,emm" -#~ "anuel.milou@savoirfairelinux.com,,,maxime.chambreuil@gmail.com,," +#~ ",,,,,emmanuel.milou@savoirfairelinux.com,,maxime.chambreuil@gmail.com,,,,," +#~ "emmanuel.milou@savoirfairelinux.com,,,maxime.chambreuil@gmail.com,,,,," +#~ "emmanuel.milou@savoirfairelinux.com,,,maxime.chambreuil@gmail.com,," diff --git a/sflphone-client-gnome/po/sflphone_es.po.patch b/sflphone-client-gnome/po/sflphone_es.po.patch deleted file mode 100644 index 80b09273b2..0000000000 --- a/sflphone-client-gnome/po/sflphone_es.po.patch +++ /dev/null @@ -1,395 +0,0 @@ ---- sflphone_es.po.orig 2008-05-21 23:16:55.000000000 +0200 -+++ sflphone_es.po 2008-08-13 11:53:32.000000000 +0200 -@@ -11,7 +11,7 @@ msgid "" - msgstr "" - "Project-Id-Version: SFLphone 0.8.2\n" - "Report-Msgid-Bugs-To: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com >\n" --"PO-Revision-Date: 2008-03-27 11:15\n" -+"PO-Revision-Date: 2008-08-13 11:53+0200\n" - "Last-Translator: Maxime Chambreuil <maxime.chambreuil@savoirfairelinux.com>\n" - "Language-Team: SavoirFaireLinux Inc <sflphoneteam@savoirfairelinux.com>\n" - "MIME-Version: 1.0\n" -@@ -21,19 +21,19 @@ msgstr "" - - #: src/audio/audiolayer.cpp: 318 - msgid "Error while opening capture device " --msgstr "Error abriendo el dispositivo de captura " -+msgstr "Error al abrir el dispositivo de captura " - - #: src/audio/audiolayer.cpp: 349 - msgid "Error while opening playback device " --msgstr "Error abriendo el dispositivo del aparato de lectura " -+msgstr "Error al abrir el dispositivo de reproducción " - - #: sflphone-gtk/src/menus.c: 119 - msgid "About SFLphone" --msgstr "Sobre SFLphone" -+msgstr "Acerca de SFLphone" - - #: sflphone-gtk/src/menus.c: 124 - msgid "SFLphone is a VoIP client compatible with SIP and IAX2 protocols." --msgstr "SFLphone es un telefono por Internet compatible con los protocolos SIP y IAX2" -+msgstr "SFLphone es un cliente de VoIP compatible con los protocolos SIP y IAX2." - - #: sflphone-gtk/src/menus.c: 150 - msgid "_Help" -@@ -45,15 +45,15 @@ msgstr "_Nueva llamada" - - #: sflphone-gtk/src/menus.c: 217 menus.c: 605 - msgid "_Pick up" --msgstr "_Colgar" -+msgstr "_Descolgar" - - #: sflphone-gtk/src/menus.c: 225 menus.c: 617 - msgid "_Hang up" --msgstr "_Descolgar" -+msgstr "_Colgar" - - #: sflphone-gtk/src/menus.c: 233 menus.c: 629 - msgid "On _Hold" --msgstr "_Sostener" -+msgstr "En _Espera" - - #: sflphone-gtk/src/menus.c: 254 - msgid "_Call" -@@ -69,11 +69,11 @@ msgstr "_Cuentas" - - #: sflphone-gtk/src/menus.c: 438 - msgid "_Edit" --msgstr "_Edición" -+msgstr "_Editar" - - #: sflphone-gtk/src/menus.c: 462 - msgid "_Dialpad" --msgstr "_Pantalla de numero" -+msgstr "_Teclado numérico" - - #: sflphone-gtk/src/menus.c: 471 - msgid "_Volume controls" -@@ -93,11 +93,11 @@ msgstr "Llamar" - - #: sflphone-gtk/src/calltree.c: 343 sflphone-gtk/src/calltree.c: 344 - msgid "Pick up" --msgstr "Colgar" -+msgstr "Descolgar" - - #: sflphone-gtk/src/calltree.c: 351 sflphone-gtk/src/calltree.c: 352 - msgid "Hang up" --msgstr "Descolgar" -+msgstr "Colgar" - - #: sflphone-gtk/src/calltree.c: 359 sflphone-gtk/src/calltree.c: 360 - msgid "Off Hold" -@@ -105,7 +105,7 @@ msgstr "Seguir" - - #: sflphone-gtk/src/calltree.c: 367 sflphone-gtk/src/calltree.c: 368 - msgid "On Hold" --msgstr "Sostener" -+msgstr "Retener" - - #: sflphone-gtk/src/calltree.c: 375 sflphone-gtk/src/calltree.c: 376 - msgid "Transfer" -@@ -117,11 +117,11 @@ msgstr "Nombre" - - #: sflphone-gtk/src/configwindow.c: 804 - msgid "Frequency" --msgstr "Frequencia" -+msgstr "Frecuencia" - - #: sflphone-gtk/src/configwindow.c: 809 - msgid "Bitrate" --msgstr "Bitrato" -+msgstr "Tasa de transferencia" - - #: sflphone-gtk/src/configwindow.c: 814 - msgid "Bandwidth" -@@ -137,11 +137,11 @@ msgstr "Estado" - - #: sflphone-gtk/src/configwindow.c: 934 - msgid "Default" --msgstr "Defecto" -+msgstr "Predeterminado" - - #: sflphone-gtk/src/configwindow.c: 935 - msgid "Set the selected account as the default one to make calls" --msgstr "Fije la cuenta seleccionada como el defecto para llamar" -+msgstr "Establecer la cuenta seleccionada como predeterminada para hacer llamadas" - - #: sflphone-gtk/src/configwindow.c: 976 - msgid "Devices" -@@ -161,19 +161,19 @@ msgstr "Periférico de entrada" - - #: sflphone-gtk/src/configwindow.c: 1080 - msgid "Detect all" --msgstr "Detecte todos" -+msgstr "Detectar todos" - - #: sflphone-gtk/src/configwindow.c: 1107 - msgid "_Enable ringtones" --msgstr "_Permitir los ringtones" -+msgstr "_Habilitar tonos de llamada" - - #: sflphone-gtk/src/configwindow.c: 1112 - msgid "Choose a ringtone" --msgstr "Elija un ringtones" -+msgstr "Elija un tono de llamada" - - #: sflphone-gtk/src/configwindow.c: 1117 - msgid "Audio Files" --msgstr "Archivos Audio" -+msgstr "Archivos de Audio" - - #: sflphone-gtk/src/configwindow.c: 1142 - msgid "Preferences" -@@ -181,7 +181,7 @@ msgstr "Preferencias" - - #: sflphone-gtk/src/configwindow.c: 1167 - msgid "Audio Settings" --msgstr "Configuración Audio" -+msgstr "Configuración de audio" - - #: sflphone-gtk/src/configwindow.c: 1191 - msgid "Accounts" -@@ -193,7 +193,7 @@ msgstr "Cuentas existentes" - - #: sflphone-gtk/src/configwindow.c: 1254 - msgid "Desktop Notification" --msgstr "Notificación de Escritorio" -+msgstr "Notificación de escritorio" - - #: sflphone-gtk/src/configwindow.c: 1263 - msgid "_Enable" -@@ -201,31 +201,31 @@ msgstr "_Activar" - - #: sflphone-gtk/src/configwindow.c: 1268 - msgid "_Notify Voice Mails" --msgstr "_Notificar Mensajes Vocales" -+msgstr "_Notificar mensajes de voz" - - #: sflphone-gtk/src/configwindow.c: 1274 - msgid "System Tray Icon" --msgstr "Icono de Bandeja del Sistema" -+msgstr "Icono de bandeja del sistema" - - #: sflphone-gtk/src/configwindow.c: 1283 - msgid "_Popup Main Window On Incoming Call" --msgstr "_Popup Ventana Principal por las Llamadas Recibidas" -+msgstr "_Mostrar ventana principal al recibir llamadas" - - #: sflphone-gtk/src/configwindow.c: 1288 - msgid "Ne_ver Popup Main Window" --msgstr "_Jamas Popup Ventana Principal" -+msgstr "_Nunca mostrar ventana principal" - - #: sflphone-gtk/src/configwindow.c: 1292 - msgid "_Start Hidden" --msgstr "_Iniciar Escondido" -+msgstr "_Iniciar oculto" - - #: sflphone-gtk/src/configwindow.c: 1297 - msgid "Calls History" --msgstr "Historia de Llamada" -+msgstr "Historial de llamadas" - - #: sflphone-gtk/src/configwindow.c: 1307 - msgid "_Maximum number of calls" --msgstr "_Numero Maximo de Llamadas" -+msgstr "_Número máximo de llamadas" - - #: sflphone-gtk/src/accountwindow.c: 139 - msgid "Account settings" -@@ -233,7 +233,7 @@ msgstr "Configuración de cuentas" - - #: sflphone-gtk/src/accountwindow.c: 151 - msgid "Account parameters" --msgstr "Paràmetros de Cuenta" -+msgstr "Parámetros de cuenta" - - #: sflphone-gtk/src/accountwindow.c: 174 - msgid "_Enabled" -@@ -253,7 +253,7 @@ msgstr "Desconocido" - - #: sflphone-gtk/src/accountwindow.c: 216 sflphone-gtk/src/assistant.c: 169 sflphone-gtk/src/assistant.c: 218 - msgid "_Host name" --msgstr "_Parte del servidor" -+msgstr "_Nombre de equipo" - - #: sflphone-gtk/src/accountwindow.c: 224 sflphone-gtk/src/assistant.c: 177 sflphone-gtk/src/assistant.c: 226 - msgid "_User name" -@@ -265,11 +265,11 @@ msgstr "_Contraseña" - - #: sflphone-gtk/src/accountwindow.c: 241 - msgid "_Voicemail box #" --msgstr "_Numero de Caja de Voz" -+msgstr "_Número de buzón de voz" - - #: sflphone-gtk/src/accountwindow.c: 252 sflphone-gtk/src/assistant.c: 256 - msgid "Network Address Translation" --msgstr "Conversión de Dirección de Red" -+msgstr "Conversión de Dirección de Red (NAT)" - - #: sflphone-gtk/src/accountwindow.c: 264 sflphone-gtk/src/assistant.c: 265 - msgid "E_nable STUN" -@@ -277,7 +277,7 @@ msgstr "A_ctivar STUN" - - #: sflphone-gtk/src/accountwindow.c: 267 - msgid "Enable it if you are behind a firewall, then restart SFLphone" --msgstr "Activar si esta atras un cortafuego, despues reiniciar SFLphone" -+msgstr "Actívelo si está detrás de un cortafuegos, después reinicie SFLphone" - - #: sflphone-gtk/src/accountwindow.c: 270 sflphone-gtk/src/assistant.c: 272 - msgid "_STUN Server" -@@ -289,44 +289,44 @@ msgstr "Formato: nombre.servidor:puerto" - - #: sflphone-gtk/src/actions.c: 45 - msgid "%d voice mails" --msgstr "%d mensajes" -+msgstr "%d mensajes de voz" - - #: sflphone-gtk/src/actions.c: 47 - msgid "%d voice mail" --msgstr "%d mensaje" -+msgstr "%d mensaje de voz" - - #: sflphone-gtk/src/actions.c: 162 - msgid "Unable to connect to the SFLphone server.\n" - " Make sure the daemon is running." --msgstr "Incapaz e conectar con el servidor SFLphone.\n" --" Checa que el demonio está funcionando." -+msgstr "Incapaz de conectar con el servidor SFLphone.\n" -+" Asegúrese de que el demonio esté funcionando." - - #: sflphone-gtk/src/actions.c: 544 - msgid "The account selected as default is not registered." --msgstr "La cuenta seleccionada como defecto no es registrada." -+msgstr "La cuenta seleccionada como predeterminada no está registrada." - - #: sflphone-gtk/src/actions.c: 557 - msgid "There is no registered account to make this call with." --msgstr "No hay cuenta registrada para hacer esta llamada" -+msgstr "No hay ninguna cuenta registrada para hacer esta llamada." - - #: sflphone-gtk/src/actions.c: 591 - msgid "<b>ALSA notification</b>\n\n" - "Error while opening playback device" - msgstr "<b>Notificación ALSA</b>\n\n" --"Error abriendo el dispositivo del aparato de lectura" -+"Error al abrir el dispositivo de reproducción" - - #: sflphone-gtk/src/actions.c: 594 - msgid "<b>ALSA notification</b>\n\n" - "Error while opening capture device" - msgstr "<b>Notificación ALSA</b>\n\n" --"Error abriendo el dispositivo de captura" -+"Error al abrir el dispositivo de captura" - - #r sflphone-gtk/src/actions.c: 632 - msgid "<b>Error: No audio codecs found.\n\n</b>" - " SFL audio codecs have to be placed in <i>%s</i>" - " or in the <b>.sflphone</b> directory in your home( <i>%s</i> )" --msgstr "<b>Error: No codec audio encontrado.\n\n</b>" --" Los codecs audio de SFLphone deben estar en <i>%s</i>" -+msgstr "<b>Error: Codecs de audio no encontrados.\n\n</b>" -+" Los codecs de audio de SFLphone deben estar en <i>%s</i>" - " o en el directorio <b>.sflphone</b> de su home( <i>%s</i> )" - - #: sflphone-gtk/src/accountlist.c: 148 -@@ -339,7 +339,7 @@ msgstr "No registrado" - - #: sflphone-gtk/src/accountlist.c: 154 - msgid "Trying..." --msgstr "Tratando..." -+msgstr "Intentando..." - - #: sflphone-gtk/src/accountlist.c: 157 - msgid "Error" -@@ -362,8 +362,8 @@ msgid "<b><big>Welcome to SFLphone!</big - "There is no VoIP account configured.\n" - " Would you like to create one now?" - msgstr "<b><big>Bienvenido en SFLphone!</big></b>\n\n" --"No hay cuenta VoIP configurada.\n" --" Usted quiere crear una ?" -+"No hay ninguna cuenta VoIP configurada.\n" -+" ¿Quiere crear una?" - - #: sflphone-gtk/src/SFLnotify.c: 32 - msgid "%s account: %s" -@@ -379,7 +379,7 @@ msgstr "Aceptar" - - #: sflphone-gtk/src/SFLnotify.c: 51 - msgid "Refuse" --msgstr "Renunciar" -+msgstr "Rechazar" - - #: sflphone-gtk/src/SFLnotify.c: 52 - msgid "Ignore" -@@ -387,7 +387,7 @@ msgstr "Ignorar" - - #: sflphone-gtk/src/statusicon.c: 80 - msgid "Show main window" --msgstr "Mostrar Ventana Principal" -+msgstr "Mostrar ventana principal" - - #: sflphone-gtk/src/statusicon.c: 113 - msgid "SFLphone - %i account registered" -@@ -397,15 +397,15 @@ msgstr[1] "SFLphone - %i cuentas registr - - #: sflphone-gtk/src/assistant.c: 91 - msgid "SFLphone account configuration wizard" --msgstr "Asistante de Configuración de Cuenta SFLphone" -+msgstr "Asistente de configuración de cuentas de SFLphone" - - #: sflphone-gtk/src/assistant.c: 122 - msgid "Welcome to SFLphone!" --msgstr "Bienvenido en SFLphone!" -+msgstr "¡Bienvenido a SFLphone!" - - #: sflphone-gtk/src/assistant.c: 119 - msgid "This installation wizard will help you configure an account." --msgstr "Ese asistante de instalaciòn ayuda usted a configurar una cuenta." -+msgstr "Este asistente de instalación le ayudará a configurar una cuenta." - - #: sflphone-gtk/src/assistant.c: 134 - msgid "VoIP Protocols" -@@ -413,33 +413,33 @@ msgstr "Protocolos VoIP" - - #: sflphone-gtk/src/assistant.c: 134 - msgid "Select an account type:" --msgstr "Escoje un tipo de cuenta:" -+msgstr "Escoja un tipo de cuenta:" - - #: sflphone-gtk/src/assistant.c: 153 - msgid "SIP account configuration" --msgstr "Configuraciòn de cuenta SIP" -+msgstr "Configuración de cuenta SIP" - - #: sflphone-gtk/src/assistant.c: 153 sflphone-gtk/src/assistant.c: 202 - msgid "Please fill the following information:" --msgstr "Por favor de llenar esas informaciones:" -+msgstr "Por favor, rellene la siguiente información:" - - #: sflphone-gtk/src/assistant.c: 202 - msgid "IAX2 account configuration" --msgstr "Configuraciòn de cuenta IAX2" -+msgstr "Configuración de cuenta IAX2" - - #: sflphone-gtk/src/assistant.c: 256 - msgid "You should probably enable this if you are behind a firewall." --msgstr "Probablemente, tiene que activar eso si usted esta atras de un cortafuego." -+msgstr "Probablemente tiene que activar esto si está detrás de un cortafuegos." - - #: sflphone-gtk/src/assistant.c: 289 - msgid "Account Registration" --msgstr "Registraciòn de Cuenta" -+msgstr "Registro de cuenta" - - #: sflphone-gtk/src/assistant.c: 289 - msgid "Congratulations!" --msgstr "Felicitaciones!" -+msgstr "¡Enhorabuena!" - - #: sflphone-gtk/src/assistant.c: 291 - msgid "This assistant is now finished.\n\n You can at any time check your registration state or modify your accounts parameters in the Options/Accounts window." --msgstr "Ese asistante esta terminado.\n\n Usted puede checar su estado de registraciòn o cambiar sus parametros de cuentas en cualquier momento en la ventana de Opciones/Cuentas." -+msgstr "Este asistente ha finalizado.\n\n Puede comprobar en cualquier momento su estado de registro o modificar la configuración de sus cuentas en la ventana de Opciones/Cuentas." - diff --git a/sflphone-client-gnome/po/zh_CN/zh_CN.po b/sflphone-client-gnome/po/zh_CN/zh_CN.po index 3defe8ab2e..bfc3429d51 100644 --- a/sflphone-client-gnome/po/zh_CN/zh_CN.po +++ b/sflphone-client-gnome/po/zh_CN/zh_CN.po @@ -8,15 +8,15 @@ msgid "" msgstr "" "Project-Id-Version: SFLphone 0.9.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-10-14 11:18-0400\n" -"PO-Revision-Date: 2009-10-15 13:46+0000\n" -"Last-Translator: Yinghua Wang <Unknown>\n" +"POT-Creation-Date: 2009-12-03 10:22-0500\n" +"PO-Revision-Date: 2009-10-26 20:46+0000\n" +"Last-Translator: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com>\n" "Language-Team: SavoirFaireLinux Inc <sflphoneteam@savoirfairelinux.com>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Launchpad-Export-Date: 2009-10-26 15:48+0000\n" +"X-Launchpad-Export-Date: 2009-12-03 15:32+0000\n" "X-Generator: Launchpad (build Unknown)\n" #: ../sflphone-client-gnome/src/accountlist.c:175 @@ -61,24 +61,15 @@ msgstr "Stun服务器无效" msgid "Invalid" msgstr "无效" -#: ../sflphone-client-gnome/src/actions.c:54 -#: ../sflphone-client-gnome/src/sflnotify.c:94 -#, c-format -msgid "%d voice mail" -msgid_plural "%d voice mails" -msgstr[0] "%d 个语音信息" - -#: ../sflphone-client-gnome/src/actions.c:83 -#: ../sflphone-client-gnome/src/actions.c:919 -#: ../sflphone-client-gnome/src/actions.c:926 +#: ../sflphone-client-gnome/src/actions.c:98 msgid "Using account" msgstr "使用账户" -#: ../sflphone-client-gnome/src/actions.c:89 +#: ../sflphone-client-gnome/src/actions.c:104 msgid "No registered accounts" msgstr "没有已注册帐户" -#: ../sflphone-client-gnome/src/actions.c:268 +#: ../sflphone-client-gnome/src/actions.c:285 msgid "" "Unable to connect to the SFLphone server.\n" "Make sure the daemon is running." @@ -86,26 +77,23 @@ msgstr "" "连接SFLphone服务器失败.\n" "请检查daemon是否还在运行." -#: ../sflphone-client-gnome/src/actions.c:913 -#, c-format -msgid "IP call - %s" -msgstr "IP 电话 - %s" - -#: ../sflphone-client-gnome/src/actions.c:922 -msgid "Codec" -msgstr "编码" +#: ../sflphone-client-gnome/src/actions.c:589 +#: ../sflphone-client-gnome/src/actions.c:911 +msgid "Direct SIP call" +msgstr "" -#: ../sflphone-client-gnome/src/actions.c:1119 +#: ../sflphone-client-gnome/src/actions.c:1103 #, c-format msgid "" "<b>Error: No audio codecs found.\n" "\n" -"</b> SFL audio codecs have to be placed in <i>%s</i> or in the " -"<b>.sflphone</b> directory in your home( <i>%s</i> )" +"</b> SFL audio codecs have to be placed in <i>%s</i> or in the <b>.sflphone</" +"b> directory in your home( <i>%s</i> )" msgstr "" "<b>错误:无法找到codecs编码文件.\n" "\n" -"</b> SFL声音codecs文件应位于<i>%s</i> 或 位于主目录( <i>%s</i> )的<b>.sflphone</b>目录下" +"</b> SFL声音codecs文件应位于<i>%s</i> 或 位于主目录( <i>%s</i> )的<b>." +"sflphone</b>目录下" #: ../sflphone-client-gnome/src/errors.c:29 msgid "" @@ -149,53 +137,53 @@ msgstr "有电话正在处理中" msgid "Do you still want to quit?" msgstr "确认要退出?" -#: ../sflphone-client-gnome/src/mainwindow.c:299 +#: ../sflphone-client-gnome/src/mainwindow.c:298 msgid "SFLphone Error" msgstr "SFLphone出错" -#: ../sflphone-client-gnome/src/mainwindow.c:391 +#: ../sflphone-client-gnome/src/mainwindow.c:392 #, c-format msgid "ZRTP is not supported by peer %s\n" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:392 +#: ../sflphone-client-gnome/src/mainwindow.c:393 msgid "Secure Communication Unavailable" msgstr "安全通信不可用" -#: ../sflphone-client-gnome/src/mainwindow.c:393 -#: ../sflphone-client-gnome/src/mainwindow.c:415 +#: ../sflphone-client-gnome/src/mainwindow.c:394 +#: ../sflphone-client-gnome/src/mainwindow.c:416 msgid "Continue" msgstr "继续" -#: ../sflphone-client-gnome/src/mainwindow.c:394 -#: ../sflphone-client-gnome/src/mainwindow.c:416 -#: ../sflphone-client-gnome/src/mainwindow.c:430 +#: ../sflphone-client-gnome/src/mainwindow.c:395 +#: ../sflphone-client-gnome/src/mainwindow.c:417 +#: ../sflphone-client-gnome/src/mainwindow.c:431 msgid "Stop Call" msgstr "停止呼叫" -#: ../sflphone-client-gnome/src/mainwindow.c:413 +#: ../sflphone-client-gnome/src/mainwindow.c:414 #, c-format msgid "" "A %s error forced the call with %s to fall under unencrypted mode.\n" "Exact reason: %s\n" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:414 +#: ../sflphone-client-gnome/src/mainwindow.c:415 msgid "ZRTP negotiation failed" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:427 +#: ../sflphone-client-gnome/src/mainwindow.c:428 #, c-format msgid "" "%s wants to stop using secure communication. Confirm will resume " "conversation without SRTP.\n" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:428 +#: ../sflphone-client-gnome/src/mainwindow.c:429 msgid "Confirm Go Clear" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:429 +#: ../sflphone-client-gnome/src/mainwindow.c:430 msgid "Confirm" msgstr "确认" @@ -210,6 +198,12 @@ msgstr "%s 帐户: %s" msgid "<i>From</i> %s" msgstr "<i>拨入方</i> %s" +#: ../sflphone-client-gnome/src/sflnotify.c:94 +#, c-format +msgid "%d voice mail" +msgid_plural "%d voice mails" +msgstr[0] "%d 个语音信息" + #: ../sflphone-client-gnome/src/sflnotify.c:111 #, c-format msgid "Calling with %s account <i>%s</i>" @@ -257,217 +251,413 @@ msgstr "扬声器音量" msgid "Mic volume" msgstr "话筒音量" -#: ../sflphone-client-gnome/src/statusicon.c:91 +#: ../sflphone-client-gnome/src/statusicon.c:96 msgid "_Show main window" msgstr "显示主窗口(S)" -#: ../sflphone-client-gnome/src/statusicon.c:126 +#: ../sflphone-client-gnome/src/statusicon.c:131 msgid "SFLphone" msgstr "SFLphone" -#: ../sflphone-client-gnome/src/statusicon.c:127 +#: ../sflphone-client-gnome/src/statusicon.c:132 #, c-format msgid "%i account configured" msgid_plural "%i accounts configured" msgstr[0] "已配置了%i个账户" #: ../sflphone-client-gnome/src/toolbar.c:38 -#: ../sflphone-client-gnome/src/uimanager.c:750 +#: ../sflphone-client-gnome/src/uimanager.c:693 +#: ../sflphone-client-gnome/src/uimanager.c:727 msgid "Voicemail" msgstr "语音信箱" -#: ../sflphone-client-gnome/src/uimanager.c:403 +#: ../sflphone-client-gnome/src/uimanager.c:117 +msgid "No address book selected" +msgstr "地址簿" + +#: ../sflphone-client-gnome/src/uimanager.c:137 +#: ../sflphone-client-gnome/src/uimanager.c:756 +msgid "Address book" +msgstr "地址簿" + +#: ../sflphone-client-gnome/src/uimanager.c:279 +msgid "Voicemail (%i)" +msgstr "语音信箱 (%i)" + +#: ../sflphone-client-gnome/src/uimanager.c:342 msgid "SFLphone is a VoIP client compatible with SIP and IAX2 protocols." msgstr "SFLphone是一个VoIP客户端,它兼容SIP和IAX2协议." -#: ../sflphone-client-gnome/src/uimanager.c:406 +#: ../sflphone-client-gnome/src/uimanager.c:345 msgid "About SFLphone" msgstr "关于SFLphone" -#: ../sflphone-client-gnome/src/uimanager.c:1028 +#: ../sflphone-client-gnome/src/uimanager.c:719 +msgid "Call" +msgstr "电话(_C)" + +#: ../sflphone-client-gnome/src/uimanager.c:720 +#: ../sflphone-client-gnome/src/uimanager.c:1184 +msgid "_New call" +msgstr "新电话(_N)" + +#: ../sflphone-client-gnome/src/uimanager.c:720 +msgid "Place a new call" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:721 +#: ../sflphone-client-gnome/src/uimanager.c:979 msgid "_Pick up" msgstr "接听(_P)" -#: ../sflphone-client-gnome/src/uimanager.c:1040 -#: ../sflphone-client-gnome/src/uimanager.c:1081 +#: ../sflphone-client-gnome/src/uimanager.c:721 +msgid "Answer the call" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:722 +#: ../sflphone-client-gnome/src/uimanager.c:991 +#: ../sflphone-client-gnome/src/uimanager.c:1032 msgid "_Hang up" msgstr "挂断(_H)" -#: ../sflphone-client-gnome/src/uimanager.c:1052 -#: ../sflphone-client-gnome/src/uimanager.c:1093 -msgid "On _Hold" +#: ../sflphone-client-gnome/src/uimanager.c:722 +msgid "Finish the call" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:723 +msgid "O_n hold" msgstr "保持(_H)" -#: ../sflphone-client-gnome/src/uimanager.c:1064 +#: ../sflphone-client-gnome/src/uimanager.c:723 +msgid "Place the call on hold" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:724 +msgid "O_ff hold" +msgstr "恢复通话" + +#: ../sflphone-client-gnome/src/uimanager.c:724 +msgid "Place the call off hold" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:725 +#: ../sflphone-client-gnome/src/uimanager.c:1015 msgid "_Record" msgstr "录音(_R)" -#: ../sflphone-client-gnome/src/uimanager.c:1154 +#: ../sflphone-client-gnome/src/uimanager.c:725 +msgid "Record the current conversation" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:726 +msgid "Configuration _Assistant" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:726 +msgid "Run the configuration assistant" +msgstr "Stun配置有误" + +#: ../sflphone-client-gnome/src/uimanager.c:727 +msgid "Call your voicemail" +msgstr "%d 个语音信息" + +#: ../sflphone-client-gnome/src/uimanager.c:728 +msgid "_Close" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:728 +msgid "Minimize to system tray" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:729 +msgid "_Quit" +msgstr "编辑(_E)" + +#: ../sflphone-client-gnome/src/uimanager.c:729 +msgid "Quit the program" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:732 +msgid "_Edit" +msgstr "编辑(_E)" + +#: ../sflphone-client-gnome/src/uimanager.c:733 +msgid "_Copy" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:733 +msgid "Copy the selection" +msgstr "删除所选账户" + +#: ../sflphone-client-gnome/src/uimanager.c:734 +msgid "_Paste" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:734 +msgid "Paste the clipboard" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:735 +msgid "Clear _history" +msgstr "清空历史记录(_H)" + +#: ../sflphone-client-gnome/src/uimanager.c:735 +msgid "Clear the call history" +msgstr "清空历史记录" + +#: ../sflphone-client-gnome/src/uimanager.c:736 +msgid "_Accounts" +msgstr "账户(_A)" + +#: ../sflphone-client-gnome/src/uimanager.c:736 +msgid "Edit your accounts" +msgstr "当前帐户" + +#: ../sflphone-client-gnome/src/uimanager.c:737 +msgid "_Preferences" +msgstr "首选项" + +#: ../sflphone-client-gnome/src/uimanager.c:737 +msgid "Change your preferences" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:740 +msgid "_View" +msgstr "查看(_V)" + +#: ../sflphone-client-gnome/src/uimanager.c:743 +msgid "_Help" +msgstr "帮助(_H)" + +#: ../sflphone-client-gnome/src/uimanager.c:744 +msgid "Contents" +msgstr "继续" + +#: ../sflphone-client-gnome/src/uimanager.c:744 +msgid "Open the manual" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:745 +msgid "About this application" +msgstr "身份验证" + +#: ../sflphone-client-gnome/src/uimanager.c:751 +msgid "_Transfer" +msgstr "转接" + +#: ../sflphone-client-gnome/src/uimanager.c:751 +msgid "Transfer the call" +msgstr "转给: " + +#: ../sflphone-client-gnome/src/uimanager.c:752 +msgid "_Show toolbar" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:752 +msgid "Show the toolbar" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:753 +msgid "_Dialpad" +msgstr "禁用" + +#: ../sflphone-client-gnome/src/uimanager.c:753 +msgid "Show the dialpad" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:754 +msgid "_Volume controls" +msgstr "音量控制(V)" + +#: ../sflphone-client-gnome/src/uimanager.c:754 +msgid "Show the volume controls" +msgstr "音量控制(V)" + +#: ../sflphone-client-gnome/src/uimanager.c:755 +msgid "_History" +msgstr "历史" + +#: ../sflphone-client-gnome/src/uimanager.c:755 +msgid "Calls history" +msgstr "呼叫记录" + +#: ../sflphone-client-gnome/src/uimanager.c:756 +msgid "_Address book" +msgstr "地址簿" + +#: ../sflphone-client-gnome/src/uimanager.c:1003 +#: ../sflphone-client-gnome/src/uimanager.c:1044 +msgid "On _Hold" +msgstr "保持(_H)" + +#: ../sflphone-client-gnome/src/uimanager.c:1107 msgid "_Call back" msgstr "回叫(_C)" -#: ../sflphone-client-gnome/src/uimanager.c:1226 -msgid "_New call" -msgstr "新电话(_N)" - -#: ../sflphone-client-gnome/src/uimanager.c:1300 +#: ../sflphone-client-gnome/src/uimanager.c:1258 msgid "Edit phone number" msgstr "编辑电话号码" -#: ../sflphone-client-gnome/src/uimanager.c:1311 +#: ../sflphone-client-gnome/src/uimanager.c:1269 msgid "Edit the phone number before making a call" msgstr "拨出电话前编辑电话号码" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:164 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:180 msgid "Account Parameters" msgstr "帐户相关参数" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:173 -#: ../sflphone-client-gnome/src/config/assistant.c:294 -#: ../sflphone-client-gnome/src/config/assistant.c:402 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:189 +#: ../sflphone-client-gnome/src/config/assistant.c:314 +#: ../sflphone-client-gnome/src/config/assistant.c:427 msgid "_Alias" msgstr "别名(A)" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:181 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:197 msgid "_Protocol" msgstr "协议(P)" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:199 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:215 msgid "Unknown" msgstr "未知" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:209 -#: ../sflphone-client-gnome/src/config/assistant.c:302 -#: ../sflphone-client-gnome/src/config/assistant.c:410 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:225 +#: ../sflphone-client-gnome/src/config/assistant.c:322 +#: ../sflphone-client-gnome/src/config/assistant.c:435 msgid "_Host name" msgstr "主机名(H)" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:217 -#: ../sflphone-client-gnome/src/config/assistant.c:310 -#: ../sflphone-client-gnome/src/config/assistant.c:418 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:233 +#: ../sflphone-client-gnome/src/config/assistant.c:330 +#: ../sflphone-client-gnome/src/config/assistant.c:443 msgid "_User name" msgstr "用户名(U)" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:234 -#: ../sflphone-client-gnome/src/config/assistant.c:326 -#: ../sflphone-client-gnome/src/config/assistant.c:433 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:250 +#: ../sflphone-client-gnome/src/config/assistant.c:346 +#: ../sflphone-client-gnome/src/config/assistant.c:458 msgid "_Password" msgstr "密码(P)" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:254 -#: ../sflphone-client-gnome/src/config/assistant.c:344 -#: ../sflphone-client-gnome/src/config/assistant.c:449 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:270 +#: ../sflphone-client-gnome/src/config/assistant.c:363 +#: ../sflphone-client-gnome/src/config/assistant.c:473 +msgid "Show password" +msgstr "密码" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:274 +#: ../sflphone-client-gnome/src/config/assistant.c:368 +#: ../sflphone-client-gnome/src/config/assistant.c:478 msgid "_Voicemail number" msgstr "语音信箱号码(V)" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:340 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:361 msgid "Authentication" msgstr "身份验证" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:341 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:362 msgid "Secret" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:466 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:605 msgid "Credential" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:501 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:640 msgid "Authentication name" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:512 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:651 msgid "Password" msgstr "密码" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:535 -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:909 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:201 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:674 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1056 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:321 msgid "Security" msgstr "安全" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:547 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:213 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:687 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:333 msgid "Use TLS transport (sips)" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:552 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:218 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:693 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:338 msgid "SRTP key exchange" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:558 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:224 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:699 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:344 msgid "Disabled" msgstr "禁用" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:674 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:795 msgid "Registration" msgstr "注册" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:679 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:800 msgid "Registration expire" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:687 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:809 msgid "_Comply with RFC 3263" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:693 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:463 -msgid "Network" -msgstr "网络" +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:816 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:234 +msgid "Network Interface" +msgstr "网络连接失败" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:707 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:830 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:249 msgid "Local address" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:744 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:880 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:301 msgid "Local port" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:752 -msgid "Set published address and port:" +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:893 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:928 +msgid "Published address" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:756 -msgid "Using STUN " +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:899 +msgid "Using STUN" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:761 -msgid "Same as local parameters" +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:906 +msgid "STUN server URL" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:764 -msgid "Manually" +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:914 +msgid "Same as local parameters" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:769 -msgid "Published address" +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:917 +msgid "Set published address and port:" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:777 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:936 msgid "Published port" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:785 -msgid "STUN server URL" -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:880 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1027 msgid "Account settings" msgstr "帐户设置" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:899 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1046 msgid "Basic" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:904 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1051 msgid "Advanced" msgstr "" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:169 -msgid "Server returned \"" +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:164 +#, c-format +msgid "Server returned \"%s\" (%d)" msgstr "" #: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:389 @@ -486,32 +676,18 @@ msgstr "帐户" msgid "Configured Accounts" msgstr "已配置帐户" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:505 -msgid "There " -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:506 -msgid "is " -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:506 -msgid "are " -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:508 -msgid " active account" -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:509 -msgid "s" -msgstr "" +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:501 +#, c-format +msgid "There is %d active account" +msgid_plural "There are %d active accounts" +msgstr[0] "" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:514 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:507 msgid "You have no active account" msgstr "" #: ../sflphone-client-gnome/src/config/addressbook-config.c:306 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:443 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:556 msgid "General" msgstr "常用配置" @@ -556,225 +732,220 @@ msgid "Select which Evolution address books to use" msgstr "选择使用如下Evolution地址薄" #: ../sflphone-client-gnome/src/config/addressbook-config.c:404 -#: ../sflphone-client-gnome/src/config/audioconf.c:578 +#: ../sflphone-client-gnome/src/config/audioconf.c:577 msgid "Name" msgstr "名称" -#: ../sflphone-client-gnome/src/config/assistant.c:69 +#: ../sflphone-client-gnome/src/config/assistant.c:75 #, c-format msgid "This assistant is now finished." msgstr "配置完成." -#: ../sflphone-client-gnome/src/config/assistant.c:71 +#: ../sflphone-client-gnome/src/config/assistant.c:77 msgid "" "You can at any time check your registration state or modify your accounts " "parameters in the Options/Accounts window." msgstr "你可以随时在 选项/帐户 窗口中查看注册状态或者修改帐户参数." -#: ../sflphone-client-gnome/src/config/assistant.c:74 +#: ../sflphone-client-gnome/src/config/assistant.c:80 msgid "Alias" msgstr "别名" -#: ../sflphone-client-gnome/src/config/assistant.c:78 +#: ../sflphone-client-gnome/src/config/assistant.c:84 msgid "Server" msgstr "服务器" -#: ../sflphone-client-gnome/src/config/assistant.c:82 +#: ../sflphone-client-gnome/src/config/assistant.c:88 msgid "Username" msgstr "用户名" -#: ../sflphone-client-gnome/src/config/assistant.c:86 +#: ../sflphone-client-gnome/src/config/assistant.c:92 msgid "Security: " msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:88 +#: ../sflphone-client-gnome/src/config/assistant.c:94 msgid "SRTP/ZRTP draft-zimmermann" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:90 -#: ../sflphone-client-gnome/src/config/assistant.c:182 +#: ../sflphone-client-gnome/src/config/assistant.c:96 msgid "None" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:210 +#: ../sflphone-client-gnome/src/config/assistant.c:229 msgid "SFLphone account creation wizard" msgstr "SFLphone账户创建向导" -#: ../sflphone-client-gnome/src/config/assistant.c:236 +#: ../sflphone-client-gnome/src/config/assistant.c:255 msgid "Welcome to the Account creation wizard of SFLphone!" msgstr "欢迎使用SFLphone帐户创建向导!" -#: ../sflphone-client-gnome/src/config/assistant.c:237 +#: ../sflphone-client-gnome/src/config/assistant.c:256 msgid "This installation wizard will help you configure an account." msgstr "安装向导将帮助您配置帐户" -#: ../sflphone-client-gnome/src/config/assistant.c:251 +#: ../sflphone-client-gnome/src/config/assistant.c:270 msgid "VoIP Protocols" msgstr "VoIP协议" -#: ../sflphone-client-gnome/src/config/assistant.c:251 +#: ../sflphone-client-gnome/src/config/assistant.c:270 msgid "Select an account type" msgstr "选择帐户类型" -#: ../sflphone-client-gnome/src/config/assistant.c:253 +#: ../sflphone-client-gnome/src/config/assistant.c:272 msgid "SIP (Session Initiation Protocol)" msgstr "SIP(会话初始化协议)" -#: ../sflphone-client-gnome/src/config/assistant.c:255 +#: ../sflphone-client-gnome/src/config/assistant.c:274 msgid "IAX2 (InterAsterix Exchange)" msgstr "IAX2(Asterisk内部交换协议)" -#: ../sflphone-client-gnome/src/config/assistant.c:269 +#: ../sflphone-client-gnome/src/config/assistant.c:288 msgid "Account" msgstr "帐户" -#: ../sflphone-client-gnome/src/config/assistant.c:269 +#: ../sflphone-client-gnome/src/config/assistant.c:288 msgid "Please select one of the following options" msgstr "请选择以下选项中的一个" -#: ../sflphone-client-gnome/src/config/assistant.c:271 +#: ../sflphone-client-gnome/src/config/assistant.c:290 msgid "Create a free SIP/IAX2 account on sflphone.org" msgstr "在sflphone.org上创建免费的SIP/IAX2帐户" -#: ../sflphone-client-gnome/src/config/assistant.c:273 +#: ../sflphone-client-gnome/src/config/assistant.c:292 msgid "Register an existing SIP or IAX2 account" msgstr "注册已存在的SIP或IAX2帐户" -#: ../sflphone-client-gnome/src/config/assistant.c:286 +#: ../sflphone-client-gnome/src/config/assistant.c:306 msgid "SIP account settings" msgstr "SIP帐户设置" -#: ../sflphone-client-gnome/src/config/assistant.c:286 -#: ../sflphone-client-gnome/src/config/assistant.c:394 +#: ../sflphone-client-gnome/src/config/assistant.c:306 +#: ../sflphone-client-gnome/src/config/assistant.c:419 msgid "Please fill the following information" msgstr "请填写以下信息" -#: ../sflphone-client-gnome/src/config/assistant.c:352 -#: ../sflphone-client-gnome/src/config/assistant.c:381 +#: ../sflphone-client-gnome/src/config/assistant.c:376 +#: ../sflphone-client-gnome/src/config/assistant.c:405 msgid "Secure communications with _ZRTP" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:365 +#: ../sflphone-client-gnome/src/config/assistant.c:389 msgid "Optional email address" msgstr "可选邮件地址" -#: ../sflphone-client-gnome/src/config/assistant.c:365 +#: ../sflphone-client-gnome/src/config/assistant.c:389 msgid "This email address will be used to send your voicemail messages." msgstr "这个邮件地址将被用来发送您的语音邮箱消息" -#: ../sflphone-client-gnome/src/config/assistant.c:373 +#: ../sflphone-client-gnome/src/config/assistant.c:397 msgid "_Email address" msgstr "邮件地址(E)" -#: ../sflphone-client-gnome/src/config/assistant.c:394 +#: ../sflphone-client-gnome/src/config/assistant.c:419 msgid "IAX2 account settings" msgstr "IAX2帐户设置" -#: ../sflphone-client-gnome/src/config/assistant.c:467 +#: ../sflphone-client-gnome/src/config/assistant.c:496 msgid "Network Address Translation (NAT)" msgstr "网络地址解析(NAT)" -#: ../sflphone-client-gnome/src/config/assistant.c:467 +#: ../sflphone-client-gnome/src/config/assistant.c:496 msgid "You should probably enable this if you are behind a firewall." msgstr "如果你使用网络使用防火墙,你很有可能需要设定此项." -#: ../sflphone-client-gnome/src/config/assistant.c:476 +#: ../sflphone-client-gnome/src/config/assistant.c:505 msgid "E_nable STUN" msgstr "使用STUN(n)" -#: ../sflphone-client-gnome/src/config/assistant.c:483 +#: ../sflphone-client-gnome/src/config/assistant.c:512 msgid "_STUN server" msgstr "STUN服务器(S)" -#: ../sflphone-client-gnome/src/config/assistant.c:497 +#: ../sflphone-client-gnome/src/config/assistant.c:526 msgid "Account Registration" msgstr "帐户注册" -#: ../sflphone-client-gnome/src/config/assistant.c:497 +#: ../sflphone-client-gnome/src/config/assistant.c:526 msgid "Congratulations!" msgstr "恭喜!" -#: ../sflphone-client-gnome/src/config/audioconf.c:583 +#: ../sflphone-client-gnome/src/config/audioconf.c:582 msgid "Frequency" msgstr "频率" -#: ../sflphone-client-gnome/src/config/audioconf.c:588 +#: ../sflphone-client-gnome/src/config/audioconf.c:587 msgid "Bitrate" msgstr "比率" -#: ../sflphone-client-gnome/src/config/audioconf.c:593 +#: ../sflphone-client-gnome/src/config/audioconf.c:592 msgid "Bandwidth" msgstr "带宽" -#: ../sflphone-client-gnome/src/config/audioconf.c:673 +#: ../sflphone-client-gnome/src/config/audioconf.c:670 msgid "ALSA plugin" msgstr "ALSA插件" -#: ../sflphone-client-gnome/src/config/audioconf.c:695 +#: ../sflphone-client-gnome/src/config/audioconf.c:692 msgid "Output" msgstr "输出" -#: ../sflphone-client-gnome/src/config/audioconf.c:717 +#: ../sflphone-client-gnome/src/config/audioconf.c:714 msgid "Input" msgstr "输入" -#: ../sflphone-client-gnome/src/config/audioconf.c:752 +#: ../sflphone-client-gnome/src/config/audioconf.c:749 msgid "_Voice Activity Detection" msgstr "声音状态检测(V)" -#: ../sflphone-client-gnome/src/config/audioconf.c:762 +#: ../sflphone-client-gnome/src/config/audioconf.c:759 msgid "_Noise Reduction (Narrow-Band Companding)" msgstr "降噪处理-窄频压缩(N)" -#: ../sflphone-client-gnome/src/config/audioconf.c:798 +#: ../sflphone-client-gnome/src/config/audioconf.c:800 msgid "Sound Manager" msgstr "音频管理器" -#: ../sflphone-client-gnome/src/config/audioconf.c:807 +#: ../sflphone-client-gnome/src/config/audioconf.c:809 msgid "_Pulseaudio" msgstr "Pulseaudio" -#: ../sflphone-client-gnome/src/config/audioconf.c:811 +#: ../sflphone-client-gnome/src/config/audioconf.c:813 msgid "_ALSA" msgstr "ALSA" -#: ../sflphone-client-gnome/src/config/audioconf.c:816 -msgid "_Mute other applications during a call" -msgstr "当有来电时静音其它应用程序(c)" - -#: ../sflphone-client-gnome/src/config/audioconf.c:823 +#: ../sflphone-client-gnome/src/config/audioconf.c:819 msgid "ALSA settings" msgstr "ALSA设置" -#: ../sflphone-client-gnome/src/config/audioconf.c:840 +#: ../sflphone-client-gnome/src/config/audioconf.c:836 msgid "Codecs" msgstr "Codecs编码" -#: ../sflphone-client-gnome/src/config/audioconf.c:869 +#: ../sflphone-client-gnome/src/config/audioconf.c:865 msgid "Recordings" msgstr "记录" -#: ../sflphone-client-gnome/src/config/audioconf.c:873 +#: ../sflphone-client-gnome/src/config/audioconf.c:869 msgid "Destination folder" msgstr "目标文件夹" -#: ../sflphone-client-gnome/src/config/audioconf.c:877 +#: ../sflphone-client-gnome/src/config/audioconf.c:873 msgid "Select a folder" msgstr "选择文件夹" -#: ../sflphone-client-gnome/src/config/audioconf.c:883 +#: ../sflphone-client-gnome/src/config/audioconf.c:879 msgid "Ringtones" msgstr "铃声" -#: ../sflphone-client-gnome/src/config/audioconf.c:889 +#: ../sflphone-client-gnome/src/config/audioconf.c:885 msgid "_Enable ringtones" msgstr "启用铃声(E)" -#: ../sflphone-client-gnome/src/config/audioconf.c:895 +#: ../sflphone-client-gnome/src/config/audioconf.c:891 msgid "Choose a ringtone" msgstr "选择铃声" -#: ../sflphone-client-gnome/src/config/audioconf.c:901 +#: ../sflphone-client-gnome/src/config/audioconf.c:897 msgid "Audio Files" msgstr "音频文件" @@ -811,86 +982,66 @@ msgstr "重设电话号码" msgid "_Prefix dialed numbers with" msgstr "号码前缀(P)" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:195 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:225 msgid "" "This profile is used when you want to reach a remote peer simply by typing a " "sip URI such as <b>sip:remotepeer</b>. The settings you define here will " "also be used if no account can be matched to an incoming or outgoing call." msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:274 -msgid "SIP Port" -msgstr "SIP端口号" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:281 -msgid "UDP Transport" -msgstr "" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:319 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:440 msgid "Desktop Notifications" msgstr "桌面提示" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:323 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:444 msgid "_Enable notifications" msgstr "启用提示(E)" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:329 -msgid "Enable voicemail _notifications" -msgstr "启用语音邮箱提示(n)" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:341 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:450 msgid "System Tray Icon" msgstr "系统托盘图标" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:344 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:453 msgid "_Popup main window on incoming call" msgstr "来电时弹出主窗口(P)" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:349 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:457 msgid "Ne_ver popup main window" msgstr "从不弹出主窗口(v)" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:353 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:463 msgid "Hide SFLphone window on _startup" msgstr "在启动时隐藏SFLphone主窗口" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:359 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:469 msgid "Calls History" msgstr "拨号历史" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:362 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:472 msgid "_Keep my history for at least" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:373 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:483 msgid "days" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:377 -msgid "Configuration File" -msgstr "" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:379 -msgid "Store SIP credentials as MD5 hash" -msgstr "" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:423 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:536 msgid "Preferences" msgstr "首选项" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:448 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:561 msgid "Audio" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:453 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:566 msgid "Address Book" msgstr "地址簿" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:458 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:571 msgid "Hooks" msgstr "钩键" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:468 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:581 msgid "Direct IP calls" msgstr "" @@ -898,11 +1049,11 @@ msgstr "" msgid "Advanced options for TLS" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:55 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:56 msgid "TLS transport" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:59 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:60 msgid "" "TLS transport can be used along with UDP for those calls that would\n" "require secure sip transactions (aka SIPS). You can configure a different\n" @@ -911,55 +1062,55 @@ msgid "" "port, different one from each other\n" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:100 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:103 msgid "Certificate of Authority list" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:104 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:107 msgid "Choose a CA list file (optional)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:115 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:131 msgid "Public endpoint certificate file" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:119 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:135 msgid "Choose a public endpoint certificate (optional)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:134 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:159 msgid "Choose a private key file (optional)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:145 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:181 msgid "Password for the private key" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:168 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:204 msgid "TLS protocol method" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:202 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:238 msgid "TLS cipher list" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:211 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:247 msgid "Server name instance for outgoing TLS connection" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:219 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:255 msgid "Negotiation timeout (sec:msec)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:236 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:272 msgid "Verify incoming certificates, as a server" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:242 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:278 msgid "Verify certificates from answer, as a client" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:248 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:284 msgid "Require certificate for incoming tls connections" msgstr "" @@ -967,45 +1118,63 @@ msgstr "" msgid "ZRTP Options" msgstr "" -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:68 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:69 msgid "Send Hello Hash in S_DP" msgstr "" -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:74 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:75 msgid "Ask User to Confirm SAS" msgstr "" -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:80 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:81 msgid "_Warn if ZRTP not supported" msgstr "" -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:86 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:87 msgid "Display SAS once for hold events" msgstr "" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:56 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:58 msgid "Search all" msgstr "查询所有" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:57 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:70 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:82 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:94 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:59 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:72 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:84 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:96 msgid "Click here to change the search type" msgstr "请点击此处改变查询方式" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:69 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:71 msgid "Search by missed call" msgstr "从未接电话中查询" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:81 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:83 msgid "Search by incoming call" msgstr "从来电中查询" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:93 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:95 msgid "Search by outgoing call" msgstr "从拨出电话中查询" +#~ msgid "IP call - %s" +#~ msgstr "IP 电话 - %s" + +#~ msgid "Codec" +#~ msgstr "编码" + +#~ msgid "Network" +#~ msgstr "网络" + +#~ msgid "_Mute other applications during a call" +#~ msgstr "当有来电时静音其它应用程序(c)" + +#~ msgid "SIP Port" +#~ msgstr "SIP端口号" + +#~ msgid "Enable voicemail _notifications" +#~ msgstr "启用语音邮箱提示(n)" + #~ msgid "Account creation wizard" #~ msgstr "帐户创建向导" @@ -1026,9 +1195,6 @@ msgstr "从拨出电话中查询" #~ msgid "Default account" #~ msgstr "默认帐户" -#~ msgid "Transfer to : " -#~ msgstr "转给: " - #~ msgid "SFLphone KDE Client" #~ msgstr "SFLphone KDE客户端" @@ -1041,12 +1207,6 @@ msgstr "从拨出电话中查询" #~ msgid "Main screen" #~ msgstr "主屏幕" -#~ msgid "Call history" -#~ msgstr "呼叫记录" - -#~ msgid "Address book" -#~ msgstr "地址簿" - #~ msgid "Configure SFLphone" #~ msgstr "配置SFLphone" @@ -1080,9 +1240,6 @@ msgstr "从拨出电话中查询" #~ msgid "Hold on" #~ msgstr "呼叫保持" -#~ msgid "Transfer" -#~ msgstr "转接" - #~ msgid "Record" #~ msgstr "记录" @@ -1101,29 +1258,32 @@ msgstr "从拨出电话中查询" #~ msgid "" #~ "By default, when you place a call, sflphone will use the first account in " #~ "this list which is \"registered\". Change the order of the accounts using " -#~ "the \"Up\" and \"Down\" arrows. Enable/disable them by checking/unchecking " -#~ "them on the left of the item. Add or remove some with \"Plus\" and \"Sub\" " -#~ "buttons. Edit the selected account with the form on the right." +#~ "the \"Up\" and \"Down\" arrows. Enable/disable them by checking/" +#~ "unchecking them on the left of the item. Add or remove some with \"Plus\" " +#~ "and \"Sub\" buttons. Edit the selected account with the form on the right." #~ msgstr "" -#~ "在默认情况下,当你打电话时,sflphone会使用列表当中第一个已注册的帐户。使用箭头\"上\"和\"下\"可以改变账户的顺序。选择账户名称左边的方框可以" -#~ "启用帐户,取消选择则会禁用该账户。通过\"加\"\"减\"按钮可以添加或删除账户。点击\"编辑\"按钮可以改变账户的设置。" - -#~ msgid "Remove the selected account" -#~ msgstr "删除所选账户" +#~ "在默认情况下,当你打电话时,sflphone会使用列表当中第一个已注册的帐户。使用" +#~ "箭头\"上\"和\"下\"可以改变账户的顺序。选择账户名称左边的方框可以启用帐户," +#~ "取消选择则会禁用该账户。通过\"加\"\"减\"按钮可以添加或删除账户。点击\"编辑" +#~ "\"按钮可以改变账户的设置。" #~ msgid "" -#~ "This button will remove the selected account in the list below. Be sure you " -#~ "really don't need it anymore. If you think you might use it again later, " -#~ "just uncheck it." -#~ msgstr "该按钮会删除列表中被选定的账户。请确认你的操作。如果你希望继续使用某个账户,请取消对该账户的选择" +#~ "This button will remove the selected account in the list below. Be sure " +#~ "you really don't need it anymore. If you think you might use it again " +#~ "later, just uncheck it." +#~ msgstr "" +#~ "该按钮会删除列表中被选定的账户。请确认你的操作。如果你希望继续使用某个账" +#~ "户,请取消对该账户的选择" #~ msgid "Remove" #~ msgstr "删除" #~ msgid "" -#~ "This button enables you to initialize a new account. You will then be able " -#~ "to edit it using the form on the right." -#~ msgstr "通过该按钮可以创建一个新账户。添加该账户之后你还可以通过编辑按钮来修改设置。" +#~ "This button enables you to initialize a new account. You will then be " +#~ "able to edit it using the form on the right." +#~ msgstr "" +#~ "通过该按钮可以创建一个新账户。添加该账户之后你还可以通过编辑按钮来修改设" +#~ "置。" #~ msgid "Add" #~ msgstr "添加" @@ -1136,8 +1296,9 @@ msgstr "从拨出电话中查询" #~ "this list which is \"registered\". Change the order of the accounts using " #~ "the \"Up\" and \"Down\" arrows." #~ msgstr "" -#~ "在默认情况下,当你打电话时,sflphone会使用列表当中第一个已注册的帐户。使用箭头\"上\"和\"下\"可以改变账户的顺序。选择账户名称左边的方框可以" -#~ "启用帐户,取消选择则会禁用该账户。通过\"加\"\"减\"按钮可以添加或删除账户。" +#~ "在默认情况下,当你打电话时,sflphone会使用列表当中第一个已注册的帐户。使用" +#~ "箭头\"上\"和\"下\"可以改变账户的顺序。选择账户名称左边的方框可以启用帐户," +#~ "取消选择则会禁用该账户。通过\"加\"\"减\"按钮可以添加或删除账户。" #~ msgid "Down" #~ msgstr "下" @@ -1220,9 +1381,6 @@ msgstr "从拨出电话中查询" #~ msgid "On start" #~ msgstr "正在启动" -#~ msgid "Clear history" -#~ msgstr "清空历史记录" - #~ msgid "Trigger on specific SIP header" #~ msgstr "激活指定的SIP头" @@ -1238,12 +1396,6 @@ msgstr "从拨出电话中查询" #~ msgid "Attention:number of results exceeds max displayed." #~ msgstr "注意:结果超过可显示的最大值" -#~ msgid "_Volume controls" -#~ msgstr "音量控制(V)" - -#~ msgid "History" -#~ msgstr "历史" - #~ msgid "_Enable this account" #~ msgstr "启用该账户(E)" @@ -1392,9 +1544,6 @@ msgstr "从拨出电话中查询" #~ msgid "\"Voicemail\" <%s>" #~ msgstr "\"语音邮件\" <%s>" -#~ msgid "Off Hold" -#~ msgstr "恢复通话" - #~ msgid "Record a call" #~ msgstr "记录通话" @@ -1544,36 +1693,21 @@ msgstr "从拨出电话中查询" #~ msgid "_STUN Server" #~ msgstr "STUN服务器(S)" -#~ msgid "_Edit" -#~ msgstr "编辑(_E)" - -#~ msgid "_View" -#~ msgstr "查看(_V)" - -#~ msgid "_Help" -#~ msgstr "帮助(_H)" - #~ msgid "_Account creation wizard" #~ msgstr "帐户创建向导(_A)" -#~ msgid "_Call" -#~ msgstr "电话(_C)" - -#~ msgid "Clear _history" -#~ msgstr "清空历史记录(_H)" - -#~ msgid "_Accounts" -#~ msgstr "账户(_A)" - #~ msgctxt "NAME OF TRANSLATORS" #~ msgid "Your names" #~ msgstr "" #~ "Yun Liu, ,Launchpad Contributions:,Aron Xu,Yun Liu, ,Launchpad " #~ "Contributions:,Aron Xu,Yinghua Wang,Yun Liu,rainofchaos, ,Launchpad " -#~ "Contributions:,Aron Xu,Yinghua Wang,Yun Liu,冯超" +#~ "Contributions:,Aron Xu,Yinghua Wang,Yun Liu,冯超, ,Launchpad " +#~ "Contributions:,Aron Xu,Emmanuel Milou,Yun Liu,冯超,王英华" #~ msgctxt "EMAIL OF TRANSLATORS" #~ msgid "Your emails" #~ msgstr "" -#~ "yunliu2000@gmail.com,,,happyaron.xu@gmail.com,,,,happyaron.xu@gmail.com,,,rai" -#~ "nofchaos@gmail.com,,,happyaron.xu@gmail.com,,,rainofchaos@gmail.com" +#~ "yunliu2000@gmail.com,,,happyaron.xu@gmail.com,,,,happyaron.xu@gmail.com,,," +#~ "rainofchaos@gmail.com,,,happyaron.xu@gmail.com,,,rainofchaos@gmail.com,,,," +#~ "emmanuel.milou@savoirfairelinux.com,,rainofchaos@gmail.com," +#~ "wantinghard@gmail.com" diff --git a/sflphone-client-gnome/po/zh_HK/zh_HK.po b/sflphone-client-gnome/po/zh_HK/zh_HK.po index 7a9dcac8aa..0e4afca0c5 100644 --- a/sflphone-client-gnome/po/zh_HK/zh_HK.po +++ b/sflphone-client-gnome/po/zh_HK/zh_HK.po @@ -8,15 +8,15 @@ msgid "" msgstr "" "Project-Id-Version: SFLphone 0.9.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-10-14 11:18-0400\n" -"PO-Revision-Date: 2009-10-14 17:28+0000\n" +"POT-Creation-Date: 2009-12-03 10:22-0500\n" +"PO-Revision-Date: 2009-10-26 20:46+0000\n" "Last-Translator: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com>\n" "Language-Team: SavoirFaireLinux Inc <sflphoneteam@savoirfairelinux.com>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Launchpad-Export-Date: 2009-10-26 15:48+0000\n" +"X-Launchpad-Export-Date: 2009-12-03 15:32+0000\n" "X-Generator: Launchpad (build Unknown)\n" #: ../sflphone-client-gnome/src/accountlist.c:175 @@ -61,24 +61,15 @@ msgstr "Stun伺服器無效" msgid "Invalid" msgstr "無效" -#: ../sflphone-client-gnome/src/actions.c:54 -#: ../sflphone-client-gnome/src/sflnotify.c:94 -#, c-format -msgid "%d voice mail" -msgid_plural "%d voice mails" -msgstr[0] "%d 個語音郵件" - -#: ../sflphone-client-gnome/src/actions.c:83 -#: ../sflphone-client-gnome/src/actions.c:919 -#: ../sflphone-client-gnome/src/actions.c:926 +#: ../sflphone-client-gnome/src/actions.c:98 msgid "Using account" msgstr "使用賬戶" -#: ../sflphone-client-gnome/src/actions.c:89 +#: ../sflphone-client-gnome/src/actions.c:104 msgid "No registered accounts" msgstr "沒有已註冊帳戶" -#: ../sflphone-client-gnome/src/actions.c:268 +#: ../sflphone-client-gnome/src/actions.c:285 msgid "" "Unable to connect to the SFLphone server.\n" "Make sure the daemon is running." @@ -86,26 +77,23 @@ msgstr "" "連接SFLphone伺服器失敗.\n" "請核查daemon是否正在運行." -#: ../sflphone-client-gnome/src/actions.c:913 -#, c-format -msgid "IP call - %s" -msgstr "IP電話- %s" - -#: ../sflphone-client-gnome/src/actions.c:922 -msgid "Codec" -msgstr "編碼" +#: ../sflphone-client-gnome/src/actions.c:589 +#: ../sflphone-client-gnome/src/actions.c:911 +msgid "Direct SIP call" +msgstr "" -#: ../sflphone-client-gnome/src/actions.c:1119 +#: ../sflphone-client-gnome/src/actions.c:1103 #, c-format msgid "" "<b>Error: No audio codecs found.\n" "\n" -"</b> SFL audio codecs have to be placed in <i>%s</i> or in the " -"<b>.sflphone</b> directory in your home( <i>%s</i> )" +"</b> SFL audio codecs have to be placed in <i>%s</i> or in the <b>.sflphone</" +"b> directory in your home( <i>%s</i> )" msgstr "" "<b>錯誤:無法找到音訊編碼檔案.\n" "\n" -"</b> SFL聲音編碼檔案應該位于<i>%s</i> 或者位于主目錄( <i>%s</i> )的<b>.sflphone</b>目錄下" +"</b> SFL聲音編碼檔案應該位于<i>%s</i> 或者位于主目錄( <i>%s</i> )的<b>." +"sflphone</b>目錄下" #: ../sflphone-client-gnome/src/errors.c:29 msgid "" @@ -149,53 +137,53 @@ msgstr "有電話正在處理中." msgid "Do you still want to quit?" msgstr "確認要退出?" -#: ../sflphone-client-gnome/src/mainwindow.c:299 +#: ../sflphone-client-gnome/src/mainwindow.c:298 msgid "SFLphone Error" msgstr "SFLphone 出錯" -#: ../sflphone-client-gnome/src/mainwindow.c:391 +#: ../sflphone-client-gnome/src/mainwindow.c:392 #, c-format msgid "ZRTP is not supported by peer %s\n" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:392 +#: ../sflphone-client-gnome/src/mainwindow.c:393 msgid "Secure Communication Unavailable" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:393 -#: ../sflphone-client-gnome/src/mainwindow.c:415 +#: ../sflphone-client-gnome/src/mainwindow.c:394 +#: ../sflphone-client-gnome/src/mainwindow.c:416 msgid "Continue" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:394 -#: ../sflphone-client-gnome/src/mainwindow.c:416 -#: ../sflphone-client-gnome/src/mainwindow.c:430 +#: ../sflphone-client-gnome/src/mainwindow.c:395 +#: ../sflphone-client-gnome/src/mainwindow.c:417 +#: ../sflphone-client-gnome/src/mainwindow.c:431 msgid "Stop Call" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:413 +#: ../sflphone-client-gnome/src/mainwindow.c:414 #, c-format msgid "" "A %s error forced the call with %s to fall under unencrypted mode.\n" "Exact reason: %s\n" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:414 +#: ../sflphone-client-gnome/src/mainwindow.c:415 msgid "ZRTP negotiation failed" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:427 +#: ../sflphone-client-gnome/src/mainwindow.c:428 #, c-format msgid "" "%s wants to stop using secure communication. Confirm will resume " "conversation without SRTP.\n" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:428 +#: ../sflphone-client-gnome/src/mainwindow.c:429 msgid "Confirm Go Clear" msgstr "" -#: ../sflphone-client-gnome/src/mainwindow.c:429 +#: ../sflphone-client-gnome/src/mainwindow.c:430 msgid "Confirm" msgstr "" @@ -210,6 +198,12 @@ msgstr "%s 帳戶 : %s" msgid "<i>From</i> %s" msgstr "<i>撥入方</i> %s" +#: ../sflphone-client-gnome/src/sflnotify.c:94 +#, c-format +msgid "%d voice mail" +msgid_plural "%d voice mails" +msgstr[0] "%d 個語音郵件" + #: ../sflphone-client-gnome/src/sflnotify.c:111 #, c-format msgid "Calling with %s account <i>%s</i>" @@ -257,217 +251,413 @@ msgstr "揚聲器音量" msgid "Mic volume" msgstr "話筒音量" -#: ../sflphone-client-gnome/src/statusicon.c:91 +#: ../sflphone-client-gnome/src/statusicon.c:96 msgid "_Show main window" msgstr "顯示主窗口(S)" -#: ../sflphone-client-gnome/src/statusicon.c:126 +#: ../sflphone-client-gnome/src/statusicon.c:131 msgid "SFLphone" msgstr "SFLphone" -#: ../sflphone-client-gnome/src/statusicon.c:127 +#: ../sflphone-client-gnome/src/statusicon.c:132 #, c-format msgid "%i account configured" msgid_plural "%i accounts configured" msgstr[0] "已配置了%i個賬戶" #: ../sflphone-client-gnome/src/toolbar.c:38 -#: ../sflphone-client-gnome/src/uimanager.c:750 +#: ../sflphone-client-gnome/src/uimanager.c:693 +#: ../sflphone-client-gnome/src/uimanager.c:727 msgid "Voicemail" msgstr "語音郵件" -#: ../sflphone-client-gnome/src/uimanager.c:403 +#: ../sflphone-client-gnome/src/uimanager.c:117 +msgid "No address book selected" +msgstr "地址簿" + +#: ../sflphone-client-gnome/src/uimanager.c:137 +#: ../sflphone-client-gnome/src/uimanager.c:756 +msgid "Address book" +msgstr "地址簿" + +#: ../sflphone-client-gnome/src/uimanager.c:279 +msgid "Voicemail (%i)" +msgstr "語音郵件 (%i)" + +#: ../sflphone-client-gnome/src/uimanager.c:342 msgid "SFLphone is a VoIP client compatible with SIP and IAX2 protocols." msgstr "SFLphone是一個VoIP客戶端,它兼容SIP和IAX2协议." -#: ../sflphone-client-gnome/src/uimanager.c:406 +#: ../sflphone-client-gnome/src/uimanager.c:345 msgid "About SFLphone" msgstr "有關SFLphone" -#: ../sflphone-client-gnome/src/uimanager.c:1028 +#: ../sflphone-client-gnome/src/uimanager.c:719 +msgid "Call" +msgstr "電話" + +#: ../sflphone-client-gnome/src/uimanager.c:720 +#: ../sflphone-client-gnome/src/uimanager.c:1184 +msgid "_New call" +msgstr "新電話(N)" + +#: ../sflphone-client-gnome/src/uimanager.c:720 +msgid "Place a new call" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:721 +#: ../sflphone-client-gnome/src/uimanager.c:979 msgid "_Pick up" msgstr "撥出(P)" -#: ../sflphone-client-gnome/src/uimanager.c:1040 -#: ../sflphone-client-gnome/src/uimanager.c:1081 +#: ../sflphone-client-gnome/src/uimanager.c:721 +msgid "Answer the call" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:722 +#: ../sflphone-client-gnome/src/uimanager.c:991 +#: ../sflphone-client-gnome/src/uimanager.c:1032 msgid "_Hang up" msgstr "放下(H)" -#: ../sflphone-client-gnome/src/uimanager.c:1052 -#: ../sflphone-client-gnome/src/uimanager.c:1093 -msgid "On _Hold" +#: ../sflphone-client-gnome/src/uimanager.c:722 +msgid "Finish the call" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:723 +msgid "O_n hold" msgstr "待机" -#: ../sflphone-client-gnome/src/uimanager.c:1064 +#: ../sflphone-client-gnome/src/uimanager.c:723 +msgid "Place the call on hold" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:724 +msgid "O_ff hold" +msgstr "恢复通話" + +#: ../sflphone-client-gnome/src/uimanager.c:724 +msgid "Place the call off hold" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:725 +#: ../sflphone-client-gnome/src/uimanager.c:1015 msgid "_Record" msgstr "記錄(R)" -#: ../sflphone-client-gnome/src/uimanager.c:1154 +#: ../sflphone-client-gnome/src/uimanager.c:725 +msgid "Record the current conversation" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:726 +msgid "Configuration _Assistant" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:726 +msgid "Run the configuration assistant" +msgstr "Stun配置有誤" + +#: ../sflphone-client-gnome/src/uimanager.c:727 +msgid "Call your voicemail" +msgstr "%d 個語音郵件" + +#: ../sflphone-client-gnome/src/uimanager.c:728 +msgid "_Close" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:728 +msgid "Minimize to system tray" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:729 +msgid "_Quit" +msgstr "編輯(E)" + +#: ../sflphone-client-gnome/src/uimanager.c:729 +msgid "Quit the program" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:732 +msgid "_Edit" +msgstr "編輯(E)" + +#: ../sflphone-client-gnome/src/uimanager.c:733 +msgid "_Copy" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:733 +msgid "Copy the selection" +msgstr "刪除所選賬戶" + +#: ../sflphone-client-gnome/src/uimanager.c:734 +msgid "_Paste" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:734 +msgid "Paste the clipboard" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:735 +msgid "Clear _history" +msgstr "清空曆史記錄(C)" + +#: ../sflphone-client-gnome/src/uimanager.c:735 +msgid "Clear the call history" +msgstr "清空曆史記錄" + +#: ../sflphone-client-gnome/src/uimanager.c:736 +msgid "_Accounts" +msgstr "帳戶(A)" + +#: ../sflphone-client-gnome/src/uimanager.c:736 +msgid "Edit your accounts" +msgstr "當前帳戶" + +#: ../sflphone-client-gnome/src/uimanager.c:737 +msgid "_Preferences" +msgstr "屬性" + +#: ../sflphone-client-gnome/src/uimanager.c:737 +msgid "Change your preferences" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:740 +msgid "_View" +msgstr "查看(V)" + +#: ../sflphone-client-gnome/src/uimanager.c:743 +msgid "_Help" +msgstr "幫助(H)" + +#: ../sflphone-client-gnome/src/uimanager.c:744 +msgid "Contents" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:744 +msgid "Open the manual" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:745 +msgid "About this application" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:751 +msgid "_Transfer" +msgstr "轉接" + +#: ../sflphone-client-gnome/src/uimanager.c:751 +msgid "Transfer the call" +msgstr "轉給: " + +#: ../sflphone-client-gnome/src/uimanager.c:752 +msgid "_Show toolbar" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:752 +msgid "Show the toolbar" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:753 +msgid "_Dialpad" +msgstr "顯示撥號鍵盤" + +#: ../sflphone-client-gnome/src/uimanager.c:753 +msgid "Show the dialpad" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:754 +msgid "_Volume controls" +msgstr "音量控制(V)" + +#: ../sflphone-client-gnome/src/uimanager.c:754 +msgid "Show the volume controls" +msgstr "音量控制(V)" + +#: ../sflphone-client-gnome/src/uimanager.c:755 +msgid "_History" +msgstr "歷史" + +#: ../sflphone-client-gnome/src/uimanager.c:755 +msgid "Calls history" +msgstr "呼叫記錄" + +#: ../sflphone-client-gnome/src/uimanager.c:756 +msgid "_Address book" +msgstr "地址簿" + +#: ../sflphone-client-gnome/src/uimanager.c:1003 +#: ../sflphone-client-gnome/src/uimanager.c:1044 +msgid "On _Hold" +msgstr "待机" + +#: ../sflphone-client-gnome/src/uimanager.c:1107 msgid "_Call back" msgstr "回叫(C)" -#: ../sflphone-client-gnome/src/uimanager.c:1226 -msgid "_New call" -msgstr "新電話(N)" - -#: ../sflphone-client-gnome/src/uimanager.c:1300 +#: ../sflphone-client-gnome/src/uimanager.c:1258 msgid "Edit phone number" msgstr "編輯電話號碼" -#: ../sflphone-client-gnome/src/uimanager.c:1311 +#: ../sflphone-client-gnome/src/uimanager.c:1269 msgid "Edit the phone number before making a call" msgstr "撥出電話前編輯電話號碼" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:164 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:180 msgid "Account Parameters" msgstr "帳戶相關參數" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:173 -#: ../sflphone-client-gnome/src/config/assistant.c:294 -#: ../sflphone-client-gnome/src/config/assistant.c:402 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:189 +#: ../sflphone-client-gnome/src/config/assistant.c:314 +#: ../sflphone-client-gnome/src/config/assistant.c:427 msgid "_Alias" msgstr "別稱(A)" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:181 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:197 msgid "_Protocol" msgstr "協議(P)" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:199 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:215 msgid "Unknown" msgstr "未知" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:209 -#: ../sflphone-client-gnome/src/config/assistant.c:302 -#: ../sflphone-client-gnome/src/config/assistant.c:410 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:225 +#: ../sflphone-client-gnome/src/config/assistant.c:322 +#: ../sflphone-client-gnome/src/config/assistant.c:435 msgid "_Host name" msgstr "主机名稱(H)" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:217 -#: ../sflphone-client-gnome/src/config/assistant.c:310 -#: ../sflphone-client-gnome/src/config/assistant.c:418 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:233 +#: ../sflphone-client-gnome/src/config/assistant.c:330 +#: ../sflphone-client-gnome/src/config/assistant.c:443 msgid "_User name" msgstr "使用者名稱(U)" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:234 -#: ../sflphone-client-gnome/src/config/assistant.c:326 -#: ../sflphone-client-gnome/src/config/assistant.c:433 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:250 +#: ../sflphone-client-gnome/src/config/assistant.c:346 +#: ../sflphone-client-gnome/src/config/assistant.c:458 msgid "_Password" msgstr "密碼(P)" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:254 -#: ../sflphone-client-gnome/src/config/assistant.c:344 -#: ../sflphone-client-gnome/src/config/assistant.c:449 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:270 +#: ../sflphone-client-gnome/src/config/assistant.c:363 +#: ../sflphone-client-gnome/src/config/assistant.c:473 +msgid "Show password" +msgstr "密碼" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:274 +#: ../sflphone-client-gnome/src/config/assistant.c:368 +#: ../sflphone-client-gnome/src/config/assistant.c:478 msgid "_Voicemail number" msgstr "語音郵箱(V)" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:340 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:361 msgid "Authentication" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:341 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:362 msgid "Secret" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:466 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:605 msgid "Credential" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:501 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:640 msgid "Authentication name" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:512 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:651 msgid "Password" msgstr "密碼" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:535 -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:909 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:201 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:674 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1056 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:321 msgid "Security" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:547 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:213 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:687 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:333 msgid "Use TLS transport (sips)" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:552 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:218 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:693 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:338 msgid "SRTP key exchange" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:558 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:224 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:699 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:344 msgid "Disabled" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:674 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:795 msgid "Registration" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:679 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:800 msgid "Registration expire" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:687 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:809 msgid "_Comply with RFC 3263" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:693 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:463 -msgid "Network" -msgstr "" +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:816 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:234 +msgid "Network Interface" +msgstr "網路連線失敗" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:707 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:830 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:249 msgid "Local address" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:744 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:880 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:301 msgid "Local port" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:752 -msgid "Set published address and port:" +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:893 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:928 +msgid "Published address" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:756 -msgid "Using STUN " +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:899 +msgid "Using STUN" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:761 -msgid "Same as local parameters" +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:906 +msgid "STUN server URL" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:764 -msgid "Manually" +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:914 +msgid "Same as local parameters" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:769 -msgid "Published address" +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:917 +msgid "Set published address and port:" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:777 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:936 msgid "Published port" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:785 -msgid "STUN server URL" -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:880 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1027 msgid "Account settings" msgstr "帳戶設置" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:899 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1046 msgid "Basic" msgstr "" -#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:904 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1051 msgid "Advanced" msgstr "" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:169 -msgid "Server returned \"" +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:164 +#, c-format +msgid "Server returned \"%s\" (%d)" msgstr "" #: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:389 @@ -486,32 +676,18 @@ msgstr "帳戶" msgid "Configured Accounts" msgstr "已配置帳戶" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:505 -msgid "There " -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:506 -msgid "is " -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:506 -msgid "are " -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:508 -msgid " active account" -msgstr "" - -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:509 -msgid "s" -msgstr "" +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:501 +#, c-format +msgid "There is %d active account" +msgid_plural "There are %d active accounts" +msgstr[0] "" -#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:514 +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:507 msgid "You have no active account" msgstr "" #: ../sflphone-client-gnome/src/config/addressbook-config.c:306 -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:443 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:556 msgid "General" msgstr "常用配置" @@ -556,225 +732,220 @@ msgid "Select which Evolution address books to use" msgstr "選擇使用如下Evolution地址薄" #: ../sflphone-client-gnome/src/config/addressbook-config.c:404 -#: ../sflphone-client-gnome/src/config/audioconf.c:578 +#: ../sflphone-client-gnome/src/config/audioconf.c:577 msgid "Name" msgstr "名稱" -#: ../sflphone-client-gnome/src/config/assistant.c:69 +#: ../sflphone-client-gnome/src/config/assistant.c:75 #, c-format msgid "This assistant is now finished." msgstr "配置完成." -#: ../sflphone-client-gnome/src/config/assistant.c:71 +#: ../sflphone-client-gnome/src/config/assistant.c:77 msgid "" "You can at any time check your registration state or modify your accounts " "parameters in the Options/Accounts window." msgstr "你可以隨時在 選項/帳戶 中查看註冊狀態或者修改帳戶信息." -#: ../sflphone-client-gnome/src/config/assistant.c:74 +#: ../sflphone-client-gnome/src/config/assistant.c:80 msgid "Alias" msgstr "別稱" -#: ../sflphone-client-gnome/src/config/assistant.c:78 +#: ../sflphone-client-gnome/src/config/assistant.c:84 msgid "Server" msgstr "伺服器" -#: ../sflphone-client-gnome/src/config/assistant.c:82 +#: ../sflphone-client-gnome/src/config/assistant.c:88 msgid "Username" msgstr "使用者名稱" -#: ../sflphone-client-gnome/src/config/assistant.c:86 +#: ../sflphone-client-gnome/src/config/assistant.c:92 msgid "Security: " msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:88 +#: ../sflphone-client-gnome/src/config/assistant.c:94 msgid "SRTP/ZRTP draft-zimmermann" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:90 -#: ../sflphone-client-gnome/src/config/assistant.c:182 +#: ../sflphone-client-gnome/src/config/assistant.c:96 msgid "None" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:210 +#: ../sflphone-client-gnome/src/config/assistant.c:229 msgid "SFLphone account creation wizard" msgstr "SFLphone賬戶創建嚮導" -#: ../sflphone-client-gnome/src/config/assistant.c:236 +#: ../sflphone-client-gnome/src/config/assistant.c:255 msgid "Welcome to the Account creation wizard of SFLphone!" msgstr "歡迎使用SFLphone帳戶創建嚮導!" -#: ../sflphone-client-gnome/src/config/assistant.c:237 +#: ../sflphone-client-gnome/src/config/assistant.c:256 msgid "This installation wizard will help you configure an account." msgstr "安裝向導將幫助您配置帳戶" -#: ../sflphone-client-gnome/src/config/assistant.c:251 +#: ../sflphone-client-gnome/src/config/assistant.c:270 msgid "VoIP Protocols" msgstr "VoIP協議" -#: ../sflphone-client-gnome/src/config/assistant.c:251 +#: ../sflphone-client-gnome/src/config/assistant.c:270 msgid "Select an account type" msgstr "選擇帳戶類型" -#: ../sflphone-client-gnome/src/config/assistant.c:253 +#: ../sflphone-client-gnome/src/config/assistant.c:272 msgid "SIP (Session Initiation Protocol)" msgstr "SIP(會話初始化協議)" -#: ../sflphone-client-gnome/src/config/assistant.c:255 +#: ../sflphone-client-gnome/src/config/assistant.c:274 msgid "IAX2 (InterAsterix Exchange)" msgstr "IAX2(Asterisk內部交換協議)" -#: ../sflphone-client-gnome/src/config/assistant.c:269 +#: ../sflphone-client-gnome/src/config/assistant.c:288 msgid "Account" msgstr "帳戶" -#: ../sflphone-client-gnome/src/config/assistant.c:269 +#: ../sflphone-client-gnome/src/config/assistant.c:288 msgid "Please select one of the following options" msgstr "請選擇以下選項中的一個" -#: ../sflphone-client-gnome/src/config/assistant.c:271 +#: ../sflphone-client-gnome/src/config/assistant.c:290 msgid "Create a free SIP/IAX2 account on sflphone.org" msgstr "在sflphone.org上創建免費的SIP/IAX2帳戶" -#: ../sflphone-client-gnome/src/config/assistant.c:273 +#: ../sflphone-client-gnome/src/config/assistant.c:292 msgid "Register an existing SIP or IAX2 account" msgstr "註冊已存在的SIP或IAX2帳戶" -#: ../sflphone-client-gnome/src/config/assistant.c:286 +#: ../sflphone-client-gnome/src/config/assistant.c:306 msgid "SIP account settings" msgstr "SIP帳戶配置" -#: ../sflphone-client-gnome/src/config/assistant.c:286 -#: ../sflphone-client-gnome/src/config/assistant.c:394 +#: ../sflphone-client-gnome/src/config/assistant.c:306 +#: ../sflphone-client-gnome/src/config/assistant.c:419 msgid "Please fill the following information" msgstr "請填寫如下信息" -#: ../sflphone-client-gnome/src/config/assistant.c:352 -#: ../sflphone-client-gnome/src/config/assistant.c:381 +#: ../sflphone-client-gnome/src/config/assistant.c:376 +#: ../sflphone-client-gnome/src/config/assistant.c:405 msgid "Secure communications with _ZRTP" msgstr "" -#: ../sflphone-client-gnome/src/config/assistant.c:365 +#: ../sflphone-client-gnome/src/config/assistant.c:389 msgid "Optional email address" msgstr "可選郵件地址" -#: ../sflphone-client-gnome/src/config/assistant.c:365 +#: ../sflphone-client-gnome/src/config/assistant.c:389 msgid "This email address will be used to send your voicemail messages." msgstr "這個郵件地址將被用來發送您的語音" -#: ../sflphone-client-gnome/src/config/assistant.c:373 +#: ../sflphone-client-gnome/src/config/assistant.c:397 msgid "_Email address" msgstr "郵件地址(E)" -#: ../sflphone-client-gnome/src/config/assistant.c:394 +#: ../sflphone-client-gnome/src/config/assistant.c:419 msgid "IAX2 account settings" msgstr "IAX2帳戶配置" -#: ../sflphone-client-gnome/src/config/assistant.c:467 +#: ../sflphone-client-gnome/src/config/assistant.c:496 msgid "Network Address Translation (NAT)" msgstr "网络地址解析(NAT)" -#: ../sflphone-client-gnome/src/config/assistant.c:467 +#: ../sflphone-client-gnome/src/config/assistant.c:496 msgid "You should probably enable this if you are behind a firewall." msgstr "如果你使用網路防火牆,你很有可能需要設定該項." -#: ../sflphone-client-gnome/src/config/assistant.c:476 +#: ../sflphone-client-gnome/src/config/assistant.c:505 msgid "E_nable STUN" msgstr "啟用STUN(n)" -#: ../sflphone-client-gnome/src/config/assistant.c:483 +#: ../sflphone-client-gnome/src/config/assistant.c:512 msgid "_STUN server" msgstr "STUN伺服器(S)" -#: ../sflphone-client-gnome/src/config/assistant.c:497 +#: ../sflphone-client-gnome/src/config/assistant.c:526 msgid "Account Registration" msgstr "帳戶註冊" -#: ../sflphone-client-gnome/src/config/assistant.c:497 +#: ../sflphone-client-gnome/src/config/assistant.c:526 msgid "Congratulations!" msgstr "恭喜!" -#: ../sflphone-client-gnome/src/config/audioconf.c:583 +#: ../sflphone-client-gnome/src/config/audioconf.c:582 msgid "Frequency" msgstr "顰律" -#: ../sflphone-client-gnome/src/config/audioconf.c:588 +#: ../sflphone-client-gnome/src/config/audioconf.c:587 msgid "Bitrate" msgstr "比率" -#: ../sflphone-client-gnome/src/config/audioconf.c:593 +#: ../sflphone-client-gnome/src/config/audioconf.c:592 msgid "Bandwidth" msgstr "顰寬" -#: ../sflphone-client-gnome/src/config/audioconf.c:673 +#: ../sflphone-client-gnome/src/config/audioconf.c:670 msgid "ALSA plugin" msgstr "ALSA插件" -#: ../sflphone-client-gnome/src/config/audioconf.c:695 +#: ../sflphone-client-gnome/src/config/audioconf.c:692 msgid "Output" msgstr "輸出" -#: ../sflphone-client-gnome/src/config/audioconf.c:717 +#: ../sflphone-client-gnome/src/config/audioconf.c:714 msgid "Input" msgstr "輸入" -#: ../sflphone-client-gnome/src/config/audioconf.c:752 +#: ../sflphone-client-gnome/src/config/audioconf.c:749 msgid "_Voice Activity Detection" msgstr "聲音狀態檢測(V)" -#: ../sflphone-client-gnome/src/config/audioconf.c:762 +#: ../sflphone-client-gnome/src/config/audioconf.c:759 msgid "_Noise Reduction (Narrow-Band Companding)" msgstr "降噪處理-窄頻壓縮(N)" -#: ../sflphone-client-gnome/src/config/audioconf.c:798 +#: ../sflphone-client-gnome/src/config/audioconf.c:800 msgid "Sound Manager" msgstr "聲音管理器" -#: ../sflphone-client-gnome/src/config/audioconf.c:807 +#: ../sflphone-client-gnome/src/config/audioconf.c:809 msgid "_Pulseaudio" msgstr "Pulseaudio" -#: ../sflphone-client-gnome/src/config/audioconf.c:811 +#: ../sflphone-client-gnome/src/config/audioconf.c:813 msgid "_ALSA" msgstr "ALSA" -#: ../sflphone-client-gnome/src/config/audioconf.c:816 -msgid "_Mute other applications during a call" -msgstr "當有來電時靜音其它應用程序(c)" - -#: ../sflphone-client-gnome/src/config/audioconf.c:823 +#: ../sflphone-client-gnome/src/config/audioconf.c:819 msgid "ALSA settings" msgstr "ALSA 配置" -#: ../sflphone-client-gnome/src/config/audioconf.c:840 +#: ../sflphone-client-gnome/src/config/audioconf.c:836 msgid "Codecs" msgstr "編碼" -#: ../sflphone-client-gnome/src/config/audioconf.c:869 +#: ../sflphone-client-gnome/src/config/audioconf.c:865 msgid "Recordings" msgstr "記錄" -#: ../sflphone-client-gnome/src/config/audioconf.c:873 +#: ../sflphone-client-gnome/src/config/audioconf.c:869 msgid "Destination folder" msgstr "目標文件夾" -#: ../sflphone-client-gnome/src/config/audioconf.c:877 +#: ../sflphone-client-gnome/src/config/audioconf.c:873 msgid "Select a folder" msgstr "選擇文件夾" -#: ../sflphone-client-gnome/src/config/audioconf.c:883 +#: ../sflphone-client-gnome/src/config/audioconf.c:879 msgid "Ringtones" msgstr "鈴聲" -#: ../sflphone-client-gnome/src/config/audioconf.c:889 +#: ../sflphone-client-gnome/src/config/audioconf.c:885 msgid "_Enable ringtones" msgstr "啟動鈴聲(E)" -#: ../sflphone-client-gnome/src/config/audioconf.c:895 +#: ../sflphone-client-gnome/src/config/audioconf.c:891 msgid "Choose a ringtone" msgstr "鈴聲選擇" -#: ../sflphone-client-gnome/src/config/audioconf.c:901 +#: ../sflphone-client-gnome/src/config/audioconf.c:897 msgid "Audio Files" msgstr "音訊檔案" @@ -811,86 +982,66 @@ msgstr "重設電話號碼" msgid "_Prefix dialed numbers with" msgstr "號碼前綴(P)" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:195 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:225 msgid "" "This profile is used when you want to reach a remote peer simply by typing a " "sip URI such as <b>sip:remotepeer</b>. The settings you define here will " "also be used if no account can be matched to an incoming or outgoing call." msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:274 -msgid "SIP Port" -msgstr "SIP端口" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:281 -msgid "UDP Transport" -msgstr "" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:319 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:440 msgid "Desktop Notifications" msgstr "桌面提示" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:323 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:444 msgid "_Enable notifications" msgstr "啟動提示(E)" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:329 -msgid "Enable voicemail _notifications" -msgstr "啟用語音郵箱提示(n)" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:341 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:450 msgid "System Tray Icon" msgstr "系統托盤圖標" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:344 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:453 msgid "_Popup main window on incoming call" msgstr "來電話時彈出主視窗(P)" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:349 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:457 msgid "Ne_ver popup main window" msgstr "從不彈出主視窗(v)" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:353 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:463 msgid "Hide SFLphone window on _startup" msgstr "在啟動時隱藏SFLphone主窗口" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:359 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:469 msgid "Calls History" msgstr "打電話歷史" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:362 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:472 msgid "_Keep my history for at least" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:373 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:483 msgid "days" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:377 -msgid "Configuration File" -msgstr "" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:379 -msgid "Store SIP credentials as MD5 hash" -msgstr "" - -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:423 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:536 msgid "Preferences" msgstr "屬性" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:448 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:561 msgid "Audio" msgstr "" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:453 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:566 msgid "Address Book" msgstr "地址簿" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:458 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:571 msgid "Hooks" msgstr "鉤鍵" -#: ../sflphone-client-gnome/src/config/preferencesdialog.c:468 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:581 msgid "Direct IP calls" msgstr "" @@ -898,11 +1049,11 @@ msgstr "" msgid "Advanced options for TLS" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:55 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:56 msgid "TLS transport" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:59 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:60 msgid "" "TLS transport can be used along with UDP for those calls that would\n" "require secure sip transactions (aka SIPS). You can configure a different\n" @@ -911,55 +1062,55 @@ msgid "" "port, different one from each other\n" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:100 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:103 msgid "Certificate of Authority list" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:104 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:107 msgid "Choose a CA list file (optional)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:115 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:131 msgid "Public endpoint certificate file" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:119 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:135 msgid "Choose a public endpoint certificate (optional)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:134 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:159 msgid "Choose a private key file (optional)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:145 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:181 msgid "Password for the private key" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:168 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:204 msgid "TLS protocol method" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:202 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:238 msgid "TLS cipher list" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:211 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:247 msgid "Server name instance for outgoing TLS connection" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:219 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:255 msgid "Negotiation timeout (sec:msec)" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:236 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:272 msgid "Verify incoming certificates, as a server" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:242 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:278 msgid "Verify certificates from answer, as a client" msgstr "" -#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:248 +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:284 msgid "Require certificate for incoming tls connections" msgstr "" @@ -967,45 +1118,60 @@ msgstr "" msgid "ZRTP Options" msgstr "" -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:68 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:69 msgid "Send Hello Hash in S_DP" msgstr "" -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:74 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:75 msgid "Ask User to Confirm SAS" msgstr "" -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:80 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:81 msgid "_Warn if ZRTP not supported" msgstr "" -#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:86 +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:87 msgid "Display SAS once for hold events" msgstr "" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:56 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:58 msgid "Search all" msgstr "查詢所有" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:57 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:70 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:82 -#: ../sflphone-client-gnome/src/contacts/searchbar.c:94 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:59 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:72 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:84 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:96 msgid "Click here to change the search type" msgstr "請點擊此處改變查詢方式" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:69 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:71 msgid "Search by missed call" msgstr "從未接電話中查詢" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:81 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:83 msgid "Search by incoming call" msgstr "從來電中查詢" -#: ../sflphone-client-gnome/src/contacts/searchbar.c:93 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:95 msgid "Search by outgoing call" msgstr "從撥出電話中查詢" +#~ msgid "IP call - %s" +#~ msgstr "IP電話- %s" + +#~ msgid "Codec" +#~ msgstr "編碼" + +#~ msgid "_Mute other applications during a call" +#~ msgstr "當有來電時靜音其它應用程序(c)" + +#~ msgid "SIP Port" +#~ msgstr "SIP端口" + +#~ msgid "Enable voicemail _notifications" +#~ msgstr "啟用語音郵箱提示(n)" + #~ msgid "Account creation wizard" #~ msgstr "帳戶創建向導" @@ -1026,9 +1192,6 @@ msgstr "從撥出電話中查詢" #~ msgid "Default account" #~ msgstr "默認帳戶" -#~ msgid "Transfer to : " -#~ msgstr "轉給: " - #~ msgid "SFLphone KDE Client" #~ msgstr "SFLphone KDE客戶端" @@ -1041,21 +1204,12 @@ msgstr "從撥出電話中查詢" #~ msgid "Main screen" #~ msgstr "主屏幕" -#~ msgid "Call history" -#~ msgstr "呼叫記錄" - -#~ msgid "Address book" -#~ msgstr "地址簿" - #~ msgid "Configure SFLphone" #~ msgstr "配置SFLphone" #~ msgid "Display volume controls" #~ msgstr "顯示音量控制" -#~ msgid "Display dialpad" -#~ msgstr "顯示撥號鍵盤" - #~ msgid "Incoming call" #~ msgstr "來電" @@ -1080,9 +1234,6 @@ msgstr "從撥出電話中查詢" #~ msgid "Hold on" #~ msgstr "呼叫保持" -#~ msgid "Transfer" -#~ msgstr "轉接" - #~ msgid "Record" #~ msgstr "記錄" @@ -1101,29 +1252,32 @@ msgstr "從撥出電話中查詢" #~ msgid "" #~ "By default, when you place a call, sflphone will use the first account in " #~ "this list which is \"registered\". Change the order of the accounts using " -#~ "the \"Up\" and \"Down\" arrows. Enable/disable them by checking/unchecking " -#~ "them on the left of the item. Add or remove some with \"Plus\" and \"Sub\" " -#~ "buttons. Edit the selected account with the form on the right." +#~ "the \"Up\" and \"Down\" arrows. Enable/disable them by checking/" +#~ "unchecking them on the left of the item. Add or remove some with \"Plus\" " +#~ "and \"Sub\" buttons. Edit the selected account with the form on the right." #~ msgstr "" -#~ "在默認情況下,當你打電話時,sflphone會使用列表當中第一個已註冊的帳戶。使用箭頭\"上\"和\"下\"可以改變賬戶的順序。選擇賬戶名稱左邊的方框可以" -#~ "啟用帳戶,取消選擇則會禁用該賬戶。通過\"加\"\"減\"按鈕可以添加或刪除賬戶。點擊\"編輯\"按鈕可以改變賬戶的設置。" - -#~ msgid "Remove the selected account" -#~ msgstr "刪除所選賬戶" +#~ "在默認情況下,當你打電話時,sflphone會使用列表當中第一個已註冊的帳戶。使用" +#~ "箭頭\"上\"和\"下\"可以改變賬戶的順序。選擇賬戶名稱左邊的方框可以啟用帳戶," +#~ "取消選擇則會禁用該賬戶。通過\"加\"\"減\"按鈕可以添加或刪除賬戶。點擊\"編輯" +#~ "\"按鈕可以改變賬戶的設置。" #~ msgid "" -#~ "This button will remove the selected account in the list below. Be sure you " -#~ "really don't need it anymore. If you think you might use it again later, " -#~ "just uncheck it." -#~ msgstr "該按鈕會刪除列表中被選定的賬戶。請確認你的操作。如果你希望繼續使用某個賬戶,請取消對該賬戶的選擇" +#~ "This button will remove the selected account in the list below. Be sure " +#~ "you really don't need it anymore. If you think you might use it again " +#~ "later, just uncheck it." +#~ msgstr "" +#~ "該按鈕會刪除列表中被選定的賬戶。請確認你的操作。如果你希望繼續使用某個賬" +#~ "戶,請取消對該賬戶的選擇" #~ msgid "Remove" #~ msgstr "刪除" #~ msgid "" -#~ "This button enables you to initialize a new account. You will then be able " -#~ "to edit it using the form on the right." -#~ msgstr "通過該按鈕可以創建一個新賬戶。添加該賬戶之後你還可以通過編輯按鈕來修改設置。" +#~ "This button enables you to initialize a new account. You will then be " +#~ "able to edit it using the form on the right." +#~ msgstr "" +#~ "通過該按鈕可以創建一個新賬戶。添加該賬戶之後你還可以通過編輯按鈕來修改設" +#~ "置。" #~ msgid "Add" #~ msgstr "添加" @@ -1136,8 +1290,9 @@ msgstr "從撥出電話中查詢" #~ "this list which is \"registered\". Change the order of the accounts using " #~ "the \"Up\" and \"Down\" arrows." #~ msgstr "" -#~ "在默認情況下,當你打電話時,sflphone會使用列表當中第一個已註冊的帳戶。使用箭頭\"上\"和\"下\"可以改變賬戶的順序。選擇賬戶名稱左邊的方框可以" -#~ "啟用帳戶,取消選擇則會禁用該賬戶。通過\"加\"\"減\"按鈕可以添加或刪除賬戶。" +#~ "在默認情況下,當你打電話時,sflphone會使用列表當中第一個已註冊的帳戶。使用" +#~ "箭頭\"上\"和\"下\"可以改變賬戶的順序。選擇賬戶名稱左邊的方框可以啟用帳戶," +#~ "取消選擇則會禁用該賬戶。通過\"加\"\"減\"按鈕可以添加或刪除賬戶。" #~ msgid "Down" #~ msgstr "下" @@ -1220,9 +1375,6 @@ msgstr "從撥出電話中查詢" #~ msgid "On start" #~ msgstr "正在啟動" -#~ msgid "Clear history" -#~ msgstr "清空曆史記錄" - #~ msgid "Trigger on specific SIP header" #~ msgstr "激活指定的SIP頭" @@ -1238,33 +1390,9 @@ msgstr "從撥出電話中查詢" #~ msgid "Attention:number of results exceeds max displayed." #~ msgstr "注意:結果超過可顯示的最大值" -#~ msgid "_Help" -#~ msgstr "幫助(H)" - #~ msgid "_Account creation wizard" #~ msgstr "帳戶創建向導(A)" -#~ msgid "_Call" -#~ msgstr "電話" - -#~ msgid "Clear _history" -#~ msgstr "清空曆史記錄(C)" - -#~ msgid "_Accounts" -#~ msgstr "帳戶(A)" - -#~ msgid "_Edit" -#~ msgstr "編輯(E)" - -#~ msgid "_Volume controls" -#~ msgstr "音量控制(V)" - -#~ msgid "_View" -#~ msgstr "查看(V)" - -#~ msgid "History" -#~ msgstr "歷史" - #~ msgid "_Enable this account" #~ msgstr "啟用該賬戶(E)" @@ -1412,9 +1540,6 @@ msgstr "從撥出電話中查詢" #~ msgid "\"Voicemail\" <%s>" #~ msgstr "\"語音郵件\" <%s>" -#~ msgid "Off Hold" -#~ msgstr "恢复通話" - #~ msgid "Record a call" #~ msgstr "記錄通話" @@ -1570,12 +1695,12 @@ msgstr "從撥出電話中查詢" #~ msgctxt "NAME OF TRANSLATORS" #~ msgid "Your names" #~ msgstr "" -#~ "Yun Liu, ,Launchpad Contributions:,Yun Liu, ,Launchpad " -#~ "Contributions:,Emmanuel Milou,Yun Liu, ,Launchpad Contributions:,Emmanuel " -#~ "Milou,Yun Liu" +#~ "Yun Liu, ,Launchpad Contributions:,Yun Liu, ,Launchpad Contributions:," +#~ "Emmanuel Milou,Yun Liu, ,Launchpad Contributions:,Emmanuel Milou,Yun " +#~ "Liu, ,Launchpad Contributions:,Emmanuel Milou,Yun Liu" #~ msgctxt "EMAIL OF TRANSLATORS" #~ msgid "Your emails" #~ msgstr "" -#~ "yunliu2000@gmail.com,,,,,,emmanuel.milou@savoirfairelinux.com,,,,emmanuel.mil" -#~ "ou@savoirfairelinux.com," +#~ "yunliu2000@gmail.com,,,,,,emmanuel.milou@savoirfairelinux.com,,,,emmanuel." +#~ "milou@savoirfairelinux.com,,,,emmanuel.milou@savoirfairelinux.com," -- GitLab From a74d099103f72cc237ba39d562f7e233b98f3a5a Mon Sep 17 00:00:00 2001 From: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> Date: Thu, 3 Dec 2009 11:41:43 -0500 Subject: [PATCH 050/188] [#2402] make indent --- sflphone-common/src/audio/mainbuffer.cpp | 63 +++++++------- sflphone-common/src/conference.cpp | 2 +- sflphone-common/src/iax/iaxvoiplink.cpp | 2 +- sflphone-common/src/managerimpl.cpp | 15 ++-- sflphone-common/src/sip/sipvoiplink.cpp | 104 ++++++++++++----------- 5 files changed, 97 insertions(+), 89 deletions(-) diff --git a/sflphone-common/src/audio/mainbuffer.cpp b/sflphone-common/src/audio/mainbuffer.cpp index 46bec0f751..35c2470dec 100644 --- a/sflphone-common/src/audio/mainbuffer.cpp +++ b/sflphone-common/src/audio/mainbuffer.cpp @@ -79,7 +79,7 @@ bool MainBuffer::removeCallIDSet (CallID set_id) if (callid_set != NULL) { if (_callIDMap.erase (set_id) != 0) { - // _debug (" callid set %s erased!\n", set_id.c_str()); + // _debug (" callid set %s erased!\n", set_id.c_str()); return true; } else { _debug ("removeCallIDSet error while removing callid set %s!\n", set_id.c_str()); @@ -107,7 +107,7 @@ void MainBuffer::removeCallIDfromSet (CallID set_id, CallID call_id) if (callid_set != NULL) { if (callid_set->erase (call_id) != 0) { - // _debug (" callid %s erased from set %s!\n", call_id.c_str(), set_id.c_str()); + // _debug (" callid %s erased from set %s!\n", call_id.c_str(), set_id.c_str()); } else { _debug ("removeCallIDfromSet error while removing callid %s from set %s!\n", call_id.c_str(), set_id.c_str()); } @@ -147,7 +147,7 @@ bool MainBuffer::removeRingBuffer (CallID call_id) if (ring_buffer != NULL) { if (_ringBufferMap.erase (call_id) != 0) { - // _debug ("removeRingBuffer ringbuffer %s removed!\n", call_id.c_str()); + // _debug ("removeRingBuffer ringbuffer %s removed!\n", call_id.c_str()); return true; } else { _debug ("removeRingBuffer error while deleting ringbuffer %s!\n", call_id.c_str()); @@ -545,27 +545,28 @@ void MainBuffer::stateInfo() CallIDMap::iterator iter_call = _callIDMap.begin(); // print each call and bound call ids - while(iter_call != _callIDMap.end()) { - std::string dbg_str(" Call: "); - dbg_str.append(std::string(iter_call->first.c_str())); - dbg_str.append(std::string(" is bound to: ")); - - CallIDSet* call_id_set = (CallIDSet*)iter_call->second; + while (iter_call != _callIDMap.end()) { - CallIDSet::iterator iter_call_id = call_id_set->begin(); + std::string dbg_str (" Call: "); + dbg_str.append (std::string (iter_call->first.c_str())); + dbg_str.append (std::string (" is bound to: ")); - while (iter_call_id != call_id_set->end()) { + CallIDSet* call_id_set = (CallIDSet*) iter_call->second; - dbg_str.append (std::string (*iter_call_id)); - dbg_str.append (std::string (", ")); + CallIDSet::iterator iter_call_id = call_id_set->begin(); - iter_call_id++; - } + while (iter_call_id != call_id_set->end()) { - _debug ("%s\n", dbg_str.c_str()); + dbg_str.append (std::string (*iter_call_id)); + dbg_str.append (std::string (", ")); - iter_call++; + iter_call_id++; + } + + _debug ("%s\n", dbg_str.c_str()); + + iter_call++; } // Print ringbuffers ids and readpointers @@ -573,36 +574,36 @@ void MainBuffer::stateInfo() while (iter_buffer != _ringBufferMap.end()) { - RingBuffer* rbuffer = (RingBuffer*)iter_buffer->second; - ReadPointer* rpointer = NULL; + RingBuffer* rbuffer = (RingBuffer*) iter_buffer->second; + ReadPointer* rpointer = NULL; std::string dbg_str (" Buffer: "); dbg_str.append (std::string (iter_buffer->first.c_str())); dbg_str.append (std::string (" as read pointer: ")); - if(rbuffer) - rpointer = rbuffer->getReadPointerList(); + if (rbuffer) + rpointer = rbuffer->getReadPointerList(); + + if (rpointer) { - if(rpointer) { + ReadPointer::iterator iter_pointer = rpointer->begin(); - ReadPointer::iterator iter_pointer = rpointer->begin(); - - while(iter_pointer != rpointer->end()) { + while (iter_pointer != rpointer->end()) { - dbg_str.append (string (iter_pointer->first.c_str())); + dbg_str.append (string (iter_pointer->first.c_str())); dbg_str.append (string (", ")); - iter_pointer++; - } - } + iter_pointer++; + } + } - _debug ("%s\n", dbg_str.c_str()); + _debug ("%s\n", dbg_str.c_str()); iter_buffer++; } - + } diff --git a/sflphone-common/src/conference.cpp b/sflphone-common/src/conference.cpp index 4149e29caf..70e70d831e 100644 --- a/sflphone-common/src/conference.cpp +++ b/sflphone-common/src/conference.cpp @@ -100,7 +100,7 @@ void Conference::bindParticipant (CallID participant_id) if (participant_id != (*iter)) { - // _debug ("---- Conference:: bind callid %s with %s in conference add\n", participant_id.c_str(), (*iter).c_str()); + // _debug ("---- Conference:: bind callid %s with %s in conference add\n", participant_id.c_str(), (*iter).c_str()); Manager::instance().getAudioDriver()->getMainBuffer()->bindCallID (participant_id, *iter); } diff --git a/sflphone-common/src/iax/iaxvoiplink.cpp b/sflphone-common/src/iax/iaxvoiplink.cpp index b6377ea7f4..d6c3b4f17d 100644 --- a/sflphone-common/src/iax/iaxvoiplink.cpp +++ b/sflphone-common/src/iax/iaxvoiplink.cpp @@ -831,7 +831,7 @@ IAXVoIPLink::iaxHandleCallEvent (iax_event* event, IAXCall* call) Manager::instance().peerAnsweredCall (id); // start audio here? - audiolayer->startStream(); + audiolayer->startStream(); audiolayer->flushMain(); } else { // deja connecté ? diff --git a/sflphone-common/src/managerimpl.cpp b/sflphone-common/src/managerimpl.cpp index c97310af27..e8b7edaaa8 100644 --- a/sflphone-common/src/managerimpl.cpp +++ b/sflphone-common/src/managerimpl.cpp @@ -1246,8 +1246,8 @@ ManagerImpl::joinParticipant (const CallID& call_id1, const CallID& call_id2) // switchCall(conf->getConfID()); - if(_audiodriver) - _audiodriver->getMainBuffer()->stateInfo(); + if (_audiodriver) + _audiodriver->getMainBuffer()->stateInfo(); } @@ -1349,7 +1349,7 @@ ManagerImpl::removeParticipant (const CallID& call_id) } - if(_audiodriver) + if (_audiodriver) _audiodriver->getMainBuffer()->stateInfo(); } @@ -1498,7 +1498,7 @@ ManagerImpl::addStream (const CallID& call_id) } - if(_audiodriver) + if (_audiodriver) _audiodriver->getMainBuffer()->stateInfo(); } @@ -1513,7 +1513,7 @@ ManagerImpl::removeStream (const CallID& call_id) removeParticipant (call_id); } - if(_audiodriver) + if (_audiodriver) _audiodriver->getMainBuffer()->stateInfo(); } @@ -1546,10 +1546,11 @@ ManagerImpl::initRegisterAccounts() if (iter->second) { iter->second->loadConfig(); - // TODO: take off this protection by storing localIPAddress using interface name - setConfig(iter->second->getAccountID(), LOCAL_ADDRESS, "0.0.0.0"); + // TODO: take off this protection by storing localIPAddress using interface name + setConfig (iter->second->getAccountID(), LOCAL_ADDRESS, "0.0.0.0"); /* If the account is set as enabled, try to register */ + if (iter->second->isEnabled()) { status = iter->second->registerVoIPLink(); diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp index a712ae4636..3cf1daf653 100644 --- a/sflphone-common/src/sip/sipvoiplink.cpp +++ b/sflphone-common/src/sip/sipvoiplink.cpp @@ -682,15 +682,18 @@ SIPVoIPLink::newOutgoingCall (const CallID& id, const std::string& toUrl) call->setPeerNumber (toUri); - localAddr = account->getLocalAddress (); - if (localAddr == "0.0.0.0") - loadSIPLocalIP (&localAddr); + localAddr = account->getLocalAddress (); + + if (localAddr == "0.0.0.0") + loadSIPLocalIP (&localAddr); + setCallAudioLocal (call, localAddr); // May use the published address as well - account->isStunEnabled () ? addrSdp = account->getPublishedAddress () : addrSdp = account->getLocalAddress (); - if (addrSdp == "0.0.0.0") - loadSIPLocalIP (&addrSdp); + account->isStunEnabled () ? addrSdp = account->getPublishedAddress () : addrSdp = account->getLocalAddress (); + + if (addrSdp == "0.0.0.0") + loadSIPLocalIP (&addrSdp); try { _debug ("Creating new rtp session in newOutgoingCall\n"); @@ -946,7 +949,7 @@ int SIPVoIPLink::inv_session_reinvite (SIPCall *call, std::string direction) _debug ("! SIP Failure: unable to find local_sdp\n"); return !PJ_SUCCESS; } - + // Reinvite only if connected // Build the local SDP offer status = call->getLocalSDP()->create_initial_offer(); @@ -1460,10 +1463,11 @@ bool SIPVoIPLink::new_ip_to_ip_call (const CallID& id, const std::string& to) return !PJ_SUCCESS; } - // Set the local address - localAddress = account->getLocalAddress (); + // Set the local address + localAddress = account->getLocalAddress (); + // Set SDP parameters - Set to local or published address - account->isStunEnabled () ? addrSdp = account->getPublishedAddress () : addrSdp = account->getLocalAddress (); + account->isStunEnabled () ? addrSdp = account->getPublishedAddress () : addrSdp = account->getLocalAddress (); _debug ("new_ip_to_ip_call localAddress: %s\n", localAddress.c_str()); @@ -1472,9 +1476,9 @@ bool SIPVoIPLink::new_ip_to_ip_call (const CallID& id, const std::string& to) loadSIPLocalIP (&localAddress); } - if (addrSdp == "0.0.0.0") { - addrSdp = localAddress; - } + if (addrSdp == "0.0.0.0") { + addrSdp = localAddress; + } setCallAudioLocal (call, localAddress); @@ -1649,11 +1653,11 @@ pj_status_t SIPVoIPLink::enable_dns_srv_resolver (pjsip_endpoint *endpt, pj_dns_ } // Build the nameservers list needed by pjsip - if ((scount = dns_servers.size ()) <= 0) { - _debug("No server detected while fetching DNS information, stop dns resolution\n"); - return 0; + if ( (scount = dns_servers.size ()) <= 0) { + _debug ("No server detected while fetching DNS information, stop dns resolution\n"); + return 0; } - + pj_str_t nameservers[scount]; for (i = 0; i<scount; i++) { @@ -1970,8 +1974,8 @@ int SIPVoIPLink::createUDPServer (AccountID id) } else { // We are trying to initialize a UDP transport available for all local accounts and direct IP calls if (account->getLocalAddress () != "0.0.0.0") { - listeningAddress = account->getLocalAddress (); - } + listeningAddress = account->getLocalAddress (); + } listeningPort = account->getLocalPort (); } @@ -2033,8 +2037,8 @@ int SIPVoIPLink::createUDPServer (AccountID id) if (account == NULL) _localUDPTransport = transport; else { - account->setAccountTransport (transport); - } + account->setAccountTransport (transport); + } } _debug ("Transport initialized successfully on %s:%i\n", listeningAddress.c_str (), listeningPort); @@ -2856,35 +2860,34 @@ void call_on_forked (pjsip_inv_session *inv, pjsip_event *e) void call_on_tsx_changed (pjsip_inv_session *inv, pjsip_transaction *tsx, pjsip_event *e) { - _debug("call_on_tsx_changed to state %s\n", transactionStateMap[tsx->state]); + _debug ("call_on_tsx_changed to state %s\n", transactionStateMap[tsx->state]); if (tsx->role==PJSIP_ROLE_UAS && tsx->state==PJSIP_TSX_STATE_TRYING && - pjsip_method_cmp (&tsx->method, &pjsip_refer_method) ==0) { + pjsip_method_cmp (&tsx->method, &pjsip_refer_method) ==0) { /** Handle the refer method **/ onCallTransfered (inv, e->body.tsx_state.src.rdata); - } - else if (tsx->role==PJSIP_ROLE_UAS && tsx->state==PJSIP_TSX_STATE_TRYING) { + } else if (tsx->role==PJSIP_ROLE_UAS && tsx->state==PJSIP_TSX_STATE_TRYING) { - if (e && e->body.rx_msg.rdata) { + if (e && e->body.rx_msg.rdata) { - pjsip_tx_data* t_data; - pjsip_rx_data* r_data = e->body.rx_msg.rdata; + pjsip_tx_data* t_data; + pjsip_rx_data* r_data = e->body.rx_msg.rdata; - if(r_data->msg_info.msg->line.req.method.id == PJSIP_OTHER_METHOD) { + if (r_data->msg_info.msg->line.req.method.id == PJSIP_OTHER_METHOD) { - std::string method_name = "INFO"; - std::string request = r_data->msg_info.msg->line.req.method.name.ptr; + std::string method_name = "INFO"; + std::string request = r_data->msg_info.msg->line.req.method.name.ptr; - if (request.find (method_name) != (size_t)-1) { + if (request.find (method_name) != (size_t)-1) { - _debug("%s\n", pjsip_rx_data_get_info(r_data)); + _debug ("%s\n", pjsip_rx_data_get_info (r_data)); - pjsip_dlg_create_response (inv->dlg, r_data, PJSIP_SC_OK, NULL, &t_data); - - pjsip_dlg_send_response(inv->dlg, tsx, t_data); - } - } - } + pjsip_dlg_create_response (inv->dlg, r_data, PJSIP_SC_OK, NULL, &t_data); + + pjsip_dlg_send_response (inv->dlg, tsx, t_data); + } + } + } } } @@ -3121,7 +3124,7 @@ mod_on_rx_request (pjsip_rx_data *rdata) /************************************************************************************************/ - _debug("create a new call\n"); + _debug ("create a new call\n"); // Generate a new call ID for the incoming call! id = Manager::instance().getNewCallID(); @@ -3137,6 +3140,7 @@ mod_on_rx_request (pjsip_rx_data *rdata) std::string addrToUse, addrSdp ="0.0.0.0"; + pjsip_tpselector *tp; account = dynamic_cast<SIPAccount *> (Manager::instance().getAccount (account_id)); @@ -3144,12 +3148,12 @@ mod_on_rx_request (pjsip_rx_data *rdata) if (account != NULL) { // May use the published address as well - addrToUse = account->getLocalAddress (); - account->isStunEnabled () ? addrSdp = account->getPublishedAddress () : addrSdp = account->getLocalAddress (); - // Set the appropriate transport to have the right VIA header - link->init_transport_selector (account->getAccountTransport (), &tp); + addrToUse = account->getLocalAddress (); + account->isStunEnabled () ? addrSdp = account->getPublishedAddress () : addrSdp = account->getLocalAddress (); + // Set the appropriate transport to have the right VIA header + link->init_transport_selector (account->getAccountTransport (), &tp); } - + if (addrToUse == "0.0.0.0") { link->loadSIPLocalIP (&addrToUse); } @@ -3169,7 +3173,8 @@ mod_on_rx_request (pjsip_rx_data *rdata) // Notify UI there is an incoming call - _debug("Add call to account link\n"); + _debug ("Add call to account link\n"); + if (Manager::instance().incomingCall (call, account_id)) { // Add this call to the callAccountMap in ManagerImpl Manager::instance().getAccountLink (account_id)->addCall (call); @@ -3210,8 +3215,9 @@ mod_on_rx_request (pjsip_rx_data *rdata) // Specify media capability during invite session creation status = pjsip_inv_create_uas (dialog, rdata, call->getLocalSDP()->get_local_sdp_session(), 0, &inv); - // Explicitly set the transport - status = pjsip_dlg_set_transport (dialog, tp); + + // Explicitly set the transport + status = pjsip_dlg_set_transport (dialog, tp); PJ_ASSERT_RETURN (status == PJ_SUCCESS, 1); @@ -3768,7 +3774,7 @@ bool setCallAudioLocal (SIPCall* call, std::string localIP) if (account->isStunEnabled ()) { // If use Stun server callLocalExternAudioPort = account->getStunPort (); - //localIP = account->getPublishedAddress (); + //localIP = account->getPublishedAddress (); } _debug (" Setting local ip address: %s\n", localIP.c_str()); -- GitLab From 4e0edeefd98e092af8089adfc9d1da937b85b9d3 Mon Sep 17 00:00:00 2001 From: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> Date: Thu, 3 Dec 2009 11:44:43 -0500 Subject: [PATCH 051/188] [#2402] Add user documentation --- sflphone-client-gnome/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sflphone-client-gnome/Makefile.am b/sflphone-client-gnome/Makefile.am index e8c86ca078..47bb88964f 100644 --- a/sflphone-client-gnome/Makefile.am +++ b/sflphone-client-gnome/Makefile.am @@ -1,4 +1,4 @@ -SUBDIRS = src pixmaps tests man po +SUBDIRS = src pixmaps tests man po doc ACLOCAL_AMFLAGS = -I m4 -- GitLab From 3e48f48e2efbdf779111b916e45f17ce1e6b31df Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Thu, 3 Dec 2009 12:30:43 -0500 Subject: [PATCH 052/188] [#2519] Add debug info concerning sip transport used on sending/receiving requests --- sflphone-common/src/sip/sipvoiplink.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp index a712ae4636..050ea5c14c 100644 --- a/sflphone-common/src/sip/sipvoiplink.cpp +++ b/sflphone-common/src/sip/sipvoiplink.cpp @@ -613,6 +613,8 @@ int SIPVoIPLink::sendRegister (AccountID id) account->setRegistrationInfo (regc); + _debug("Sent account registration using transport: %s\n", account->getAccountTransport()->info); + return true; } @@ -1339,6 +1341,8 @@ SIPVoIPLink::SIPStartCall (SIPCall* call, const std::string& subject UNUSED) return false; } + _debug("Sent invite request using transport: %s\n", account->getAccountTransport()->info); + return true; } @@ -2018,7 +2022,7 @@ int SIPVoIPLink::createUDPServer (AccountID id) tpmgr = pjsip_endpt_get_tpmgr (_endpt); - _debug ("number of transport: %i\n", pjsip_tpmgr_get_transport_count (tpmgr)); + _debug ("Number of transport: %i\n", pjsip_tpmgr_get_transport_count (tpmgr)); pjsip_tpmgr_dump_transports (tpmgr); @@ -3148,6 +3152,8 @@ mod_on_rx_request (pjsip_rx_data *rdata) account->isStunEnabled () ? addrSdp = account->getPublishedAddress () : addrSdp = account->getLocalAddress (); // Set the appropriate transport to have the right VIA header link->init_transport_selector (account->getAccountTransport (), &tp); + + _debug("Answer invite request using transport: %s\n", account->getAccountTransport()->info); } if (addrToUse == "0.0.0.0") { -- GitLab From 18700e6af5b3e65c5d1b5bc3631317418f61d5ae Mon Sep 17 00:00:00 2001 From: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> Date: Thu, 3 Dec 2009 12:39:33 -0500 Subject: [PATCH 053/188] [#1060] Oups ... add danish translation for real --- sflphone-client-gnome/po/da/da.po | 1215 +++++++++++++++++++++++++++++ 1 file changed, 1215 insertions(+) create mode 100644 sflphone-client-gnome/po/da/da.po diff --git a/sflphone-client-gnome/po/da/da.po b/sflphone-client-gnome/po/da/da.po new file mode 100644 index 0000000000..1c011969ac --- /dev/null +++ b/sflphone-client-gnome/po/da/da.po @@ -0,0 +1,1215 @@ +# Danish translation for sflphone +# Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 +# This file is distributed under the same license as the sflphone package. +# FIRST AUTHOR <EMAIL@ADDRESS>, 2009. +# +msgid "" +msgstr "" +"Project-Id-Version: sflphone\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-12-03 10:22-0500\n" +"PO-Revision-Date: 2009-11-03 03:52+0000\n" +"Last-Translator: Jonas Fonseca <fonseca@diku.dk>\n" +"Language-Team: Danish <da@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Launchpad-Export-Date: 2009-12-03 15:32+0000\n" +"X-Generator: Launchpad (build Unknown)\n" + +#: ../sflphone-client-gnome/src/accountlist.c:175 +msgid "Registered" +msgstr "Registreret" + +#: ../sflphone-client-gnome/src/accountlist.c:178 +msgid "Not Registered" +msgstr "Ikke registreret" + +#: ../sflphone-client-gnome/src/accountlist.c:181 +msgid "Trying..." +msgstr "Forsøger..." + +#: ../sflphone-client-gnome/src/accountlist.c:184 +#: ../sflphone-client-gnome/src/sflnotify.c:131 +#: ../sflphone-client-gnome/src/sflnotify.c:148 +msgid "Error" +msgstr "Fejl" + +#: ../sflphone-client-gnome/src/accountlist.c:187 +msgid "Authentication Failed" +msgstr "Godkendelse mislykkedes" + +#: ../sflphone-client-gnome/src/accountlist.c:190 +msgid "Network unreachable" +msgstr "Netværk kan ikke nås" + +#: ../sflphone-client-gnome/src/accountlist.c:193 +msgid "Host unreachable" +msgstr "Vært kan ikke nås" + +#: ../sflphone-client-gnome/src/accountlist.c:196 +msgid "Stun configuration error" +msgstr "Stun konfigureringsfejl" + +#: ../sflphone-client-gnome/src/accountlist.c:199 +msgid "Stun server invalid" +msgstr "Stun server ugyldig" + +#: ../sflphone-client-gnome/src/accountlist.c:202 +msgid "Invalid" +msgstr "Ugyldig" + +#: ../sflphone-client-gnome/src/actions.c:98 +msgid "Using account" +msgstr "Benytter konto" + +#: ../sflphone-client-gnome/src/actions.c:104 +msgid "No registered accounts" +msgstr "Ingen registrerede konti" + +#: ../sflphone-client-gnome/src/actions.c:285 +msgid "" +"Unable to connect to the SFLphone server.\n" +"Make sure the daemon is running." +msgstr "" +"Forbindelse til SFLphone serveren kan ikke oprettes.\n" +"Sørg for at server-dæmonen kører." + +#: ../sflphone-client-gnome/src/actions.c:589 +#: ../sflphone-client-gnome/src/actions.c:911 +msgid "Direct SIP call" +msgstr "Direkte IP opkald" + +#: ../sflphone-client-gnome/src/actions.c:1103 +#, c-format +msgid "" +"<b>Error: No audio codecs found.\n" +"\n" +"</b> SFL audio codecs have to be placed in <i>%s</i> or in the <b>.sflphone</" +"b> directory in your home( <i>%s</i> )" +msgstr "" +"<b>Fejl: Ingen audio-codec fundet\n" +"\n" +"</b>SFL audio-codecs skal installeres i <i>%s</i> eller i mappen <b>." +"sflphone</b> i dit hjemmekatalog (<i>%s</i>)" + +#: ../sflphone-client-gnome/src/errors.c:29 +msgid "" +"ALSA notification\n" +"\n" +"Error while opening playback device" +msgstr "" +"ALSA meddelelse\n" +"\n" +"Fejl opstod mens afspilningsenhed blev åbnet" + +#: ../sflphone-client-gnome/src/errors.c:32 +msgid "" +"ALSA notification\n" +"\n" +"Error while opening capture device" +msgstr "" +"ALSA meddelelse\n" +"\n" +"Fejl opstod mens optageenhed blev åbnet" + +#: ../sflphone-client-gnome/src/errors.c:35 +msgid "" +"Pulseaudio notification\n" +"\n" +"Pulseaudio is not running" +msgstr "" +"PulseAudio meddelelse\n" +"\n" +"PulseAudio er tilgængelig" + +#: ../sflphone-client-gnome/src/mainwindow.c:73 +msgid "There is one call in progress." +msgstr "Et igangværende opkald eksisterer" + +#: ../sflphone-client-gnome/src/mainwindow.c:77 +msgid "There are calls in progress." +msgstr "Igangværende opkald eksisterer" + +#: ../sflphone-client-gnome/src/mainwindow.c:86 +msgid "Do you still want to quit?" +msgstr "Ønsker du stadig at afslutte" + +#: ../sflphone-client-gnome/src/mainwindow.c:298 +msgid "SFLphone Error" +msgstr "SFLphone fejl" + +#: ../sflphone-client-gnome/src/mainwindow.c:392 +#, c-format +msgid "ZRTP is not supported by peer %s\n" +msgstr "ZRTP er ikke understøttet af modtageren %s\n" + +#: ../sflphone-client-gnome/src/mainwindow.c:393 +msgid "Secure Communication Unavailable" +msgstr "Sikker kommunikation ikke tilgængelig" + +#: ../sflphone-client-gnome/src/mainwindow.c:394 +#: ../sflphone-client-gnome/src/mainwindow.c:416 +msgid "Continue" +msgstr "Fortsæt" + +#: ../sflphone-client-gnome/src/mainwindow.c:395 +#: ../sflphone-client-gnome/src/mainwindow.c:417 +#: ../sflphone-client-gnome/src/mainwindow.c:431 +msgid "Stop Call" +msgstr "Afslut opkald" + +#: ../sflphone-client-gnome/src/mainwindow.c:414 +#, c-format +msgid "" +"A %s error forced the call with %s to fall under unencrypted mode.\n" +"Exact reason: %s\n" +msgstr "" +"En \"%s\"-fejl medførte at opkaldet til %s blev ændret til ukrypteret " +"tilstand.\n" +"Den præcise årsag: %s\n" + +#: ../sflphone-client-gnome/src/mainwindow.c:415 +msgid "ZRTP negotiation failed" +msgstr "ZRTP-forhandling mislykkedes" + +#: ../sflphone-client-gnome/src/mainwindow.c:428 +#, c-format +msgid "" +"%s wants to stop using secure communication. Confirm will resume " +"conversation without SRTP.\n" +msgstr "" +"%s ønsker at afslutte brugen af sikker kommunikation. Ved at godkende vil " +"samtalen fortætte uden SRTP\n" + +#: ../sflphone-client-gnome/src/mainwindow.c:429 +msgid "Confirm Go Clear" +msgstr "Godkend sikkerhedsændring" + +#: ../sflphone-client-gnome/src/mainwindow.c:430 +msgid "Confirm" +msgstr "Godkend" + +#: ../sflphone-client-gnome/src/sflnotify.c:71 +#: ../sflphone-client-gnome/src/sflnotify.c:91 +#, c-format +msgid "%s account : %s" +msgstr "%s konto : %s" + +#: ../sflphone-client-gnome/src/sflnotify.c:75 +#, c-format +msgid "<i>From</i> %s" +msgstr "<i>Fra</i> %s" + +#: ../sflphone-client-gnome/src/sflnotify.c:94 +#, c-format +msgid "%d voice mail" +msgid_plural "%d voice mails" +msgstr[0] "%d indtalt besked" +msgstr[1] "%d indtalte beskeder" + +#: ../sflphone-client-gnome/src/sflnotify.c:111 +#, c-format +msgid "Calling with %s account <i>%s</i>" +msgstr "Kalder op med %s konto <i>%s</i>" + +#: ../sflphone-client-gnome/src/sflnotify.c:115 +msgid "Current account" +msgstr "Nuværende konto" + +#: ../sflphone-client-gnome/src/sflnotify.c:130 +msgid "You have no accounts set up" +msgstr "Du har ingen oprettede konti" + +#: ../sflphone-client-gnome/src/sflnotify.c:147 +msgid "You have no registered accounts" +msgstr "Du har ingen registrerede konti" + +#: ../sflphone-client-gnome/src/sflnotify.c:190 +#, c-format +msgid "" +"<i>With:</i> %s \n" +"using %s" +msgstr "" +"<i>Med:</i> %s \n" +"benyttende %s" + +#: ../sflphone-client-gnome/src/sflnotify.c:205 +#, c-format +msgid "%s does not support ZRTP." +msgstr "%s understøtter ikke ZRTP." + +#: ../sflphone-client-gnome/src/sflnotify.c:220 +#, c-format +msgid "ZRTP negotiation failed with %s" +msgstr "ZRTP forhandling mislykkedes med %s" + +#: ../sflphone-client-gnome/src/sflnotify.c:235 +#, c-format +msgid "<i>With:</i> %s" +msgstr "<i>Med:</i> %s" + +#: ../sflphone-client-gnome/src/sliders.c:162 +msgid "Speakers volume" +msgstr "Højtaler lydstyrke" + +#: ../sflphone-client-gnome/src/sliders.c:164 +msgid "Mic volume" +msgstr "Mikrofon lydstyrke" + +#: ../sflphone-client-gnome/src/statusicon.c:96 +msgid "_Show main window" +msgstr "_Vis hovedvindue" + +#: ../sflphone-client-gnome/src/statusicon.c:131 +msgid "SFLphone" +msgstr "SFLphone" + +#: ../sflphone-client-gnome/src/statusicon.c:132 +#, c-format +msgid "%i account configured" +msgid_plural "%i accounts configured" +msgstr[0] "%i konto oprettet" +msgstr[1] "%i konti oprettet" + +#: ../sflphone-client-gnome/src/toolbar.c:38 +#: ../sflphone-client-gnome/src/uimanager.c:693 +#: ../sflphone-client-gnome/src/uimanager.c:727 +msgid "Voicemail" +msgstr "Talebesked" + +#: ../sflphone-client-gnome/src/uimanager.c:117 +msgid "No address book selected" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:137 +#: ../sflphone-client-gnome/src/uimanager.c:756 +msgid "Address book" +msgstr "Adressebog" + +#: ../sflphone-client-gnome/src/uimanager.c:279 +msgid "Voicemail (%i)" +msgstr "Talebesked" + +#: ../sflphone-client-gnome/src/uimanager.c:342 +msgid "SFLphone is a VoIP client compatible with SIP and IAX2 protocols." +msgstr "SFLphone er en VoIP-klient kompatibel med SIP og IAX2 protokoller" + +#: ../sflphone-client-gnome/src/uimanager.c:345 +msgid "About SFLphone" +msgstr "Om SFLphone" + +#: ../sflphone-client-gnome/src/uimanager.c:719 +msgid "Call" +msgstr "Afslut opkald" + +#: ../sflphone-client-gnome/src/uimanager.c:720 +#: ../sflphone-client-gnome/src/uimanager.c:1184 +msgid "_New call" +msgstr "_Nyt opkald" + +#: ../sflphone-client-gnome/src/uimanager.c:720 +msgid "Place a new call" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:721 +#: ../sflphone-client-gnome/src/uimanager.c:979 +msgid "_Pick up" +msgstr "_Svar" + +#: ../sflphone-client-gnome/src/uimanager.c:721 +msgid "Answer the call" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:722 +#: ../sflphone-client-gnome/src/uimanager.c:991 +#: ../sflphone-client-gnome/src/uimanager.c:1032 +msgid "_Hang up" +msgstr "_Læg på" + +#: ../sflphone-client-gnome/src/uimanager.c:722 +msgid "Finish the call" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:723 +msgid "O_n hold" +msgstr "I _venteposition" + +#: ../sflphone-client-gnome/src/uimanager.c:723 +msgid "Place the call on hold" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:724 +msgid "O_ff hold" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:724 +msgid "Place the call off hold" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:725 +#: ../sflphone-client-gnome/src/uimanager.c:1015 +msgid "_Record" +msgstr "_Optag" + +#: ../sflphone-client-gnome/src/uimanager.c:725 +msgid "Record the current conversation" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:726 +msgid "Configuration _Assistant" +msgstr "Konfigurationsfil" + +#: ../sflphone-client-gnome/src/uimanager.c:726 +msgid "Run the configuration assistant" +msgstr "Stun konfigureringsfejl" + +#: ../sflphone-client-gnome/src/uimanager.c:727 +msgid "Call your voicemail" +msgstr "%d indtalt besked" + +#: ../sflphone-client-gnome/src/uimanager.c:728 +msgid "_Close" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:728 +msgid "Minimize to system tray" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:729 +msgid "_Quit" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:729 +msgid "Quit the program" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:732 +msgid "_Edit" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:733 +msgid "_Copy" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:733 +msgid "Copy the selection" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:734 +msgid "_Paste" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:734 +msgid "Paste the clipboard" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:735 +msgid "Clear _history" +msgstr "Opkaldshistorik" + +#: ../sflphone-client-gnome/src/uimanager.c:735 +msgid "Clear the call history" +msgstr "Opkaldshistorik" + +#: ../sflphone-client-gnome/src/uimanager.c:736 +msgid "_Accounts" +msgstr "Konti" + +#: ../sflphone-client-gnome/src/uimanager.c:736 +msgid "Edit your accounts" +msgstr "Nuværende konto" + +#: ../sflphone-client-gnome/src/uimanager.c:737 +msgid "_Preferences" +msgstr "Indstillinger" + +#: ../sflphone-client-gnome/src/uimanager.c:737 +msgid "Change your preferences" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:740 +msgid "_View" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:743 +msgid "_Help" +msgstr "_Hjem" + +#: ../sflphone-client-gnome/src/uimanager.c:744 +msgid "Contents" +msgstr "Fortsæt" + +#: ../sflphone-client-gnome/src/uimanager.c:744 +msgid "Open the manual" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:745 +msgid "About this application" +msgstr "Godkendelse" + +#: ../sflphone-client-gnome/src/uimanager.c:751 +msgid "_Transfer" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:751 +msgid "Transfer the call" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:752 +msgid "_Show toolbar" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:752 +msgid "Show the toolbar" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:753 +msgid "_Dialpad" +msgstr "Deaktiveret" + +#: ../sflphone-client-gnome/src/uimanager.c:753 +msgid "Show the dialpad" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:754 +msgid "_Volume controls" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:754 +msgid "Show the volume controls" +msgstr "" + +#: ../sflphone-client-gnome/src/uimanager.c:755 +msgid "_History" +msgstr "Opkaldshistorik" + +#: ../sflphone-client-gnome/src/uimanager.c:755 +msgid "Calls history" +msgstr "Opkaldshistorik" + +#: ../sflphone-client-gnome/src/uimanager.c:756 +msgid "_Address book" +msgstr "Adressebog" + +#: ../sflphone-client-gnome/src/uimanager.c:1003 +#: ../sflphone-client-gnome/src/uimanager.c:1044 +msgid "On _Hold" +msgstr "I _venteposition" + +#: ../sflphone-client-gnome/src/uimanager.c:1107 +msgid "_Call back" +msgstr "_Besvar opkald" + +#: ../sflphone-client-gnome/src/uimanager.c:1258 +msgid "Edit phone number" +msgstr "Ændre telefonnummer" + +#: ../sflphone-client-gnome/src/uimanager.c:1269 +msgid "Edit the phone number before making a call" +msgstr "Ændre telefonnummeret før opkald" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:180 +msgid "Account Parameters" +msgstr "Kontoparametre" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:189 +#: ../sflphone-client-gnome/src/config/assistant.c:314 +#: ../sflphone-client-gnome/src/config/assistant.c:427 +msgid "_Alias" +msgstr "_Alias" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:197 +msgid "_Protocol" +msgstr "_Protokol" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:215 +msgid "Unknown" +msgstr "Ukendt" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:225 +#: ../sflphone-client-gnome/src/config/assistant.c:322 +#: ../sflphone-client-gnome/src/config/assistant.c:435 +msgid "_Host name" +msgstr "_Værtsnavn" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:233 +#: ../sflphone-client-gnome/src/config/assistant.c:330 +#: ../sflphone-client-gnome/src/config/assistant.c:443 +msgid "_User name" +msgstr "_Brugernavn" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:250 +#: ../sflphone-client-gnome/src/config/assistant.c:346 +#: ../sflphone-client-gnome/src/config/assistant.c:458 +msgid "_Password" +msgstr "_Adgangskode" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:270 +#: ../sflphone-client-gnome/src/config/assistant.c:363 +#: ../sflphone-client-gnome/src/config/assistant.c:473 +msgid "Show password" +msgstr "Adgangskode" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:274 +#: ../sflphone-client-gnome/src/config/assistant.c:368 +#: ../sflphone-client-gnome/src/config/assistant.c:478 +msgid "_Voicemail number" +msgstr "_Nummer for talebesked" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:361 +msgid "Authentication" +msgstr "Godkendelse" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:362 +msgid "Secret" +msgstr "Hemmelig" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:605 +msgid "Credential" +msgstr "Legitimationsoplysning" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:640 +msgid "Authentication name" +msgstr "Godkendelsesnavn" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:651 +msgid "Password" +msgstr "Adgangskode" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:674 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1056 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:321 +msgid "Security" +msgstr "Sikkerhed" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:687 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:333 +msgid "Use TLS transport (sips)" +msgstr "Benyt TLS transport (sips)" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:693 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:338 +msgid "SRTP key exchange" +msgstr "SRTP-nøgleudveksling" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:699 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:344 +msgid "Disabled" +msgstr "Deaktiveret" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:795 +msgid "Registration" +msgstr "Registrering" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:800 +msgid "Registration expire" +msgstr "Forældelse af registrering" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:809 +msgid "_Comply with RFC 3263" +msgstr "_Overhold RFC 3263" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:816 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:234 +msgid "Network Interface" +msgstr "Netværk kan ikke nås" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:830 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:249 +msgid "Local address" +msgstr "Lokal adresse" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:880 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:301 +msgid "Local port" +msgstr "Lokal port" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:893 +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:928 +msgid "Published address" +msgstr "Offentliggjort adresse" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:899 +msgid "Using STUN" +msgstr "Ved brug af STUN " + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:906 +msgid "STUN server URL" +msgstr "STUN serveradresse" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:914 +msgid "Same as local parameters" +msgstr "Samme som lokale parametre" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:917 +msgid "Set published address and port:" +msgstr "Konfigurer offentliggjort adresse og port:" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:936 +msgid "Published port" +msgstr "Offentliggjort port" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1027 +msgid "Account settings" +msgstr "Kontoindstillinger" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1046 +msgid "Basic" +msgstr "Grundlæggende" + +#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1051 +msgid "Advanced" +msgstr "Advanceret" + +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:164 +msgid "Server returned \"%s\" (%d)" +msgstr "Server svarede \"" + +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:389 +msgid "Protocol" +msgstr "Protokol" + +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:396 +msgid "Status" +msgstr "Status" + +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:474 +msgid "Accounts" +msgstr "Konti" + +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:484 +msgid "Configured Accounts" +msgstr "Oprettede konti" + +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:501 +msgid "There is %d active account" +msgid_plural "There are %d active accounts" +msgstr[0] " aktiv konto" +msgstr[1] " aktiv konto" + +#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:507 +msgid "You have no active account" +msgstr "Der er ingen aktive konti" + +#: ../sflphone-client-gnome/src/config/addressbook-config.c:306 +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:556 +msgid "General" +msgstr "Generelt" + +#: ../sflphone-client-gnome/src/config/addressbook-config.c:312 +msgid "_Use Evolution address books" +msgstr "_Benyt Evolution adressekartotek" + +#: ../sflphone-client-gnome/src/config/addressbook-config.c:319 +msgid "Download limit :" +msgstr "Download begrænsning :" + +#: ../sflphone-client-gnome/src/config/addressbook-config.c:327 +msgid "cards" +msgstr "kort" + +#: ../sflphone-client-gnome/src/config/addressbook-config.c:333 +msgid "_Display contact photo if available" +msgstr "Vis _kontaktbillede hvis tilgængeligt" + +#: ../sflphone-client-gnome/src/config/addressbook-config.c:341 +msgid "Fields from Evolution's address books" +msgstr "Felter fra Evolutions adressekartotek" + +#: ../sflphone-client-gnome/src/config/addressbook-config.c:345 +msgid "_Work" +msgstr "_Arbejde" + +#: ../sflphone-client-gnome/src/config/addressbook-config.c:351 +msgid "_Home" +msgstr "_Hjem" + +#: ../sflphone-client-gnome/src/config/addressbook-config.c:357 +msgid "_Mobile" +msgstr "_Mobil" + +#: ../sflphone-client-gnome/src/config/addressbook-config.c:364 +msgid "Address Books" +msgstr "Adressekartoteker" + +#: ../sflphone-client-gnome/src/config/addressbook-config.c:368 +msgid "Select which Evolution address books to use" +msgstr "Vælg hvilke af Evolutions adressekartoteker skal benyttes" + +#: ../sflphone-client-gnome/src/config/addressbook-config.c:404 +#: ../sflphone-client-gnome/src/config/audioconf.c:577 +msgid "Name" +msgstr "Navn" + +#: ../sflphone-client-gnome/src/config/assistant.c:75 +#, c-format +msgid "This assistant is now finished." +msgstr "Denne vejledning er nu fuldført" + +#: ../sflphone-client-gnome/src/config/assistant.c:77 +msgid "" +"You can at any time check your registration state or modify your accounts " +"parameters in the Options/Accounts window." +msgstr "" +"Du kan til enhver tid undersøge din registrering eller ændre dine kontis " +"parametre i vinduet Indstillinger/Konti" + +#: ../sflphone-client-gnome/src/config/assistant.c:80 +msgid "Alias" +msgstr "Alias" + +#: ../sflphone-client-gnome/src/config/assistant.c:84 +msgid "Server" +msgstr "Server" + +#: ../sflphone-client-gnome/src/config/assistant.c:88 +msgid "Username" +msgstr "Brugernavn" + +#: ../sflphone-client-gnome/src/config/assistant.c:92 +msgid "Security: " +msgstr "Sikkerhed: " + +#: ../sflphone-client-gnome/src/config/assistant.c:94 +msgid "SRTP/ZRTP draft-zimmermann" +msgstr "SRTP/ZRTP draft-zimmermann" + +#: ../sflphone-client-gnome/src/config/assistant.c:96 +msgid "None" +msgstr "Ingen" + +#: ../sflphone-client-gnome/src/config/assistant.c:229 +msgid "SFLphone account creation wizard" +msgstr "SFLphone-guiden til oprettelse af konto" + +#: ../sflphone-client-gnome/src/config/assistant.c:255 +msgid "Welcome to the Account creation wizard of SFLphone!" +msgstr "Velkommen til kontooperettelsesvejledning for SFLphone" + +#: ../sflphone-client-gnome/src/config/assistant.c:256 +msgid "This installation wizard will help you configure an account." +msgstr "" +"Denne installeringsvejledning vil hjælpe dig med at konfigurere en konto" + +#: ../sflphone-client-gnome/src/config/assistant.c:270 +msgid "VoIP Protocols" +msgstr "VoIP protokoller" + +#: ../sflphone-client-gnome/src/config/assistant.c:270 +msgid "Select an account type" +msgstr "Vælg en kontotype" + +#: ../sflphone-client-gnome/src/config/assistant.c:272 +msgid "SIP (Session Initiation Protocol)" +msgstr "SIP (Session Initiation Protocol)" + +#: ../sflphone-client-gnome/src/config/assistant.c:274 +msgid "IAX2 (InterAsterix Exchange)" +msgstr "IAX2 (InterAsterix Exchange)" + +#: ../sflphone-client-gnome/src/config/assistant.c:288 +msgid "Account" +msgstr "Konto" + +#: ../sflphone-client-gnome/src/config/assistant.c:288 +msgid "Please select one of the following options" +msgstr "Vælg en af følgende indstillinger" + +#: ../sflphone-client-gnome/src/config/assistant.c:290 +msgid "Create a free SIP/IAX2 account on sflphone.org" +msgstr "Opret en gratis SIP/IAX2 konto hos sflphone.org" + +#: ../sflphone-client-gnome/src/config/assistant.c:292 +msgid "Register an existing SIP or IAX2 account" +msgstr "Registrer en eksisterende SIP eller IAX2 konto" + +#: ../sflphone-client-gnome/src/config/assistant.c:306 +msgid "SIP account settings" +msgstr "SIP kontoindstillinger" + +#: ../sflphone-client-gnome/src/config/assistant.c:306 +#: ../sflphone-client-gnome/src/config/assistant.c:419 +msgid "Please fill the following information" +msgstr "Udfyld venligst følgende information" + +#: ../sflphone-client-gnome/src/config/assistant.c:376 +#: ../sflphone-client-gnome/src/config/assistant.c:405 +msgid "Secure communications with _ZRTP" +msgstr "Sikker kommunikation med _ZRTP" + +#: ../sflphone-client-gnome/src/config/assistant.c:389 +msgid "Optional email address" +msgstr "Valgfri emailadresse" + +#: ../sflphone-client-gnome/src/config/assistant.c:389 +msgid "This email address will be used to send your voicemail messages." +msgstr "Denne emailadresse vil blive brugt til at sende dig indtalte beskeder" + +#: ../sflphone-client-gnome/src/config/assistant.c:397 +msgid "_Email address" +msgstr "_Emailadresse" + +#: ../sflphone-client-gnome/src/config/assistant.c:419 +msgid "IAX2 account settings" +msgstr "IAX2 kontoindstillinger" + +#: ../sflphone-client-gnome/src/config/assistant.c:496 +msgid "Network Address Translation (NAT)" +msgstr "Network Address Translation (NAT)" + +#: ../sflphone-client-gnome/src/config/assistant.c:496 +msgid "You should probably enable this if you are behind a firewall." +msgstr "Du opfordres til at aktivere dette hvis du er bag en firewall" + +#: ../sflphone-client-gnome/src/config/assistant.c:505 +msgid "E_nable STUN" +msgstr "_Benyt STUN" + +#: ../sflphone-client-gnome/src/config/assistant.c:512 +msgid "_STUN server" +msgstr "_STUN server" + +#: ../sflphone-client-gnome/src/config/assistant.c:526 +msgid "Account Registration" +msgstr "Kontoregistrering" + +#: ../sflphone-client-gnome/src/config/assistant.c:526 +msgid "Congratulations!" +msgstr "Tillykke!" + +#: ../sflphone-client-gnome/src/config/audioconf.c:582 +msgid "Frequency" +msgstr "Frekvens" + +#: ../sflphone-client-gnome/src/config/audioconf.c:587 +msgid "Bitrate" +msgstr "Bithastighed" + +#: ../sflphone-client-gnome/src/config/audioconf.c:592 +msgid "Bandwidth" +msgstr "Båndbredde" + +#: ../sflphone-client-gnome/src/config/audioconf.c:670 +msgid "ALSA plugin" +msgstr "ALSA plugin" + +#: ../sflphone-client-gnome/src/config/audioconf.c:692 +msgid "Output" +msgstr "Uddata" + +#: ../sflphone-client-gnome/src/config/audioconf.c:714 +msgid "Input" +msgstr "Inddata" + +#: ../sflphone-client-gnome/src/config/audioconf.c:749 +msgid "_Voice Activity Detection" +msgstr "_Detektering af taleaktivitet" + +#: ../sflphone-client-gnome/src/config/audioconf.c:759 +msgid "_Noise Reduction (Narrow-Band Companding)" +msgstr "_Støjreducering (Narrow-Band Companding)" + +#: ../sflphone-client-gnome/src/config/audioconf.c:800 +msgid "Sound Manager" +msgstr "Lydhåndtering" + +#: ../sflphone-client-gnome/src/config/audioconf.c:809 +msgid "_Pulseaudio" +msgstr "_PulseAudio" + +#: ../sflphone-client-gnome/src/config/audioconf.c:813 +msgid "_ALSA" +msgstr "_ALSA" + +#: ../sflphone-client-gnome/src/config/audioconf.c:819 +msgid "ALSA settings" +msgstr "ALSA indstillinger" + +#: ../sflphone-client-gnome/src/config/audioconf.c:836 +msgid "Codecs" +msgstr "Codecs" + +#: ../sflphone-client-gnome/src/config/audioconf.c:865 +msgid "Recordings" +msgstr "Optagelser" + +#: ../sflphone-client-gnome/src/config/audioconf.c:869 +msgid "Destination folder" +msgstr "Destinationsmappe" + +#: ../sflphone-client-gnome/src/config/audioconf.c:873 +msgid "Select a folder" +msgstr "Vælg en mappe" + +#: ../sflphone-client-gnome/src/config/audioconf.c:879 +msgid "Ringtones" +msgstr "Ringetoner" + +#: ../sflphone-client-gnome/src/config/audioconf.c:885 +msgid "_Enable ringtones" +msgstr "Aktiver _ringetoner" + +#: ../sflphone-client-gnome/src/config/audioconf.c:891 +msgid "Choose a ringtone" +msgstr "Vælg en ringetone" + +#: ../sflphone-client-gnome/src/config/audioconf.c:897 +msgid "Audio Files" +msgstr "Lydfiler" + +#: ../sflphone-client-gnome/src/config/hooks-config.c:130 +msgid "URL Argument" +msgstr "Adresseargument" + +#: ../sflphone-client-gnome/src/config/hooks-config.c:135 +msgid "Custom commands on incoming calls with URL" +msgstr "Brugerdefinerede kommandoer ved indgående opkald med webadresse" + +#: ../sflphone-client-gnome/src/config/hooks-config.c:138 +#, c-format +msgid "%s will be replaced with the passed URL." +msgstr "%s vil blive erstattet med den givne webadresse." + +#: ../sflphone-client-gnome/src/config/hooks-config.c:141 +msgid "Trigger on specific _SIP header" +msgstr "Udløse ved specifik _SIP protokolhoved" + +#: ../sflphone-client-gnome/src/config/hooks-config.c:150 +msgid "Trigger on _IAX2 URL" +msgstr "Udløse ved _IAX2 webadresse" + +#: ../sflphone-client-gnome/src/config/hooks-config.c:155 +msgid "Command to _run" +msgstr "Kommando som skal _kaldes" + +#: ../sflphone-client-gnome/src/config/hooks-config.c:165 +msgid "Phone number rewriting" +msgstr "Omskrivning af telefonnummer" + +#: ../sflphone-client-gnome/src/config/hooks-config.c:169 +msgid "_Prefix dialed numbers with" +msgstr "_Præfiks for indtastede numre" + +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:225 +msgid "" +"This profile is used when you want to reach a remote peer simply by typing a " +"sip URI such as <b>sip:remotepeer</b>. The settings you define here will " +"also be used if no account can be matched to an incoming or outgoing call." +msgstr "" +"Denne profil benyttes når du ønsker at kontakte en ekstern peer ved blot at " +"indtaste en sip-adresse såsom <b>sip:eksternpeer</b>. De indstillinger som " +"du definerer her vil også benyttes hvis ingen konto kan tilknyttes et " +"indgående eller udgående opkald." + +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:440 +msgid "Desktop Notifications" +msgstr "Meddelelser" + +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:444 +msgid "_Enable notifications" +msgstr "_Aktiver meddelelser" + +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:450 +msgid "System Tray Icon" +msgstr "Systembakke-ikon" + +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:453 +msgid "_Popup main window on incoming call" +msgstr "_Vis hovedvindue ved indgående opkald" + +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:457 +msgid "Ne_ver popup main window" +msgstr "Aldrig _pop-op hovedvindue" + +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:463 +msgid "Hide SFLphone window on _startup" +msgstr "Skjul SFLphone vinduet ved _start" + +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:469 +msgid "Calls History" +msgstr "Opkaldshistorik" + +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:472 +msgid "_Keep my history for at least" +msgstr "_Gem min historik i mindst" + +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:483 +msgid "days" +msgstr "dage" + +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:536 +msgid "Preferences" +msgstr "Indstillinger" + +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:561 +msgid "Audio" +msgstr "Audio" + +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:566 +msgid "Address Book" +msgstr "Adressebog" + +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:571 +msgid "Hooks" +msgstr "Hooks" + +#: ../sflphone-client-gnome/src/config/preferencesdialog.c:581 +msgid "Direct IP calls" +msgstr "Direkte IP opkald" + +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:38 +msgid "Advanced options for TLS" +msgstr "Advancerede indstillinger for TLS" + +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:56 +msgid "TLS transport" +msgstr "TLS transport" + +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:60 +msgid "" +"TLS transport can be used along with UDP for those calls that would\n" +"require secure sip transactions (aka SIPS). You can configure a different\n" +"TLS transport for each account. However, each of them will run on a " +"dedicated\n" +"port, different one from each other\n" +msgstr "" +"TLS transport kan benyttes sammen med UDP for de opkald som kræver\n" +"sikker sip transaktion (også kaldet SIPS). Du kan konfigurere forskellige\n" +"TLS transporter for de enkelte konti. Bemærk dog at de hver vil benytte\n" +"en dedikeret port forskellig fra hinanden.\n" + +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:103 +msgid "Certificate of Authority list" +msgstr "Autoritetscertifikatsliste" + +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:107 +msgid "Choose a CA list file (optional)" +msgstr "Vælg en fil med en autoritetscertifikatsliste (valgfri)" + +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:131 +msgid "Public endpoint certificate file" +msgstr "Offentlig endpoint certifikatsfil" + +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:135 +msgid "Choose a public endpoint certificate (optional)" +msgstr "Vælg et offentligt endpoint-certifikat (valgfri)" + +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:159 +msgid "Choose a private key file (optional)" +msgstr "Vælg en privat nøglefil (valgfri)" + +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:181 +msgid "Password for the private key" +msgstr "Adgangskode for den private nøgle" + +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:204 +msgid "TLS protocol method" +msgstr "TLS protokolmetode" + +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:238 +msgid "TLS cipher list" +msgstr "TLS cifferliste" + +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:247 +msgid "Server name instance for outgoing TLS connection" +msgstr "Server navneinstans for udgående TLS forbindelse" + +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:255 +msgid "Negotiation timeout (sec:msec)" +msgstr "Forhandlingstimeout" + +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:272 +msgid "Verify incoming certificates, as a server" +msgstr "Udfør kontrol af indgående certifikater, som en server" + +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:278 +msgid "Verify certificates from answer, as a client" +msgstr "Udfør kontrol af certifikater fra svar, som en klient" + +#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:284 +msgid "Require certificate for incoming tls connections" +msgstr "Kræv certifikat for indgående TLS forbindelser" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:49 +msgid "ZRTP Options" +msgstr "ZRTP indstillinger" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:69 +msgid "Send Hello Hash in S_DP" +msgstr "Send \"Hello Hash\" i S_DP" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:75 +msgid "Ask User to Confirm SAS" +msgstr "_Spørg bruger om at godkende SAS" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:81 +msgid "_Warn if ZRTP not supported" +msgstr "_Advar hvis ZRTP ikke understøttes" + +#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:87 +msgid "Display SAS once for hold events" +msgstr "_Vis SAS en enkelt gang for vente-hændelser" + +#: ../sflphone-client-gnome/src/contacts/searchbar.c:58 +msgid "Search all" +msgstr "Søg alle" + +#: ../sflphone-client-gnome/src/contacts/searchbar.c:59 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:72 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:84 +#: ../sflphone-client-gnome/src/contacts/searchbar.c:96 +msgid "Click here to change the search type" +msgstr "Klik her for at ændre søgningstypen" + +#: ../sflphone-client-gnome/src/contacts/searchbar.c:71 +msgid "Search by missed call" +msgstr "Søg i ubesvarede opkald" + +#: ../sflphone-client-gnome/src/contacts/searchbar.c:83 +msgid "Search by incoming call" +msgstr "Søg i indgående opkald" + +#: ../sflphone-client-gnome/src/contacts/searchbar.c:95 +msgid "Search by outgoing call" +msgstr "Søg i udgående opkald" + +#~ msgid "IP call - %s" +#~ msgstr "IP opkald - %s" + +#~ msgid "Codec" +#~ msgstr "Kodning" + +#~ msgid "Network" +#~ msgstr "Netværk" + +#~ msgid "Manually" +#~ msgstr "Manuelt" + +#~ msgid "There " +#~ msgstr "Der " + +#~ msgid "is " +#~ msgstr "er " + +#~ msgid "are " +#~ msgstr "er " + +#~ msgid "s" +#~ msgstr "s" + +#~ msgid "_Mute other applications during a call" +#~ msgstr "_Dæmp andre programmer ved opkald" + +#~ msgid "SIP Port" +#~ msgstr "SIP Port" + +#~ msgid "UDP Transport" +#~ msgstr "UDP transport" + +#~ msgid "Enable voicemail _notifications" +#~ msgstr "Aktiver _talebeskedsmeddelelser" + +#~ msgid "Store SIP credentials as MD5 hash" +#~ msgstr "Gem SIP-legitimationsoplysninger som _MD5-hash-værdi" -- GitLab From 4fbeeec5e130ddc07d99339e685e84fec02af027 Mon Sep 17 00:00:00 2001 From: Julien Bonjean <julien@bonjean.info> Date: Fri, 4 Dec 2009 10:52:37 -0500 Subject: [PATCH 054/188] [#2181] Updated spec files --- tools/build-system/build-osc.sh | 2 +- tools/build-system/osc/sflphone-client-gnome.spec | 1 + .../sflphone-common-dbus-service-in-libdir.patch | 14 -------------- tools/build-system/osc/sflphone-common.spec | 4 +--- 4 files changed, 3 insertions(+), 18 deletions(-) delete mode 100644 tools/build-system/osc/sflphone-common-dbus-service-in-libdir.patch diff --git a/tools/build-system/build-osc.sh b/tools/build-system/build-osc.sh index 13432ab327..8735ba83df 100755 --- a/tools/build-system/build-osc.sh +++ b/tools/build-system/build-osc.sh @@ -23,7 +23,7 @@ LAUNCHPAD_PACKAGES=( "sflphone-client-gnome" "sflphone-common" ) REFERENCE_REPOSITORY="${ROOT_DIR}/sflphone-source-repository" -SOFTWARE_VERSION="0.9.7.rc1" +SOFTWARE_VERSION="0.9.7.rc2" VERSION_INDEX=1 diff --git a/tools/build-system/osc/sflphone-client-gnome.spec b/tools/build-system/osc/sflphone-client-gnome.spec index 794dc7784e..dba4cd8ebb 100644 --- a/tools/build-system/osc/sflphone-client-gnome.spec +++ b/tools/build-system/osc/sflphone-client-gnome.spec @@ -125,6 +125,7 @@ make clean %lang(zh_HK) %{_prefix}/share/locale/zh_HK/LC_MESSAGES/*.mo %lang(it) %{_prefix}/share/locale/it/LC_MESSAGES/*.mo %lang(pt_BR) %{_prefix}/share/locale/pt_BR/LC_MESSAGES/*.mo +%lang(da) %{_prefix}/share/locale/da/LC_MESSAGES/*.mo %doc AUTHORS COPYING README %doc %{_prefix}/share/man/man1/sflphone-client-gnome.1.gz %doc %{_prefix}/share/man/man1/sflphone.1.gz diff --git a/tools/build-system/osc/sflphone-common-dbus-service-in-libdir.patch b/tools/build-system/osc/sflphone-common-dbus-service-in-libdir.patch deleted file mode 100644 index 72d23454fb..0000000000 --- a/tools/build-system/osc/sflphone-common-dbus-service-in-libdir.patch +++ /dev/null @@ -1,14 +0,0 @@ -diff --git sflphone-common/src/dbus/Makefile.am sflphone-common/src/dbus/Makefile.am -index 5a2745e..5ca2e42 100644 ---- sflphone-common/src/dbus/Makefile.am -+++ sflphone-common/src/dbus/Makefile.am -@@ -38,7 +38,7 @@ service_DATA = $(service_in_files:.service.in=.service) - - # Rule to make the service file with bindir expanded - $(service_DATA): $(service_in_files) Makefile -- sed -e "s|libexec|$(prefix)/lib/sflphone|" $<> $@ -+ sed -e "s|libexec|$(libdir)/sflphone|" $<> $@ - - EXTRA_DIST = *.xml README - - diff --git a/tools/build-system/osc/sflphone-common.spec b/tools/build-system/osc/sflphone-common.spec index 0bc1a2b573..d44f94103e 100644 --- a/tools/build-system/osc/sflphone-common.spec +++ b/tools/build-system/osc/sflphone-common.spec @@ -21,7 +21,6 @@ Packager: Julien Bonjean <julien.bonjean@savoirfairelinux.com> BuildRoot: %{_tmppath}/%{name} Source0: sflphone-common-%{version}.tar.gz -Patch0: sflphone-common-dbus-service-in-libdir.patch BuildRequires: speex-devel BuildRequires: gcc-c++ BuildRequires: expat @@ -95,7 +94,6 @@ Authors: %prep %setup -q -%patch0 -p1 %build cd libs/pjproject @@ -127,7 +125,7 @@ make clean %dir %{_libdir}/sflphone/plugins %dir %{_prefix}/share/sflphone %dir %{_prefix}/share/sflphone/ringtones -%{_libdir}/libdbus-* +%{_libdir}/sflphone/libdbus-* %{_libdir}/sflphone/codecs/* %{_libdir}/sflphone/plugins/* %{_prefix}/share/dbus-1/services/org.sflphone.* -- GitLab From b9bf4bf6cb984bf2bf61c1bcd7d37abe49aa2757 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Fri, 4 Dec 2009 15:16:24 -0500 Subject: [PATCH 055/188] [#2519] Decrease transport reference counter when setting transport Pjsip's set_transport methods all increase transport's reference counter. This incrementation is never decreased after --- sflphone-common/src/sip/sipvoiplink.cpp | 156 ++++++++++++++++++++++-- 1 file changed, 149 insertions(+), 7 deletions(-) diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp index 050ea5c14c..8e085aecfd 100644 --- a/sflphone-common/src/sip/sipvoiplink.cpp +++ b/sflphone-common/src/sip/sipvoiplink.cpp @@ -408,6 +408,7 @@ int SIPVoIPLink::sendRegister (AccountID id) _debug ("In sendRegister: account is null"); return false; } + // Resolve hostname here and keep its // IP address for the whole time the @@ -591,9 +592,20 @@ int SIPVoIPLink::sendRegister (AccountID id) pjsip_tpselector *tp; - init_transport_selector (account->getAccountTransport (), &tp); + init_transport_selector (account->getAccountTransport (), &tp); + + // pjsip_regc_set_transport increments transport ref count by one status = pjsip_regc_set_transport (regc, tp); + // decrease transport's ref count + pjsip_transport_dec_ref(account->getAccountTransport ()); + + _debug("After setting the transport in account registration using transport: %s %s (refcnt=%d)\n", + account->getAccountTransport()->obj_name, + account->getAccountTransport()->info, + (int)pj_atomic_get(account->getAccountTransport()->ref_cnt)); + + if (status != PJ_SUCCESS) { _debug ("UserAgent: Unable to set transport.\n"); _mutexSIP.leaveMutex (); @@ -613,7 +625,10 @@ int SIPVoIPLink::sendRegister (AccountID id) account->setRegistrationInfo (regc); - _debug("Sent account registration using transport: %s\n", account->getAccountTransport()->info); + _debug("Sent account registration using transport: %s %s (refcnt=%d)\n", + account->getAccountTransport()->obj_name, + account->getAccountTransport()->info, + (int)pj_atomic_get(account->getAccountTransport()->ref_cnt)); return true; } @@ -629,6 +644,11 @@ SIPVoIPLink::sendUnregister (AccountID id) account = dynamic_cast<SIPAccount *> (Manager::instance().getAccount (id)); regc = account->getRegistrationInfo(); + _debug("Sending account unregistration using transport: %s %s (refcnt=%d)\n", + account->getAccountTransport()->obj_name, + account->getAccountTransport()->info, + (int)pj_atomic_get(account->getAccountTransport()->ref_cnt)); + if (!account->isRegister()) { account->setRegistrationState (Unregistered); return true; @@ -653,6 +673,37 @@ SIPVoIPLink::sendUnregister (AccountID id) return false; } + if(account->getAccountTransport()) { + + if(account->getAccountTransport() != _localUDPTransport) { + + // status = pjsip_transport_dec_ref(account->getAccountTransport()); + // status = pjsip_transport_shutdown(account->getAccountTransport()); + // status = pjsip_transport_destroy(account->getAccountTransport()); + // account->getAccountTransport()->destroy(account->getAccountTransport()); + + } + + _debug("Sent account unregistration using transport: %s %s (refcnt=%d)\n", + account->getAccountTransport()->obj_name, + account->getAccountTransport()->info, + (int)pj_atomic_get(account->getAccountTransport()->ref_cnt)); + + pj_sockaddr *addr = (pj_sockaddr*)&(account->getAccountTransport()->key.rem_addr); + + static char str[PJ_INET6_ADDRSTRLEN]; + pj_inet_ntop(((const pj_sockaddr*)addr)->addr.sa_family, + pj_sockaddr_get_addr(addr), + str, sizeof(str)); + + + _debug("------------------------------------- KEY: %s:%d\n", + // addr_string(account->getAccountTransport()->key.rem_addr), + str, + pj_sockaddr_get_port((const pj_sockaddr*)&(account->getAccountTransport()->key.rem_addr))); + + } + //account->setRegistrationInfo(regc); account->setRegister (false); @@ -1332,8 +1383,13 @@ SIPVoIPLink::SIPStartCall (SIPCall* call, const std::string& subject UNUSED) init_transport_selector (account->getAccountTransport (), &tp); + // increment transport's ref count by one status = pjsip_dlg_set_transport (dialog, tp); + // decrement transport's ref count + pjsip_transport_dec_ref(account->getAccountTransport()); + + status = pjsip_inv_send_msg (inv, tdata); if (status != PJ_SUCCESS) { @@ -1341,7 +1397,10 @@ SIPVoIPLink::SIPStartCall (SIPCall* call, const std::string& subject UNUSED) return false; } - _debug("Sent invite request using transport: %s\n", account->getAccountTransport()->info); + _debug("Sent invite request using transport: %s %s (refcnt=%d)\n", + account->getAccountTransport()->obj_name, + account->getAccountTransport()->info, + (int)pj_atomic_get(account->getAccountTransport()->ref_cnt)); return true; } @@ -1561,8 +1620,12 @@ bool SIPVoIPLink::new_ip_to_ip_call (const CallID& id, const std::string& to) init_transport_selector (account->getAccountTransport(), &tp); + // set_transport methods increment transport's ref_count status = pjsip_dlg_set_transport (dialog, tp); + // decrement transport's ref count + pjsip_transport_dec_ref(account->getAccountTransport()); + if (status != PJ_SUCCESS) { _debug ("Failed to set the transport for an IP call\n"); return status; @@ -2009,13 +2072,35 @@ int SIPVoIPLink::createUDPServer (AccountID id) a_name.port = listeningPort; - //pj_strdup2 (_pool, &a_name.host, tmpIP); //a_name.port = (pj_uint16_t) listeningPort; status = pjsip_udp_transport_start (_endpt, &bound_addr, &a_name, 1, &transport); + if(transport) { + + /* + _debug("------------------------------- INITIAL REF COUNT: %s %s (refcnt=%i)\n", + transport->obj_name, + transport->info, + (int)pj_atomic_get(transport->ref_cnt)); + + + pj_sockaddr *addr = (pj_sockaddr*)&(transport->key.rem_addr); + + static char str[PJ_INET6_ADDRSTRLEN]; + pj_inet_ntop(((const pj_sockaddr*)addr)->addr.sa_family, + pj_sockaddr_get_addr(addr), + str, sizeof(str)); + + + _debug("------------------------------------- KEY: %s:%d\n", + // addr_string(account->getAccountTransport()->key.rem_addr), + str, + pj_sockaddr_get_port((const pj_sockaddr*)&(transport->key.rem_addr))); + */ + } // Get the transport manager associated with // this endpoint pjsip_tpmgr * tpmgr = NULL; @@ -2024,6 +2109,8 @@ int SIPVoIPLink::createUDPServer (AccountID id) _debug ("Number of transport: %i\n", pjsip_tpmgr_get_transport_count (tpmgr)); + // status = pjsip_transport_register( tpmgr, (pjsip_transport*)transport); + pjsip_tpmgr_dump_transports (tpmgr); if (status != PJ_SUCCESS) { @@ -2043,6 +2130,7 @@ int SIPVoIPLink::createUDPServer (AccountID id) _debug ("Transport initialized successfully on %s:%i\n", listeningAddress.c_str (), listeningPort); + return PJ_SUCCESS; } @@ -2356,6 +2444,38 @@ pj_status_t SIPVoIPLink::createAlternateUdpTransport (AccountID id) account->setAccountTransport (transport); + if(transport) { + + _debug("------------------------------- INITIAL REF COUNT: %s %s (refcnt=%i)\n", + transport->obj_name, + transport->info, + (int)pj_atomic_get(transport->ref_cnt)); + + + pj_sockaddr *addr = (pj_sockaddr*)&(transport->key.rem_addr); + + static char str[PJ_INET6_ADDRSTRLEN]; + pj_inet_ntop(((const pj_sockaddr*)addr)->addr.sa_family, + pj_sockaddr_get_addr(addr), + str, sizeof(str)); + + + _debug("------------------------------------- KEY: %s:%d\n", + // addr_string(account->getAccountTransport()->key.rem_addr), + str, + pj_sockaddr_get_port((const pj_sockaddr*)&(transport->key.rem_addr))); + + } + pjsip_tpmgr * tpmgr = NULL; + + tpmgr = pjsip_endpt_get_tpmgr (_endpt); + + _debug ("Number of transport: %i\n", pjsip_tpmgr_get_transport_count (tpmgr)); + + // status = pjsip_transport_register( tpmgr, (pjsip_transport*)transport); + + pjsip_tpmgr_dump_transports (tpmgr); + return PJ_SUCCESS; } @@ -2993,6 +3113,11 @@ mod_on_rx_request (pjsip_rx_data *rdata) // Handle the incoming call invite in this function _debug ("UserAgent: Callback on_rx_request is involved! \n"); + _debug("Receiving request using transport: %s %s (refcnt=%d)\n", + rdata->tp_info.transport->obj_name, + rdata->tp_info.transport->info, + (int)pj_atomic_get(rdata->tp_info.transport->ref_cnt)); + /* First, let's got the username and server name from the invite. * We will use them to detect which account is the callee. */ @@ -3153,7 +3278,12 @@ mod_on_rx_request (pjsip_rx_data *rdata) // Set the appropriate transport to have the right VIA header link->init_transport_selector (account->getAccountTransport (), &tp); - _debug("Answer invite request using transport: %s\n", account->getAccountTransport()->info); + if(account->getAccountTransport()) { + _debug("Answer invite request using transport: %s %s (refcnt=%i)\n", + account->getAccountTransport()->obj_name, + account->getAccountTransport()->info, + (int)pj_atomic_get(account->getAccountTransport()->ref_cnt)); + } } if (addrToUse == "0.0.0.0") { @@ -3216,9 +3346,11 @@ mod_on_rx_request (pjsip_rx_data *rdata) // Specify media capability during invite session creation status = pjsip_inv_create_uas (dialog, rdata, call->getLocalSDP()->get_local_sdp_session(), 0, &inv); - // Explicitly set the transport - status = pjsip_dlg_set_transport (dialog, tp); + // Explicitly set the transport, set_transport methods increment transport's reference counter + status = pjsip_dlg_set_transport (dialog, tp); + // decrement transport's reference counter + pjsip_transport_dec_ref(rdata->tp_info.transport); PJ_ASSERT_RETURN (status == PJ_SUCCESS, 1); @@ -3751,8 +3883,18 @@ void handle_incoming_options (pjsip_rx_data *rdata) /* Send response statelessly */ pjsip_get_response_addr (tdata->pool, rdata, &res_addr); + _debug("--------------- Before sending option response: %s %s (refcnt=%d)\n", + res_addr.transport->obj_name, + res_addr.transport->info, + (int)pj_atomic_get(res_addr.transport->ref_cnt)); + status = pjsip_endpt_send_response (_endpt, &res_addr, tdata, NULL, NULL); + _debug("--------------- After sending option response: %s %s (refcnt=%d)\n", + res_addr.transport->obj_name, + res_addr.transport->info, + (int)pj_atomic_get(res_addr.transport->ref_cnt)); + if (status != PJ_SUCCESS) pjsip_tx_data_dec_ref (tdata); } -- GitLab From 37bcb5551be91574fb375b6456224fa72256329f Mon Sep 17 00:00:00 2001 From: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> Date: Mon, 7 Dec 2009 11:05:17 -0500 Subject: [PATCH 056/188] [#1060] Update user manual translation (french, spanish) --- sflphone-client-gnome/doc/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sflphone-client-gnome/doc/Makefile.am b/sflphone-client-gnome/doc/Makefile.am index 2993072194..f258a20f31 100644 --- a/sflphone-client-gnome/doc/Makefile.am +++ b/sflphone-client-gnome/doc/Makefile.am @@ -28,4 +28,4 @@ DOC_FIGURES = figures/addressbook-button.png \ figures/conference.png \ figures/conference_detached.png \ figures/conference_attached.png -DOC_LINGUAS = fr de es it zh_TW zh_HK zh_CN ko pl pt_BR pt ru +DOC_LINGUAS = fr es -- GitLab From 74e25aced43c2118cff58d2b4a44be2de8a6dbe1 Mon Sep 17 00:00:00 2001 From: Jonas Fonseca <jonas.fonseca@savoirfairelinux.com> Date: Mon, 7 Dec 2009 12:29:32 -0500 Subject: [PATCH 057/188] Remove undefined SFL_CXX_WITH_DEBUG macro It was originally defined in the toplevel m4/sfl-internal.m4 file and later inlined in the configure.ac. While the definition removed, the reference was not and causes the configure script to print an error message. --- sflphone-common/configure.ac | 1 - 1 file changed, 1 deletion(-) diff --git a/sflphone-common/configure.ac b/sflphone-common/configure.ac index e3c869ac13..41bfe9221b 100644 --- a/sflphone-common/configure.ac +++ b/sflphone-common/configure.ac @@ -94,7 +94,6 @@ AC_SUBST(PKGADD_VENDOR) dnl Check for programs AC_PROG_CC - SFL_CXX_WITH_DEBUG AC_PROG_CXX AC_PROG_CPP AC_PROG_INSTALL -- GitLab From 7fb6a39a07ead5f688aa7f45004567584466156f Mon Sep 17 00:00:00 2001 From: Jonas Fonseca <jonas.fonseca@savoirfairelinux.com> Date: Mon, 7 Dec 2009 12:33:00 -0500 Subject: [PATCH 058/188] Tweak mo clean and install targets This ensures that .mo files are up-to-date when using `make install`. Before you had to first run `make`. --- sflphone-client-gnome/po/Makefile.am | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sflphone-client-gnome/po/Makefile.am b/sflphone-client-gnome/po/Makefile.am index 6d2d320a9b..2f8eebd1cc 100644 --- a/sflphone-client-gnome/po/Makefile.am +++ b/sflphone-client-gnome/po/Makefile.am @@ -38,7 +38,7 @@ SUFFIXES=.po .mo .po.mo: $(MSGFMT) -o $@ $< -install-data-local: +install-data-local: $(MOFILES) @catalogs='$(MOFILES)'; \ for i in $$catalogs; do \ destdir=$(locale_installdir); \ @@ -58,4 +58,4 @@ uninstall-local: done clean-local: - rm -rf *.mo + rm -f $(MOFILES) -- GitLab From 640d4abcb7fa3cd45d0dce26a85105b8044aead4 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Tue, 8 Dec 2009 13:04:20 -0500 Subject: [PATCH 059/188] [#2554] Fix "hangup" action close audio if there's still an active call --- sflphone-common/src/managerimpl.cpp | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/sflphone-common/src/managerimpl.cpp b/sflphone-common/src/managerimpl.cpp index 7e960cb76d..75b3fb021a 100644 --- a/sflphone-common/src/managerimpl.cpp +++ b/sflphone-common/src/managerimpl.cpp @@ -413,7 +413,6 @@ ManagerImpl::hangupCall (const CallID& call_id) PulseLayer *pulselayer; AccountID account_id; bool returnValue; - AudioLayer *audiolayer; // store the current call id CallID current_call_id = getCurrentCallId(); @@ -425,17 +424,6 @@ ManagerImpl::hangupCall (const CallID& call_id) if (_dbus) _dbus->getCallManager()->callStateChanged (call_id, "HUNGUP"); - int nbCalls = getCallList().size(); - - audiolayer = getAudioDriver(); - - // stop streams - if (audiolayer && (nbCalls <= 1)) { - _debug (" hangupCall: stop audio stream, ther is only %i call(s) remaining", nbCalls); - audiolayer->stopStream(); - } - - if (participToConference (call_id)) { Conference *conf = getConferenceFromCallID (call_id); @@ -472,6 +460,16 @@ ManagerImpl::hangupCall (const CallID& call_id) removeCallAccount (call_id); } + int nbCalls = getCallList().size(); + + AudioLayer *audiolayer = getAudioDriver(); + + // stop streams + if (audiolayer && (nbCalls <= 1)) { + _debug (" hangupCall: stop audio stream, ther is only %i call(s) remaining", nbCalls); + audiolayer->stopStream(); + } + if (_audiodriver->getLayerType() == PULSEAUDIO) { pulselayer = dynamic_cast<PulseLayer *> (getAudioDriver()); } -- GitLab From f6565bb48624cca79f29291cc2286da411a8e6a4 Mon Sep 17 00:00:00 2001 From: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> Date: Tue, 8 Dec 2009 13:14:01 -0500 Subject: [PATCH 060/188] [#2413] Add SRTP documentation in user manual --- .../doc/C/figures/accounts_security.png | Bin 0 -> 27664 bytes .../doc/C/figures/srtp_enabled.png | Bin 0 -> 5873 bytes .../doc/C/figures/zrtp_options.png | Bin 0 -> 17688 bytes sflphone-client-gnome/doc/C/sflphone.xml | 131 +++++++++++++++++- sflphone-client-gnome/doc/Makefile.am | 5 +- 5 files changed, 129 insertions(+), 7 deletions(-) create mode 100644 sflphone-client-gnome/doc/C/figures/accounts_security.png create mode 100644 sflphone-client-gnome/doc/C/figures/srtp_enabled.png create mode 100644 sflphone-client-gnome/doc/C/figures/zrtp_options.png diff --git a/sflphone-client-gnome/doc/C/figures/accounts_security.png b/sflphone-client-gnome/doc/C/figures/accounts_security.png new file mode 100644 index 0000000000000000000000000000000000000000..ca3f76c3d9a899589dc29b299a3117ae8ebe110f GIT binary patch literal 27664 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 literal 0 HcmV?d00001 diff --git a/sflphone-client-gnome/doc/C/figures/srtp_enabled.png b/sflphone-client-gnome/doc/C/figures/srtp_enabled.png new file mode 100644 index 0000000000000000000000000000000000000000..68dabf1d368e614c3bf2326a0d8331eea4736154 GIT binary patch literal 5873 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 Se_&u>VDNPHb6Mw<&;$VWm|gw= literal 0 HcmV?d00001 diff --git a/sflphone-client-gnome/doc/C/figures/zrtp_options.png b/sflphone-client-gnome/doc/C/figures/zrtp_options.png new file mode 100644 index 0000000000000000000000000000000000000000..b9229d7b81f31aa6e4a66759bd1856959c82f233 GIT binary patch literal 17688 zcmeAS@N?(olHy`uVBq!ia0y~yV3cBDV0g~K#=yXE@WjlM3=9m6#X;^)4C~IxykuZt zU`z6LcVYMsf(!O8pUl9(z**oCS<Jw|Eeyhp4727)FfcH%mw5WRvft$45HL~eS@8Wb z0|SF(iEBiObAE1aYF-J0b5UwyNotBhd1gt5g1e`0KzJjcI0J(MgQtsQNX4x;bIT(_ z+;6wP*VXAra%6E~DHUC*)x|5yy>a1+jZGU>j>RSUCONadS<!h+!u0A5>u*PzOq2Te zDlTY>6%0J3x4U|uy#vb<sk6)TpPeh!J3P-ac;3vPbDz&FE^`+X7gt}pY}umAFFkyH zRZUH&UR@ooEWp8%f9kk=eNWIzmz5z&DJd;)4mPs~Wo2nat(|t^LV!@}?TlM{Hf@;V zpiq(g?fp*2z?0LTot?d$^Xy#fa+O{;=Zp-E(x@0lhvnBfy*XK$%-vQ7Fcl<i7ruAz z-if?>do*)zZRxbqUAN%kG7fG|mZt4(8&9<e@17g5Y}v9&8n@X(mMuK(f5?cb@xj_c zqa=;aO}QH3>*IVK93-TA**qt;q_Qv_j6S^hQ~8Y3iv#xkap>rAP^bt$(aOmp&vG(d zB7Ch*>gj1mvlCTT9#WDQIkdR)ya$iG+gd+q&l9?hH;?C7e72ppN@HLCy$PAuH_r>3 zy3XluS@TSzJvyJIer(h=Tz~1+rZ0D5@=7ah<-2YMtxnC~H_N2KEp<xe6UB)|#r)mR zb&~$>Gj_4R+_*_)YF6dt(i0NDs&6MNY4@-S-MD&k;`zgl_cA2IubCa!$!$>DE49XB z=6|so3n%3t4hFieg0AnDZ}nHQ`0?7~&*b9|fBB!P6g>U1_wtJ}yUxA4_aC`wkv_4q zE=@1ie%|q&XY|_i=B;=vJ+rdLy82jN@>_#&pVa>w?z-OLv=cll;;<|vQN`_0yQGz; z{(GUFGF5x$6+b`s@wEQ_52y9_7reV;`K79M-}TPL1?`!0ch2eUQhN1NuyE4+T@g#a z2f6;zlW{hEyk(2z_AgnRElPj$Z9k{CxcKFk{&(?OZVz^TvB{g05O?;=mRA?w?EGf* z-*k)K$11z>ym_gv{a=if%{HkTsXqU;Eau_w#Ft8oOOj7?3A-FUCRF*RoNcED1Ml*5 zzNgEjrIswY+_O5bxwn^>SN;E?o;co>ImykwQ;+fd`KWXLt5DFX)U+$!pVJt4+N*=F z9%GZ9eQiyTjjO}lu8=hm6Z`8rTxQ3yJ14QsX0~6r(YrDyCuc)o^@Xw*{4%vuW`!O1 zd1}TLb#nXP*~^|ru4Jqg`+v5$xh19I;L-c;7tcA*o!0JaxoU^`!t4X`cl<?@KRw-8 z_BLwK;>E`Q`uh6P-rm~!GcH_X;m(4GOzG$6Ep_b{+mdmyX><DdqKAiAFEZx;o}d}H zGUR2u%b8jF61)B}2DG?cu1}Bo`{;y9=NT*J%<HGRMV3eWT6^!xIl1D=Uut?nB~mLy zxI*0YKbt#EbGDn5a$v&I!jn7KX$sE1Au@N`k-P^oZl)U@StV|pC7-#&IEDRz)$48d zTqbK?>HJlwq%D6d@b+2}6}JtgMdoh*J_^_#n^L;QY3B5&r%nYpu627GH8bdx&(|rJ zj%R1_WdGWlc4E?B7aP-ryzJi0PqF86xRw>SznoK*ctR-2Rqx-V{C{Cd*_=yUKD%EC z5R3O!e0s|1S8wd$mAkFpWScJYWG-K`RZxa=x5pm8o|Dtv-`?7Kb5Eu5#fukR+}$@< zeoo7}zAn~c;mQ8X%l#j}eLHvE53`Eu>f&EtG9L=>Gv=|em2o-WP!QDc$+kW%u)phx z#KAf9eLm01v#_c=lmGqTj;!)$K3NmCZ3~n**S~bzUfpe?*_X19Hka_fNUqVAd@i%> z?%or7x9nhh{!4Vzm9smV)cw>l|JQ%NbXTW)`=(jOH#U~CYHxp=5XIZ@{7uXc_U|I1 zFTb7^TXx;Me7p3SwCe|(W&R}Ft<{O^-)l0xKJ8tj%7Gbe#fL0w->57%ukGV?_@dwP zrg~DS!Rnfm>zwO9J)h6LaydhX+M6@MCj9FP<PR)U|6CV;u4`+wWrgCT&#S8g;#A!p zd25BNaA@a~<>2L2H8GjOCu<e3(5ZF1wAIro%M`A6K0ezw<;7H<mz#TTHx%x5nC747 z;(7D+H~;xXN9-%T7EO7!@y4|bhqFefaw^lx0*X$nf1c%GdB?gZ`RXr0i<Lzy)ptJE z+`Fyfx7OOd;kl<YR8(43<#;dsk;|K_=JvU&wrExTtmjMB|GipSvaonrv9a_NA(7%- zcVq5`kahC=d(|$NK8-e8-sI&Jc7<*Cqs;lLw!TL^{tBA*H0<7g;pEXiud7lIZ>x7) zxV^xk=jfheUXJTeM(~(P@KkC|+P&Ml`un@3k(<*PT3TBlzI!+CeQA^Vhtzqp$!_Zl zWxUwd{EghSLS3|%C&h59VsOP{v*r)HXLo*1uHSXu()r0P!JdNkC%x)tZ{eH96M0Cv zSur^7<|oU2ORcZn6q{ZAI(g|<?rSoS_)f<Bd#!e|caG5>Dc>)Fdduq<A3b(ds`ZP~ zVm_;0y|sK27nZ)-bX7aJc8O1YdfwsF=Z%F<UAmPxVedS>;EarzGa9;cS-5_l?o4t> zyF7LNwizEjZ(1v3S>D_6`r@Cx*0c7P|L-lSP@aFQb7^`*^!B{e3L}QuX1R-;+xc$X zzAb)d@kxGhaq(5*>(9-zt-i52o&W0U@Z(31x<>rZUEG^^_k-OZ8D5Q5hG{P&UWs2` zcroJ=zpkZk_0B-atnc%W29(~q`{%}X@0}m|_U}qtlXw33%X!6T`jda8)$3?Za`8H2 z_pC4Slq`eHiz~<Goe}hSGynF^X)21Uv5CLmRln@EG2Ixtw6iT}=CTqtU!f???+c^v zY!ti35R-KHU-gR#6@`h?zvY=F0+;$#atZyEn0Nfskz4H(H`gaVo?l=1?u?L>^zya( zt@kf=8O}U+a<aN{%h7xH=JCl|6?}Sf@{sMlbMI}XX8N?PUah@u-MaNV{hGFK*ZZ7t zJ>2Kc{C}Ui|JfAZ3QhN$W^#2#WsPy&v!HDOPEJ9ghw>ww_sJKsoc(*XW_vz|{jUgx z^Fq&3xLudXeA3LAzG{`xhuQiTH&PkJOT>RZyv+7zLTJ~DpHFS<R;RQ~v25#%>d5ak zjrcI*xKu;Z7MUAN+B;iRBop6e@w&e|uu?zcUJ7GaR=wDn;`-deTQ@!$yP3wF3}>Hg z`6-q8mCgnw%V%<)45Id_CBelhm)^>VZ#Ax8w)dlOto0g)RY9`tMMp2*w>@mg+aPOt zO6#bE|MKAFev!}i%$+M+R#wKkslUSb$6hC=?=}zR_k3M-VAD_Wk}V7#iT9g&@6;?` zf8mtIGrLJ&tLsxjs`=lXxzs*+k;OMTdE;lx@2-*i^UK=g)xrCM7gm`_@g}S~mi~y# zDQc?YL_NRI-#!n6zh62rp`ysR>9lyV$ElOO!P6F>ew2IW{q2@hOH*t*ce+p7X!=g} z*v7QK*RSYAZJ1s@Wt!ZN3d@9&|1$Nm76&%IKCij(+oR9#r+t_iwT5l~)QLhOA}Xvb zECTZK`fC&`%9s4{by(cDrh@0y`fnSv15`g=x?A5;{rw$hzng-<p6Vmzb6Ng}h0OTs z|1oyy|790ASl)|FmSUOPq2v+aRAIu@=<q>LAR9z;^g1XAIDuMYP8lprjRI1Q4hk)9 z3IZH07dTj$6hTTL{Dp!XEMO%La4ldZShawaaKN>IO$FP6t_7q7VhdOcnnU1Pn*Pg9 zd7ph$&Zg(lt=?o6oBE!E2?DmN6}!tLcFuW}CKj?bhF|-%*CB=ft_v$=#83Y`{kyPm zRqM{3qDC_d_ORrOdm0Ide{c9a{rlr}A&H53+C87*x#zBnvF@4eE$cO1Pus=qgWrUc zPp0U_ikVNhirHD_BJpJZi;Fhi6)q<yEoJolGU378piL>6^Hgm_+I~#1k?M7Gc5-rR z?0<fK{_`3Bw`TRocs{ysA2%l<;_S7WTBV<Nr%tSzA1XWRQrXMgpyFS@Yi+h{kG!;s zQ(k|6_y(&wj@(I?mNi5$|2beIwKnYZ&(F^-i&W~vLly=+c=@ukzn}m7JloTnU4ExO zze^Nj)lIy+aJG$c!=@d)eqW;ujXngwnpP#AICaX)`#Ew`zx3EwZAp#kw3LYpnVux6 zKFQK>6?1LU{s#wUnMIu7j&_qv6<cvCe|21b#&ntd#A6{jx0v3qa-Fz$Vfw7}`_pUA z$=lvC_*JsZFg4Bf>MY(D7nY01zK%+mk~n+K%aAa=EwU!F*6+3q@KJMl&@3$FIf;Xx zU){n&B02f7%;h7;j|)plb<LkI-`Lpr<HwIDhL`d_9De@zN9fHyPVZxn<HB4Y&CQmv zm++10;#hqzKYpjm*L@P+d(HP{i!OPes*&BFc65r=jEu=0{d><%ybyZk#b0*z<$umN z?f<l5)AGwU4-ftN=`+)aOKYv_4!^*Q;qp;0SQcD=T`W5D_V)b8uV0^T;S{zge#TR^ z*RKEfa+g<sgWvR<E&jS>VM*o_m#3$)R+)cW_<xDw7A<XeC#OqCHe^35h}va-<mg7l zueHoSUY6KcsVun?t&@3oO4<FqhqLScT`A7)h@NZbbFWZ5_tw=HkI!#PaR|R7EBz>F zy?*evyNarN|IGQXJbiPD?d0&iMPBpY=GPulo!0-ehs}?-urSB%^m*}(-{*akzvg|o zSJbg2|DKTe@wOd1eq8$c+Be3}WXas=lXh-QWUJ$qUOu<{>%sCHZi}|8|72vd|ImA7 zyM=wp&M}*A8lA4+RlVld4#|D?_tdsF)K2`lpXsZug8AlUO}FNq^7E@O$v@xGy8lD8 zzwy6W|8%S6U&s4DkD1)R|KB7(v5zu0i?t`WvdB-l@MPD4-)|)U{rl(Q?k+4K(6D@Y z`o4L)7R^wdw(5C|Rn6SxD{m_Ca$ZpX5Prdcsqd!YhvTAucK#M$wzc9^|6it?b@wN{ zd$?R^XN~x(I&RCFJo(%EwmmrCS$yO735H$A-~9UIy>ItR#|OW*{`pvJF0y*x^Ytz- zziuk(F52WS#JV;-uKk^1eU0g)naj059Q`!)%^jQ8Fnu$FJ?D+qE&J14<tY>uscPjr z>wI7B>zlu#>t)W@9-lCwTg7uh_sw%R4iuc?|37aoyZPtm%QAT~lcqisU2@y#(e(K{ z9@+KW-}e86`COisKL72hb-Ab3>u*|mcKiF{Y-87z_cm*XZmHk=wI=D@%M>l2sR<XP zj(l$8H!L~jla!?7+P$yHd%5rIV`pcZOPc4&FthXNT$t6cW{P_9ar49jQx=;1x++sz z8lH7+t^aMkvnw-~9{TXZ!2XTF!tc8jOIA#JrZQdHpl#poUmL!8$n1N2$t^H*zGF?; zZV|5o`%=?w(%Fg>v|67%<=gmX1*dGibkF+LngP=;2A|us{P(_?Yf6{wF1PhAoEOX& zx^7xo-2C{xx1R5HTfDoz<368e=I_TEyRK+;^?c%)dv$vA+VD-UE~&FzHK|-&)yTE{ z-QANONtfI7kN-dV&NI=axAdsuL%ENiimqfo>6p7zM#npNombVrm6@eF*IsZlRb4yi z!{*og>texO6F!%v7j7-`XuP(t=yms->(8%$-*i31<njW&*iNryQH%2Iou_9W)mkfi ze#e%N>1OxBAHK_M4w%Iskugm_{@nNb_2++meXSY4&*tI7hijs?cB%Q!GAMa*!Rg78 zMM>Kg%C_!3e)Ms=Me#Q#_w8*Lsy#KDuh$%3KI`)xpU$T_yZa;Ny!G0>oAX5ggWHsK zbM_f<EHGF)rL%2D3iHbE>kGp3{O@Zmle{h(czt1)mQKIb$$)Ern&uzh{V8i#_Kq)S zHJUEVFUm~*ygGcMP4wKV|6JuMPhZAfoiaUps@LkQ9n<5^EIlFqB74??isq`uM)l)i zhNai4zQxyey?c6GEl%Zy!_qug@#6t%wO6M0`o6xrV4`^L?TUo-S%KWA!nQ9xaoWDu zD<O52s@cv3{<%f(yAOT)tMJ@Locr<<XSLG;Gu9}@usnaq=#v)}q;a7A-Nhrvj$PVW zoPKS6ynjN1!m(q=eCFHjJ#bxmNqD)`%$25jzO@C}ubkgI%Kq3ETVMC@U%u5>Lj}z_ zGo`-SzCHCsfOXkDzt2;iX8x2kVoSWW*|(W-f@Z)e6`o7llQmK@Um9Ik{LC<I`i7$i zZ#IVii!wUjt^Kg_mMNRF-PcRD9{Z0kUw*#hO59)GO+NqUXMR#p+?(UA_<Ct|QAek9 zo$|hLgV}XO%WE`~O_ndaR8-&<6?rV{m)?Ds%gODQ1wUBW_eq~!<hoDio(-3OFej&E z(N3Li-O9|<*K?-s^$ogLtN8Ry<dbXPZN;pX-gK_IE4S<TL>Kjy8}#zqVlF8wI=?h* zidWwi=#tm7vzJ$FS&>5Ver~%RrnBbRRvRTB<9T;yr}N)mUqSuby1F`06WM0+ous10 zMj<+^vszT1q{ePkpJeZMY&q|YrghOv>hn@!MYCVZJ%68NY<K<Mey1L{Q`No=drk-5 z+~c^{=x=Vy+m>FD!xvwll$`%kF6O}-VPhFBG3S46UoYL=d*W*dd)2oU-mO8$G%kGp zl4WwfWacI9GXdrw9)8{!9I>s?sPxgdjXyW3#Yc;6>t+3A)4$K(^vR_(XQk)U@)Zu< zkc}6=-1FyYnpw!YMaLX-yIln<&utT~spvkafApCuGaHXa4BMoZfA{2j-dXp`o5?&p z^E5+A|Nq%@t(RvOJNkW{7OI)}^5}wZu9iXuovhaSg`dyaF4C7t{=0{D&EAETKi$HP z#hPD^j#BW{SSxjLwVzG)^LI*CHyfrDb-%rz_oU44x<}A5$C;03$4mayItBLc+ATRJ zmiGqTG<z9sHgBizo2$w?Qon@-MQ=TPpY!M0*G(&2EN|w1ldW&@Gnyc?v)i&ezd=WL z?Xy!=`~GI?FIRf^@kOGJ_&3>SZReU!iFMWF&OCj)VCOc&{jWd2uHHO--uuthE_Zi$ zKH0i@&aLfJSr7ldnEtd_s>Ze_ZE0%dZMEIKEb?(Lz69kkI5|6S+`L(P&N+rnk3usR z*c~~x^m1g8x*&5x(p#U)fuDb@TFuL4S>YFR#C+-V%?cR?`)$~LbPDnw9G)Q5Wg{!Z z;F;*SdgkR0S##<7^G8>BMFsCJHqVlep8oo*-u~;?R2(LWpWhz$WKutiN7tn-Gc4QH z4;KI2mhL}q;h|-5?)x}jx`sYBUqAiMCdtX_f6q>Dyt~qVsfKFqotKxccVD)bxU|mD z?9st}^M5?LUA<?5L+V?%-w#%PS(VbV<n-}r`48qiE3MsE>(3-4v@7`Yk0rIgVmGf) z<=gt|^VRdVFDLywbT7I>Ht2)c1Xfm7Pew+@BS(+^eSAhpNGM`c3g={X|6@m<T%Gjf za6A9TEnCh^GE-G;U9do*sku46+PLENy8O&*OD4aNJ-FZLMq}@mY+EOZN3tIu9BkhH z`r?TcBO6;=PA)E|<(Hqn_0pVbl5s&{{RvNn6H}$~e7UB)d(+B%DB^$i!pSpdO4`}k zRo1Unke2FIV?Q`aS@O#xbtRUa+$VniWsQ4%`u7&cp3VG)y=u?(J;eHij-LLYqu3{; zs^h}Xc~3L*@tPikBi7IMPAN)1?iRDRu5HJ1{s}4{Me7dUcAvy^#J2Xp)z|3->uz~S zJaPV<agR;x*|w14yklFXkMAfjjOplouvU5UNzK4JOy<wi9;Ms-U+u)4kQ(XvCu56) zf|Gh9v=abso})GTaW~J=`UxNMTHF?2oG@WRz=Ov>KR<uJt@M_Lm}&W<x9>N;aEae9 z%yZsv<AU^BnJZaW&M{j`?3~7T?p{r~vv!a2i3e-{$@PY<e){L<XBo>PmHS(`TABR) z{cCD!xITQIUnQ6Gr^PLP?vb(^dS$%@2Y$@uxU8C1wLQK3_}n*AGgtB)RyHeH=U?zs zwB`Kz_LsZgiQdhv%e~%JI=5`&*W%yd(I>>DI;YIu9cl8M-R#}|1Aj#hoSA2(yUQ@+ zN4kmD@>4g8zVm9In!DCfXV=Z9rR;5w<1S56`c*t9^S5B=*?Vg@ui3eII%}{~MDYW* zk8A<cHXL3W$G&flRnM<ypO|`QH$7FXc;DhSN#)St!<>A4$8K1pYj*VatDBgJ*xTDP zF*9?2bAGm~`b}iryhnZ4?%dzf*x~rN(DYyYOD5(h-4!AE^$E*kVx7+SDaI7PI`<;~ zSn%qaK$GwKg&B|YS!$o3+cvZG(@j<z`!6;-KMF*$>Ss+g_rHH-t)6oF_1f*ZSK}V; zzQ_FI<ca>1_UD&{MT&NAoX%liFjrl(ExfNP?(wn(l^plZn@a7Co4@+Roqe^^@$vC$ zJ~Ix?G)}+p`YY=xW79Nt?e(iAEpnN7=jSKCJ^IAw)ij?YyEc}ri5A@&)w?T8H;O09 zZ;IOTQ??I3Y`JD}UG~hc+5Zo0J-^=PtZtdlYtP_t)2ywtX02`C^yEqKmzjrlPTO3k zcwxVyUKaZ;oxUfbxp4&x>baN2T`s7tGM2fTb!F?mCn-h}Lgzl-_K3I9S{=B0Zsw(G zvFdlvF7;iBUL$KgegD<?O?9CLd!w%$yn3=V%6GR>(L*t_zQUt3YCid_&tAQAHRsF6 zy}K9B(lWhmm>A6y^-|M%m*wTmqsm*{e+N6yy>@MjvTez!m20`nKIayz*X+A}Xwkp3 z1!1cTKfOBrX!CiG9Xom+u3fb_Z1u{=;)gC;)areoTX1NR_l2@kEW4^hmuHEpXPLb{ zGvUC;En5S{GVX|&@E@$!GTHg@%}wJ!fB$y&^{FW+F!=kQZ?Zb+(!Ngl*i!b~80m|f zH}=_w|2x|~omnkScCq@~<8@!84)wJa7u;5ItGK=3l$`JjIbpFU#~bE`&fNDfdRIum z-pT_L!e_Qs@cDmx{`!L#&)-sW_V4-1OG0J3fAu7s{ySaR{dDhrvt*+T=5(cXo3`e+ z`aBFYoTYR3?2%Q+EPD7KXQil2T<*MLZPkgsi?*D0p{;?dzYA>3wabmuNltj*8gtGu zq?Dg;<HM#Vw&vZBKFoS29eC)F$j*HVm06t;+c+OHW?L3MHL5-qy|FlkVfXwg3(ns1 z&Uus9c&b=4U0J!ar{~G9i!XPiYU)=<YbUi#%eL2l;<k8Y&Yi7ooq5kWUf!S2$e6yu ztWLB(XGZV!w?}*83L2-(Ih40~Q-qZL<3kI(kG#B>b4Nsn|6sMgNoQwg<iB}lxl-o& z_fp>6*vKPeu|eQq1<Px5`(ul@n}>NB+f;3FDNL|be{}iVYeSVIpF;Bbmxr6aS*x?L zbVav+dVY@aYmZm9|7P51UC5p#ut~9n?`i1&6}gpDSJrQt&U)MDN6ozotE*wj+0T2v zKUm45RXu5H`}_}|(yyJ3>PzjIZhEXp)zzo>Q>^yIySLBwv-i9(Fc$cKYwCvbymK9u zi&sePopoPd<+*}MctwNgI?=9Yv&tPm>%6s|R#&QPFiA3a;n(FRCc8W$QoI`9P7RJe zE9I}WVY#{=-`1BlYoyEk^^(j|xN7&rtax;<FR@mpgWvw#-YeHXPo8O>eCf!wB|6`h zZ_AF2`o*90=+D<VJJ#23eVS|cc$q^b$G!Z8k^5>a@7=q1<j4^Q0XeyIt3p?2Tw22E z+|H*P5_eMk`UcyJljC^3mD#&?{CpVwM&tDVuEPu~w91d%f2ou#ZNBXD15cfZ>XvBF zplQ~xuD-7}tXZ$U`TDs9zLAUT@9f)i>dLV>DppU$xTCH2bE(SA78Y9h@a5c!pv$&h zoAS1`MqTjRTi$2AsjI?L?6d%%vNnI#)VgC=Pq2K+ztGq8bmbx+(bM5_(-&zxJEm#l ztM%fXh~?I+9J8gqNxpXWGR{5|lDabN<5CSR&9vM$9m{!3WYYH<PTi%S^8Y7u&W}2t zx!GdR%U-bjkuFa>cr;}RQ_t)_p9E?Y<a~2-bmm%@Kl}FfHVYeDQclj9FE1~1&pge2 zZq1#OhkxAtvO3f<_mb82=g+P6e`Nn;lzYi2tj@Nc_j$j3`{%%$6@0aqXQ%0^6<Pdy z>JpF;x|~xq?$6O@8zer(%$z8qF;(bRN^Y3`fdz`5++NC+x1Lu{)s&ndV#;AD=9p4t z@$nPK>55m1&WTGZn$_(#G0hK*vP?YctasPz%yYiE_4AA>znKL63fy3||6Z76k?XRB z>XRFN+JdI7eN$65GektUe|Nd~uUgCQ`{lVw2{*fSA`9k-vr3x(e4_Y+p=DY6`FUq% z7&cp%zYEx3SF0DZqhbDh`ETF8wMG~B+MoMm!0elzlXARIR`U3?rF%82^H{6jEoHxc zN+{&xt3wAGSl8S(oL^OVJF?zV)j7kfvM=@M_q96&UmTyITV5nC9V#hvTC1|)nb6GZ zic61h^xd7dp=?`KY5Mu4K2vjbwF;)bJ^t9>Pjg=22}h$nvohSwu4<~g7XP@ldV<N< zgPMN!nvIKh{m7PGx#iQM$=O=<x>3hpuivud)0;w}E~jTd;}&mPG|4hUC~iS*)Pcgu z?s84rPg_UFy}!9xogw*nA8W#a2FBKN%J0@cm6>Mqb6+U0On16f;70D;wPBlz(s^X1 z<Pt6_a!Z*PFHiEc-T3>Pz{D)i+S6xzg9DCPPq<nv^wMIP_2lk6g&&KJ)|<zLah>0{ zR`XuI)Z%@br%r71o8r-_^rpS@&&tm!X{(Dg7|%Y9pE=)qCfDjPp7%d==l9AUiaB=i z=3S<jCwcq+R&pFZ9)J1pI)%MSZkE}W<^6KXi{?sRJLam9cekm|H_bTdj!4#dX{XxD z9@kjUJdQfL?@Zz8hl*P#%HCbppA`LEz^cBe-;lXxWoC5Cl;6`Ww|opQ6PbHxTW0H- z&$f>B`NoI$+c`}&v#Z#3D{zv<x<5aeFQ3;enE$Bl-HRtR$9==^Z|*r|+MnelX(zJq zq>kCbg$r-oyeazY7xU?U#nqo}P0ws<e~}fnUE}a1)94*HPc*StKQl`3<2kPyF!k$# z&ufl;30<vVdV5zxK1a4t`=!bo>LPzLc^^y9NZ*}(+A!a0uBqZ?&KL{6{qmC-M6a3N zGOE1lVzsyCO=i-R>X}BOagEXuIf5P@4(ej+3~FIJs!9`6I9(Z|<L3NQZhL5G!4ZF+ zGhmZ)c3;bdw0G}qW|~aA8Eda3C%SFk-k*v80_OA<^F?;;;7K~lS1s12^TjpS4z?EH z;cxx04<5`So0t1(*DvE)?<d$=c&~Eba{ce8ye%GwKIOlrBX#!Bjpq^!lQ)@WeEeFZ zR%ZIp;r*ZEz9rMI?R@?)Uwz6$U1e@Au1QQxOdZ|bzmLyURZ-cHa#Bdme_l^#r{}Tf z{PK23E?qM6zBOfvNK;c22Opo_f!PO{8Xq`6J=n~ie|_=9lPMKdRYD>nEq>F#pXT&h zI*E-}sv}N-!{tSY#hEi_K79PBdE+|QrHdIRi^M_W)UD1fj!caT){kZ<Gc_WHs3Akv z0+fzwH}U&tm`L$*a&ofT&9krn_b}3@yj^tPxh)Ygb2pxBQv7Feza~hYeXG>g&klU* zU5#Jot9>+JUVSy`%SV;O?vi`2{42AzMxC2)e}1B}`zPPk0U95^d^vLbxcc?^|Mz?i z&fYWqTGHQzD|al<U-jY92?Lwz_e<V{|Gr_j!0A?7UR!(4n_CSh#q0(5?J!JxA2O>u zU}a?WEbCcIS8wUFj$XFuNf`GuIf=e%&)_bxvsIp#K3+6=A?M|!7kO<)^_;J7Mc;h- z{GdB{W=_Z|qu#&!ls2R*9kz8ZQoHUId0D+g*>suNiK4xyR<XTpXEVHbzcp#o_8fNP z26T1LKk>A~|C46_6K_Rs=02ah^zq}zoV>h8&!6u<aNvMV{fRrf{Ay2~u{pDGchnv2 zl?=M({IN$8@_gPL<hFSo&d6;!p<?RZ@P)5L)Vsu19b?-P6|j=);f<4LKgw7#pYP%S zV$)gGvSyL^)>E^eYZR&FEsos$)i}ub{Rb`E=VzK6S>)FGsegZT!jmOM<2Bnxy%l`R zZl$}(N1bVzaIi;jdvE0JZ4<WLEj4=XTqRua-MDVvZL76^jf8csYWbz@+Sl<+@cA`1 zW5ox?0qusH^9&7deU|37@|^L|IdbvE*I##boq2nE`^T?eQxCOp&ao_J+iUlJ?aN+m zvxROGZ@;nsu9I6Gd6(HwzS{5XzP%dqJEy;XS-mlP5r2W+(Rs_>Epz#2H|w15>g8{@ zzX@pnwm7^%)3BByb8*C#JDteQ;TvbSpPidwT5hUXyQi=`BzS3>wOY>U)cNnuES&sh zitODvFSk4rytVl6%7tN%ulyIdX&y3l_N{=cM@7T0Pj6RF&0Cw|I72g5{OsZLabLA^ z4WqA2)eb(oQ%u)R+IRaWtGqe&eZ8MgXUDDxxx_JZrEZ`8=aQ8@OE>DA{>rEK^`%jr z)?J->1uxEP#NEzTx+_+>_4b5<zWZ*!9tB4BM!of!d~frO;&ARg4;=oB`RrZx@Yk0# zi&a-wWY?ZN`Q%OcycDHty-SntuFCuyxK&J-O;_EEdC8pAqS*ARH`Vh@pR9;$U+=G) zer5g9FH2cUJ|8-Kmh<_pxij}Do2{+;IrseLf0n(iS{6G^PVe-c75!$$waLrYWnIZK zHI3#^J$Z8Z9+|yu%he;UY}fS5GR^Ae^SM(by>a_-Yq42(D!!qOVgC~sEq$_hl~DNi zSXIsm^Wv4>^y%u_e>&z|+IZM}YeV1f<$WJ7?9rR|bV|n4&=+DmCe^m{ZLB^jG3UJR z;`?ii_jFC$dgn*3v0AfPf!ZUj=-**SICKS1n<d&L=&G-aNjqPmUDn5)@cnU3+4*Tx z7ooI>cW%1U{ilZg?AG~`f3C)z>iyU08Mn0f9ZRi{VSVnC^Ae(=SyQWx&ExWVRtmld z{`#b5{kg?=f3?4nxI6hlaHz!AD*nXV&n`bZYQ**}?nJ6DmZtpNT=Cf0GgfZ?xBCCS zFl~|Leg0sZYtM&mj-d|>{JfuRS}P(idg>$h^Bdx8(%#QFA6XJQ`~Ody*Yht&>^OFG z|91n$>e)SyEp2YjUw>HJ@XPhPGI#d(P6#X1d1c(B`~B;J`V-qO&NtRSHCb}uZ_5pD zibb^33N!*M-2Zo7P*F>Z6`YIOK5y8n?b*BRo66tXj@eQkJ2%en5aKP^zSe277U!SR zXNp!YCB+Xf3fyVxoSW0+-QQU9v1qB&&Y~5sOHykZ#7`z#@0|EjEcsfIj`N;1hSRh) zld@WPG_W+NPu(uRFkdb)YyVA`>a!_@_32$HGfRYS)y@x$UF-Jtf!pLdZB5H3?qVey z+yZYj1<fxiyjyeauJN(8jk2p^COy5DcX#jIKNSZ$_>7r9u8-xce*UayhI!Yji>rVB zbt*b|YnH(2;GMSf;;wGkzUj!dg?e^#_ihXo-6Oe7zV>Ltu4ftnf!C@<lw<QYS3OM) z`egZkQN!2sR$^09t~>l)yjSN&+M(y4k6m85O)A<teGj{TYQW9OYi$0oyxn{EPt6jJ z*z~^T&9h~n#@0wm|1lKfSXlYoX>-lbqCI=}c6N3$D%jY}30)m_afzpJ8=q`c$DEKU ztK-=}v%6b<RhW5War%YbrU&lb;8~vbbcb-+%;%ow9J|*XK6ra(l98?dq51@m+g6$D z)<^mF+Esg2R84Q`={4@vc%9Z=xUJ|^$i|wdrW##Id2<e3Rylmz)F+Ea+KoSL>nG#7 z8F%|OtzSFgWWY7fl)rs%Th`6-mN)P0Zr2kEe~^_Tq~*?k%b#y~O@IE3S980sPjTNJ z{C@7^zBNj5eMgPd=1-i;zSYbAaaIb`ucj|?Py2pY$EM^wK2{=U)5)6MU!c9xK=?vO z(bcyn3Z{stu6z?T=f`RD%ZD%DIe+}FrpMo6Dejv!t7c4gS$-!eG5h(J5B_W2-rkrq z!GqWT{gKHf?`6uLPR)GsA**zQN2<O|PpVVwy{kzDX-Ub+FYoL$etmttx`BZ}a&q!A z|M_t*YJ9GoEeOs{y8knyOQy<aX&j%3W8=i#>Z)RIAAc(KKBscyQS@n<o0Dy8?$$FF z&i{MhT<X^i=H`yYNhZC&RMU3tKM^3I8MnLm<daR;)pYYeuTxPidbgX=$L86gBX8pa zw^y7Cj?YVLZ(b~XwBS%?qENa$SK6y{eSdBp+{6&q%ab}+bIrUrjVl*%EIoZQ=$Og- z)t~aV>-10Jx>V`M6DRHWdGYR><sS^H_rE;*=l!1_xzz@}T~8)-sw7U>bj@|WdCDtR zPUmT?xBr}b9{zvMai?om;4a9|Y+KpWd+w#5RA<=Pq;p>Q$*FSljV<n<yKs)E+igxd zS7H5P$Cgrd>%8cTH`cNgIfO1$T(>JY=f2pnxk7R#Ta4Yx-<yP&<bC<M#c-<E>;)5E zRup}e`nc<VzVYkIJ>^1w_t!VQ|MUJu<jRDN&6{GP_hrPk?B5sfzGYj3Y!)a4l>0*8 zd={N)Q_DH~)s)GLENk9|a?JVlKxFy+DF*^$Wh{$CiYD;<?AW-8C3Md&1A_#{*JWpx z$K5Hr7VpRCqnXO(=|8#h<%XA!@{9Dl#aAku{W0RyxA)q6{-v?M=F6P<`}n5)t}MR& z=hghrB`5BwA-XD0GL~oE@YwjL_Iqf~x}Ej&qNN0_{%U8N=pO}-$X9Ic5qWkcC*}0! zTJIm;?;K@km$>iu2%QzW=kTu7@W5SF!ADs{Qe`y#MRxbwDu{MIIpOOQU$L}d`~C8E zwJg@dZS9NlE$6Je_I+p3M<sFNK5rKrkCQjcCy6f4i?`2NT=)F?=Kt@a8@yhNeaT*w z`gw=u8e7@3Z?&su+E>Y4*ZOt&^jZ#$vl{8T&);24cCo2&im4I0`8B5aXLy?ay<;C= zZ?vhY=-#~hyTHV(&gP{;J-Hv(WFMP4b@t9_I*O|98+D(s>v>07dsi2U1&7Uha_z1M zpRU~TKd(h!JbT~dY4^PQY50E`>AzL8RX|;wjAI8kI?vesSLb4RQm0jYL#U$TnjH%r zBe${EzOqex`li=qnTN+LjcqMDkEdOjR<B-CrD?_h>38f+)H`;=bd6`H>vqq=OsA#O z8Mp4SxGFWhJveZMebG@LHZJY>G#}ez8#;Yg+8yi(div_)$ph2o#3cNvH`zFEN3yi# zLdJhQ3x3aEzkI`+tuvV?pL)LMT;SFI^LOh~u1#w0`SfAom;GPo1SERS-nsvC$|aYy z^1mGwAvdbNJ!}8zTxiCo;rCbY@CON*mi5nBG;U5bb>C!LX=M25;JlqYGlUNpbB3ha zzOczQti7t`;JVhZ_@(h1Z>zA`{ihB!USnpvQ1E||PPPZ%U$*4$$Hh(Ne-hYRS!(z5 zTY8(tYLDu+xyLI%t*q~pOFEbPiR;dRq;3Z%CaaAWj0PJIU0uzs?5*LD*!up?(jz^R z-t6CJN=)ChbY6V?E7`x1E4-gorv(H|5D^e?h>5vle@;hHu~F4~nnC5K6dxZSBfI(^ z9~7ren-+O#*^(s!A|fsY1qJK!*|`55&R86AWf`w^^*hBa)8D=>Kl0}s_dRJjn~D!* zzuna)KYaPpGax{~D)t_?GNf<vWTxBNF!5D?PMq+#xSHwU|Ed=$X=!c!{r>afwJUP} zIxQAFq$t3#P*X;UM`({|$W)0v&$*iKf7$b3uhSp7UgY6-qy;r-t7C93sKGX3|KPAN z@*<V}bDK)bBObo?={|aK$v*!|&Y~j%^>gy=R`xeX_1>yfXup5V&j>MIe=l^ux?Ebq z)~Fu4c`8;LC+xX8|I?MMt#j<_=PA4QJ((Q_Td3my&i=oqZEE{`_V_ucO6Jbw?UOtE z;!e3i-PbjjzD=1XzA$L>H<NOc-wH7%XXozKnIUv&7PEPWdBdg_S-r1TAD&)GykcH| zlgXCftj=lidcP#=9P!<57AZG(ZB3}$)Bj?}=2R{3ysZf@8z1hNZn88Z&`|LI&dB`F z*}KEmyx!8icK+@Cx1Rl|56n>URI;&|^WZ^3PjByMpV^ZpIVB_{FxH)jY1@=1@Ve<$ zfXnO?mv4B>-1?#HI6p^Cr$XC%SNMU5yuRlrBrEDTn4PLy-&gTJP*=8B`)@NlDm7H) zSe(+I1EuqpNW@vr#2miYOObo8S~btb)+y{_chu9fhSkRNIo67WXbJxOpME_9v?5xG zIUy;jDQ>-fglhNAMeAZD*`L3<l6!HkzIc9W=zAd<KE9Om$%kL(t)BuNZ#T^i{<dms zhGB+f;H+@HvhJ7OoG+fWw$BzmS88os>7H}0x@)28qwg0>@}g{Y_1mqs$nS0P?i5<^ z_*?$lf*gyv-80RKCp<bV5wh5d`TNoR+nATWi?c|)sG4D&%5-<{s^G0%!ltv!(mWni z+`6^r(%&mHWY_Fjm-b)_r%BDe-mT)3x#zl1TR9W6OE6pY4SJuY`{ahsB|DGyNzQ*1 ztDC#HdU=&B=Z&ulx;_{0Bpu%}&!p7XI(+ljfN67Ty6n{Xx6U@68)oBFy~W=2O4giT z@{e2@Utce}rqA-r{D|vYhuKFbT7H}U@MmS6?6sz>EYnvxxhFRF%=uJR)#O?``_YoH z#ot~WIHJ4#;**!Fo~5;i<o&xbYgOFlopV-NXg*YMzPtKj{`t#W3MWmM{rqOJxXg?D zO)IaP#LU0P<Gxj@bgjPS%qhoheq3mM7VntmcGmxQKxp-xv(Mw=pI<z>Ci%;fzc>2h zoNrt#;LD3X!jUf>vMKzL;LaTFqwcLme-2rGV_kjI`dP79?A2#A-=~BxjDFztP1fqj zJJI9<JM-SU&F3bxOe$Ji74Y_C*tJ-{a~|^LC6?|YXI}&^f0DiXqt=;INtu6oxZCxF zroT>VYI|{^^vI4c3wpDatIV!_e12+wW#9@Mqt*YN%X;2<epsp16ScQ}L+<Cy&q<QZ z)%s61sZCy>ce~|d!`3-Fie}nAUVFn*ui<V#Z$ibXg`KfKlbB0p>~7uQoR~A?F7xt5 zLX#Bd9iII6r_~-I=lZ*65B|N)ktuq7k)865BKz4_PIz5Rd#h?zw%y_B&MBKGPK=3s z<+_pS+WTYqvkfJ;G#U$r-@LWmiSJ?Kv~2sj!%L%tBmbsr+%GrW@bUE*Gm#ZNYs_w& z{VIOuT4|(QV$VLUwlC=@51*>nPF<U)iR_k7qe>Q@I{Y@L`^1DiA;0xcJNC)dZS_{t zo*-NNS~+-@&Rx_Qi-P(&_iY56CfA=y4;0<HvaNdiqxk4Q#@NREL)TxLQTIiZ`PHn& z4z7{!1A9t#o_#fSx@YCx?}wHici2_2GiYIq<(1N1Ms^3fpKO?W=R(7wO_F<G?R(IF z^|>dDfz87YU5{sMd*gRj<`L7(N@F$O9N$w(^;x^GEnWIwLG4`p`Oe?B!teE~HGQ2e z|M=o<Y3-$wa<);6EH=y${up%d^NB~UZ=W4!b}N}7*-`)2>xQ*?`jI_>A-!>D-;2jp zdM&Lzerf$WRyU($tu6niw7H3McKbN~f8Z~cbM=Ao^XN9S@}v9a*y_c}zI>P3`{!bu zSdQ_-&y|l~hD7(SoojrrdAZSwH=bc~bxw|E%6b`p&mhlK6x|8ByQYxAaqr%Om2ccu zD=z*R6sMqLwDdq~%DT(v-McQ7KC7_WaWnAV(diox$|q0!toQQ8=Z(#a?zoo}R-E{j zE0`%a?Mu()?Eg-mz8qfMqI3T>@6RuR=i+kyeRkmR{m1Q;8LL-ayJIDmiG-Q#9fD6+ z-JZD7cgrG`sj*$c^*`10c`Vmxw){UZVO!~?n4qn*q-wuS`tU`M)5;-kR@+{wiM#Se zm(Oqh_b+bRd|lV*{aG`fMHD7$mByd=_nH01hrbe5*LBXly}<dy{N16Z?vox4pN^X5 z_<vave)!UfMy0&EA7a+0KJ9;Wi9P0DWs2I@dzSA`Xgzuwp_5!B6<Hau`it>8H?<}0 z7Fytbk1DL+!+h(8@tsLpkKcwp+In(rucc?nDP6H`Wq!ryuV!88JImR5<--@hn#Or| zMAy{0O)1^1`hLM3j@eS82DLLgSBYF(CN)n@k}JaPn$_K@;mal-UOn}d($u{L2Ip?d zp198ECB0{N$kUH~Yh5xNtIB4XJ~Wd0RT&Ty7GVACp1bA5|297y#GC(Lb^UhydWTm~ zVsgBY>diyy;8}|0KQG>WV_h+0@BJ@n|H|wBY_px=wk$JmbzJ@l6Gc^?U307td`RJs z{~qsfC*6KSair~=v%VMRNcb+U>wJ0rv_|A|@v|b$5tWY&zZtIHk@MB?@~UUHsv@qZ zAHR#0D}S%|Mf%$031M#|H$AYZomN#)_ta1BnEm4TwWlK2N7gmCueC~CdP2Wn%~EI6 zsZSAk{{O@0+4fGUd!qV-O~sYh>0gxpaijlF_Dzldo1)Ppa^llT=XDd(f2$Nrr?BeB zGCkqiw8s4O)Sdn_m~I^06)C>TFW%?H*NHdo#Gf{-R2I9YGcT;H?t1oOuKVtlXPYPe zU)TRJvC8C9@wq?Ww6FKPzPvDMV~olcjBY~R%cNHwy!(9)otAcdRqHpu(#tcwy6fcT z-4~YcTvWXH{PNzFA-7mseU49FeZAwn%zDw{<>}eMhw38_f0}Bpaeu4w)E@4Oa#Ka8 zo^hP~f$8n#$2$DR7fOz~mA$z!u`nm{*6dBs!!|shr+42bXmhW%GOQPKm0NoyzhB`m zPfnSuM?cH5Xx*N5<8<DJ_lGuLZ`*Qeo0#a1Q{NsJvT{u>`r`aA@$WrXNjI~r8zv_G z{QYh<tIXNIpYL4q*m*;v-dbbr?2A`la$1|ueehvc!IZezLj8Z+-e|ZhvY%8CO_JkS zc=A=~o(|Pd$9R?2#Xb0O@9G)JJM-S{w?CZyNM%;^o_j2y*^Ipv(#O{y|McOZ?zwmO zoLyF_@=aU+&i&Tp%`-NAQrZ5_ttjK8#k2VJ4(9dZKAWoLFgiA>w{<VDJkOI)u6rY0 z*So4`f4}U`)`P#QXG`A7Hu-%0-Qy=qIh6Ed(_e3oH~Kq=>AP9pi$1;Q8=iRfhnW_X zl$^1MkuF=f_G)U_yB^2c>2g;MCa20j(0y^;<@B?{;D~CgS+~Q#8P$KWSr__c`Sj?C zHE-8%$U12dFKT_fC*|Tk?>oDyyS>}ZH@<pM%M-R%;@-uc=HzyR^52n*-X9Sv{l~D{ zsVSmxaYDcOzf4d_p4z1QBKSS0c6z>wk*m`smyN0^lG}^61~R@`uwhYVc>1Gj{)xX5 zMSFMeO0SsLRiEX)RPyPXr*~|tdOFzsJG%XqHZpv6Xz`mF<9zocgVi>l@MDWo3s*h% zJ<xUV$Mx-}DxGFad`vhW!*-_g;ZBxSo8(I7ZJn_%OEmM~I<EG*=8eA}bI<ax?6|kb zYJSacW9K=cDe;kE5kHNRUm3Rf=6HSOOq-$=-tW)0?a33S!`UATu6uRQ4F4k>b@N$X zSS4rro>hMi&T?HGDe+r|IU#5po9@22b4S*x$-JoLiJbd><wV<WhGCa?xk^r3bJGbr z_3{1JWr<eR+-LvJP4*O?dH1XGqrk-1H)qQ~<3D;+;=;3XYc1Eunb|+fzPUW($v$qw zD=~eg-*Qdf2`9ZDiSB4TD%RM-Qj%22l#tZAI$YdsT7bx!?*Ey8@3~3tx;};Z{!Z^s zN#kjJ?~D!gQoU{W@4I6Ct60xWt3y^K!tCSW(nk^JMBY1GmpaN-SsN#^{9i|61rOh$ z>%~k{-kf-Udew6~{(o=Tk2*R!201t|6c!f#x7gg$!ZJ-K^3ao$lMM|GPa5ZXd2u;9 zI<l~{KmV8ZVYh?y(M4vtH*Oa5FWj4Rf8Hgv`AJTb@7<9pZ+I$uszZMwC(BEliVqLo zR+$*h<nj0SZ)$3~@bXjLLFbhrmlilS^WX0Z((3e=7v5N@7rn)I#{C;k9X$>o^qkd= zjg7%;d$u<Dyw;RD+n#%HNper#56x<xZ(C+dHic`>ln7-yxI1p~&+x+w%pF5J4_2=; z_>ucGe2ZYWzI)e16@e#>A3m`%HDa6D0q-P0^py~kLEzO*2rYlqPkg?8d%AwSn3xa; z3+u6)H+Oz;di?UGrjEJ*2bWJxP0hnrwe8(3OpOZ+I!xhHNbpYCga7hN4G#XdpQN(z z`fEc89*;>XJV6dAMv_H4Wm=sYebj`v)t%4LZFy!ZJaftvk#(`V-9kb{^yBsjxM@B( zU~X!9^xQeV^z?KeU*FGj84g|hKW}a8g+1vRTch~o?RtFF7T5m%HbpP?SMNKC|E4@_ z%>8n<pgvABJO8CEnZZ6jKA*PC-SBmP`s+6xrnCOLmsrV8oH$WJQu5-~>~I|&og)YI zUmTcvdgG=|i)w#=6VVRqd3}BT^PSeKKzgzjP2NA8`{>ox)h2m&A|xKm@A&%l^>uYE zEv@sh{;g~O+eULQtUNzKrSr%UmosP2wi^Cp6cZEMQ}K~$Z=8P4U%4Ar>PMu`Rx6kp z&GfNh{MlX}<vHoo)`eiBA712OX{wi1G-;~mkL9s9-?;GKAL%7r*&GW6Yc3p=I63k5 z%zroCcifz|tmNgTDeGP|zQ4fQax_E0@$hbU;mzF%_5NDZJvZ;4x=T#A>inY*!iVdx zsU`J3tDVqh-cebs{PR<dl^OrDuGh<Z;$>X!a=Bi-W9xt8m1+<7M}?faTA%;_rMgu1 z{t5q8FSvJm=Ic43&x91`R&NNn**!CR-{L&W<hVO_#~1Dmubi^P-ROV5U68ok+5bW- zFY5eHl3KpXC*}Gy%P;xC^Iz#*U2%C2dvZPJ<9^Po29Aff%ClcQwOC0^Oe`Y8@}cby zalJhr^J{K#JiEGm;lVGdK5xUsOCz~;w9S*REQ`*F_q#Sl!%4k-VIC{Dj*iZT!pws+ z)_%XhxWq+J>VhEu?k&YrrN1Q}+-ULT|3tkDcWsZzn|oa<EHjvIwz@MoR6NW4{ka#B zjx{-}TWsFW_j+=uEn+u&q2cAr$uDo({aT@Yp*B5cmPLJonV8e({U#^gzfHax$=d7w z^~gn)-;v5*QDUxrjBD>qoVVH8^56ISGQ4veZqMv2;kWTja*NWvK5d<&X^nLF`(r|K zDQBk%Cg1pYfuYUf(6KE`-)p_tlOeDE&+g#-`(F=kozap~aq8dt+n<jvJk=9dKE-%B z--Zo$llQ&6Hven+f9asb8gYEtk1Ni#&3*3K_kPRM)OzJNw`!cO{+@laB6hMMm%a7I zIn2M>zO0Jpy2+lEtZ4GzoA2yj?>ozNu3kNQ;;y59)9vSne=dnEz4G+*<AD9_j+gg% z-rC#xT62BS)Rz(`0{p#uQq)%5=3UTv(ehu9hg*HV^=9)W7wRqs9s3coJm{y_4%5$% zFQ=KEkbjf(ZJ82JoKR1_E&Cg-9hb76#I#MfKDPe1{Kxo+g%hUc9sH8{*5lu`>8qa3 z&3tfs_QlQNLUrGt{))Kw&0OpLEPt8zn=2oinlJ>}s85r3`Si+l?<AuyKW{{E^ggh4 zJiqwx{ST4J>ZhWX?7TO1*V{*tF*@gs-W||76|&W7YT;}>x6H{Rk0$YCB>4&HT3%RH zb@KWVpW@#V6Hf-7$&Ap`)!DG&z@nVmWpVxwGjsmbKk=N*8EW^pHQ3z$^YQh<AJzvq z&3^6nF#2-)gkn#RpEu((y;u9ssg&3?F<WZFqyEpo6D57Ct}boSsh8frzT@bF?}|?@ zzU2CQccRSPqR*=$Hcs1o{gKDYoOz4GlPfkgFSLCoaQ(abx3%m1SwAZ+k&$+rd(Sgt ztCUHQRuyxChwI{tOOF1P(yj75G+~wF;;YJv3omC~$k;S(!Nny>0au>f4mJ&yIm5uf z5)C>RAo@kp%)_=m!rgvM&2imsi+|RCEVwsq?dPK>q_!`cTbO-oX5HZ`qrH*YVrQ&Q zEH9oUIc@r1(|}!>=5y3^Q_lXJ7;!K9SYl-Iv@mnW)fb;+KR#4v>QG_wUop;(^XKyR zL#s4nS1&F4u{$)z|72a9_n*TqK}r5amREc0=9@2^w3D+asIum#*2iByUp?ZbPZZTg zxdz_6wrJ5CtNMA}$0w|<nYxyJ>W)LxJ{*5hyfV4!TK?Lzt+icWww>0!uyB)8tW?mW z`IAK^@Bb@$?cR@_HfgtiCCfzo6hEa_cf~||NALZwiY?Ff>zSSU^yB=mNw2P_U0C;; zrS9)%7ID4!2T%5yw(#WizCZK%#VL!xII)xK_P<*=l}E*Ojrxn*rxi|n^B84y-dSaO z*ji$9?T`Oki|rJB+X`j=zq>mvxj2vamXg;;e+AyiDo-b~>#9;)oOQN*idod?;i|Sa ziTmO|fygV00xkk;9ZL;`er@i4vGB;VgRUzLxW%3<)V#eVS5`~;wAtLV;(zP>-rwMs zp8vdd-}(1HKjx@ky!W4Na`5C2d-wFOdoC|%eB;84fX7EyKF+B9BlVt{agTIe+q!Ao zFKVPCt&SM|`SAa|=Z~+4ndewsYIuG3uf(UH55Mz1c(~PVN83^j>x?G1`FHA_3=-nE z3eK-SclhaDmh4i=P4#=!mpqDSaXh?sa)(n|s1?hxsxLNYovUxh-dXkf$a0N_H#ToJ zUOjL(qv=$_p{dgtub74=T#qz0%fH_}>ld@cF2VSceNVr?ZoMv~s}*gtWA5diYgW?h z+!}QL=E;<WG6?bNOqYLnPfY#RxtoR0xfzazO$iBmSkl+v!o)rGVwJ7C@<oZnn?G6Z zzUAFvDe5HCkQA-?&Aj~aqm8mBCcT{e<Nv;YueJLZEqTck_f*Cybmgn-<$kXs=C~WF z>P^>vSYl;pYkO95e&V8w8dcTRfzi?3J9k=gc{ca;@!fb^ma#QzS6uS-Zceu5H5o@7 zY~<W+=GA4J*xTE`v=tT>E|L9TpZg*uc|+h|;|!NAwO-Rde*D-|!xy{0hR1AGJ=<BU z*B1qLrCpd{KfyzVqy6xo|F=vID~r~b%(cAEBQ>!Vbd-gLNK@3>WfMd{UB16xjUhJu zoN2RL3P)4JqD4wSYV4*=pB{XI>u^;{3QKEi>x7djCAv)4>z%W<M(IcDh_xI}oE6i& z;9`c!hu?oWSeP!nESYfnsmSCcPI<0Y0}G3epFb-ldfirptWph++I4Qu>!WARo!hi1 zGFya;^-P-av17*`e62DxHa?t|+O>Lh)LOT^JUuQht_2}liX2R_-A7Ef`zgt|O!Z=& ze6r=yqogBAhIW5W7pPA@xgbD8VXD{5D3^7TCQ7m{J7dlT&0BXpe|7^Gha!)Z6GwBK zfRlttivSz1VvD0QhvG~2-m_`Vx8Jt;Enm#*bYhhd58K0!6$(1v&AD3yHpQqcUc9)| zL#1ioK06B;K8A*a2@52hJff!ZFjUyc%{ZG@!+h58!HeW0Euhm)7(8A5T-G@yGywpX CrDyX1 literal 0 HcmV?d00001 diff --git a/sflphone-client-gnome/doc/C/sflphone.xml b/sflphone-client-gnome/doc/C/sflphone.xml index b104b8b2f8..c08d76564a 100644 --- a/sflphone-client-gnome/doc/C/sflphone.xml +++ b/sflphone-client-gnome/doc/C/sflphone.xml @@ -270,15 +270,31 @@ </sect2> <sect2 id="account_security"> <title>Security features</title> - <para>These features are only available with SIP.</para> - <sect3 id="accounts_zrtp"> - <title>Secure RTP</title> + <para>These features are only available with SIP.</para> + <para>Follow the indications to <link linkend='account_edit'>edit an account</link> and choose the <guimenu>Security</guimenu> tab.</para> + <!-- ==== Figure ==== --> + <figure id="account-security-fig"> + <title>Security features configuration panel</title> + <screenshot> + <mediaobject> + <imageobject> + <imagedata fileref="figures/accounts_security.png" format="PNG"/> + </imageobject> + </mediaobject> + </screenshot> + </figure> + <!-- ==== End of Figure ==== --> + + <sect3 id="realms"> + <title>Credentials</title> + <para>SFLphone supports multiple realms.</para> </sect3> - <sect3 id="accounts_tls"> - <title>TLS</title> + + <sect3 id="security_frame"> + <title>Security </title> + <para>Please refer to the section <link linkend="detailed_security_features">Security features</link> for detailed information about security features.</para> </sect3> </sect2> - </sect1> <sect1 id="call_features"> @@ -607,6 +623,109 @@ </sect1> +<sect1 id="detailed_security_features"> + <title>Security features</title> + <sect2 id="zrtp_srtp"> + <title>SRTP/ZRTP</title> + <sect3 id="zrtp_srtp_definition"> + <title>SRTP and ZRTP, the big picture</title> + <para>RTP is the underlying protocol that is used in pair with the widely used SIP protocol to carry voice data. RTP alone does not provide any security features.</para> + <para>Details for implementing Secure RTP (SRTP) were described independently in a separate document (RFC). However, in this paper, one aspect was deliberately left unspecified: how should the encryption keys be exchanged between the two parties involved in a secure RTP session ?</para> + + <para>Mutiple solutions were proposed to fill in that blank. Among them, are SDES (RFC4568) and ZRTP which are probably the most popular today. For the 0.9.7 release, SFLphone integrates support for Secure RTP through the ZRTP protocol, and SDES is expected to be implemented in the very few next releases.</para> + + <para>As of today, blueprints for ZRTP are still laid out and are recognized under the name "zrtp-draftzimmerman" in the RFC machine. The author of ZRTP is Phil Zimmermann, that same person who brought us PGP. Therefore, it is not suprising that he designed ZRTP as an anti-PKI solution for key exchange.</para> + + <para>ZRTP makes possible for two parties to automatically establish a shared secret in a very simple way from the users's point of view. Indeed under SFLphone no special configuration is needed, appart from enabling the option itself.</para> + + <para>If you want to use ZRTP, please take note that if you are connecting to a PBX, this one must have been configured to support ZRTP. Unfortunately, security for VoIP communications is still young and chances are that your PBX software won't support it.</para> + + <para>This does not mean that you want be able to benefit from ZRTP ! In fact, it turns out that you will be able to use it, as long as the server does not need to decode the RTP stream. This is often the case when the person you are calling to uses a codec that you don't support. In that case, the server will need to transcode the RTP packets and obviously need to be able to handle the ZRTP stream.</para> + + <para>Obviously, if you are calling another user (for example by prefixing the number with "sip:") directly, then this one will have to support ZRTP as well if you want to use it.</para> + </sect3> + + <sect3 id="enabling_srtp"> + <title>Enabling SRTP/ZRTP</title> + <para>To enable ZRTP per account basis, perform the following steps:</para> + <orderedlist> + <listitem><para>Choose <menuchoice><guimenu>Edit</guimenu><guimenuitem>Manage accounts</guimenuitem></menuchoice>.</para></listitem> + <listitem><para>Select in the list the account you would like to edit, then click on the <guilabel>Edit</guilabel> button.</para></listitem> + <listitem><para>Select the <guilabel>Security</guilabel> tab.</para></listitem> + <listitem><para>Select <guilabel>ZRTP</guilabel> from the select box named <guilabel>SRTP Key Exchange</guilabel>.</para></listitem> + </orderedlist> + <!-- ==== Figure ==== --> + <figure id="srtp-enabled-fig"> + <title>Enabling SRTP</title> + <screenshot> + <mediaobject> + <imageobject> + <imagedata fileref="figures/srtp_enabled.png" format="PNG"/> + </imageobject> + </mediaobject> + </screenshot> + </figure> + <!-- ==== End of Figure ==== --> + </sect3> + + <sect3 id="account_zrtp"> + <title>Configuration options</title> + + <para>After enabling SRTP, click the <guilabel>Preferences</guilabel> button.</para> + <para>For basic usage, one don't have to worry about that.</para> + + <!-- ==== Figure ==== --> + <figure id="zrtp-options-fig"> + <title>ZRTP configuration panel</title> + <screenshot> + <mediaobject> + <imageobject> + <imagedata fileref="figures/zrtp_options.png" format="PNG"/> + </imageobject> + </mediaobject> + </screenshot> + </figure> + <!-- ==== End of Figure ==== --> + + + <variablelist> + <varlistentry> + <term><guilabel>Send Hello Hash in SDP</guilabel></term> + <listitem><para>Selecting this option will cause the program to compute an hash function over the "Hello" packet and send it as an SDP field "zrtp-hash:". The remote end might be interested in getting this value to add an additional layer of protection based on another communication channel. Upon receiving this value, the remote point can compute the hash function on the received hello packet and compare it.</para> + <para>Take note that for 0.9.7, SFLPhone does not perform the comparasion on its side.</para></listitem> + </varlistentry> + + <varlistentry> + <term><guilabel>Ask user to confirm SAS</guilabel></term> + <listitem><para>The short authentication mechanism is at the heart of the ZRTP protocol. Not requirering the user to manually check the SAS value presents a security risk over Man in the Middle type of attacks.</para> + + <para>Disabling this option will stop the program from prompting the user with the SAS.</para> + + <para>Such an option was motivated to be developped at that time by the the state of the libzrtpcpp library that SFLPhone was making use of. It is only from version x.x that this library can cache results of SAS computation between two peers.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><guilabel>Display SAS once for hold event</guilabel></term> + <listitem><para>When call is put on hold, the RTP stream is stopped and reinitiated later. From the ZRTP point of view, this appears as a "new call". Therefore, the SAS will be redisplayed unless this option is selected.</para></listitem> + </varlistentry> + <varlistentry> + <term><guilabel>ZRTP for direct peer-to-peer calls</guilabel></term> + <listitem><para>If you want to use ZRTP for calls that are placed directly to a user (without an intervening PBX), you must enable the option under the "Direct IP Calls" tab in the "configuration" window, available from the "edit" menu.</para> + + <para>Configuration instruction from that point are the same as for configured accounts.</para> + </listitem> + </varlistentry> + </variablelist> + </sect3> + </sect2> + <sect2 id="accounts_tls"> + <title>TLS</title> + </sect2> +</sect1> + + + <sect1 id="audio_interfaces"> <title>Audio configuration</title> <para> diff --git a/sflphone-client-gnome/doc/Makefile.am b/sflphone-client-gnome/doc/Makefile.am index f258a20f31..6727048ed8 100644 --- a/sflphone-client-gnome/doc/Makefile.am +++ b/sflphone-client-gnome/doc/Makefile.am @@ -24,8 +24,11 @@ DOC_FIGURES = figures/addressbook-button.png \ figures/systemtray-settings.png \ figures/voicemail-notif.png \ figures/account_advanced.png \ + figures/accounts_security.png \ figures/drag_n_drop.png \ figures/conference.png \ figures/conference_detached.png \ - figures/conference_attached.png + figures/conference_attached.png \ + figures/srtp_enabled.png \ + figures/zrtp_options.png DOC_LINGUAS = fr es -- GitLab From c38b106707c57bd9ca61e20e739c6a84654e0ad7 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Tue, 8 Dec 2009 13:16:17 -0500 Subject: [PATCH 061/188] [2553] Fix stop audio when transfering a conference call --- sflphone-common/src/managerimpl.cpp | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/sflphone-common/src/managerimpl.cpp b/sflphone-common/src/managerimpl.cpp index 75b3fb021a..d79591622f 100644 --- a/sflphone-common/src/managerimpl.cpp +++ b/sflphone-common/src/managerimpl.cpp @@ -1855,17 +1855,6 @@ ManagerImpl::peerHungupCall (const CallID& call_id) } } - int nbCalls = getCallList().size(); - - // stop streams - - if (nbCalls <= 1) { - _debug (" hangupCall: stop audio stream, ther is only %i call(s) remaining", nbCalls); - - AudioLayer* audiolayer = getAudioDriver(); - audiolayer->stopStream(); - } - /* Direct IP to IP call */ if (getConfigFromCall (call_id) == Call::IPtoIP) { SIPVoIPLink::instance (AccountNULL)->hangup (call_id); @@ -1890,6 +1879,18 @@ ManagerImpl::peerHungupCall (const CallID& call_id) removeCallAccount (call_id); + int nbCalls = getCallList().size(); + + // stop streams + + if (nbCalls <= 0) { + _debug (" hangupCall: stop audio stream, ther is only %i call(s) remaining", nbCalls); + + AudioLayer* audiolayer = getAudioDriver(); + audiolayer->stopStream(); + } + + if (_audiodriver->getLayerType() == PULSEAUDIO) { pulselayer = dynamic_cast<PulseLayer *> (getAudioDriver()); } -- GitLab From 26ce7dfd12b813d2a112193c881334dd53b415b5 Mon Sep 17 00:00:00 2001 From: Jonas Fonseca <jonas.fonseca@savoirfairelinux.com> Date: Mon, 7 Dec 2009 12:29:32 -0500 Subject: [PATCH 062/188] Remove undefined SFL_CXX_WITH_DEBUG macro It was originally defined in the toplevel m4/sfl-internal.m4 file and later inlined in the configure.ac. While the definition removed, the reference was not and causes the configure script to print an error message. --- sflphone-common/configure.ac | 1 - 1 file changed, 1 deletion(-) diff --git a/sflphone-common/configure.ac b/sflphone-common/configure.ac index 8ea46baa20..1a6b5e5eaf 100644 --- a/sflphone-common/configure.ac +++ b/sflphone-common/configure.ac @@ -90,7 +90,6 @@ AC_SUBST(PKGADD_VENDOR) dnl Check for programs AC_PROG_CC - SFL_CXX_WITH_DEBUG AC_PROG_CXX AC_PROG_CPP AC_PROG_INSTALL -- GitLab From 1c9753a7e2bccb0c11096e306d64b7fb56afde38 Mon Sep 17 00:00:00 2001 From: Jonas Fonseca <jonas.fonseca@savoirfairelinux.com> Date: Mon, 7 Dec 2009 12:33:00 -0500 Subject: [PATCH 063/188] Tweak mo clean and install targets This ensures that .mo files are up-to-date when using `make install`. Before you had to first run `make`. --- sflphone-client-gnome/po/Makefile.am | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sflphone-client-gnome/po/Makefile.am b/sflphone-client-gnome/po/Makefile.am index 6d2d320a9b..2f8eebd1cc 100644 --- a/sflphone-client-gnome/po/Makefile.am +++ b/sflphone-client-gnome/po/Makefile.am @@ -38,7 +38,7 @@ SUFFIXES=.po .mo .po.mo: $(MSGFMT) -o $@ $< -install-data-local: +install-data-local: $(MOFILES) @catalogs='$(MOFILES)'; \ for i in $$catalogs; do \ destdir=$(locale_installdir); \ @@ -58,4 +58,4 @@ uninstall-local: done clean-local: - rm -rf *.mo + rm -f $(MOFILES) -- GitLab From 68104630cef2e94c6a3ec30fc80a0db0499052b4 Mon Sep 17 00:00:00 2001 From: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> Date: Tue, 8 Dec 2009 14:03:00 -0500 Subject: [PATCH 064/188] [#2402] Update user manual template (localization) --- .../doc/C/sflphone-usermanual.pot | 470 +++++++++++++----- 1 file changed, 336 insertions(+), 134 deletions(-) diff --git a/sflphone-client-gnome/doc/C/sflphone-usermanual.pot b/sflphone-client-gnome/doc/C/sflphone-usermanual.pot index 337598a62a..5783d55d7c 100644 --- a/sflphone-client-gnome/doc/C/sflphone-usermanual.pot +++ b/sflphone-client-gnome/doc/C/sflphone-usermanual.pot @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2009-10-26 15:41-0400\n" +"POT-Creation-Date: 2009-12-08 13:58-0500\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -17,121 +17,163 @@ msgstr "" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. -#: sflphone.xml:296(None) +#: sflphone.xml:281(None) +msgid "@@image: 'figures/accounts_security.png'; md5=14161ae9857c046d571e5e9501c35fa5" +msgstr "" + +#. When image changes, this message will be marked fuzzy or untranslated for you. +#. It doesn't matter what you translate it to: it's not used at all. +#: sflphone.xml:312(None) msgid "@@image: 'figures/dial.png'; md5=81ff4280c293e62a49fad3a4b61b9bb5" msgstr "" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. -#: sflphone.xml:311(None) +#: sflphone.xml:327(None) msgid "@@image: 'figures/call-second.png'; md5=fa490e3b07eebaa9f4ff719f579d68ef" msgstr "" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. -#: sflphone.xml:330(None) +#: sflphone.xml:346(None) msgid "@@image: 'figures/call.png'; md5=ecd96beec76f808b5c1469ecc1293237" msgstr "" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. -#: sflphone.xml:348(None) +#: sflphone.xml:364(None) msgid "@@image: 'figures/answer.png'; md5=c168995c6b36b5d200c49d1c02c2ea52" msgstr "" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. -#: sflphone.xml:365(None) +#: sflphone.xml:381(None) msgid "@@image: 'figures/hangup.png'; md5=0cac4dfe3a9a4bdf4d12229f77e3723a" msgstr "" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. -#: sflphone.xml:385(None) +#: sflphone.xml:401(None) msgid "@@image: 'figures/refuse.png'; md5=34b6cbf068e56163058e79de3ca70c59" msgstr "" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. -#: sflphone.xml:403(None) +#: sflphone.xml:419(None) msgid "@@image: 'figures/holdon.png'; md5=655078b8b495ada29f65b58501187d16" msgstr "" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. -#: sflphone.xml:415(None) +#: sflphone.xml:431(None) msgid "@@image: 'figures/holdoff.png'; md5=e06b8eba03f1545cd18891630b22f281" msgstr "" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. -#: sflphone.xml:430(None) +#: sflphone.xml:446(None) msgid "@@image: 'figures/transfer.png'; md5=92f921c7c6ba4ee2487ccf6e02226d9a" msgstr "" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. -#: sflphone.xml:444(None) +#: sflphone.xml:460(None) msgid "@@image: 'figures/transfer-go.png'; md5=553b57d5a9fc9f248ba15cecc32d343f" msgstr "" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. -#: sflphone.xml:465(None) +#: sflphone.xml:481(None) msgid "@@image: 'figures/rec-settings.png'; md5=27d51e45ff23dde58b0512f90773f6ce" msgstr "" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. -#: sflphone.xml:478(None) +#: sflphone.xml:494(None) msgid "@@image: 'figures/record.png'; md5=7a594660924940e8def9ecfcee0e8cb4" msgstr "" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. -#: sflphone.xml:496(None) +#: sflphone.xml:512(None) msgid "@@image: 'figures/voicemail.png'; md5=36dbeb4bcc6a68519d474552a888ce1e" msgstr "" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. -#: sflphone.xml:684(None) +#: sflphone.xml:548(None) +msgid "@@image: 'figures/drag_n_drop.png'; md5=fed5f0da9f162ca96bda0d49935a5354" +msgstr "" + +#. When image changes, this message will be marked fuzzy or untranslated for you. +#. It doesn't matter what you translate it to: it's not used at all. +#: sflphone.xml:560(None) +msgid "@@image: 'figures/conference.png'; md5=36f68c0a1fd7450487009126fff544bd" +msgstr "" + +#. When image changes, this message will be marked fuzzy or untranslated for you. +#. It doesn't matter what you translate it to: it's not used at all. +#: sflphone.xml:582(None) +msgid "@@image: 'figures/conference_detached.png'; md5=145189452009ea3110bb569c92997a4c" +msgstr "" + +#. When image changes, this message will be marked fuzzy or untranslated for you. +#. It doesn't matter what you translate it to: it's not used at all. +#: sflphone.xml:594(None) +msgid "@@image: 'figures/conference_attached.png'; md5=73411e05f2f2b185c34b5935ef7c49f0" +msgstr "" + +#. When image changes, this message will be marked fuzzy or untranslated for you. +#. It doesn't matter what you translate it to: it's not used at all. +#: sflphone.xml:663(None) +msgid "@@image: 'figures/srtp_enabled.png'; md5=6d4679f6afec1a8b84ce69f617cb4fa7" +msgstr "" + +#. When image changes, this message will be marked fuzzy or untranslated for you. +#. It doesn't matter what you translate it to: it's not used at all. +#: sflphone.xml:683(None) +msgid "@@image: 'figures/zrtp_options.png'; md5=2468eca925b188356bcc0c341c3fd912" +msgstr "" + +#. When image changes, this message will be marked fuzzy or untranslated for you. +#. It doesn't matter what you translate it to: it's not used at all. +#: sflphone.xml:849(None) msgid "@@image: 'figures/addressbook-button.png'; md5=b4a820013ef8b8f48e7de780a66c7800" msgstr "" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. -#: sflphone.xml:719(None) +#: sflphone.xml:884(None) msgid "@@image: 'figures/desktop-notif-settings.png'; md5=2bca85d6d9871883399481b994bd3384" msgstr "" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. -#: sflphone.xml:738(None) +#: sflphone.xml:903(None) msgid "@@image: 'figures/notif-example.png'; md5=d09008bedcaee435b12cd165d42e39b7" msgstr "" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. -#: sflphone.xml:755(None) +#: sflphone.xml:920(None) msgid "@@image: 'figures/voicemail-notif.png'; md5=a33ed4ce4b693d67ee453b4ef1fa6c30" msgstr "" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. -#: sflphone.xml:774(None) +#: sflphone.xml:939(None) msgid "@@image: 'figures/systemtray-settings.png'; md5=638612a08eb31eb768c4f08ace9c909a" msgstr "" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. -#: sflphone.xml:814(None) +#: sflphone.xml:979(None) msgid "@@image: 'figures/callshistory-settings.png'; md5=287d8aed7d7c71752257c64e89a9127d" msgstr "" #. When image changes, this message will be marked fuzzy or untranslated for you. #. It doesn't matter what you translate it to: it's not used at all. -#: sflphone.xml:838(None) +#: sflphone.xml:1003(None) msgid "@@image: 'figures/configfile-settings.png'; md5=eb4a5545f137b825dcdaf0396a9f1a7d" msgstr "" @@ -196,7 +238,7 @@ msgid "emmanuel.milou@savoirfairelinux.com" msgstr "" #: sflphone.xml:58(firstname) -msgid "Jérémy" +msgid "Jeremy" msgstr "" #: sflphone.xml:59(surname) @@ -315,7 +357,7 @@ msgstr "" msgid "To create a new account, perform the following steps:" msgstr "" -#: sflphone.xml:153(para) sflphone.xml:191(para) sflphone.xml:201(para) +#: sflphone.xml:153(para) sflphone.xml:191(para) sflphone.xml:201(para) sflphone.xml:652(para) msgid "Choose <menuchoice><guimenu>Edit</guimenu><guimenuitem>Manage accounts</guimenuitem></menuchoice>." msgstr "" @@ -387,7 +429,7 @@ msgstr "" msgid "To edit an existing account, perform the following steps:" msgstr "" -#: sflphone.xml:192(para) +#: sflphone.xml:192(para) sflphone.xml:653(para) msgid "Select in the list the account you would like to edit, then click on the <guilabel>Edit</guilabel> button." msgstr "" @@ -463,7 +505,7 @@ msgstr "" msgid "To register to some VoIP services, you will need to set this value at at least 1600 seconds (Example: French VoIP server freephonie.net)." msgstr "" -#: sflphone.xml:244(title) sflphone.xml:873(title) +#: sflphone.xml:244(title) sflphone.xml:1038(title) msgid "Network" msgstr "" @@ -507,429 +549,589 @@ msgstr "" msgid "Manually" msgstr "" -#: sflphone.xml:272(title) +#: sflphone.xml:272(title) sflphone.xml:627(title) msgid "Security features" msgstr "" -#: sflphone.xml:275(title) -msgid "Secure RTP" +#: sflphone.xml:274(para) +msgid "Follow the indications to <link linkend=\"account_edit\">edit an account</link> and choose the <guimenu>Security</guimenu> tab." msgstr "" -#: sflphone.xml:278(title) -msgid "TLS" +#: sflphone.xml:277(title) +msgid "Security features configuration panel" +msgstr "" + +#: sflphone.xml:289(title) +msgid "Credentials" msgstr "" -#: sflphone.xml:285(title) +#: sflphone.xml:290(para) +msgid "SFLphone supports multiple realms." +msgstr "" + +#: sflphone.xml:294(title) +msgid "Security" +msgstr "" + +#: sflphone.xml:295(para) +msgid "Please refer to the section <link linkend=\"detailed_security_features\">Security features</link> for detailed information about security features." +msgstr "" + +#: sflphone.xml:301(title) msgid "Call features" msgstr "" -#: sflphone.xml:287(para) +#: sflphone.xml:303(para) msgid "All the following features are available with both SIP and IAX2 accounts." msgstr "" -#: sflphone.xml:292(title) +#: sflphone.xml:308(title) msgid "Dial button" msgstr "" #. ==== End of Figure ==== -#: sflphone.xml:303(para) +#: sflphone.xml:319(para) msgid "You may have an unlimited number of calls at the same time, even with different accounts." msgstr "" -#: sflphone.xml:304(para) +#: sflphone.xml:320(para) msgid "To create a new call when you already have a current call, just click on the <guilabel>Dial</guilabel> button. The current call will automatically be put on hold." msgstr "" -#: sflphone.xml:307(title) +#: sflphone.xml:323(title) msgid "Make an other call" msgstr "" #. ==== End of Figure ==== -#: sflphone.xml:318(para) +#: sflphone.xml:334(para) msgid "Keyboard shortcut to perform this action: <accel>NUMPAD</accel> or almost any keys." msgstr "" -#: sflphone.xml:326(title) +#: sflphone.xml:342(title) msgid "Call button" msgstr "" #. ==== End of Figure ==== -#: sflphone.xml:337(para) sflphone.xml:355(para) +#: sflphone.xml:353(para) sflphone.xml:371(para) msgid "Keyboard shortcut to perform this action: <accel>Enter</accel>." msgstr "" -#: sflphone.xml:344(title) +#: sflphone.xml:360(title) msgid "Answer button" msgstr "" -#: sflphone.xml:361(title) +#: sflphone.xml:377(title) msgid "Hangup button" msgstr "" #. ==== End of Figure ==== -#: sflphone.xml:372(para) sflphone.xml:392(para) +#: sflphone.xml:388(para) sflphone.xml:408(para) msgid "Keyboard shortcut to perform this action: <accel>ESC</accel>." msgstr "" -#: sflphone.xml:377(para) +#: sflphone.xml:393(para) msgid "When you refuse a call, your caller is automatically redirected to your voicemail box, if applicable." msgstr "" -#: sflphone.xml:381(title) +#: sflphone.xml:397(title) msgid "Refuse button" msgstr "" -#: sflphone.xml:399(title) +#: sflphone.xml:415(title) msgid "Hold on button" msgstr "" -#: sflphone.xml:411(title) +#: sflphone.xml:427(title) msgid "Hold off button" msgstr "" -#: sflphone.xml:426(title) +#: sflphone.xml:442(title) msgid "Transfer button" msgstr "" #. ==== End of Figure ==== -#: sflphone.xml:437(para) +#: sflphone.xml:453(para) msgid "Then type the number you want to transfer the current call to." msgstr "" -#: sflphone.xml:440(title) +#: sflphone.xml:456(title) msgid "Validate the transfer" msgstr "" #. ==== End of Figure ==== -#: sflphone.xml:451(para) +#: sflphone.xml:467(para) msgid "And press <accel>Enter</accel>. Clicking again on the transfer button cancels the transfer." msgstr "" -#: sflphone.xml:457(para) +#: sflphone.xml:473(para) msgid "Go to <menuchoice><guimenu>Edit</guimenu><guimenuitem>Preferences</guimenuitem><guimenuitem>Audio</guimenuitem></menuchoice> to configure the recordings destination folder." msgstr "" -#: sflphone.xml:461(title) +#: sflphone.xml:477(title) msgid "Record settings" msgstr "" -#: sflphone.xml:474(title) +#: sflphone.xml:490(title) msgid "Record button" msgstr "" -#: sflphone.xml:488(caution) +#: sflphone.xml:504(caution) msgid "This feature is available only if you fill out the voicemail number information for your default account." msgstr "" -#: sflphone.xml:492(title) +#: sflphone.xml:508(title) msgid "Voicemail button" msgstr "" -#: sflphone.xml:506(para) +#: sflphone.xml:522(para) msgid "A direct IP call is a call established between two peers without any accounts. When dialing, such a call must prefixed with <guilabel>sip:</guilabel>." msgstr "" -#: sflphone.xml:508(para) +#: sflphone.xml:524(para) msgid "Direct IP calls use SIP protocol to establish communication and RTP to transport data. It is right now not available with IAX2." msgstr "" -#: sflphone.xml:510(para) +#: sflphone.xml:526(para) msgid "Go to <menuchoice><guimenu>Edit</guimenu><guimenuitem>Preferences</guimenuitem><guimenuitem>Direct IP calls</guimenuitem></menuchoice> to configure the advanced security features for this kind of calls." msgstr "" -#: sflphone.xml:514(para) +#: sflphone.xml:530(para) msgid "SFLphone now supports conference call hosting integrating server like features in a simple GUI." msgstr "" -#: sflphone.xml:520(guilabel) +#: sflphone.xml:536(guilabel) msgid "Create a conference" msgstr "" -#: sflphone.xml:521(para) +#: sflphone.xml:537(para) msgid "To host a conference, simply drag and drop one call on another. Additional participants are added the same way, dragging a call on the conference icon." msgstr "" -#: sflphone.xml:528(guilabel) +#: sflphone.xml:544(title) +msgid "Creating a new conference" +msgstr "" + +#: sflphone.xml:556(title) +msgid "Conference call" +msgstr "" + +#: sflphone.xml:568(guilabel) msgid "Leave a conference" msgstr "" -#: sflphone.xml:529(para) -msgid "SFLphone conference model let you leave a conference that you are currently hosting to answer any other incoming communication or even initiate new ones. The conference is not interupted Double clicking the conference icon let you reintroduce the conference." +#: sflphone.xml:569(para) +msgid "SFLphone conference model let you leave a conference that you are currently hosting to answer any other incoming communication or even initiate new ones. The conference is not interupted, double clicking the conference icon let you reintroduce it at any momment." +msgstr "" + +#: sflphone.xml:578(title) +msgid "Conference detached" +msgstr "" + +#: sflphone.xml:590(title) +msgid "Conference attached" msgstr "" -#: sflphone.xml:538(guilabel) +#: sflphone.xml:602(guilabel) msgid "Multiple conference" msgstr "" -#: sflphone.xml:539(para) +#: sflphone.xml:603(para) msgid "SFLphone supports multiple conferences running simultaneously. Two conferences can be joined the same way they are created, dragging one on the other." msgstr "" -#: sflphone.xml:547(guilabel) +#: sflphone.xml:611(guilabel) msgid "Hangup/Hold a conference" msgstr "" -#: sflphone.xml:548(para) -msgid "Right click the conference icon. Holding the conference put all participants on hold. Hangup a conference hangup all participants." +#: sflphone.xml:612(para) +msgid "Select the conference icon and press hangup/hold button on the toolbar. The selected action is applied on every conference participants." +msgstr "" + +#: sflphone.xml:629(title) +msgid "SRTP/ZRTP" +msgstr "" + +#: sflphone.xml:631(title) +msgid "SRTP and ZRTP, the big picture" +msgstr "" + +#: sflphone.xml:632(para) +msgid "RTP is the underlying protocol that is used in pair with the widely used SIP protocol to carry voice data. RTP alone does not provide any security features." +msgstr "" + +#: sflphone.xml:633(para) +msgid "Details for implementing Secure RTP (SRTP) were described independently in a separate document (RFC). However, in this paper, one aspect was deliberately left unspecified: how should the encryption keys be exchanged between the two parties involved in a secure RTP session ?" +msgstr "" + +#: sflphone.xml:635(para) +msgid "Mutiple solutions were proposed to fill in that blank. Among them, are SDES (RFC4568) and ZRTP which are probably the most popular today. For the 0.9.7 release, SFLphone integrates support for Secure RTP through the ZRTP protocol, and SDES is expected to be implemented in the very few next releases." +msgstr "" + +#: sflphone.xml:637(para) +msgid "As of today, blueprints for ZRTP are still laid out and are recognized under the name \"zrtp-draftzimmerman\" in the RFC machine. The author of ZRTP is Phil Zimmermann, that same person who brought us PGP. Therefore, it is not suprising that he designed ZRTP as an anti-PKI solution for key exchange." +msgstr "" + +#: sflphone.xml:639(para) +msgid "ZRTP makes possible for two parties to automatically establish a shared secret in a very simple way from the users's point of view. Indeed under SFLphone no special configuration is needed, appart from enabling the option itself." msgstr "" -#: sflphone.xml:565(title) +#: sflphone.xml:641(para) +msgid "If you want to use ZRTP, please take note that if you are connecting to a PBX, this one must have been configured to support ZRTP. Unfortunately, security for VoIP communications is still young and chances are that your PBX software won't support it." +msgstr "" + +#: sflphone.xml:643(para) +msgid "This does not mean that you want be able to benefit from ZRTP ! In fact, it turns out that you will be able to use it, as long as the server does not need to decode the RTP stream. This is often the case when the person you are calling to uses a codec that you don't support. In that case, the server will need to transcode the RTP packets and obviously need to be able to handle the ZRTP stream." +msgstr "" + +#: sflphone.xml:645(para) +msgid "Obviously, if you are calling another user (for example by prefixing the number with \"sip:\") directly, then this one will have to support ZRTP as well if you want to use it." +msgstr "" + +#: sflphone.xml:649(title) +msgid "Enabling SRTP/ZRTP" +msgstr "" + +#: sflphone.xml:650(para) +msgid "To enable ZRTP per account basis, perform the following steps:" +msgstr "" + +#: sflphone.xml:654(para) +msgid "Select the <guilabel>Security</guilabel> tab." +msgstr "" + +#: sflphone.xml:655(para) +msgid "Select <guilabel>ZRTP</guilabel> from the select box named <guilabel>SRTP Key Exchange</guilabel>." +msgstr "" + +#: sflphone.xml:659(title) +msgid "Enabling SRTP" +msgstr "" + +#: sflphone.xml:672(title) +msgid "Configuration options" +msgstr "" + +#: sflphone.xml:674(para) +msgid "After enabling SRTP, click the <guilabel>Preferences</guilabel> button." +msgstr "" + +#: sflphone.xml:675(para) +msgid "For basic usage, one don't have to worry about that." +msgstr "" + +#: sflphone.xml:679(title) +msgid "ZRTP configuration panel" +msgstr "" + +#: sflphone.xml:693(guilabel) +msgid "Send Hello Hash in SDP" +msgstr "" + +#: sflphone.xml:694(para) +msgid "Selecting this option will cause the program to compute an hash function over the \"Hello\" packet and send it as an SDP field \"zrtp-hash:\". The remote end might be interested in getting this value to add an additional layer of protection based on another communication channel. Upon receiving this value, the remote point can compute the hash function on the received hello packet and compare it." +msgstr "" + +#: sflphone.xml:695(para) +msgid "Take note that for 0.9.7, SFLPhone does not perform the comparasion on its side." +msgstr "" + +#: sflphone.xml:699(guilabel) +msgid "Ask user to confirm SAS" +msgstr "" + +#: sflphone.xml:700(para) +msgid "The short authentication mechanism is at the heart of the ZRTP protocol. Not requirering the user to manually check the SAS value presents a security risk over Man in the Middle type of attacks." +msgstr "" + +#: sflphone.xml:702(para) +msgid "Disabling this option will stop the program from prompting the user with the SAS." +msgstr "" + +#: sflphone.xml:704(para) +msgid "Such an option was motivated to be developped at that time by the the state of the libzrtpcpp library that SFLPhone was making use of. It is only from version x.x that this library can cache results of SAS computation between two peers." +msgstr "" + +#: sflphone.xml:709(guilabel) +msgid "Display SAS once for hold event" +msgstr "" + +#: sflphone.xml:710(para) +msgid "When call is put on hold, the RTP stream is stopped and reinitiated later. From the ZRTP point of view, this appears as a \"new call\". Therefore, the SAS will be redisplayed unless this option is selected." +msgstr "" + +#: sflphone.xml:713(guilabel) +msgid "ZRTP for direct peer-to-peer calls" +msgstr "" + +#: sflphone.xml:714(para) +msgid "If you want to use ZRTP for calls that are placed directly to a user (without an intervening PBX), you must enable the option under the \"Direct IP Calls\" tab in the \"configuration\" window, available from the \"edit\" menu." +msgstr "" + +#: sflphone.xml:716(para) +msgid "Configuration instruction from that point are the same as for configured accounts." +msgstr "" + +#: sflphone.xml:723(title) +msgid "TLS" +msgstr "" + +#: sflphone.xml:730(title) msgid "Audio configuration" msgstr "" -#: sflphone.xml:566(para) +#: sflphone.xml:731(para) msgid "ALSA and Pulseaudio native interfaces are available." msgstr "" -#: sflphone.xml:582(title) +#: sflphone.xml:747(title) msgid "Codecs overview" msgstr "" -#: sflphone.xml:583(para) +#: sflphone.xml:748(para) msgid "SFLphone supports several widely used audio codec:" msgstr "" -#: sflphone.xml:587(guilabel) +#: sflphone.xml:752(guilabel) msgid "PCMU/PCMA" msgstr "" -#: sflphone.xml:588(para) +#: sflphone.xml:753(para) msgid "ITU-T telefony standard PCM formats, 8kHz, 64 kbit/s, using logarithmic byte compression algorithm." msgstr "" -#: sflphone.xml:594(guilabel) +#: sflphone.xml:759(guilabel) msgid "GSM" msgstr "" -#: sflphone.xml:595(para) +#: sflphone.xml:760(para) msgid "Global System for Mobile communications (GSM) narrowband 8kHz standard based on linear prediction encoding." msgstr "" -#: sflphone.xml:601(guilabel) +#: sflphone.xml:766(guilabel) msgid "G722" msgstr "" -#: sflphone.xml:602(para) +#: sflphone.xml:767(para) msgid "ITU-T standard wideband 16kHz standard based on linear prediction." msgstr "" -#: sflphone.xml:607(guilabel) +#: sflphone.xml:772(guilabel) msgid "SPEEX" msgstr "" -#: sflphone.xml:608(para) +#: sflphone.xml:773(para) msgid "High quality voice encoding/decoding available in narrowband 8Khz, wideband 16khz (HD Voice), and ultra-wideband 32 kHz. Integrate additional features such as Variable Bit Rate (VBR) and noise reduction." msgstr "" -#: sflphone.xml:617(guilabel) +#: sflphone.xml:782(guilabel) msgid "CELT" msgstr "" -#: sflphone.xml:628(title) +#: sflphone.xml:793(title) msgid "Address books" msgstr "" -#: sflphone.xml:630(title) +#: sflphone.xml:795(title) msgid "Enable the address book support" msgstr "" -#: sflphone.xml:631(para) +#: sflphone.xml:796(para) msgid "To enable the address book, perform the following steps:" msgstr "" -#: sflphone.xml:634(para) +#: sflphone.xml:799(para) msgid "Choose <menuchoice><guimenu>Edit</guimenu><guimenuitem>Preferences</guimenuitem></menuchoice>." msgstr "" -#: sflphone.xml:638(para) +#: sflphone.xml:803(para) msgid "Select the <menuchoice><guimenu>Address book</guimenu></menuchoice> tab." msgstr "" -#: sflphone.xml:642(para) +#: sflphone.xml:807(para) msgid "Check the <guilabel>Use Evolution address books</guilabel> box." msgstr "" -#: sflphone.xml:645(para) +#: sflphone.xml:810(para) msgid "Every address books you configured in Evolution will be now available in <application>SFLphone</application>. Please be sure you selected at least one address book." msgstr "" -#: sflphone.xml:649(title) +#: sflphone.xml:814(title) msgid "Available options" msgstr "" -#: sflphone.xml:650(para) +#: sflphone.xml:815(para) msgid "In <menuchoice><guimenu>Edit</guimenu><guimenuitem>Preferences</guimenuitem><guimenuitem>Address book</guimenuitem></menuchoice>, you may select one or all of the following options:" msgstr "" -#: sflphone.xml:653(guilabel) +#: sflphone.xml:818(guilabel) msgid "Display contact photo if available" msgstr "" -#: sflphone.xml:654(para) +#: sflphone.xml:819(para) msgid "The contact photo will be displayed as a thumbnail beside the phone number." msgstr "" -#: sflphone.xml:659(guilabel) +#: sflphone.xml:824(guilabel) msgid "Fields from Evolution's address book" msgstr "" -#: sflphone.xml:660(para) +#: sflphone.xml:825(para) msgid "You may use one or all of these following information from your contact." msgstr "" -#: sflphone.xml:663(listitem) +#: sflphone.xml:828(listitem) msgid "Work phone number" msgstr "" -#: sflphone.xml:664(listitem) +#: sflphone.xml:829(listitem) msgid "Home phone number" msgstr "" -#: sflphone.xml:665(listitem) +#: sflphone.xml:830(listitem) msgid "Mobile phone number" msgstr "" -#: sflphone.xml:673(title) +#: sflphone.xml:838(title) msgid "Using the address book" msgstr "" -#: sflphone.xml:676(para) +#: sflphone.xml:841(para) msgid "On the toolbar, click on the following button to display the address book window:" msgstr "" -#: sflphone.xml:680(title) +#: sflphone.xml:845(title) msgid "Address book toolbar button" msgstr "" -#: sflphone.xml:693(para) +#: sflphone.xml:858(para) msgid "Search for a contact" msgstr "" -#: sflphone.xml:697(para) +#: sflphone.xml:862(para) msgid "New entries should have appeared in the window. Double click on it to call the contact. You may also <menuchoice><guimenu>Right click</guimenu><guimenuitem>Edit before calling</guimenuitem></menuchoice> to modify the entry before calling." msgstr "" -#: sflphone.xml:704(title) +#: sflphone.xml:869(title) msgid "Preferences" msgstr "" -#: sflphone.xml:706(para) +#: sflphone.xml:871(para) msgid "Go to <menuchoice><guimenu>Edit</guimenu><guimenuitem>Preferences</guimenuitem></menuchoice> to access the configuration panel." msgstr "" -#: sflphone.xml:707(para) +#: sflphone.xml:872(para) msgid "Each section is detailed below." msgstr "" -#: sflphone.xml:710(title) +#: sflphone.xml:875(title) msgid "General" msgstr "" -#: sflphone.xml:711(para) +#: sflphone.xml:876(para) msgid "This section provides the user general settings regarding the application." msgstr "" -#: sflphone.xml:715(title) +#: sflphone.xml:880(title) msgid "Desktop notifications options" msgstr "" -#: sflphone.xml:729(guilabel) +#: sflphone.xml:894(guilabel) msgid "Enable notifications" msgstr "" -#: sflphone.xml:730(para) +#: sflphone.xml:895(para) msgid "Both clients use their desktop environment notification system. If checked, you will receive desktop notifications for events such as incoming calls and system messages." msgstr "" -#: sflphone.xml:734(title) +#: sflphone.xml:899(title) msgid "Example of an incoming call notification" msgstr "" -#: sflphone.xml:746(guilabel) +#: sflphone.xml:911(guilabel) msgid "Enable voicemail notifications" msgstr "" -#: sflphone.xml:747(para) +#: sflphone.xml:912(para) msgid "The voicemail notifications are handled separatly. If checked, you will be notified with the number of unread voicemails for your accounts." msgstr "" -#: sflphone.xml:751(title) +#: sflphone.xml:916(title) msgid "Example of a voicemail notification" msgstr "" -#: sflphone.xml:770(title) +#: sflphone.xml:935(title) msgid "System tray options" msgstr "" -#: sflphone.xml:784(guilabel) +#: sflphone.xml:949(guilabel) msgid "Popup main window on incoming call" msgstr "" -#: sflphone.xml:785(para) +#: sflphone.xml:950(para) msgid "If SFLphone is closed on the system tray, pops the main window up on foreground when receiving an incoming call." msgstr "" -#: sflphone.xml:790(guilabel) +#: sflphone.xml:955(guilabel) msgid "Never popup main window" msgstr "" -#: sflphone.xml:791(para) +#: sflphone.xml:956(para) msgid "If SFLphone is closed on the system tray, never pops the main window up on foreground when receiving an incoming call." msgstr "" -#: sflphone.xml:796(guilabel) +#: sflphone.xml:961(guilabel) msgid "Hide SFLphone window on startup" msgstr "" -#: sflphone.xml:797(para) +#: sflphone.xml:962(para) msgid "On startup, SFLphone will go directly on the system tray." msgstr "" -#: sflphone.xml:810(title) +#: sflphone.xml:975(title) msgid "Calls history options" msgstr "" -#: sflphone.xml:823(guilabel) +#: sflphone.xml:988(guilabel) msgid "Keep my history for at least n days" msgstr "" -#: sflphone.xml:824(para) +#: sflphone.xml:989(para) msgid "If checked, calls will be kept up to N days in the history. You may select a custom number of days. Do not check it if you don't want to use this feature." msgstr "" -#: sflphone.xml:834(title) +#: sflphone.xml:999(title) msgid "Configuration file options" msgstr "" -#: sflphone.xml:847(guilabel) +#: sflphone.xml:1012(guilabel) msgid "Store SIP credentials as MD5 hash" msgstr "" -#: sflphone.xml:848(para) +#: sflphone.xml:1013(para) msgid "If checked, your password information will be encrypted in the configuration file, instead of plain text." msgstr "" -#: sflphone.xml:859(title) +#: sflphone.xml:1024(title) msgid "Audio" msgstr "" -#: sflphone.xml:863(title) +#: sflphone.xml:1028(title) msgid "Address book" msgstr "" -#: sflphone.xml:865(para) +#: sflphone.xml:1030(para) msgid "Refer to the <link linkend=\"addressbook\">Address books</link> section for more information." msgstr "" -#: sflphone.xml:869(title) +#: sflphone.xml:1034(title) msgid "Hooks" msgstr "" -#: sflphone.xml:877(title) +#: sflphone.xml:1042(title) msgid "Direct IP calls" msgstr "" -#: sflphone.xml:878(para) +#: sflphone.xml:1043(para) msgid "Refer to the <link linkend=\"directip\">Direct IP calls</link> section for more information." msgstr "" -- GitLab From a830947b580b7e39cba6455f1bb7bf7881f2115a Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Wed, 9 Dec 2009 10:28:19 -0500 Subject: [PATCH 065/188] [#2557] Display complete sip uri for outgoing calls --- sflphone-client-gnome/src/actions.c | 2 ++ sflphone-client-gnome/src/contacts/calltree.c | 32 ++++++++++++------- 2 files changed, 22 insertions(+), 12 deletions(-) diff --git a/sflphone-client-gnome/src/actions.c b/sflphone-client-gnome/src/actions.c index 28db999a2d..7d8eb3eb07 100644 --- a/sflphone-client-gnome/src/actions.c +++ b/sflphone-client-gnome/src/actions.c @@ -696,6 +696,8 @@ sflphone_new_call() peer_name = g_strdup (""); create_new_call (CALL, CALL_STATE_DIALING, "", "", peer_name, peer_number, &c); + c->_history_state = OUTGOING; + calllist_add (current_calls,c); calltree_add_call (current_calls, c, NULL); update_actions(); diff --git a/sflphone-client-gnome/src/contacts/calltree.c b/sflphone-client-gnome/src/contacts/calltree.c index fc95d12eca..fc694bfd29 100644 --- a/sflphone-client-gnome/src/contacts/calltree.c +++ b/sflphone-client-gnome/src/contacts/calltree.c @@ -351,25 +351,33 @@ calltree_display_call_info(callable_obj_t * c, CallDisplayType display_type, gch DEBUG("Display call info"); - // Get the hostname for this call (NULL if not existent) - hostname = g_strrstr(peer_number, "@"); + // If call is outgoing, keep the hostname, strip it elsewhere + if(c->_type == CALL && c->_history_state == OUTGOING) { - // Test if we are dialing a new number - if(g_strcmp0("", c->_peer_number) != 0) { + display_number = peer_number; - // Strip the hostname if existent - if(hostname) { - display_number = g_strndup(peer_number, hostname - peer_number); + } + else { + + // Get the hostname for this call (NULL if not existent) + hostname = g_strrstr(peer_number, "@"); + + // Test if we are dialing a new number + if(g_strcmp0("", c->_peer_number) != 0) { + + // Strip the hostname if existent + if(hostname) { + display_number = g_strndup(peer_number, hostname - peer_number); + } + else { + display_number = peer_number; + } } else { + display_number = peer_number; } } - else { - - display_number = peer_number; - } - // Different display depending on type switch(display_type) { -- GitLab From 57ff688820c49dd33c49464255c829944b23e014 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Wed, 9 Dec 2009 10:43:47 -0500 Subject: [PATCH 066/188] [#2554] nbCalls must be zero to close audio layer --- sflphone-common/src/managerimpl.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sflphone-common/src/managerimpl.cpp b/sflphone-common/src/managerimpl.cpp index d79591622f..6be2cf6c59 100644 --- a/sflphone-common/src/managerimpl.cpp +++ b/sflphone-common/src/managerimpl.cpp @@ -465,7 +465,7 @@ ManagerImpl::hangupCall (const CallID& call_id) AudioLayer *audiolayer = getAudioDriver(); // stop streams - if (audiolayer && (nbCalls <= 1)) { + if (audiolayer && (nbCalls <= 0)) { _debug (" hangupCall: stop audio stream, ther is only %i call(s) remaining", nbCalls); audiolayer->stopStream(); } -- GitLab From d1a6194b7ba81dcff70ae796ed3e0dc2cfb83d19 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Wed, 9 Dec 2009 13:08:58 -0500 Subject: [PATCH 067/188] [#2556] Handle history entries in calltre_update_call --- sflphone-client-gnome/src/contacts/calltree.c | 207 ++++++++++-------- 1 file changed, 115 insertions(+), 92 deletions(-) diff --git a/sflphone-client-gnome/src/contacts/calltree.c b/sflphone-client-gnome/src/contacts/calltree.c index fc694bfd29..e416a29586 100644 --- a/sflphone-client-gnome/src/contacts/calltree.c +++ b/sflphone-client-gnome/src/contacts/calltree.c @@ -355,7 +355,6 @@ calltree_display_call_info(callable_obj_t * c, CallDisplayType display_type, gch if(c->_type == CALL && c->_history_state == OUTGOING) { display_number = peer_number; - } else { @@ -722,7 +721,6 @@ calltree_update_call (calltab_t* tab, callable_obj_t * c, GtkTreeIter *parent) account_t* account_details=NULL; gchar *audio_codec = ""; - int nbChild = gtk_tree_model_iter_n_children(GTK_TREE_MODEL(store), parent); int i; @@ -744,121 +742,146 @@ calltree_update_call (calltab_t* tab, callable_obj_t * c, GtkTreeIter *parent) for( i = 0; i < nbChild; i++) { - if(gtk_tree_model_iter_nth_child(GTK_TREE_MODEL(store), &iter, parent, i)) { + if(gtk_tree_model_iter_nth_child(GTK_TREE_MODEL(store), &iter, parent, i)) { - if(gtk_tree_model_iter_has_child(GTK_TREE_MODEL(store), &iter)) { - calltree_update_call (tab, c, &iter); - } + if(gtk_tree_model_iter_has_child(GTK_TREE_MODEL(store), &iter)) { + calltree_update_call (tab, c, &iter); + } - val.g_type = 0; - gtk_tree_model_get_value (GTK_TREE_MODEL(store), &iter, COLUMN_ACCOUNT_PTR, &val); + val.g_type = 0; + gtk_tree_model_get_value (GTK_TREE_MODEL(store), &iter, COLUMN_ACCOUNT_PTR, &val); - iterCall = (callable_obj_t*) g_value_get_pointer(&val); - g_value_unset(&val); + iterCall = (callable_obj_t*) g_value_get_pointer(&val); + g_value_unset(&val); - if(iterCall != c) { - continue; - } + if(iterCall != c) { + continue; + } - /* Update text */ - gchar * description; - gchar * date=""; - gchar * duration=""; - audio_codec = call_get_audio_codec (c); + /* Update text */ + gchar * description; + gchar * date=""; + gchar * duration=""; + audio_codec = call_get_audio_codec (c); - if(c->_state == CALL_STATE_TRANSFERT) { + if(c->_state == CALL_STATE_TRANSFERT) { - calltree_display_call_info(c, DISPLAY_TYPE_CALL_TRANSFER, NULL, &description); + calltree_display_call_info(c, DISPLAY_TYPE_CALL_TRANSFER, NULL, &description); - } - else { + } + else { - if((c->_sas != NULL) && (display_sas == TRUE) && (c->_srtp_state == SRTP_STATE_SAS_UNCONFIRMED) && (c->_zrtp_confirmed == FALSE)) { + if((c->_sas != NULL) && (display_sas == TRUE) && (c->_srtp_state == SRTP_STATE_SAS_UNCONFIRMED) && (c->_zrtp_confirmed == FALSE)) { - calltree_display_call_info(c, DISPLAY_TYPE_SAS, NULL, &description); + calltree_display_call_info(c, DISPLAY_TYPE_SAS, NULL, &description); - } else { + } else { - calltree_display_call_info(c, DISPLAY_TYPE_STATE_CODE, audio_codec, &description); - + calltree_display_call_info(c, DISPLAY_TYPE_STATE_CODE, audio_codec, &description); + } } - } - /* Update icons */ - if( tab == current_calls ) { - DEBUG("Receiving in state %d", c->_state); - switch(c->_state) { - case CALL_STATE_HOLD: - pixbuf = gdk_pixbuf_new_from_file(ICONS_DIR "/hold.svg", NULL); - break; - case CALL_STATE_INCOMING: - case CALL_STATE_RINGING: - pixbuf = gdk_pixbuf_new_from_file(ICONS_DIR "/ring.svg", NULL); - break; - case CALL_STATE_CURRENT: - pixbuf = gdk_pixbuf_new_from_file(ICONS_DIR "/current.svg", NULL); - break; - case CALL_STATE_DIALING: - pixbuf = gdk_pixbuf_new_from_file(ICONS_DIR "/dial.svg", NULL); - break; - case CALL_STATE_FAILURE: - pixbuf = gdk_pixbuf_new_from_file(ICONS_DIR "/fail.svg", NULL); - break; - case CALL_STATE_BUSY: - pixbuf = gdk_pixbuf_new_from_file(ICONS_DIR "/busy.svg", NULL); - break; - case CALL_STATE_TRANSFERT: - pixbuf = gdk_pixbuf_new_from_file(ICONS_DIR "/transfert.svg", NULL); - break; - case CALL_STATE_RECORD: - pixbuf = gdk_pixbuf_new_from_file(ICONS_DIR "/icon_rec.svg", NULL); - break; - default: - WARN("Update calltree - Should not happen!"); - } - - switch(c->_srtp_state) { - case SRTP_STATE_SAS_UNCONFIRMED: - DEBUG("Secure is ON"); - pixbuf_security = gdk_pixbuf_new_from_file(ICONS_DIR "/lock_unconfirmed.svg", NULL); - if(c->_sas != NULL) { DEBUG("SAS is ready with value %s", c->_sas); } - break; - case SRTP_STATE_SAS_CONFIRMED: - DEBUG("SAS is confirmed"); - pixbuf_security = gdk_pixbuf_new_from_file(ICONS_DIR "/lock_confirmed.svg", NULL); - break; - case SRTP_STATE_SAS_SIGNED: - DEBUG("Secure is ON with SAS signed and verified"); - pixbuf_security = gdk_pixbuf_new_from_file(ICONS_DIR "/lock_certified.svg", NULL); - break; - case SRTP_STATE_UNLOCKED: - DEBUG("Secure is off calltree %d", c->_state); - if(g_strcasecmp(srtp_enabled,"true") == 0) { - pixbuf_security = gdk_pixbuf_new_from_file(ICONS_DIR "/lock_off.svg", NULL); + /* Update icons */ + if( tab == current_calls ) { + DEBUG("Receiving in state %d", c->_state); + switch(c->_state) { + case CALL_STATE_HOLD: + pixbuf = gdk_pixbuf_new_from_file(ICONS_DIR "/hold.svg", NULL); + break; + case CALL_STATE_INCOMING: + case CALL_STATE_RINGING: + pixbuf = gdk_pixbuf_new_from_file(ICONS_DIR "/ring.svg", NULL); + break; + case CALL_STATE_CURRENT: + pixbuf = gdk_pixbuf_new_from_file(ICONS_DIR "/current.svg", NULL); + break; + case CALL_STATE_DIALING: + pixbuf = gdk_pixbuf_new_from_file(ICONS_DIR "/dial.svg", NULL); + break; + case CALL_STATE_FAILURE: + pixbuf = gdk_pixbuf_new_from_file(ICONS_DIR "/fail.svg", NULL); + break; + case CALL_STATE_BUSY: + pixbuf = gdk_pixbuf_new_from_file(ICONS_DIR "/busy.svg", NULL); + break; + case CALL_STATE_TRANSFERT: + pixbuf = gdk_pixbuf_new_from_file(ICONS_DIR "/transfert.svg", NULL); + break; + case CALL_STATE_RECORD: + pixbuf = gdk_pixbuf_new_from_file(ICONS_DIR "/icon_rec.svg", NULL); + break; + default: + WARN("Update calltree - Should not happen!"); + } + + switch(c->_srtp_state) { + case SRTP_STATE_SAS_UNCONFIRMED: + DEBUG("Secure is ON"); + pixbuf_security = gdk_pixbuf_new_from_file(ICONS_DIR "/lock_unconfirmed.svg", NULL); + if(c->_sas != NULL) { DEBUG("SAS is ready with value %s", c->_sas); } + break; + case SRTP_STATE_SAS_CONFIRMED: + DEBUG("SAS is confirmed"); + pixbuf_security = gdk_pixbuf_new_from_file(ICONS_DIR "/lock_confirmed.svg", NULL); + break; + case SRTP_STATE_SAS_SIGNED: + DEBUG("Secure is ON with SAS signed and verified"); + pixbuf_security = gdk_pixbuf_new_from_file(ICONS_DIR "/lock_certified.svg", NULL); + break; + case SRTP_STATE_UNLOCKED: + DEBUG("Secure is off calltree %d", c->_state); + if(g_strcasecmp(srtp_enabled,"true") == 0) { + pixbuf_security = gdk_pixbuf_new_from_file(ICONS_DIR "/lock_off.svg", NULL); + } + break; + default: + WARN("Update calltree srtp state #%d- Should not happen!", c->_srtp_state); + if(g_strcasecmp(srtp_enabled,"true") == 0) { + pixbuf_security = gdk_pixbuf_new_from_file(ICONS_DIR "/lock_off.svg", NULL); + } + } - break; - default: - WARN("Update calltree srtp state #%d- Should not happen!", c->_srtp_state); - if(g_strcasecmp(srtp_enabled,"true") == 0) { - pixbuf_security = gdk_pixbuf_new_from_file(ICONS_DIR "/lock_off.svg", NULL); + + } + + if(tab == history) { + + switch(c->_history_state) { + case INCOMING: + pixbuf = gdk_pixbuf_new_from_file(ICONS_DIR "/incoming.svg", NULL); + break; + case OUTGOING: + pixbuf = gdk_pixbuf_new_from_file(ICONS_DIR "/outgoing.svg", NULL); + break; + case MISSED: + pixbuf = gdk_pixbuf_new_from_file(ICONS_DIR "/missed.svg", NULL); + break; + default: + WARN("History - Should not happen!"); } + calltree_display_call_info(c, DISPLAY_TYPE_HISTORY, NULL, &description); + + date = get_formatted_start_timestamp (c); + duration = get_call_duration (c); + duration = g_strconcat( date , duration , NULL); + description = g_strconcat( description , duration, NULL); } + gtk_tree_store_set(store, &iter, - 0, pixbuf, // Icon - 1, description, // Description - 2, pixbuf_security, - 3, c, - -1); + 0, pixbuf, // Icon + 1, description, // Description + 2, pixbuf_security, + 3, c, + -1); if (pixbuf != NULL) - g_object_unref(G_OBJECT(pixbuf)); - + g_object_unref(G_OBJECT(pixbuf)); } - } } + update_actions(); } -- GitLab From 3b243a1ec9cc410490d54458db2fae62d2a76967 Mon Sep 17 00:00:00 2001 From: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> Date: Wed, 9 Dec 2009 14:02:27 -0500 Subject: [PATCH 068/188] [#2554] Fix "hangup" action close audio if there's still an active call Conflicts: sflphone-common/src/managerimpl.cpp --- sflphone-common/src/managerimpl.cpp | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/sflphone-common/src/managerimpl.cpp b/sflphone-common/src/managerimpl.cpp index e8b7edaaa8..0f9b601acd 100644 --- a/sflphone-common/src/managerimpl.cpp +++ b/sflphone-common/src/managerimpl.cpp @@ -413,7 +413,6 @@ ManagerImpl::hangupCall (const CallID& call_id) PulseLayer *pulselayer; AccountID account_id; bool returnValue; - AudioLayer *audiolayer; // store the current call id CallID current_call_id = getCurrentCallId(); @@ -425,17 +424,6 @@ ManagerImpl::hangupCall (const CallID& call_id) if (_dbus) _dbus->getCallManager()->callStateChanged (call_id, "HUNGUP"); - int nbCalls = getCallList().size(); - - audiolayer = getAudioDriver(); - - // stop streams - if (audiolayer && (nbCalls <= 1)) { - _debug (" hangupCall: stop audio stream, ther is only %i call(s) remaining\n", nbCalls); - audiolayer->stopStream(); - } - - if (participToConference (call_id)) { Conference *conf = getConferenceFromCallID (call_id); @@ -472,6 +460,16 @@ ManagerImpl::hangupCall (const CallID& call_id) removeCallAccount (call_id); } + int nbCalls = getCallList().size(); + + AudioLayer *audiolayer = getAudioDriver(); + + // stop streams + if (audiolayer && (nbCalls <= 1)) { + _debug (" hangupCall: stop audio stream, ther is only %i call(s) remaining", nbCalls); + audiolayer->stopStream(); + } + if (_audiodriver->getLayerType() == PULSEAUDIO) { pulselayer = dynamic_cast<PulseLayer *> (getAudioDriver()); } -- GitLab From 0e39027e72df4d8dacc3f4ec91fff9138237ab2e Mon Sep 17 00:00:00 2001 From: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> Date: Wed, 9 Dec 2009 14:03:27 -0500 Subject: [PATCH 069/188] [2553] Fix stop audio when transfering a conference call Conflicts: sflphone-common/src/managerimpl.cpp --- sflphone-common/src/managerimpl.cpp | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/sflphone-common/src/managerimpl.cpp b/sflphone-common/src/managerimpl.cpp index 0f9b601acd..89d57b6f47 100644 --- a/sflphone-common/src/managerimpl.cpp +++ b/sflphone-common/src/managerimpl.cpp @@ -1899,18 +1899,7 @@ ManagerImpl::peerHungupCall (const CallID& call_id) } } - int nbCalls = getCallList().size(); - - // stop streams - - if (nbCalls <= 1) { - _debug (" hangupCall: stop audio stream, ther is only %i call(s) remaining\n", nbCalls); - - AudioLayer* audiolayer = getAudioDriver(); - audiolayer->stopStream(); - } - - /* Direct IP to IP call */ + /* Direct IP to IP call */ if (getConfigFromCall (call_id) == Call::IPtoIP) { SIPVoIPLink::instance (AccountNULL)->hangup (call_id); } @@ -1934,6 +1923,18 @@ ManagerImpl::peerHungupCall (const CallID& call_id) removeCallAccount (call_id); + int nbCalls = getCallList().size(); + + // stop streams + + if (nbCalls <= 0) { + _debug (" hangupCall: stop audio stream, ther is only %i call(s) remaining", nbCalls); + + AudioLayer* audiolayer = getAudioDriver(); + audiolayer->stopStream(); + } + + if (_audiodriver->getLayerType() == PULSEAUDIO) { pulselayer = dynamic_cast<PulseLayer *> (getAudioDriver()); } -- GitLab From e52805f907eafe43c3ee75a255432a34e7d5d4d7 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Wed, 9 Dec 2009 10:28:19 -0500 Subject: [PATCH 070/188] [#2557] Display complete sip uri for outgoing calls --- sflphone-client-gnome/src/actions.c | 2 ++ sflphone-client-gnome/src/contacts/calltree.c | 32 ++++++++++++------- 2 files changed, 22 insertions(+), 12 deletions(-) diff --git a/sflphone-client-gnome/src/actions.c b/sflphone-client-gnome/src/actions.c index 829160960e..5a28359011 100644 --- a/sflphone-client-gnome/src/actions.c +++ b/sflphone-client-gnome/src/actions.c @@ -694,6 +694,8 @@ sflphone_new_call() peer_name = g_strdup (""); create_new_call (CALL, CALL_STATE_DIALING, "", "", peer_name, peer_number, &c); + c->_history_state = OUTGOING; + calllist_add (current_calls,c); calltree_add_call (current_calls, c, NULL); update_actions(); diff --git a/sflphone-client-gnome/src/contacts/calltree.c b/sflphone-client-gnome/src/contacts/calltree.c index 9fc579db20..5925a499e5 100644 --- a/sflphone-client-gnome/src/contacts/calltree.c +++ b/sflphone-client-gnome/src/contacts/calltree.c @@ -351,25 +351,33 @@ calltree_display_call_info(callable_obj_t * c, CallDisplayType display_type, gch DEBUG("Display call info"); - // Get the hostname for this call (NULL if not existent) - hostname = g_strrstr(peer_number, "@"); + // If call is outgoing, keep the hostname, strip it elsewhere + if(c->_type == CALL && c->_history_state == OUTGOING) { - // Test if we are dialing a new number - if(g_strcmp0("", c->_peer_number) != 0) { + display_number = peer_number; - // Strip the hostname if existent - if(hostname) { - display_number = g_strndup(peer_number, hostname - peer_number); + } + else { + + // Get the hostname for this call (NULL if not existent) + hostname = g_strrstr(peer_number, "@"); + + // Test if we are dialing a new number + if(g_strcmp0("", c->_peer_number) != 0) { + + // Strip the hostname if existent + if(hostname) { + display_number = g_strndup(peer_number, hostname - peer_number); + } + else { + display_number = peer_number; + } } else { + display_number = peer_number; } } - else { - - display_number = peer_number; - } - // Different display depending on type switch(display_type) { -- GitLab From fb28036026a5b0a526d5ef00959a2691d3ec6393 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Wed, 9 Dec 2009 10:43:47 -0500 Subject: [PATCH 071/188] [#2554] nbCalls must be zero to close audio layer --- sflphone-common/src/managerimpl.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sflphone-common/src/managerimpl.cpp b/sflphone-common/src/managerimpl.cpp index 89d57b6f47..2a3d6d1f9a 100644 --- a/sflphone-common/src/managerimpl.cpp +++ b/sflphone-common/src/managerimpl.cpp @@ -465,7 +465,7 @@ ManagerImpl::hangupCall (const CallID& call_id) AudioLayer *audiolayer = getAudioDriver(); // stop streams - if (audiolayer && (nbCalls <= 1)) { + if (audiolayer && (nbCalls <= 0)) { _debug (" hangupCall: stop audio stream, ther is only %i call(s) remaining", nbCalls); audiolayer->stopStream(); } -- GitLab From 14edff0e1c9c10c80882c9284ba910e147eeaa4d Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Wed, 9 Dec 2009 13:08:58 -0500 Subject: [PATCH 072/188] [#2556] Handle history entries in calltre_update_call --- sflphone-client-gnome/src/contacts/calltree.c | 207 ++++++++++-------- 1 file changed, 115 insertions(+), 92 deletions(-) diff --git a/sflphone-client-gnome/src/contacts/calltree.c b/sflphone-client-gnome/src/contacts/calltree.c index 5925a499e5..8bb20d52a5 100644 --- a/sflphone-client-gnome/src/contacts/calltree.c +++ b/sflphone-client-gnome/src/contacts/calltree.c @@ -355,7 +355,6 @@ calltree_display_call_info(callable_obj_t * c, CallDisplayType display_type, gch if(c->_type == CALL && c->_history_state == OUTGOING) { display_number = peer_number; - } else { @@ -722,7 +721,6 @@ calltree_update_call (calltab_t* tab, callable_obj_t * c, GtkTreeIter *parent) account_t* account_details=NULL; gchar *audio_codec = ""; - int nbChild = gtk_tree_model_iter_n_children(GTK_TREE_MODEL(store), parent); int i; @@ -744,121 +742,146 @@ calltree_update_call (calltab_t* tab, callable_obj_t * c, GtkTreeIter *parent) for( i = 0; i < nbChild; i++) { - if(gtk_tree_model_iter_nth_child(GTK_TREE_MODEL(store), &iter, parent, i)) { + if(gtk_tree_model_iter_nth_child(GTK_TREE_MODEL(store), &iter, parent, i)) { - if(gtk_tree_model_iter_has_child(GTK_TREE_MODEL(store), &iter)) { - calltree_update_call (tab, c, &iter); - } + if(gtk_tree_model_iter_has_child(GTK_TREE_MODEL(store), &iter)) { + calltree_update_call (tab, c, &iter); + } - val.g_type = 0; - gtk_tree_model_get_value (GTK_TREE_MODEL(store), &iter, COLUMN_ACCOUNT_PTR, &val); + val.g_type = 0; + gtk_tree_model_get_value (GTK_TREE_MODEL(store), &iter, COLUMN_ACCOUNT_PTR, &val); - iterCall = (callable_obj_t*) g_value_get_pointer(&val); - g_value_unset(&val); + iterCall = (callable_obj_t*) g_value_get_pointer(&val); + g_value_unset(&val); - if(iterCall != c) { - continue; - } + if(iterCall != c) { + continue; + } - /* Update text */ - gchar * description; - gchar * date=""; - gchar * duration=""; - audio_codec = call_get_audio_codec (c); + /* Update text */ + gchar * description; + gchar * date=""; + gchar * duration=""; + audio_codec = call_get_audio_codec (c); - if(c->_state == CALL_STATE_TRANSFERT) { + if(c->_state == CALL_STATE_TRANSFERT) { - calltree_display_call_info(c, DISPLAY_TYPE_CALL_TRANSFER, NULL, &description); + calltree_display_call_info(c, DISPLAY_TYPE_CALL_TRANSFER, NULL, &description); - } - else { + } + else { - if((c->_sas != NULL) && (display_sas == TRUE) && (c->_srtp_state == SRTP_STATE_SAS_UNCONFIRMED) && (c->_zrtp_confirmed == FALSE)) { + if((c->_sas != NULL) && (display_sas == TRUE) && (c->_srtp_state == SRTP_STATE_SAS_UNCONFIRMED) && (c->_zrtp_confirmed == FALSE)) { - calltree_display_call_info(c, DISPLAY_TYPE_SAS, NULL, &description); + calltree_display_call_info(c, DISPLAY_TYPE_SAS, NULL, &description); - } else { + } else { - calltree_display_call_info(c, DISPLAY_TYPE_STATE_CODE, audio_codec, &description); - + calltree_display_call_info(c, DISPLAY_TYPE_STATE_CODE, audio_codec, &description); + } } - } - /* Update icons */ - if( tab == current_calls ) { - DEBUG("Receiving in state %d", c->_state); - switch(c->_state) { - case CALL_STATE_HOLD: - pixbuf = gdk_pixbuf_new_from_file(ICONS_DIR "/hold.svg", NULL); - break; - case CALL_STATE_INCOMING: - case CALL_STATE_RINGING: - pixbuf = gdk_pixbuf_new_from_file(ICONS_DIR "/ring.svg", NULL); - break; - case CALL_STATE_CURRENT: - pixbuf = gdk_pixbuf_new_from_file(ICONS_DIR "/current.svg", NULL); - break; - case CALL_STATE_DIALING: - pixbuf = gdk_pixbuf_new_from_file(ICONS_DIR "/dial.svg", NULL); - break; - case CALL_STATE_FAILURE: - pixbuf = gdk_pixbuf_new_from_file(ICONS_DIR "/fail.svg", NULL); - break; - case CALL_STATE_BUSY: - pixbuf = gdk_pixbuf_new_from_file(ICONS_DIR "/busy.svg", NULL); - break; - case CALL_STATE_TRANSFERT: - pixbuf = gdk_pixbuf_new_from_file(ICONS_DIR "/transfert.svg", NULL); - break; - case CALL_STATE_RECORD: - pixbuf = gdk_pixbuf_new_from_file(ICONS_DIR "/icon_rec.svg", NULL); - break; - default: - WARN("Update calltree - Should not happen!"); - } - - switch(c->_srtp_state) { - case SRTP_STATE_SAS_UNCONFIRMED: - DEBUG("Secure is ON"); - pixbuf_security = gdk_pixbuf_new_from_file(ICONS_DIR "/lock_unconfirmed.svg", NULL); - if(c->_sas != NULL) { DEBUG("SAS is ready with value %s", c->_sas); } - break; - case SRTP_STATE_SAS_CONFIRMED: - DEBUG("SAS is confirmed"); - pixbuf_security = gdk_pixbuf_new_from_file(ICONS_DIR "/lock_confirmed.svg", NULL); - break; - case SRTP_STATE_SAS_SIGNED: - DEBUG("Secure is ON with SAS signed and verified"); - pixbuf_security = gdk_pixbuf_new_from_file(ICONS_DIR "/lock_certified.svg", NULL); - break; - case SRTP_STATE_UNLOCKED: - DEBUG("Secure is off calltree %d", c->_state); - if(g_strcasecmp(srtp_enabled,"true") == 0) { - pixbuf_security = gdk_pixbuf_new_from_file(ICONS_DIR "/lock_off.svg", NULL); + /* Update icons */ + if( tab == current_calls ) { + DEBUG("Receiving in state %d", c->_state); + switch(c->_state) { + case CALL_STATE_HOLD: + pixbuf = gdk_pixbuf_new_from_file(ICONS_DIR "/hold.svg", NULL); + break; + case CALL_STATE_INCOMING: + case CALL_STATE_RINGING: + pixbuf = gdk_pixbuf_new_from_file(ICONS_DIR "/ring.svg", NULL); + break; + case CALL_STATE_CURRENT: + pixbuf = gdk_pixbuf_new_from_file(ICONS_DIR "/current.svg", NULL); + break; + case CALL_STATE_DIALING: + pixbuf = gdk_pixbuf_new_from_file(ICONS_DIR "/dial.svg", NULL); + break; + case CALL_STATE_FAILURE: + pixbuf = gdk_pixbuf_new_from_file(ICONS_DIR "/fail.svg", NULL); + break; + case CALL_STATE_BUSY: + pixbuf = gdk_pixbuf_new_from_file(ICONS_DIR "/busy.svg", NULL); + break; + case CALL_STATE_TRANSFERT: + pixbuf = gdk_pixbuf_new_from_file(ICONS_DIR "/transfert.svg", NULL); + break; + case CALL_STATE_RECORD: + pixbuf = gdk_pixbuf_new_from_file(ICONS_DIR "/icon_rec.svg", NULL); + break; + default: + WARN("Update calltree - Should not happen!"); + } + + switch(c->_srtp_state) { + case SRTP_STATE_SAS_UNCONFIRMED: + DEBUG("Secure is ON"); + pixbuf_security = gdk_pixbuf_new_from_file(ICONS_DIR "/lock_unconfirmed.svg", NULL); + if(c->_sas != NULL) { DEBUG("SAS is ready with value %s", c->_sas); } + break; + case SRTP_STATE_SAS_CONFIRMED: + DEBUG("SAS is confirmed"); + pixbuf_security = gdk_pixbuf_new_from_file(ICONS_DIR "/lock_confirmed.svg", NULL); + break; + case SRTP_STATE_SAS_SIGNED: + DEBUG("Secure is ON with SAS signed and verified"); + pixbuf_security = gdk_pixbuf_new_from_file(ICONS_DIR "/lock_certified.svg", NULL); + break; + case SRTP_STATE_UNLOCKED: + DEBUG("Secure is off calltree %d", c->_state); + if(g_strcasecmp(srtp_enabled,"true") == 0) { + pixbuf_security = gdk_pixbuf_new_from_file(ICONS_DIR "/lock_off.svg", NULL); + } + break; + default: + WARN("Update calltree srtp state #%d- Should not happen!", c->_srtp_state); + if(g_strcasecmp(srtp_enabled,"true") == 0) { + pixbuf_security = gdk_pixbuf_new_from_file(ICONS_DIR "/lock_off.svg", NULL); + } + } - break; - default: - WARN("Update calltree srtp state #%d- Should not happen!", c->_srtp_state); - if(g_strcasecmp(srtp_enabled,"true") == 0) { - pixbuf_security = gdk_pixbuf_new_from_file(ICONS_DIR "/lock_off.svg", NULL); + + } + + if(tab == history) { + + switch(c->_history_state) { + case INCOMING: + pixbuf = gdk_pixbuf_new_from_file(ICONS_DIR "/incoming.svg", NULL); + break; + case OUTGOING: + pixbuf = gdk_pixbuf_new_from_file(ICONS_DIR "/outgoing.svg", NULL); + break; + case MISSED: + pixbuf = gdk_pixbuf_new_from_file(ICONS_DIR "/missed.svg", NULL); + break; + default: + WARN("History - Should not happen!"); } + calltree_display_call_info(c, DISPLAY_TYPE_HISTORY, NULL, &description); + + date = get_formatted_start_timestamp (c); + duration = get_call_duration (c); + duration = g_strconcat( date , duration , NULL); + description = g_strconcat( description , duration, NULL); } + gtk_tree_store_set(store, &iter, - 0, pixbuf, // Icon - 1, description, // Description - 2, pixbuf_security, - 3, c, - -1); + 0, pixbuf, // Icon + 1, description, // Description + 2, pixbuf_security, + 3, c, + -1); if (pixbuf != NULL) - g_object_unref(G_OBJECT(pixbuf)); - + g_object_unref(G_OBJECT(pixbuf)); } - } } + update_actions(); } -- GitLab From 89b8db28639fb797fecec380d1a0ddd755661c89 Mon Sep 17 00:00:00 2001 From: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> Date: Wed, 9 Dec 2009 14:07:51 -0500 Subject: [PATCH 073/188] [#2402] Update screenshots in user manual --- .../doc/C/figures/addressbook-button.png | Bin 17814 -> 18968 bytes .../doc/C/figures/answer.png | Bin 23558 -> 20951 bytes .../doc/C/figures/call-second.png | Bin 19906 -> 18514 bytes sflphone-client-gnome/doc/C/figures/call.png | Bin 18472 -> 19068 bytes sflphone-client-gnome/doc/C/figures/dial.png | Bin 17097 -> 18409 bytes .../doc/C/figures/hangup.png | Bin 19870 -> 18509 bytes .../doc/C/figures/history.png | Bin 17019 -> 18596 bytes .../doc/C/figures/holdoff.png | Bin 20461 -> 21009 bytes .../doc/C/figures/holdon.png | Bin 19996 -> 21042 bytes .../doc/C/figures/record.png | Bin 19939 -> 20033 bytes .../doc/C/figures/refuse.png | Bin 23461 -> 19497 bytes .../doc/C/figures/transfer-go.png | Bin 19799 -> 17351 bytes .../doc/C/figures/transfer.png | Bin 20122 -> 20160 bytes .../doc/C/figures/voicemail.png | Bin 17558 -> 17751 bytes 14 files changed, 0 insertions(+), 0 deletions(-) diff --git a/sflphone-client-gnome/doc/C/figures/addressbook-button.png b/sflphone-client-gnome/doc/C/figures/addressbook-button.png index acf0c185b7621d0b4b05d58c16b118ff62eeeca3..90d6d8a0413e4bc0970bc6847fc0b7d74a3e0f72 100644 GIT binary patch literal 18968 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 literal 17814 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 T1(6913=9mOu6{1-oD!M<M5C!o diff --git a/sflphone-client-gnome/doc/C/figures/answer.png b/sflphone-client-gnome/doc/C/figures/answer.png index 14fda5f03aeac15f9819631a2d0d631b1516cbfa..cef5996aa2621a5494fb888e5a607521f86a3d2e 100644 GIT binary patch literal 20951 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%0DaH1L&88{0FNv@)HZT0et2ar- zGwzC`o7=Lis&`Ea37MImUS6l1Z?3G+_w@8Uc<h*)8EDuc^n7u+hRBbfKMOxSIjOZ% zD7f<Fkxt<szkWT_+oS_p@7db3+iU5e`}gN>*<xard&|Yk%WG;}ug4^nNs}kv+*4_M z^XAQp%F4vVL`Cod1NTWqvB7iw+;^9~wW$AR6TLl8RatrQDX9ua0Z?Q4_U+lXwq_@1 zW=5XUnE)E~2tBZayQyL7RMD@mud6F4Fl@dVvvhB{qd>sQkQXIZQ@obK)=!)_uE^T@ ztIz)MbkNe!%7$aMIyyerx_UtCMO_LC3XUGLwXuo0Hl?Sh$0yYI9fR!ev{SbxO`JHf zlI6z6ZC^4^p6=M`z3Es=N=k}c;**VaV9O^2*?wPTb0^Tv&28B&sd7t@kCm0B%V)OF zd}Fci&E|%w<_oT6E6=pQ!<d?RJH_|piICdIaZ`PE&yYI3YJJ&;lwh91nG9Yzce8~q zEV6riFSn(i%|LZ?#)b1|baQ{@rRt`=shM?cm(y{U^7NlgZ5C5g1<#sCTEAgWyVRWe zdCyIw9Zh@IYF8Q`eX`}1;e`F^Ka!LgI#m8`ZfTsn*pT_b!6|Q@U!(;F%nRD+qPbsQ zj%QBAd-h{%FN=ppcK=)RZ=>F}XF7d<cTHuDPPVAF>-E_kke2_#xB1dCW+S!Dzqa0= zxz&Hs-}2<2J9@=5mFIo6f0KIloA#XDtK5TbUr2CpSM%dI<g8qne3fb5oU*l3&a8Ry z{kX=xHS5_<y4+dU{O7}C&u=YDlbyQ#*Xy16qahL=%K9l>A>Qxdl<E6je$5O%^Y<0Q z?7n4_dbzeg<CXke$8J@1YJJwsO*Y?G2^E{)O*tIh{qxs^og1F2>VC6ozur<@>f~H= zW#{+kd%E61CzDTEy8G-p^lWoLdXu?n%c&=^Cx2^}<s7@#{Kosk!uH8bKAJgm=BMA_ zmR(=^aO+p$3RkAqphlzjab5RsJBOFO{3D)rr1%HJvag#?=0<X?c=L9{L=}O}o>OEp zzRr>N4PW<IeX;nwSwSV4=MwHOUmcOU!L74v+15}6&lii&ZPdOt%`f@4(YkG{Gu8P% zzkHrudH&?gcsGlL+sn-N>zRn@oYA|N^7%>VnzG#U7ZgN2)bw<tj@{VFwyWpeq3M%z zE~YILl6>FL>%^1{3KIDlr_bJ(sh!h#cze-e_wZ%^-!^alC#Ah?UGl5j+jRcz<$U+4 zW!a{}`iMhD=9eyac<u4~(km_D<0i9a?aJ88t+)Kvtq|S*ywgK+V~#}<8%tAM{XG5o z#mBr1CReFWJIsFR!vzo3_vRb8yPsdx|8R<xacUIP<PabG)R!Jge^Vs>&y=lPIF;8c zNc-IGPvs$J7~D2j)N;kPTP9f5&v`1YshRxEbl=O}6GF`oq~Gb@sW{`(d)HH5DX00Z zBR4z~njYkO;ikZyrG|^uO%^U(%w(kZF>ZS5n`_P&t{DEgaG%R{VeUcs-iN>K!phS* z!k+Q^#cW@YsqX*k*J|%qj;Ze31J@pya^_H_kZIJ_15trK_LCYne-8URd8O*(=y#8| zddsm`a5c2(EzzBSR;y%9y*1l<i{t#qgD*U82=#UUlPwmbUwPZ{-`-beKCEvl2=kn= zsPDr?{z#r*sT_xyK0PT`)bQWe^<=%nzE7XUJ#GHUFTeV)=A$3;tSIIiMjP%khUt2# zp4B;dEOyzN4QKuuzMIKr+x_kBlljK&o+rEx1}1j*USeA6bka9i?c}rB99)fJ^B8;H zUXq?a>)iG-##W}aOaiJwddGz&v%M#@i$%-(@A@&Nc6rdlw@nQJrwW5+MqT=Re}A}P zmC2&1%LD#Zrap<4EcyDU&{o**$s^$yi7Q=OSkpZmJPY)z5B>AiS*)@&=*hXeX<o^H zXV-taX{W4^@I0;8?wwlV>oTKvC2aTgv-~|48ml^LshY2p*?T7`KuvAdiZeWY`+o4Q z?%|SYW|p+tY244A*}czZlaOU)=z--Ebzdo67we4vtUrGq&x6B}_gwaGluMm!wj<kX zy1&ovV;dtF=kNQL(S1L(if8{hj^k-31m>;KRap4^%zO9FwbCBP^t&sQ&huVcn|0~m z(sz68POxe(H2O4Meg48je{^f_7M$u!`2KOWNk(?3;wPE?|EId0DE|84s#nqanLd$; zGpp+#?tPg4v*2!$$)Z_#cD*kH_Y2y^`MoHyjO#j?p=N2>Ja_r|4G;eqw*4`ie6Mu2 z;l}e0Q>M=Cx_)Z1BJ&%I9V%0Ih)Vys&*hNXnqO>RWq-d*Ju2e4#)1!j=iNRv;aW6z z9eZi=P5G~dT4!(S`ufl0%&|^ckT&0{ViiNM>Zf%%hnHOVI%ORr&$j(XmhV2lA!V}c z$>^^M;)foDW$yW(pLA~F(vuO#%nr9MK65*rWs1p6tEQR#w<pxru<P%s==q_2{6}fI z@xF}cg02M`s_S=4>@nx=<Ehzi-}o;~Bk#zjtZQZa{>^W?wYvJkh5-3iMYCz%ZqZfO zE-84hHZ6H~|KOCR-+X@TQ?$EOdab3qf@f7@sOHz`Q+_F5r}WAc<e!_P{w6@|X8xl` ze|*=NvVQ)_AzmUhVeXM_dnHruSR7xvG4{s`*X(uc?;dfVzxI&c7uPu6z)*#H)=#OS zbM~LxZ<t)={^8&b`AF6VTU-0ed6Bkn15ZzjedbvCF8bV@2hH{3m+$V?6qbA6K6R^@ zaN4=lxQ9W1OutOxbnoR|*tb>U!cx({*4q+ZFAT2PS}*#sJLu=9o8o~XX`D8W&duBB zrPqB9UK1sM@S^fYm*r^!JKu{Ge{(JPxLdqp`P6Mp?;{s2>5tmhKCAYlPJ4dTrB$ny zXK~ryjQ(1}ExUTdf}0y0WXk5J-M*5`u!A?lr{im1QIY=X+hRK_4X3d%%z1h5niOk- zq=*Ce@#HnWLY-Fgx)$a(#)@z~Rk{1^@080%oNJC>ZhX?N{AbPj;({lld`D(v2&~ZI zXmmX`X~AmG3EfKZv)*vK&-j%p*1Z3<XRWkB?EZ5vrKOl&M=#b;n?Iv$s(oDi$@|aT z&iq;_>Uhod_5PQqJoo*uZGI-dW$DJ;b=xjIvaDu~X}3MMWqQm-#)ERQH#SyTs-Ihu z%(YS5y-u02>+#c5>FYG=<88Z->!r4aDlhx@s=r@rrtJN^w1<BT=DoVZWxqD(Mv7d( znY)gehd(UH>v?gRb#Ka(-=|kwPAC&w&m(TbqJD)-^m%W1<eJ-k$DEG--}C$8-caV6 zn7KDf-njU+2d7Rq4_&eH>PpVX)~1Xum(I^myY(Sg=H$7A@Ae<}TstM)edxRNmDZ)I zdtRP8cIRx&O)1w&TgB)84OQ*e)_#AxXJ_=4Y>)W$m;VUPO?H^~>V1dVA{+DARa18B z26)B0+$-E!C4ThI{Y8yBmu(B~c8f3eYnD=-cI!~l%ns{mJufbb=+B)ZFJ}GqGGm{+ zgyp@@GV)@l9{)LUGo~h)#oji%UC7|boTuFzqb(%w%-ngo>Eks{*Qe&oH^2S7w}pMn zv+sG+e%6XUI$L72VNvOIsTZI6!Zj{vh`h*|qTzMXvGEU^Uv2oln)_RI?EklXjh-q0 z_PqG&sHfYKvL4xLcD`ly->kVxGMVY=MI$5rj4eKs58N{0T;sbf<H6P9Vh*3RXSX}9 zPsk51VUpP#nd1K=GA$<J5cj*gFG5x`GH$)2rJsDwwC?X0n{9KMGH#!dG|y(7>egsv zzG`tmW5BJ9iI?0qh}gM_7{2h8n8NxjU}e|>6ZOsc&wWdLnO0`cob8@^PS|J8|Bvy{ z<gPB}%sV;dy3Iy0EiG}*5WX*U_olL5UcWH!a!cd$7k?QT1f@Xd0{G=I#prC=zh<JL z>bAzI^QHY_lp8C|-tF|9UUw~JzU}#iDh#Y!rEV<{J9Fb@LykwM&vBK=36)P|o}c}` z<DEy<p|IA;Pb7V`%NIV7dgi0_@AMI?1Dx)uaWhwPROJeMb`w2vZ~gkn<GWwS&is>G z?38_T!4#Lgc{WF$6uMuq|7&62_w7(zWYGSVzsro%=ZiLrUppKe8KBP6%eGY^(d6mN zASLBDGVYtR3@k#X2QNQ0CBE64_0!79r%%VbUTO+C!&h2xN$f<5&pyw#C5OCxuS&jE zE7m_`^!??dMUw<i9nZMANpB{X^6w+3RbCn!bSq7>;#JHtzs24bV1D!Q|F?H5OG3Wh zJ^u0g-tx4(G_{#2Mx34}`Z@)!F(k&{c_5%EDk5$(ZClhD*Ebt=w`Q%a&GNr{D`@++ zE&b8myPKMh9^c#bW|7MT)fQDn6_v@UlRVRme&2cC-{M+kd-2fcn)v4h3GdF-ynlbs z`twX{`)B{^wv_+eU$gs>;;Q?r6V6JD{&~8?dach66W-I3W#07%*YWSjd&KUp>ydhI z_5H-Ypu?-8rXJj$k`(S2@L1*iZasUq+uyRZ?0TJ#xc}hkZ*25Bwnn@1?<9^JLLMOp z>)W2cJg&D{g#Y=k!rMRo{^FQ_@3Y9}`5r1E_dOXD)=!aEiwYDHapO1qc<hx%ulKZ1 zhtGO$$<01`ef8aUhTrz@YP`BE=M<Z2GH=z*KewdB^vw&8J~HCc72yB9a_u)kE|ZOE z`yD^+(70+ndqe7u6TVkH&Uild*j~f3-n?VhT=&dQ?&(s?AHMw_Q4y}ndEMu6dhpsU z@3I$)UI+?0;cLE-scnCw>i5v3T{ULcznIr1&c4zUqjw_ysCWI!girci1y|la>#W|E zxHHM@sU@4~`gOLhzeBGCZ{y!EXVt!$A71c$NuB>``}E5@>w<(P&f079dH4C3Qnj4H zpF)0~5BWI%^)ySD%Oc0-#rrtlIeqI~7F)HEhVOZot07TR);DwB9DljV_+F&LGUK18 zw|o01fAeoou3A2At#$NAmR;waCjWkF__fXRPr{a^%ef!<?275RTr&Mg#?KvHS*DXM z4}Y0ll3OsTf1>gKnNJJ*FPjJjZ@FA@xZqdnGL=*R4cI?Fx@xm~)3m=|=PpnWDk{`8 z|C?jc{Dy(kXGgM>vF-cKN!1gW^X5u!_h0sJVgC=6JJENI40lQ0-Lv&e@Vqa_950@f z3p~?5PvZQUAZ{(T#<lVrA1sS?w>vQ}>fE2@Azt!xj?Z5vQ!E;+bE2^}@y&D9<ZxaN z)6H)l%F38Dh~IxQO}yX6B>!M}<tH|EEyJvN_4BX)`TOH*|F20aWH$Szi5JVwa(jJu z_0GSqwjOz_*)#KVuH4T=vrexT=H;3HHE);S`gOoHxH91&yUnK`*>^UaXgDI`7HihK z|J-~3X`YK>ztkKy;W_-F!lqq(O~l3~&go{gi+ewmw;Ik4(V6zxKKs_**yE+w=S+PR zyQlc^<U8{FI>i4Q&ft0ZO~k2&`P#ml?K6$j<@UWT+a0;9<Yj$X$cb}(3b}IjxpMZp zaq{~d80uA8JVQMVA}{!+8O5GlVv(z|{Dz0$#zh*ZZtiSP7W~qgdM75R!`pPp?O={V zv$E4QwTW@%3wr08e$C0d(QJLiFM#v0dDD?C5`w`~CP=wm4LQ@s$t|@kOE}C`{osZP ziDf~v;!gautkrxmz3=eE0<pKA?34G~hs6atb!@i0Q~iC*<|23I*{fGYhR1sruaMQR zv(jZ0+50?6V(s(yi~q@n9WKeddz#NSt$fF{vu}47Tv4C&t<Wg>61%~s6%!hrf1R2r z;?!}uwc14N-PNf&RmrSZ7pnd767aE2lx13!@TFx}QOE@8<1N1~9=xB*eQB!5k=!i- zH^aQ&K1-ZqU(hDwso3&k+4(!kS#$jAKX9i%n{iO)YQc=P5x!PpuFj#MAtF476_!aX zkZ9=?x^$@Gs$S0$i!MnK*$`=oO2L}nOecPPcH$^>dw6d*)5CfBOdsFbw{eE>{)*nT z^Wh@yljjQ){Vy5LHZ8f^lIUO|qbk(*Fqc0d^zF0v+4mMYeq1oa!E{%)gp|o|tEz>q ziP!G_lIj2USM2|uz5Kr-!{4jOAN-d#Z|~FERnKFN#a_;df88Se@Ko=e68Dz*_VyDU z%_<*r6#BJQ=l_pdcJ+Fv>|6((o`q5oCA_L^H}%vPpW^D!DD-LTD!Q^uSB$sY_3#^m zhdx_3rY!bridJ7I>GC#Eq`ONhob%}7<$3u#T92=fJ9laEv)Bz!pBZI8OnKI~wXFYw zc(239N+0>>2U5Nqx}mW*_Pxs^N3(w)W5d$=Qa`GOUCC(Zs$ciKmH%!?=+75LBAYXg zvhr+``)T&<{>E-~x!Z^KYg=(HnrOJGMY`T{mgmi^^X;we+vTHAPpaRU**jBnPYF-? zpCks>FoW;f&zL?->#UY=Jz2rswWqvgLf*_ZBI==Uc@vBcqC+0_No?EUH~+{x?#bV_ zY%e(Qbh*#TBa)sDj5Sd+e7%@Yt`+k-lbNDwWhwDZz^FaYgd_U#4Ii;hi_QgaGk=$z zoW8j;u-y0gv4d)h;`ra|MjidU|7Xjlr^1p`7-p>Li8h#6xOeN@y|M3EjvwEh$Xp*a z_0S&iPlZ`*F3wvdPxkCI>z}9{_A$hyd*82#rN>{De|kOp+C{5WoBfq$v%drwYu9b> zs($bF<fS_M#MF`vpTyU1-tp9??$7g&Q;xijthp`q?(FNsk6zE6ai)_;o+W?JU8jN? zv9QYb9EE!Gc7A{7CFb{AOxu3tf^CaiXGk4Si;$Qde5R$-^$qVX$p<GKZZppodc|SA zD|}t~N|9faHBWgb=dWn|xmiE$?(xcyE7vbbawhb@;_*G7?saoP@HX?9=ga1WJnQvV zKEIUVWKH$2u(-d~6CBo5M<2GnR{Xcg?3w=jb4OA*a^p{b-M+;*yRrLx+|AS1ZYfNg z<ap=fal;<J&<2aM*;*A(Cg#=zi66C0lCYokDDC29y?-B0MR0xpmbdrc@o%qNY;>Zx z@ZSzKo;hb-N&fz44-QGUIiERw`hU-4t7A89S)9(_*#CC^+qB&~8>+>p1!S>%BwgFS zZNsOfepX6s&+6Ad{+OG2=hLH#Q^uhO4&Kp>-uaf<d~NaEFBeT>T*Ln4Z+Xy}b}?M< zl91E6JM2?Z3>GYz6Jg?KB6WPx>;RD)mmfVl*p?b|FP-P<Ph}0Yw<jjA5hy-ddH1uS z_TBj(;v=sYT>WCSZqXa>E!Pk1-Ypq_zou(4qjFdJak+mVYosHMj|C*X-4}Cj`~FtG zaIu@)<~hz<75#z5cF+ENhW%AlCO028|9QIm{f8f~nI%5{O=+5K{^7GVzrllRD{bsf z`n{f=y(2$Rd1In#O4OshG4Frme$Kyl$gAASevb|7>5aGLK79J=*m@_ib4LHJ^KldW zqCPOZ-u6Sn=$zY<D*f~OA1!`z>z_zg+%((Z{;f4u;%RbHl7R<bnK&Cb9586Gn6)l} zrHLhp&1ms90ik#8nQE+Omwf!TZS9Q`?#W%hi_<@7&Aa(mas5uSpp=s;*IzM-@UcYQ zkj_#$KKWoi*Ru=es;#Bft6p%hXviCV;khpHFu|4mBJ=E>nU|i;OEpu|nR9UQ^yP`c zJPKZqula4+qqt=D?tJr{kB;{O-u=l`+?jUZRZ_&ZLvHyqDvlif#9p5G^IodXo=csq zC-zoZD9^8+EXyn#F;%0wYU{khJ7%H(R?oX|VPlV%^}mQ#>AP3lgl5jlfApeq!Iwvl zXJ&_;{>vSoq<S~~UGV#zJ-?S*1xS}~+U2(V&9*Cx+wA)u=5r<95UTnXEK?sWad=ho z)hE|IojkUm;k**EebbgSX8VlY6SUp?o`uicymEDZx_hwfya@GG3yr+w58SbvKH=v2 z>Ulq=o990H_*LG(xL)Mg1LK&$HQlG~25x%p_w?LKGbLa4%8%P;uUNs66jPWX_ej8W zx6=+aiwnF4Ns3uz?I(9FY1r5POsnt5&D$*NB+VXOwXXQSpnLWHyS9&e85d+klnUQ$ zeluh7-kA3{F18<@o3pZKf~~b|d(oebpWbILQdOM#ulCB}?~;vSalcMR@5z%sp)dY? za`LN$ukqJEeVSBzW>$<>*xuP}GG|Vi%B~dW-LPBB=aPfEr<TM<gR9YhRYaCdT61c} zCZ`iKe{-JMU1But|HX>L%T{4If2W-Gb}w@LFLdhjz8Sa9?(>^gzpXP>boK`}rkLyb zO2wy-&#(NwYfn!3Y)!e#?Vr2O1WY+}_VenU{~pTL+?#mzM~cFogWuSC?+8h&^}M^? zD^=P2wtcrLPd&SJbm=egS)5nRE>4=_)%f^CUDxluSAOJ7c{W4g&C9!0$9=nG7u;KY zX?cKs+M?`T`&&aQI={>MY^zHNIrVJ&_0KV}cHj5LoD#5Zn0)8<o;CaO#Q(38JhSy5 zgX83Twqe!&XCsPb<*&`q{9AZ_&LY{~nuwJ_McY4jPoB-8cy6ij_x0b;u3qtBucYvf z9eE1p*T$V+Ep7ia|Mk7&t0D^`Co_C#+x5Y<`Agtr$yt-mUls3Nwn5>o_g4Ko50;rF zrH8du{jglA%zc74H?cHyMqz4NQf_X@@3%2C)|STGJpCB(cDwAp+7*7y4;R=ttHz}} zs5qI_WfW|%D9z7JSLa)IGN9vIk?ms^;ZBK+7t4g-v`0*+o$4sm9lIo>{grFx+E0ST z&mLdu=gAPu`~J|}Bq!~_s>R2de>kzV@fs-Q)aPl3)}Bj0C?MP>xV-WzpWWssh2K5) zF6VXPuq?Lkyfa7S-HvZTHFFjDu5919`(m%Y2#dnmc`k8LT01TM-gN#7&k7IsHP*c* z!Zp`@ng8WW#u76HA0ECMcPLdaiT$q0%abBIcfD@s+m-3%vG7J|N^R^`-HN#{pWHZj zPrqB|zS+FmogLAqbGNMfKga$5yMre*6|@g3#N6EdwJ+IE!Cdv&wrv`0%id)(A7Xr! zwTpu-I&%O01BO;kxvARMdPIumXi287jF^`H_~cT*ea094O6qm>Z30}wZ${{y3ij~O zOW5#KIj$znzH;*$lfBz#x}G*ov$1LUEX2cMviZ$Ru}{zXmYaAc#dZ{1+}R)5>1n0P zY@{hU;bwQ}Vw1XSjT2}3w>@2PRE#~@OLxz%jdJBCqQRlo3wx4`s-Hdk^6s0EU5&JY z+vRP3Q|<^Eok`G=IdSNx?w#-V-y6L5)PC--oA~PpOPr_2;iZyWzGv+f&Y5O8F|ql~ zp6`+B4_9)&a45K~{^!f_t0l5kXC{6Bc~Yo#;r`vTe(PT<^qY4eKmXQ=NA-J7pY3NV zV^>b|dGb*D_r#TqD|g<h^5^8Y+0hjpXSCt_>F1}~PwgyP!aCJr>-wB0dygEnDQJEC zrs5!nqThYzqD3dI+TwS3e>)>-WX1Ps`OfUl|5;+&dyVRqzwXkyX86Bu?(X@ro)e$G zzPr!kYgyiZPua<G^A0_2{q);i@tm2c{5Sj0C#_Nx)=hTPpL_e;Cc_EGHYm-FSUlTY z{`QHsJwbBPiNCmhzg>NGGq3EaKiaQ3N{$}<RLaL9aCooyvOnLLPH~4;#&Q&{D?feW z{2jk@+qcgX|F@^Hov9%&{lON&JLScKlJOs(H^#4=mz91d^zZ)0<fRj9PdaR>wtN3H zRq=?W+`CU^c013UR{MM;b?^4`RlDa2IC<>gRy^{5dBOBNNyU~4#^s7F0?(ax^jo~| z-;~}W@JMFE)5XjEcf?GMRc;aZ{~e^drDeB(69*?qrO-Pk4n>tatq^1INxWfFY?)9X z?!=+^P_IS6=};_(B0@Ro5&~eGQH|<YfAK$)^Y&-~)1x=<F)%PNc)I$ztaD0e0sv1T Bpa=i} literal 23558 zcmeAS@N?(olHy`uVBq!ia0y~yVAN$`U|7t-#=yXEU(e$c0|NtNage(c!@6@aFBupZ z*pj^6T^Rm@;DWu&Co?cGa29w(7Bet#3xhBt!>l<H3=9nHC7!;n>^C`C#Q6D3q|f|i zU|^6eag8W(&d<$F%`0JWE=o--Nlj5G&n(GMaQE~L2yf&QXJAlZ@N{tuskrrKZh3{M ztN5|{>gp=R76Ao^7Yb*aE{Qs7DlWND9lAkbeupf#R+vaY$b>j&g@wu;K})<Qs+kHf zHGa95clYl5evwHN96XpJzSYi~JbU-|doyp&yjgy~c-fi>lZ3S8=YQjI=KGd>wd>)P zDQman-IZeH64Cf!{oujD<_r@l6Di)PwPL+jC!Jcle^O!AwK@0J$}uI}+fymQ!{!ng zlI7Fb<kc{DuI%q`Zx{Q{Hk(=&n`t7&Cu`+$yib<#$KUVwGjDIxHJiOQ=u-IVt1@;q zGx}t$CrzFlTyQ68qkyom^W|l}-7@QSBzV})&A0d8TlLjorq7n#+uIuUxCFW+Z@#&~ z(`e(u!x39D1UoxBW$bDsHs4(H#e|hhi(#r)=!gBQS8I#w$GHfw7#SI9sn({arz<Hb zUC7$X5VNa<b8A%W%9rtbDg=AooU^jB4i>t*yC)?jdHDP57wy^f;Mp^`kPs0`Ny!x< zT4`ryFgo1cmV0x5y}i_G-}BP##y?*y?(gX6P|(xk>pr^Ziv=r}7Dwc??mzlnN|RJX zE#oeJaShb*(EtD6dg=WCI~6##|DC7e$@)}x&N7Xz)N`x%JXbw!G)ZORj2RwfWoCSQ zd}n4DHh+72d-2Ao;`eNpmX>#R6gn4jifZg|U!v-HN%#1B^URZ*Vjf(&dHeSLX**IP zkELzCJ1Ono&O6?hv}*Kb&YXE8$Lva0>AL7UyGpa~RlU}|bosLAp`Zm1<R*sMtqfUq zX_Csy6Q<SbmnNxjt_?f=`Mf><fm2hpH%6^>y>sKyQ~k~iZ{^K3De39TT}pj@eX7fH zw?-LC^}Z;v;$d@MnKE;}dBepF6+OMakB^TpX7up%)YNc^oRDc$XlTZ`d4bd7%ZyBB z-I8lnE*&^69A0g`^te_)f%MmaA4yj-Oj5lLr)^G5PY>5yn!5SsilC)jjEsyGRaHu- zjhx$f694}Cs-mtwJ)-T>shC-}XT-NveSLLtW3qeL+Nf5Y)2<z-v$j5Z`_^}R-rXBp zGKFW(oVj#T>c=m+X400HmOGbBojEg7?a-vunUAmMC4^*OlzQXo?X9e9Cm1=cu&m_B z;k&)YnlCdR3so%f(+w&AFjLe<;l(SXieJ$-FL^dT44%17SI#xrUgDCG1W%8o@iL!G zoybi~PMk=H^z;^SwXwB*d40XS)!e=b69jV1qz@iE$RlGh!8H5Ygb5P@9@I^3-IC`% zAu}^GWNp;ci;LZj%iqPANbzQEm70Cl?dqyfkY-Cu%O%T}-J6vDu*N%RDeIEZYY*-= zo(|twT&n!*Rj7%U=}kA~Njl9slP64aO3Kob+S;Y|wdSUDVJqL)*MFXOdKY|nx^my& zif0>tg<NF5al)_f;j5i{Th`q1T_YM$ed+IBe~xc@o|or8z3q9w;8f5H>+tCxe|@>{ zIrUU6Yh%sl`p9V$MdMcf*`|N(JNItupBo}{Qqt3>Yua`nE$ZGKYH@awUeW5SUR$%S zO4wGJSXx@@#P6H)<3~kGWZKJ1OL-)XS}rbj-<)ue>CxlI+-^$w;m;1`B^Ry;(Ykc$ zQpC0#$;Zcflh4dB)QQ-z;6SX5X_m;#moIgqw!GN(am%GCb97E;oVvxZeBJQ{<z){) zZOynRWj$-#+UQGve@@@9Gn93$+@wbbl8&WqD|q$Cb(ZOx^B1)*Zu$82=lgF_Q?1|5 zn}2A5TI=e_W@l0PS=+LGuU@dZ6!c+!XXexrMZK6E8+=}_yqZ;Fbyv4*Nx`qy&s!sO ze*F4nRP@9nDLFZEPlcga_tFERK7M}Be!t(J{^i9*pBV;?N4v#^B_$	Dkb>wVnG& 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 diff --git a/sflphone-client-gnome/doc/C/figures/call-second.png b/sflphone-client-gnome/doc/C/figures/call-second.png index e6527821f6c6b05d05b9697b5a80166a3539ed08..7b1d8df4f674a26c6102c0bc64ddb7eedef395a7 100644 GIT binary patch literal 18514 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 S`k#S;fx*+&&t;ucLK6UoG|>$J literal 19906 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 diff --git a/sflphone-client-gnome/doc/C/figures/call.png b/sflphone-client-gnome/doc/C/figures/call.png index 6361dec67a85d9a4df7a35eb79fe6d1a6d6d7b4a..e80b4eafa4a4167048e66693d3cb5ef8c0128e0a 100644 GIT binary patch literal 19068 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 F0stL)wL1U+ literal 18472 zcmeAS@N?(olHy`uVBq!ia0y~yVAN$`VCdmsV_;y=yz*a=fq{XsILO_JVcj{ImkbOH zY)RhkE)4%caKYZ?lNlHoI14-?iy0WWg+Z8+Vb&Z81_lQ95>H=O_M4n6VvNj>_0~o( zFfd4#xJHyX=jZ08=9Mrw7o{eaq^2m8XO?6rxO@5rgg5euGcYJHc)B=-RNQ(qx4c5s zRs2}}?&|0&#g=<c?3uqhFNrcbI(aPouGA&#`X(Y^<Dv%9CCa)JE(p55^j)GH<iyEx zsd{&5`F{H#4<{x?&V-xaEB*4`-K$PdOE14)dw!<zW~Z2#Ia%9pZ@ihaCFiD4!_Cd< z$wo6Lq)PHinM{%Q^YeRiZ}04Fxwpe^lrFve^2Yvp`?*%7ObO4=&E1lHov;0HpyE^S zNk<x)*<V~)DSY$h&7Ze(&7?10yl9erZOw&mT}>A=o}8I!d}V#SeD~2q!u~dl2lmze zzVQ0%3mHClyTr5e?dP|&u<*%PG+fQPdd`Gb>J($3$mjpxzkGS}=H_OOCWor3s@5s* z-@Ws5abc<2E7wr`{G6g^Q0uh%Z*L+?tYkGcHGkfYjg9T>>r>O!T??{t`gHM$6DKZN zzFfIW>GCpP<^{34%ii4F%s%&S-tyGb)As!T_uIwAML=4*`)u0fa~8Z(r#M4Hx&P{) zHtJd=ax3oMr_{)E`sW`OELio*_w@PSF#;{pb^d`<{(KYD37+=!PnC97eAhPp_3v6* zST=3iR8Ux$cxy{$$%_k$?OPZ&ZQi`I>g%d!LRl9IW_x%CPI<j8TqRS~-QcL;#G5(i z$|Jc~9ei|3zmMbdx2I*3!{UBQN=jPD@Tqv7D(t?!CG+s>_51yzqGq{8NSWMGyL2j8 zLv-a95m(KUv-f=dYIHTlt$%(}eLhRV%S%gdy!|HBxmsnBZs(a#6Q)jW)j7Rm*DkT> zZFlpI=a?lMNEpoYQJs_;cb6e;^UNDJB98UT_wy-OT3YTGT<X|%^U%#36>FLr&Lyz0 z$e3wYxh_i-jkk%Nv&A^9xlJe}@Zjq+IcAG5zw`=iJN)p#$&)KxmX<1CDzcCXSryWG z;DAF-ZEaxa)P>INo6^ooO`0^RE7#dGSMOx*nQZ63zrMb_vQqf;G+pP=t4>E!x8GhF zx7X_K?(+1%zrLoVq}&O~6ur~_=FJ<KOQ%kp&=5^rx$4x!)8U5RRbSN7gMx!Sd%ayk zL+`}Ke*F0DQHqz;uN@WdR!4JxRI}UMwwuM-w#}z@Zu=cYwHl*fv*Qah-|TjdQk&el zG5PqkRXwfT;$l*gI=Y!BH}$MvumAV=clY(zH`n|ulHp@lR8-`VGU=GA9WEp<KmUE* z)V3{oE)!O+Tp6-1W~O2CF@x-DIwe-JlT;oSSgeTIY4rE^cXe&;?kQ8Iyndy#YD?F& z`TkK$dGEcot>;wt*I%R;>!j|LGV`p)Dy~&tHAP08nwl?ECNBH>_l9WU#6I3v|DJbx z7kqsDu<q~6!g^*cNk*9zRoCK|SM;Xo-}UQ}olx`g=ePEj5PiSP|Br?X?|ZUi?SXPV z-Dgu*T6+ebs$p%cdRreF8fY4~@<(#~lRNq^-aR>(wt3>zsiCVr<(S<reHV7nsC)N` zw`JD*_U-GDG;VwICTE&Xq*F|c%&JwJGA=5$@yVW=VVFF_IGyj~$B#diCz@v!J8s{o z;S#7~YC833x43cM9gAaqvZwFtEdG4==*7kElc!BP*2K!4XCW}*xTouP_t4OirM3*m z*SjQ_e1GugsYYCV4bR(KTNXW^eE!jgRXkP7D#x16b{)=o{Nv?jll&_U&EktQUWfnQ zUwy6X-j@0zq2}3QZ_;G-re<AUQ!B02{%q2;w*Njpt9Ni0-rG~TRLg&o3J=@iQm+*W zKUrUIy_xgl=TF0|D;h~jNf8?o7|mwu-WT=p@_KYTe}C$k8HP50zg*Ud*wDZ&uJ`16 z;o=$BdYL{}?VZ=s!jg7o#zAiVJqITH+nwx_wdUaAQL(g~d2@5RvZv4@4YA+97jbRU z@LIZMQ?6N%td`-%>6L{?1pZy$!&$m2{PEoD@sE3R>m8hQG`K=mv$B^fX>--P&N;rm zOgCuLrjI56@{jFcS-xva_9EsGrEtH*Tl#@BE<Swq+I@4{)Q;_|S7-$|{3xj8%&*z> zdsbJFs0^QIsMZJBPw$*u@7me7)qP>(uXeaIZK=$fPaJon!VYG1KI=FA9PuSu<(bk~ z&Sg?1Ql@<e_(}^l9xYBeoAWI9<j;8tYus+{V}5aWpXJq9*A1%04?pC$ti5q)CePA> zT6_JJ`Tpi|d)Kr1xt=!sQItQw@yp8!e$%@u2FHuD-d9a)eXo9N)xUI(H5QjHy)0SU zmwC6trmI@NOUcmC@XyEN@;P^Q2s#RI3ASo<S;+A1`~R={&)>hDot>IrDkJY6-t+g= znKLQh-rThL_v0~-oXw0YS3>sv{TBVD%C<>i%8%Pkn*2vKbvIgAhFwug5)NQxTz%AO z@vW^HH<xg_`~C5JUmYEE@-8n6V~^X4C)`t4KV><aB02l+xtTY9NKgBlZ{}K-FrASl zX7!aNRjTSPSN+`HNY>roH9aHxq|lF9CpFCfp8NVV<fUDUo*d_#-BUQ1y}Dzcp|m(^ z_tV|Yl`DST2<CYkAf3+8te?x)v$(pHGxWo<zrp#2>)g3l?dD2RTbf{6@%Vc}z1m)} zruiE`u!cOnIPuF$^~qDhw#ewqRTLTdf6a3By<VbpevY!=r=>5IlPf>3{8qvFzqeSi zpNC6p3YX<^5!OJFi7G26Xq{SpIcuwsm{^+v$4{5Q3!gf4baZ%DU!8UTT+<On&r7AH z)6(o&98btU5N26;A>;Yky6A$EO)I8)WiE}%O}UktB5tk}Tok1I>iSCO>;C%`PaYMH zxqC2=HMDV8?}4PYFCs#dCSR<sygMzXubySo`3;%wHs5U?b^AZxxaXeagv&dNUK#8* zU!VRuUen^!Bd^N+D{ZIr?~|=s+jFAT=T8E=ChPvi(-v&us&Tj7KSNVKS6NVg*S?>c zhhJG1#=keKkiF>_ba2z9@=s5#yDgsH>D|7JZ;@GOM&$XazCq?p?+uyC{>}Q&7XQxc z*o6#%_xrEOzSp|Tk@Hjda-WEXdX?$>z1!!l_T&F_O5FcK#2H=pH*Nvi>IxI*+s!z0 zsynRYYSrg^?TR70)f?Qi-l%{1wEw>QIc|&al)PZM#wSx_=U54{DAphO==N3Y`&^qx z+N-*}f)ZR~6DOZMvZL_vi4!Lh9v|yvVPP?-`%{s2eqL|f`u&NkTm!F0thux+F~e=S zy6>gMTXxJZRX_Kjz@nhI@Yw0Y%r2ZUwg;XtaXfg%cJ_U%mg$L2w*vm1Zmck!ecAi| z)3xiJZ&qnE-S81rDbKq1S)e(tu6^R!*d4KZCl`FuS;@6viO|RJq;tnk@vaE5IOp~0 zU+x^g@PZ{SLQ|#r&34QxSbdRUy-fYoy~ig_3^a6?dr)E3;L_V>C!(YE@k3zJ+XYdR zJx=Ha_?>MFVLH$rH+g^Zy*-s@{u#8$*v57Ky6W>M`uv1Nrw$%H$~yaOSfbYHyzP(Q zyy;n_VR?PYY-zFXr6FF=(x#aQJ%9GB?QWj_m&k)Pn;)G?+x+n5%afna+xtgFN!_pc z%<JAK^YHch{mZhht^$>G*N^`23W`eY%Vb>fF7CmTL-H#n-&j=6^7EB8%x$p$8=iAa zjU%CmDX`@XPr>ICfiYc8T>oR2vM!jlv+9MqnEWqJfx>lv4gB|8_B>-NfA=<E^3nQv z$D%gWD~W%)^!xUDdC4hV#r)lpqGxtr^l;kuNl3-eUM%d2?Up6c6GBBpCl+d4*ES1S zzjJxk$*;H1Y@735lWS8{jAf?G?Xrd+PQ{gPj~u=Af9vAutnSB+jEpkw>@YmuC%ZUq zZ`F2@<63-t?ah<b{V#3F3^p<{+Hm`=N&dY#cXyXxUg9~qX8O7{Z@1mdnPXc$O)qwr zi1qZ1OD;NxhJO6;A>ql1i79DmM%mYNLPC!w7)+Qn>Cm5_pCzqIG#0z}r@gzg^QpA$ zp2S!C54U9}@l4y1vEu3RCmVd%%#P@ucD1JR{Y3W4+Ru45Hg_`P78_Onx8aD4D|n}( zx2PfG!=Lw)rfsx4s4TDY`9fXaA5qVy$b*TSm9;DXMm_KgZcy3L`MO<U(e;-XG_Thw zTgzy$Rvdl4@At}$c3mD>MfK9}=k$Jj?zv&*id~PIez9tYoapLOkhI^k(z$(F+@F2g zlFoB~XFlXp5Uw?2oE`OZ+0zuaxo36VRUV&+nkIMt%+KB@Zga2s1|}6<PW$(EV$++P zRUs>#y2W%YN?ru)tJ2h7`J%)sYI|Pq_U+~uFJ5#wx8zOP+glsU-^YDg_I#>n)!uo1 zversnN&Bj_d#g208`;^}Em^vBW6H@%P9JSNCv|jnB^~V&{qo`>v%I|gq{)-LORBwv zf|o9;=5J=4t>9R~<1**Tq@8k;)9Q|wPgXNn;i|mH*Da)bX8SC&ln)1OWh@JMQrPcZ zU6u4lKb?Wo@5-O}@^`uS=PF*WopEqtZMeqeD_^V*|4g~|fk`?k;_IyxGZCAAp}#+z zJEOPcao=vn17{ZcvU|_Ho!b4Y^{TpDQVzHB+2eKRzBGt@nY!1I@kp-Xp9nUssrgZT zwprW{kIO&$I4!TF=B4qUb90nEOPBA8m(`LyXZ*a?zGKs$>br-VI(mDL-n~2b-rnl_ zC7X&ePx<-yJb86>_4RX2GbC(mZ8^EPw6;5)nY~6vTs(Zw1kFUbr5asx>}qFCR`-8) zK3B&os_Nq-*R*qUI{lU(&M=wg5v6)`kJnSVUq34*OU!L>Tz@=m^COYsPUn+`H6IVh z#7UV?ljD6oVa`m~5GN&Lb-VWe!TJ*>&h1t4G+FaUp6|$Qz0aRNowbn5a9q60^n=N> z6;pav*KaKU8+6DoZQ%+Lzi&&PDE#jI5x?|<Vb9GEvbVLqDz2Do9g*}S`D@OzzZ0iD z-nB9-k#%}>{6dHQ$`fPb_jcP>7%<AdUs#ozzd^P5-vu$J>HmCMA{m`up1S$>s&&L~ zz9s(4r(Mar)AY*1qu=sy<Kf#D)7O58x3ax->5_-H_wL-M%a<&<Gwo?om-5z06^j)F zMZfP<@wBkEp8liq;GfNp?l>R3dNuUz_4W6C)xH0V3j4RMP_{GV)aNg^xpU{jYAs#q zA0K~wSQzs4)00bAS07PR`FJe+{-Vn-4Q}XcSs5zJTh7t;t7pzPzWxe_k{8;0b}EL= zp0{}6p@*+to!VFX`^BxT+MJx6qJACo=FNL^b91}jT&sywrj*3$tPe5NZCDnn{rULP z)g~)~r6*r(nBA?Nx9(iZYOUb?b6uNXg$jPH;+tdRo0_jLl$?|ix&2waHAnsPzY||y zR@xGGG2mc9VWH!+RK1uT4coVuw@wFj@I+h>W|&ONm*PM0w=}E3$f{3dv9Rgtu%%&J zvm|&eneUhFo~vE>aY=gGqLgKy6ZS@BTwZFL@#DLqvGL?}vAZ|r-?!_Nu?$+6+P%o* z>@3rlx3<16)zXgd-MMSmDn&)b?OWDuxtaI8#>ptMt7-CP?k0t#lcx@8toZS>;&GNq zhI?3ZTfJe4m8_keUF)<{D?NgI{QUIHQl`F_yO%X>o#*n!m8SO(N!!M1tX;j*vAM0@ z>`j@qp`l^9BGaO2y<1E&E-ZMM_h4Fbl$1%vj;-82&OZZU>}LDDPT-X?x%6wf!=xoL zmoCXkE(2-h`uKW_brTz})IU#wt$G(0I3Bj=oOS8a0>@@IkoF4;cD75IWL#kIU~7JO z_t)3g_Zw&Jd1>;}xouY8hUZRVSr@;T7p?d8t*Ci*+GPKZ?&QpO<?CgSem%Ya)tg`9 z?`OB|el0hRkE!jH?#p}2t@%w>_bzALpi=biMqJ(BOzY*7WXqo~5sAt8e8|1$+wOmh zZ<NY^__+S#or1g8N4@UMuP?B%Dp$2S+1?&s+06dU|LNu2PK~D-x0r>O8DH2op?sgU zliR{`h5_6E-`;bjL|?vs%i@B+_3RvaTPhQ^4sYJ~yjR|@aBZraRA1Hn^x8u+Y~Ge% zG8Ma2u-#*|iJ`9Z*E}0z&4#S-vdx7Tv-DJ=E>>P!^0Jv<@XlwY`8t;6k3%g!hqr5Q z(8)jeJ@sDeoul8*w|^}Cag-@HV8b$%r)#3)Vxm9QtxhRQI~;UQ<cCk_$_Yzj{qpR& zm8~xwd8@&GiR;4rm1b{m?-2a^TK>olqd=}}|F=8bQ);=c&pP-2oMVr~wD#OIyuQwy zx4dVIi~KF#x6XHOe62BgoWAJuwE6prW`3@Jm%e(p+-$ADt)~UrZ0<Bw+4(I<Dfsz7 zZCcyAXI-v)w_OW9xI8aF@X3VV2`ArJtc%&zvNPi0g$6n0wu`HG^6y%6`c2$^e%XY; z(2$GW=O*7<_Icq-pSzPBCl^lUT&L&s!TJmb+ot;GH^arIuS}I(US4p?u<zXWih_dj zqJK>_%XZ0TK9xDTOS$tz>#Osjt-ns)kv8aP_}2T;(5dW8;I<aM$J>i<&WN%-I)#z5 z=Ic8zy_>9eZtpwMuDq)F%j=V8Y;)P3i`m$w8ff0%cX|`|wxX|@|Ej*SdTKupRK4!8 z`pCAl*xiXwWRq8N_3!)0_I-ZL`JGmCGlMTPFaBy&9j>eJreM;xgoSNg#r&%4pV>r2 zKRq+Y_NdLVSVil*ToMzmM0{I!<J_VhJ}U3kN@R^DEdLdkda8>%;{7$bF1bJXM}mL+ zmP`4#Jigd*?P=x1?3d4|6hGLdKl^9)H<3eewcTaE?H@c|`?Q$<>YL&>HhB+k`mOzN zYj>}U>hZ5xS9V&qacf)7Q!2i@D7nelm)$2J<L%=$fAUlXS6Z#w&YO57c(G^w|7bq9 zzn+V{-K8qJV!RB37N?qSc)jxK8TPv`HI8VVU8xz9=>JBxV%h`WTfeH^Hl_=Q?!I$= z<9hq2Upb8B*0LEFo~hWBWS^M4#d)`qX^22(<&^`IMgDnhxZ@yrbH}F7;_II5^}Xj^ zal>|t<dwEn55;#ZxpQqbdu(_5k2kLmv6Lhni`MbXbG^RI?AzIxvyG?46egOUmcH<6 z>F;+A-)D8+sh!ayZe2A0y<c75RKXbO%PTui+&rr88P2eh<M^)aORm?NZL5_#_U}%& zMds(Cy1m~`txQWFACMQfm@9U|c5Cd7S&v*V&x-uB@u|?+s2>kCV_kDDFg$OW>oWCs z;pd}YGxhYQZd%LUrGK-kMt8qk$|43$^=q3SeiC7_x}Ng*lgHbxD*=Y@68}9nk2&Oa zWNjcn+qdeDFw;Bho(A3MOA-nVu{?iP<B?pLix0Qx&p%rGqCy=muH-X%yw+pus|UV1 z_VK3Ak0<CD)(bw~vArWZ>WN^4=$4p`PcO;wEh|}a_y4L7uYXCz%r0Fvv1ZcE<wiwv zb3>QZ)h_)NVi<DleecUJIzeGg+l?35HU>|Z*|K}N*0B?>OibcZ4^N!@qb$#v_j2Nw zvsx4DelcbC-M+9~V#VF>k!+Sv^#qGHZ(B7jsc)xKP)bc-HlISepzzdI@7(y1uZzlD zvsOr4Dq0e!I+cB8=uM9BH%H@mnzFsydf#{6zIL<5K)LCMj`T0K#Xml1CMRwR)}AF( zRJS_is9>m%&*=`Xt|n(q0gGv}79n0a;YTNA%4No<zW?X4Yg_e%SNn68mMyP}=&wJ! zQ%BYQUhoci78cb>uK6{`{w1|PXIa#LJmEvW)7o8IKYCf5c-rDU=TuEkb=Gya_``lr z{6F3}J=Gv4XugzTn$>}oQ*x*7>Hd=IcXN@7Sl3j}MHQ2!7qRiOJ`L1VSpMhaztc*- za=HGdf4{m~?3TV*d42h^cSieje|O*Tk?zuZ7`B=1+@-sB9o;{rPHOeK@^#-c&ewZh zKUgj9wI@MTR6tAX{WZro?{{~6`yoF!+TP>&tw@=BqLFVJ7#nO~GJOnrzOOA$b<M{0 zlPZ6zc*?EKxW11~a=G5bOz%fuR5NaDRObC^IHzN$vEY%}+qeFh5%$#0wD9Eb#uuIQ z=W|DfKiaxF(D|k3>Icdzx=k%7-nC!%IH=b_ZJ)seJ>A#Ao2z{P%-VYR|3~u*)dgZf zw?u`euG*6IqHjUd!c)vF-&akveiQqlvch$K|MGi#{>_%q>NvOW%8JnLDAqN*mNQ!Z z<cL1M<I>Xi%pn(<t>SO7+4wxQQD2c^Ept<4*@+7CJP%X;@R&I~PxI!_shANPn72jx zm4ELR`x~VvgC2Z7^!2o6d&K_xPM;I|g$v?iwW_NhM=zI@{rzou@zpu*bFC+xD>xT4 zbz85ilE3<+fVD^FbR1qC%55{rPiW@C5Rds{)j4@9*NR9BO^{+U+E83uvuD+XHy0Ov zStoaX-rT^ad7IPz^J=FSt?V*=mA<Tgg2VZJ{g+;U)Z6izp;$@Ky?j&6Vb?P&C+fsq z>nL=#Px!SVXVau}o02~ZN`2cWeEx~x1Sy^eORsb1pS|<hGXHPIJm$~)4_7}ai2H5B z;vQy{UY`Fj=kYsLw)5xL-9NHZo$b>zcW1?Fdw<`Uh<(pao|L&;H;++SYQm2E`&*|> zOxkTVd;hfBQ){*~ev$pe)o;bPEky7C*6F2@JKs&Voo26Z`QnC7m$0FkgX-%`oJpBI zzjqp|++TU8@zR#Bzs@~)r9ay<<FmzkzAp}E_8d7^d4I#puGq-}QeNd-ckkM@ir@av zhHJu7dG<?IeW|K8`kq@qyMJ3|Wu#PIvO?XpHIe4JFHWk@-=l3^uzB0vwPk<r{$9K1 ztzPhL?WzgRhwH;LZNFS_j`GjgVeIvK?)IPezn%2CyGm1+_o>2Kz1UqDwhKY68I~<y zLCv2J{Y~47R)QKel}k!LE;6fiYG&j8&%?29-MUvBlaFti2X5!MXIjeKnxr6QlJSFm zVp!mcRaMtJe3oBU<Y+2OG0C_PV3aA!b41>vpkc!XgPPjf_ZF2JT~0YUI?QZ53vzF7 zyLIv60>{H=r-o%@XmE?^95{QmLt**TeEq(CT2rpDFou3oG1CJL4`(e|>e$>iTU&Sb z*|zoT_5CJ^-kn;yVA>_uH45*9SY)TxR6TzAvh!-z(FB7GcaLT^UR7;f*FXVRLDQ!; zUPY&5SH$gj7w>A-ui~lEwMbT$SIQ)YT~|2{<fEAH8<dP5+i(5j!X|dloOSAInXh8g z?}w&Jrnr07rE^ZvRrDxN&%F9r{8Hx2=l{0bI|dmU35d2Xy}j+T$L3`=pWo_i^O^r` z{Z58!?{}YBc)3$`zOs3th+JlHtDo-b`>oSfb2N2aoz>FqEqdv){)1;>{Hs+(J)i%& zU&w#DTl5>V&W87l3;H5DkMqube@AhO><Y2Zy`HNy(j|QhrhBZOHGAsf=a(|>9(bHz zY;>Zl>2BKN>CNpKvAe~DpPzgFw(j5_L8)`;&g@2It`hfqBqJA=9#fxv^V9KAzhkcp z3ri24y(-y#)XgbKE0j0#OU(kUv#-Nf{rKz}+Uf0;cD>WWX7ApQtLt8yPw?41*Oxu% zokgZ*7w_VWtt~BgudKK@m0NsT;QoIC=jO-z?X6<&=)K!L{d%p1Oc{&gpYlmzflHTa zajmM!HeC9)Z*xuBe@S7>?i2Otcl}DQHplG}Q@y|JQ&@=B0mH03o!8T*PCML~WO)C{ zIgOa*TU`F$<^0zE{=CwIdcJcpVwoYY-`$Z+jeO>D#4@Y0^3%hv(4P0-4A$$#9olkH zS#nzf=jS&5)E~R%M;KLEIEUq@oSeYe^Z!+J-Oo>-i>}X|m-+ZN@AQ>7mvGiH%P-uY z^VBIvEi=;STvemg)W07-6ea&{tVpXZp0K<sbg8H9doCrN)*NrOj;azX+x{&py_R1q z&D+_tWJ-zME`j3P&);cv9g1K6Z&Bc3w>NipPtCjg=jPsYt62HER%dqg%Ns90|Ff^2 z@&E363-|s#{-3Mk9)DWe`y;H9W%u1*>${m=dRZtHa5sL~e?`J>%lhLhyhLgy+*jXr zHYD)wj__5%Yxd|KiD!MS$IRloZ`qc0>ldahEuAj#rNNkc`%>dAlf6>bc-&oeuDoZ3 zU8I=T{%zks9(rTxBX2$}ar5(!e<v{ZMEn-^K5l>Tf$8iBs~UmB)7m#H+?cPPc0Tpn zghrm|oqds_3$~ndUAp-LKf7>S`O_OSE!HhL(EN4pht&^H-pt_cT{U}yHdFihTN6aA z^KEa>y(xX};*Ud>zifl{|54u?xM-Vy?z8pQ9qZSNi$7ZHlH05CF-XI%Wa8&n&mJC| zxgtdB`X`<8-8p8`=gysTiQDC|cUN7^j*5A=w!Yd>d)$nTSH|bZtN=D%siVKX<_lhU z&TRJIq+{ORX`5?*UuR+UO)LFzx}-9L>-P5E=LgF!ckbCS@6^87|E0!pT}u-}104dr zQ!f^2y}xlyQQ?7(1lLT*2^IG@Hg*@)@NtT5dUQH?>ZXa)a<(ha-W;g&tR~poXtnC` zcaILn{H-=SY_;3q`*oh4EGa|JY1TpcK~-$EQFjmDD4jj?>z~a%_ck?KDz_OV-Axnw z`u6AwR{KxR+t2mP|H*s*>$`JL<ez=;{GXt9F8ahGfqJ!b+V`t|K3}&)xb9fzLR+aq zJHKVgt7mOlpYIeXbE4s-iXyYwZlCT|LbkWB9aFQoxN|9g;kn+(9S?JUPVHVZVa}{0 zH#4-)&i-AfdeyP(jmxS>HFKA)ysqPFHu24gjVkRERoW;1jxvArdwzXV>6P0tXKVu2 zl~q<(7k_yXXjT5|&_w0-mzRDj`pvO8x8wNygxA;ZOBm+x?9cl->A?g4A78JhzYrEU zc22gKlWW$QHeP8Cu77i6t<x?&zF7I@&PT1%SHC9D`QqNX+HUt<znB=A$jC?+SJ#O% zXL`oO$dv8=+t>4Jx<}M1XT5t*vZraK8y?*#xBJzB$gASnt5$t#tQGF;D+!6zOkh2w z6=0WoH#5?0YZTYSFvZPL>mub=o)mSC+O%kq2A5<S`zD>q6S5AcZ5EWA-Fr0Y;gzR8 zn>KH@EHUd{vqq<EzK7a|wZiuA&Lo{tURSeMllST@pR8wZYj-%8m6=UaGS0l%uOlgN z;)8s+!TxITd4HZ&?|Xl3ruhEZXT=%&4T}#t-IKo2uj)PRL(qPKx|oeknaOTOHBY6M zO?A#pO}RN^`+2|L)is4*zbq;i7QZvMBtld)eKMbD<EwjYAuK&^oO|P(1Xw%HK05g9 z>dJ?j1ru+*u@wtmSLfm5<xr+^C))qebumW=V`;(V`gaWesh;NYdRI72l-2cQ<$9(j zNB7TRyg!VylXu?Qn)^Gfsi}#Bpa1bi_v%eGM~$k!y*c_x)cfVl&EneOe#?(97XF!e z`SX|8+gsk=-hSEqL#kQMjfVaE>-h><_n!Xt_O_%!f#UH#-^E^6zlm1;Ti3sSKWr_) zjI(KV@f(|F%#e8Y^^IpripuBeuS#laZMCPTC7R7XdFITXze|>i)iz{licIs}_<84^ zR*|bcf`55+g|+8v?4PhUB5&Omt|Qm;PQEFd^5#u;nwj{vruk22Wo-{Xq1?+7Vsyqx zZLU|zB;N4FXI^R;+pXiOcS#989Q^S5;+I!GPvpEm+v)KtBki(uqb-w-Ki8dp@^W5Y z%}%|kZ@#cx+WdC=+l$`Q^<tA=Eua7K=ZS|raa;S=|Nio1vE}E={q+XjV*1Z|>m1j_ z?VVM~%)TM<FdGvybL93sS?1>EnOh1ByMKL6eYB@Fb>07V-|3mv_0BzhdM4kd7L;9j z_(~_y$m53SI^%YxXD-t9a(2zTH@htV{U;;r{%p(rs!5wqr{=Y9p3MD`v+&OC3)4@@ zsqxL-<+b$Gy`z(+PVx_^Tr%}B?-St}YZ8KuJU7gDp0uP$cE0<rvgEtFN?F+0Hdgss z9CTF7xv^nhBQx9P%Fk&|PV=5mpTGP=#`%{mYu|XkzqglLFzjCT`nbIjTeVuua@7jI zo_fY*S$^r#C4<>#b!1IAwu|X@{CUXkmV2wE_IsXN-klRiBR7A@xZ1U}nJsbiO%Ff6 zeYwv!MqHZvw5nY1dJ3!S#Gi3DkA|AEriV_?{v{o?Xx2&dQ+z3|=Tuh+ozhSC@eX~G zoj3n#QStQ)S&kdSdp2!6t)=JIIK`(`Yo1V`rxEX}mp@;3&AnFo^^aWQ(%@j_{j%FX z+}P{4=I`M%4Sae(y<XowE4k;v`*T;OcBU*<P1<~4u5)kw|2j4ncEiGZPIWx5&Yu1( z{^`wux;2rT+ZH;v6?}aaI<NYj<*O?z4^PnyHjwINVPo55qtkQVjW7L3*9Rl*wNpy8 zBj<hHAv4wIah6)p=2RK28&f9fTHSJb@yPaz{C5Sh$fJpylecnT+5bJx>|K{mv3*6w zj=<Gnvd{iY9sYPGYRT@c3nul4FMR)Fha^Yk2DSC9=8yj>>Q<WWkgSzo(KvguUU=qH zf$3{jaCE$2U0%fcBs4TN^oJJ{6H~<YJlSS8zO>KJ=5uhqJpSwJ>le4T>r0!TTfY7O z?>~EfO78j^ab(uj^>OYI|Ni}3!zu6AFZcQ8_HwSP*)~y%T&EuvY|yco;lBT8+l~tX zQG31!Njo`xcy)6!@4<sxW>`#|k$U>Y$FJ9Qc)6TJTsLjnl()ZnhW+#nDo!W227DD* ze$~Qf)xL(8d0FCDRm4{BfBqz7YQ(;%9lG0%sv<&SXLj#sb-m-Rb;9<FH&bMosDAjw z9U(KLrmCDfdLuI|`20l=Ykm`xO|Pd+b&r~LqvVFq{oivr?oK|s;hf%2uk2%OC2Fiy z20xEm1O*Efo)EQHy1K8ndRlv{VeT1^wzW~mw-_!4tx0&l|G(YZsI5vC783IE@-;Oz z3@buchn-^;5jwP_wL9{H{f0A!Yu~y*DqQ=-^MW()iYMz1pHz5id))lF-P3{x`>K8Y zUO2E8PdhW~>Hg1WUf&G}oxsw#Y95<hb~tyaz|B&v#b^Esh>QD|g^6v|UO8jaxeI43 zXPxK{{Q2bKwnp>GOtT-oTl0Ln^2Ia%-`Yg?9Sb;ny0e^Z>k?1i?@nAk4lYjpi>AE| zl-;DWIrX$YkF=4^`~_hxddtJtACC~+HD{h}wcxHI*1c7|DQ9o>S8RE1o^#J;(!9O* zv>hU{*K4l5SNx;$bA?rT<@~?Dr%$(TW8LuWr25Ov8G`C||7Gs~`)g^N%%&)9HepYp z^4;mWk58;#|HwLl;kf<38ONWUSI;>k@uli-Zf9Zab2+Z23DTFf?$rgK|Il6}sqPxC zX1&m5v!`uj($7_ko@`mD^Dc3s!=5C~d%9=J<+V@PZm|@Z!#iP);^WtfMV1#G|E{v~ zbGw-l>VEv+W-%*M(@(DrjrZP~5mBu0+iL08ntXG+=*h>T|Ju&9_^##I`O$Kn2kWU< zw$<MZG*nd7SIE6NpWQt@V0GA9p}QYXPuCX~5SXxji<{nQ#XXy@)GCE3s+mna7Wzd( zg|S>+aIeR{mnA~yp7%Yfdsgn^`t&)kyM)y;T|YHWPloj74p04nyS!7@_?)rgKQnEU zti7Xvr=Rb#>&&GY!Rv*Za?b5PAQe)o`s3iNGe5t|Y<*coAbHo@9KZUafKFYd^tl z--Y~buStYY=5q}!)Zkj=>e#!h#c*|w-bMZBx`#K@=PQ>y<@)u7GvVzmQx;Y>;eA#; z3l1cNt>;wVkT39X_2Czf|8q&3)i|t=>%OriQ_HsMOG0Xffvi=DTF%n|x!Ny*X8Hdb zj#vFZpuhjjg3#6bo?4~L@Ugp_=PWooJHM#tSIMegDc3ijo_?8UIr)D5k48TI{bwHP z?^|#<JYMkQyWLkL%=`8)^Id#4I=?XE?X69*r&A00KL^Wo9hu#?GW@3AoWq>4J9Fk2 zOk{QuTfOC!&c;;9t4WTgv%9xGN{X@gSLgM*dFo0Z$tNd^@5d`zTE5(-x%T1eYoAVb zB%1%J3tVbipAax}>a^IRLrG-{oLYKpjC)-YFLTbY{&uYJ6-Tt$yk*JO_BMOx2rzh_ zP&7+#W?1EQR_k3wXpy?&(j4V=SF=MF$Iab!=6*?^ZMe^zP3B9oOyfmdRTt#))>%p& z?(Ehq$$NKt%f|19xo7^*khszF(tk_p>x~jhi!Q&sx2vjd&goc#i>H@MGG||RJGtlU z#a(&*CCPu=zVb*}%=r5Hy0C<V%a2(yhfY<;?p2$!;6TE)b==Ad4|2`&{>*rHS6xu- z8;h;n-1Fz{?OnIa-4~MkW@1~t@947Lcp-rgTH1%hrsQw2)a1Ob=4)Y|%=Yzozxt!O z<r%+EY5%dRG+NunpMKr?{e`MSEPVSuvaPlM-7{H#kHg>e`KpgTpD)b6*0W^ElH2RI z6g_f&Ra&^*W73aEt5(mc1wo}pXZ)L%vs&O_q)-?CiRp?0>n&tX+`RcSY|4@@)lIjT zY~eb#<<pd~<7#b5$x(}U@A`1o|K*+s@8_-GaxZS)spE(DN_>9G8Wa?i*MEtN^TE|t z`+FaLyH36KB6antHCseZHk?$LFi&^#q=y<yHm!-|J166x{C2)6$0>=E%N|Q!`S{t5 zUE)Y~+Qt)0(kwoFGkEy)p;OSToj$pp{r$?iy1eP>vMEO&Pbr*s<AsIIoYE_6o}4*1 z`D2CE>zCK}nMwcKacK2t{-g_?3!WX>=;yL5VD~2OO_PjQX>^3m@ip90S+(fKx_d>{ z-`?KtuFtOzTOT=B+J#@$K%ry9hfo$amW^69srxRyk`{3KF>5Ld%bt_FzQ$kP{oThb zXU3`I{<G&Q-~MHlHal~0|9O`~;q4dgQxbNbll1rZFSGltGuQrSi?hG2>*MeD)4y}; zU-;3fe&g?>Zj-ual6-qUF!jb&_b&Fg_x&tsZ1L&K<&qy?g16az6$xD(w)d}>_I=wa zPyc*rsZee1Jrw^!L~!yN?So6AjhdA<McTM-nG|L5SMj>-9zhw-!W()nB1Y~xC4HAp zZB2R{oo3v1bW(objvKE}clQ5{)>wO8Z25<y8ToZ~S^IRovRz(e*~uAh`Qnv*FzFdD zm*(b6MPjL&a`{&6dcES^QfHwekt^$T1$F-9nQL->EP3<j9K-d`XSl+OIo5Vat$v~w zxP24j?z4@LHavW^L_a#g^0Lo1%h`_n*B>ve-jf-9zx7QHx7@iZowAu*bhJbF&J}QN z{JUJ(<K&jYFHS{uJ?^2!cMk1Iuvx`2DSY9PSJ95`e6lxp6e>Hj@h2Ybdivux`-Y-W zzQDCy+^Q?`4Yb2sFPSS$2u;-H<l#sRz2U|5%f|c1EYUA7KdU`lJ^jJ^|7?j5wO?G# zHd%cr%&_2q!nHNg!Rw0E)YRIp1uriucoj0sZ}zd7oWd(Ue>yEw^N916-<%T<)#ojE zH#@)R)6DdYPe;XF_IwfYUFQ4vLiPKLRj)!GJ$|emlX+J`IqvLv&F_a!MEu<66mO}o zw%NNr+y7(c^A*m?JBt?PPErs%6|3J{t+8vzq>Yu#UO|V>YVT!ajQVfW_VxUn_No;P zPhvUy7c{2I+4`KDu=0^+q2@uq=B%oJdvcbR#?~&JaV`0~)y7}nb=XP@5-)z^IcD={ z*7_}Woc<5j{+qXFtI5p%_UezP=PUXD2w%OSd2jjqdo@e9Cj7C8n`JzIt9)%hQh~*n z>-S$=UoW4p6LThgvAa>)Nv=AL$1fIcPEbAluE&pM;{nB&zcQS6+1)bu|My0suAslH zQ`wCLCq%SE&(5@&IBQy?s<Cjq{(7UWOY`<tS-dgZ7rAe`*4EcWb|-shZS_r=DJxN; zG)ZH^v{dE=UCSrlc%rka%5ou-)m(?)%R+CIYw@`T7M$QxXn4@(b<;_@`rDglo$B*a z&d$2ZBWKg%+ASs|B66l{>gkvAMh&71PrtmM&#+KC{DS_H`o`-Q{(M(F*vt{TwQ0hF zx|a2P>KX<eTVG!jkPwJimr(Kc*4CRQMJkS`r*AI5qA}~tjDtTrg)>cRt)8p-EO<CQ zzUbdk@l2a!wsdu$1t)tX=ghO1$o}k1;@=I4Hf3)lR<2xGuCQ~9hmZGi4hhkf6D(H- zt#sqzjyjir)M;6;hS23*mF(T;^eVo|cfE+@RJ~m@cV*gX)6-_+*{=1<J1ZXu8cAHd z`Zj;zmTU5j>VLBDZ<}%Lgy_SgTDq>Go!#BaAI_e%xw47%yk7Ll<;m`!uk>rrFy2u= zb847qx^(aB-$`W-(_Bx6M;(>qjb7AmQFgbiJJ!+dz~RF!s;Zpj*EgM&_Vx5sQr4c# z(=NE$`M@k0-z+by@X4D`m{@0oUZ32(@uf_^&%={(zB6ogn4W!Ik$A<s#%`PL%E+)f zyNai?E(v|%Sj63Rm~D~w%qiE}c%?ZwUYtJGD=lGL#glz~o$7)8`rgz2cs%!u{qbXR z|BEXdjg8a%mcKsS|KaQQ_=^i`+3o&4QI>msb@tQK(}g7jjx3vRCL}XOnESP~z=>N$ zT5FdqQIY%g&idP)A4+TY{cQWJzt?5)%gZ}03YB=5`9Ht3#M9(N?fr~jCFk~k5z^iN ztE*O6?ZVr3`HsH6eYRe&cP-8Q^eECiVp50@>zpak(JD?sJMA9F?s&IKQ{=Lipqui$ z=C;ZEQW&?L;9k0FzsmOD@Wo<s&29=7Q+2N|%kX&})HL^3Xz6v$wYu(`UtT?S<kkJn zFYe#l>9TZd%J!+@Y`;Q(xZK%W{oTmGBHim;le&ERqdPy>%&hXwjNMVd*nRZS>F#MC zp1u(5iQLvzd6?a}%2VTW8-LQBN2zDd^=97HlFNA0IN@c&!*3dF<tzG}!#);j-<uo6 zTje4c@Mgj3LdMNHTqkE5vFoP>-o4)2b1G@(Z*@ycR)2s0W53N^E_te4+xGF~EtWa4 zu|Hlu5dBrY=J-tQOrQAA>T6$BDRT(SPg^*xpF5Cq=A7NL+9p-ko$6|`yY2VMfB8fe zS-+W{5!N<E-N#eS{cQ~G+E+0B+En+q%B@f4<e#6PL7jg0KAE&v?eZJz{#xCuDmHq3 zZSB*mp6fT({jIt;{}W?;{bx~7|MO=lcVlfcNA%vV2@C4h#BQIqkFoK@rkH2N%e<y) zxxBsafB1U5deW;9DZlyWT04a^Eo!Z%$JNdJ6<>Gq==8Wn2fw^@@tNUp_~m8G@Be<A z)V$V}nK-dxYewVIppC&-ygD*hsxDV~GAkpvu*hS3%B1E)Pfr|OYO`YLxr;)*ZZ>WG z2Lq0;uW$`jI2IZ-$2)wn*gR!<_kyBd(LHkicAP%8gz>9Z$=}-0(4Vg_smj%Sa9p;Q z=lSQ0$`V_1MCHXLZ0~H#m6nv0+_T4E`i5!iQr;~PaQnZbX=n3q!?ce@Y5dYhzVFY| zo$VcVckY$X%R5b1SM2hzkYr(LO!5_JP+L3koSdu3x}B5l<f`=II@7;jYyMKZB5&sJ z!|Us6OR8*Nm(5A}EFT`RLw$18*Q~`FT=w$&oLowz^7-?8e=plNXXm723p-q7_-0mx z##X-h7p1Xk*7{8%kw+I4KX^U0D?d~){qoxN->&Sdop*@~x(snc#Yd;6rY4KRM;48Z zj%&E0J<reE8zH)FQrup-<fp5qetC0q@`b6VD}Sv_zp*o0eXdoRQcbDE!A8ZF^>MEE z8}>a7i{fi<_G@M<d^FkrL-p6tMRvbB*g#RyDZKLgQSq3{r=qWFKeA2~R=@P%wEj+; zRIa-GeJA7R*LnSBWHy+6HpJwJ^sy~@6B4vmCIl^sHkw=W`N-AivmN4Js%+eC`!?RR zy*@F-b6w)R*BKwOJD#s7<Zw&gX|-{Y(WB@2+drH-u&X2KsIKaynKMsL_-^N7GQ0BK z@zg!$Wg_Qwc~kElNQjI6qRcQ|KmOR^!_EBD*FNaJcvy0;ib?y5x|oA^6#q*8eq8j7 zNA|$$?&+UCK2AP$XWG2AwkwoUj4E$R&f!%`o87gj;p{@CCtdGqF258E5iQ;(x;gad zNd=?gvyoamJ+G9UJ9c^Po8vmRy1b#&Eaxv#kNm2tdba0m*4dK<(?j<~eiu)yR{EG9 zJv)DX?)gL0cN>&``Fmx>lSAj*7jdahvwAY;r3;7EgxnRU)-J#J=I-v<cD27YWL{SL z_2uQ^L#^B|uIDq{-j=_#Jik6{J>T+t2Ziiw>z3s^B;?%-Q&@eyMev6Cj0;n>IrzBJ zj`zJSd4H|>!`0OsdJDFkVs;ep@brB6@k0Tqsa1Nvs(Z!C;7pTZwdrcUi>{^5FU-88 zB6V)g$)}pZD?XpI&Z+;Ed2C&rZ%xgg+{#7aoUb$Q-m$%+_(0{}qG}E9pYP&5-z8q$ z*}imfoM8XN<YJ?h-`{9m^`CRguH*O(b%*8J+ohLHXVEbe%{TAdk~7n4>enO7Pi|R} ztfY0(v3;4|oSj*Vum8VeS$Ol<0lzq%d$VTjKXv%B?cE=V-fHW4S52PZ6CM|#BepJP z=b;w)XNI+RB;3|Vojw$JSaPRL&rjvH4?iY}*4Wo%yh}-#xnYBW8o%tB&)m}u@}FFg zIV5G(P}n`)u>40tT>PFXt?T#ooJ`Rw{+$(Cs%rF1>$_>rIrfFiD^+)JZd}>tl$W&4 z_u$P5&bO}p(lwlK(YDStI;~~?V&BVNEqebtr?=k?UT5d!<9Fox@#!0FvmT`ceaH`) zTkf<zV0YZyIbV20>uigr>b9?c@NmiTlPi=}FFP%}InP@D<E=|3mWH~V2cPgRYSD_$ z-<kXNR%ycDUtfRx{=GTlq7xgR%#_)Z^PK~(cW8BdFn!4KmG_kTnmsI6Kn*@Fp0u;O zuG(BXJ%4KALLOP09)J7aOYR(5dikY?ukX{JcX$6hcz=Fa{{FKUr^h|oCuwZ){aUoi z47<6`=k5LXmfwGRV0QkeKkx1?S+*?6KqBvSRI=)tPZOTYol>2(VueKN$7w!6R}Q`8 z-PDs)yx@jxYgna*uywc6yv6dzcV2dGW&U_{M)2*jiazQ71*><oM*Fe}28w(vy1MxC z%N21aI}Ro+s4GqHaZ}d)d#9kNXi;u5|D3sVU*5lG8lQRguWolZ`!%<4$G00Jbmmx> z_lZA0lm2XSzj4)5DX}m7DMvnqo{<+gvf}CL8MZs@<y+RWDd_3-O_(4crW<?e%fsf% z%yUf7cwU}g!rJ{K@khcnS-V50zTZ1`ckiFm&gEIbtu2#}uZ)g7-u3rljK`KID${O> z<djW);={Vz`7GzI*FG}EnP)!D70-;g?DFH%{K~q3%|-Y3W?x_9oR%i`e7#D6iPF5A z`(qZR&7I{jsYAu{g{oley3|`Kk1p%nkXdm3<%QR!5<FHsRh-Rn?Mo&*Txq-~`{i6} zP}J`7_lNG^pRejY?ZW>54A<60J3BbscWSw6t}x-l)kKzO`@Zp>=!|9k#;c@LlbXl& zSL@d|&XmK;N?F)g1m~^3pvA=2+}P8@Gw=Uf^BolvpUtm1bWBj$pjZC<vWd!>|6VTV zm^jhq|Ly#gw6uHI)H6lpJHqqVZE=yDlW(Z+8t;;Mvg=Uw>iXxQ|NlQ+a$T{@>E@I$ z#vT1KyjHT3+Roj+^#xzwHy@vIJdkzanaP{AnO4`IPs>nG7t1-DlH|c#BD&zmCjnvM z!|wKa&$~A+me^_2!^+$&xl^ZywYf=hYffli_K(L#Vtb7QLqm7||M&am_I&xpZM?~E zZ*8ry%98lqC-?aH_4uPlkG6XDN>8_vU20OXB-hk0uH(^-RO_=%aw(55vOE&rv@-ZC z^WM1g>n^8F3f{cpiQ=R1)02zS&k3uie>k*Yndl;ywPo7t^7P)=E)QDjmutk@>E*^e zN#mJ@Mu^JSTmQ5yr2_*$`%8uf1_l~Re2F+~6u4YiaKcHmt9zb)D}8Zc;?K{|FRqWT z4{Le0qv~|Hj<SWuk^`@coSK|LV`vW+2sk-U7nZrBf8CVlq;K_$>GQt{i0$jDQ~W#g z<JFR;Uu@w#kuOSAR8<TAH!v<)vgE_7hlgW!7PZc6=NFch?Y(aMeZrI}Q}*9F`nKu8 zt5>Vu-J1G1C~|Gsv-9)MS2N2Wd;6wO`k#UKmdOjw?^}9G>!ja~lh-9~<P<;ne22g1 z?WH;8zqcK|eA1(AbKV}CblvkdpLvcI9hqemrlX$w?~c>$J8b+1lb>Y#<MZ(JOuV?Q z<k<IhQS1Kd@X6QxP;_*3wArsTCsLWsIIB|PGdr7c)lIEuyj+Qw4$03nez@~b=f!gF zu0@+3d+=O5$u)24-j$Jex#jc4Ck1cr?DKv6>8Zt?(z2@36|K9ykKWxGd`W0!%+2Zc z%Ih9H)LD4><&T<Jrmxb!pH33~X>MZry}zsK?PjL`zpG|g)P51j=i9yg%tnvMX@V?` z!s>mOH>GO#$=bV}7SpvXdnB<oYRj%~RevPbMos(o^~iknj6(lzuHK3NWCQltFS=8+ zGnG+v^5bh(&XXFMDkHq!1-$W37rL<4_P`Un@5)c}wAXV#Fe?yfI_U9fdVIsGN0$FI z@3iy%y<PI>)&0$tpEhcV`b97_v-3au-OBy5>O(@@jNKC~mD@l4`E&G)q+tuc^Wn%( zzqEJk*m38poq%g&`}@`NR__X(bUDa#r&Rm)$@AQLeI(wmtc`wUDj91bT`0ysSvqZX zbMF55g<*S-&FHB-5}|N&XTY5$9ulk<q)Rl)v_F3Q7_u^Gsn7GZQ+^jr4O<(<e8KAb zR^QcTt?|+KZ)LBZw)Tg)Q+Uae1xuJq_O4ccq;n^V$89-R>*=$9>z}{dyQO-8u3ww7 z&D|dhxo%rtU!Y(h5wLl4;p_YV^RIqv-d&Mwba$TVtJl}oo?enZKlQM`{l}v#64%_? z)%)|jeXna^<cDXg>rV>@3bATcTL#`d{c_v&RHIo1hC2&wl%_pC`EJMV>ql2aY*-ex z&ie1wrY`OHhS=b!i_a&$ym?F5b5h=EkC|<kj&1Q0p6}$MAKv5j;q&L@<LmC0<lN`W zyz2I*OtZc(yz=3v8_A+l{VO+cFPB+dVE*+dE2F%;yc@4P-+|Y>>wPEx-2L_N-KO>H z_3zfyz6^UeNh`bd_x1w*_XaY2?7p+jQeS_QwYjpC`|F=SC(fNamSB)kuForFawj5_ zv&mswwrNa|asKZYvyx6r%1uj^oa^VlI&AHapVQ+(OP^m~TdS<1!jhhz-n#>|G-c1F zORv8!S-xC2Rdj=`kzDelskfslw;g3_c~oFg^eOpE)vay0r=Ojj{qpW^^K<9U*?hZ^ zY+-4cc?7f)<+Z1`01HTdP2}c+qFsL(1FPRPtENPr3y*G6xUezV{m`L99DIDo5)3Zv ztuFUbo9q??T1RZR3^X+mwI!qRY})R(Q=@gn#B`%t4nK5Qe)*}exWo3myAj)RB%RxM z4kj2}Sn4efaj3;IR)sDlIXSuVC7<?4KG>x5e0K+HdtdeUcW38V7E74t$*?symc6}| zXd-3$=+c6R`~9NY`DAx#PmNxC&FNjDqq!mf-{0Sl=a_xIQ+(bq=?KRxlgvr)-Lft$ zcxdkxB`7Fpq4naV$@Zo_Gr}CFs(K17(zvuK)mtxSN5F}xbF9ntYJYuMn00m4|6MCN zL7uSOw0U!}hqkhEbN;;AAAO;7X3p$fy;?i+rr5rp&t_ff>g-HBKhL&D#&S~O<70-e zU+Y&?C79d9%oTKHY<6_tE49yLb-eIm$NK2opvBYs<>lsYvuxk;rOGy_FxczVlx3<D z(u|X*e3_vVyRntSOnTDEmMPY}7atZ(m@vV?qd*|@<;yQ`Z%+rAoqDQTqQ`Al=`Qi~ z<#QsY#i=KnyvUz@=~VXYwoP*Nyi$4cERH7>b(;@P*qxP8=_Tx#?{sx$$LUiGCLNSq ze3JKI9^>w%A4DgZD@LD7T)R4ay-~^sg?G6@-7P8M`({~AKAFG&?C0~g=O=wl{87G> z-&{R8anUZ`{@Z$2%-%L#UGOlUJy3*uiOmYtyOG|7U%7-Vb}oLUa-lO}N&v5tMCpo2 z#vWBH-p96z%86_ZsBLEBTjH#3e~kZ)<F=!xR+y)MI@H3s#~_g@zUC)uyWhO!)xW2) zraipxCXzXu&G%I1k7~#87fHI8J5>uTEZdIxowIoPbwO}|tEfu=uU3cBOEK+0&5v6? zte6s=@=oeY*11~`?#gEzda<BA^X3jcx4nJWd|!R|dOiO0v)TEVc7<w}$y>P|H}f^P zyUZf&;oZ>u3*u5Hi!OiIuCmr=_sr@1_5QPTxkD<p9Q)g|>c58B&2vW%-=Cb}$t-FW zntAZ@+25D<q&bVtyV-Pd!Qq=XS^ZDWbbDvIai*+HcfUiC$Cg#s7&cvYocOuZk>y@( zn!;Y|``&wJ?W@>j#r)yg4uvMQnq%i=Z(II+KEI`e<5cPGcSlSYPMpTZ`=95M)`Wyz z&o0T;mA!GC;85z2<6^Y<Pt^w9UmDV9tsR#yvQqez#N)qR#%Ye~)Kgb&cg~VMfANd) zl4Hv+p4_WA>7a}8{3?stJ{)4KDz+#3YNn=M@Z4ju$K1;E4ClJ%&*HY`U+q{bZ+m)L z?QzK)nF@2?<#u&Xet1r&f6i?)UMZ75XFXRZgza(NrWEZE;IOsX`E2CvQ*SmTo(~f& zK6xfFJU}oYz_6?84Ilf-%uJV~?n%b!4;PgmicD{6;^#SE*~7VNl~R|Io?oTpJFb=W z|D0Y-3!bxghDY0?M-%oI@bfK-^A#_d)Uqn7^G~Mg>AL+cC8z%1-hKIo#rHXzHZw4= zXM@fKcxTl2`2NhhHxI|HPd*-=v;J|6?^}uGJ2L_<U76r;RfAR2aYabLx@#X+HC)-} z(B$FaV8IpGxghJlN!ElFTppqUOBb$HaAexLM8$TJS)cUeBYrZsUt3h4JNM?#|2;RR zCLeb{q?j!}@4R+)nT@ejWqsYe^tANi)<dV`Jui3p+5Pz_o0G{aIzMZDq1*kZC-VD0 zO%Fb-Vsl{CqSCWw`##*{zw~7O{!5ddD{%&<y-hs9vEXv+&Yfik<&7LOwQ3lBZo4eJ z@bgh}k}d!K#H8mkmxRqicXe%hwKU=&*PA_um;Ml)W^N+B?fuHv&F>!l>p7`)Uis%g z>p3zW0fL+lym$Wav7hLn$~b@h4{N=T`!@6Vv2?gBp5fQjGB@qVnfpJU2CJ>Tzh`<G z_ov0{KR)T_yZoFfO_leoV9idI!+*s+cFfK&$~Q8a_${F0Qx^aCEx8YWWZZw^lYM+r z=>k*R-n%uc60MVW9`bqZ{B`aFD~+dyHX`ZCkF$y@`zJg<%+bcl`X@rg^4mR6tL&sJ z)mgU$>Z~Ro+r9q;|GQ2BiK>Zv{r5Nu*+$M3eLUq|`@VyX6GDHyGoJf!ZL|M}E4TTc z<bLvM_A2~ju7CNtQ^M7~Hs6-|ny`0$4Zr95^UI&jF`4|W8v8GB%@q4>{`FkOY@NeT z+NJY<v?ZFipR%r5S}o4vv%%!=;bs-jVCfDa<5!uTR}D&11=c*+BKFZOER}`3;LDf4 zezDiNX2n#$F1M*JnUeENOMJbBgsJwA8}Irz+`07P4C}wDZ678s>99L{xtibj)eM(e z);Bg*tKXjf^Etn+?m|_UnOoW~$6LtRpYAB;ZQwQ4&g9W$dT@3%GtbRJhFz;~XRck5 zywd)}&x?+e?4~DZxG2qDY9_%dU0~~D?LXT-W{=_)39iqvoFV3aY7X!6tC{ef&263j z42kDiTJbmjY!y7#{ks4AeD#?79?qY*l&AZBJak?-qQACpo>lR?dja|vLcJ7^>~}aH zpSjnptd0HmzW&GO7uxPvyMC^H&TqMN;psoVtb9LVt5F7j(oWSsJD(rtS$^zBagu(w z^y^H{<10KuH*J5-_@POnk9X&pDQ{m#uSolHMqy@3K>hXUKW~Qh=hQTW&##_$SbW{5 zU+d#j&c0&barm>E@$v1CglkrBpS>zu{l@<H-{%C2Tb3D}yY{xU*hVJad#S3+&6aCZ z9)2!JlbJ2EjLBxhXFd(zJAM-`%{-LOW?S&7^|tu2w<?-*mF&cp+t*L4S}wS{R=jO) z`n5QpyHDaYO0{3lYRL}Yuvh)q#Pt7-pWGxncCT5#Zkdn-^Q!1qD=$bH$M~<|I;W~& zJ<;{-?);tp-W{7}XEMIXQM4|R+frD2ZE<dZTj9=Gn{3#%*yp{T_<7ThDYL#EU1RK2 zye})QZ{{?w_$OcMn)}v?t*T|K;Pl&X8FXd`!^H)ikr%zfZRg0h9$9L*X_a8S*|~sC z8+Oi84gHb7Eq~>f7LD~6qV{K4p57y7^iw9v(cPD4OIm0Or*>)2l*z8y5s^1}qBd_? z)K_-(%#O(}*%`c71wXbvtNW~NdOEx7qj}xYf7A6IKiRy5D_E1y{%3IC&!#)uo`1H9 zus@=Ge(x#8nh>|cFG9L}48_+@E#I{98pGzcwckrVEsvk0cK1KiZ$26ISrRD$%u{3E z#0Vdpqdz6h)=bgmW$U#m(=^1Q&Rm>VYkX_j(XbZ#dw=grp4L9A;J&T)_ciTlk?&hC zRm^00{PN6~v$rKDrOenMnzmtL>0IxEbFqr^G>$|q*wuM%>+GHDpO=X(c9e7pfB)p- z@6{FmrcT~dT{(e8aaP#+=lf!#UvL@M|5pE=$r*U5$3taNb#--R&G%cZw=<O{DoFKC zd%~&tG+Fr3|GS6J%go+uyJv#z<A;~oKlt#Al(5{kxNz0`j_0SD<#kQjI~FKB%YHD^ zT2689_MQLV9zU7X+@uz-+kUOC_TBRx(?8wuNQ-is5?}q}(+SRVKhBHWCBJBz{J|mf zpIrU?%f}e(RvUEqFUt*>^?7CBubm!x6P$M!n9fytnb!I1@YCx}p4A#IGh41*dFAx_ z&{gNf0#Peoug{jA61=DCg;8ax|IGz=4sBX_Iz9B%;XKJB+<|%vOKTIOH!#-UQd%Bc zpeVuD&~_}r^q|j#HRl}V)-<q6t@@kDw38uIpIz_A-#VwZ`gx9f;u_L-{+(?dF(Fy_ zQT^FNdo$B=`R#Z8V3v9FN2~c}A;Y$-r45%#+;3TId6vzS;>NgRbDF4zulI&&&9eO$ zrtjl9u*>x{$AkI59~&&KVP1YGM$1KVTl<07t=rG9acDSey81@U=B#6%c)O=<OuT6H z?AE<CqP{2pU7m13Xweeq(*`}QYxR~~5_0;peCo97+@ynLua*YyIHi43IOx=IwU!w| zQH}m~yArI|>OK?>(ykYFnzC-X+@UF(6<RdZg`%7|ICT|UCR`ALFj}SwIC*4nDz<<a zPTm}fVhUTH)f`$O;N-DXwMBridX+6L0!|=}3!%zC-v8+Tr+m_t%^TJRGB7YOc)I$z JtaD0e0sw6vY@GlA diff --git a/sflphone-client-gnome/doc/C/figures/dial.png b/sflphone-client-gnome/doc/C/figures/dial.png index 2baf736e3072d38a4deba2fdb603ba59b8ed9ac4..0b3d44b95b0c18e74c18ee2888792e7401978283 100644 GIT binary patch literal 18409 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 HDWM4fp|N1P literal 17097 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 Lu6{1-oD!M<>jsF$ diff --git a/sflphone-client-gnome/doc/C/figures/hangup.png b/sflphone-client-gnome/doc/C/figures/hangup.png index c2c2ef61c740f1fba7f10c926607f0916402b26a..dd895bb497821889d86c4540cfcda27ecb94ad6a 100644 GIT binary patch literal 18509 zcmeAS@N?(olHy`uVBq!ia0y~yU@T)`VA#&V#=yY9Hn;Qu0|NtNage(c!@6@aFF|5S z-tI08|3PrU-sO`S7#KJUJR*x37`TN&n2}-D90>*n2KEw9Usv{<JRBk%Mvodk^)fIp zNS3%plsM<-=BDPAFgO>bCYGe8D3oWGWGJ|M`UZqI@`*DrC@^@sIEGZ*dNa4YLe%wk z`+Hm4y^dO%Dl9<?U-%X_Yj6aGI5@IOYl-P}B)JFLOD9#jZfsImAi~JV_;PPcoG{Z8 z!Ar%Hg3I^Y`*Cop2vl(t$6t@LoO##S`uCeN?`?jcdDAmx?%cIEa?Enfq|0{i{qp{% z@3d4ASIxWYSj%?LO*=bFafO|ViVBA^2TORP&S{2-wPA0{sx9|UQCa!r|K|Cso=h5l zYxeD%cenoAjLn(p<_ue-Vt1_!(K3<Z&DtuZsjTe0@n%lM+ORcY+WY_i+r7h?snMZ; z`{Oa`{3*ZVleb1~jL<nV+nj&#mI>>aUvX-4vM?RgZFzEyReY&_US1wwzpbHR;7s#; zxwTbt3<uJ-!&JDfWlT7|DI;usT<^0rD`xAeCCWBBDC}U}INjn2ANyWmsl{6aR=Bs{ zc;8ye!qoUcEbaBg<%V9|6GdDD&!lbM(BYsUaD_ogSok8t^&E-C4hjMsd3IWfOpcmI ztt(9R8X6iH9xazStff<woTKwbZ-?BWxNoc~8}H6IJ8$#cO#Ls5Lv7ug`8YU~cZKr5 zlm9K;?yGt{vd?ho<(q$>=a#-pul!ee{L8PYA-6-Pz0EnhqOWYTTzb~`N!f2d+Mc|& z>9?-T?_J)VwN;-ld%iyUdDV%$sW+`Rsn*V$cWBn-Yu?i?&e}OOUd_g%KTUAychhyJ z1>*kI38&|XZ~R!gxmvE9-C~{ci+ib0y0?WtHh;MBzD~}{KOcWM#Qm=2R_{$0KKo?e zozt%(|4+yfR9hwBD^Sjp|LVt{ayD<jX&-ZSPwLF7yb!oD+Ro!V!`ZFY`42U>ou7N6 zw%IQEzw55WKJIl%6~}j1KK)&Pb9PurRlG6(zvJuW{~lU+ifx{y>C?Nqo+_%U8~>av z*z(AaJFn$<-uBy`9v%s|wq*LuHtTI^X}J`hcC_s0>^b}A-h6$wp-WA8TH%WnF3sga zH#ev0#qTwq5Rf}F{{H55F^4<XSWoguN;+BgBz@P8dF4D)=WNcfUT?;yVqh?VFW>KR z^F!Gc;u0PSDeCiP?CNIv-5Tt6qLqEdzZm@_CT32a{PW89-z{;_)7<}&qkgY#kKe|F zENpB-5*M57{Ob?5`MhR*{`$wc61(~}+`L++mRn406?VU1s&{3g|KD$StP}a#xt@CE zEI+pYcR|!@Mm~e&K%;4sYM(vk{_&WjVcItS(#6|e3Z<?&lD9OoP=3=}7cR}?<sWY| z*Y#~tE}mI`CZzD@8TX(6PJa9|ojqW-_5GjSZ#$QJSWZ3hZtDII=ah9n22I_*vFO_# zSL+!UR_T?#zP9wY`EjrHFDHH5Ic2Wz@1F~NMU>5_-MPF~S>`u$wXyA4wOfx&Z|(c@ z$y?2DPDI}CPp9?QTiuV`oHlXFl#pNbK|w;B)6TA%bUbe9xy!cI-zH3$;BbDPEn~#S zB-XA)0^;K8byDkJJP+xPV~$AKB>cVbgNs0+qFhDm_GR%uA{R2A%JP4iTy-+tvo+*X zz2!=cYM-0$r`Gt)`DJzavDM{GfqbjK%OoD0{XLO8=J58t*^9M`?`+hUPu`=X$T(xt zkLPoj|1|p-f9%@nlxK_gR({;C<Zx(rpZ&7nm2ZB0j%9mmbM{Yt-142PeC+P;JCg3W z@yh2`=H;iKO+I=@{oR9`Pg@m!Ufz)_@Y8zx=6CIecS_HkS~dTj@(QNq(V@GI58uwZ zx#!%eiILovcCR8|y*wlHyV&eF!xveJd)sE%>xH_-9xdB#;On;Ufn3auxHHF}8Px87 zT>O^(|MB$xEk{@bE<B9guid{VWKw$J%?;e5ElFONa#l{?)?dVFz5VCBh7}%J^DUgz z8bW4oC@8<;_w_?ix1;d&u04Bfj`hpO>%IN^{r>)}-`jF-PTK$PSNFfaznKm4@7etN z{yu(b&1#XZoBL|5@9rusuHbEKEO~vc_wDWN-PTo0cWiyQa^XUTIWzv*{JnKN$b66H zUHOWsE3+@JFc8}O-PGzzzk<@Dl-KsnCcmG~kIMSS*e&+w*q7Gs88=uKG#m~7x6@$# zE$5%5;X=o+?eWxM@LY3eqVvap@;{#JS90)g|9|_$H{a-+|DJm=F-}_c@nhGTPfij) zg}krnq`thQxg~J=$>#_7YqsnW;7I&($W&*R?R-)1<AMAdzupJe*+h7raSrY7Q?^>f zZt;!%^Q1EgcBkgot1&;glWL)RX<2NXq;}GGi>S713;ph<@%-04JW;HWzxMD~QMo+J zsSaEWRkOZz9ek>_y5ncj+u(_FzgK-Yu;u5T`^%1$ytPj{`ReMLf6uw!tx#RG;p*HC z8w`GZe}8^Y<!3KfTOFM@w_205tlUa=#rd)?mCn5vck0yp_+*#&(_AV%6V5()P{04v zw+YsjPxr?>(K@p%@?y_y(fOb6{JZdD+LbVEjjZ^nE&OFFYWdHX?EF*M_}#`KTHZA3 zzeSRbY^JMaYl`e0Hz@`~o>x*GZj9I4$}evfYnXa?wts@&WdDNoaxE`KRHi#P-8ucF zIKjJ9VBUk*c3)QpFXwwWSFKQ_L1de(uEy4bKd(Q!nPw3?hjG$O<L?@k?9V@3*JLo? z#h=aDzADJ=>7;Eo;>`SuGXICqH2iJ3sC4>^l6@(=HOjAfU3&8*?4;fFO`8Ryr@m^x zv2NSuPgO6IQ*-xuEu69WvTvB%<z>D<zu&Kad26dSgLe43C7G9(P5(3RL6U{w#m9#C zUVfBFP_O@A;&$J-aqBXle>3;?ms@Q+7^x@Bmhpvg_H+KD@v&z7k~`lRb~P!TK5^;i zR!2Qix!E_vKFLbXz8a>bwn<0X`*~mSw<4xUw=flxSDSC1)>x`OS>|`@%9wu|Mny9x zwA~Ahp2WW*RP<@^>~)8K35A^#ycTR8(yepaLv-f3y{w0K?fiKD5R>2EuiEvg`sExu z!}Z%t%N^rlT8+X|wtL^&{b}1G&I}iY)s~GjWB<Qds<1EgXk4}H(-j(PwZ3V7-h1jz z%s;F1zyF&#>+L+A8o2uE(`Co^3W>PxRJh-DNpJd-Cr^U>Wgnck|G%XE|G$>Dwz#S} zj-h@6(yuEd;`h~9GMt@ds_iQr!+6yC=l+kMKfb!!Kku!y;G1PmtFKQp^VsTlR5aA| zX4}c6V{5F`bEM|>ZMs#G_42-ql(4HZ--qu;?eX3o#;;yHxWv3d_0Hm1kI(yEx_Nv~ zXy%u_<_wqTwXU&x{9;E>j%ZKc<mqRQE3aZ@e51lE`F>vVj0-nUfBcbgHtl^E?+WD@ zy(DJyS@s3&aop*XCx4R`PMhZOV6JoKn?+8mf+V@uz0|$h&YzHRMMO=u<;=^)l?(5M z?=jsX%2>r6*?!%){-EbATjQn`T6P}sb8AoCj#?bZT$WNSD0cK?b-DGY%l`Hgr%nyk z)78@I+E@EKE_C0!ckg^=nXHVNbueMat511%cWs?B;rsjh^Vddi4~xB_|Mi5vrx35S z*^<P=ZQ_5lIM*>$+qH}RJ+aBY{>fbKvR@bW#xs8rx9JMKXBc&AA7@F|tbnw17X9@R zhh8i&I<DfkFn{vQE01{6&oHd}Qng6E?s@Nx1&fY5x;lz~HPA1ab?)@)?#S;!)lt6R z7XL_*a%Cu$Ps$O`S9y9w_47qH+cP)xE>{+YiWR$+q=c_dV_CV$Vpp-g=Cfrro3@$< zo|}5Saqi=H&(Gc3Jab;<x0eU{?Y<vN3J_TlB>7o;L$2tXSjk%ja{oT%n(<XlzFIl+ z&*yJ@|9mdHd4Eye85vs{*V0UBZPl`UOKR_|nlxSPf7`zedaT=e7rH+``NNeb@zeGG z0RQ@G)7|azbvuIke`i&EI;p<idml49pU!lD4-XDSMaApuK8F<aUUWD9^fmBHrfBE- z;FU%XWN&s(oPYk&-EZ%%pIzA{@mE#&-G_rYY;%-%eExd>$B({SD^|~HRO>i+U++nG z;M|qZRVS7j^(yVP_x-*9)R~*>FPvH0rFxyk=)>&&KVO}cbGdF-Tyi=qEZ?eWr=RyP z8_OoOchgtQ^5fn4KJS0=|Lc+m9%%gCs{8oqy=x}~|7=L&6PADF)w6!#mwmskygspE zBY)8UqLwdNZ-doxE<c#Ky<){mej%>N<NX`z-+OksXs@~G(X~ip=gysngiIwb`>B=4 z9LP^sc=S|MM^OJD2aD;nEn7?;ZscZRa`bgR^RB|W;NDx?`iglD3M(Q(8Z9j?4+$|f zIs`C#`1^~??FKbiO<a0n6$Ch1HgK~rH7>9!J~(^1l8&+f2g`P`=l<OaHf4<t3M&#h z62&=Knxxt|j>+(|ustk=LCAY(`1q{zUEmh~OV@-$lIp5x*$;<Gs)S_e(}UjGC8o zY0}2oy;m38Ts^AyNb0ECwygbKmrXz25cN4e{o~IWjYp1OU0(P1*OmNxa}ysg+hlgN z=<{=>z@kW-B}-zS=kDF_z3a;?AuaVoyT2{2W;So1n4|u4rN8sLS!Itd-CwIz+<xTJ zhlxj1VmDmq>TKD5J9z)`l)fA1wB1XcPNsgGz-CfYq}%$mOl0HBpJ^r%Hq(7Jo|xuP zaCqmVbHSGvzOTr*pf1z5Z~pUt??q>^S|@wjAGo!@?%7_=-k;e?-gES{xcWL*oQpT# zw8&Ity-$gVh>FSC_{YmX`ktQR+FI<O@T%+FLX9ap!u?8>m(tEuZ?T*mzA|=7wpnM` za`vdhr;Q^f-<<q!Uuv3*xtc-oM@c33uZkh>J@;;Ux+3gQT+lr3cabM=Rd|VtuikO( zdz^y6!Wr5Js+#QMe)q%*>KlB%zFqR(VpZP7NtxFw1<u!fRNp+W-?hJW@&0{BYVXdz zyuguJ>d2Pl2d9m1<nP&dHteaOTgk~+{(ZV_1@f{&3eWSN-afwj@(M?0sV#Cxq`Ccr zc75BeJN4yX>8TapTi4WWGJh|>tso_cU&<`Qp*igFx?MT<-pVV)?VkHm+jzrNPyHJo ztxtcJHri5daI5I4#=$vf9`Va9s-Dbdl5wFStae`Nt8FoFG@ksm?n?Xke$#Cpg~^ur z9D%&EKHm8yG~X&;wcj-Re9PQr($SZ-bc<cTYER6sHed36$@|LU4Dl%QT#v=yzJEOT zXiE0CEh+*WiT3=rUz+~e>F&E*{hjKkrqIMK6<3PfT6<hYPd+fOPkXs4ROjbU)<tFe z&kM`HUn94A`wjoiFP0wvVY5>A{n?+>MK8;_+5UCDCZ%n4W2)bMoy3}2*@=&*ZT@~i zkuP^<$yL`0Hc>`vW@}g1#k;Ng8dH&cy63+}p4F7Rf1)~`+Rrz>o69b_f2H2y{qcuR z)ju~}8E$sp?iUmHrPP?DT>`T<&s_U5Y(a<f>OQ5Hx^E(<_plnMu1(u7<h%TX^bWmS zuBUU>pQ%>(c)hj4=DWId*}IgV(SmC#eg^KdOc7igrm#b9p+xpCN23o*omYHzJ;YqK zsNK%%%guUbwoj*iOx2map=I&oS(iL&<1!vcwOe@|(wa7PamKv`Z}`gJ{rhTvk3Z(z zmal$1zkZ6o%X`6e<>Aup+cxC9cy!5VPW-;E!+hb*+`jMjGtW;njx0&i@NdbUxcQoK z^4_^-lOL^I8WfQ8^mL;2U;W^JW*<JhDZC@Rl3C%y$L*Clh4ppu<!!rvn=Q<J+y5g! zUylFx^38est;_9ib(m_GPe|-NvMZIlGLc{4Z4K|e$Q4(PsUERBmw0-Q%go<%^RwNr zox6L?Xwy=4E!ID~dJ=td%I)TEoS%L#ODAfbLxJU?I^Ni%O=h*{ttZzdK0Uamxc@?% z+>_f2UUlchP4%xy?1{bfNH*<2Rf74-RRwbWC7QOkR>rX_m3HU9;4R3i(69ZIZkS%D z)Nd2tKgaa)%{86RPnX>jweySg%T+!(<;=N#g*CPJ_FcGQld~(}*727!cE8eKEo{G; z)01>YcCN>)eN+DaEKi7>>$G;8?~0{6`^=6VnddM6@NJXUG|A~)pRNi?h}Y=(Z&eq( zDEH)@Js+rSTeovV_Mb%`lI7SZ^=bs};u4RWw)ubRpBL*-NE)`XUXBuclzL##+tgh) zfhEq?$3x^6x*R?Bs4A{%Ba?^JmQ-&2%!?l8KlolKOByJ&%zyUp<iq1`8`9mF&c!aj zbZGIWrV|>kj`{q0U;gWQSm=)Zb<;h%_QxFm7t8L!y>s#mtKN+FmaYH4y*pUr;{W*K z!WZjS_jYT1x!~j|dOF8@?TbQ&-M*UN_veT^=dd(sZ9UoLWH|lSm95qn?5`bb`+xS? zil2Y}ihVNboe^AKa6#&H2fMYvv!(8>Q`a!JpWLkZ)ZJSn^?c>O|KYns>wKmDx3Op} z_wX>CzHH{@^5R2lLW1Ntr*ethtm{3#AdB<0^^B^S-7_|R(NBB#eaZC+$98ClPIs2R z(PO~3F~eKz8`tN_1^G879_Xo`Y5ZN_-dpL1EBP1s&N(zKvVOzWkp6QM+g|5CHd;8< zd-~5q)%<3Dx%d3n?M>OQ+AC{a{IQ2i@bR>xYTI5L^~Fk`c~Cxo>BWiulAkW@_KDxv z%-qhmq4;c!n!SC;Z@c^bYs;8ld3gTW{nI2&q)Yhu$A{+Z580}Z6um3tdw2WzzDv3G z?w7g)e|~?k@Y>BYKc46d`EqqxcCya@>s7S0Uo(&8=St7pJEkTt-+bca?y}eex2(zw z>PyV(_x)6D&-(uG-i%Z1U8`!VKb6#*U)%RjXTHAQgNiIJ&+2OiuP=Z9`FF<R<Ur{Q zU1E8jfA(H<d%Vpt!%*O&=A0hU)fTc6{>uH*)=K-dQrB(JPk;UY<GuH{J^j2>?q1>a zu@pMB;CFJ1wVFW8e2LvH!C#X9SlGAZ+s{4qKW>KOGS&j#g|6p+SNwfx5mWoP;{94( zoBwJ2QTraYr3YlU*<5SRjlX;1cqZ%ZzD^s96*a4_FOXbQv0byg_KWE9xXQT)*V?;1 zmvnhuEx+*VF?sEir+crR?^$+p#`hh|FH1kTIG=g8-43^M#RfU&*&qI8TXV=6ENGhO z_VkflNyX#xWml^D{qOIZzmm1#;Pe}O%#x4ely3YgusZr;#$L^~a}U`Z4(V<aPRvnS z?W)bR#r)UK4P2?~6pqPRe&TGJzW+e%`?<&7i5~y^|GWLXo=cr!+5$0N3q@T6H*MbR zEqo?z^M<Ym&ysu})&Kqd`TT{WXXM06Y^#5;Hc2(c)t{3-bK=B`ow;gi&mQ%^`ThO< z`fsUg^q%gS^(p*&wg5+#l4;nDd{)DqS6TfzwmAgY?o<#-Hk#QI3LauRlwdHW?%atJ z0-vF+8l7Hs0S*>Z9%w7)`;EzyCPCFc`XiVn&QZNOY;DU_u;xV@Hhg$=sO}#l6KEK3 ztAPI3ShcQ23EOW^O#Qj-WyUlW&Z%ClQES~MsRVMeFe$z<^}gb(Cfv?1ucoQ_a$Ci& zi7K4w>FG_)&7FOH$8O$??AYxPaQF7xpZXe{TE}zDHm9AHQt@1reSO`JA3v^COq`rL z^UN6^v%EVVfq{Z^tx69i7;qGdbF9*Q#JcqKfwawqZ*CZFiPCLm=U*1KHfnq8j+G%= zfByV=aeck~x^?Sh>}n)tpH<UpaR``ud#!=vRom-_+xaiA3|@ZwQuI`n&TYB3Crz26 zlExs)(X!z>kBIBR43kH1-`3u~b>R4M_Qe-F?&gV$Iw`C;c4yMu<*dtUN~CP7djGX` z|L*;8O?0<x&b3o9&$}*Pl~VcoHC8cZX;A1ck?>NL)f*<XOkRGY?hi|Lzue;^FMZ1P z{&wrlzY^V_ogt}qDAnmkzTlOt2`a5~7M1LY-CKC^#e`JOoo#Ci*W6fh!fo;6V$pgJ zlXK_znC~vTkvenna{tZRKUJdp<|iEQ6n-Kq6}Wrn<mKgumXsfyedhKdvH!By7HSBs zeHGPuh%<5hK95N)Zi^K>#X_{Kv$k?hUB%IRj5YFF!uIS9x3m53L~p#gL0mlcl*ZG4 zQ@2K4sXCk+T*&R4Cge9y<>3>}YwB{(J+h=Su0+J#J$cnS`5XVSS5HDVd2DMsRaITN zfm^6##|zOU=GNzWEqiBe(oa?AWjb77=&@o+lFG?0uT2XkaXCD7soOYHINdM!{`xkZ zlAO(o;*$DWPsATQiFvHO`eM$rxvkze=1%f*^D~PwFXx&Qt65NVP)4*pb~UT3<D|D4 zy>2na#s%k2J4T1NWTm{xy}BWlweIeU^c442kNAt~N-clgOai<W^Ve0)s|nWAxS+bn z-1(8*!6f6)$5uT*sdtKn^%l!<<5f>3lA5GH9PfKyc&TCXYWBQcQCHU9<=A}o#J=F! zj)iJ!D_FaDOdqBO+{`+fXA-76FTSYfP2SRF>`9-xeRX_qoP9atSi~zchlw&=%Qi(_ z6o0l@|IBeyd;X~_B}}>Ag>kd3ZVgcnpO9}~xcP?azNn{1ZpgW^RG;Q(*$^KtCjYBD zl(k;TbHR-VU*4It9kD&M>+$Lz=GA5yDI(Hy?#w^3c<sE0J%*z8_RN~cc!V~6pH#c7 zV_IYE#Z_}N1TF}q@0Hsvo8xs>pzLUx^S%g;WlRUB=bBp2%QBI&todP})hpG#nfqM2 zQNg+MhXW?ChjFt-9y}b=(|)vP_0^`hLXMf9K@;D-syofK+m~&%@1Z32**b|E8;?Hw zk-fD!beci5_qUq|v!-iEmuhW0kpAE5^RHOfirpNA;)m*DZ8?R@gguNj!Zxgw6+M?@ zoTxh~aHVWhe()Q<kH`DsmLAR8JaO)H_fIcF&V*T4^$Po0g{z$LxU_V!=yskk?V`k) z0X<%;E|q5)1uyqYJ%2Izgx$UsXVmsg?h^{iIdV1W(A6x*-sGiao~nx3rV%<~SF*M$ zt1;eLW&5T~@{E~5q-xh%Ay+YtZ5DR3*9aY(^#Am`?eoi5Mz#vQ|MT|D?Q-dl1wz~} zITH8#y}0V9;U=?CSUcm6%+Z2NR*Q{RPZYK8;ti=X?PALE>^_-ubVl|e-$Lah$|8Hi znr~)3Dfw3T>en^Lm5TSQ8gllx9FJ>!u6Mm4@p^{IiA_9R&P!A|U!4ro*(56;AFrgW z+}YE!B=7F7AHRNWN<A&M%zr*#QRnZf+5LO{&xU?{cVExvO}@)|(MNhMf2}T<R|#1A z=PKTx!p>FF_kz>m_XfQ$-12_YE(#{+i{4>$ow(t)$&xgQ%xCiLp3^RPuFJSmRw5<3 zD{1Cd_HBXo3k>Dh>}7QSU*kV|qxTqhdCZyO?RVXrZ>LCZjXG<5-p0A0z(C4Zbk#<k zBX0tB&H658{n<@kIm(nt@y+!c$=4-j+^GJ<`Z8+kwCz>@?pNkU983$Y*zq?*Wu?T_ zkTVy*1dGfJHq5xo@nu!_`f6ss)YM1o)+_d24>Ic8yK1AVr_;7Oafj9gty~ek{axx2 zlOrbt8hG7JePW)RnO)m0@OcMk;{IoEyzZWwnRJ|6x%cnv;M+&}8)_vvmxwN75D2#J zbNFt>Qq?wLPU#$_YBRREvuZX=`iskMdeo<r9gw2?@7+PuXUjCqq>C;-EuDAmi$ry0 z;(n%y(_D`~jGXrN`op)243<T2G-wm}mVNwN@N9{_RRUq9hF!8sA%$loH+3CZqipjl zzuxCnjfgeNsjm@V9;6v@U8+n-l+U{QN#TU1#PTHnxK}^a%w{vX1}1L5zUFw&&9uXD z%RX<>IxP3}w%ZNSb`S08->2R#-0}G6kHWo-{^_j`bA1m<INey!yPW&7q4v=gDF^t} zW*;s-p?B&~#(8&L%S&s^xEU;6Z;IUde8O(>vB2AcHE#|!2%F75vQ{qGeEFP1^Ck!D zoh?%O`ADvsb>8l$PdvL~zE9b|bKblcuUM|{iOSy3^gf#7H|vZeJ<Luw*6+L@%45`* z*y}ZO=N=K^6RMAIPc@RY>AHFGf9m#IhTdu+L1$;o2zvbR;LQ7Vhi6Tzigc>8W0f`w z*pTS_vQWz2{*Qe9rnGCfygN#^T|9AWNlKY@b-;>AGK(`^G?vLYN6oC%iK}?+bYs0@ zA>&!jK=TDRqI#IFd@tMcPWGL!XKXBwTd`snOR4QEW`Q@7UK`XV#RT(pu{7o#-0>nN z`v`Bq?p=Z(&PW8=|K=$UN@9(Q`?}r#{332XwFfJg2kzc=H6SrutMEzczUYlznbKx~ zYc5TA|FAW7sZ;87*XNm%RmUPKR)$YBXc739?LEQWfLs1%f#a_2oB2P>M^!uS+I+6n zQaS9}joAx|%G3(pL<HIY>Uh-5zUs@|Q!Mud0{ah$A6ryZxN_&#ux-V49PchHbncmJ z*eyJ%?Q-6{h|pD&BK9zOWV}r>(rH+xXco8IyQf3&klqf%M|lPUCV4WNlhqRMY<oK? zuF}=w_)$TVI-5xgpPl)%LW7G_-GAfm6GsZo`!9)4IkhR}q)=V##x7w!xh1=*t+w3B zEAOc4+>!mpEa?@?-D{<5_RXKW{k@)0@{QIF@$!C8=RWxPRC$B9*@T7r+@00F{%L!& zNM~L|jlS7QCL<Q9Lo+UY5AV`(bNg#6Fgb}uvgT`J&E@j6-snYsmtJy6+0UE8Z?_=f z>np9glZnjNudQAA`PXZYs@mR-$A3AuSLVKB;(8OtwWVs!R;GZH---^+n=#|WrKR4M znFY$%Pjb43$*eb-|Mi+E>)f+$3v!-+-B*5Z8}Hrw&d+-Hxy5{W<hpkD(I+SS%FB=S zNEW;PUcGn2dcUYsfv@w9&oKzwkYcgxdHM3Z=Nl@;v(_&Dyk)}*friODPpZuPo_JAY zVT9s#gV|2rjCobxrOH36_O@BA-+N5cQz`%ABCX1Ia(8zNTO=|~3X4|G35ba~vty<G z1~u(=9ew#8zjdlgy3K1An9trY<xI)ey1!Lt(u|{;x!G2WF7^t3wK6+Jvb<Z;f9jzl zj^71@B??a8bXv=__t?e*Jz>mjx)EOzHfm1wW7=lAvSxFcu}07PSe0j;E7|<#Pwo8v z<mBX^kGl2Ob*{L7C7>rL#^~2kt|=FlkFso9niAq8$vfHid0%)|)!&enD?Z=KUST4& zsqX*ZMeS8z-}}!szt0kSRzfu-Cgx1H@cs1WDEF><gECL8kNad7^(ighbo*mrc?nN@ zOUs7b+h&KjiVRnoSj;}Fp~Wf6mF4N$e<S1Amp5(=%b&0P>9Lln*YDuTi&m??%#Bqy z4cK&V$7H^^7lAGN+a*LxHdlVTna=p*QMbOq?6Wri|9obs`F1nC=J(s}J(9-DzRZXY zy3u^cDNy|7#uI59n$F!0%&k3O`|l+KbS=Q$KNn}l7~JelVD6o*yyijP2Z!|1WhY`- z!Y)|6zPS3U>25I(p~lC@7G8RJ;>WMoT;H!t+09vSJ$|{`*Os$$EGILYo%r_U5FcNl zKJV%iD{{-2bY1t@Rwyuh{P^+4+cLBKdp-Gaa+40S?!ORlYg>ln=M`)jd5@nmU7d6& z`J<ZCk(f7E{qCsy&pUHwrZMA*vuF1%TU2+sWpA;I|Grn&ldsquzrvV%_z`2r$L`0o z_ieVASS{1=>|ibfM*)A*so2Yw(@I$y+!}o^X6E&6xc{Pc&fj_Ua;}RNb1yCV^fLLF zz>ibfeDdqqY!AJ;yIXwqHA&BDvWw$ISW{R%rxlusKg>4!m~i`A$%^>(Prmzt8uKM@ zZ-uUKyV-8X*|x<@_^EzdWmtNlz4Wx5(-zeQI~(RYJ=XTg7rZo0OfgsABVXo9(=kWg zRY!YwK791=%jFew=2(2Z<n7Vr^dLI_;r}<A&G*QdH_ezKvFZD}!x0OPu3aIpIjs9y zo_qS{N3UO<l6GdhY`1A%K)ZKAc{2A|ry~OAU+KMjUcc{YYivQ~6*)_xsRtYOE?~H? zK5xaw>pw3z^IuGO?6&Rw&BL9ClnRO#IaXN2&Nf{-Z~y!i9H9$pTc(DU9<5>AK4}Mc z;(E4wzs`P|vbUXYuckkbxzN@q-*!IP7Z(;bugD4a*v+B%YP+@5jr9R{SeY6Z>{_(z z?YbM&4&~P-zxbIebgk>3cu2iYXU$#ZS$6y994ga&<=`rD{gX>f@v*#hmBp)0?412G zCnEZlyNiI}XO`^VMP8hV;YAT8@hpOZhBliFCKuPfbGv4LwPOW)ctF76y<fS_EW0af zYgT?f!1d|$TkVv$iy!{@Hp_8W?8+azx8EpZ6<hq`g_B*)7r!W1R{=pm$HnKqfBeKh z+p>7}m$#ac+!8VmcYN#G{>|r3_P)S*yqcfyKdwJ%`}5uYwQp|xvCNHa5$FowVGv44 z`})83{64w$Lg@l+A|X95AN;TQFt6Y8-k-u_{|!1L^tIK^&OCU`-(K|n;Qx&YLFHLj zKP-GU$vxdJ&SJik<boM@<@*zyULF4P!81Q=CBw;veA~N`^-|reCA(gKHON)hHWXf& zXLGiB@6Js>?bnw}vYKm(EIy`NXYsbE{^{Y?%n+-fYje&l>g2z)bm3v+%xk|h|7|yA zx8~Y;T3&74-Ds5=vZAV=*H^C;7d&qKTIMpxgzZfe3)fcWx*sie(|(pBR{KHV?jxB> z_wAAgT2v)(Y$$j#eIw7SOE(_!Ud?yizj6P@^A)*|9!;&<JoSzJ>#d74G`c#Q@Ap4D zH%;)zuV0U(1)TerFWb1=p-d*<?oj&MR~J71onQI>pP38W&qwk5t&{)z9E+JWU$<CS z{{H=@g!uTH#Z^Y%j%VHxzt?c_HMhP_@I|w@PTsTw_La{safKNwDYd1WOM0Kb{;yYa z&z0?xfu*knWUAHIpRo?C+PC`Cja>Daw*Q2Ml;V?~ZJ924!>(_|jAvhDz8V_u-zj~1 z{^Or1(TSNEPy77qo<DZqb<sqt=|o!j=Uay+N9d{Pv+n-+apt@ut}X(F_dXWYG1=SR zpDy-Q#((-;_nH%*uAC~KT)geW*A;p$?k)ls7ul~rZ-3DA^Fq^iEk{k3Bpz-v$&v8h zv0UurPQJj6yqOXAXPTb>`t;!W`X_G{WjlIToR7W#F8%(|S09$XSt?Teq`#0S<L-fv zf7#By{P|?PN)#xe@-Ww*KC<bd;Vc&yfxkDTxb$y@ou9k@di&*5Q$F5sec$_Fnn+nd zWqInG#Rqf#zKJfA(&l-x@!MI&J(~>YEU%9__9~S7=a0UeeRWSPpDjPV<5-EZPP%dQ zrL_)%?BOzwm!fZOHk0H|@cPqV>%}wo@K@2TPS^I-=_fyP`0xL0bJ1C^XEk3KF6wb{ z8Ht6eeBWz3S2X+DhBw>AJ3VKdSS<hUL6obvzQ~@<?>S<<KD?c=l#OS$NjvZDZ5zwp zRV0<~ImrAzXX%D772NIn=C{6^`SXo!;hfU^pBo>vPLC+L)tBU*dhP}L51pmf@jAB; zU9+EeDD~OzHCiD7T2|YgUUK_9J-YME#|Vp0e`9Qp=_a4wxH#v}2D$$>wo}f3pSdpT z#@prB4b&Z7Zy#q5el=lQi1qxw#S$Vjj&9n?Ua)3<>cbP~>lfA6h(+_gN&i`4FSg&R zF*RMQI{VV0g)8T8T>ta+pM52A@x0S!{`NZg@!Mq`sox6k^SYn3-k-j?=%M(X&>zPB zJu?o~6}PgcKD;rpX4Z{9{%30+?Vs<y=-*rBYZCb(>N{H(+y8BSc+&EXMbQM-#ZC_= zmF_62zUlYx;0^OIL8~$~ZS$OzuZPxGu8UT%+Os43n%y(LwXN&!mcOwo>tVis^l{b2 zZCUG=^dx4q)?KqnbiX8QnIp6J?B<zYuAk(#+W2PXf1}EUjT7hhr6-)`c-3;`LhhGp z8_5k*UuJI(xSHoxeP4LZt;zjKmgjE$mHSe?N7Pk%`{cyUleSeF|18}t__*rf>rdZ$ zmiojcJUjRQ_nhU`CMqTxQ*QiV<mvtH-rabEeO^LAjq{<VrjCqK{m1G@g7*{|y06cc z2tK%{gk$2re?O+@3G&Pd4@hg{SC_K=!{fZmL~W0stkP|sr)$f12koh0Y(H%?<I1c5 zYKw1QbJLdOc>h^r?iNlR`=B1(QqJJ(yNw@h=KRvnt+*pG{#dQSlmn|{<SsnzyI#3! zt$9`n%Qvax+P!_BPy7GgacgPcT1j@#<Na=>cXvF{d-dvqNrck(8=mKWvD(!h|CsSQ zDnr#aaj*QM<}!Wl{?L7=`lFX~?lD%HccZFz$K#b7k7R$_@M#8T^ev-h|CTTPzht}Q zC8IePX2{umf5~m)@oR4Ux0s61ZCg_RY&h3ht=_x5ez8DP@^7PecdJ*FGEa{!d2QOa z{L$Zwt4%B{cZaUz3s2Lx{4Zj;D&W@9<ASfAd(Zu~c4u*b`KuRNKN<JAL{HV$SuAF_ zw7R!@<McmT6{Qb$s=vBe{Yhlo9ovO__=}3PJ(s1Fed$X)Re7J=_vF!4+>4!)Z8wL@ zEnM(X(M;6s<DI#&9=~!qe}8^=WX~^=t+&jVma(dCnRCl=Q&2y<bY)1u&NnH!fBMYT z{+;Mzj(qNBD^WEmpLw0pyy%6`qc+WGUUqf&nY!(&=ayP`-TeCRZ_nv)FWYa%ulFV0 zi4Kn3_WsPyO_pEP&aYbVLd2mxzczkL`rg{9-1n-CPr6w@3*K$9a@FzA58Eyoy?DKC z>Arv8gVz5!R1{cu|7MN%<t<k-rJ90Y{<P`HdE$8PU9!lH*-1MR6GLRTD%YN`Y|Ikh z^Ht4HB=p(FY|b2^w$C@Y7JNQ*|K^#KN|M=8OqxNlZf-lLUE^OH&pqpR&5?P@KX1&Q z^PPFhG>28I<ovJMU+;bqqCfA~FIV#yx3;pFtZLr3sx+dyu==GGe}c!Cl4GT>j;zUx z?R<Y_a$W6h;a4#mMdCNDU9@sRPm`4Pn+2+G_7&c-{VJ&T_oIUT6k$<G*SjtK*UzUp z<c7A&8u0FN3;J?2>f75p?ok=?Qf$XB9xOJ}{;rZ>m$TsH<-`|y+oRR9E!W$a&3x0o zKk?)FT#m113HOYq_4P}w-~E5-H!gKEy>&kAQzkO`>pq#Ud)waT|Apl#w!fIQ)3+{O zw_SLdum9zwil3W2wO%$YZ`6+361^&+Zo?!2-<x~hn(g#?$F=G0oEfJ!^{9A;n|$AU z&78~rUqX2jqgRjrPx-{tnq~7sKIBOEoEDAU-r}{^N`L8_kC%>~DSDV0l6C4U>naoT z532l}Tf<_b)~&ks(Cck#N7|P)y<cu@=n-9g{nPt&<sXku|Ni;%efi6Xiz?HnXRV%g zg!`1nij@mzY@T|0uju)n%o7*$?b2iWVxD>KwoH_H^8W126I18hvR!BF`114&+usWJ zWThWxax9BYZar(9zHz6;q;<S=w7$K4WuhEnb*js@Qrx6E`c@g=4XKYOoab_UH(W3+ zCq>rA<(;WaRCwm|l}@ULWyjM`uhf0B`Pj!BEA(6{qyrM4p4rFz<d#PHAJ&hbCaJCF z?NB~ZH>K3Q+v~fidhUY_kvkRo-u;+o9H*CXM(<GEq_nf1Po@OgmD`y4t-0_0?&iZ8 z(?Yi8oIR**#?zehxYzvNfee$R?YH%<kFERm_QV0VGP7Fq*~!yB*}sa+-k<Kbir<#a z?QzN4zxNLuW6|_nW1FHQEOzVIHy!>(N_X^Ee7SYNf@x~-8y{Qo=LXB)tKF<Aj&s?q zRvPixG38Ifycq^F?Zs*xXTRA$bMO5S&+1(v(V}<C4)IAfy_Y<$a96ADPL9@EiLCwB z6=e<5tB>0rRj+@qr1?~&bNBz`W5?fri1u6%Abw+3SYGFu`w7cEcU!$M2w3lJA$dBy zz-onY;X6@r|F_q>(|^5+`19y<&E6#WlPgcYiT<r_9Jbu~twxh)%FSgwYcxdUe^36t zT;@U4PAPGD(ZwM*0xQ2&zq)m?#lt;vlOAukQnJk__Wb&7`<LXX&fDU|T4{0V3gcdh zt9tX}kNKtCn<qTy&i0P}xVes6L7wdIDpN19UfkDf{kwkVVaCNhIX0)_-`AhCbJcnq z<H~q?+4qXK%Y9YmSshxXAOB>sbE)L71Rbr-GyUy;wiG@-HgWRg=D$VaE!Wx#-XD3M zS@I+Ko%~P3`n(&bA2wS@{5$N;Q(44#tNPyaqhi<V0*iX<{pH@~JX{}sKk3>x6+f9D z)Af(lom#ldS>oP{L-PfF9sK1oCm;RN|E%cDk_9t_Xa4_qUgiE0x0U-&S>@dOuPk4? zd&1dv|H5A-M!To!KJU0X{nx%(UbikUy}jzeHsP`ZOF8}bU69JX$(}w{{bT<5hqv4B zMA{`P+<k0)G5JJAn(D5=<BL@;tmR+s?QENo{6Z>`LFJBgnIg}J%&W5;VwWDQwep>F z^!Z=iKOfKBEqQxm>OuX##~PD3r^d(IRjlXkTwlJh@ba~i`ZC$xc`sVSO=s9RzP;by zuU`86h4$Nyt~{SVle0UjfBEfMCH4I}i_wSG^Cg5g%z0kDb>Y_qC!g?Fb$&Y+^<`F9 z)Lw4g<G#-Vm%rb++L0wtc3xug=8H#mdpu3L%{x!V`NSjjmseH^A6_<7^2^orHqxuz z^&*?{PEJzY^Zj1+lc!IoE(;Z1e&gbwZ4ZRmUW9!(c=+#&+Up7P{{Lj@jh}b!5dXT% z5@lQU%WFSz3(t~!vbcKp<)!D1bxNepncLg?_Uv;?UHo4C{zs1c7x!l-N0n91GUau@ zc<kk~p37nJxw2*%CnNrG_TRtRxh;3M(VNvJRkc5K7b|IH283p=Zi?pe3=~ndwvLW? z6cjh%=9xD)H&_1oczol{Rp+%QPdhyS(%S1na=-F9m7VoJUq4;cbJDiz!*}P^k$(z4 zuo|W=zSuE;zPx+C+|u0J+jykSc<k-%*?6T|wr}6QLWIfDR7F{t`Qxh_x~)zJ*G2x> zS0umO=zKxe`TI3r4uvl<k#hTf;PrP8Avw8oudc5C`E+`G#NH}Xx5a@zEouT+egvF( ztG3>}aGhB7!@9IR73R6K%oh5-7ms-LRU`Pn`4oY(p=bUsD!BO9Y<BO97a3veVotX4 zO3$#XwPIyub-Kgal+`t3+jlP4ziAKez4LvRU%mNIQLNdmf_ZVJQ<lq0#uyxWku$Gs zw`{MQ^W$T^k^5>aZL7W<IDEL7U9N&5Jp8)06qhDwQBgRziszxEjd#kN(l*}=Sba5P zYgE+MtfPxuyI)*h&d=7|c(9rM@uNpdM`9HO4%KCM?b^KAc<0WY6;)OD%>32UZNF`f z+pXeR^5R0HW$`nEf(H&?s%-!M`g#~L8>i6n_nOnvAVEPvM<*wyj~_p7pSt08j+u#+ z@5&v_CGYRel{8K>$hl$grOI}1_4i{ZPkMr;@MOPu%~;U2zd?$3;>3who<HB5bJM7( zxHy0IIp^JX`_85vPTM?n_p{yac6F}|UjFIRY5mPbPrZE9Ccg*}<!Cuxmz`)J@#4lt z<#s;Vq@!J;rgb;w-^|ey{kG|L<a*hJ4-XE`@KKvr`z><czhBvp9zVYL`s<-$agIEt zN32V=Is9+rn4L-cEP8f+k#=B6h|6NPUW>v<ELD5=m0W&VVv=`f#*rgOE+uz&cYply zCFNL;q)GO*HFJJ&vouM&yScS}xS{`hdcdR$Sz9x<n%2*3+<d*_TCl&jck<s~Uwb4B zn*tZReLQP^-=OG;$DO-(16PK;D6!&UJIorl*Fj;&Nx9$u{{C(aWmy_maekhyWziE3 zOG`^034?|`du)V+g$v8dmif)K>X9<-Dtmh?(LiE?3TLldbJ%Lvr9yYjnGW_Ufu?Zf zeos_(Z<)$+V5da2mlxOf`}Ow!{{55SVN>&;cSbsY&%qgn$v+<V+kg1}{rKU-&K)}) z0(e_wwO-o1y|djT!pmXeMa4JY@7C-4Mza`xS@>;6m+l^$G^6vj-(^5}e(g8Tyt?+x z`<h&P9oIBz3f#%~7yY8fF-o;Dz%a$PV4d8SZvNy86Rx=&Wm$MRvm;aDz!c5kinm*@ zXWZFgc-u^Naq8=WFKmM0;vB1(7pZb-xh|bl@$RYh%S*=79tg<av6bl#>8aai?Qi!* zaCP|lr2G5!mh4=-+hCeQz}?o^Jt;~I7c#Ee{BcP)$r82NyR0OqYO`4B&o{H#Bfj5v z+;#Wr>}k151{RsFdj&aGZ9lFjwSwVF7N@v)?9A!CGGCpRhhNs)XLmNLjq$;gHO{L; zJFAohI1<J0aCuy6{pvW$VSV`G>((H_J6eb0if1kNx%O&njoDj+-QS)}&}Xjrc;e1P z8<E1YjCrlh_w^n;uGCanI(s8?#$3+au=xkimoD?)vM$9*mi6+<!+(CgbQ4=|?K@4> zU`NpU<mh`f`!yFPIdnKEthgpu-P<|!)Dsn%6kjLCyn9k7w$1(hQY+T>gxjxYDt+^= zJ&L?78XBm0^O({k^Y@SbA6wB8bE7xIHez!5hf}rMH!|5w^jO@j7Hev$R916YPE%{? z%FAeU2w2<tm+jY^cD^Nwr@1a}Y`m^K!Qlk+_st&)!@scqf4WbQ^U0LB_>-nyRk!@* z4r_($W-%<C@m1gN>D8%X2D3Mu;5y+JR{ulZ`fNhR)!uyje5W0gmEY+^uhozeY!cvL zxf*k0s<gtJpOr`d>`4%Pz4_b16(a8}Z_PVcduvfx{O#@HTjSPcFb2Og)l?0ycqg@W zoz|vsoyU7$rfZx!{kUKeYp8>Sb9}G*HBZNL)<+kuEn~2G;=JctF01BIEt^;FMqj4p z@#HNNyqMbP5OCJ^+v^oUo7QZ|PB+@08+}r4`QnIF){~rRveCW=*z&DPJNDVBhn@Rf zbI){EQ1H!tpU>=U`66RflzW0pBYo2ejm}3YIo7S&EA$UWF1M`wA#mR&uA%H*Ef0^_ z`peubO}DQk``gvE`CtF*=@p`7#I?!TqrD_$M~ZRsZLO&7Yue-DD-T$iuAjlc&nz_E z{QmZ$dtaySck66mZ~J`TVCJFVlV_@O?e@ProBY%Ibmr|c2HCe|PbMi}J^TK_^Zeuw zHk;ei-$$K`i`J^wJ^k$6M7u}1`i%|&x&fhj&DYaEe=9r|x%_xq&;;KF5eHtSInG|K ze0Prbr;nG#|Nc7{Y&qwQ=B}pV@Q1%tIIll2cvrooPx)S+_2GLZ(pvoHcf9vSY9C`a z-`aF*v)I=?vYE$tjJLhcFy7edo0GJ9*0xv^k>bBLW##3}jcobf#I40L1J*3?STHSA zWTx+uCF#NY_to!wKjW>DwO`t0vo&IcjPKs~om4$?`K6Jwq1Vsz>Ec=EJQIJ4iR$kD z^?32r17QcQEuGny*#F{V;lzMy)(d7Ld}_|uCgyOx-TLvwX|<CVg}d{a#kV|K>)q%O zu-Dn}`gFE?2iKgv+k5nAQ&QQU4@uikn5+@?%FXY;^!dH-dF5;OW#>k@R?S=d+xW!k zPF40xt0LTH_Wb0oEc0Sh^ERwxc=GA=;ozCeFJJu8tGGvO+PO6!vuCzQZI5D`5~JLz z`mv<;by^8;(87#8FFyM)KigN)@yFL&!Zb(xUiu}AEcQK%B`;nT{djLFD2pAc+pDT& zrNVK(q}*@!d`8|K5_4ZhuQxsXtNh6A<4eE%@skp5zr@|~sl0iTxx&)ZT8o?ZZfNLv z^Xam{ZSL-q3uhR+8co`*FKhifaF6cfFUD>RJazlF?AdIoEZ=z~eldg4y}7$Te^n9R z_oGTant%Dk-gy`J3VUjHn&#T%A349!K|vrSIgy|5<Dulq+%snxdt@2x5}lZK_R#I) zJMZjN&f2-*O9ETqzjYZ`h0JdDEh{l>Uo|CAso+LH81L>IhK@FWPS)DgOq6GL56fz* zDtWM2PB!n5ai4>NKuoU2Gppm>wtMGfzL4_@a^&hd*LI4vFLg<=+Gd9NQR|+bR?^n! zYTE4Q+jz2V`DC$xBR)+`jSc~v=D8nAm#>J}^V!Cccg4dVyXiNz%|om9994U~Cb-*L zO@M<X{L#ky9T%KJw%9X9@3GLG?|7-<=Fvl4k2&v5zsshdFWx@mcB)C=_dlB3Ze3Wp z)F@RLygE4~@<wji>96)1#j4uPpSlFGS#JF_am$3%6X~}OO||*$pwF;v{)wdv_Zyq- zW?h|A{%7my6#;o3lB`UP4i#^vd(IAf_-AfJcTTn4ii59m5@T;M?vl^&$SF~HXm{?% zj*N{bjjFaLJ3O4|qdalnxkJgICC*+uRtnGAvFp`K>5EM7jpaO~9C(+{Et<LKi@eX# zu$mZ|$#b$pg!W4PU?}+EBY3fH-PKbaU51n6<>#HW_U`tI%h^>I!I$^!;lI~6!d0}^ zJ1Fen>Hq82XOVe-n_RS?T%zyAxHD4PljQtn82$Xz|J25Oi}<EB8&bWMz8?DffxqPW zyBoJWrpLO?ye$3w!|C(vH#aP2SR8vuS*gWZKKt+nzq|}ao%9)1?`_QPm^QqZ`|8Gh z;+W4f--uIJod4N;bya`2YWd!RHmRFOp8bzLcmH4Rk7cukgA&EOm%U3kIV*&3X;grT zp2?o&qRI0+6#~k?wJXeC8o%!O^j67~n_I8Ey*sN=-(B!o$;-dDK6qGViW`=vdoQ~E za+O)K-^s0KJ?*DIiP^5lzvte>>LhP5p};pw^6wn>x0g%$Jddf1VefwZx4+C2k4z9? zTC%xvMaI{c&3kUYyK_ou+Tq(3Nk8<0K0H0@TKn>$vSPaY)1&)d7yPe~$e(IC?U9My zyX`ZcT>NglbN^|}^M~@D%uj!2wB9#fZR?2#&-H~Pc5Y@6&iXUU{qu_-VI@34v0MMH z+7z!KuyDp|m-XSsd%W5EbUoBBYV&&Xy0QtszRaIAV_j<UuSB19YBt|@e5~ls+maRe z{ga<U^o`$t?R#d2IlTFMwz9G$_m9a@nTQQjHP`DXe7?-slbhafNQN&ZizE9*lNhV_ zDZ^zp+uKa%_5OIU{h7(fNh>nW&D`TV`$x%E^~H7kN4?i3_}Lx%RU&R>cdb?Zm6V3p zjl=5m*FAcB>t2oN9pPTx`TOJJ4w$DaRit@YFM2AnuQF3s*tzECv&8k@@2~H=WFjV} zYumgsmLc?_(oTbR=H;O#lGmqS?7e!U$SBgFQ1`xX!Sa`D#9CILee?63eB4jX`7a#L zR%UL|XVfdZR3@AJZhds*ExV3~c9t?0$`9YMtYqifu=R6Mh+MSd|GItsKINP|`&xEc zy-D)*RCg^~?40qlyy$IYx<yoi!nS#Qp)*T9KeRpL!<F(Rc;%koKioF$+WvU${iYSU z=TiPvub%m1mbU#r0q=&Qso!>Asawd|H0$-o`!}3eSSpQl%;x2n>p$M&&bLC*JNCe$ zE3zW1&%WTg`lL$wXWnP7Keg;aGLJ&9DsbNXzb^5RiE^x++<{`*IbOC$HvF15;Rkzs z&GaM9x{E*BOg*T1b1vV(tfFmskKa!JKH<9Vy!G*23J&3&zGrTp`Ku!M{NUe?^|}i+ z7Ifzww3eS@skVo;`I-8s!{?lQ_^T44wl%J-&i?r2Oxc}>>zVFUZup%S7d6%KTJyXW z`n&FP$8VLIU*#tuK3DO!m_vf7TSJszYJu0cgaTuErzTa7&nY)HF#q{n$d;+b+J82? z^7C>ht3Boo(|7MIFgv}$!#?VMq|Zjj*3^17&5Fy5r%$c_CYBVmr@&FM{&ZQLFW;j4 zy}@U~e?D4XYUBG<?wrc`y=D{RRuyeCp6j6;`u5-ihqF6Nc6RjMmvy|m-u!Fd`t<o` zJ)OymGaoTMaQnYo=tp%J<IgbGx2INbj1PUI?c!MQy7+K<`I?;9H}=UfJ4HQ=ebKjs z(UZBgi?e!S@`}Z;wzNH-c3CH8|Ke9a#nO$ki;QmVepI<<@4_R_IybNQ9obUYJXvx{ zbjqi`lu7Sj^<_QPa<i`%m>yXB<I~jwrjn`8^Y2VNa9?uk&i8WuB~xXT#pft0@-{{9 zNZjyr<DcsybKYgRrT^dT&miO%7iAzCoU`vpohxI?l`77qH(WOE)ha89iJsT3KGAN< zGSQS72d|2TN2_h#@8kCJQseSn7K`oP|JD*`)_W!NyW-cyMZM~)rudw@A!3kj`2DkR zOV67Ahdr|QkI7khb0w(erZWb0*f;*#^z){t|A~XIUb}C2y|X0ylH;=XtIuw5jH_t9 zx@?+eH!o*vgy_sgM;4!%5$o|~0^60)_@#eWrNnRSe0y#F-Ho?6c6;%bf6sABUmvlj zD^~W=I=z`47kQ>7Sr-|;u`O;=TD;S%au%Ol!c$4{U3{O8x~_64(dAm<pc?6UcV>T3 z!JPbk=a#))@^6pr6?XBfM?Y;ZC`jabwu5cUn$V4BMS}Ud??s-z)?hL3?Q^!7nrm#= zEqB$=pL42X?#C^XM{hRRJ%99Dc9CYXO|E0%rN>Lwb>+%lcUvI;&x-Yp*d_C~k5<oQ zz4Gd6!-Oe|*PJU@bonpij@5e8+!<F1*gL)c^>FfB&t0BswHMX?T|4rr!d;sE@|BjO zR*M}Os|DNpqE=o#A$)yPrIwnXipV0~)xGn-#oX%4WH<bt=M*h}!Tp%gs_BRBC#PTB zez%`TVw-U0m%B9u``K5m-V%THjkejws~0k>^RM0hWwp0Wu+~c9ukJ>hWb>P|oQ}_4 zX>>zXvN^K-<Vm;0MoIPbyQ<bcoB2}%7kpIE^Qe7j`u%%BD+2@j1Wy;okdtYBZ*^K8 zxcyk!_2d7ycQ!j#ZRUIY<NG`FohQ$_Wn9ilNi>vB)Lgh_3rm3Y+#VLktgQjZH-@DM zM0IQMboD7)<g)8{iM(tGVS5u|wlefYg4c50rBhWoC$yyHDl8Ef5^{1Xn*Laxla+UZ zMgZsMnt!J&ji2v(UVhG|@_gm}*_+=l5&!<zxx*&rxck+)74lsBK2BP=j$20evyip2 z)b^F-XPMUa=0xt9p8L-vY>nj64+$?UE_yKMeR{mUis#|$2Pv-N3o`{Rr26h}u)V_5 zw!iz;qi&0K7ooIw$9I0(9$a>bdn<cI)}yES-)>1x`){EA%=Pj8>IrJW5{re_T)!WF z-fmIxVUEtC2??toxK!%?z83%B;M2?_b8MYr6{ftL{`>Adr<0k+oXXA{CBtK@rr*+7 zXS(BicA`bqw%_*uI>PM>jI)D9zI`jsiTq(+#=3mt5`~Et+1mN*Yum4zg--lmU}m^H zZ(ZHrRqMkpcB%R2+fF}yY|b9eh<gUX6{}j@vbo#D-=t}`@yqqeHd>##*>4y3?|E#R z&a!*^Ut5Qs+?FIf)BAD9E1TmRFRKOZn|pY3rNMjk>L0nUrqB4_@cGxncds9Wbk98K z**EXFczEi+m0odiKlD_Uk8Q4c8SrTC-M^eMZyrp#>Nw-G*Z)8Bs=BgrQqJ=qzvjN1 znR)S79@o?~yX`uQ(y!cX|0dQqw{6PK{!e#U*wa?`o{$jFtNy;Y!+%em!R^93FIw-s z)s@NKFk!;WLuuP5$=yA6EtLJkvc820Tc&nb+nDTB^6Y(cZ~69%&U^J|cz%!kSNrHn zaoeRdb!DTbUD;_Bns-B-ir*>wNb$^@`+nn2yNU68rui=8R%rU+s=Md!*P?G%Q$8H= zy|&)|tLV;db^rhS#VZOn^xmv|+^NCy?CYmyi#uV*?#@1y{CKm6SKq62dEb_$ZjV0A zdzO$Yo@~5cXQ#2%tQ+4h^RM(f_2}sxg+21-LC?8Uvzq2QdJ0E`ZJT}6yW8X5kIGN$ zzUu`aK5(Gva8+qMkDkc%51(C^mef^p?f(_VlPLE1l!n2HM&%2R(aReJc_iZca`l!a zeK2^I8ny7tvA1o42R>gb?7JZxVRr1|<#szYKWV9zpW6%!(*-<FPK$ePp<>t+@ITXT z#hXX}R%czQ4SswyeY2ypa_K*TPmgpY#MnJG!)Dzt`S9eEqRY%$8T(6I8&@8=vAf^& z!qcVN0t-%yA286<Kk+4S=ju7THds7c8fC!4{C}pF+1ql%$5RioJY2kO5pTVVQedC9 z>1(U|$6OCPZFu|a_4V>v(Km|(f9F2s*<|#0V-DL+r;h$^mC6?iKFj{E%XgG~c}6Dg zsQk2d>Yr}<6bbok2{GM}{#dX}kMAKn>&zt<yyvc0SiI&*|6!|U5P7m9&FH@7{j;~8 z|Mz_K%P^%aE_v&Yvz|3O=3h#aXAART$<VPmFzM-3i*%oqe<|#~roJYOVdWYdFNV!I z>3m|t`}EhVx2inZ{bR`o0sXfdCT!oeTmH+{dk-I;mp(VipqlCC!oRDXt9#k|ZRebs zk-eWwMMHV6r1Gj8KNfE<&_D5@QH1?iEBBn5{ayRzxzZ2Ln&@(+!a`c);06r_?#%9G zpO>?y#VkzwustyLo@YcD%fe^x{@#9+B>B?rTzr^p>WlKp9wj9~u_1@vo5d&H*)(wp zt8_#E<Y@1V6DJc-)!w~q`@N_4$iBr>!sGfMoNSNzk@fn<rcF)XHa<S-Yw(a~_sL&h zuj&;|H;`;gG%+=;-Ie(K+}xgXYj<Sx8C-ajczqWC&3)&amkZ|zK1``s?6th_qo{g> z<%dRfqV;`!zx2PyOp>bDwl+Si3bWnX|J}{z#4S<H>k(|vpPu;icF&Vjsecz`$jp5n z@%@MNn-5>!IsY;K`6sPUTAOj!J<B7f;^!^+GN)17a^g(xV}`{!0q2DdOK)Xgar;a7 zyxY>pPu)+S{OZm5i}Am2R9#*1RVQCeCMo)%q|`0O?&cd`B-GByoDE-Yv9c=B`uz0X zl*79cUH(6}yCoelG5*9)`EyB6Q{2ysFXOp&T1%s1<BUbZvOf%kCrTX`-*4D<T)p*? zf#ZW1QTutZUcc6Vu29<feBFuq&PiwA2X9z9ZC2QUr)ec|V*d7XeUbv=zwQ)$tHgYM zVLeastu2}J|J}K9qvCCXyy?oAtFO*y{P?i@OzgvioASpeWbNNO|LI!0V~<+D`o!2y zed)<;+x919{q3`pP6djr@ld$4CfoB#ed&&jiuDQmljV={upEqxJTo`a-@TgQ&9d7+ zJnN*i6JMQ|dw6ll?gwvI{qvi3IB3T2y%C4b?z-lZx79jp=i`RtvWcIkKAi7(R_BPH zr}DPv`R^L+ZJ#N)o%OoDRqazG+itfvN=jU1f`U6IH^**2uB0TjvAg5MT$wkEgX2O{ zU0m227XLQ?a%-9B5hbN^N!HyR9Zj(=E+TJ~loln33kre+G;X+J3b-89LsbD109ypp z0v8C}(A@zt14RIA%|Shg+dwM70w8-qj+Kn~$Ljeh#_#nP&s+uu1_n=8KbLh*2~7YS CW`A1% literal 19870 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 DV^0Ys diff --git a/sflphone-client-gnome/doc/C/figures/history.png b/sflphone-client-gnome/doc/C/figures/history.png index e56aa52a5cd28a2006eb880593aec0458ad11d12..32b98810da8eb9cb75ca527c88356d29e4117d2c 100644 GIT binary patch literal 18596 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 z,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 literal 17019 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�PwH9M1z*SE}+6!jY0bghej-}V3eV{Ye* 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 XDbKdKJkU1-9Vg-G>gTe~DWM4fcVdiA diff --git a/sflphone-client-gnome/doc/C/figures/holdoff.png b/sflphone-client-gnome/doc/C/figures/holdoff.png index 73e02b9a992cb6eeb8c3c28dd345bc972b359726..7ecd9b4799bba0adff103aec8784b886ecd2d76c 100644 GIT binary patch literal 21009 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 literal 20461 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 diff --git a/sflphone-client-gnome/doc/C/figures/holdon.png b/sflphone-client-gnome/doc/C/figures/holdon.png index da849b9f525dbc7916cc254a39b8fdf019e7d425..78f39f8312f45adaccd0a0aebd5ea61cfa54a45a 100644 GIT binary patch literal 21042 zcmeAS@N?(olHy`uVBq!ia0y~yV60?dVA#UJ#=yW($Q1LKfq{XsILO_JVcj{ImkbOH zY)RhkE)4%caKYZ?lNlHoI14-?iy0WWg+Z8+Vb&Z81_lQ95>H=O_M1E$B3$CLH@SE) zFfd4#xJHyX=jZ08=9Mrw7o{eaq^2m8XO?6rxO@5rgg5euGcYJHc)B=-RNQ(qx4c5s zRlNQFUei_)Ar8$J7AFtYFKT<Wye7xFuuNPgvN4hI==mm57Lkx6Tuln00aer0WSuw# zvYfm<oKEHL{{6Rb@&qrZb_4zMc2Dx=+FF0UZJeH#zGTW2k*jH&6Sqd4{B=KT>!;uE z_bUr<ur#%|FP~p0HP^4*Z@KgO>x-|yo+u<Nd{rlLdxVZo)RqpDOwF^=;bLOKAf+9p ztNR|W*|xm&^|cpYt9aO$FD><+9<uss*Ug-?i;G;Z<Q7XX%+3*pDCU?O#(to0YT}lh zn?j2(c8JK!ub*``O-v`k;jUS`VYJVoAf`r#4+6<17Af3&^|blstLd_8UDily+c3dF zLBQt7o1V%}lT1x9@8sPl{{Q>^zDIVq*yfu(t5zLy0&5K3{Yk{eM17`xy`5F$w9V!m zjp7_EO_N&HmY?8eVMuxN?5u`-O-)UP(N~tR#EI3($%*9$?}}B1h8`{I7ytQ6FRkyL z$K6xk4!wOW>=AMI+LxNA>U}efzHgqBkac;@+sbL5Y$K;mN}qqcUiDnr?9AQsH05k| zNBV!PU45oH*S7icwK=zS=lob!xvciqr^}JAd(VeXxXZP<yg>HWUX!W4)7Q8zyI57J zzQ5<K_v=}XH_w}{s??90zp+<)oAiwz>u%c4d^-2-_lMVORW%pAnfgOD`iZEk;QC#^ zTXp;F*~%Zjy<c8nrklNV=910qHx0ha`$e~Oa=AP|E`0vlhX1t%X7%&WKKvZzw>jsW zVD+<gm#3TA?XoVvd!_izug}g^C38Kt?EG-o$I$*`&SSnkhRLSvk1ubY|N5!&>z`jQ z$6G{2u$vv1`jhXjvvK3bHBwQWdn+zASwB4aJminkUcbn+`}=Co%(0w2(>Q%o{(ZZY zNU{90(J@n|#GbjG#AXsAzkAZ+^z+64?s)R${F%J|{(GkeyW`Q8uMJ)6PCT12d5+D@ zok#xod=9Gows1oBviFb9X6^g&>(`|hcW2i8$x+t&{p*qRohgd<-#?u-=RS8p5WjKu zmB%f=e?5v`smQ$S{li(4X8zkEA=dZa`7%d+O>ON*-c`Q4r!V{XJ~eyaYty=VvB_+v z>Pr@UPMMSPvi)y{plE`<|J1e;dF%O$S9&RKyZq?xtH@WGjC{t`H#2o+-afN@+6Q-@ zhIwq~w=P+;vcp6yY5SYf!1*8U&-^^ce(Uu6^EA`r#XqZe`_JI=oBh+mxNYCjUnvcn zY<~W8Dw}I_{AaQH&HdlR@5u+WUz&BtENt_-+52X1EY%L$nB*GeYdx{n-}TmV4eQy9 ze(tE#IG=yEX4&jtH@E-ZmKwIlcgj)gEj}}iTKVn&7+g0>JvHUF-TON`i#vOJ&;FB@ zmOg!FXL0x2ldnH@{pqzRc);-c+uOyyv&|URL~dpa4ejje5?X&cy6WgF!&eO5PLEDH z%UC{k4`DU;3SZ@Z+$(Ys^OGwJ->j;6c7GC^=I3&~n<sYqpL=Zd-{$9E>oZ+hZgW?K z-z-pQQ+@yKz_Z;GU*?`(baLbUPR-^D@2L|Qd^Z01{LkAbf77gRt@yNa+_{ydwN?rb z1Mf*+-f2;$|3g0ZdrZ<t`}YCflONk$j!#|`&oXuIgAYsRJokKXUeVv6C{)YiUP$%> z_fzv?bN(f=_|M(2>D_X<AEFO>vQL>kzR6a#Eq|Mkak=Jlw!S5s4xZ^`{cORQkaJ`+ zuhEaiD@>%gwnhId<?`B>K4Jf!8UAO|!?yf=zo~YA>Z1lL3uY}gn^jv94rI@Ke&&Sa ztc48)zR#?pV=jIR?A}oPSMo;-Tktm@p6QHBHnD^ixxS8=c`54R!$*D-=gc`1oxgW# z_FZ@R+LGJf)&?)<;}+Lj61?1x0aT3n&9xH!y=T^J&jagXcW2z(wDj)m4_}w2o}TvR z)>dzuyU|CN+UbAeV|Z|8&GeTy44S&8W?gtS)BI;$unntQHs3zq#afOmtf_i)(}e4} zbDsyD?T_5{#5_$m_E`H>#&sKOUfKUVAG*za|GVC&M~;<uGAK;jx_kX3!N1J$Yy8=J zOn%j9@80${<$BZekE|VYPo`%J6?G?l$o{jpkX1X(XX!q(<CT2>4=i6D)X2pXy=!9X zXR*y`M<ukFU%uY|<hXL{5m%Gcj63TM-5P}JH)verdG=T*qCkpa`Lpvu)^*R$F5Rf` zt$(4PL*=RPH77UkkKMAKyK2_AsXeUk@+`Oae`b(a`LV*{-1eESXUwzbH@&I3(3_s7 z_iXX6nai?&Xx8W7IM7zV?@_0bR3M*x0TVOx%PT8|yTx=*iTyZm;J|L-b($IS7Za+j zduQuik>B66)%f1B_}f-2Q>PuMnyLJ{KDB1OdS!C0ke8xda^7;I|8}hLpMQO8P%G6~ z9U8bb?n>T^{P@Z$@$|Dhzkja%B`H;rb+OuA@LgW~^g7e2Ez17|`5i1`qkk+4UKo<X z9yNt=Ls8Ce$upMc9{;b%X5!VFv{_#?rg+Zt4}Cs?HiymMt_s*!Q>kS-_dp@TxzG1M zX5TbBQLX>(>-?oVg%4yt`(HWdiSp;j3cdraVYROgTzs@7Q1{Zb>&egRuDtl7w)uIl z(wP94=F*8zm9B?!N2*T_(fKWs`rIVv=qdT6op;;L?Oxj7I`wB#Yj%-bM2K=uuas%T z-YQews4WZ$Z*OhAvLcZAVnwyJh0v8Mf%n_xSWYZ)IiGana`MfTU1#h+^L?y){L4bq z(up<HKJE9TdllKmww6=o{9d88YS99Z%Hp<3x=v=Bbw5k6&b~TLSEp;y0*~w8i?!Zz zbTuvVda)&Pd3eBPeYKn0wS(4uUaX~Ic}VV9(62L}8^VGwRGzxD$iJGY*z$y%7Tb$J z5!RIomv>%U=I<^3FS4q)n7ckT@sZZ<71QhH*lnE?I89u+m-Xgak81I_uoAn_kEzV* z2AjXnZ;r_h+MbZVZ$XL3mUR~2P8P-_mYu7eUs-3Lq%rfng?iLlG0#bPulKB4^~^fo z@pay`%gg=Kt3NPsi|H%~Uhc=j!XmPM{-LumI!cG)663dKi87dGUpo`0zJt~1+lQag z-I{+Z+;5qz>Du4Twl{Eoti@I~-tAM~ib$(<OKyI)>%>bQwxU;8c8b;)mbhqyTAqp5 ze)~^PG%M&HgKPPPX$8D%Tg|I?98i3=zI%CXxx5eiv`z22_FgpJvCf|DoLHsY_6xUu zY-q0#vANZgkhA$x2E&?8nV8S|w-laB-#E}3b>7DD<<iePr2b1MKTkRJaPr=j&(=6< zg-NZyd(k~>&6Sz=76#8OV9`4-b?n8d_|I|gcm0siRgt-U=#grAWln{?Q+N2qeZIe+ zY}@L$oHa$H*h=i`zjxIlKVL4N@8RKbVym8s$&_zzZ{NRG85<ir(;(4lT`3<Q-}brp z=319O6Z+~m*J@+&^K;R{KNlThnxrBqDe0M#qGDb=XMw;Ikv_fO6Q^?5J^5QBZJT-3 zkR^HFtEh*)t8U6jd0)P;(bA0V<F8r!C7(@Co<BJ_GrpEDb;lu5V+Tz+`Acm@l~r{C z0aF7*4O_mYmt2nAvrn=4?0VBB@17K;%;{B^UGS)Q&!s!ep0>eHD!(lJTe<Y7PF(Et z1AppzZ$@udtDD8r_uleEWiju*8#ku~EI;)4m|vi6<)$|_X|d;4nNC?8`<+83M6_$_ zu_;VB(LB}SZTp1&F7HXtzFvNFLe0$jW9851f3&>sEj!crO=O7gMYAyDw=qj<W4em< zZ0}9Hx8bMFAM>VbXVrrBR)|mDFX@o_cyZ{PU*F%yuTZbE=8?7fvTn|H@9BCw&jl}Z zV$}*+5%8xieBqYwg2@u+_Zv?rD{cN*bS8|`rfK%4KTCH0S-<dgZ1J|HHs8cI!t-XF zZ3q_d-}hO1zHOjbZlV8z&x>z=Sz2SdL2|0Mx5}Je^}8>8d;Ri_((g%MDbY(iRl2Wa z<~Q+p{#@UPNaN$>ISGfiNt}85`a)iY{i@w!6J2GMUtT=;``7zVb6<*O?b)2U=jL&# zJN@$4&OAT-JWAl*(+PiLY_-joo!72iS!BGZYWKI3g10y&KggZG`oYCX^<fClMfUTP z^t=)~-EZwKU%xBmq|mWGS?{2rNgF&ok8Nq+*lYdywkStcEpL4{e;!Mdkatau&FAOm z#pmsDP!O1slBcDnUvc8(=Zeo|KZQA1RAZj7s>-y#+Oz+03S;jcrbdT~PfU#t3KcH| z3@aNQ6a<v?!7cNNPRXB?N<gi2esNabvkEpKNsWUX6G07Kp&pLw94t(ZoQ^HoEKH3L z1f4rTmf3VE)t^rb**Nd{c0NIyk8eGHA30iCf4^U~RM>g-^@mg6X7amL$%*Xls21st zko$3S<+~>J^+{G+CwVIGx}dU(D|A)JLa()9UnD=<&VHoxy*@|8wDaj+qsvp%Gk?eC zT>PAzA+z$zBIUJCF>j7-n)`Hl*+d)D&psEAi%qt#b``Kpu;l!yHo<UXevR|0E%SVO zbp5U5RIaE@`_83U^g=DDIM*Zn_Gwejm*3Q<AAOR@bg=f}Ht9HD_x+D|u8S|wS);z# zuD*HJKfee)nY7D?=KoB{G8L<fU_UO+)lxfQ&7RLGVkYU&)^bkh>S|ec?e?E9VZAb$ z7au%%+`Vl<_6n^9xB92vS!w@>`BnN{?b~{<WThXherf#m!PlEPd+xOP#aX(Q_}@N0 z=V>^H+>Jhl#nw}cmpyJ2`g!Kdlj^jYpZ~8sI;Y~XpM7<sL&0png<pB<_t;L{>$rI4 z=hqeUa%0<1T;RwudwuG}dNG6VPdR!bEdIUD{*n>eJz;`?(;@lAr(bXG^xM7NHR7?D zN5r!=Vc%5ec+F!|aqzr#^2@=sE2M;+Joc{ZiLMeWzSg+SBCT}Qte0PxZ%WLFwzEo8 zOmoUsa(3caY5i>5<!2W^NX~juZkYYnHOKN={O!NitAmtY-n}MYyRIZ9$?oi@{`reT zzX~`xIjy*zr*i-Q^p+m4Pp=xU<b1OKHk(mIPydx`hKH|P?#VA(Cto*Ok>-5to#EZv zGT|AsxKG8a&%9?gX`67`hrIXCuB;aHyxL}4QUCL&by&9$N6U%(47Zo|>R2pzx>4~i z=Q;D+y>i=){4xSIWHi0}_U`<ei0ys*>*ai3{OgzabaNhia+uUlq0@2FN0!`Rt1+lI z%})E~Zv9%=Y^ms$V$E58zh`e>CBY%LxvSZ|zo_JR%Wc1=Ct>Y&y55BkzE3?8xxU?@ z>`a`$TkpLsU-T9nTB@@7=ihyMwysq=oc8DJt*hNLK2#`Oj+Zz)iJR-(!?T<_cFmnD zzQ)1I{kp8XQIy4opC)1lM0Pi3nD#82`tISKd~=`8F*DQ;o{XRV$SjNT|GS%qSAB1a z`2368$2v=JX}H3U+YhB)w<^aR>2_oEGv`p0;C%g;DKXN%cGrhv(b<uf-}3wVS2~8~ z&iinDE?;{}TbxcddyuxubGC4+KfC7j*Mu7ucPq!%*ERD^Jm*juSDnwUU9ErK&-vaL zQJGmgWaq5B_nFh?_nE|-Gw<=NT;lF|<Io#jqp#{F3wzvLw?6f2e|srw*}ta_|0|O# ztZpzgynpbKC+c43ee?K*&c9!oX#CcE&98R({%@w)i(_AYa0)eBclWGow!t-7YY)Df zHiPBXAADUFnw?WQRmXe#snVr8hU?e9U0#;;lk5ETLifc^JD({_2wv>cPj@%|vo~uI z3pdMltxx3_Le&y)^W2;NfjhfjC1!n^^%k|GY)9vZeA!m>^p9bsXTSRb=4*$4cU}%j zD%eo`?OxwhX~CR`I)C|=<dpJTmFH9cJ(|o@vC}Br{9MxRb)3O+pEWk@O11nhzj4{+ zH<|KB%`3OD9#Ks;X1QQ+>cITheZ{)3ByL}JlKkiroRq#+!Rjfej`X?UWsaq%Uc6h> zYgqW;G-J>Hurnr)V-8e){o(dA-hTPDxeE-;CoS@4bb7+tv|H=buA+rgk_FrSmoIFS z;+j(u<r#A}`tZJIS^HP&%#57QwN%#N|97ji?Mv=oZZqwTW>_dFIOWu4J7-oE*<W)y zr+;~|r23Ca&%u&+F^%*8#T?k^_}9XqTHa50-|}tIiJXA}Td&U8@UPrz>Q#{)d%Zp< z7%j_Dt9qaKNZZD<;^!)plKH28HM1KWmsn}0!*DouYoXQ3ys8~xXH0HC;##GqaQjNk ze$mL1tAZR|v3mI;>ol`2PRn&!&LRE3&bt5cvpu(URpR{)%WR*me2wGR*Ibu`Ol7Gx zDl&F%n|#mSeeHC%^6Z}d`Q@5_=9S!=_+!QM8{+Bb;?nnRm~Wi6b;1{q43h;~pJd-X zUZuXF)?6z-?${eq?wP`G&pqC|>fsu(IedHbeVHszZIb0Y!8*_Xkm)AFed6K9|IaV3 zFj>>J`(ppEKrQQM{|@>Er_N%vzEdmxoMXSp+-HBz%jL|uE$2IF&d$3+=ik|S?r0Aa z_`B$+(zM<8{NvvHZ~x!BB<sxdFIDgA&qQsWeb}9UbNb`?K6N{_ZPi?pwWXaZHK$#@ zt)J+s`uK^G-OMtUcN>?lQJMSb#6oA8Q*nzrcTQ+Lw%hdlRqvE<;@p;*L4jvC>dgG1 zy_|dPz8w$3{k;ENn>%O6lml0vSYNMMqyL}9_OMXohj$`<({kOve>h}4KWp!;4?*hU zW_yh%d7l1WsP)cfBfFW=_tX79{<iE540<0t{g&RwKU=T5ZDp%_QK+yYQ&n$W<Z;#e zY9Xb&x7)t!p8Tw7!@ECo`0MT;efeW@&c8aH;AEy3w~S+UWH24P+kevAqK)^_@uQ+M z{yqI(V_ju7UDshH*Ok1>&E;`ji>8E&$nV+SJpF#I@7zMY9lx(GzP{kvpYLDyt|?l5 zqpaTJ{<@vlr@gb9ZTf%p!QlCIXLp+4TNu6fyups&f$M)WyvqH%aYFIVfczf@S$#hm zme1~E-tH%J@7qV&Dk-}y?_%fn-@Dga|NI>5mxxoM(hD!{xIZ)M8S}oH_3HQInPv8L zWL#+#TsQMk?i!cN1<aqfwO(E`iCN*H(8VbZ+a?C=*0cLn9h<M?HjBICB)h#m%m2{D zm9Lt;Pb^*h;^)upJiMkIm$U^$+?RfTcXzd3<ffL5$;T(nm@#AT!5lO0*BtNkuSM*8 zd!@6!N<TeL-rn%_9)|!Hx5uUDKRi0xeP+J>{wLFCfA}CB{(AA^#qvK)>@;5Pnft~5 z#digPDIs2aPT2Dt`m~{YzCeEC14WTa!_1Bc|DK<7VEemuy5lz<&10JcIr10{!A%<u z|2PE!4wgfc#W`4*4jz7Z^7yf1T(3cFXBS7?yIi6_ca^^8>gHr&I_T_@m6i3;b>D)y ztf1k$0!2F|kvoDRp{~<XMO-UWq~5A}IxW7q;A+-H70(o=MuAGllcE)qPafHre7vK# zw^k*qagxfzCr?`T@3&7(Oti4H<XkAuF;RSqkB%7kZ1a4#Nh($)FB+CFPwy1BaShy2 z^V2ALdtU10Wxgi4w?x?4*%iMuvGZMQ4JwGfkz?jJ$D%QA{qpGTc~dllpG_37>UDG8 zS@iV9jg87ny{108u`&5Zj@d*-7N;kys^=Hmmc5bioo!aDvNytWQpSY^j2ky@OnMRq zcB6A>=%q`SK79C4k&^r1<x9_~D5*_4-8_mF4=Pq9f4c6YDN*9qW0ibTBp{M)=K}$U z#J}MxYxz7^@7?|~<SP5E?)_6H9qJ2Czfq+$ZK`{Jk<mXT&iLB0=QgUn&)P1pzpGz1 z?^2+8K+A-d6ZS0`TNOOD!Y}JT2t37{K9|vTVu06;Kj&8EIQ#jZ?&21C-)LoZllM!9 zk~UYneoVselfgMQb(7X^+^Di_$)eI?^@9&u-n?jH7nkRZUSpr;5UTnrYzx;?VWs~C z3Z6n%bGuX`FJz=_i4vCbwX&LP+_lJgTIq?RlbzhF&7`|D7i%nj@@wUbFB!bY+|`(u zr_8uf`AWpvZ*Jn*jgMul%H>L=eDs!j78S7F?+Umn7{VDMs?$I1f$q)p12<O)J=C_T zQvAfv*naN4;t_L!bau|(DUB+T7d^yGE}34im^3Nz*_o-{A)4V%YL(M+H6&k}i+ruo zXJbDuG(U6wOrM@#$%5AB=PBwbGVWb%9X>bKz<O#^M^wUv+pMt@6-`C;jy<k0WlWBe z@=UxczmjR)iVv^Dl+T-oaefoZWpjG+-Y|1o$i3L_Mw-i10v1*--S(wRs^Mr_+MQj~ zJ$?4`XkGc9f9QafGRJrRhy8br3$8RKYnsRKq^^kArj-^g)qXCQ{c2~y{#z@$_V(C+ zk;>nyl)gk<``+Br-B#k;h302YzU-@WYiswB6}JK`g_ii3ZjMq^<$UR6ly@@xV#<=m z?ne)&9Xy$)dhJDy_&;}^Zk>-`t=!`>=l1PyZ*u7PW1IZ*V(XgS+Za5VuCh)4cKot- z7Q<}+waKNAY%XZ7Ftd=BJ<VO(UaYFySM*fIVt(1g+D>-QJ(K)o?~A?I+Sl^K<xz@> z(&>a?@3s@lr%zPc{#4pibu?_#VZoIvSIXEGNq8=2eI8VxDd&7CbWYGZrAS?il>yi0 zG%i2dv-@n<;w<s6C7!1>)x`tk&TVM*WnArhNU7O(;)WXsk~aU(pL%eW$BeZzZ>MZH zC3H<@`>e#q&ed}(p06yinbUfKd*c3dxi-$5ER&d4iRMIAKQq4V6LDG8Bx?7M+aWjq zDLEWlaWQ%8O%ETxXJ3|DoC%X$d`{5aSySbVN6^OG8uAq(t3_39_ug1IYfZA3QSfrV z)aw%$Yb-t8q{-a>*nLHk*YYi<%;l>^b#Lsqx$3DQC7ZUn$8R~a<>$5kCu}=+nrlXG z!X~ej2-Qov6B0N6&)wv;B=z69ow4VNS97iudjJ3Fkso}SJ1o0A8(U7?XYPq|zhd&{ zp{VwYm^UX2uUIcM%nl5ZyvioESS*xv?ULgu+a^s*IpkWpuqm3sZ7<(u(_Zh+<ttu< z%57az@v%WkeDOom{vWGV|E%_&>({<$#kU_*7B#R0-q^50D|OFaPF`MB6O$<m7AWl5 zyZ7h!`}H#|i=Ta6w_=;SwVv$sB@gTCEk7qNH|eQT{NnWFz0uplyEZ+)!x!Xpa)Hz4 z1!fE;JUM>Hz0OaXkk)_l`q%uHRbD5|WDCVFuXrij>N(NCW9fy=R30ndHl9}B_Wz5! z{7vu3oO1M>@hx)N#LJ)Cv#&^7d|CBY@RjW%jTc*@;;P@8GBGp1m8+h3oFmb?%JDS& z>A4cu^?3J+H46OP{o>?nnI9Y8KB;;AHOlt=)}J>1m0=rihWs*@X;VpEFww}O?xD=f zXBIMF^nOfR*D*bt<GGOD<18IX*2t|<Z~s2&mad<qBJz5%>L;nS(@ss*zJH}VnBl+N z^^XsY)bHia?~@4j?f4U$nt#V{T}lkwf?4Idr>v$kKe%wT_Q>*i><W8wME0$F`muEV zftM}8OHOxMNNia$<LnM=>41=M5!d!rFFuxi)i>mK-+D8^$f!$n*~w>tQYx>*s!nMv zx@g!v^&*?ioKUwdX9SK3DAkwWD9w{TY*un~)mewBiXOs8|HQqvm??0Wd$o1qrDY3F zJy;!*7J2_|%$~Bw^l94``$(Gqk@;JArr`P3WABqTTP|27m9jG>^ypQahqE4)EUhWA z`FW=9!>hBhpESxA?h&-lD?D)5^XW}CwL~7pPv!HxSBe{~mdp@wV4HmQU7*S`^$BXr z7fgNgdhI6GhSe`Smz+AO64&{Bhc27{P5FW&X_G5%B!76uU3g>C<f8S~_1})otKoZl z%1-T_P3F0aJLNa6mUffhKWTb({?n!FI`r*7CkZW<<CwUA^}h%<jT^hYR$1;l7Vf(s z<=g!5ViUfVY1Ox9=1ev8Rx=4YDd7?P{L!hStn~?dOBTMEoB!bA@;A2}Ppy-^`CIZ- z)x*on>rbB9`>B`pw^x>yce3Axn+ID{)Hy=~U3RGP?|n5(@`_8vN2e$6g#zuiu2{gU zcz9MLSIEZ>h6R(-4Mce#E}0n|sJh}s7%M~lcZNTu2UTXSTjcfN^`rjH3qv|91fre? zO?huWqu6*^qE+!KhFE>K*Aeq-d-m1+u(K9eTfB18%xdnJn#$T-^L78Xd%iZCwCw8S zSMNBb*6zJ{Rqc>z<QC5DA8tK<c}T$N$$PoFyni~fAM*EomGhgYQ<oRK@2ekM`m^uR z(Mj@c$1YC%)ExKZ&X$u)<n6=OBy$PZw>NZ6sekBd;^(Jo{$0zc@^Hz;ix+LaANH4V zcHb1eY=?Hyv*W@+6Yu?B?9|I;cCXIs%Nju?{T<((@=b#3Zg`xl{VTfi_xESF*NH6- zuxfV=Nc@qZl6+FKHz+i;Y>w60YuTAD*1MHbYk8(NAMF-5emh@Ornp3T=a%-n5u0?2 zH*7k?*qfq#m08Q?Qso*i%b6c#FS*KBDt;=TUwksXqB7Jz<s=(dNMU!1)9g%@W$Feg zmE}2;SVcaRa-?Maj`!TY#PGv<y%|?b0uG#haeB+QVy`<}ilv$v|3B0(E_<aiX?vdL zJ;#}51uFx)xs>BH1DW<eyO7xS?;E@4rkN_u%3=EPDz4{LKN%Vt{`q=6UdDXKgf~x8 z_@A!$R9YAwvLW*0wA`9|Z(q7^J5aq_vnP9g+vdO;k+S_WY;OL`z0e`3oR|6AS@n~2 zQh33gUH9$WdPQ}_-=6*R`*B&}nLXlb@7?<_Yt}rj12>mkJ~E3x@#50OQHq+T6GKj$ z#`LUH)l>Gck`;C9dB!8uxjI}-+voAU9h(32_jkFi*B3PN@b^zY@nogW?uu3yfBk|_ z+qk!_TA-yh!)QZFAOHTu!)#~LjM<u%tGZcNyXEsgJ@M^W*j`I!{@z1h(yM|G@BibR z&b^kc$Le>AWtFVOi-Sol-M+dd4V&g}+}XXoyZKaf?&YI9O!*zwZZS}tZ&PU$U;Fi{ ztnd$ZrI^KODc=@tWU}1iY1)`{@=fey=kp?$zy7^CX<oRglva;S?~;o}l^2_&-@W>I zWHQU1Usf4jZuyJ9d?{hu|CR5ws%&SS=vz}!*NyxoOK!BvMJ`*jyEfzLfddZPa&Nm; zWEq{5vQ?YR89M2LhnAH|$%??Kg>UCC`QvOQzSfV~s=2FnTf?K&KYP<lCs=OZv6#_q zyWjEKzF+iq-S3gH6lz$%?-$qRn`chz@8>yiq*HjNU9FX}ThEDm&lieU+D~WL^3qMG zOL9%ZhYjh8`r`RKYUw^jQa2o)C-K|vu-b9{^Xqr8wE&45tS099v1`AW(<8A}wMI<E z^HBW}4HGuzkM`%z{GY^f>gx;7*6HyJRkkkr`{}g)n@y`!rhPqAvs?SRv;Hb3Gs*m7 zt>F2!Yz@<Nqm@n@MQ_VFXs*e5^d#r}uBjO@`|bK&-4;~0EO)u$rPVxZ#tMaFlj<L| z)O~t#^2|(Q_J$=(mRRe3_#XRYHtW`hufG*{cyHs6zo4*zli}ghMKi9|>7`HdV+=UG z-;Tj<U7b&DmYBLw62ppD(ag>7F3xy$F8_pq%G`OI<9*L;y;puA;ZJ-2p7$?zU!ENC z{_bw^?rWOCcb>j3EOliJ){2vSx#z|jPTj++QsQ^}&NkbUdHLDACGQum<ng+&dfv={ z{EMYu9L0XExo~!_7%1w4?H719zRnKMaCpnb`)Td^XW_H6>bA<C^m%Cgfz`x~-EW^Y zU&z!3^J5RpQ%*2X-e;}3Wa7k$F?Y7lf0Cm6Y)kfxFKj%Uco$!7THmcL%>HGmYsLv> z?R!U;I-7EvYIo!<=HGSU`QP0xoqHZU`|$3z_{j_xKi{L}2O5N`=Qp$StJPdqd-dk# z;m+(#jlMpY5WZ!(d#zf2{_5xn;E`gBTp1nM6Zye_bFV-pBg4~O<@FCPEm`$S_UkHB zDPG^%W=k_KFDu`AEMQWljt9pchmJiD__+5vC{%2?V6&+_&-#4++ryd0wqn_i`&s$z zrakt_dEmZTGJWUL6`SAc7|)*meB()VuKH&yU%v?7$aVOiuXf?H;7QwzH~KTLVqp~& zv1{?oRPyGWc>d|O*wn~=g{G!Mk{iAlUBCVA@{LbPp-#WoJ-ns-{8U_OWdEra-di47 z>v&)0NJsXbn)|$XXUn&w(_Gg@_Gv7Ui#_ne&X?n}uJ_GNshn%B_C36x^K4P5?y--p zI^VkQKl&*0{zuZC_>DPJHnik9I<koFGI?^i`C0YTrv-H%*=wqI@!ns1|Kz*3lQSOZ zumrYbe^O*jGpn&{c3yj5<&>jDNPvOl#o!mWo-zAflRo$3=H!k~TZ*zC``3K<cX><K zzt*dh=N(wxQl2{f&a96&FCAT?#UT0S{~Gz^$G<)w7SGjO%&5Y?M@xFspBx=A1BrKG zsnKc=pQJA7@?G)tedFo1S6SZ`NwM-f>~QP$o}6B(^D^8nQp$g!ZQ<GFk>3*IXSv_9 zoi-~s{?YBZ;S&Qrqpr?har|EL{G0PK_4MEPJzb#DmVfR`>*VVnYC>%9-HZJ&<NB(f zCa3M{`lbbbD{jB~{>+X2`bmeK&giedu(i^3_w<mZdb069dz~}+o$l=D*b?dY$@jIv zydRIs?W8YEl3M7<a{bML+urAsPHHXUjGk$;Kr+$Mk>%>UBeyr#Ev^sIjk_6l;KIgb zd-p`^&q=@bWJUDS+$4{!yY_sHcl-ABR?QdL<Z6?JWmgRjy)J!vH}(0Z_2tp?_Ix$j z>|TH5-GuT8o7b{cCM*3STx4(Y%{}yJzE$!}>skHVmoAu<JmW`1rBwYFWBD&@{5Q-O zzZV+y@l@008Tk(!wKaGDEK6|Ks;qoCHND<4Q~W+}relVs{+>Nr0lRNkOq*}~{NsW3 z^ZosPOz+(L`oa6Bt>GEcadYdrf(`fleY7)V9ZQ?L5O{`*W$K-;9)3?bdplG%bqPzm zZ(aU=iM-_f)q;YKp%qzGChd9Z^H)e7`D562?yJ+A<Ly@#oxKomnYr`SCb@?tKi?Wn zt7i|i)p$|$cJqZzRe!7c>y3=vrTj&#`#I#iCbIXsbH`O4oIh81`DXRC2M);3zW4U1 zbhP%zOa0n6H{@x~x1D&xoY`&Tk0z&;AEvRy-96XG9i}i>IXh`WPZ(d0RWGZ-+?ex< zrgPG!a{YMWx%1Sq@?FMBb|t@(471JGrT$xfUf|i9MT-(HvRqF7qjN3i&WTg^<5X+z zx9|CIGVk4gj$21PXSdFnFP<P{GhMcQapc!9%W3;9r%eqPnV`R+;)}z+zU*V^-q$ui zoPN;a{Qo(<+rKhxE_n1@bw^*^k#EeuBR=m}2;2Y5=Dv((ouHl%L$3HWqx9`<Zu(!9 zZcHei-I6|e;g>JF4}G$1_XrLR(UF;JD1P|EQ5l=!uCwo_CZBw9J)+E0Pi0Ed!w=^3 zH|#(6Tj$OXe&ec>XC$ZY-2axTJMPUf>)Xx}n=_1~!~GXu-YQ?Q?)P+=6B-J4l6N0y z68~-R&?R}_k92G6XFP77A6Hykx@yH8#)<mJj4l3Mc9Lm3mtKBGa2gL!!|fC5+cwvK zIJKjcWsgz&*8h2_hcD$zT)iaDytFdwo#MYYv22Hv?{EBmgp;rSdP|VG&gvq?Odc2g zk}WCSHj^ekuuIO!o_D;Z^{4cKC#P4>+;gSz`Tm-2z0xL)c*Qx>4%;QHIPaI1>*Wx< zjg5Ejxef0exK=$CnZ4-l3yU3kFQdx~FQ%#1{VogA+NQE6<e&eyr`_5!_8d7gdA|Rn zrPn61{9qNhxWstx?25(58#~h5F0A!bX{@Vbx%&28bn@&88_O(@zt6f6e00+?`>RDq zqgG#fzW$1ga-WEP?!33hKRE3*dZDV^m^***#D5Ce{xdclUH@o#?z%7Y4BE;B|4re~ zKdt?~{P=UT<qjoTU#*&7S1vf(;D7q!9+|?n`{}O5yFar<>d7ea<*#C$s&qft<X5n^ z!=tP-nVaqfrdsViy@4(DqBmbi)^{e~ufHQigMXNGtkeB>yruE%%BZDQZ{7BK7SFA% zkG@m1Z0*I%sgI6-SsOmHYhrHY+t=nC)*p@S-<<!yYWq>$=eK$LzRdd}7rUB0K=D=P zvD#ZxH+?V2@|=GB_=hCn{2nRUK0m$fQ~jq*DUP|y@*!ff2Ggm^z<pk}^WNN=^r_8> z$-;F?=+XlwuLPYhO@A??=Gp8;CCYBRD}8RC48D0WG3OmqU70#)xIRz%+!dSStaJPi zWpOMCG*$k5?O4IuTY=k_wi&%T`RvHQZ{`<I`X}8h=riKY4%pT(CF<PUXIr9X?hC!k zbt1!vGkSmWop$?8&k7EGy(i3<>#>osT=$>$!qv8Y@yD+{`BftO?Z@jK*++e5%N=mI znXvwK+@x!g{EIt{UvgdB@psPkkVi|qu1h=iFn(Q;GoxPm<+aD*Yn`4kL^NERdrEMf zimZ+6svuc*-;aBKG;L31cg=h7H7(cpLFiHL+G*3*79KmC@vLOloc|G_TbJ)nbDa}l zTtDsD@snp}nn-^BX**}4mZ8O(DR-mUOP;<8TJB@?yH7QF^~6e_XIpije=i6VKJ!7~ z`I~G@HgokWJ1lPB-oN|B$CXiX%H?YFC03O#3%{Xr%p~{JooTumm$vZA-Zob`ureW1 zZ_}DZ+6ui*?oLk}{S*2POMcWb2>*L=`b7+DpySoB=bLpuzlaG7PI#fT#MR(seD0$Q z^PG>cZ&AKv-{tmha%6Ra{Ig`fka|sl!)MuCgu*@^TX0h4+x%mn=D!wx@UWrsxVA~1 z;@fq<Q>C^$98y-^Y4<YDYUR7CO}nH;&2uNYol<YvZj!ij%FZW(C+=*1zVgJTNsr%X zb-g_oaVkJhCO>WS`wFeB7Q^zOGwDCxZ|SOD%rIwZ^v--v-+2?wm&W||HaGF!cRHiw zMe#hpOAB|WuUpj;w*IW&_1x#e?FMaU?|Qwi58sq_SS`%|&GGQys!x~W|1aKH?fCwt z(y3KXQ}&r~$+Z^vhPf55J^ev&qRf1=&a>g`zYCj8S?{Xg{v*3u$xG3*pf{`Se(TgT zv&&ifk6kS&|L}Zcme%d(XHu)(40N4jxW)QEnQ~6(+x*O-$c}Tv(f5xwtkq(km+htM z&%R|+Z;P_KXB9)+#~pXKysTaINPB)t_8QIhu)OCxmKrFQEZQQxB>wD)I<{>~f{!eJ zUZZ4oF1J@rHGAq;rrl-nM{R8yf{vb1Z9Tf$G|u;BoNwCcD>r3~pWaa`PCab$Y|i&3 zx!Vn7Ht*67au7du=v;mC->>^jKZN^lu=^GD&CL5xSy@b>@}5oHL1m(c_xZk$=C%LI zv-|waP2bIrzJEH!bFVS)`tKI=Z``#oZ<<|_eB#E*KO5g@zf%8qbWcXG;?tEYHfdEX zag{6iVQ<^EuC4UXj=NLldTx0-FCise+^nZ^qW-^I-fw;u&$+XI-p%=Y&*#r<bZySJ zeYI;&%E$diSLL<)8QHbW*B?0=n!V%6^&XAuO_NvZez!P$TRP(3tJ5``p9w5~>{py| znJF!Q2Scj!$LA{A+hdP(c^&Iytugs(z~98ZXz$rAFKePc$NUvZ+y9fZUe@aP&%@d? zEZ*@y;x4(#m|Q8h`uU-Uk=&NE7A{JglkzhCa>qI2=?hYytM4(-R$u<uZ$sg)*)^p) z6Xf<P73|<`3=b6z4R4$`f1lgd#qu9Z?(_dlzHHa$^8U&Dm&%n@2b_3f?H~8<TKZ<8 z@YI^7S-~BjzZLJl_%G`Hamh=E4($oQpLVV9@f@o!{PX*NOi`Zt>(c&J$@`|aTzk&R zW?R-e-)@Gt&#tCPg>&rfXF2MWFPr~o?>Y5nFXVrg{0iD8Z+(2J_wt*&i$o2>^jB59 z<kIwaogR8nS@%;zacNuMx^}ztr%{jnCV%`q^WPlp)yK*fhE86#<=t1YV*gzM_jHX7 z^47R~_E3ItI8*QmgU1dxGj)LvYoht%ofq~pn*1%$n`{;NBe{Y-$|TQm`}MlV1#K<M zVyf-_EwEI-pXs+%>T8B+k#T6djo(Z51O@iDZ<qN#cV6Ck-}p?m?)vf!ugP}tlP~>D zm9ltcAR-Z6u;|+Ac!L8U)verJ1NI)x*mhmQNBQ}j-%=|+9Wv1RW88GD_x6SV;>L5; z{~qXm*k)aH-fyDvkL05wyQITD*3I9xCFAPEhsOTFkKb0V`SGXlRMz{hg)a?K`5tGx zeokDjW^=7dqg!Tv^07C8E+Su^U8=gAdCH&Xk@UPCj)hr=9oMY4YB@f~gg@P`@IrCn zRdJrWO`5z?TNa$ZE?)6x@=G2bttT_ZmapNGvs$vZ`ui&HX*!8-ZfsOhQ{(EkSrU<? zc6r-hu3zh7&J>I0eezASJZbK4d-T)3)e&EEe$LKXVL1Ejnc3$32b<ZGH&6Yem@De) zIB7}EW&M924)brxzRp)(UOrKhm7hgiKQ86ppPwE6SLM7y*1es7UjFrB%X-zu&+XGb zKYe|<qx*#?x4hxAJ9nL?rQWN4Z+q$T<v<a^tztGZ9Ih1+wx_lnJ|k;9&0Ig4L7i!~ z-Fb8Q?@JEV{xMp*q~9siZ1&Gjr}aJk{L=31DBQ7o_w&~`l?6B^ir-;Wxg*u{^n7me z`!g?jrb=vkWpFqz_<{GX6Q?)*U44H4|9{fGZilVk?`fVrd$vFoXikQ+{;7wMShs5Y zoLx&c6+U*8GRbI|JXv`Co=;qQdU_s{LXNN}CatM;y!iA**f!3I;&;CGynOP+B`7GU zGr#1F&?~R0S{oA&vq_m|wKO*~*Z%r)@a9d+=og>g#ZNfEeNkLQ<xb@5qP){H*XOyu zX+6Q6$KC7Z91tJ?TEOc$S*^e2#O)ljLx&DU>@L$iJIhpAPp?nTwrat}j89+Z){7j9 zXtLJ+W7+!8uVb%3<-y#AmtS)5@umI!^>t0m&PlsUUq5>GENqdp`6ivkmtU?3TPvj< zwq`-->aZWbe+vr<O_JSyUXIOjv-r8Y{|dZ5eBiDQn|U(p@yVV06!_yi_B@#P@WBIz z$H#gttG;MtUt6Q7tGm{vYv#?IbKjn9jnb{!J8xI%>rFL3i*9YrZeP7xJ9bye!HX9S zqc4cMp8Wd1*U6&E-TzK;*G{*^njikJ+5frf%Tdu9#ZOJvlOpHNo!i;fb?RH1_o9xa z%a?!t^?JSX>7s4s`kq3)Ql?4&{`@R?d5N|8pu_ELxrS1`-#k51EayMqZWMp=^-(d` zuCUdvi!Uy?n6c@9n27593*7#31?P=d$E|l?ufH?cBjxVwvuV!DFQ;<bI;;*`JHxix zY;W~<w@E5dTQV9CCO8C&q(r&}iYR_+lJ2URwj!N#SJ>*U{VSJTeHK-}S#h?LtDTiq zlnrB}0=uN-w@&Yr$a8!*Gq&D(<MjPXu)ksQF&;KPnG>zt;vHRGP9R%qr<v;?GHsf3 zuVPw3`qSk)jn`k6?5s<Fx^<7??>Q~)?c(uIl9Q5-1PgE!O%R=Yp6mJ(p4%xG*G8NB zEaPe8mp`_8JzMbNHukE$&nEtCb0|o^v3<R--No~tz7<z}-mdzI;q0yD+}YeLGnXuX znpbf)l4Esf_oF8#C(o>2m69@Jro~5=&(FRtEPE?ZVrAI1ctJ(ZO{30Pz3Ug6XIy+; zD!~&~Vx=23S8T3dbJ$|XOCBCUc@yLJUs-wJv#8)?@ldZuh5X7BpB_AZ{P^akRPMjO zz9v67(C9Pom*m`C*BsW*Q#0A3>$X^qon3j;8c_ZbF<Z^+$<(W&n5}9e#kp2%;i{RN z<5o?25vwe4XDd_2=E9$!Qmx7>XH9t`VpaC$1h+m<(w`q6J)$~aO_VdqjZ)ui7}Xu8 z&k|Qq9I?h|lAF`&%L=EtqSm%7%D9ly_2(?h|2&OPiwZpyPQ=Tdn{V&G{+=youZHs@ zQRd0&{-C_vBVjnn)w_Oa*%Em@y}qOeMhA71x8AsrrMe}IH>&sU?CV*gBCbx#o-4Rk z91W@Ry?8ZvV~4AbrMmF@i<_+jO;3G1)6iyPzeY27S&gfg7uRC9-bX2CRQqIiw;c^S z!x@q@{l_*(^{l!|x!24Oo#s8h{7QDE{adB)wOljyY}<K#+pgGX5%s+*cfX8Wr+z;F z)QPQ8(^6Ar+v==X;Wf{)XR6cZWdfBOJD&1&)HELxeewBDa*OM)p!JTbt6HWezq+z= z$BrEVYokQk`C?U-m5cpCzDm_^tK&+4{<=H;gEr6Khb-6MmAl?7Yg}1s9hhG9r}<-( z;1dqcQztex&H7o}`d6BpHRNeq<>zOIO;wMjaB)hT85TY>{3f@<tBWaM7Gu5L`C`Y& z_m<r4%k>{_c75KtH^GhVg0*14X0E$#ri)`|D1Po;kz`ff6Tkn?sZVF8du(9hTe{-T z4#xL&A<YbXPb^Rs^;9<e^i@6MnwCub{!13SB{oK;{^HL&^!l)U>fc{mWo$|&tO~9D zB-gp_WA~bwB8`(@YW@HFMOMF8f;%+LU~S`u)e9Jo28E=!x}KY}AucpjWb2Mib;k2* z!h+v9@7IXATi(+9ds5)t(w*_ik-s&}^m6*2{!kU2zG>-)0=6|T=iJ*j{k(h5lNBfT z&Hs8O@7{}DGvcquDmj)Ov)`d3YMbi!-s*g4cT`i3+O$30aqE}<f3Pfs@7tlPR~a=w z$A|QO>iNAvdFkFuFRd3aZq2HE^kz==vVytUmQGIE0&#n#&ewerI$x=}x$2~)(Wm1a z7B+8-qg={1SN~gAn_*HQ`8%kXCvlG8@%j0EOQS5S&n_sraJnaAMgqTP%8`%HXKe5M zvMK-b>d%J4+haCc>+bYOcinz)PvHr#FSD5o%j>wFe~RCvy7~H+NkWIO*R}_o`>8qS zuiJ-9^5Pp)WTW0>i%h+@=>6AaM-6{U#DACXt6#aipsa3I$2a51s%z7<{{&V4vETFi z3-^y*_O0Ics<mItG2d{McYXMUokIMdGN(WPSW?H8{y&gszHtA_hQBG1ZlNL}u4n(r zo4zhrto-80e_h5_=J-SB=kG85RMoP%JbCHu_-E%k1*hn}_@|=GtKOe*cb%Y4q-Bfi z?6@b7#b$24HQP5rM084sS<R+-wrK?`ZcmzT#+P_a{_l^U>%}9#`e(1Q>MC&ajN1~$ znV!zf*H>jCrCGiA;DV)Pf4gjc*C<Pw@g6&VTyXC{wy7z-jOolb&Ui82o6+See4u!; zUE2MJ@;CSHkq`V|>wdkQZ!*_{nB=P`u2*~ue_{Dp`<wi~d0+2uTO6e+8oKk?tc%GK zyYBTHaxWLIE#SIe>h)~$x%mdqYwlTQ&aJ4qx4lMaq57Z4k}6AemEYdUkg{UDVPWzz z{M$A8Bd1~~&-l9LQ2ya%n|@5<GB52_x)gn7?>(I&rO)&0yRUC&`*5!-|K|R$rMs5t zElqE~e{=p{v#o_cW?z+XuRr#3HTO;9gOgeHQ}0C|Y@B>3H*n4Cr+)YMJiq_=?~GSI zcfT;VPqXWNw|nLqFWriLjG>`M(;u}9<txS%e`hw+JSq8SPl{}`5Z}VAka>3ZCgi=9 zT5$E=&3T-^E-k&lyzEVNkn#HuzieN5XL`hJp2VLPt7vOEGg)0XqlW3_-!x$*nb0Xu zigj*heh<GhW$~W7MZC|AO?HHGF8eO6`!Xz8eV>lTN5k1?m}Wed7ka@P<+aml!PV@G z(fJ=*SAUhNuA6!E{Bs_YjEBw4&upwER+{aQzPhO{EaPyC|MtxpKhpZ@Wc<Fi=+>BA z_j<l_z40?n@#^qhT>C<ppX>;&F}Z)@1F!xEpB=V&5+8nf@A>t-U|;-Xm-Xqk8hI;= za*bzr9?p8C=D5}HZ-(t>?tgY!i#F%p_KkJ!)3(`rfcO2@YrbuExzGPST`g)=r6+l+ zq3xW<l;?9LYk%&(WwY$<%VS$^efxW=O!~lyWA9!xp7JkW@>E**$L|%Ld2xN_sol%9 zMGE)s`gz&BvUg(LY4%I2mnlCu%N{SAQn;G8b;bHw&P%y|h1-<4T74=ve72?hd}iJ6 zd|h^#{^ZaQ755p{Nz8Wtt1fH_ym5EuhA0PDRrX~&EXv;QEUG=)x;n;Z)6K_;;X*rR zL<;Zzao^I5wc_FYg3isy`;2lwn0~4MwxE0e3$yS?J2Tt8j&8}(xpyvdzwAo8AEs*d zPutqOf8OfX%b#(4h557%ZyYXtWeZ%+rgA#Ls&<C(DtqUwX{WA--zs?}aQxEa8)3_Z zg+JwRTNU$a%Sm)=a{nu>DLl8U;U4S$pfJCsE6r<rrI&7BQT<fS^<K?8iRG&HZZ1}- z@!s!+{hBwed}BAQE#`Jz{?kJ?>z4;U_K<Yf-kABy_x7R_udkk+zt32zKCXAiKchmv z)t)m7AFpK(%nN_=ewljxuPdVa?(Av!ys%JXg@&JktZBhT%ZWGtuU#BB_mo6$tGd3P zC9}MFb<CG*rgrat2ON4nGd=RYyW-b7na}p^oe|Hkw)xfHP?L-cGmmZZ32P0Be$81o zPp<FxROX(VEK&B{LY<hI9_`O<kBX<M#y$RA9b)-k>%`ydrc$T6^bct+H4Qp;U;2H} ztTh=9c{g`&nyPsBdBM}8+i!df7jc~DW@J|Hmk}O(acN*^z*fbY@;BVSD(>Hlu#{Rm zMf-2iwZC@{X5YEC_uh(Cp-03#gFguG&5RcLT($Fv`{JV$KL3)Et@3>+<*)ejO`6Tm z-(r)$e<(S0GT}&CP@vC(r~|K(9OtJzXtM0Qyj<_@haa}j*A;!svf6%$b=`^IlU2Na zvR_JesNBM^O<QJ9g7f2NP1(;TrXI2_ytpdk?&*M=hxh5dT_icXBer{~LjI|<?Hwn& zT-tudiT_~QFsJuf!%`#ty%DpuQhPE~XKJ(i6`F1iy{xFvqwrGablLJ}yC*q2SWLA% z`seIPjiVwiYo9%{tJ-rj`;Nw5*SoLJCVk;obg(`C%K19;qia7hw#DhWriiA$E0O)3 zwm$s}|FQVJ2hMH2ZoOvKdHKgFZB^}CzK6N|)B6@uP+EH6`axz>=HE$M>klpsHCZy- zch3F^Gu}&V_D#!vlNu1Zs3yj;!0zR>b@2!Op6q=7<N16GA)T(;xu&giwe`}!Nf<nO zsk2b`t#dQO?}eO(ol8z>6%{FM41fE2kJFrs-EkWI&z!>kZ@azv@2k_HDgnjQmP!k4 zSTw1ugg4)><7^rC)_uH{n|IG+Www8MIaS@F(rjLB_O%a(PibrH<E>oYZ>-&3dt~?L zK7rzAN`|}3jFRtcuPI;BFz<s^I@6ymb7Hs8KV0ak5_4AL(_;CzzHyJ;UM}sZ-Wyp` z$1Cx3NAJzU%RXPe_W6k1jbrWle@-oYpe`A8_+j7m7kS^Rc75tM+~a9<zc=>m#S&4| z$1=tDVh?pHZ8Z=6(!Dy{TzuWm-7OVAHfv_ui=}g~l2qYL>2^w)$#AM_M{4~42dybe zdtwbUOk+H@g+Kk{W&P><!yie@0v|qlw6teVmEdI6<`jlWKbHRgu45#z!fc&*K6_lk zyXe_78pNg>@vZR8T$1*zB6;tuEgvo~c;$6DuY#j~U)7W;x%I{y&d1rTJ5n6OW^?Gp z^+h650=?^%RO(M>)Xx6!HT?HW>pzt>aYe@#JBcvI*Y=#1Pn{R}*lG63`JW!|4z65( zpX1(nhQ;Ngzv=>IJs&%*_MC6L{7%U|*`HkTYRrD~u4G(o+xU+4XYo0c%H`tyU+4KX zKhO-=rK-(eroZT2{p9OA9IJkdmaaF?wc+3O?}OrWci)F|!<u(=H8!NZ{qc8soQvfl z-rt`0dS5@SP0q4?X;&<>oXu}h=YM_)n^PCJ)Thr{6JKHO{K=#G`@7KTI+2HNY)tm_ z@i}vEL&e7=scm~}!nsfX+nfILexGH`r(I2x`1+pD$#@^xZ#P%!@xz&Sy^eNjuZ+mm zT6j-S=T`kZzrZ?%n*Z-T<0{q!ZFI5AyY~Le&re>B(aQExN0$8J{PXEwTG+qxncOSC zb**r=)PH3Y+5McIMfky#mvJl1&aJ<9D*V1o(sN1U1eFDWBIozV^&hKCQds5g^dwZ& zHEiQaF0<7=SGAJOq77%~%rIIbk;|TWqhN}`ln2vpY)Ta>^lY@Sk}N3NRDRRc>V<*S z*B4)-N~(0N*0S}QefO9W{ZG&Pc%SU%`uIH+6Muewe*gZ$w!hj_j^)lao?aS0VatSP zll=CWGV=Q`kGamL_4rJevN-2gz1BGG#Nd>Yo6Yv3>b*kyYO6M{JKy{5<Kq9~wlCtR z=&I<}t(E?m`P%LK!gtCQ6KX0wgN%=V37e?!IX_YMpzI2j3{{g^uPaZ@+rRGl_SqL_ z{kGy-TAit`6wBPPw@mJ8g7ae@b-lO;r=Dh4Ow*idt=m;wAgA6uEn7|cU0;>MndzE4 z?B~^-Q|-4`6u4s-$=6)6cu)AA;Je@b?)o|_fAA<{*Im%6eN5%q+Ph&d{)x?Qn(Wx( z%EIpvd8Xu{>8#h?4h6eklt`IG`M#@B_1qp3yyyL4sg}0N$Ih7n4wo8l-aIrb`1g)k zGiL4Wcb&G;f6d}aiCYsdcv-H}UUYh1#JlrFd$ra!Em6vRb2X>&!MDSvQYBFjI4#{7 z7z9f_T^vI=*M@ES{(5@I5}C?(eZ1KTlXc7g_bzSUHZ`k2?VD2g=_Lv;6%Q)5&h)-+ z^l9dC#v7$-ogVq>Ih$BlE8YG-UDRa7ca>fy$9-DG&omml7AdUe>e5=Q)SM#BCUmEc zH&EGm+4pr!U0L!IgBG7yv8h%`u=SBI;}3^3AEWl?ss6KyY;&<>-I7qcX@liIgSC9_ zLW0k{RsGd%=6<~)!n*j{Jx{}DMN$Xj{5p>L9sJ9C^~UK%wN+-Ek;(c~qPO`7u?gKV zs%jR?P21r%`{l)KqtDTKvHDT}<vR2~cuzIDWVgcXd9skl7azB)hg6TNsIC9ezMkp# zqnA1IN1T>VtgtyE+>ji8DO2pp$Arp?%;`VhE;T*!?ahJP{nmx%(R@1Y+l(uEriQ1R zD;@F_>8f7;L1CqWXIZ|McHXM1nHzSsByYX3JM7k)u39FJ*-gG-0V$%cg0gHZG3U*r zIOm2nhb?zpetFU5><h0=UVQmh8d<5Wz20-?&-FJhPFl2T>G!TSUaifKb9kgL^Cw-4 zoY+%vtYoHU{hFkZ_s0XL{NG;w{A1vhO1b0qp;yzbUY4k<sI;`ibO;<$<dCprO`G8C zc=4+1m#x<G4Az~~c=76!lw<6jj}ER!k8%gP*%XK-hNc7-3JA7qE3kMpc$_=u_^xEv z?yUbW-l@#tZ0>vX`uo3j@zB4kLhQd@**?GO)ygWKeSfz#ocXd&rKGsXHB9DI<om^b zKcB@++rO`WeevrI4h@&|B?cd_C7zKG6|IpE@@CbK{mmHfzpHEM_9F>wU)cEN&-|V; z{gcp)zh^YmQfK+=CGVZ7>tAzhR!gFeWVZXt^-ms8-}dq2v7}F3(FQ(zzx<>R*_NkW zI4kroaK)p`M`uU;3zVG7Xq-8n|LMP-;*+x8SM0UitG@V5cI4K-Nmb7ytjf<g-+#OJ z(l%GY%*;C<<dtVk6P+b;lp|o5<@D6`PdBP=?{hmaOTho!6~;RywOpNE71CPH^Jbkq zY?+%sG3(}k+3ojtG%G#YS^ie!*m12Fq3k=$PsJD7*)_M{s-3n>NN)e9dP}3%R`cfG zdMEh7fqDL&on8EGz7IDZOx?4uLS1^>^@}}j*B$rneA=kk;}LXz=O3%h|GqqDed~5j zVy&)rDDS*A53N>eY}t0?kD6?-13%lIJOxR85mgI8UxOD{%N*CU9X~X?>GUD<&xdP2 z9*eXq{oegz9pi>5(>xjDIe)G$71`k(V3M)Lbo0s*`E8<UX4Bs-x7;Kdo+q-MSMKzL z?#t)i@xRc0Q}<K&UH#U+HLuwW%fn=1eSP1=?w$JlU3BmBm8*BCA7}e|_088A9&cYC z=yCK8v^#%y@5J79Ib!=PI~em?gZDBoe>OY6;+40!`TncS+tVJ{PCCCVh+R2P_VC+G zGpX`tpPmHIH@4Snd!ApC`04tlw0Bw4LQ)Ez7h8V0)*WH=e7(&qq4SgK3(NQ1lR0@n zC*pS|>siar8`i-rU$4H=4VNtVFOv54`iJo9h`%qwb>==#d2qYg^ZK4AdVgDfPrG`l z`j^79GhONz1s9~a+pWHL<J9u$YK6%;rq$XabILUCMYr1@mtEuXuj-opUiSWA#%LQ` zrRJxPw6&Ic^e0vHKc3IZ7ZO&m;hbC8GS;nki{Af>36pzu?0uT}=MTBFSISI3?3}MA z`26dKhsyDvUNleK^UX`F^O)tdc=y-V`|`4-_pfPM*1CT#)57QTM6V<q$mUXub-aG{ zTEp~ddjgymr$#l$@v_x?=n6QP6LissYn9lV_^wl&=5h5?rv0)1=B=)_bH+r|N#f;e z7u)QTGFfruRYdfjUbVB`OXD6#_%M5K|0B=&F?{lzNAGgnxk6u?8@<2EcFd+uw48tY z_H8o3`UQ>$t!*}c5ir(&*ZVp{(!Esu@MP0f+v|@1*}3ydkL*eAVk3_&bC&t+30+gQ zsi7l#T}sNFro@J&-xI`ia=y>}a?t1hhKBHM*Du=`&w5rG|M}88y+3uSe8NH@2Tq<T z+&$xSrQ}rO*o^d;_iAyMJI-#oykT3DR=v_)tBdAWinjDDt}?kEBjW9~iD{)?+L;@t z)%&LhUdj>J`&9eimNoMp_QxE(v$5~myJc7A#Y$Rj>{OfWb^3d%h~VKL_kaCJDYre_ zCe6;a_5QzJ^F9?r)z2F8t3H;PvNylEQO9q3&Z279)yJpS?cC6kq&w^N?wPlyz3$D4 zt73S2>hwvQJ)O4CLge-?H)ob%2=tk|WwL4h^}yH02Kg4#KfU((S#~Erx#fPia8}yN zuC9fzR?O;>3<wpqUBLd|wC7s7t;&<5g^KGn4lW3Hs(l~z;n=EGD;GY^igw>4SaUr5 z$J^a=SGw(=F|FoChqtk&eOXU=msxP;N>@Y2z1t<F7M^@^JS^|ohP`w8&2p2&PNmMh zoiVw6`+VD`%1bPHyRVeRoEALmH$O3O!=j!`)8aJPZLYXk1)A5KTO;o6Ip21s`?}Xn z&bGCYCONlH&e~*=H}~10qFF|lUu)fnWI8Flc*D=^A1`{9-UzE1St-_}E=VY!y>Mrz zT0ZaW^IPs2Fvy-=m0)6eS;XMQ54Hx!vyA+veB!prhmVIXUw4LkqMp)UxqGoSEXijq z()v3ctRGgd;FIPnImKVGqO>&i!-lGBdmk)3bYIqe!K6@s@kyU{U%U|}r&w2GBG|?F zL*r&#`=m*(=Bo>1wnx4^msRuerHcDD-S4uuj(6D>o~gLdyIZGE@2vfYuji^Z>31F| z*O<S5PqhF0*VPl3UET01=G6M&r?+<=YhKiHOmTItdY%I(+n!a@FSIh2C2V-TF!Q#` zeb?W5vp*Dzbuq14w56{<JcQMkmv3Rn)oTaM(&wJuzhgqU>5fO{%o_g}Oyd>Z88Y)# zpveW^1Khf947{y(MO#hGDmn`ytnQ?J-nTbrMS($Hl?~t1C+o!a9%T>>IqLrLTU5_3 zuW5S(jxMqHPrcSLnfZN%-M8A1mhJZq^xhS{GBTdkzp?CKc#iLz<CDYP8q@XTWw#ks z`0;$ZcAh;$<9m|JjSXSqa|>$?97?55MH{>cdlQx37yM!O#kK03V$4i-UfbV2`#H6= zWTw%iDT|tI!qU>OG`Y-K{@3wy;GVsFrc32*FUcGUn;LLyO>*pa-fW*p8^c5APj{OH zZB{Z!bXYKPPqW>wCp$WF_WLfLd1&s}8NrWVWbx^m@5!kymA`lTc#)@0#N5a`e{MU8 z-TQ2o&9Uvt@$>teS|86{vGjRZ-CXVa=jJY8bIWGu)sk3vZRR=_f1lW3MUfB3ZI^0z z>QC9W@7o982q#DRfBP><{d*|SqHL1$$>!}k&dm|NcT6fRPD!<%KUEf(x{7~WNGXSg zmD&2%wB7T6S?Pc4=yQr&uC;!WRj|q5Nn0lGpZrd>zS>qL{c>n-%3((NbKSw6H{(tm zbdIYztbFdzkqB>D>+e53c3JT)FDjb(a%<|I();Oq<X;><bd>p}D5G!nX^n#?uRJM> z75%5i_a<L)Rljuh$?xeg@=KcpGag=8$Ck6w&}H>pi?BwwZ?Yc_PR!qt>GGp9iCf%9 z_T-_Pg)DZzr)jCqYSdhIIbVBA?+(L@F2|xg4d18d-xD<36LWki|5wG0N$jmvB9{;S zz8m43x6#Y%zs8xjRc0CM(yt3Px77C?lZul2@lYW@r?lwprwE<ise4MltFP&MahTb= z>cZWS)8YC#kLEsQ^^vt~II^f%d%xe*eDzm#AB-2~N#E+N3TReel_;T6Rp7izYMxm@ zhp_d(Tf6ca0yb=aeJb;<9FK2gQj3&?{joCv_Rl3s+7F-Uom_n3+Nw4Br<R@xX@1Du zoptEL;S)=^3*By8ZR~$2-n}wodB(z@-JdG!r#pRXzT5dVY}4`x#mCnc{z)`C^Y5}% z+?hR1*7_Ug+P(PeD{^(kk>!#8Ss%BHJpKIUZv5oxhX(WNHmIN6c44Zsv+!9p?Tg#C z{pGIc`*bwXnE72v;=6>sqRfl8P0|0h^2@yEdDo?En~zC-6LCH!EBqt5PxNYvn%c$2 z%R)J#Q+_ioh}tl#$2fnni?ZtN#+yk>+Uw>`?cR5Ax@Cu|_{@xm=L=5>I;Z&*%-(0j z@BUY?=iM^d@;OZNg37{g@7S>3HX^O9|L*DHm2$>i7e7AuSzxT)_w9lGeMyIH%m;iw z&5_zSYvS>?!?ipA$(&wq{Iq%-uaR<%ve}=gp8=1gkN-{3xFoLcchmg-KE2le>o5HK zYnpz)>3xd#zvpWw2nwd9`N_3a*Rs5STHAd!Gs(kAO}PE5vaap6$-h?!%$00D9DZi| zPhFmKdD6$yO+r8Z`}5vn%C-LV<2OG34RBj%-&Lq7wrj~#gZ%qa@2Wp=Uz*;V{^{kj zJX0PXlQqk}{Z0zlu07rT*_&h4S0m=_w49i+_U_VMce_IK7v0NFaA9ccx79A&X#bBX zEq!*v_nFtF+xniLet$F3Gx456c82`9HA|QDIK`_dx0NaC##+CWaQ{{yEUJ-~UB@k+ zKHGoCjgJq_XD?jRbI3tu^6qSjSyQ+02w#<t-uZB0NK&Z%{r4+cm-q<jF0^|gCa=58 zuRH#@!6DI`{{LRta4p_#Y#n^qfQM-*tIquw4_<{o+W7eSiGNj0@8pg|-9EMEX@o6r zn_J7zJEzw_{$#tms{W3R$->UPhhvv_ElSWh#`)Il<yyhzb;+5pOO|;>*JkZLdCM&3 zx`ljuz`VY*c}cg9FqRa$OuA#+_GMn|xnIwk_vVXTt``09t6949r?Z)Jut*k{SH$)l z_IQ&eM&+Jnl4i}x?Y1E|V!pgu)sVF4eeU$a>U&agJHF?Csi+jV8Mxd+D^2?3I)>e= z|4PgVxS$#RpO@ceO8?tef_ExsPF;04G=xztUBt6cE$8LRFI#g`o=UrW%zU+==C9ej zKMu*CE+726VDVR9xv;%qj;GGZu(_13lab=D{tyw9qCT%GO1S#I&boaY8dCrNQ$4r) zSCMC%=;C#K%+XvwN@jQO7W;m@_J(uo-LtG48Ki2T`8<BRJ47Z>i{+K&l;^6u=FeUc z@PGHtYN5Y#?|;6yXzrIeQ{DJiPj`-g^69?zEJ>sF_O(hp2hKN6-8qFv_SB8MgMDw; zH79SV*)Ti&UUBi^0``B(t$V)SsFPynPxk3*()}fKdi~<B_0LaA?d!2qJnuaHhFiP( zjtOFaUl#p{d3Czd@cEWyD|`06X)1p4q`dI#BF+f$`s4p?{urL#n^3k};=^q3h(GHk zQ(Uwf=3kQC`l2&Zr8WJXk@d_i2`azyZyos4es|9XgU3%6mOk_Nl|D0a|Kh%BAI;X> z%d)F^r=ZIA;hx*SA91(cC+E*T_1WCY@Tf}h^*{G)zQxCX`n{c3=B4e7eHl!b*<0m2 ztR7d*JygDZgWV?m{@AB)o-p#%nJ=yuyX$Yh;NF|0UyDu`>fAi`yZ+yl{U%JarY>3I z;ubU6aneoygMCpw?=n?d@|stKaR)xke80E!jaJi=nG;*qGfz3elBO%w_34P7+<x2X z3|jBbyo>pFBIRFZNkPZ5xX2T;U;Fsf=}lY_Al_d6WU0=MTyF1awa3<^Gqz9eR^xyE zGWwF|1uL!j@`-=@Zy3G)!6NoZ{ohB6%Vz?Z-Jg4MmM)vR=Wq7Ah>X;Gvzt$B`Lm_| zba@8<_q(-I1pWJyqi+5Dcj_ra`?Pfr8~-%wM9ygPp1Mor$o=f!;(O~Vjh+8SxqNwj zT=sJRr7J6%pDxeY$f|L=y^!0@Q1NZJ!R(v^-lZjM<$t1u^g>_F60mQLe<E<|bKk3k z7p8mvF{Un?XtIspbK(8_pZ|SWQN|WGTeZ};W4`v2rK<WZ0z#jhI26wvpD^7!L$PJT zv^@e&9iI)K=%1=^^77zNJjZNpzOU@mQzN5D4#m2oDo<JkoSfn~6kA&M2sm+YRw_ab z084nB;Km~{VS>05hoU0PN`wxC1lVYt5(qodbR0SV^gm<&tjD{nUo$RZU|?YIboFyt I=akR{0Kp$t-~a#s literal 19996 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 diff --git a/sflphone-client-gnome/doc/C/figures/record.png b/sflphone-client-gnome/doc/C/figures/record.png index d10233a7597daa8d57493fb117842e6065057851..dc5635c3d5cd3bcbccdad13c38190dd2fcd3373f 100644 GIT binary patch literal 20033 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
&c{~4b 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 literal 19939 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 diff --git a/sflphone-client-gnome/doc/C/figures/refuse.png b/sflphone-client-gnome/doc/C/figures/refuse.png index 8c5a0d2f9bfae155efcb5a17c8122694d25cc1cb..0b644fe9cf6996be804db2fb09508a0f5ff1cc09 100644 GIT binary patch literal 19497 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 literal 23461 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 diff --git a/sflphone-client-gnome/doc/C/figures/transfer-go.png b/sflphone-client-gnome/doc/C/figures/transfer-go.png index ba8633c279b7114584962c12bc88e7b17eda2501..a349431542843913866963826fdaae12d3cf389d 100644 GIT binary patch literal 17351 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 T^xiTC1_lOCS3j3^P6<r_hyY%i literal 19799 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 diff --git a/sflphone-client-gnome/doc/C/figures/transfer.png b/sflphone-client-gnome/doc/C/figures/transfer.png index 5da94915812aa22203ac012f673026bf4e6958c1..fcb2c4a33a3bdeb8e2a6b762b2e5ca155a35b7eb 100644 GIT binary patch literal 20160 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 literal 20122 zcmeAS@N?(olHy`uVBq!ia0y~yVAN$`U|7b%#=yYP|M;dO0|NtNage(c!@6@aFBupZ z*pj^6T^Rm@;DWu&Co?cGa29w(7Bet#3xhBt!>l<H3=9nHC7!;n>^C`C#8`#ie)3qy zz`!6`;u=xnoS&PUnpeW$T$GwvlA5AWo>`Ki;O^-g5Z=fq&cL9+;OXKRQgQ3e-13^R ztACH*|9&q$onOd<W5Nb=M@NSPMy!oGE)F3gE=#v&P2ZojH7a-OwymYnxpzY&6IC4V zEK*W%{>CNk^v!Qx?eX{h>YV;!Eh-CM{M{4xymbEazT$JXkBj%;fB$n{G0X0|>omKX zbWWEp{I-9QMyX?HsEO}tZmW_P7YYp(IGkbyTm?NRy=pp`a3H`tAa4EkcQ3wHdHVQV z@%C@$leOo_xwYk_djuOZTm7O>6*fFlCL9gn@wKAeN1GODRCT_*aFK6A)Y_aI8yX)T zZr>ig-$;Td=iZ)~hRMemK3oltH!OPMkrJ6V{fDY&(&=fsJ(9+3?S}))?>+uFVfJkA z{dIp|&CS=3&=KR4v+?-;?r!1Em>wC+Pdb%XSG8<y`Fcz`KOiLJ$TZ#Pg57tkye}_Y z%q!r!@m+aFhQ`gCH#wRdQd3iRACZ@lIrH#vyP;GsgN$Vni|3?UrvKi&$>CvRPEAcM zea_6xeDdtsrHd9Vy7%*&Q$&P>y5F1yn>Gmrid6o3xtvkLvS^9F?U$;(JW?hd$K~ti z9B${IJb!-w@y8dV=kUqqw(S2KetApPw};=l;sdAb`jJ&XU;p2&*G&p@KHG(czP`CR zJ23n8z6i5-w<<zIm#$dBvHPx{g9C%V{ogN<Uj+_4EGT$(Mlx3Q%EHG=6Q`|O)q5^J z>(V8YwSG%C-^_WgqUU>gLh8=IIa}Ws8G4@nAG>PRstKt#(|e|;&OCC&MXurjqn4Id z$)QUi-C?>bw=7?>bXC?~yK1{jL7}3HFP@lNevk7&_4~c;*I%z)e$4DleXz@InVDA) z<!xWA!PVH<=zHw#*Q!FRxifs!bi}+jr$o*+Yq<PU#oqq@ayh0c)23ZZU8K6AXy=J@ z+DCLdBz)8y9KP)^T*YN;?IxJD`IT;1dtb2!|G&8x6AZR!@I_AB7`1loq%A3tYD!8? zQ>KV4TD0hbNpI!nXB(@&W_fve%{t>;T$$&WyXLI(_jh+CjnjDE@BeQ%YuQz0z4h0< zeSCN(tNAJ!8&6)fYE|0FO^JUt>C9JMyK2=cF~MoeGT&H~vMo<JlCd!`F3zvgQE=8W zK^X~;lnRO8UfKrF#EV?FTO9fP;*8Zk^%;+Le(Yrb5oz#bZOx41b~+BzH}03ev?)SI zCuYY6*TOwtuSI`#V~h5R>RKcqDtdHH<Yt4JK01+`SR$v*v@BLDes(7D=clJ4Vq!|3 zLEWCOV^|{N;{4kAWFs~tFs|S8iHoh7(R0#-)R}y;RtDMEbY%G0Q&UrWFMaXfuDNnc z-<GJXJ+~{qs9d{X;5Xl<({aiM>$xjtvCVQz%+z#EO_flYxbLp;k6#}O-M+v0Hd$Ry zQK7N$`uU_!8{}MOFs8gw-8skRgQ@quX#aWQ6Bf<*bbP;o@iNVsb@u1)f7dUo{`1cA zC*ODbkD{qrtE&Yv((AKlwY@W{5q!1J@%H!d@~np+D>mGItJ`({@kf)O?SCHUteRZC zH*V45#gQ8l82Q?p|NnhoFCrqcAX6%T|6jAu&(0<vY+~K>?N+vkh{%;*mwDRf|79gR zcP#R#th9W;=QCfom~PU;L#-ecrLP|4Zolj1>dKnG=i@QUx0z=>i`t$E<#FvUE;3|q zFZgmLQ*K8sqp~o&@zZm=CmyzHxX5$#=YvA!-L`M+X88V(v%OLF$K<f^u0JKwYbDOD zu&zITXWzd?+Z!7?^u9<>^=MBuU9$ACdh+G0Rm%JR{d%q2<v&TqM=e;n^N4-j{}Nj{ zeoju#J5{gOK6(1|<FncMk3Lqs3OP7wl2BaLOI0zQhy#y~c2|BrYi?QgCL&hq`KHXd zrv>s&q%^g(9^Fiz|MXt<`={ru-#<C6zh6aFwRO@Yp?{y}|5xx7TBKq2b5H#r-ozEQ zm3E$|AAStb%YO27{-f~icTP<G`}>0FGU0xk57lyilC(vhHm`D8ZgJzAXxFMu|33r@ z?K%>eR{kd?H>PQ;wDNBWhF;;*@{eEk`#(P7kPyQ3_m^wHi>nt*4)}j~cxAWEk1K7P zgQhG~IxRKpNjd-4;8jwqYB|qTe{ww5>Tpo~{YKp?CSi8h<g%xmO259|^Y<p_9NtU9 zIvaa-mI`Wym#ZEKKGAn|{ik2*`+l<&tGB7&Kd>e6Zzre7!QfLH-`gqIzEqc474&-f z_lwavU2{%s4L_2UE77mnwa_@tIQa{M6}#sHohJv5`P_@&IWuPax5<hdmU*ncc6qm{ z%Z&}i=703NlqxGLbMEe%x;6XyHQ(Nk`}Iy6{r~rU|4h4DtIEpCuj{sl*{-Qw|LRp% zT<zD;y#0U6o}HWPU0G?VzyFVs+hRdSfmyZRVqPu0v4LS0cl+n=3oMM=PrI(yE97}~ zxm~vUn^Eoy1*N8D2Y~}QZ5<jfE}Tp^2^O)5({KO8eO~f=zvYUqo^VD1j-GcuJ}shw zpM$2>cjVjO_gJ_5<<B`^9|s1Uul9dju}J;y2~$N^8OuoCX%cN`fAVhU<6ITYo_+D- zuA^sm@8ULN2o~uy*GUTMX;Eu2&id%AGs|Ye42Q;7lZ@^xD-d!!^Qe6Pe9xwxb?jaH z%Iu6EiF#>C9TPqlT5fmd(aPqRG7%>`o!vDiEP7#`s8}Ci(`E2*`9-m;lM5c&+%wy5 z7`k@$;^+FJSC_pk+wJM^zkc@l>mPnbDS7+*AAehR{pn`2ywK2zDk}qL=~nVP3cO<b z!Q!~W{8r_@^uO-vf1SHk*A{JW&syIkBygnDXnwZK_jR$7|F3jUVQFznFsQh@VC99i z;ydO9M7jlLY98CLVg5Un?Bj}dKQ>KZ6kgOJvwH&jF(xlnOZI)qhude??Ay<?^V+(Q z-#*hTZGK+bv$=3iMfd$bKfO==d4F-%#4Uf`UF_R;IN86>(QsnV|HJopXx=*|dRd6` z_QrWa|95EZe-z)p=PcuG7rCk=zSxemfEopP4`ENq1hzeI>K{A)`&z2GEUviX&-ck3 z{qsCdEhx3wdsu(oozOoo{b$bE*!SRH{XNJ0jcRg*N-LY!IvBqG_s8IL|8B#QS;yx8 zGn(wjJZXl&?wP5}>;703tv$HYwsv+F=MuBLdZUlqS6}V3n5TVr*}Ijh``Us6i-jVb zLvJK)+>mimY1OJ#5xdKDJv}||lwObB^Xt`WiQZ$yyP`~%D|PAW+FVRn;$*alPsZ)o zJm(Xed;%JJH%t%^Q03rZ^kz_SND%lU&vkL*jk|JJ=5JDrD=zr3*S+#ZYiiBDzXm_A zN_iYCk^5l$?9VsBXW#iBBu(|ZxG(2asDtkF5C4+xpX9UcSdpK;wB)n6%$ksir~L|c z9h1x9+9DuwyV+p=zEj6ymuh5K_~#^+t2VggocH*%SnFS&`p>uvcT`0z|2%qmXEFza z(#&5UPVf2m>-C;r(`Wv8@{wa#`KAxaxr)51?F|hKHgf*EJtO1Ri_bpWwrbTrJ4un2 z(@(P|sub^IuxtOkV1dG(xct4@zH9$HlDCoLU$}7Lo#OMhAt50j9(C()N<PjPSMiY5 zs_e~)^Y#BeyP55Krn1&8EB){x+jLfz_D0i&wNFE9cD`3g{`KwAOX+3C*)Q8GSQvG} z1YB3FYg!;M|H#r+86PgkopUQLO8aef@8&)}fsLh-$It&S5dQ0XkZ12M<M(fDJ8ti< z@!NBBy?p%rij;sXFWa1?kPY9Ql{rf%O;_kF-L|3a)xy=6S{G$ztZG_gHtmLk_3C+9 zXP3V(tg89GQmgA)h>hr*UrF4pU!Q%d(me6~UxvH>U-#pyR;_w*cenZOvbRchcK@2* zMEE*ROa1otw)_2kwJTSxI`sPMrTz8wW;r(;=G)c23fXn-+3m+4C(NCD*7SPJ<tH)6 zp0Ry2@l{q)Y5Dp2d2np(S?%?EnwDkG@KHN;>Qu$!Uh^5|`EuLumPxPQ`z@-QW54Gm ztNAZhoRVYe{#+pX#3_b}e|f#bvHV98S2VlqeI*Vu%jYSmsLc4cQTE1;a_Jj~ADpmb za$&qE^6RpyZgKggXZ;JRey5eav3Hyp?E0-D@XD>CufH$-n8@-x@UMVN4;wSv*Ehyp zI*WgO^m-zCxZ|wNSxzfs9m6~2n?7i`%JH7PFeUK5y`$*wmxrfJa<GWqSrs60zb>|G z<!b{rHfD_{Y2ptrTFo(^_v-RZ(~lh?ZzB#@?_OPd-ovp(_L8{i`eV7zj^}9>SakID zr9C*%m~(&MUcahL-IWqNY;8P}P8AgvJ9qAE$PfB<VxscR9fiqvzwEhoD8t04>Pv=- z=c>u~q87<%bvdP^sECS+?)m+0_t!U-lT-?SeaW1r8+~kv=j4u_o+Vqhe3`Sj{kh88 zV#OmVhm<`g%w})@UU*6J{QG&;GpE;=%NMhKQ@WGnR&4n*^8UOtcfavke|y8^s<tQC zUB^C^U*VwFb8U6Qk}E2CIVBsrWM>y;T)pyTo%!c0+UCFKo=86WUS93={(siz9!z|` zZsDYaCSL}>ZS@=09^Dr^@3Q>ntn=q1EH3!`Z~gyZ<`SbG*+Ux{L~0J5iVe*uvB<Z% zcX|GXqVMN-)CLGFuK!yu#3#GZg<DN+p|;?%#ecrvTRW%hZ^c#T`X|qy3(Lry*^+tr zoOR?*)k1M`@#1G^W^P`qpx=MtLO@V(@NFH%Ykpzp&Y#bZnvj_$w^XA`#-?II?eA}i zTcf0Rno97n^~qWvD?V@AelX!cj+wc4l<&<wQETMXT-t)?M7NyGIP$nK`K<NHZ<lQT z{hWXO$Ja%zKJRW$y_99Wyt}LNo%#NhUyrI+7FkSC>6DYLJJeQjUehk>lj5gP=9gD> zrv+^G_gZPSd4BKA_Y?P>?^_jk|K{Xpy>FgBs_*?(I%E1*qj;Ay3Z*FqJ3igm^(r*( ze$>O@yC!S*v4l^KvvuAdbLRSa`!4fbJ<rAL0+$tKY?jL0{l|Iw-tUgXexg3Q-RXxv z_doEPcecl{`NgGb1;Y~|&t#KMm&X?zS@<b9OHNc&G$bS>X3LM$r%vgeDl+t)7*)LI zp}&i7>~s~**=Mi4DXss%x$S!ET<h|z#qRyje!X6A|32mA-^$jIPByM?Zw_uwH5Cnx z#mfv=xHE0PZ`0qGxNwe5aoe9oLUJ|#RC(B#)%v@S?2sslQJS&K`2S1y83If@PrrN4 zANljw7a7^NeFqLWnC0F&^5f%UO)aggawi^M-lwzk_a&a0VK`;Vlr86$v0m7o%)V`& zjdTCH*bOs$Sy)+wL^2L9%(VG<N&8F3%Z?0_O{w=Cty<ax=S)AoAaCwh)2I4t?JnKW zb<!7=ecRK}z#!uK@W#gEmiG4T)qif@yt!gk*Ug-~y}ql(4(~d)Nq>8T(dMb=WUYm+ zuM|$3od4kV>#vi713XeoO|wc>l^;F6u-yCgg^!P&OG`~3AMa1Uyv+B_jg5<AAB(w8 zJU7?cxbDvnx1ccFuLaM}%oN|UZp-D@Pcs5F%R-N4aXSdO#FSZ!IV#&3&2iZ5xjs_X zs_uw^1dofG+qGz|<+h$1w`|$sIr%E<&&;2PlMF8G4-WY|c_E{2m}%*Y3x$=3Uw@r6 zeR}!JlR=x)w|8wRd2wOk<LZeYimur#o!-PJE6%w~;X;|omvrNhC!sG`*EqNPMNRKt zB5I#1w5H1azL8HmpX_wjkJ3!P?sM*0TrUXfphr4f>2?5#PpzuRd78cJ-CF1NzSHen zdX6d01zAw|b47chaou{5`Br-Jmsb5P^c4FpepsUR|79D4h0IRD|MgQ1zNbA5_Ad%9 zzx;i6|NGrCU&=2ZP8HKDIJBi<<zWT2vonr_{@o>z#T0W?=H}Lk{@2$&cUbx7?-~sS zmI)Q_C*PTN;YU#2vH3q=FK?YweAoJ_@4<U(-<(?;+3DAna_299(bZ?_KW>X3U6Fg@ zR_J%z!#U@pZ9aYCTlGq`uQPA+zZ2_!=RH~PUl(crSDvYbLFj#L)9knZpB?-!^C0Kk znJ;_37QXBAdH!(u{-r_NwO;JFVy0W~`MSp7sLvDe{oad$&#_(Gx3??#XdchPxi76B zr7!WdJQw_4&hop~oYK{Yf9jro{eS<}^?{pj{JU5Z7g2dfpI__UCZYSgp87sr`Ym$n zEa%Agg(u$6T6R&-d-t2@`MjUqFRN#$M{E6gasE<kV5j4gx?NLk{7qNY|FY+}qUUs@ zLi5G0TB+GlD?ZeeuKR8&JH2Pi5f8U>vmLkp@tIfiO}Qw0`uua2M=$Q3{nO?~hx_Cg z6=!?zSmY^uoER3c+G6Wl=6liG8fB)Jm915;FYN!O&^{~of(+}EIX0b}Jr6EqpPaw5 zbLC%U!yEn^6^n)04umc~)bsbQyyWh`ob!Gx>9XsVQ`2>8+2USd##>Nx`tJArmsiaR zmHjiR_LI^vK90oOZI^bj{?xhaW_+V;R*&pajjxy1Pvq*Am6&DHz9evOr%AJNx%zya z>iOsUEH?1Ook=zq`S@q?Y0H<Q9CH7({}p-jSjSh)xXx#F&}_ndd$Z}ArprD3n>^2K zYUbUlum6@jy}jy*PNwPX@ZUH2-Ew8UFUI_S(9Cmt`pJpwl0DzZG~KN2>eard@^`mT z?LjA5UG=q}9l2hg@6eNK|M%Nh`1X#~7Fu^3I6Y6NKfd&JPi#Q1$i4QD=I7E1KS|0( zSMhxRp0<<w;i+gbW7{n0_kZ59_GR9kQSdqDSER@`lU+AY{tK5^{`+4p>B%$u&)3i2 zUM82-r(Co3_R+h^Y{J_<a(9K!e|0rGr{3rIw9UJH7G7MG+|;|z{Lb+`db=b4eJbLc zF5Mw%H#u7DzT4Bs`WxSViR)r^yR01YBxT~v8;)}iWUH);S7~crF1Yyj<;W8cXaDiu zF#SR0r(e0Dlh=0kUFS)@&Rzew@vxs0+xe&F-0u#}`!AARoVqvsRfhT{u1?h{M&HDD zo>LU8Jn{2Ya#7a*X?ZEBzZis`t6VC4YUsC0eCziFi67km{yEh$-TL&#c~7*}jE}Xp zIaPV0(SAD{lEU;~9()iVU&z^Y<76lA{lKrQFUAOd6_tOg&C$45^0K?i@42-hs~WB} zBsa4ge&yni|D!zjtm)hxPY$crSbh24^HTcAw6(`AA|@Vc&||EL6LY(Nu54Rf(WE+N zVUDTi6u!M^T>C=XZ+qqLpUX~dVN;Kuab4H<_?vrs+x+>%7c-?+8=bWJD&d)Iy}9fp zC&*9oUpKt_WjTF=Am=O7nK!Th?>V^9F}+>Q)_P-y)U2S@X(j>uw+}CCZ7V8aJ-`0L z<QFD0Upbiv#e^R^`FyeQIV<TN?R@*nPZ!u$Wj5<>xRtpx>H5k18)0U%CWgCx&P<bQ z{Cn(@_s!$0*;my>r<;1*m$*1LBbZ%CuBJ_s_mLLYcEzf0i-MrECk=fw{Eu9?T+_Bj z_IHQWY>zcht$Y3|t+1)+;rgjGMN@5;%Kfu4tJnKVoSPng_NvR=)l=qZd|CO7p=<7* z%VkWvToz^?{~EV)ajl29p1rfBa>wh0Hktg%a~(Nkj`)`QD!%v}{`2$ZcFir-2H$o} z-LGSIUEO-^-jfHvugTJXP$F!mYb>=wYtyTAi?EcG-n7qG?NXw=Z>8VZv2(^pWp{zk zAD@><3inrk=a$*Hy7b$;Ur!YjR;X9}KDdAL&XW%<8}Hn$oU!b?;<{+@LtWbnSG`bS zU$s8jVY;3~^4>WS;T_w3`3|3*x>B-uE6+8tXQ5pA0o(TNaP?f1t}X2H(MH}y)+)<& zv6z$Q?bFYKm1@_?x~eBX&d52K#`Ey*%N&cN>G5yW_upz><;haocT}x*zrN=5d5c0i z7DWGu%)KFSZ>q-P3pwqfrVbhFSI#v0dB4s#@5Iy|S)-<nv2SX=f9+Ib=V92RdR#-L zO}mQCbn~%&ZeLf{PHEvud$J;872ljCw}KBHoP449OGcH{=NpsDGj%$ipU=K*ww7<N zm2klC1_>`GCx&lxoc6lE%CO9wdwr$1X4>KZMi!E@59Pm`d)Bmh*JaCP#+-lMjQ)OO z-)XPOw^FG+X{&N`HJfrqLf5{oEh{&g9=`YQ_e0Y=^6TI7rDrJITGY|ot$a@ZNXx7M zuksH+7dou-+}D+%oY0X}amm8!ik2hqXGLoby<m>_cPINPHnK$c=AN4$^hY*+K3~$4 zJui=h<ve{oS#SUAub0D5ZJWIFrtAONdFn5_@=7@P)mLTPyQ!Z~%5lFR_Ppq%V&4uc zqdnVCbT%J7F>Cf7Th<m{IS-GMc77o%-v%x7y>^!M=~Ojerl9j8Y5i~gQX)+LuA6&& z%M7P|KVNNmXS1^XTZ!J)g8BbC(*MOAnerriX4P*~7HNib!}jvJqm$M=wm9wo;oR@N z5hm}?+Z0b`uJ$yGuiMc)@3P*}c{WTz{n9_aGJicER{xn_?$`amZF@c%J^Y;i?EC*2 zojLld)rZwnzR$a|=A(`EXXd^;hO_N$Ecs<-NB)_;{nj+wrBmj<?k_s5YpZc@%gZ&V zJtn)pP5A%2{_)hVn=1D!?5{^L`dcplmalR+Zn0hE=bP0*X(jtFzd8AtLF(J&>J!V& z54!UOR;{dIkD7G-SnI)={q{>VK9<SNm2HZsowPo#ej<O-o?Q|PAOEr4TV_75@bR&i zOBX(V<oxQy6??lgqObp-m>mD2F49VGk>bCp;c=GvDdqPnpMU=(^!)Vg?^D;ySMA(t zdVlSy>T3R?7e8K3y7u(O#xHwb{=Bx(JIbmgCgwzC&4&+3b{D*z+_e|#Z(rlw&KG;> z(n9C<zHYy$<NdEMtAiRek`u$i!luPZS(UulQRCq~?W?LIM0i>sck{B$`_dPsdDvJS zFK9a+_n*C`#JT45#?;edmo8uK?CRR}<jKNST0ejOyi;(Pmq*?%W<8JWt|dz!|B2X^ zBbmSNr<!A98q3l}?`nd-TwS+BjUyvS<0q@CPRxz~bzO+U4;3~puC9qw??@CGIb<*F zy5V<6m4i)5X}O@3RM+jd$5M=5PF>_YeM`xlXj@@d!L@HRvNCU~dIV;C37*=g<SDdj z)hp3OkJZ`lD#x|+$?mGUA@gQlmJge;+r^5&N7qGIMRr>5T_t&In!u82`fG2^d%9(z z!L*Bk=~4gpP0y%&WYpgL_b2O{lV{UUzmz#QWy+_EckSnKUY$AHZ{y#D!q2%+Y??l_ z9LYGw)AduXXq_U5QeHVHBjd%8Fgaxn4Y}>BWljpLSlzxhERTh8vge@$0nM_h$%bu- z#<wS=^7b#Ujb$@&bt|?!?;FHxc{+#j<?l%Ts=F^)LR?dFmS47?!M1RPmip;aH>S@% zf9_7rw<k{npB5;wu?1#se7K2KI4<bcx=gWYRzFi-OMVlT;^g2_(74cc`su<IOXl>c zSqHCs<?;WW;M@C8O?#Ur1?{^R?2u7m!D)C<T*iIt<<soZpY$v<SFU2;Y}v4A5$};> zea~-f{QmOZU$;KFSf`plyicCztLVJpO1ass&|&X)X_rKNj-$YaC|-$PEw<*Kn>xux zl^Y^bQX*YMcz47U?OwX}q|vI=mHT{5Cv9<A{IW^Ps$toxjILYP;tv0IuNKzW>CvN+ z@yj@F_oFHC+qOzYhgEw-m2GclW@UYIUO(aXOdCHD(Z!xh^A03v=`ij{-t}l})a$Z4 zVtb2rZ=HTBi~s*QE7#|CwH|&m59k~{yYWw!)*CLf#SS^`EKY}-PTUDPp{<{n{P9ZP zmrnkC^+Q30J61WGBpFD|oN!~Jq4Tb|0vXlRsWz25?-zORS+#1@{{wYZU*8-();r(0 z@KK3b&1as+$M2s1mdkHkb;kZj+2`3YmT%I^-c`)`$6R-Q<>c(nu6YgDU;hh?Y|>k` zq;$_4f!dspEHii{c;#FIk13p-;j8Cz(PiuHlP5pf>}pZj!tc52RHWx>zlOZVC0D%; zJ#6BA=(N}(#P`8d=FU6U>$U$nbxC*r_qDrqjPKEhii&Tmdu23q7VX%?<eVT7y3Ju# z?!g_uk1UYrU69GKs_9~$`i2z@(XNti?ag=Q{k^?(UEiE_Pu8wA`hM4DUTizp3C(7~ zyN5kGcvY>hyRMhujthOT+gMKJ>S^b4|3_EXD1WgloAO${B)|HwxpztDn?ur)w>!GH z9!D&keR;lo-nLb<!_L+oUob&|Z?4|*@|cX-pPzoL*l;svjz#61A9<WI)^$_#3S%Sx zKNUYS({}pQ)zb~r&#g^KvvaxBWB>W#E=!-8yIQ`!j#n`Kni#hBkM8w9Zw#;17m6#p z*&XhDJhP-j>i^<dAB!B9JpFL%=kxOZpr`8?c-@ZnsqZ{4v!|<l`TpuDM(Ktb1}0T3 zpV@R4<v)*GWBbL9QB82OF2`&Uw;YdrnLP2EtoIjciTyglbKvQffUDc;SBk6`Kl(Cb zW`4+7+bC`A;NZ|54{Wl1zp(L6SNizmouG}~5AR*9VJ5ysUscv_n;N?H_TlO6n>62; zOZfLYm@o#Ix~vy3E>(T@%8N<s)Wkb_F21T4-X3~W7%U;em33R(!){XW$y3f@&wSq< zxyaOdvDx~v=8=vyr!+hwbcDDbeAME3qam33(y7ro;mrb%viW?E)~@+`X8yg^xs$pV z1x3X<m93ktc=*?b&k1r16AwPmwO+OA+Qg|*$}i&#mx%xW_rmsATy=wD;^j{MoW1{J zDk>~yo9C-(YIgSYn5w9%PM)~2&2{_zgR@Lm?|iz9HD%3D?#xX8jd^!v&v<w}-|YY2 zH|y2ml+@ITv%c|%t*x4J^7=l%uxClfdj4u#F5j<Wp|UY{son0oeTN@9OiK+3broRg zaZ@&%-P_Q>;1c*Jal*Cd>en}({LR?(q}X4}GRUK--!kXy?GtS7Y7!wPl12UVA5A-0 z9`H_2MNO?C#$B;m>w9oagzx?dt2fN@EqQ;TouQj`y7!US7XxlDG+v;Q@vity!(Er= zD^spbo~Abc?B+F{J48AAwG@>fhGjKn9a!B}F`?ijTZ-?YwZGmKSG#6yUtOrd_HReA zj=y@H(~_fw`@$|)X`X)g;Ks&ej!7NI#TwS`V2Dm-eRisd<z{zeAZO7n&JwE)J7Z^L zy*jEaslmmWZJZf;({|6klc!6QcL_;I9h*?VC{VCk%2AA2N<cWziTO+#=Y79Ct|zx8 zFWR?FS|$8O=jEYev6VeicUE5gsiCK-q@&Wa@T1Vgd52ZL8h^Yce*DGN?bVyp7(;D$ zEBD+=P***evf%#%xi_{Ow)rmkdi2-%orUjgrs>BY+md-Xa?_U(=9U)NT7cS1LFt=P zUREzzb|&TLr}P<ykImQoejvAQ{#U*1>+4i4pKeb{O*O3jRU%)w)Xpm`Ow9aDT{pk| zAKkyd?lxb3nInFvz(Quqv?&k%JmTIXU*A*n!=USMW6I{lHy4|`PEOv~EAJmsVZq4A zcz?g|>BTz&ViZ;^sC2wmb30^bs(4&`SA=s~*BT{`1q&0zdMi?AUh3lV6MOccpmKx6 z*$5xAc$JKO)wd6-EvVePg73Jc=c<+IdMa;sRfn#fw`A#x2h&vNY!YnGI->WxDcJB) zKu?Ia+nYFHy{jFuhL0xnYRn4QzE^6N+r-<a)|dG_+Igh3WoC@Y^NCUE;n}UeukV)M zfBN8LaK^@1fxCK#`sEh}r&^j#?_c8LdpO5TnS*JS%A>#(9=7KD)vI$iW&VBM9Lytc zCbRjf+j|Yp&4Dg!Dt+^fW8Ua|+wgt2^AaAZb2GGsJ`~LQzs~y1)W3@iq@upNZjWTv z(9ufBIIl5B&-``yJhes6*VC>zobBI|;S$re=uzNm%};XflX!BoP75FNS5a1Oo-!q5 znr^&T)GMD&n~Y}G9*!|GGMZueS#Fb&{G(f%=O^s5nK^UwwJXYNZau!TGB|Q$l3Mby zJx4Y!&gS5jzg;GslB&A2oiFh3aeE;V0f+64%$zdza?TD6MWv>p>V5@jXQfWvua`eR z|DQ|6`+F@dEj9ZmO^e*L=%(XpMctE+q)RtTtl`iT6rI0BRjTIq-A;*uoqKPbj%CSo zEa80Fbv4H+EOw5bt@C!iji$>MmKhycZRfdq=_<vBSGjk$g+@8go~HHV-|AKU2e;e` zaL$VgUf6hSg=3%XjQekPOq(vWd4ohsR8C4}W~(%h-SUvN(;7^6?UJoX)n6zmsG_1G zATRG96C*Qm;>0(1c21tE9scXyO1D|Lx~H`6-f(_wS-NY=$G?X(%QakBx}Tfah&|sO z@$H=Xo$oKUhU^qc=@;J~zTo$Tg=_x)QqX)HmCn!0$*E*vF=PMU?X&Bg*@7iSyjm9i z(<n-r(7Exi)rG~u0%n_CmL5LcIETyb_Ei7Kt-JdUh=e*j9MOolXyPx;#%>a}Cgz;J z*nQusDy!nO^Qy|pyvFHq{%*&lCQY7v^287Q%ggM~-CAQk)8uDv*!o}gL6`qs>)3H= z`u!76PUe63na)4K;>$lX?<l_Z=1GU!SMGXmSJflu>*B-|dV5>ou1e#s)2$gMNqyam zzwaoVB5Qx{V*FpOmq*17zrO3en)UaeM|RTo%s09>9Jem#GLg9XQ;K2T8<Q?i+4als zgmOvo^hveptgc9%czNeko=&+2=W7!}w8OePj;cHec{tno{zcP0{A#*8YCXKC1<qb2 z^HE0VI_s+TQnUW3rYw)Bttp||pM(CMcwMt_+4pyAUmSQ}=KpAZ^R+~g*#h=i9{bLI zmI@X1oV4TZw%Z-Oy{=iEuid5X3|^Ou2uWO=e<ksv3ybutuBGd8L}xxY8yV8$!xVVr zX+Xr@C((5u54f1{syHr4UeWp5?bydp?8krpauC&Ad*|o61q&t|XmHr&k`eKy{Y83n zKfmMl9~LIQk5|nTJR>7{925`tCVJ1j>%8IWi4F4vZH&?d{>PPf)Gj}jtzsa`D9EY2 z>Y7zifJp0kyWdl0=kIGhbB1Tq<jIk{ayT<r8iS~nnwdJ$`=(r(@^ekxXO+v#_nu&v zzvEN%Nyz?C)Zs5LPuh8A->N@(CgMO#r~ZeN>i-izJa}SubHk}qrwZ);S=?Q}tLwpo zgsy4&>Lqt94lVb0-+24u9Lwg~>v~<`YZOw>NIYuid3a@Ue^TYwP#rPv-RBPORrq>A zW7dzmCyq<i%Bna%3J<r9dB5kn_T!IQcMMYO+!l*3K6v<IlktftL$zdqK*vIs*}IB1 z8O#p|{{3R#tn1ycO19kb3=jy2UMR=a6p(y5=<gC6LEmpX9Wz$7Ez4N2BE#!!ekil6 zb+zx>yQRDLT?yU2`SbJEkAL#6r~I=_kZoFEx@kFQ(*>=s8}9uz4W9Jq(W6<p%)RHX zdPJ=aZ2b0Q^$pplU;5tlC^X!>vtS+z=k1AeGag<H`7U?RJ<@u{_5_Qt?v_=JXH_0e zHBI7?TD4bdxgyK*)7?jF9yUK{QV5EQJ9TCCE~V34yEhjbNHqtBPMtTm$wT_$%>Q*& zEqm2Z8FnynNa^(-TE^VkBP($B(d(+uzs<J?Cw^C0t+mM8)w)(_bF6dso)4RT{+Qgq z^ZUH&pXcl2Q!l<PpD=G<)0HVEVe7oqbxYM&hpk`pd;X*v`<XNQjdO3^uK93K_{@xt z2B)VlH7vZ8y+nV$d(f%bDQR|xN-zI&PJ4D=!YCzgcF46?ud-yM&69#foUF^1l)Q~n zN<XWV@W3G;)TE#NWZL0L6B=HX1%G@xy~S@v!_yyyHuvkg(?2~ao2y)XaO>Xv72-?Z z2{HU?<5xL!i?QL&rN1IppBZ0B-kScR!LMbeb-^YT@&16$vq?)%Jykj()Ob4AahmHM zxrqkFA-{j_(BPVN`s$^PyQR3RwA-6rUvXZzulKb5l^<qvtuH*Vdv$2mpM5T~-uzkk zT>QD(q-*>Ow|ZG+>+YE(Iz8A;$YhP$#?JiihT<<KPhz8gKJn04?5-vtmF61iC{%MW zLuf_W%91|5V^2AjtvKTvbDaD8zrN15EUS*)zyEJqOI_{BkKdLgtIxlym06)9|Ncz! z`Hx2HBn8f%35;d1m=^E)`~<_hx=Q2b$A@Q_sI;ZV%R7gfHnDOCEB{tx4+{+0D{5G9 zgY{|pqn6H;v{a+?Z!t#3#-5&@sV6sm_w=55^3>IrOP0=2U3WD*Y{H~J?nXxc4t;sa zKVe=S`}NrGY_G4~J$Ys2`VB^ZpP%ulns%nAe!`S5^)`Rk?=P;s#k+Q$`SjDRb7p!z ze|LA|`+L2HMnaCEA5+qQ-&%aRGc1r%R8+!8&8Dj<`G4J_$B#}#@0C*X|M!pQV|91g zhY$CxC-Ul<us(WXx5uVXa=BLD=ijp2A0<{_6zTX>^7!jXNs%z|qW8~sy12IsXZIe? z;eU4S;Qm7^JS+BU$@TA!o%<;y((R-1k?k%jq0yNg*I)5`tYgbs>$oCV@Vt8n@7w68 zyAOXRFXos$=g*$o%iOf0ZmX<~y887_Y5e<HWz$|n1?R6yIg})_qC{iI9j%KC)A!H3 z8fv88cgu2`?CI5^e_zbl-2Y_DzI`TtbKXwnYyG4(^Me3)q9WszkdO<OzYeK>J#>ia zjGM99Y{oaO5v#Q<!X$mxzcVc9+wigGnxa##+dBEHt!LI+*6cN(AAjz}>(6V0O~1|2 zNKUwJAaXUmL)^vO%v)~OQe)QCbb&3}`Wp7L&2m#79=cumy#9T`<2%xk8<Qk8Jy$MS zALAJH$_G>}ow@Qla;MhZD^q5!iP<}6%M|+!RcDJ;&Q|oDIkVp&`Pk}|w12Hjmefz0 z`Za#p`5(M5wZjdvpS>~jT{k^d($ac%gQW3_TbtPhKge0NWNlTtmSs_9ot3H@m8r=V z=%S}}XxfB^?7zQ$F<VZLx};Sm^5|ge3MQ_K6mtgAcSUoeOoPr=u76|f7PjM5VMb_* zxOkC^ozD#OX+QU}t`aSuZLB9Qx*#m{n*H?o(f*gRI$t-(Oz1xzc7J6656>Zis~_i- z>CSiG6QrJ*Y06eH-|B_3w(rGPe|DOLuKoFzd)6|ug-X8!XT-mo+Z8c6toG}Mx05op zrHZ6u<Z>1{?Q>t2yn(U%WzN6r^))l@TAwq}Fr0SrddZ?cn-`z)zHDG-Xdoe|BA6lg zu_`6xrgOvA($5jHSN%k~56vn3$S~*J)SJJ1y9H(oP7hyr=-smV=>aZ*37-!tomyr4 z#wP64lOr>v;&pi=Lj$i$$vgWpY4S|D=F7SJ*Q<+bVs}rIetz%7rKR2;o}Q^cyPn3_ zf36B!qMw|0OJ~~ph+}8AypEi>Z_m3K)2ht1!}V2lpYpGX`Kq^4lYi2_B2DAVdC9K7 zxSpMvclh%Es#!~3dahk(?kEs2*N-L8WlAbfQ^WTQiW{OXvM~AvUa*m4@pTRgouHBu z>2|?Hq`kSJfkB4v`1j><S$+W@cba9?eO<h>W?P2uy8M`{cNXk&{HV1fMBT|+S4WkN zCFpCSSeEBS)?P8Qmg@I<cdE;;PMjkm=jie3jo7MoUX`_0hj-6sy!U_3{8!gCOj2&m zdfYT4|7YoR{o2;L&Z~#Hrg!`PY?a~aK9o2?s((hDMkZ(8n>cB<jsI?(_>o<0^zYWZ z(*NT3OgKIsC=<EK%)2ZibJly~z_`HH)w^b`*svk&>C)&Ln@!gbcYB)&-CZi}?%nj_ z&e5j3n#o2T9*Z1W?|%Q-%V#<{K5KdM3{hSK2^P1ny=j*lnL<Kc!?Mn>I0;CtT|GO0 z-^~NE<#$fLy1IIX^>?>>b-#6kf-gtxs^Q$6cJIKYRPPz3e|bUm{Oj~{pRDy(|F$>I z<vSgwvv%T%ut~Efoto8ib&1N-EuNQ*W}oc{)6Pm&b=$nNZ-+`hd!Rs#e4(e)+Ku0T z@jP%7*)7|Aw(Vp}R`{h|3hLAC1erT8?h=00sTk6yXm{fI)H|vw^UgW>->+0{+re<( zpk(=h2rEJV6}QXxP2Q><*1WdXD34pA<eJTq3mhTsn*%S*S-1J%!yF@%8aFO3#gu0; zM-D8QwlebHtN3Ea&zo~sW^ua<)biR}7U|df{dn-kW9j}W*YuVwH7$;MTt9nz!D;LF zn_u}bsvlB5$=$o)h}adi>FpV_+wa|7TyQF(d}V3bs%1>J?1?seR$r`~9`5R>pmL;X z^_rFk2d+t0oId5XVpDjq>g>YPOz$qmoI0JxBJmZtHJXpQ5awQtrg>akw_?cu|n z&M)qp@@x)#B+uO*oLBz&;<h=PCrwLm5nv8T<?j$*w=S;sYsRKcn>@U{(%#<E$=jXF zn0;-HVrG@m`+dLdkM-?r+i&+(CE2b2>CNZ!694Sr-1Fhm=NQ{pS^s`rnH*zYD&;** zM^ROCD*v^$s=B7VQ&(U1^z%yeJ@(4XRJi+S)7JX>Ri8f@w6-S;xW-RV>0xt@HSh?! zYnmJ&aBh)Oldy20Nb9#FtT(qTVz&A?|8<zzt33yo3B=9awdi7H_rX)$!T0R{cZ9sQ zXJk3QbLOe?`$vi&MRdE~RpVAN>ziP?T_Iwv?&gmxczHjrnqTtt`TV6>>8k6B1w)x{ zUkp8{Ua{)86pQal_0+9bmxcb96<JUxbG%RXvA%qr)4GdJfdvwAfi}PGI3%WC^PjPA zRXK;#)-%zs{f)oBl1On?Hd>Kc>SZh`=<4vb>ELpvTd`V8uX5e?yVcprwP;oIjaS=3 zqN3a~GBnD4-*=`=(0KRg;Yw528%)d*+jZL`7eBU~5`55j^>?Ek(H2b%t)hC5l$b4I zL(Wb#7EPb)9V)u`u=mSd%^s5&vr9SOtyYf-s58sE1IhwVl~*lEF)}uuX<u)bzvm-c z@G_s&<9+Wd9_jl}nmO~JbA82(o*vUb_utp~r=_X&+kZ=stN2)XDJcEZ$>sAWOq%2M zYnA93pS|-;C9^&JyfTFgXZWZo<?ZTRw0xe@nsEIqn~YTK9|^G@R8PISg<EujlCq{< z-JBiw|B3Y<zr4<D?diH#+cV6Bi#{{?#0t-vwjyR-m1C)uG^=xt%)-z4?imY(=bT@* z^k<CBEUvDw=l=rIpRZEf5H+16#6CJqSN+PL_vxn}&;R&RLS+5>e{COE-(tPJ#l-iq zgQFsQ>eM?Oe0ArRrhhyt9{=IZr;;Mxv`<clJ}CWA(GFc}EhREjE>JdV`J|&P!F690 ze){!ZVBlQs=^&6{)WLKiog?U*pUcBFR+5rQPb&NrrS0y!eLBBu>#n;hCGYzVW~e+q zU0bumw0--&m1=tXxL2+Ebg|r0=G@u`{l)DDtMWzKi?nXk?U0BJ>v%75qV({ifNY*m zt5z-4l2U8-35l=_ly%LS#$A3;!gN*GC9kBnx3;RNs(w6Yoj-BbtW)!BcY|6>uD^<w z`OG}k_2sG0+$!1A;X3K3rfBL!?`xT_|Bp4k_OEENTmQ$Mo=eW8JY6NKqOQ6<@{$ls z<BRO|uAIC}*DPQNzP^rQQi}qI$D)pl2@XQ8^H*tjN?4aIS+hezSE*^k$H#@c@4mhD zTz^H$=eIj;_WccCvFQEl`)6-;|Cj#8BKodK?$)Q`l!MG#F4B)HN}lX5sFJn$@HTcw zVFQ<7TZWwcPp94Q6O<)-Tkcg^Kh59U_Ih`&?pn_I8?MzWEZnZ=v?IWNQk$9X+J(HQ z<3&TFmkDJFBx^l?nfH=~)AX40!kJt28E*T}d-PJ@EMV=aklD;1ZaE2tE|triYgO8{ ze&4UIKN~c(a?Ip6{_^gf)#f?v<&qPBlD?b>yMA?wqT-viYo0y)&i}E0_U{K@GG_2H zZF*&WEq|^Xi|^rw1<fgkvV?xV?#i)poADy2SU@TzuhdRUTkAr|)Wxc9NllA1R$F+j zIN5tK#p$w1+?gBaO`EL@Yb(U__HQend#mO_h~?>hR$WoaE!RzWBLi#X6%I0VvHR}* zaImpg+PvWT-0qX7P9+`dk=*n1ne>@irOfhmTlyp~Pmb7{rF!zD=9;+8T~C&XgsqM9 z^eWO?9kzV(q&Z>cPt&iin(8ylV&>G<VH2+TO%nStC;s>Te^&Q>XErTZRnpb%yk?C{ z@y>t{QC|^3CT7DMIZvidD_XUpW1)O~&)vNI@2S;#9=3Pp?4B2V$k9d6gmur;eOov1 ziM)NbV;BF)7unChdBwXGuP!<fxcQ^h+zhRduxZKP!-Ny|aIDtqQd0aZz9{p-pJ%Vd zY?EZ|nkKZCA7JG<d9A$C;<VPJWeJz|a5S}fPTI&N)VSkA2iu-m2h9_2B^+4oSz+)X zP<7wR7jfq$<aI26W<S5$()I0^*1`)ua_1Jy?TXR+H*H_nT0Zfm4=3JO+nDYda@AmW zY(;8(`|Vw&+H(Euo>Mng?7iXYJXiMIf>kWlcUron_RE>K$xReoo7Yh&%WOHZyiL36 z+w=3M`HJeJ<UgH$T9viv@Zu!npHmphzdKrde{;y7z~cNm8>giE9Mkr0?z?}_WP$J8 zg*&#)SaCu_%<o;#)kQ{o!+H93PA~MXxjw71^~1|P<C;&ge2QVpVVfH_Wr<()%U@jC zVK;kPO9Cf*pi{8kovG<hPOLt8=1j`3FE97}{T6*@p6&8u#`oL<{<&-|`sx+*m*ezv zwu#5OzC5+FU)K{FV_s@?`to$c{CB>8-oE#rIA_YGW$&Jr?G|))l9)8{;J=@rHLYr9 z+}L1n=+GepPocd2_D@}0MO@qynVBUgO>GqtYT7+lEo*!2mw**BU+b7i*nYXvBlm0K zuBhsJw?Fk}-*SpsxczRQg4YfEe;@8BM_%tyF1a}O!YNggtgDBkJTz{6xE8+Wyz#HS zOE+=PN@MdqthVE4a*mi`+oY<e*S9SF^GA<gZ+f?S+&^<`Cg&4xuduobyz0-$(pt1g zK<a_CL}zbr>iK!LN2ZBAG@7+>S4_sDhK@Fsju_edQ={E^7CR^0wzo(YTKx0N?Ykx3 zFHT-MyR+oIgwOH~4s+y0Jq0w@h8ePPYs_j(+ps}<fqDCWE5GyS#KQJ{7yN$a<@L18 zz248)iHM6An=I#uG~V#g!E)~IGS^8i_opcC=e&4Tu2pM#&$7mg2@b0_GH00{QI%8? z;7#CR3v>>CD?VpFuk^mOkB{bmez*I*QT8?7eS!O*gxGhkYTFRD^t$!3^-+#lMN%)d zr~m%5J#6iYkB_4qy@Ir~!`J2*Ctf}DvLuO%U;X3e^BU*QsMNm<+Eo7jSafW!p}~X& zjLa{-oQ@Z=OlIR-{&|tWwN~jzYd3b33CEpfjx%73ykOF6;LYN;oOk;x21%7}|08?` zY)J*t1*iNzG^H3Niu8!rPCfqM=k~^f4p%>=`mSniyqqqu=|P!^<Bo*T)q3xFZ6D1J zaXc?RQ(uCmwR(}A^1X;FH(u1~Wxki06qc5z=I$z-dhnsfS2nJi7S)qnbMKVBlP%|+ zwahT*hCxbX+VgXBTf(O)++cbkAnyLCfsx0j!+n+F_iw9qa~`(d`2I#_+1yW;^h;T? z%f$jCo-D{-F3{tq94}uI6qTp0<f5XeH$}O<FK9tX;rluJN`q(IQn9SK%fiOG;bVte z$#uODZXv-m;Yk|Tcz$Gg)b(x8I;*jvf5RWUn2Z@dZg>1zFSB<G1{6eC#TWcrx39`1 zf6qs&>+$y8OHWUmG;P+i?K-}13ptH1r(HYi8M7^iGc)u0^_6XQ+uL8iz9V-jeBFaz zGdEX!`<d?H>z6&fs(AO^eXU&TeoLO0URMO|L0Pm)t83ANj};o)`ukVZ{%KNKyE^IE zhZh~sHCKG|z3%zuMYQ>f^osa@C09Q`346|9pm1vYgNP6Zce%Z<BK^W-*cX(i)c0Ik zdULsc#l5o}Y|5hfd&1t=T(~36IkP@`_T%ePx3)w%$INP5u~MhwM;qg_%V&kAt;#ZG z%UXEv#lxKiFD@uPdBDLE`n6Z++LQ2r(40JW*%-edwl9yncHFQ^e!U`av4m;X6;)}M zm-7YO?&nFx*X?S&6EyV#-@_R!>=Pd{uJB{;+r-89PAj4Rp!cV%g)HnY+oEr|wzihM z5IDNknTd0wsPV#VhW{r{EUbRt67@OhF8kVR*TbEytIxjQelz8Ww2c4HP~+&mKjtpd zP*LMc{rW0Yh0inP>#VChl5<Y1GF|<uuhUs5a%+`nr*qq;s<T-_!s`=2vc7woOeM2- zB)yor=48a-sm|>aC(b-LHJnG;SbOplNzJ!W`LmWiEZSMHGp0s<N5a<vk1qusc{Ozj zUjo?N_;XA4`9E>^<-+$TE>17wn+(h3nV0JS3Y+v^*exb(lOOlnW!<(57eCo7F|~dY z?H18z;vLbo>eKR`wSVqkSs2mF=JIh(Nrj&1O80)b5E<LH%Q<Qn;#zNK99f|;BSl{@ zOnd(vlfH#>llT9>7$2B$N7T^t{i?vIK);(anGUUWtNOYrLGHrSMN6^`*(cOm%ogw# z@Y{Yy{Qffm@%z%<H=n4png6-^LwYHr+hoS8ua|AuFyY0E7hx;cZPm`<k+V5+{d`tm zXS48Y`SzF_g&!6i{Bz^O;`?h%4NOIS)J)o&7esEpB@@4w?WP-NMa=_8H};hI#&Z4P zPha+z1-<+5DdW=AmZ-DORdpI7H>XY9P-|VidGpEQ>Vp|dii-0l*8aX=s`Q6FGJKN8 z1;sO7?FO%1{ZA)t6G-4p`u?z{Y&x5;%pKm%uMWlDtB{)UOuz6dXF|H_+B?cieI$jt zLLRd%cq}yW+R_{L?|(ZTD80V*w)M7j%fC7g9JpDm;;UZsi6@@8b?mTl+s|j^bB`}m z<zNbrt5gk-t9<HO+kRRyFfh=krz<IGcJiwQ)88(ga_+0r4x0~G+j`gBnSI>e?v~@! zyDQ82Kub2to2Ge3H7Pvcc;n(wSvq_BXRGx~LN_nWb#h{guiM*rak1N?bw7pHUyt5? ztAS6}-t*F>i$)T?Zd%&fmT$#A`0U^=E<ESzd;Vb&<LL>hGxyd0{`B*g{?2E!vR~ZV z3aWu8pImY~u;j&(rHd;$nhtz;c)0TE)bLxi2mdX5u=Zw!bD#(h8*?)||Fg&a_GyP& zI8AqNTavK(X33*V3nx$OduEt*MT3n`rsMeIoi8$X#^~Lv`<<H-={8BF$4&WgJAeA! zU8O#=&3HH8JX3l-w*6|>)lTo@{@q(jZhM?o?0V#S^ZZ)PD|vsHXn4)tqRPRv*u7uP z)^_feEhau{!ouo)Ip1UbOJ4kNoP6!u+uL6+{a{>F7Rev^Eq7LwcMOBDy5Ez(-|wfN zn`8Op$rFQ=69PSMi~VA(>ZF#G{`ioX5_!%02|HW;?69?6FWw)q$h~C}SO2$EOeey@ z(UI})uF}hMWlH~;c&uKvs!RO6T=_|%b?ert85jhtZ~T1VUBSmk-RW1I>rFR`ZB9FT z=xI^mecSyh7pK(uNEk9~URl}ctzRu`&vnU2s@Frz`?0m&q?O(uDrWhu*Zm<l>*<nN zsab!PuDLbyD=6e{Y+PLW-D<90UiFJqqyK*u4zqv#q&u@{<*9$aoASE;zMM4eWXh`B z?C&QzT-D31ny#I-?9COgh|0>!n$Ks=&&;=<e>;Ew-0-*`;^p@(W=?RBUZjy^Cb@A| zkH)4qw<RM%?g+cI>q-3DU4Q?UY+>1?6C4t9<jj^3EiG+NKfkn#i(GBKEw@jcpmMBV zqT_6qn*d7>8|PxjOQ++G_X{OWepI%2L2OIGx-WWe7xeBk%&{zPoAN}3?R(F{{2HF~ z_TOdHCU;i9+u2^e*=#|kl%pB<LB_B(X~IcwncD3;Htm;bTGoDArK5M>0h7xoZd=bW z-rMamX?ixpvorI~o@o4d$2wn&U(f65&*$?OZ`w4e`u*<yx$S<NYTpOi$o*uG`ZnG9 zLg()yPT$q-w^TQjnf-b6yGJ+V&EF|Y<=;O4(3$i`%7Nvw{I2%bR@YWp%lXx8nDX6h zuEO>+Z=<cx3pgB?`ztx$X6EY0I$Nc$KGwW-zJ2xe&4u}LQ@Ij&mVIv6s57HpR91ib zP6pH8Cw+IV;@`fsCpqB#x*5G}ZC_rV;@01DK>ptc_BI~5Gi`6#CFb5>?>>3s)TZkT z#gC<CUcRK4nVvIep3~Kfwr_0W8g(ylT)oFu#j~JN({hTh-_Fhh6B1m?Rj2A%|773( zA#R?>bN6Kz&$1LfOpE*VI%<<`gM>$jkHVzoll~lDz9K|V{*sVuqkFyK?9A&ts&-~w z7ZUEjJIb%?rTTT>{?AvZzrMM>T;JGz`L>O3N?-h#IO*EF!^;Cgrykt9d+XoD*EDP= zzWB)f^Y#@5pLC<jA1`x5OkbslvEBVDpdZm=cQ>qf!|(n7pWNSV`=C@YTWZDCH!<G? zZ^{{bop<bSIgk3W5as%laUm~18M@5o5!$~iRf_GTxsk@TA91}>m%6|It1_RTbL;Gz zjhiKnx9Bs51)o0Q;jFGJYcF;w>))|YTGr=lW*t0!HTt5<)M$U7hu=CUzb?znoLm*b z&Y0|A;C5iKsi8$cb${fdq;$6YwfaXg^`DmPV^`dxJ~`c2=^)3fzbew3Yw!L2fB)W0 zclXezm480pTfH}E>efv{7X+p`Cq*c)kO&Z)?OMpV)G=@?+fFV92Hv}%a{=6|u1qXG z_Htvt^Y@B#U(U=adv+$Udd|k(Thn(%FK}$lOc7*}W)Y2a5s+r$<yA~k<n&Yx^~~~I zdT+M<BsP_)0#VaM{@6XgW54QM^t<1oci->6UwwbKxugA&+1>UJd}ez&oikW=X6DHy zHpO>3rY*}-xpBUF`G(DR!Zy!5`M7IGZN+h?MSks~o6}z1Ej{^SVS(-TEhTpot{+_d zC;a8_H=a7GmliF)@$l^B*DwFOT3ybQ{rOfWDSwyvt{alg+uDL<EaS@Gtv*&I6|E$D zS@`$s4`q5H4{ghYs;ksq{*!vOif_}eQu}A}b|+o@|M=Wmb);h|Q^Z-dHEF@`ldIP5 zVq$sd)fu+t|Ht`SSrLD(uD2*W?ODQ8qMqTtCPeMZN4J+zYGR^Eo6GM1tlo6>Ji~JC zr-xEAOBSb}HL5By*2)x~|G1Yku<5J%jZHbM(x;_wem-Z#)n<3BBjd}PM`ls~nD>0S z!x7^f|LK<f`ll^*U2lKyxnpSh_SoF%&y_Zcx9rHvteh015|Oi|-6~uqvw4Gc&)S1- zOSjHT7QK4MXv6Q+d3LK;D@~eqazV?I{eSZA=N{kKWve^ibMo)aFY8ZVSX?@#Qn|;= z=Md)==FXijEerzYN<P{3phdpPw{bJK+no&^S)7HZTy29Uoj%DB%;q+sPlVB#(f4{r zCU;O={j$?`ihJjtHGRs^<9#}%y!LGBYLlwdnq_ZSAGm&RXZ;oTm;Y{^n>JN+yRWnF ziKPa6m2byib-2J_8{r>Xe7yXm<vZ!>Z_a``53BMr8AWz}x*>7PRYS2wkj=F*W42%6 zt%OZ?Po{sr{dnzC3su?Kivlm+;%PhRuza?tdVh&+*%?6{+4t{6_k43S&7G*A%V4tM zqka5S;j@PxxbHjO)Z<mRzr@(v@L|bqgQzHuk}Ai~4{l3LUez$`&=1MhoZnv^qx#o9 zdKzB#_*-Z|CIhFdkABg@dnZK0-S}Hy$8K>;dp5Dmr1R7fDTBt{s*UcO)jr;t^0H#m z-SqFpSyI3Erb|qHV|lxB&4ryCGQ=--rT*ku<Y<3y+5z*WIybzG*P67JhE%gD=bv2m zHiDP;A7A8Vl~lu=D{t>uS4ynxVr*;L{U9zb;=!Z6y}vDDLL23!XC6LQ@cyr=h*jPP zFYWW0oY(s^j^5MIx1KvC$UJnJlnC#icVd36uRf^k+`rMkQG05+R==Uv$>zwb9WIM! zguZQZ7dvM?^WxRDRbKNR_D-7DRby-{7k{E>UX-BhTfIx&%QmdY@Z!IH=YX&7MV*IL zVr#d!h#%diD3hnBoYc9%YT=fbBBi`_mxAxyw`sW-s2HPWyl)#vW|;1=jlFp-K0C6S zR5yx0+7$m-XkN#By9A!ueYK9M`=u@{ICk-XetGUA_seO=SBS7J{8lF96E*!N*O5gX zwjwS0&9_2NCM_5I`S+!~FT1RWFpIF$p7`yPf2sYynR}?pI?a`phv}_g&MLR<pBG5j z&iB70>LXO`SvcoPT$Wf_cWdR$@`-Vio06E0@@)0fU!NCWT{heQd`PjomzadW+ch!| zGejmYDl@L1_=oL!-aC!XW|ejAD>JLM@l5XKiri&6`_>9^6AtUcIV=7)vG?~T`_##? zt`pg`rcCLgM%dEBQgRtqhd&&-a^tvIcTukHB84M+ZTEB>+9_Kmmg1+h*i7^&OGd!d zf;RcLF>VSs+@@V+WSb#6^{3^}gaeHA%tt$4)}EGa_1pY#|NRHkf6u<S{=-hC(C8l@ z_vb&Uh<G<)l1l8?X<`SqOg#Lv;xgm4t?yJaxE4n|j94&fx|#0t`^)UR@+5L>3px(n zse6*PWRpR8#_{U*=~o2hk5-rP%jeua-}p(bsm;sjn8PvunWwfScFMNqtxx=_z5m&P z7p;FDr|_#;9m#lY{r*#(uU_%I9n-CibxR^|9poq|c<W{7JL}Y=MJ!VSbm#y7CtN0@ zxBQOuu?sOz#P6S7e3|=0iQ93G>l=$7x3BrXNhtn`+qo0FD~hghZ2D(&*O&k2voB6= z*{5$-)hJau=YHwD%CS^At|R$eSJ-jp1>*M)rkQ>IdvUYHmc?_NB~vw|Ostu5a()Rt zx00S+^E;!I^}`hPk3s)p-sx$*SorA3FS{cjb+s%0Cd)JD&p+@uc(bSB)}o~MVPSf| zd3(9{9Zz<a5m>YQ%=(FQUmr_xI8xp5{a)Ph>ECWgY<c0=W^r}K`L?ZpJ}TE$YxMs9 zUnY>Z;O&`2K9gONmM<CQytWJL-9NkOYj%aUVY9gRB?DLKpCu=6ugQ@-c4z-Aw|RAQ zrh1!yvd`S9Gw()sjp<CqzYi`mn{MIV$(cQ0Q1|C&?n1q&=YJj^-KnWP_4)7fkLI76 z9y~LOUFu4dROGAMUfq@*x(Undt{&enS2>+A^Sq&fwXNIH&Qd$s`|{U5f9{XgsLN6O z+-7zD*Y!DXELUu`PyabBD2+#|_jGkvRFK5Oz)ZV+z1yd~U9_`6tvmhi&Q_7fQA%5L zV(TStzx6k=3S{Kbu~fCO{=X;JNZlYaUo-pEtPFk6Wlvx8N5;-Pd*}K7!?K=Q6OQye z++FcD!15pG$rZNGmQPx=LM6?Tqc*bH-io3Bnz+mA@B6nZe967Ii{-RI?U#a8v!s7S zUS_{yu}4GggC-+~!|Ij1?rU3>zi~}_^M8hXy6qk7ZXwIF&v@N0x}ANx@L(VJJ^qpj z)915Tugd7?aj>kN6&7vu>U#E%lkTElc0V`#_pDFnjaT_vj^+oQ=YJlVezrL|$gsS4 zt=odO<ha%z!ILv?@6EYiC-nM5Wsj##dg0nK?iS{j+k0y62G?C-ID25p$`=zE67Rk^ zs{Ja7pY@@T%j)meSzV_dZ=W8p_v-2YTi+}=cc*1h=^AD)i9=N)zJWK^$}d$FP&$~m zd%?XD(dpYx{jIt9Ch5%$nKy=~7Q2@Qh=km-48GPOxF+@KGnIF9{)-g1sV(?g!J9kf zt+w(c>#0uDrHZYUgU+k3HY?Dml&LpY<2<^(zxHbw*SpgPs_s3KR;=e(<EL|0z52{{ z&4z`-A6gH-d9k6*E&hVe#&)MaMV^b>H_p5J%kgCGnZlmq!d|Z?9Ps;nd7azF79W<y zxj&+v?&>6$)?NA-e*My_Wri9z@03>CdZf<e5BfFH%UC^I$%36vF*<wMB0YyMNl$x! zScFL)G**#L@5wf063wZo*35QZ9QozR+&eje9VTHx{#?yL=d}H|ObuRs*kbdg4JKdb zyl1&^IAng-u}2>t1ih42Hc(g`Fez`&#lzf%H`o68`(x$|yU@s&w;fwoGAc8f9c>b9 zoO$x7iu#ReL(|@i7nuS=u1M&A*=8=2^jdT3!OfpMa#lax5w7_C-AWrPp}4rMlR_o^ zKiqZfd*}ZAR`g2lj3rfXGQ_8-KGID+I*H$MnsKZAop_IBI}g8lc`)qID(2}wV<JoM z7k;}IDN*DvwXFL|G!L_Kz`=W2y?fX%ZTu$ctrmQl!+eqLpJfF%f7G4yxm2e5srwcG z#@o6+ep*R&iJZ>Go0H^spZ4CZ_3li`n~OzW*|#;$Y@L&S`_+wKyWfUX<~=^jB!022 z_R5RS9^b8#-po7}AFls!`TKQ>&u6yJoUp1iK2TJ2bJahMm5#4h&fT-M#{BJ3{*RCD zGJ6D^o9eys#>N+GS(Ml!L<|ni`H>_3wDWMK%Jr_Gi^X<revcpS{d3WzV|o6z#a~3{ zP7q(#`r2*FzN7Xx6OA{2IM<o-)>FyexH-{0wS1jIa>;$k8pnBC??)_4nY!uQ-O?S) z`kzh<>Ahy0TC=Z~z1rEi^3lq|C$maty<VMRvb3;x5m#61A5VUx-M`HDY_E~N$^AZQ zf~{Ni=_d+@1)usia<HX|EHe3%D7^mvI+5&;JkP{#e7Jh`5wnRqm!zKXwI0PMv#)J_ zxp{F)uiugC0%`AWSw0a4egD#!^`_kqJ3H;|@{>~kW!Y}OwDwBu$l|>2>;3xn--*7f z4y`Fvt}fpbp&SvV6)g8#Z`#@0H#Ys+zNWw7<jcg2hqiwXA7LuW<&t=NWx8p?k{;!| zS2C5arg){@_dYs%b!G9^c6qxPk5jF@dRNa*km25aTB=jz#zvP{H@;nTe8rn^-YV{9 zao*)Kp8gvvYPi&nCp<eZcXs`?wGW@pWh*<Mpk{B?ztTK1kcYYIO#bsP@A_|~?w$I) zd$QqIRcp1y?M^a_Yrb9$KlbC}W6%jzKl^90hQB>hS8trR{q?H2oEJ~r{-w^Hn?7%@ z$2-w^Dt1Bp+vn?9o?F3MJY&kW?P*K)i)|EdIeq<7*OfT7@{B*Jzhj=x-n;g`tW8kO zoB$8@=TmDEw3@zeIdtRZW{LT$z8(zgwfUqFb9PtVOxM@1&Et3EeETrz!um$nz*v#H zR*$q|R(JL^8K!*cy}u*>NSuIP_}i$BE7u-YKNeN<sH=Nh$eir*!&7c>f9#AB{NyFV z;@B~Nn%FIe2M;W77ntgH>6QP^PUBbo=Cr3P%zo{x$#dnE_AOgo_9!EpThLZ({{d5n zB>f{>GtTZ-Z#;kR^@fgVH}zw-3NQC~vtClDT5(=r_q^KBMG72Fe>%jT`E)iZa1^RU zH7Rf?p%5JzoJ|S{Vv#CGlLDORn5Mwd1SdXfM>&Fw`KTPVt9-hPqd?0K!L_S=wN<#9 z6pr*~tgYJb2C**eTx~a0(AK7Y6-1>jXQKi~p=MOqA`cT5#|hJ5Mib|p0@ok)EW)vV Vm%d)pW?*1o@O1TaS?83{1OVc~RxSVl diff --git a/sflphone-client-gnome/doc/C/figures/voicemail.png b/sflphone-client-gnome/doc/C/figures/voicemail.png index bcc3591335341d322f706495ba2f5b7fb1003855..77a4d4872ec4649ad828ae81b88238982d25c5d3 100644 GIT binary patch literal 17751 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 literal 17558 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 Ib4q9e0Nxx=Gynhq -- GitLab From 60408426a35e76d00d990434365cb0edf3787873 Mon Sep 17 00:00:00 2001 From: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> Date: Wed, 9 Dec 2009 15:57:50 -0500 Subject: [PATCH 074/188] [#2402] Update russian translation --- lang/ru/ru.po | 149 +++++++++++++++--------------- sflphone-client-gnome/po/ru/ru.po | 149 +++++++++++++++--------------- 2 files changed, 148 insertions(+), 150 deletions(-) diff --git a/lang/ru/ru.po b/lang/ru/ru.po index 18045ccd61..14b3aa5dd8 100644 --- a/lang/ru/ru.po +++ b/lang/ru/ru.po @@ -8,16 +8,15 @@ msgstr "" "Project-Id-Version: SFLphone 0.9.6\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2009-12-03 10:22-0500\n" -"PO-Revision-Date: 2009-10-26 20:46+0000\n" -"Last-Translator: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com>\n" +"PO-Revision-Date: 2009-12-08 20:46+0000\n" +"Last-Translator: Hussein Abdallah <hussein.abdallah@savoirfairelinux.com>\n" "Language-Team: Savoir-Faire Linux Inc <sflphoneteam@savoirfairelinux.com>\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%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" "10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" -"X-Launchpad-Export-Date: 2009-12-03 15:32+0000\n" -"X-Generator: Launchpad (build Unknown)\n" +"X-Generator: \n" #: ../sflphone-client-gnome/src/accountlist.c:175 msgid "Registered" @@ -29,7 +28,7 @@ msgstr "Не зарегистрирован" #: ../sflphone-client-gnome/src/accountlist.c:181 msgid "Trying..." -msgstr "Пытаюсь..." +msgstr "Подключение..." #: ../sflphone-client-gnome/src/accountlist.c:184 #: ../sflphone-client-gnome/src/sflnotify.c:131 @@ -59,15 +58,15 @@ msgstr "Неверный сервер Stun" #: ../sflphone-client-gnome/src/accountlist.c:202 msgid "Invalid" -msgstr "Неверный" +msgstr "Ошибка" #: ../sflphone-client-gnome/src/actions.c:98 msgid "Using account" -msgstr "Используя учетную запись" +msgstr "Используется учетная запись" #: ../sflphone-client-gnome/src/actions.c:104 msgid "No registered accounts" -msgstr "У вас нет зарегистрированных аккаунтов" +msgstr "Нет зарегистрированных учëтных записей" #: ../sflphone-client-gnome/src/actions.c:285 msgid "" @@ -127,11 +126,11 @@ msgstr "" #: ../sflphone-client-gnome/src/mainwindow.c:73 msgid "There is one call in progress." -msgstr "Звонок ещё не окончен." +msgstr "Один текущий разговор." #: ../sflphone-client-gnome/src/mainwindow.c:77 msgid "There are calls in progress." -msgstr "Несколько звонков ещё не окончены." +msgstr "Несколько текущих разговоров." #: ../sflphone-client-gnome/src/mainwindow.c:86 msgid "Do you still want to quit?" @@ -144,11 +143,11 @@ msgstr "Ошибка SFLphone." #: ../sflphone-client-gnome/src/mainwindow.c:392 #, c-format msgid "ZRTP is not supported by peer %s\n" -msgstr "не поддерживается устройством %s\n" +msgstr "ZRTP не поддерживается устройством %s\n" #: ../sflphone-client-gnome/src/mainwindow.c:393 msgid "Secure Communication Unavailable" -msgstr "Зашифрованная связь недоступна." +msgstr "Зашифрованная связь недоступна" #: ../sflphone-client-gnome/src/mainwindow.c:394 #: ../sflphone-client-gnome/src/mainwindow.c:416 @@ -213,19 +212,19 @@ msgstr[2] "%d голосовые письма" #: ../sflphone-client-gnome/src/sflnotify.c:111 #, c-format msgid "Calling with %s account <i>%s</i>" -msgstr "Звонок с аккаунтом %s <i>%s</i>" +msgstr "Звонок с учëтной записью %s <i>%s</i>" #: ../sflphone-client-gnome/src/sflnotify.c:115 msgid "Current account" -msgstr "Нынешний аккаунт" +msgstr "Нынешняя учëтная запись" #: ../sflphone-client-gnome/src/sflnotify.c:130 msgid "You have no accounts set up" -msgstr "Вы не настроили ни одного аккаунта" +msgstr "Вы не настроили ни одной учëтной записи" #: ../sflphone-client-gnome/src/sflnotify.c:147 msgid "You have no registered accounts" -msgstr "У вас нет зарегистрированных аккаунтов" +msgstr "У вас нет зарегистрированных учëтных записей" #: ../sflphone-client-gnome/src/sflnotify.c:190 #, c-format @@ -271,9 +270,9 @@ msgstr "SFLphone" #, c-format msgid "%i account configured" msgid_plural "%i accounts configured" -msgstr[0] "%i аккаунт настроен." -msgstr[1] "%i аккаунтов настроены" -msgstr[2] "%i аккаунтов настроены" +msgstr[0] "Настроена одна учëтная запись" +msgstr[1] "Настроены %i учëтные записи" +msgstr[2] "Настроены %i учëтные записи" #: ../sflphone-client-gnome/src/toolbar.c:38 #: ../sflphone-client-gnome/src/uimanager.c:693 @@ -283,7 +282,7 @@ msgstr "Автоответчик" #: ../sflphone-client-gnome/src/uimanager.c:117 msgid "No address book selected" -msgstr "Адресная книга" +msgstr "Нет выбранных адресных книг" #: ../sflphone-client-gnome/src/uimanager.c:137 #: ../sflphone-client-gnome/src/uimanager.c:756 @@ -292,7 +291,7 @@ msgstr "Адресная книга" #: ../sflphone-client-gnome/src/uimanager.c:279 msgid "Voicemail (%i)" -msgstr "Автоответчик" +msgstr "Автоответчик (%i)" #: ../sflphone-client-gnome/src/uimanager.c:342 msgid "SFLphone is a VoIP client compatible with SIP and IAX2 protocols." @@ -313,7 +312,7 @@ msgstr "_Новый звонок" #: ../sflphone-client-gnome/src/uimanager.c:720 msgid "Place a new call" -msgstr "" +msgstr "Позвонить" #: ../sflphone-client-gnome/src/uimanager.c:721 #: ../sflphone-client-gnome/src/uimanager.c:979 @@ -322,7 +321,7 @@ msgstr "_Взять трубку" #: ../sflphone-client-gnome/src/uimanager.c:721 msgid "Answer the call" -msgstr "" +msgstr "Ответить" #: ../sflphone-client-gnome/src/uimanager.c:722 #: ../sflphone-client-gnome/src/uimanager.c:991 @@ -332,7 +331,7 @@ msgstr "_Положить трубку" #: ../sflphone-client-gnome/src/uimanager.c:722 msgid "Finish the call" -msgstr "" +msgstr "Закончить звонок" #: ../sflphone-client-gnome/src/uimanager.c:723 msgid "O_n hold" @@ -340,15 +339,15 @@ msgstr "_Удержать звонок" #: ../sflphone-client-gnome/src/uimanager.c:723 msgid "Place the call on hold" -msgstr "" +msgstr "Удержать звонок" #: ../sflphone-client-gnome/src/uimanager.c:724 msgid "O_ff hold" -msgstr "" +msgstr "_Возобновить разговор" #: ../sflphone-client-gnome/src/uimanager.c:724 msgid "Place the call off hold" -msgstr "" +msgstr "Возобновить разговор" #: ../sflphone-client-gnome/src/uimanager.c:725 #: ../sflphone-client-gnome/src/uimanager.c:1015 @@ -357,15 +356,15 @@ msgstr "Записать" #: ../sflphone-client-gnome/src/uimanager.c:725 msgid "Record the current conversation" -msgstr "" +msgstr "Записать переговор" #: ../sflphone-client-gnome/src/uimanager.c:726 msgid "Configuration _Assistant" -msgstr "Файл конфигурации" +msgstr "Мастер настройки" #: ../sflphone-client-gnome/src/uimanager.c:726 msgid "Run the configuration assistant" -msgstr "Ошибка конфигурации Stun" +msgstr "Запустить мастер настройки" #: ../sflphone-client-gnome/src/uimanager.c:727 msgid "Call your voicemail" @@ -373,11 +372,11 @@ msgstr "%d голосовое письмо" #: ../sflphone-client-gnome/src/uimanager.c:728 msgid "_Close" -msgstr "" +msgstr "_Закрыть" #: ../sflphone-client-gnome/src/uimanager.c:728 msgid "Minimize to system tray" -msgstr "" +msgstr "Уменьшить в значок" #: ../sflphone-client-gnome/src/uimanager.c:729 msgid "_Quit" @@ -385,7 +384,7 @@ msgstr "_Правка" #: ../sflphone-client-gnome/src/uimanager.c:729 msgid "Quit the program" -msgstr "" +msgstr "Выйти из программы" #: ../sflphone-client-gnome/src/uimanager.c:732 msgid "_Edit" @@ -393,19 +392,19 @@ msgstr "_Правка" #: ../sflphone-client-gnome/src/uimanager.c:733 msgid "_Copy" -msgstr "" +msgstr "_Копировать" #: ../sflphone-client-gnome/src/uimanager.c:733 msgid "Copy the selection" -msgstr "Удалить выбранную учетную запись" +msgstr "Копировать видимое" #: ../sflphone-client-gnome/src/uimanager.c:734 msgid "_Paste" -msgstr "" +msgstr "_Вставить" #: ../sflphone-client-gnome/src/uimanager.c:734 msgid "Paste the clipboard" -msgstr "" +msgstr "Вставить из буфера обмена" #: ../sflphone-client-gnome/src/uimanager.c:735 msgid "Clear _history" @@ -417,19 +416,19 @@ msgstr "Очистить историю" #: ../sflphone-client-gnome/src/uimanager.c:736 msgid "_Accounts" -msgstr "_Аккаунты" +msgstr "_Учëтные записи" #: ../sflphone-client-gnome/src/uimanager.c:736 msgid "Edit your accounts" -msgstr "Нынешний аккаунт" +msgstr "Изменить ваши учëтные записи" #: ../sflphone-client-gnome/src/uimanager.c:737 msgid "_Preferences" -msgstr "Предпочтения" +msgstr "_Предпочтения" #: ../sflphone-client-gnome/src/uimanager.c:737 msgid "Change your preferences" -msgstr "" +msgstr "Изменить ваши предпочтении" #: ../sflphone-client-gnome/src/uimanager.c:740 msgid "_View" @@ -445,7 +444,7 @@ msgstr "Продолжить" #: ../sflphone-client-gnome/src/uimanager.c:744 msgid "Open the manual" -msgstr "" +msgstr "Открыть справочник " #: ../sflphone-client-gnome/src/uimanager.c:745 msgid "About this application" @@ -457,23 +456,23 @@ msgstr "Переслать звонок на другой номер" #: ../sflphone-client-gnome/src/uimanager.c:751 msgid "Transfer the call" -msgstr "Передать : " +msgstr "Переслать звонок на другой номер" #: ../sflphone-client-gnome/src/uimanager.c:752 msgid "_Show toolbar" -msgstr "" +msgstr "Показать панель инструментов" #: ../sflphone-client-gnome/src/uimanager.c:752 msgid "Show the toolbar" -msgstr "" +msgstr "Показать панель инструментов" #: ../sflphone-client-gnome/src/uimanager.c:753 msgid "_Dialpad" -msgstr "Отключен" +msgstr "Панель набора номера" #: ../sflphone-client-gnome/src/uimanager.c:753 msgid "Show the dialpad" -msgstr "" +msgstr "Показать панель набора номера" #: ../sflphone-client-gnome/src/uimanager.c:754 msgid "_Volume controls" @@ -489,7 +488,7 @@ msgstr "Журнал" #: ../sflphone-client-gnome/src/uimanager.c:755 msgid "Calls history" -msgstr "История звонков" +msgstr "Журнал звонков" #: ../sflphone-client-gnome/src/uimanager.c:756 msgid "_Address book" @@ -552,7 +551,7 @@ msgstr "Па_роль" #: ../sflphone-client-gnome/src/config/assistant.c:363 #: ../sflphone-client-gnome/src/config/assistant.c:473 msgid "Show password" -msgstr "Пароль" +msgstr "Показать пароль" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:274 #: ../sflphone-client-gnome/src/config/assistant.c:368 @@ -589,7 +588,7 @@ msgstr "Безопасность" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:687 #: ../sflphone-client-gnome/src/config/preferencesdialog.c:333 msgid "Use TLS transport (sips)" -msgstr "Имя для аутентификации" +msgstr "Использовать TLS-транспорт (sips)" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:693 #: ../sflphone-client-gnome/src/config/preferencesdialog.c:338 @@ -607,7 +606,7 @@ msgstr "Регистрация" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:800 msgid "Registration expire" -msgstr "Истек срок регистрации" +msgstr "Срок истечения регистрации" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:809 msgid "_Comply with RFC 3263" @@ -616,7 +615,7 @@ msgstr "_Соотвествует RFC 3263" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:816 #: ../sflphone-client-gnome/src/config/preferencesdialog.c:234 msgid "Network Interface" -msgstr "Сеть недоступна" +msgstr "Сетевые настройки" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:830 #: ../sflphone-client-gnome/src/config/preferencesdialog.c:249 @@ -631,7 +630,7 @@ msgstr "Локальный порт" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:893 #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:928 msgid "Published address" -msgstr "издаваемый адрес" +msgstr "Сетевые настройки для Интернета" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:899 msgid "Using STUN" @@ -651,11 +650,11 @@ msgstr "Настроить видимый адрес и порт :" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:936 msgid "Published port" -msgstr "издаваемый порт" +msgstr "Публичный порт" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1027 msgid "Account settings" -msgstr "Настройки аккаунта" +msgstr "Настройки учëтной записи" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1046 msgid "Basic" @@ -683,18 +682,18 @@ msgstr "Учётные записи" #: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:484 msgid "Configured Accounts" -msgstr "Нынешний аккаунт" +msgstr "Настроенные учëтные записи" #: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:501 msgid "There is %d active account" msgid_plural "There are %d active accounts" -msgstr[0] " действующий аккаунт" -msgstr[1] " действующий аккаунт" -msgstr[2] " действующий аккаунт" +msgstr[0] "Одна действующая учëтная запись" +msgstr[1] "%d действующих учëтных записей" +msgstr[2] "%d действующих учëтных записей" #: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:507 msgid "You have no active account" -msgstr "У вас нет активного аккаунта" +msgstr "У вас нет активной учëтной записи" #: ../sflphone-client-gnome/src/config/addressbook-config.c:306 #: ../sflphone-client-gnome/src/config/preferencesdialog.c:556 @@ -707,7 +706,7 @@ msgstr "_Использовать адресную книгу Evolution" #: ../sflphone-client-gnome/src/config/addressbook-config.c:319 msgid "Download limit :" -msgstr "Ограничение скорости скачивания:" +msgstr "Показывать не более " #: ../sflphone-client-gnome/src/config/addressbook-config.c:327 msgid "cards" @@ -719,7 +718,7 @@ msgstr "_Показать фотографию контакта (если име #: ../sflphone-client-gnome/src/config/addressbook-config.c:341 msgid "Fields from Evolution's address books" -msgstr "Исполоьзовать следующие поля из адресной книги Evolution:" +msgstr "Исполоьзовать следующие номера из адресной книги Evolution" #: ../sflphone-client-gnome/src/config/addressbook-config.c:345 msgid "_Work" @@ -756,8 +755,8 @@ msgid "" "You can at any time check your registration state or modify your accounts " "parameters in the Options/Accounts window." msgstr "" -"Вы можете в любое время проверить статус регистрации или изменитьпараметры " -"ваших аккаунтов в меню Правка / Аккаунты." +"Вы можете в любое время проверить статус регистрации или изменить параметры " +"ваших учëтных записей в меню Правка / Учëтные записи" #: ../sflphone-client-gnome/src/config/assistant.c:80 msgid "Alias" @@ -773,7 +772,7 @@ msgstr "Пользователь" #: ../sflphone-client-gnome/src/config/assistant.c:92 msgid "Security: " -msgstr "Безопасность " +msgstr "Безопасность:" #: ../sflphone-client-gnome/src/config/assistant.c:94 msgid "SRTP/ZRTP draft-zimmermann" @@ -793,7 +792,7 @@ msgstr "Добро пожаловать в SFLphone!" #: ../sflphone-client-gnome/src/config/assistant.c:256 msgid "This installation wizard will help you configure an account." -msgstr "Этот мастер установки поможет вам настроить ваш аккаунт." +msgstr "Этот мастер установки поможет вам настроить вашу учëтную запись" #: ../sflphone-client-gnome/src/config/assistant.c:270 msgid "VoIP Protocols" @@ -801,7 +800,7 @@ msgstr "VoIP-протоколы" #: ../sflphone-client-gnome/src/config/assistant.c:270 msgid "Select an account type" -msgstr "Выберите тип аккаунта" +msgstr "Выберите тип учëтной записи" #: ../sflphone-client-gnome/src/config/assistant.c:272 msgid "SIP (Session Initiation Protocol)" @@ -813,7 +812,7 @@ msgstr "IAX2 (InterAsterix Exchange)" #: ../sflphone-client-gnome/src/config/assistant.c:288 msgid "Account" -msgstr "Аккаунты" +msgstr "Учëтная запись" #: ../sflphone-client-gnome/src/config/assistant.c:288 msgid "Please select one of the following options" @@ -821,15 +820,15 @@ msgstr "Введите пожалуйста следующие данные" #: ../sflphone-client-gnome/src/config/assistant.c:290 msgid "Create a free SIP/IAX2 account on sflphone.org" -msgstr "Создать бесплатный SIP/IAX2-аккаунт на sflphone.org" +msgstr "Создать бесплатную SIP/IAX2-учëтную запись на sflphone.org" #: ../sflphone-client-gnome/src/config/assistant.c:292 msgid "Register an existing SIP or IAX2 account" -msgstr "Зарегистрировать существующий SIP или IAX2 аккаунт" +msgstr "Зарегистрировать существующею SIP или IAX2 учëтную запись" #: ../sflphone-client-gnome/src/config/assistant.c:306 msgid "SIP account settings" -msgstr "Настройка SIP-аккаунта" +msgstr "Настройка учëтной записи SIP" #: ../sflphone-client-gnome/src/config/assistant.c:306 #: ../sflphone-client-gnome/src/config/assistant.c:419 @@ -855,7 +854,7 @@ msgstr "_Адрес эл. почты" #: ../sflphone-client-gnome/src/config/assistant.c:419 msgid "IAX2 account settings" -msgstr "Настройка IAX2-аккаунта" +msgstr "Настройка учëтной записи IAX2" #: ../sflphone-client-gnome/src/config/assistant.c:496 msgid "Network Address Translation (NAT)" @@ -875,7 +874,7 @@ msgstr "_STUN-сервер" #: ../sflphone-client-gnome/src/config/assistant.c:526 msgid "Account Registration" -msgstr "Регистрация аккаунта" +msgstr "Регистрация учëтной записи" #: ../sflphone-client-gnome/src/config/assistant.c:526 msgid "Congratulations!" @@ -1000,7 +999,7 @@ msgid "" "sip URI such as <b>sip:remotepeer</b>. The settings you define here will " "also be used if no account can be matched to an incoming or outgoing call." msgstr "" -"Этот профиль используется когда бы хотите достичь удалëнное устройство " +"Этот профиль используется когда вы хотите достичь удалëнное устройство " "просто набрав SIP URI (адрес) типа <b>sip:удалëнное устройство</b>. Эти " "настройки так-же будут использованы если не будет подходящего аккаунта для " "входящего или выходящего звонка." @@ -1015,7 +1014,7 @@ msgstr "Включить звонок" #: ../sflphone-client-gnome/src/config/preferencesdialog.c:450 msgid "System Tray Icon" -msgstr "System Tray Icon" +msgstr "Поведение окна SFLPhone" #: ../sflphone-client-gnome/src/config/preferencesdialog.c:453 msgid "_Popup main window on incoming call" diff --git a/sflphone-client-gnome/po/ru/ru.po b/sflphone-client-gnome/po/ru/ru.po index 18045ccd61..14b3aa5dd8 100644 --- a/sflphone-client-gnome/po/ru/ru.po +++ b/sflphone-client-gnome/po/ru/ru.po @@ -8,16 +8,15 @@ msgstr "" "Project-Id-Version: SFLphone 0.9.6\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2009-12-03 10:22-0500\n" -"PO-Revision-Date: 2009-10-26 20:46+0000\n" -"Last-Translator: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com>\n" +"PO-Revision-Date: 2009-12-08 20:46+0000\n" +"Last-Translator: Hussein Abdallah <hussein.abdallah@savoirfairelinux.com>\n" "Language-Team: Savoir-Faire Linux Inc <sflphoneteam@savoirfairelinux.com>\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%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" "10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" -"X-Launchpad-Export-Date: 2009-12-03 15:32+0000\n" -"X-Generator: Launchpad (build Unknown)\n" +"X-Generator: \n" #: ../sflphone-client-gnome/src/accountlist.c:175 msgid "Registered" @@ -29,7 +28,7 @@ msgstr "Не зарегистрирован" #: ../sflphone-client-gnome/src/accountlist.c:181 msgid "Trying..." -msgstr "Пытаюсь..." +msgstr "Подключение..." #: ../sflphone-client-gnome/src/accountlist.c:184 #: ../sflphone-client-gnome/src/sflnotify.c:131 @@ -59,15 +58,15 @@ msgstr "Неверный сервер Stun" #: ../sflphone-client-gnome/src/accountlist.c:202 msgid "Invalid" -msgstr "Неверный" +msgstr "Ошибка" #: ../sflphone-client-gnome/src/actions.c:98 msgid "Using account" -msgstr "Используя учетную запись" +msgstr "Используется учетная запись" #: ../sflphone-client-gnome/src/actions.c:104 msgid "No registered accounts" -msgstr "У вас нет зарегистрированных аккаунтов" +msgstr "Нет зарегистрированных учëтных записей" #: ../sflphone-client-gnome/src/actions.c:285 msgid "" @@ -127,11 +126,11 @@ msgstr "" #: ../sflphone-client-gnome/src/mainwindow.c:73 msgid "There is one call in progress." -msgstr "Звонок ещё не окончен." +msgstr "Один текущий разговор." #: ../sflphone-client-gnome/src/mainwindow.c:77 msgid "There are calls in progress." -msgstr "Несколько звонков ещё не окончены." +msgstr "Несколько текущих разговоров." #: ../sflphone-client-gnome/src/mainwindow.c:86 msgid "Do you still want to quit?" @@ -144,11 +143,11 @@ msgstr "Ошибка SFLphone." #: ../sflphone-client-gnome/src/mainwindow.c:392 #, c-format msgid "ZRTP is not supported by peer %s\n" -msgstr "не поддерживается устройством %s\n" +msgstr "ZRTP не поддерживается устройством %s\n" #: ../sflphone-client-gnome/src/mainwindow.c:393 msgid "Secure Communication Unavailable" -msgstr "Зашифрованная связь недоступна." +msgstr "Зашифрованная связь недоступна" #: ../sflphone-client-gnome/src/mainwindow.c:394 #: ../sflphone-client-gnome/src/mainwindow.c:416 @@ -213,19 +212,19 @@ msgstr[2] "%d голосовые письма" #: ../sflphone-client-gnome/src/sflnotify.c:111 #, c-format msgid "Calling with %s account <i>%s</i>" -msgstr "Звонок с аккаунтом %s <i>%s</i>" +msgstr "Звонок с учëтной записью %s <i>%s</i>" #: ../sflphone-client-gnome/src/sflnotify.c:115 msgid "Current account" -msgstr "Нынешний аккаунт" +msgstr "Нынешняя учëтная запись" #: ../sflphone-client-gnome/src/sflnotify.c:130 msgid "You have no accounts set up" -msgstr "Вы не настроили ни одного аккаунта" +msgstr "Вы не настроили ни одной учëтной записи" #: ../sflphone-client-gnome/src/sflnotify.c:147 msgid "You have no registered accounts" -msgstr "У вас нет зарегистрированных аккаунтов" +msgstr "У вас нет зарегистрированных учëтных записей" #: ../sflphone-client-gnome/src/sflnotify.c:190 #, c-format @@ -271,9 +270,9 @@ msgstr "SFLphone" #, c-format msgid "%i account configured" msgid_plural "%i accounts configured" -msgstr[0] "%i аккаунт настроен." -msgstr[1] "%i аккаунтов настроены" -msgstr[2] "%i аккаунтов настроены" +msgstr[0] "Настроена одна учëтная запись" +msgstr[1] "Настроены %i учëтные записи" +msgstr[2] "Настроены %i учëтные записи" #: ../sflphone-client-gnome/src/toolbar.c:38 #: ../sflphone-client-gnome/src/uimanager.c:693 @@ -283,7 +282,7 @@ msgstr "Автоответчик" #: ../sflphone-client-gnome/src/uimanager.c:117 msgid "No address book selected" -msgstr "Адресная книга" +msgstr "Нет выбранных адресных книг" #: ../sflphone-client-gnome/src/uimanager.c:137 #: ../sflphone-client-gnome/src/uimanager.c:756 @@ -292,7 +291,7 @@ msgstr "Адресная книга" #: ../sflphone-client-gnome/src/uimanager.c:279 msgid "Voicemail (%i)" -msgstr "Автоответчик" +msgstr "Автоответчик (%i)" #: ../sflphone-client-gnome/src/uimanager.c:342 msgid "SFLphone is a VoIP client compatible with SIP and IAX2 protocols." @@ -313,7 +312,7 @@ msgstr "_Новый звонок" #: ../sflphone-client-gnome/src/uimanager.c:720 msgid "Place a new call" -msgstr "" +msgstr "Позвонить" #: ../sflphone-client-gnome/src/uimanager.c:721 #: ../sflphone-client-gnome/src/uimanager.c:979 @@ -322,7 +321,7 @@ msgstr "_Взять трубку" #: ../sflphone-client-gnome/src/uimanager.c:721 msgid "Answer the call" -msgstr "" +msgstr "Ответить" #: ../sflphone-client-gnome/src/uimanager.c:722 #: ../sflphone-client-gnome/src/uimanager.c:991 @@ -332,7 +331,7 @@ msgstr "_Положить трубку" #: ../sflphone-client-gnome/src/uimanager.c:722 msgid "Finish the call" -msgstr "" +msgstr "Закончить звонок" #: ../sflphone-client-gnome/src/uimanager.c:723 msgid "O_n hold" @@ -340,15 +339,15 @@ msgstr "_Удержать звонок" #: ../sflphone-client-gnome/src/uimanager.c:723 msgid "Place the call on hold" -msgstr "" +msgstr "Удержать звонок" #: ../sflphone-client-gnome/src/uimanager.c:724 msgid "O_ff hold" -msgstr "" +msgstr "_Возобновить разговор" #: ../sflphone-client-gnome/src/uimanager.c:724 msgid "Place the call off hold" -msgstr "" +msgstr "Возобновить разговор" #: ../sflphone-client-gnome/src/uimanager.c:725 #: ../sflphone-client-gnome/src/uimanager.c:1015 @@ -357,15 +356,15 @@ msgstr "Записать" #: ../sflphone-client-gnome/src/uimanager.c:725 msgid "Record the current conversation" -msgstr "" +msgstr "Записать переговор" #: ../sflphone-client-gnome/src/uimanager.c:726 msgid "Configuration _Assistant" -msgstr "Файл конфигурации" +msgstr "Мастер настройки" #: ../sflphone-client-gnome/src/uimanager.c:726 msgid "Run the configuration assistant" -msgstr "Ошибка конфигурации Stun" +msgstr "Запустить мастер настройки" #: ../sflphone-client-gnome/src/uimanager.c:727 msgid "Call your voicemail" @@ -373,11 +372,11 @@ msgstr "%d голосовое письмо" #: ../sflphone-client-gnome/src/uimanager.c:728 msgid "_Close" -msgstr "" +msgstr "_Закрыть" #: ../sflphone-client-gnome/src/uimanager.c:728 msgid "Minimize to system tray" -msgstr "" +msgstr "Уменьшить в значок" #: ../sflphone-client-gnome/src/uimanager.c:729 msgid "_Quit" @@ -385,7 +384,7 @@ msgstr "_Правка" #: ../sflphone-client-gnome/src/uimanager.c:729 msgid "Quit the program" -msgstr "" +msgstr "Выйти из программы" #: ../sflphone-client-gnome/src/uimanager.c:732 msgid "_Edit" @@ -393,19 +392,19 @@ msgstr "_Правка" #: ../sflphone-client-gnome/src/uimanager.c:733 msgid "_Copy" -msgstr "" +msgstr "_Копировать" #: ../sflphone-client-gnome/src/uimanager.c:733 msgid "Copy the selection" -msgstr "Удалить выбранную учетную запись" +msgstr "Копировать видимое" #: ../sflphone-client-gnome/src/uimanager.c:734 msgid "_Paste" -msgstr "" +msgstr "_Вставить" #: ../sflphone-client-gnome/src/uimanager.c:734 msgid "Paste the clipboard" -msgstr "" +msgstr "Вставить из буфера обмена" #: ../sflphone-client-gnome/src/uimanager.c:735 msgid "Clear _history" @@ -417,19 +416,19 @@ msgstr "Очистить историю" #: ../sflphone-client-gnome/src/uimanager.c:736 msgid "_Accounts" -msgstr "_Аккаунты" +msgstr "_Учëтные записи" #: ../sflphone-client-gnome/src/uimanager.c:736 msgid "Edit your accounts" -msgstr "Нынешний аккаунт" +msgstr "Изменить ваши учëтные записи" #: ../sflphone-client-gnome/src/uimanager.c:737 msgid "_Preferences" -msgstr "Предпочтения" +msgstr "_Предпочтения" #: ../sflphone-client-gnome/src/uimanager.c:737 msgid "Change your preferences" -msgstr "" +msgstr "Изменить ваши предпочтении" #: ../sflphone-client-gnome/src/uimanager.c:740 msgid "_View" @@ -445,7 +444,7 @@ msgstr "Продолжить" #: ../sflphone-client-gnome/src/uimanager.c:744 msgid "Open the manual" -msgstr "" +msgstr "Открыть справочник " #: ../sflphone-client-gnome/src/uimanager.c:745 msgid "About this application" @@ -457,23 +456,23 @@ msgstr "Переслать звонок на другой номер" #: ../sflphone-client-gnome/src/uimanager.c:751 msgid "Transfer the call" -msgstr "Передать : " +msgstr "Переслать звонок на другой номер" #: ../sflphone-client-gnome/src/uimanager.c:752 msgid "_Show toolbar" -msgstr "" +msgstr "Показать панель инструментов" #: ../sflphone-client-gnome/src/uimanager.c:752 msgid "Show the toolbar" -msgstr "" +msgstr "Показать панель инструментов" #: ../sflphone-client-gnome/src/uimanager.c:753 msgid "_Dialpad" -msgstr "Отключен" +msgstr "Панель набора номера" #: ../sflphone-client-gnome/src/uimanager.c:753 msgid "Show the dialpad" -msgstr "" +msgstr "Показать панель набора номера" #: ../sflphone-client-gnome/src/uimanager.c:754 msgid "_Volume controls" @@ -489,7 +488,7 @@ msgstr "Журнал" #: ../sflphone-client-gnome/src/uimanager.c:755 msgid "Calls history" -msgstr "История звонков" +msgstr "Журнал звонков" #: ../sflphone-client-gnome/src/uimanager.c:756 msgid "_Address book" @@ -552,7 +551,7 @@ msgstr "Па_роль" #: ../sflphone-client-gnome/src/config/assistant.c:363 #: ../sflphone-client-gnome/src/config/assistant.c:473 msgid "Show password" -msgstr "Пароль" +msgstr "Показать пароль" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:274 #: ../sflphone-client-gnome/src/config/assistant.c:368 @@ -589,7 +588,7 @@ msgstr "Безопасность" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:687 #: ../sflphone-client-gnome/src/config/preferencesdialog.c:333 msgid "Use TLS transport (sips)" -msgstr "Имя для аутентификации" +msgstr "Использовать TLS-транспорт (sips)" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:693 #: ../sflphone-client-gnome/src/config/preferencesdialog.c:338 @@ -607,7 +606,7 @@ msgstr "Регистрация" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:800 msgid "Registration expire" -msgstr "Истек срок регистрации" +msgstr "Срок истечения регистрации" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:809 msgid "_Comply with RFC 3263" @@ -616,7 +615,7 @@ msgstr "_Соотвествует RFC 3263" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:816 #: ../sflphone-client-gnome/src/config/preferencesdialog.c:234 msgid "Network Interface" -msgstr "Сеть недоступна" +msgstr "Сетевые настройки" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:830 #: ../sflphone-client-gnome/src/config/preferencesdialog.c:249 @@ -631,7 +630,7 @@ msgstr "Локальный порт" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:893 #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:928 msgid "Published address" -msgstr "издаваемый адрес" +msgstr "Сетевые настройки для Интернета" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:899 msgid "Using STUN" @@ -651,11 +650,11 @@ msgstr "Настроить видимый адрес и порт :" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:936 msgid "Published port" -msgstr "издаваемый порт" +msgstr "Публичный порт" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1027 msgid "Account settings" -msgstr "Настройки аккаунта" +msgstr "Настройки учëтной записи" #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1046 msgid "Basic" @@ -683,18 +682,18 @@ msgstr "Учётные записи" #: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:484 msgid "Configured Accounts" -msgstr "Нынешний аккаунт" +msgstr "Настроенные учëтные записи" #: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:501 msgid "There is %d active account" msgid_plural "There are %d active accounts" -msgstr[0] " действующий аккаунт" -msgstr[1] " действующий аккаунт" -msgstr[2] " действующий аккаунт" +msgstr[0] "Одна действующая учëтная запись" +msgstr[1] "%d действующих учëтных записей" +msgstr[2] "%d действующих учëтных записей" #: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:507 msgid "You have no active account" -msgstr "У вас нет активного аккаунта" +msgstr "У вас нет активной учëтной записи" #: ../sflphone-client-gnome/src/config/addressbook-config.c:306 #: ../sflphone-client-gnome/src/config/preferencesdialog.c:556 @@ -707,7 +706,7 @@ msgstr "_Использовать адресную книгу Evolution" #: ../sflphone-client-gnome/src/config/addressbook-config.c:319 msgid "Download limit :" -msgstr "Ограничение скорости скачивания:" +msgstr "Показывать не более " #: ../sflphone-client-gnome/src/config/addressbook-config.c:327 msgid "cards" @@ -719,7 +718,7 @@ msgstr "_Показать фотографию контакта (если име #: ../sflphone-client-gnome/src/config/addressbook-config.c:341 msgid "Fields from Evolution's address books" -msgstr "Исполоьзовать следующие поля из адресной книги Evolution:" +msgstr "Исполоьзовать следующие номера из адресной книги Evolution" #: ../sflphone-client-gnome/src/config/addressbook-config.c:345 msgid "_Work" @@ -756,8 +755,8 @@ msgid "" "You can at any time check your registration state or modify your accounts " "parameters in the Options/Accounts window." msgstr "" -"Вы можете в любое время проверить статус регистрации или изменитьпараметры " -"ваших аккаунтов в меню Правка / Аккаунты." +"Вы можете в любое время проверить статус регистрации или изменить параметры " +"ваших учëтных записей в меню Правка / Учëтные записи" #: ../sflphone-client-gnome/src/config/assistant.c:80 msgid "Alias" @@ -773,7 +772,7 @@ msgstr "Пользователь" #: ../sflphone-client-gnome/src/config/assistant.c:92 msgid "Security: " -msgstr "Безопасность " +msgstr "Безопасность:" #: ../sflphone-client-gnome/src/config/assistant.c:94 msgid "SRTP/ZRTP draft-zimmermann" @@ -793,7 +792,7 @@ msgstr "Добро пожаловать в SFLphone!" #: ../sflphone-client-gnome/src/config/assistant.c:256 msgid "This installation wizard will help you configure an account." -msgstr "Этот мастер установки поможет вам настроить ваш аккаунт." +msgstr "Этот мастер установки поможет вам настроить вашу учëтную запись" #: ../sflphone-client-gnome/src/config/assistant.c:270 msgid "VoIP Protocols" @@ -801,7 +800,7 @@ msgstr "VoIP-протоколы" #: ../sflphone-client-gnome/src/config/assistant.c:270 msgid "Select an account type" -msgstr "Выберите тип аккаунта" +msgstr "Выберите тип учëтной записи" #: ../sflphone-client-gnome/src/config/assistant.c:272 msgid "SIP (Session Initiation Protocol)" @@ -813,7 +812,7 @@ msgstr "IAX2 (InterAsterix Exchange)" #: ../sflphone-client-gnome/src/config/assistant.c:288 msgid "Account" -msgstr "Аккаунты" +msgstr "Учëтная запись" #: ../sflphone-client-gnome/src/config/assistant.c:288 msgid "Please select one of the following options" @@ -821,15 +820,15 @@ msgstr "Введите пожалуйста следующие данные" #: ../sflphone-client-gnome/src/config/assistant.c:290 msgid "Create a free SIP/IAX2 account on sflphone.org" -msgstr "Создать бесплатный SIP/IAX2-аккаунт на sflphone.org" +msgstr "Создать бесплатную SIP/IAX2-учëтную запись на sflphone.org" #: ../sflphone-client-gnome/src/config/assistant.c:292 msgid "Register an existing SIP or IAX2 account" -msgstr "Зарегистрировать существующий SIP или IAX2 аккаунт" +msgstr "Зарегистрировать существующею SIP или IAX2 учëтную запись" #: ../sflphone-client-gnome/src/config/assistant.c:306 msgid "SIP account settings" -msgstr "Настройка SIP-аккаунта" +msgstr "Настройка учëтной записи SIP" #: ../sflphone-client-gnome/src/config/assistant.c:306 #: ../sflphone-client-gnome/src/config/assistant.c:419 @@ -855,7 +854,7 @@ msgstr "_Адрес эл. почты" #: ../sflphone-client-gnome/src/config/assistant.c:419 msgid "IAX2 account settings" -msgstr "Настройка IAX2-аккаунта" +msgstr "Настройка учëтной записи IAX2" #: ../sflphone-client-gnome/src/config/assistant.c:496 msgid "Network Address Translation (NAT)" @@ -875,7 +874,7 @@ msgstr "_STUN-сервер" #: ../sflphone-client-gnome/src/config/assistant.c:526 msgid "Account Registration" -msgstr "Регистрация аккаунта" +msgstr "Регистрация учëтной записи" #: ../sflphone-client-gnome/src/config/assistant.c:526 msgid "Congratulations!" @@ -1000,7 +999,7 @@ msgid "" "sip URI such as <b>sip:remotepeer</b>. The settings you define here will " "also be used if no account can be matched to an incoming or outgoing call." msgstr "" -"Этот профиль используется когда бы хотите достичь удалëнное устройство " +"Этот профиль используется когда вы хотите достичь удалëнное устройство " "просто набрав SIP URI (адрес) типа <b>sip:удалëнное устройство</b>. Эти " "настройки так-же будут использованы если не будет подходящего аккаунта для " "входящего или выходящего звонка." @@ -1015,7 +1014,7 @@ msgstr "Включить звонок" #: ../sflphone-client-gnome/src/config/preferencesdialog.c:450 msgid "System Tray Icon" -msgstr "System Tray Icon" +msgstr "Поведение окна SFLPhone" #: ../sflphone-client-gnome/src/config/preferencesdialog.c:453 msgid "_Popup main window on incoming call" -- GitLab From 5c907ad860f9447b4944e327eee8774080868829 Mon Sep 17 00:00:00 2001 From: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> Date: Wed, 9 Dec 2009 16:05:44 -0500 Subject: [PATCH 075/188] [#2402] Add spanish and french translation for user manual --- sflphone-client-gnome/doc/es/es.po | 1356 ++++++++++++++++++++++++++++ sflphone-client-gnome/doc/fr/fr.po | 1284 ++++++++++++++++++++++++++ 2 files changed, 2640 insertions(+) create mode 100644 sflphone-client-gnome/doc/es/es.po create mode 100644 sflphone-client-gnome/doc/fr/fr.po diff --git a/sflphone-client-gnome/doc/es/es.po b/sflphone-client-gnome/doc/es/es.po new file mode 100644 index 0000000000..2d243741c0 --- /dev/null +++ b/sflphone-client-gnome/doc/es/es.po @@ -0,0 +1,1356 @@ +# Spanish translation for sflphone +# Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 +# This file is distributed under the same license as the sflphone package. +# FIRST AUTHOR <EMAIL@ADDRESS>, 2009. +# +msgid "" +msgstr "" +"Project-Id-Version: sflphone\n" +"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" +"POT-Creation-Date: 2009-10-26 15:41-0400\n" +"PO-Revision-Date: 2009-12-09 15:04+0000\n" +"Last-Translator: Maxime Chambreuil <maxime.chambreuil@gmail.com>\n" +"Language-Team: Spanish <es@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2009-12-09 20:52+0000\n" +"X-Generator: Launchpad (build Unknown)\n" + +#. When image changes, this message will be marked fuzzy or untranslated for you. +#. It doesn't matter what you translate it to: it's not used at all. +#: sflphone.xml:230(None) +msgid "" +"@@image: 'figures/account_advanced.png'; md5=8cc040a5f56fe61566ad7b0fa83955d9" +msgstr "" +"@@image: 'figures/account_advanced.png'; md5=8cc040a5f56fe61566ad7b0fa83955d9" + +#. When image changes, this message will be marked fuzzy or untranslated for you. +#. It doesn't matter what you translate it to: it's not used at all. +#: sflphone.xml:296(None) +msgid "@@image: 'figures/dial.png'; md5=81ff4280c293e62a49fad3a4b61b9bb5" +msgstr "@@image: 'figures/dial.png'; md5=81ff4280c293e62a49fad3a4b61b9bb5" + +#. When image changes, this message will be marked fuzzy or untranslated for you. +#. It doesn't matter what you translate it to: it's not used at all. +#: sflphone.xml:311(None) +msgid "" +"@@image: 'figures/call-second.png'; md5=fa490e3b07eebaa9f4ff719f579d68ef" +msgstr "" +"@@image: 'figures/call-second.png'; md5=fa490e3b07eebaa9f4ff719f579d68ef" + +#. When image changes, this message will be marked fuzzy or untranslated for you. +#. It doesn't matter what you translate it to: it's not used at all. +#: sflphone.xml:330(None) +msgid "@@image: 'figures/call.png'; md5=ecd96beec76f808b5c1469ecc1293237" +msgstr "@@image: 'figures/call.png'; md5=ecd96beec76f808b5c1469ecc1293237" + +#. When image changes, this message will be marked fuzzy or untranslated for you. +#. It doesn't matter what you translate it to: it's not used at all. +#: sflphone.xml:348(None) +msgid "@@image: 'figures/answer.png'; md5=c168995c6b36b5d200c49d1c02c2ea52" +msgstr "@@image: 'figures/answer.png'; md5=c168995c6b36b5d200c49d1c02c2ea52" + +#. When image changes, this message will be marked fuzzy or untranslated for you. +#. It doesn't matter what you translate it to: it's not used at all. +#: sflphone.xml:365(None) +msgid "@@image: 'figures/hangup.png'; md5=0cac4dfe3a9a4bdf4d12229f77e3723a" +msgstr "@@image: 'figures/hangup.png'; md5=0cac4dfe3a9a4bdf4d12229f77e3723a" + +#. When image changes, this message will be marked fuzzy or untranslated for you. +#. It doesn't matter what you translate it to: it's not used at all. +#: sflphone.xml:385(None) +msgid "@@image: 'figures/refuse.png'; md5=34b6cbf068e56163058e79de3ca70c59" +msgstr "@@image: 'figures/refuse.png'; md5=34b6cbf068e56163058e79de3ca70c59" + +#. When image changes, this message will be marked fuzzy or untranslated for you. +#. It doesn't matter what you translate it to: it's not used at all. +#: sflphone.xml:403(None) +msgid "@@image: 'figures/holdon.png'; md5=655078b8b495ada29f65b58501187d16" +msgstr "@@image: 'figures/holdon.png'; md5=655078b8b495ada29f65b58501187d16" + +#. When image changes, this message will be marked fuzzy or untranslated for you. +#. It doesn't matter what you translate it to: it's not used at all. +#: sflphone.xml:415(None) +msgid "@@image: 'figures/holdoff.png'; md5=e06b8eba03f1545cd18891630b22f281" +msgstr "@@image: 'figures/holdoff.png'; md5=e06b8eba03f1545cd18891630b22f281" + +#. When image changes, this message will be marked fuzzy or untranslated for you. +#. It doesn't matter what you translate it to: it's not used at all. +#: sflphone.xml:430(None) +msgid "@@image: 'figures/transfer.png'; md5=92f921c7c6ba4ee2487ccf6e02226d9a" +msgstr "" +"@@image: 'figures/transfer.png'; md5=92f921c7c6ba4ee2487ccf6e02226d9a" + +#. When image changes, this message will be marked fuzzy or untranslated for you. +#. It doesn't matter what you translate it to: it's not used at all. +#: sflphone.xml:444(None) +msgid "" +"@@image: 'figures/transfer-go.png'; md5=553b57d5a9fc9f248ba15cecc32d343f" +msgstr "" +"@@image: 'figures/transfer-go.png'; md5=553b57d5a9fc9f248ba15cecc32d343f" + +#. When image changes, this message will be marked fuzzy or untranslated for you. +#. It doesn't matter what you translate it to: it's not used at all. +#: sflphone.xml:465(None) +msgid "" +"@@image: 'figures/rec-settings.png'; md5=27d51e45ff23dde58b0512f90773f6ce" +msgstr "" +"@@image: 'figures/rec-settings.png'; md5=27d51e45ff23dde58b0512f90773f6ce" + +#. When image changes, this message will be marked fuzzy or untranslated for you. +#. It doesn't matter what you translate it to: it's not used at all. +#: sflphone.xml:478(None) +msgid "@@image: 'figures/record.png'; md5=7a594660924940e8def9ecfcee0e8cb4" +msgstr "@@image: 'figures/record.png'; md5=7a594660924940e8def9ecfcee0e8cb4" + +#. When image changes, this message will be marked fuzzy or untranslated for you. +#. It doesn't matter what you translate it to: it's not used at all. +#: sflphone.xml:496(None) +msgid "" +"@@image: 'figures/voicemail.png'; md5=36dbeb4bcc6a68519d474552a888ce1e" +msgstr "" +"@@image: 'figures/voicemail.png'; md5=36dbeb4bcc6a68519d474552a888ce1e" + +#. When image changes, this message will be marked fuzzy or untranslated for you. +#. It doesn't matter what you translate it to: it's not used at all. +#: sflphone.xml:684(None) +msgid "" +"@@image: 'figures/addressbook-button.png'; " +"md5=b4a820013ef8b8f48e7de780a66c7800" +msgstr "" +"@@image: 'figures/addressbook-button.png'; " +"md5=b4a820013ef8b8f48e7de780a66c7800" + +#. When image changes, this message will be marked fuzzy or untranslated for you. +#. It doesn't matter what you translate it to: it's not used at all. +#: sflphone.xml:719(None) +msgid "" +"@@image: 'figures/desktop-notif-settings.png'; " +"md5=2bca85d6d9871883399481b994bd3384" +msgstr "" +"@@image: 'figures/desktop-notif-settings.png'; " +"md5=2bca85d6d9871883399481b994bd3384" + +#. When image changes, this message will be marked fuzzy or untranslated for you. +#. It doesn't matter what you translate it to: it's not used at all. +#: sflphone.xml:738(None) +msgid "" +"@@image: 'figures/notif-example.png'; md5=d09008bedcaee435b12cd165d42e39b7" +msgstr "" +"@@image: 'figures/notif-example.png'; md5=d09008bedcaee435b12cd165d42e39b7" + +#. When image changes, this message will be marked fuzzy or untranslated for you. +#. It doesn't matter what you translate it to: it's not used at all. +#: sflphone.xml:755(None) +msgid "" +"@@image: 'figures/voicemail-notif.png'; md5=a33ed4ce4b693d67ee453b4ef1fa6c30" +msgstr "" +"@@image: 'figures/voicemail-notif.png'; md5=a33ed4ce4b693d67ee453b4ef1fa6c30" + +#. When image changes, this message will be marked fuzzy or untranslated for you. +#. It doesn't matter what you translate it to: it's not used at all. +#: sflphone.xml:774(None) +msgid "" +"@@image: 'figures/systemtray-settings.png'; " +"md5=638612a08eb31eb768c4f08ace9c909a" +msgstr "" +"@@image: 'figures/systemtray-settings.png'; " +"md5=638612a08eb31eb768c4f08ace9c909a" + +#. When image changes, this message will be marked fuzzy or untranslated for you. +#. It doesn't matter what you translate it to: it's not used at all. +#: sflphone.xml:814(None) +msgid "" +"@@image: 'figures/callshistory-settings.png'; " +"md5=287d8aed7d7c71752257c64e89a9127d" +msgstr "" +"@@image: 'figures/callshistory-settings.png'; " +"md5=287d8aed7d7c71752257c64e89a9127d" + +#. When image changes, this message will be marked fuzzy or untranslated for you. +#. It doesn't matter what you translate it to: it's not used at all. +#: sflphone.xml:838(None) +msgid "" +"@@image: 'figures/configfile-settings.png'; " +"md5=eb4a5545f137b825dcdaf0396a9f1a7d" +msgstr "" +"@@image: 'figures/configfile-settings.png'; " +"md5=eb4a5545f137b825dcdaf0396a9f1a7d" + +#: sflphone.xml:12(title) +msgid "SFLphone Manual v1.0" +msgstr "Manual v1.0 de SFLphone" + +#: sflphone.xml:15(year) +msgid "2006" +msgstr "2006" + +#: sflphone.xml:16(year) +msgid "2007" +msgstr "2007" + +#: sflphone.xml:17(year) +msgid "2008" +msgstr "2008" + +#: sflphone.xml:18(year) +msgid "2009" +msgstr "2009" + +#: sflphone.xml:19(holder) sflphone.xml:32(publishername) sflphone.xml:80(para) +msgid "Savoir-faire Linux" +msgstr "Savoir-faire Linux" + +#: sflphone.xml:26(para) +msgid "" +"SFLphone is an enterprise-class SIP/IAX2 compatible softphone for GNU/Linux, " +"published under the GPLv3 license." +msgstr "" +"SFLphone es un softphone de clase empresarial compatible con SIP y IAX2 para " +"GNU/Linux, publicado bajo la licencia GPLv3." + +#: sflphone.xml:36(para) +msgid "" +"Permission is granted to copy, distribute and/or modify this document under " +"the terms of the GNU Free Documentation Licence (GFDL), Version 1.1 or any " +"later version published by the Free Software Foundation with no Invariant " +"Sections, no Front-Cover Texts, and no Back-Cover Texts. You can find a copy " +"of the GFDL at this <ulink type=\"help\" url=\"ghelp:fdl\">link</ulink> or " +"in the file COPYING-DOCS distributed with this manual." +msgstr "" +"Se concede permiso para copiar, distribuir y/o modificar este documento bajo " +"los términos de la Licencia de Documentación Libre de GNU, Versión 1.1 o " +"cualquier otra versión posterior publicada por la Free Software Foundation; " +"sin Secciones Invariantes ni Textos de Cubierta Delantera ni Textos de " +"Cubierta Trasera. Una copia de la licencia está incluida <ulink " +"type=\"help\" url=\"ghelp:fdl\">aqui</ulink> o en al archivo COPYING-DOCS " +"distribuido con ese manual." + +#: sflphone.xml:37(para) +msgid "" +"This manual is part of a collection of GNOME manuals distributed under the " +"GFDL. If you want to distribute this manual separately from the collection, " +"you can do so by adding a copy of the licence to the manual, as described in " +"section 6 of the licence." +msgstr "" +"Ese manual es parte de los manuales de GNOME, distribuidos bajo la GFDL. Si " +"quiere distribuir ese manual separadamente de la colecciòn, puede hacerlo " +"añando una copia de la licencia a ese manual, como describiendo a la secciòn " +"6 de la licencia." + +#: sflphone.xml:42(firstname) +msgid "Pierre-Luc" +msgstr "Pierre-Luc" + +#: sflphone.xml:43(surname) +msgid "Bacon" +msgstr "Bacon" + +#: sflphone.xml:45(email) +msgid "pierre-luc.bacon@savoirfairelinux.com" +msgstr "pierre-luc.bacon@savoirfairelinux.com" + +#: sflphone.xml:50(firstname) +msgid "Emmanuel" +msgstr "Emmanuel" + +#: sflphone.xml:51(surname) +msgid "Milou" +msgstr "Milou" + +#: sflphone.xml:53(email) +msgid "emmanuel.milou@savoirfairelinux.com" +msgstr "emmanuel.milou@savoirfairelinux.com" + +#: sflphone.xml:58(firstname) +msgid "Jérémy" +msgstr "Jérémy" + +#: sflphone.xml:59(surname) +msgid "Quentin" +msgstr "Quentin" + +#: sflphone.xml:61(email) +msgid "jeremy.quentin@savoirfairelinux.com" +msgstr "jeremy.quentin@savoirfairelinux.com" + +#: sflphone.xml:66(firstname) +msgid "Alexandre" +msgstr "Alexandre" + +#: sflphone.xml:67(surname) +msgid "Savard" +msgstr "Savard" + +#: sflphone.xml:69(email) +msgid "alexandre.savard@savoirfairelinux.com" +msgstr "alexandre.savard@savoirfairelinux.com" + +#: sflphone.xml:76(revnumber) +msgid "SFLphone Manual V1.0" +msgstr "Manual v. 1.0 de SFLphone" + +#: sflphone.xml:77(date) +msgid "September 2009" +msgstr "Septiembre del 2009" + +#: sflphone.xml:79(para) +msgid "SFLphone team" +msgstr "Equipo de SFLphone" + +#: sflphone.xml:85(releaseinfo) +msgid "This manual describes version 0.9.7 of SFLphone." +msgstr "Este manual describe la versión 0.9.7 de SFLphone." + +#: sflphone.xml:90(primary) +msgid "SFLphone" +msgstr "SFLphone" + +#: sflphone.xml:94(title) +msgid "Introduction" +msgstr "Introducción" + +#: sflphone.xml:95(para) +msgid "" +"<application>SFLphone</application> is a SIP/IAX2 softphone and VoIP client " +"for GNU/Linux. It aims at being a robust enterprise-class desktop phone and " +"has been designed with a hundred-calls-a-day receptionist in mind." +msgstr "" +"<application>SFLphone</application> es un softphone SIP y IAX2 y cliente " +"VoIP para GNU/Linux. Està dirigido a ser un telefono robusto de clase " +"empresarial y fue diseñado por una recepcionista de cien llamadas al dia." + +#: sflphone.xml:98(para) +msgid "" +"<application>SFLphone</application> is a free software and is distributed " +"under the GNU General Public License version 3. It is developed by Savoir-" +"Faire Linux, a Canadian Linux consulting company, in partnership with the " +"global community." +msgstr "" +"<application>SFLphone</application> es un software libre distribuido bajo la " +"Licencia Pública General de GNU versión 3. Esta desarrollando por Savoir-" +"Faire Linux, una empresa canadiense de consultorio Linux, en colaboración " +"con la comunidad global." + +#: sflphone.xml:101(para) +msgid "" +"Among the many features we developed for you, we could highlight the high " +"definition sound (wide-band audio codecs - speex, G722, Celt), multiple " +"conference call, audio recording, voicemail notification, and call history. " +"More than a simple softphone, <application>SFLphone</application> supports " +"advanced enterprise-class call features: unlimited number of calls, call " +"transfer, and on/off hold option." +msgstr "" +"Entre las muchas características que desarrollamos para usted, nosotros " +"podría destacar el alto sonido de la definición (codificadores-decodificador " +"audios de la banda ancha - speex, G722, Celt), la audioconferencia múltiple, " +"la grabación audio, la notificación del buzón de voz, y la historia de " +"llamada. Más que un softphone simple, <application>SFLphone</application> " +"soporta características de llamadas avanzadas de clase empresarial : número " +"ilimitado de llamadas, transferencia de llamadas, y opción de llamadas en " +"espera." + +#: sflphone.xml:108(para) +msgid "" +"This release also provides advanced security features (secure RTP and TLS)." +msgstr "" +"Esta versión también tiene características avanzadas de seguridad (RTP " +"seguro y TLS)." + +#: sflphone.xml:112(para) +msgid "" +"Besides the native ALSA interface, <application>SFLphone</application> now " +"fully supports PulseAudio sound server so you could experience the great " +"possibilities it offers (sound mixing, per application volume control, ...)." +msgstr "" +"Además del interfaz nativo ALSA, <application>SFLphone</application> ahora " +"soporta completamente el servidor de sonidos PulseAudio así que usted podría " +"experimentar las grandes posibilidades que ofrece (mezcla de sonidos, " +"control de volumen por aplicación,…)." + +#: sflphone.xml:118(title) +msgid "Getting started" +msgstr "Cómo empezar" + +#: sflphone.xml:123(guilabel) +msgid "Create a free SIP/IAX2 account on sflphone.org" +msgstr "Crear una cuenta SIP/IAS2 gratuita en sflphone.org" + +#: sflphone.xml:124(para) +msgid "" +"Savoir-faire Linux provides free SIP/IAX2 accounts on an Asterisk server. By " +"clicking this option, you will be created an account to make test calls. The " +"echo service is available, you may also call other accounts registered to " +"the same server." +msgstr "" +"Savoir-faire Linux proporciona cuentas libres SIP y IAX2 en un servidor " +"Asterisk. Chascando esta opción, le crearán una cuenta para hacer llamadas " +"de prueba. El servicio de echo está disponible, usted puede también llamar " +"otras cuentas registradas al mismo servidor." + +#: sflphone.xml:126(para) +msgid "" +"By filling out your email address information, you will receive voicemail " +"notifications by email. This information is not mandatory to get your free " +"account." +msgstr "" +"Completando su información de correo electronico, usted recibirá " +"notificaciones del buzón de voz por correo. Esta información no es " +"obligatoria para conseguir su cuenta libre." + +#: sflphone.xml:129(guilabel) +msgid "Register an existing SIP or IAX2 account" +msgstr "Registrar una cuenta SIP o IAX2 existente" + +#: sflphone.xml:130(para) +msgid "" +"Click there if you already have an account and you want to use it with " +"SFLphone. You will be prompted to select the account type (SIP or IAX2) and " +"to fill out your account information. <application>SFLphone</application> " +"will then try to register it so you could start using it." +msgstr "" +"Chasque allí si usted tiene ya una cuenta y quiere utilizarla con SFLphone. " +"Le preguntarán a seleccionar el tipo de la cuenta (SIP o IAX2) y completar " +"su información de cuenta. <application>SFLphone</application> intentará " +"registrarla así que usted podría comenzar a usarla." + +#: sflphone.xml:119(para) +msgid "" +"The first time you start up sflphone, you will be ask to complete a wizard " +"to set up your(s) account(s). This account configuration manager offers you " +"two possibilities: <placeholder-1/>" +msgstr "" +"La primera vez que usted inicià sflphone, usted será pidiendo terminar a un " +"mago para configurar su(s) cuenta(s). Este encargado de configuración de " +"cuenta ofrece dos posibilidades: <placeholder-1/>" + +#: sflphone.xml:135(para) +msgid "" +"You can always access the account creation manager: " +"<menuchoice><guimenu>Edit</guimenu><guimenuitem>Account creation " +"assistant</guimenuitem></menuchoice>." +msgstr "" +"Usted puede tener acceso siempre al encargado de creación de cuenta: " +"<menuchoice><guimenu>Editar</guimenu><guimenuitem>Asistante de creación de " +"cuenta</guimenuitem></menuchoice>" + +#: sflphone.xml:141(title) +msgid "Managing your accounts" +msgstr "Administrar sus cuentas" + +#: sflphone.xml:142(para) +msgid "" +"<application>SFLphone</application> supports both IAX2 and SIP accounts." +msgstr "<application>SFLphone</application> soporta cuentas IAX2 y SIP." + +#: sflphone.xml:148(title) +msgid "Basic features" +msgstr "Características básicas" + +#: sflphone.xml:150(title) +msgid "Creating a new account" +msgstr "Crear una cuenta nueva" + +#: sflphone.xml:151(para) +msgid "To create a new account, perform the following steps:" +msgstr "Para crear una cuenta nueva, sigue los siguientes pasos:" + +#: sflphone.xml:153(para) sflphone.xml:191(para) sflphone.xml:201(para) +msgid "" +"Choose <menuchoice><guimenu>Edit</guimenu><guimenuitem>Manage " +"accounts</guimenuitem></menuchoice>." +msgstr "" +"Escoje <menuchoice><guimenu>Editar</guimenu><guimenuitem>Administrar " +"cuentas</guimenuitem></menuchoice>." + +#: sflphone.xml:154(para) +msgid "" +"Click on the <guilabel>Add</guilabel> button. Fill out the following " +"information:" +msgstr "" +"Chasque <guilabel>Añadir</guilabel>botón. Complete la información siguiente:" + +#: sflphone.xml:157(guilabel) +msgid "Alias" +msgstr "Alias" + +#: sflphone.xml:158(para) +msgid "" +"The name to identify your account in the list. It is not used for the " +"communications" +msgstr "" +"El nombre para identificar tu cuenta en la lista. No se usará para las " +"comunicaciones." + +#: sflphone.xml:161(guilabel) +msgid "Protocol" +msgstr "Protocolo" + +#: sflphone.xml:162(para) +msgid "Select SIP or IAX2. The most commons are SIP accounts." +msgstr "Selecciona SIP o IAX2. Las más comunes son las cuentas SIP." + +#: sflphone.xml:165(guilabel) +msgid "Host name" +msgstr "Nombre del equipo" + +#: sflphone.xml:166(para) +msgid "The name or the IP address of the server you want to register on." +msgstr "Nombre o dirección IP del servidor en el que quieres registrarte." + +#: sflphone.xml:169(guilabel) +msgid "User name" +msgstr "Nombre de usuario" + +#: sflphone.xml:170(para) +msgid "The name or the extension for your account." +msgstr "El nombre o la extensiòn de su cuenta." + +#: sflphone.xml:173(guilabel) +msgid "Password" +msgstr "Contraseña" + +#: sflphone.xml:174(para) +msgid "The password for your account." +msgstr "La contraseña para tu cuenta." + +#: sflphone.xml:177(guilabel) +msgid "Voicemail number" +msgstr "Número de buzón de voz" + +#: sflphone.xml:178(para) +msgid "" +"The number to dial to reach your voicemail. Example: 888, or *97. It will be " +"used as a quick dial button on the main interface." +msgstr "" +"El número para alcanzar su buzón de voz. Ejemplo: 888, o *97. Será utilizado " +"como botón para marcar rápido en el interfaz principal." + +#: sflphone.xml:182(para) +msgid "Click the <menuchoice><guimenu>Apply</guimenu></menuchoice> button." +msgstr "" +"Da le clic al buttòn <menuchoice><guimenu>Aplicar</guimenu></menuchoice>." + +#: sflphone.xml:184(para) +msgid "" +"You may now check the state of your account(s). You may have as many setup " +"accounts as you wish. If it is registered, you may now use it to make calls." +msgstr "" +"Usted puede ahora comprobar el estado de sus cuentas. Usted puede tener " +"tantas cuentas como usted desea. Si se registra, usted puede ahora " +"utilizarla para hacer llamadas." + +#: sflphone.xml:188(title) +msgid "Editing a configured account" +msgstr "Editar una cuenta configurada" + +#: sflphone.xml:189(para) +msgid "To edit an existing account, perform the following steps:" +msgstr "Para editar una cuenta existente, sigue los pasos siguientes:" + +#: sflphone.xml:192(para) +msgid "" +"Select in the list the account you would like to edit, then click on the " +"<guilabel>Edit</guilabel> button." +msgstr "" +"Seleccione en la lista la cuenta que usted quisiera corregir, después " +"chasque encendido el botón de <guilabel>Editar</guilabel>." + +#: sflphone.xml:193(para) +msgid "" +"Make your modifications, then click on the <guilabel>Apply</guilabel> button." +msgstr "" +"Haga sus modificaciones, después chasque encendido el botón de " +"<guilabel>Aplicar</guilabel>." + +#: sflphone.xml:198(title) +msgid "Deleting an account" +msgstr "Borrar una cuenta" + +#: sflphone.xml:199(para) +msgid "To delete an existing account, perform the following steps:" +msgstr "Para borrar una cuenta existente, sigue los pasos siguientes:" + +#: sflphone.xml:202(para) +msgid "" +"Select in the list the account you would like to delete, then click on the " +"<guibutton>Delete</guibutton> button." +msgstr "" +"Seleccione en la lista la cuenta que usted quisiera suprimir, después " +"chasque encendido el botón de <guibutton>Suprimir</guibutton>." + +#: sflphone.xml:207(title) +msgid "Selecting a default account" +msgstr "Selección de una cuenta por defecto" + +#: sflphone.xml:208(para) +msgid "" +"As it is possible to have an unlimited number of registered accounts at the " +"same time, which account will be used when making a call ? You can not only " +"set up a default account to be used every time you are making a call, but an " +"entire priority list. To do that, perform the following steps:" +msgstr "" +"¿Pues es posible tener un número ilimitado de cuentas registradas al mismo " +"tiempo, cual cuenta será utilizada para hacer una llamada? No sólo usted " +"puede fijar una cuenta por defecto que se utilizarán cada vez que usted está " +"haciendo una llamada, pero tambien una lista de prioridad. Para hacer eso, " +"realice los pasos siguientes:" + +#: sflphone.xml:210(para) +msgid "" +"Choose <menuchoice><guimenu>Edit</guimenu><guimenuitem>Manage " +"accounts</guimenuitem></menuchoice> to access the accounts list." +msgstr "" +"Escoje <menuchoice><guimenu>Editar</guimenu><guimenuitem>Administrar " +"cuentas</guimenuitem></menuchoice> para ver la lista de cuentas." + +#: sflphone.xml:212(para) +msgid "" +"The first account in the account in list will be used as the default account " +"to make calls with. If it is not registered, SFLphone will try to use the " +"second in the list, if still not registered, the third, and so one ..." +msgstr "" +"La primera cuenta en la lista será utilizada como la cuenta por defecto para " +"hacer llamadas. Si no se registra, SFLphone intentará utilizar la segunda en " +"la lista, si tampoco se registra, la tercera, etc…" + +#: sflphone.xml:213(para) +msgid "" +"To reorder the accounts as you wish, select an account and click on the " +"<menuchoice><guimenu>Up</guimenu></menuchoice> or " +"<menuchoice><guimenu>Down</guimenu></menuchoice> button." +msgstr "" +"Para reordenar las cuentas como usted desea, seleccione una cuenta y chasque " +"encendido el botón de <menuchoice><guimenu>Arribá</guimenu></menuchoice> o " +"de <menuchoice><guimenu>Abajo</guimenu></menuchoice>." + +#: sflphone.xml:216(para) +msgid "" +"Note that you also can select an account to make a call with when dialing by " +"right-clicking on it." +msgstr "" +"Observe que usted también puede seleccionar una cuenta para hacer una " +"llamada, cuando usted esta marcando, haciendo clic con el botón derecho en " +"la llamada." + +#: sflphone.xml:221(title) +msgid "Advanced features" +msgstr "Características avanzadas" + +#: sflphone.xml:222(para) sflphone.xml:273(para) +msgid "These features are only available with SIP." +msgstr "Estas características sólo están disponibles con SIP." + +#: sflphone.xml:223(para) +msgid "" +"Follow the indications to <link linkend=\"account_edit\">edit an " +"account</link> and choose the <guimenu>Advanced</guimenu> tab." +msgstr "" +"Siga las indicaciones para <link linkend=\"account_edit\">editar una " +"cuenta</link> y elija la pestaña <guimenu>Avanzadas</guimenu>." + +#: sflphone.xml:226(title) +msgid "Advanced features configuration panel" +msgstr "Panel de configuración de características avanzadas" + +#: sflphone.xml:237(title) +msgid "Registration" +msgstr "Registro" + +#: sflphone.xml:238(para) +msgid "You may set the expires header for a contact." +msgstr "Usted puede fijar el encabezamiento expira para un contacto." + +#: sflphone.xml:239(para) +msgid "" +"It basically represents the duration your registration will remain active. " +"If you don't register again within that time, calls will no longer be routed " +"to you. it should be not used as a keepalive mechanism though. The default " +"value is 600 seconds (ten minutes)." +msgstr "" +"Representa básicamente la duración que su registro seguirá siendo activo. Si " +"usted no se registra otra vez dentro de ese tiempo, las llamadas no serán " +"encaminadas a usted. Sin embargo no debe ser utilizado como mecanismo de " +"keepalive. El valor prefijado es 600 segundos (diez minutos)." + +#: sflphone.xml:240(note) +msgid "" +"To register to some VoIP services, you will need to set this value at at " +"least 1600 seconds (Example: French VoIP server freephonie.net)." +msgstr "" +"Para registrarse a algunos servicios de VoIP, usted necesitará fijar este " +"valor a por lo menos 1600 segundos (ejemplo: Servidor de VoIP francés " +"freephonie.net)." + +#: sflphone.xml:244(title) sflphone.xml:873(title) +msgid "Network" +msgstr "Red" + +#: sflphone.xml:245(para) +msgid "This section enables you to set advanced network parameters." +msgstr "Esta sección le permite fijar parámetros de red avanzados." + +#: sflphone.xml:248(guilabel) +msgid "Local address" +msgstr "Dirección local" + +#: sflphone.xml:249(para) +msgid "" +"it is initialized to your private/local IP address. Calls will be routed to " +"this address by default." +msgstr "" +"se inicializa a su dirección IP privada/local. Las llamadas serán " +"encaminadas a esta dirección por defecto." + +#: sflphone.xml:252(guilabel) +msgid "Local port" +msgstr "Puerto local" + +#: sflphone.xml:253(para) +msgid "It is initialized to the default SIP port, 5060." +msgstr "Se inicia al puerto SIP por defecto, 5060." + +#: sflphone.xml:256(guilabel) +msgid "Set published address and port" +msgstr "Fije la dirección publicada y el puerto" + +#: sflphone.xml:260(para) +msgid "" +"If enabled, the core will try to initialize an UDP transport on the mapped " +"address/port number that the NAT (Network Address Translator) has allocated " +"to <application>SFLphone</application>." +msgstr "" +"Si está activada, la base intentará inicializar un transporte UDP con la " +"dirección y puerto que el NAT (traductor de dirección de red) ha asignado a " +"<application>SFLphone</application>." + +#: sflphone.xml:259(listitem) +msgid "Using STUN <placeholder-1/>" +msgstr "Usando STUN <placeholder-1/>" + +#: sflphone.xml:261(listitem) +msgid "Same as local parameters" +msgstr "Igual que parámetros locales" + +#: sflphone.xml:263(listitem) +msgid "Manually" +msgstr "Manualmente" + +#: sflphone.xml:272(title) +msgid "Security features" +msgstr "Características de seguridad" + +#: sflphone.xml:275(title) +msgid "Secure RTP" +msgstr "RTP seguro" + +#: sflphone.xml:278(title) +msgid "TLS" +msgstr "TLS" + +#: sflphone.xml:285(title) +msgid "Call features" +msgstr "Características de llamada" + +#: sflphone.xml:287(para) +msgid "" +"All the following features are available with both SIP and IAX2 accounts." +msgstr "" +"Todas las características siguientes están disponibles con las cuentas SIP e " +"IAX2." + +#: sflphone.xml:292(title) +msgid "Dial button" +msgstr "Botón de marcado" + +#. ==== End of Figure ==== +#: sflphone.xml:303(para) +msgid "" +"You may have an unlimited number of calls at the same time, even with " +"different accounts." +msgstr "" +"Usted puede tener un número ilimitado de llamadas al mismo tiempo, incluso " +"con diferentes cuentas." + +#: sflphone.xml:304(para) +msgid "" +"To create a new call when you already have a current call, just click on the " +"<guilabel>Dial</guilabel> button. The current call will automatically be put " +"on hold." +msgstr "" +"Para crear una nueva llamada cuando usted tiene ya una llamada actual, " +"apenas chasque encendido el botón de <guilabel>Marcar</guilabel>. La llamada " +"actual será automáticamente en espera." + +#: sflphone.xml:307(title) +msgid "Make an other call" +msgstr "Realizar otra llamada" + +#. ==== End of Figure ==== +#: sflphone.xml:318(para) +msgid "" +"Keyboard shortcut to perform this action: <accel>NUMPAD</accel> or almost " +"any keys." +msgstr "" +"Atajo de teclado para realizar esta acción: <accel>NUMPAD</accel> o casi " +"cualquier clave." + +#: sflphone.xml:326(title) +msgid "Call button" +msgstr "Botón de llamada" + +#. ==== End of Figure ==== +#: sflphone.xml:337(para) sflphone.xml:355(para) +msgid "Keyboard shortcut to perform this action: <accel>Enter</accel>." +msgstr "Atajo de teclado para realizar esta acción: <accel>Enter</accel>." + +#: sflphone.xml:344(title) +msgid "Answer button" +msgstr "Botón de respuesta" + +#: sflphone.xml:361(title) +msgid "Hangup button" +msgstr "Botón de colgado" + +#. ==== End of Figure ==== +#: sflphone.xml:372(para) sflphone.xml:392(para) +msgid "Keyboard shortcut to perform this action: <accel>ESC</accel>." +msgstr "Atajo de teclado para realizar esta acción: <accel>ESC</accel>." + +#: sflphone.xml:377(para) +msgid "" +"When you refuse a call, your caller is automatically redirected to your " +"voicemail box, if applicable." +msgstr "" +"Cuando usted rechaza una llamada, su llamador esta redirigido " +"automáticamente a su caja de buzón de voz, si fuera aplicable." + +#: sflphone.xml:381(title) +msgid "Refuse button" +msgstr "Botón de rechazar" + +#: sflphone.xml:399(title) +msgid "Hold on button" +msgstr "Botón es espera" + +#: sflphone.xml:411(title) +msgid "Hold off button" +msgstr "Botón seguir" + +#: sflphone.xml:426(title) +msgid "Transfer button" +msgstr "Botón transferir" + +#. ==== End of Figure ==== +#: sflphone.xml:437(para) +msgid "Then type the number you want to transfer the current call to." +msgstr "Despuès marca el número para transferir la llamada actual." + +#: sflphone.xml:440(title) +msgid "Validate the transfer" +msgstr "Valide la transferencia" + +#. ==== End of Figure ==== +#: sflphone.xml:451(para) +msgid "" +"And press <accel>Enter</accel>. Clicking again on the transfer button " +"cancels the transfer." +msgstr "" +"Y prensa <accel>Enter</accel>. Chascar otra vez en el botón de la " +"transferencia cancela la transferencia." + +#: sflphone.xml:457(para) +msgid "" +"Go to " +"<menuchoice><guimenu>Edit</guimenu><guimenuitem>Preferences</guimenuitem><gui" +"menuitem>Audio</guimenuitem></menuchoice> to configure the recordings " +"destination folder." +msgstr "" +"Vaya a " +"<menuchoice><guimenu>Editar</guimenu><guimenuitem>Preferencias</guimenuitem><" +"guimenuitem>Audio</guimenuitem></menuchoice> para configurar la carpeta de " +"la destinación de las grabaciones." + +#: sflphone.xml:461(title) +msgid "Record settings" +msgstr "Recordar parámetros" + +#: sflphone.xml:474(title) +msgid "Record button" +msgstr "Botón de grabación" + +#: sflphone.xml:488(caution) +msgid "" +"This feature is available only if you fill out the voicemail number " +"information for your default account." +msgstr "" +"Esta característica está disponible solamente si usted completa la " +"información del número del buzón de voz para su cuenta por defecto." + +#: sflphone.xml:492(title) +msgid "Voicemail button" +msgstr "Botón del buzón de voz" + +#: sflphone.xml:506(para) +msgid "" +"A direct IP call is a call established between two peers without any " +"accounts. When dialing, such a call must prefixed with " +"<guilabel>sip:</guilabel>." +msgstr "" +"Una llamada IP directa es una llamada establecida entre dos pares sin " +"ningunas cuentas. Al marcar, ese typo de lamada debe ser prefijada con " +"<guilabel>sip: </guilabel>." + +#: sflphone.xml:508(para) +msgid "" +"Direct IP calls use SIP protocol to establish communication and RTP to " +"transport data. It is right now not available with IAX2." +msgstr "" +"Llamadas IP directas usan el protocolo SIP para establecer la comunicación y " +"RTP para transportar datos. No está ahora disponible con IAX2." + +#: sflphone.xml:510(para) +msgid "" +"Go to " +"<menuchoice><guimenu>Edit</guimenu><guimenuitem>Preferences</guimenuitem><gui" +"menuitem>Direct IP calls</guimenuitem></menuchoice> to configure the " +"advanced security features for this kind of calls." +msgstr "" +"Vaya a " +"<menuchoice><guimenu>Editar</guimenu><guimenuitem>Preferencias</guimenuitem><" +"guimenuitem>Llamadas IP directas</guimenuitem></menuchoice> para configurar " +"los parámetros de seguridad avanzados para esta clase de llamadas." + +#: sflphone.xml:514(para) +msgid "" +"SFLphone now supports conference call hosting integrating server like " +"features in a simple GUI." +msgstr "" +"SFLphone ahora apoya el recibimiento de la audioconferencia, integrando " +"características de servidor en un GUI fácil." + +#: sflphone.xml:520(guilabel) +msgid "Create a conference" +msgstr "Crear conferencia" + +#: sflphone.xml:521(para) +msgid "" +"To host a conference, simply drag and drop one call on another. Additional " +"participants are added the same way, dragging a call on the conference icon." +msgstr "" +"Para recibir una conferencia, simplemente arrastre - y - caen una llamada " +"sobre la otra. Agrega los participantes adicionales de la misma manera, " +"arrastrando una llamada en el icono de la conferencia." + +#: sflphone.xml:528(guilabel) +msgid "Leave a conference" +msgstr "Salir de la conferencia" + +#: sflphone.xml:529(para) +msgid "" +"SFLphone conference model let you leave a conference that you are currently " +"hosting to answer any other incoming communication or even initiate new " +"ones. The conference is not interupted Double clicking the conference icon " +"let you reintroduce the conference." +msgstr "" +"El modelo de la conferencia de SFLphone le dejó dejar una conferencia que " +"usted está recibiendo actualmente para contestar a cualquier otras nuevas " +"llamadas o iniciar otras. La conferencia no es cortada, doble chasca el " +"icono de la conferencia le dejó regresar a la conferencia." + +#: sflphone.xml:538(guilabel) +msgid "Multiple conference" +msgstr "Conferencia múltiple" + +#: sflphone.xml:539(para) +msgid "" +"SFLphone supports multiple conferences running simultaneously. Two " +"conferences can be joined the same way they are created, dragging one on the " +"other." +msgstr "" +"SFLphone apoya múltiples conferencias que funcionan simultáneamente. Dos " +"conferencias se pueden ensamblar de la misma manera que se crean, " +"arrastrando una en la otra." + +#: sflphone.xml:547(guilabel) +msgid "Hangup/Hold a conference" +msgstr "Poner una conferencia en espera/Retrasar una conferencia" + +#: sflphone.xml:548(para) +msgid "" +"Right click the conference icon. Holding the conference put all participants " +"on hold. Hangup a conference hangup all participants." +msgstr "" +"Derecho chasque el icono de la conferencia. Poner la conferencia en espera " +"puso todos los participantes en espera. Retrasar una conferencia retrasa " +"todos los participantes." + +#: sflphone.xml:565(title) +msgid "Audio configuration" +msgstr "Configuración de sonido" + +#: sflphone.xml:566(para) +msgid "ALSA and Pulseaudio native interfaces are available." +msgstr "Los interfaces nativos ALSA y Pulseaudio están disponibles." + +#: sflphone.xml:582(title) +msgid "Codecs overview" +msgstr "Descripción de los codificadores-decodificador" + +#: sflphone.xml:583(para) +msgid "SFLphone supports several widely used audio codec:" +msgstr "" +"SFLphone apoya varios codificador-decodificador audio ampliamente utilizado:" + +#: sflphone.xml:587(guilabel) +msgid "PCMU/PCMA" +msgstr "PCMU/PCMA" + +#: sflphone.xml:588(para) +msgid "" +"ITU-T telefony standard PCM formats, 8kHz, 64 kbit/s, using logarithmic byte " +"compression algorithm." +msgstr "" +"Formatos PCM del estándar de telefonia de ITU-T, 8kHz, 64 kbit/s, usando " +"algoritmo logarítmico de compresión del octeto." + +#: sflphone.xml:594(guilabel) +msgid "GSM" +msgstr "GSM" + +#: sflphone.xml:595(para) +msgid "" +"Global System for Mobile communications (GSM) narrowband 8kHz standard based " +"on linear prediction encoding." +msgstr "" +"Estándar de banda estrecha 8kHz de la comunicaciones Sistema Global para " +"Movíl (GSM) basado en la codificación de predicción linear." + +#: sflphone.xml:601(guilabel) +msgid "G722" +msgstr "G722" + +#: sflphone.xml:602(para) +msgid "ITU-T standard wideband 16kHz standard based on linear prediction." +msgstr "" +"Estándar de la banda ancha 16kHz de ITU-T basado en la predicción linear." + +#: sflphone.xml:607(guilabel) +msgid "SPEEX" +msgstr "SPEEX" + +#: sflphone.xml:608(para) +msgid "" +"High quality voice encoding/decoding available in narrowband 8Khz, wideband " +"16khz (HD Voice), and ultra-wideband 32 kHz. Integrate additional features " +"such as Variable Bit Rate (VBR) and noise reduction." +msgstr "" +"Codificación/Decodificación de voz de alta calidad disponible en la banda " +"estrecha 8Khz, la banda ancha 16khz (voz HD), y la ultra-banda ancha 32 kHz. " +"Integre las características adicionales tal como índice binario variable " +"(VBR) y reducción del nivel de ruidos." + +#: sflphone.xml:617(guilabel) +msgid "CELT" +msgstr "CELT" + +#: sflphone.xml:628(title) +msgid "Address books" +msgstr "Agenda de direcciones" + +#: sflphone.xml:630(title) +msgid "Enable the address book support" +msgstr "Activar el soporte para agenda de direcciones" + +#: sflphone.xml:631(para) +msgid "To enable the address book, perform the following steps:" +msgstr "Para activar la agenda de direcciones, sigue los siguientes pasos:" + +#: sflphone.xml:634(para) +msgid "" +"Choose " +"<menuchoice><guimenu>Edit</guimenu><guimenuitem>Preferences</guimenuitem></me" +"nuchoice>." +msgstr "" +"Escoje " +"<menuchoice><guimenu>Editar</guimenu><guimenuitem>Preferencias</guimenuitem><" +"/menuchoice>." + +#: sflphone.xml:638(para) +msgid "" +"Select the <menuchoice><guimenu>Address book</guimenu></menuchoice> tab." +msgstr "" +"Seleccione la pestaña <menuchoice><guimenu>Libreta de " +"contactos</guimenu></menuchoice>." + +#: sflphone.xml:642(para) +msgid "Check the <guilabel>Use Evolution address books</guilabel> box." +msgstr "" +"Escoje la checkbox <guilabel>Usar libretas de contactos Evolution</guilabel>." + +#: sflphone.xml:645(para) +msgid "" +"Every address books you configured in Evolution will be now available in " +"<application>SFLphone</application>. Please be sure you selected at least " +"one address book." +msgstr "" +"Cada libreta de contactos configurada en Evolución estara disponible en " +"<application>SFLphone</application>. Por favor de asegurarse de seleccionar " +"por lo menos una libreta." + +#: sflphone.xml:649(title) +msgid "Available options" +msgstr "Opciones disponibles" + +#: sflphone.xml:650(para) +msgid "" +"In " +"<menuchoice><guimenu>Edit</guimenu><guimenuitem>Preferences</guimenuitem><gui" +"menuitem>Address book</guimenuitem></menuchoice>, you may select one or all " +"of the following options:" +msgstr "" +"En " +"<menuchoice><guimenu>Editar</guimenu><guimenuitem>Preferencias</guimenuitem><" +"guimenuitem>Libretas de contactos</guimenuitem></menuchoice>, usted puede " +"seleccionar una o todas las opciones siguientes:" + +#: sflphone.xml:653(guilabel) +msgid "Display contact photo if available" +msgstr "Mostrar la foto del contacto si está disponible" + +#: sflphone.xml:654(para) +msgid "" +"The contact photo will be displayed as a thumbnail beside the phone number." +msgstr "" +"La foto del contacto será exhibida como un thumbnail al lado del número de " +"teléfono." + +#: sflphone.xml:659(guilabel) +msgid "Fields from Evolution's address book" +msgstr "Campos de la agenda de direcciones de Evolution" + +#: sflphone.xml:660(para) +msgid "" +"You may use one or all of these following information from your contact." +msgstr "" +"Usted puede utilizar una o todas las informaciónes siguientes de su contacto." + +#: sflphone.xml:663(listitem) +msgid "Work phone number" +msgstr "Número de teléfono profesional" + +#: sflphone.xml:664(listitem) +msgid "Home phone number" +msgstr "Número de teléfono personal" + +#: sflphone.xml:665(listitem) +msgid "Mobile phone number" +msgstr "Número de teléfono móvil" + +#: sflphone.xml:673(title) +msgid "Using the address book" +msgstr "Usando la agenda de direcciones" + +#: sflphone.xml:676(para) +msgid "" +"On the toolbar, click on the following button to display the address book " +"window:" +msgstr "" +"En la barra de herramientas, chasque encendido el botón siguiente para " +"exhibir la ventana de libreta de contactos:" + +#: sflphone.xml:680(title) +msgid "Address book toolbar button" +msgstr "Botón de la barra de herramientas de libretas de contactos" + +#: sflphone.xml:693(para) +msgid "Search for a contact" +msgstr "Buscar un contacto" + +#: sflphone.xml:697(para) +msgid "" +"New entries should have appeared in the window. Double click on it to call " +"the contact. You may also <menuchoice><guimenu>Right " +"click</guimenu><guimenuitem>Edit before calling</guimenuitem></menuchoice> " +"to modify the entry before calling." +msgstr "" +"Las nuevas entradas deben haber aparecidas en la ventana. Doble chasqúela " +"encendido para llamar el contacto. Usted puede también " +"<menuchoice><guimenu>Derecho - chasque</guimenu><guimenuitem>Editar antes de " +"llamar</guimenuitem></menuchoice> para modificar la entrada antes de llamar." + +#: sflphone.xml:704(title) +msgid "Preferences" +msgstr "Configuración" + +#: sflphone.xml:706(para) +msgid "" +"Go to " +"<menuchoice><guimenu>Edit</guimenu><guimenuitem>Preferences</guimenuitem></me" +"nuchoice> to access the configuration panel." +msgstr "" +"Vaya a " +"<menuchoice><guimenu>Editar</guimenu><guimenuitem>Preferencias</guimenuitem><" +"/menuchoice> para acceder al panel de la configuración." + +#: sflphone.xml:707(para) +msgid "Each section is detailed below." +msgstr "Cada sección se detalla abajo" + +#: sflphone.xml:710(title) +msgid "General" +msgstr "Opciones Generales" + +#: sflphone.xml:711(para) +msgid "" +"This section provides the user general settings regarding the application." +msgstr "Esta sección provee al usuario las opciones general de la aplicación" + +#: sflphone.xml:715(title) +msgid "Desktop notifications options" +msgstr "Opciones de notificación de escritorio" + +#: sflphone.xml:729(guilabel) +msgid "Enable notifications" +msgstr "Activar notificaciones" + +#: sflphone.xml:730(para) +msgid "" +"Both clients use their desktop environment notification system. If checked, " +"you will receive desktop notifications for events such as incoming calls and " +"system messages." +msgstr "" +"Ambos clientes usan su sistema de notificación del entorno de escritorio. Si " +"está activado, recibirás notificaciones de escritorio para eventos como las " +"llamadas entrantes y mensajes del sistema." + +#: sflphone.xml:734(title) +msgid "Example of an incoming call notification" +msgstr "Ejemplo de notificación para una llamada entrante" + +#: sflphone.xml:746(guilabel) +msgid "Enable voicemail notifications" +msgstr "Activar notificaciones de correo de voz" + +#: sflphone.xml:747(para) +msgid "" +"The voicemail notifications are handled separatly. If checked, you will be " +"notified with the number of unread voicemails for your accounts." +msgstr "" +"Las notificaciones del buzón de voz se manejan separadamente. Si está " +"comprobado, le notificara el número de buzones de voz sin de sus cuentas." + +#: sflphone.xml:751(title) +msgid "Example of a voicemail notification" +msgstr "Ejemplo de notificacion de correo de voz" + +#: sflphone.xml:770(title) +msgid "System tray options" +msgstr "Opciones de la bandeja del sistema" + +#: sflphone.xml:784(guilabel) +msgid "Popup main window on incoming call" +msgstr "Mostrar ventana principal al recibir una llamada" + +#: sflphone.xml:785(para) +msgid "" +"If SFLphone is closed on the system tray, pops the main window up on " +"foreground when receiving an incoming call." +msgstr "" +"Si SFLphone esta cerrado en la bandeja del sistema, exhibe la ventana " +"principal emergente en primero plano para recibir una llamada entrante." + +#: sflphone.xml:790(guilabel) +msgid "Never popup main window" +msgstr "Nuncà exhibe la ventana principal emergente" + +#: sflphone.xml:791(para) +msgid "" +"If SFLphone is closed on the system tray, never pops the main window up on " +"foreground when receiving an incoming call." +msgstr "" +"Si SFLphone esta cerrado en la bandeja del sistema, nunca exhibe la ventana " +"principal emergente en primero plano para recibir una llamada entrante." + +#: sflphone.xml:796(guilabel) +msgid "Hide SFLphone window on startup" +msgstr "Esconder la pantalla de SFLphone al principio" + +#: sflphone.xml:797(para) +msgid "On startup, SFLphone will go directly on the system tray." +msgstr "Al principio, SFLphone ira directamente a la bandeja del sistema." + +#: sflphone.xml:810(title) +msgid "Calls history options" +msgstr "Opciones del historial de llamadas" + +#: sflphone.xml:823(guilabel) +msgid "Keep my history for at least n days" +msgstr "Mantener mi historial por al menos n días" + +#: sflphone.xml:824(para) +msgid "" +"If checked, calls will be kept up to N days in the history. You may select a " +"custom number of days. Do not check it if you don't want to use this feature." +msgstr "" +"Si está activado, las llamadas se mantendrán hasta N días en el historial. " +"Puedes seleccionar un número concreto de días. No lo actives si no quieres " +"usar esta opción." + +#: sflphone.xml:834(title) +msgid "Configuration file options" +msgstr "Opciones del archivo de configuración" + +#: sflphone.xml:847(guilabel) +msgid "Store SIP credentials as MD5 hash" +msgstr "Guarda información SIP como hash MD5" + +#: sflphone.xml:848(para) +msgid "" +"If checked, your password information will be encrypted in the configuration " +"file, instead of plain text." +msgstr "" +"Si está activo, tu información de contraseñas se almacenarán cifradas en el " +"archivo de configuración, en vez de en texto plano." + +#: sflphone.xml:859(title) +msgid "Audio" +msgstr "Sonido" + +#: sflphone.xml:863(title) +msgid "Address book" +msgstr "Libreta de direcciones" + +#: sflphone.xml:865(para) +msgid "" +"Refer to the <link linkend=\"addressbook\">Address books</link> section for " +"more information." +msgstr "" +"Refierese a la secciòn <link linkend=\"addressbook\">Libretas de " +"contactos</link> para màs informaciones." + +#: sflphone.xml:869(title) +msgid "Hooks" +msgstr "Disparadores" + +#: sflphone.xml:877(title) +msgid "Direct IP calls" +msgstr "Llamadas IP directas" + +#: sflphone.xml:878(para) +msgid "" +"Refer to the <link linkend=\"directip\">Direct IP calls</link> section for " +"more information." +msgstr "" +"Refierese a la secciòn <link linkend=\"directip\">Llamadas directas " +"IP</link> para màs informaciones." + +#. Put one translator per line, in the form of NAME <EMAIL>, YEAR1, YEAR2 +#: sflphone.xml:0(None) +msgid "translator-credits" +msgstr "" +"Launchpad Contributions:\n" +" Alfonso E. Romero https://launchpad.net/~alfonsoeromero\n" +" DiegoJ https://launchpad.net/~diegojromerolopez\n" +" Maxime Chambreuil https://launchpad.net/~max3903" diff --git a/sflphone-client-gnome/doc/fr/fr.po b/sflphone-client-gnome/doc/fr/fr.po new file mode 100644 index 0000000000..f9da713d2e --- /dev/null +++ b/sflphone-client-gnome/doc/fr/fr.po @@ -0,0 +1,1284 @@ +# French translation for sflphone +# Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 +# This file is distributed under the same license as the sflphone package. +# FIRST AUTHOR <EMAIL@ADDRESS>, 2009. +# +msgid "" +msgstr "" +"Project-Id-Version: sflphone\n" +"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" +"POT-Creation-Date: 2009-10-26 15:41-0400\n" +"PO-Revision-Date: 2009-12-09 15:38+0000\n" +"Last-Translator: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com>\n" +"Language-Team: French <fr@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2009-12-09 20:52+0000\n" +"X-Generator: Launchpad (build Unknown)\n" + +#. When image changes, this message will be marked fuzzy or untranslated for you. +#. It doesn't matter what you translate it to: it's not used at all. +#: sflphone.xml:230(None) +msgid "" +"@@image: 'figures/account_advanced.png'; md5=8cc040a5f56fe61566ad7b0fa83955d9" +msgstr "not used" + +#. When image changes, this message will be marked fuzzy or untranslated for you. +#. It doesn't matter what you translate it to: it's not used at all. +#: sflphone.xml:296(None) +msgid "@@image: 'figures/dial.png'; md5=81ff4280c293e62a49fad3a4b61b9bb5" +msgstr "not used" + +#. When image changes, this message will be marked fuzzy or untranslated for you. +#. It doesn't matter what you translate it to: it's not used at all. +#: sflphone.xml:311(None) +msgid "" +"@@image: 'figures/call-second.png'; md5=fa490e3b07eebaa9f4ff719f579d68ef" +msgstr "not used" + +#. When image changes, this message will be marked fuzzy or untranslated for you. +#. It doesn't matter what you translate it to: it's not used at all. +#: sflphone.xml:330(None) +msgid "@@image: 'figures/call.png'; md5=ecd96beec76f808b5c1469ecc1293237" +msgstr "not used" + +#. When image changes, this message will be marked fuzzy or untranslated for you. +#. It doesn't matter what you translate it to: it's not used at all. +#: sflphone.xml:348(None) +msgid "@@image: 'figures/answer.png'; md5=c168995c6b36b5d200c49d1c02c2ea52" +msgstr "not used" + +#. When image changes, this message will be marked fuzzy or untranslated for you. +#. It doesn't matter what you translate it to: it's not used at all. +#: sflphone.xml:365(None) +msgid "@@image: 'figures/hangup.png'; md5=0cac4dfe3a9a4bdf4d12229f77e3723a" +msgstr "not used" + +#. When image changes, this message will be marked fuzzy or untranslated for you. +#. It doesn't matter what you translate it to: it's not used at all. +#: sflphone.xml:385(None) +msgid "@@image: 'figures/refuse.png'; md5=34b6cbf068e56163058e79de3ca70c59" +msgstr "not used." + +#. When image changes, this message will be marked fuzzy or untranslated for you. +#. It doesn't matter what you translate it to: it's not used at all. +#: sflphone.xml:403(None) +msgid "@@image: 'figures/holdon.png'; md5=655078b8b495ada29f65b58501187d16" +msgstr "not used" + +#. When image changes, this message will be marked fuzzy or untranslated for you. +#. It doesn't matter what you translate it to: it's not used at all. +#: sflphone.xml:415(None) +msgid "@@image: 'figures/holdoff.png'; md5=e06b8eba03f1545cd18891630b22f281" +msgstr "not used" + +#. When image changes, this message will be marked fuzzy or untranslated for you. +#. It doesn't matter what you translate it to: it's not used at all. +#: sflphone.xml:430(None) +msgid "@@image: 'figures/transfer.png'; md5=92f921c7c6ba4ee2487ccf6e02226d9a" +msgstr "not used" + +#. When image changes, this message will be marked fuzzy or untranslated for you. +#. It doesn't matter what you translate it to: it's not used at all. +#: sflphone.xml:444(None) +msgid "" +"@@image: 'figures/transfer-go.png'; md5=553b57d5a9fc9f248ba15cecc32d343f" +msgstr "not used" + +#. When image changes, this message will be marked fuzzy or untranslated for you. +#. It doesn't matter what you translate it to: it's not used at all. +#: sflphone.xml:465(None) +msgid "" +"@@image: 'figures/rec-settings.png'; md5=27d51e45ff23dde58b0512f90773f6ce" +msgstr "not used" + +#. When image changes, this message will be marked fuzzy or untranslated for you. +#. It doesn't matter what you translate it to: it's not used at all. +#: sflphone.xml:478(None) +msgid "@@image: 'figures/record.png'; md5=7a594660924940e8def9ecfcee0e8cb4" +msgstr "not used" + +#. When image changes, this message will be marked fuzzy or untranslated for you. +#. It doesn't matter what you translate it to: it's not used at all. +#: sflphone.xml:496(None) +msgid "" +"@@image: 'figures/voicemail.png'; md5=36dbeb4bcc6a68519d474552a888ce1e" +msgstr "not used" + +#. When image changes, this message will be marked fuzzy or untranslated for you. +#. It doesn't matter what you translate it to: it's not used at all. +#: sflphone.xml:684(None) +msgid "" +"@@image: 'figures/addressbook-button.png'; " +"md5=b4a820013ef8b8f48e7de780a66c7800" +msgstr "not used" + +#. When image changes, this message will be marked fuzzy or untranslated for you. +#. It doesn't matter what you translate it to: it's not used at all. +#: sflphone.xml:719(None) +msgid "" +"@@image: 'figures/desktop-notif-settings.png'; " +"md5=2bca85d6d9871883399481b994bd3384" +msgstr "not used" + +#. When image changes, this message will be marked fuzzy or untranslated for you. +#. It doesn't matter what you translate it to: it's not used at all. +#: sflphone.xml:738(None) +msgid "" +"@@image: 'figures/notif-example.png'; md5=d09008bedcaee435b12cd165d42e39b7" +msgstr "not used" + +#. When image changes, this message will be marked fuzzy or untranslated for you. +#. It doesn't matter what you translate it to: it's not used at all. +#: sflphone.xml:755(None) +msgid "" +"@@image: 'figures/voicemail-notif.png'; md5=a33ed4ce4b693d67ee453b4ef1fa6c30" +msgstr "not used" + +#. When image changes, this message will be marked fuzzy or untranslated for you. +#. It doesn't matter what you translate it to: it's not used at all. +#: sflphone.xml:774(None) +msgid "" +"@@image: 'figures/systemtray-settings.png'; " +"md5=638612a08eb31eb768c4f08ace9c909a" +msgstr "not used" + +#. When image changes, this message will be marked fuzzy or untranslated for you. +#. It doesn't matter what you translate it to: it's not used at all. +#: sflphone.xml:814(None) +msgid "" +"@@image: 'figures/callshistory-settings.png'; " +"md5=287d8aed7d7c71752257c64e89a9127d" +msgstr "not used" + +#. When image changes, this message will be marked fuzzy or untranslated for you. +#. It doesn't matter what you translate it to: it's not used at all. +#: sflphone.xml:838(None) +msgid "" +"@@image: 'figures/configfile-settings.png'; " +"md5=eb4a5545f137b825dcdaf0396a9f1a7d" +msgstr "not used" + +#: sflphone.xml:12(title) +msgid "SFLphone Manual v1.0" +msgstr "Manuel d'utilisateur de SFLphone v1.0" + +#: sflphone.xml:15(year) +msgid "2006" +msgstr "2006" + +#: sflphone.xml:16(year) +msgid "2007" +msgstr "2007" + +#: sflphone.xml:17(year) +msgid "2008" +msgstr "2008" + +#: sflphone.xml:18(year) +msgid "2009" +msgstr "2009" + +#: sflphone.xml:19(holder) sflphone.xml:32(publishername) sflphone.xml:80(para) +msgid "Savoir-faire Linux" +msgstr "Savoir-faire Linux" + +#: sflphone.xml:26(para) +msgid "" +"SFLphone is an enterprise-class SIP/IAX2 compatible softphone for GNU/Linux, " +"published under the GPLv3 license." +msgstr "" +"SFLphone est téléphone logiciel de voix sur IP pour GNU/LINUX destiné aux " +"entreprises, compatible avec les protocoles SIP et IAX2. Il est distribué " +"sous licence GPLv3." + +#: sflphone.xml:36(para) +msgid "" +"Permission is granted to copy, distribute and/or modify this document under " +"the terms of the GNU Free Documentation Licence (GFDL), Version 1.1 or any " +"later version published by the Free Software Foundation with no Invariant " +"Sections, no Front-Cover Texts, and no Back-Cover Texts. You can find a copy " +"of the GFDL at this <ulink type=\"help\" url=\"ghelp:fdl\">link</ulink> or " +"in the file COPYING-DOCS distributed with this manual." +msgstr "" + +#: sflphone.xml:37(para) +msgid "" +"This manual is part of a collection of GNOME manuals distributed under the " +"GFDL. If you want to distribute this manual separately from the collection, " +"you can do so by adding a copy of the licence to the manual, as described in " +"section 6 of the licence." +msgstr "" + +#: sflphone.xml:42(firstname) +msgid "Pierre-Luc" +msgstr "Pierre-Luc" + +#: sflphone.xml:43(surname) +msgid "Bacon" +msgstr "Bacon" + +#: sflphone.xml:45(email) +msgid "pierre-luc.bacon@savoirfairelinux.com" +msgstr "pierre-luc.bacon@savoirfairelinux.com" + +#: sflphone.xml:50(firstname) +msgid "Emmanuel" +msgstr "Emmanuel" + +#: sflphone.xml:51(surname) +msgid "Milou" +msgstr "Milou" + +#: sflphone.xml:53(email) +msgid "emmanuel.milou@savoirfairelinux.com" +msgstr "emmanuel.milou@savoirfairelinux.com" + +#: sflphone.xml:58(firstname) +msgid "Jérémy" +msgstr "Jérémy" + +#: sflphone.xml:59(surname) +msgid "Quentin" +msgstr "Quentin" + +#: sflphone.xml:61(email) +msgid "jeremy.quentin@savoirfairelinux.com" +msgstr "jeremy.quentin@savoirfairelinux.com" + +#: sflphone.xml:66(firstname) +msgid "Alexandre" +msgstr "Alexandre" + +#: sflphone.xml:67(surname) +msgid "Savard" +msgstr "Savard" + +#: sflphone.xml:69(email) +msgid "alexandre.savard@savoirfairelinux.com" +msgstr "alexandre.savard@savoirfairelinux.com" + +#: sflphone.xml:76(revnumber) +msgid "SFLphone Manual V1.0" +msgstr "Manuel de l'utilisateur pour SFLphone V1.0" + +#: sflphone.xml:77(date) +msgid "September 2009" +msgstr "Septembre 2009" + +#: sflphone.xml:79(para) +msgid "SFLphone team" +msgstr "Équipe SFLphone" + +#: sflphone.xml:85(releaseinfo) +msgid "This manual describes version 0.9.7 of SFLphone." +msgstr "Ce manuel décrit la version 0.9.7 de SFLphone." + +#: sflphone.xml:90(primary) +msgid "SFLphone" +msgstr "SFLphone" + +#: sflphone.xml:94(title) +msgid "Introduction" +msgstr "Introduction" + +#: sflphone.xml:95(para) +msgid "" +"<application>SFLphone</application> is a SIP/IAX2 softphone and VoIP client " +"for GNU/Linux. It aims at being a robust enterprise-class desktop phone and " +"has been designed with a hundred-calls-a-day receptionist in mind." +msgstr "" +"<application>SFLphone</application> est un softphone compatible avec SIP et " +"IAX2 et un client de voix sur IP pour GNU/Linux. Notre but est d'offrir un " +"téléphone logiciel intégré au bureau, robuste, destiné à une utilisation " +"professionnelle." + +#: sflphone.xml:98(para) +msgid "" +"<application>SFLphone</application> is a free software and is distributed " +"under the GNU General Public License version 3. It is developed by Savoir-" +"Faire Linux, a Canadian Linux consulting company, in partnership with the " +"global community." +msgstr "" +"<application>SFLphone</application> est un logiciel open-source distribué " +"sous licence GNU GPL version 3. Il est développé par la compagnie de " +"consultation canadienne Savoir-faire Linux, en collaboration avec la " +"communauté." + +#: sflphone.xml:101(para) +msgid "" +"Among the many features we developed for you, we could highlight the high " +"definition sound (wide-band audio codecs - speex, G722, Celt), multiple " +"conference call, audio recording, voicemail notification, and call history. " +"More than a simple softphone, <application>SFLphone</application> supports " +"advanced enterprise-class call features: unlimited number of calls, call " +"transfer, and on/off hold option." +msgstr "" +"Parmi les nombreuses fonctionnalités de SFLphone, on peut noter notamment la " +"qualité de son haute-définition (codecs audio large bande - speex, G722, " +"Celt), conférences multiples, enregistrement d'appel, notification de " +"messages vocaux and historique d'appels. Plus qu'un simple téléphone " +"logiciel, <application>SFLphone</application> supporte des fonctionnalités " +"avancées destinées aux entreprises: nombre illimité d'appels, transfert, " +"mise en attente." + +#: sflphone.xml:108(para) +msgid "" +"This release also provides advanced security features (secure RTP and TLS)." +msgstr "" +"Cette nouvelle version implémente des fonctionnalités de sécurité avancées " +"(RTP sécurisé et TLS)." + +#: sflphone.xml:112(para) +msgid "" +"Besides the native ALSA interface, <application>SFLphone</application> now " +"fully supports PulseAudio sound server so you could experience the great " +"possibilities it offers (sound mixing, per application volume control, ...)." +msgstr "" +"En plus de l'interface native ALSA, <application>SFLphone</application> " +"supporte nativement le serveur de son PulseAudio. Profitez ainsi pleinement " +"des possibiltés qu'il apporte (mixage logiciel, gestion des volumes par " +"application, ...)." + +#: sflphone.xml:118(title) +msgid "Getting started" +msgstr "Premiers pas" + +#: sflphone.xml:123(guilabel) +msgid "Create a free SIP/IAX2 account on sflphone.org" +msgstr "Créer un compte SIP/IAX2 gratuit sur sflphone.org" + +#: sflphone.xml:124(para) +msgid "" +"Savoir-faire Linux provides free SIP/IAX2 accounts on an Asterisk server. By " +"clicking this option, you will be created an account to make test calls. The " +"echo service is available, you may also call other accounts registered to " +"the same server." +msgstr "" +"Savoir-faire Linux fournit des comptes SIP/IAX2 gratuits sur un serveur " +"Asterisk central. En choisissant cette option, nous vous créons un compte " +"de test. Le service echo vous est offert, ainsi que des appels vers d'autres " +"comptes enregistrés sur ce serveur." + +#: sflphone.xml:126(para) +msgid "" +"By filling out your email address information, you will receive voicemail " +"notifications by email. This information is not mandatory to get your free " +"account." +msgstr "" +"En remplissant votre adresse courriel, vous pourrez recevoir vos messages " +"vocaux par email. Cette information n'est cependant pas obligatoire." + +#: sflphone.xml:129(guilabel) +msgid "Register an existing SIP or IAX2 account" +msgstr "Enregistrer un compte SIP ou IAX2 existant" + +#: sflphone.xml:130(para) +msgid "" +"Click there if you already have an account and you want to use it with " +"SFLphone. You will be prompted to select the account type (SIP or IAX2) and " +"to fill out your account information. <application>SFLphone</application> " +"will then try to register it so you could start using it." +msgstr "" +"Choisissez cette option si vous avez déjà un compte et désirez l'utiliser " +"avec SFLphone. Il faut ensuite choisir le type de compte (SIP ou IAX2) et " +"remplir les informations nécessaires." + +#: sflphone.xml:119(para) +msgid "" +"The first time you start up sflphone, you will be ask to complete a wizard " +"to set up your(s) account(s). This account configuration manager offers you " +"two possibilities: <placeholder-1/>" +msgstr "" +"La première fois que vous lancez SFLphone, un assistant se lance pour vous " +"aider à configurer vos comptes. Vous avez alors deux " +"possibilités:<placeholder-1/>" + +#: sflphone.xml:135(para) +msgid "" +"You can always access the account creation manager: " +"<menuchoice><guimenu>Edit</guimenu><guimenuitem>Account creation " +"assistant</guimenuitem></menuchoice>." +msgstr "" +"Vous pouvez à tout moment accéder à l'assistant de création de compte: " +"<menuchoice><guimenu>Éditer</guimenu><guimenuitem>Assistant de création de " +"compte/guimenuitem></menuchoice>." + +#: sflphone.xml:141(title) +msgid "Managing your accounts" +msgstr "Gérer vos comptes" + +#: sflphone.xml:142(para) +msgid "" +"<application>SFLphone</application> supports both IAX2 and SIP accounts." +msgstr "" +"<application>SFLphone</application> supporte des comptes IAX2 et SIP." + +#: sflphone.xml:148(title) +msgid "Basic features" +msgstr "Fonctionnalités de base" + +#: sflphone.xml:150(title) +msgid "Creating a new account" +msgstr "Créer un nouveau compte" + +#: sflphone.xml:151(para) +msgid "To create a new account, perform the following steps:" +msgstr "Pour créer un nouveau compte, suivez les étapes suivantes:" + +#: sflphone.xml:153(para) sflphone.xml:191(para) sflphone.xml:201(para) +msgid "" +"Choose <menuchoice><guimenu>Edit</guimenu><guimenuitem>Manage " +"accounts</guimenuitem></menuchoice>." +msgstr "" +"Sélectionnez " +"<menuchoice><guimenu>Éditer</guimenu><guimenuitem>Comptes</guimenuitem></menu" +"choice>." + +#: sflphone.xml:154(para) +msgid "" +"Click on the <guilabel>Add</guilabel> button. Fill out the following " +"information:" +msgstr "" +"Cliquez sur le bouton <guilabel>Ajouter</guilabel>. Remplissez les " +"informations suivantes:" + +#: sflphone.xml:157(guilabel) +msgid "Alias" +msgstr "Alias" + +#: sflphone.xml:158(para) +msgid "" +"The name to identify your account in the list. It is not used for the " +"communications" +msgstr "" +"Le nom pour identifier ce compte dans la liste des comptes. il n'est pas " +"utilisé pour les communications" + +#: sflphone.xml:161(guilabel) +msgid "Protocol" +msgstr "Protocole" + +#: sflphone.xml:162(para) +msgid "Select SIP or IAX2. The most commons are SIP accounts." +msgstr "Choisissez SIP ou IAX2. Les plus courants sont les comptes SIP." + +#: sflphone.xml:165(guilabel) +msgid "Host name" +msgstr "Nom du hôte" + +#: sflphone.xml:166(para) +msgid "The name or the IP address of the server you want to register on." +msgstr "" +"Le nom ou l'adresse IP du serveur auprès duquel vous voulez enregistrer le " +"compte." + +#: sflphone.xml:169(guilabel) +msgid "User name" +msgstr "Nom d'utilisateur" + +#: sflphone.xml:170(para) +msgid "The name or the extension for your account." +msgstr "Le nom d'utilisateur ou l'extension de votre compte." + +#: sflphone.xml:173(guilabel) +msgid "Password" +msgstr "Mot de passe" + +#: sflphone.xml:174(para) +msgid "The password for your account." +msgstr "Le mot de passe associé à votre compte." + +#: sflphone.xml:177(guilabel) +msgid "Voicemail number" +msgstr "Numéro de boîte vocale" + +#: sflphone.xml:178(para) +msgid "" +"The number to dial to reach your voicemail. Example: 888, or *97. It will be " +"used as a quick dial button on the main interface." +msgstr "" +"Le numéro à composer pour joindre la boîte vocale associée à ce compte. " +"Exemple: 888, ou *97. Ce numéro sera utilisé comme raccourci pour appeler " +"votre bote vocale dans l'interface principale." + +#: sflphone.xml:182(para) +msgid "Click the <menuchoice><guimenu>Apply</guimenu></menuchoice> button." +msgstr "" +"Cliquez sur le bouton <menuchoice><guimenu>Appliquer</guimenu></menuchoice>." + +#: sflphone.xml:184(para) +msgid "" +"You may now check the state of your account(s). You may have as many setup " +"accounts as you wish. If it is registered, you may now use it to make calls." +msgstr "" +"Vous pouvez maintenant vérifier l'état de votre compte. S'il est enregistré, " +"vous pouvez maintenant passer un nouvel appel. Vous pouvez configurer autant " +"de comptes que vous le désirez." + +#: sflphone.xml:188(title) +msgid "Editing a configured account" +msgstr "Éditer un compte existant" + +#: sflphone.xml:189(para) +msgid "To edit an existing account, perform the following steps:" +msgstr "Pour éditer un compte, suivez les étapes suivantes:" + +#: sflphone.xml:192(para) +msgid "" +"Select in the list the account you would like to edit, then click on the " +"<guilabel>Edit</guilabel> button." +msgstr "" +"Sélectionnez le compte que vous voulez éditer dans la liste des comptes, " +"puis cliquez sur le bouton <guilabel>Éditer</guilabel>." + +#: sflphone.xml:193(para) +msgid "" +"Make your modifications, then click on the <guilabel>Apply</guilabel> button." +msgstr "" +"Faîtes vos modifications, puis cliquez sur le bouton " +"<guilabel>Appliquer</guilabel> pour sauvegarder vos changements." + +#: sflphone.xml:198(title) +msgid "Deleting an account" +msgstr "Supprimer un compte" + +#: sflphone.xml:199(para) +msgid "To delete an existing account, perform the following steps:" +msgstr "Pour supprimer un compte, suivez les étapes suivantes:" + +#: sflphone.xml:202(para) +msgid "" +"Select in the list the account you would like to delete, then click on the " +"<guibutton>Delete</guibutton> button." +msgstr "" +"Sélectionnez le compte que vous voulez supprimer dans la liste des comptes, " +"puis cliquez sur le bouton <guilabel>Supprimer</guilabel>." + +#: sflphone.xml:207(title) +msgid "Selecting a default account" +msgstr "Choisir un compte par défaut" + +#: sflphone.xml:208(para) +msgid "" +"As it is possible to have an unlimited number of registered accounts at the " +"same time, which account will be used when making a call ? You can not only " +"set up a default account to be used every time you are making a call, but an " +"entire priority list. To do that, perform the following steps:" +msgstr "" +"Comme il est possible d'avoir un nombre illimité de comptes enregistrés en " +"même temps, quel compte va être utilisé pour passer un appel? Il est " +"possible de configurer une liste de priorité des comptes pour passer des " +"appels. Pour cela, suivre les étapes suivantes:" + +#: sflphone.xml:210(para) +msgid "" +"Choose <menuchoice><guimenu>Edit</guimenu><guimenuitem>Manage " +"accounts</guimenuitem></menuchoice> to access the accounts list." +msgstr "" +"Sélectionner " +"<menuchoice><guimenu>Éditer</guimenu><guimenuitem>Comptes</guimenuitem></menu" +"choice> pour accéder à la liste des comptes." + +#: sflphone.xml:212(para) +msgid "" +"The first account in the account in list will be used as the default account " +"to make calls with. If it is not registered, SFLphone will try to use the " +"second in the list, if still not registered, the third, and so one ..." +msgstr "" +"Le premier compte dans la lsite sera utilisé comme le compte par défaut pour " +"passer des appels. Si ce compte n'est pas enregistré, SFLphone va essayer " +"d'utiliser le suivant dans la liste, etc ..." + +#: sflphone.xml:213(para) +msgid "" +"To reorder the accounts as you wish, select an account and click on the " +"<menuchoice><guimenu>Up</guimenu></menuchoice> or " +"<menuchoice><guimenu>Down</guimenu></menuchoice> button." +msgstr "" +"Pour ordonner les comptes comme vous le désirez, sélectionnez un compte et " +"cliquez sur le bouton <menuchoice><guimenu>Monter</guimenu></menuchoice> ou " +"<menuchoice><guimenu>Descendre</guimenu></menuchoice>." + +#: sflphone.xml:216(para) +msgid "" +"Note that you also can select an account to make a call with when dialing by " +"right-clicking on it." +msgstr "" +"Il est possible de sélectionner rapidement un compte pour un appel en " +"faisant un clic-droit sur l'appel en train d'être composé." + +#: sflphone.xml:221(title) +msgid "Advanced features" +msgstr "Fonctionnalités avancées" + +#: sflphone.xml:222(para) sflphone.xml:273(para) +msgid "These features are only available with SIP." +msgstr "Ces fonctionnalités sont seulement disponibles pour SIP." + +#: sflphone.xml:223(para) +msgid "" +"Follow the indications to <link linkend=\"account_edit\">edit an " +"account</link> and choose the <guimenu>Advanced</guimenu> tab." +msgstr "" +"Suivre les indications pour <link linkend=\"account_edit\">éditer un " +"compte</link> et choisir l'onglet <guimenu>Avancé</guimenu>." + +#: sflphone.xml:226(title) +msgid "Advanced features configuration panel" +msgstr "Panneau de configuration des options avancées" + +#: sflphone.xml:237(title) +msgid "Registration" +msgstr "Enregistrement" + +#: sflphone.xml:238(para) +msgid "You may set the expires header for a contact." +msgstr "Vous pouvez configurer l'en-tête expiration pour un contact." + +#: sflphone.xml:239(para) +msgid "" +"It basically represents the duration your registration will remain active. " +"If you don't register again within that time, calls will no longer be routed " +"to you. it should be not used as a keepalive mechanism though. The default " +"value is 600 seconds (ten minutes)." +msgstr "" + +#: sflphone.xml:240(note) +msgid "" +"To register to some VoIP services, you will need to set this value at at " +"least 1600 seconds (Example: French VoIP server freephonie.net)." +msgstr "" +"Pour vous enregistrer auprés de certains services de voix sur IP, vous avez " +"besoin de configurer cette valeur au minimum à 1 600 secondes (Exemple: " +"Serveur Free freephonie.net)." + +#: sflphone.xml:244(title) sflphone.xml:873(title) +msgid "Network" +msgstr "Réseau" + +#: sflphone.xml:245(para) +msgid "This section enables you to set advanced network parameters." +msgstr "" +"Cette section vous permet de configurer les paramètres réseau avancés." + +#: sflphone.xml:248(guilabel) +msgid "Local address" +msgstr "Adresse locale" + +#: sflphone.xml:249(para) +msgid "" +"it is initialized to your private/local IP address. Calls will be routed to " +"this address by default." +msgstr "" +"Elle est initialisée avec votre adresse IP locale/privée. Les appels seront " +"routés par défaut par cette adresse." + +#: sflphone.xml:252(guilabel) +msgid "Local port" +msgstr "Port local" + +#: sflphone.xml:253(para) +msgid "It is initialized to the default SIP port, 5060." +msgstr "Il est initialisé au port SIP par défaut, 5060" + +#: sflphone.xml:256(guilabel) +msgid "Set published address and port" +msgstr "Configurer l'adresse et le port de publication" + +#: sflphone.xml:260(para) +msgid "" +"If enabled, the core will try to initialize an UDP transport on the mapped " +"address/port number that the NAT (Network Address Translator) has allocated " +"to <application>SFLphone</application>." +msgstr "" + +#: sflphone.xml:259(listitem) +msgid "Using STUN <placeholder-1/>" +msgstr "Utiliser STUN <placeholder-1/>" + +#: sflphone.xml:261(listitem) +msgid "Same as local parameters" +msgstr "Identique aux paramètres locaux" + +#: sflphone.xml:263(listitem) +msgid "Manually" +msgstr "Manuelle" + +#: sflphone.xml:272(title) +msgid "Security features" +msgstr "Fonctionnalités de sécurité" + +#: sflphone.xml:275(title) +msgid "Secure RTP" +msgstr "RTP sécurisé" + +#: sflphone.xml:278(title) +msgid "TLS" +msgstr "TLS" + +#: sflphone.xml:285(title) +msgid "Call features" +msgstr "Fonctionnalités d'appel" + +#: sflphone.xml:287(para) +msgid "" +"All the following features are available with both SIP and IAX2 accounts." +msgstr "Les fonctionnalités suivantes sont disponibles pour SIP et IAX2" + +#: sflphone.xml:292(title) +msgid "Dial button" +msgstr "Bouton composer" + +#. ==== End of Figure ==== +#: sflphone.xml:303(para) +msgid "" +"You may have an unlimited number of calls at the same time, even with " +"different accounts." +msgstr "" +"Vous pouvez avoir un nombre illimité d'appels en même temps, même avec des " +"comptes différents." + +#: sflphone.xml:304(para) +msgid "" +"To create a new call when you already have a current call, just click on the " +"<guilabel>Dial</guilabel> button. The current call will automatically be put " +"on hold." +msgstr "" +"Pour créer un appel alors que vous avez déjà un appel courant, cliquez sur " +"le bouton <guilabel>Composer</guilabel>. L'appel courant sera alors " +"automatiquement mis en attente." + +#: sflphone.xml:307(title) +msgid "Make an other call" +msgstr "Faire un auitre appel" + +#. ==== End of Figure ==== +#: sflphone.xml:318(para) +msgid "" +"Keyboard shortcut to perform this action: <accel>NUMPAD</accel> or almost " +"any keys." +msgstr "" +"Raccourci clavier pour faire cette action: <accel>NUMPAD</accel> ou à peu " +"près n'importe quelle touche." + +#: sflphone.xml:326(title) +msgid "Call button" +msgstr "Bouton appeler" + +#. ==== End of Figure ==== +#: sflphone.xml:337(para) sflphone.xml:355(para) +msgid "Keyboard shortcut to perform this action: <accel>Enter</accel>." +msgstr "Raccourci clavier pour faire cette action: <accel>Entrée</accel>." + +#: sflphone.xml:344(title) +msgid "Answer button" +msgstr "Bouton décrocher" + +#: sflphone.xml:361(title) +msgid "Hangup button" +msgstr "Bouton raccrocher" + +#. ==== End of Figure ==== +#: sflphone.xml:372(para) sflphone.xml:392(para) +msgid "Keyboard shortcut to perform this action: <accel>ESC</accel>." +msgstr "Raccourci clavier pour faire cette action: <accel>Echap</accel>." + +#: sflphone.xml:377(para) +msgid "" +"When you refuse a call, your caller is automatically redirected to your " +"voicemail box, if applicable." +msgstr "" +"Quand un appel est refusé, votre correspondant est automatiquement redirigé " +"vers votre boîte vocale, s'il y en a une de configurée." + +#: sflphone.xml:381(title) +msgid "Refuse button" +msgstr "Bouton refuser" + +#: sflphone.xml:399(title) +msgid "Hold on button" +msgstr "Bouton mettre en attente" + +#: sflphone.xml:411(title) +msgid "Hold off button" +msgstr "Bouton reprendre" + +#: sflphone.xml:426(title) +msgid "Transfer button" +msgstr "Bouton transférer" + +#. ==== End of Figure ==== +#: sflphone.xml:437(para) +msgid "Then type the number you want to transfer the current call to." +msgstr "Puis entrez le numéro vers lequel vous voulez transférer l'appel." + +#: sflphone.xml:440(title) +msgid "Validate the transfer" +msgstr "Valider le transfert" + +#. ==== End of Figure ==== +#: sflphone.xml:451(para) +msgid "" +"And press <accel>Enter</accel>. Clicking again on the transfer button " +"cancels the transfer." +msgstr "" +"Et appuyez sur <accel>Entrée</accel>. Cliquer à nouveau sur le bouton " +"transfert annule le transfert en cours." + +#: sflphone.xml:457(para) +msgid "" +"Go to " +"<menuchoice><guimenu>Edit</guimenu><guimenuitem>Preferences</guimenuitem><gui" +"menuitem>Audio</guimenuitem></menuchoice> to configure the recordings " +"destination folder." +msgstr "" +"Aller à " +"<menuchoice><guimenu>Éditer</guimenu><guimenuitem>Préférences</guimenuitem><g" +"uimenuitem>Audio</guimenuitem></menuchoice> pour configurer le dossier de " +"destination des enregistrements." + +#: sflphone.xml:461(title) +msgid "Record settings" +msgstr "Paramètres d'enregistrement" + +#: sflphone.xml:474(title) +msgid "Record button" +msgstr "Bouton enregistrer" + +#: sflphone.xml:488(caution) +msgid "" +"This feature is available only if you fill out the voicemail number " +"information for your default account." +msgstr "" +"Cette fonctionnalité n'est disponible que si vous avez spécifié le numéro de " +"votre boîte vocale pour le compte courant." + +#: sflphone.xml:492(title) +msgid "Voicemail button" +msgstr "Bouton Boite vocale" + +#: sflphone.xml:506(para) +msgid "" +"A direct IP call is a call established between two peers without any " +"accounts. When dialing, such a call must prefixed with " +"<guilabel>sip:</guilabel>." +msgstr "" +"Un appel direct IP est un appel sans utiliser de registrar entre deux " +"personnes. Vous devez ajouter <guilabel>sip:</guilabel> devant le numéro à " +"composer pour faire un appel direct." + +#: sflphone.xml:508(para) +msgid "" +"Direct IP calls use SIP protocol to establish communication and RTP to " +"transport data. It is right now not available with IAX2." +msgstr "" +"Les appels directs SIP utilisent le protocole SIP pour établir la " +"communication et RTP pour envoyer les données de voix. Cette fonctionnalité " +"n'est pour l'instant pas disponible avec IAx2." + +#: sflphone.xml:510(para) +msgid "" +"Go to " +"<menuchoice><guimenu>Edit</guimenu><guimenuitem>Preferences</guimenuitem><gui" +"menuitem>Direct IP calls</guimenuitem></menuchoice> to configure the " +"advanced security features for this kind of calls." +msgstr "" +"Aller à " +"<menuchoice><guimenu>Éditer</guimenu><guimenuitem>Préférences</guimenuitem><g" +"uimenuitem>Appel direct SIP</guimenuitem></menuchoice> pour configurer le " +"comportement de ce type d'appel." + +#: sflphone.xml:514(para) +msgid "" +"SFLphone now supports conference call hosting integrating server like " +"features in a simple GUI." +msgstr "" + +#: sflphone.xml:520(guilabel) +msgid "Create a conference" +msgstr "Créer une conférence" + +#: sflphone.xml:521(para) +msgid "" +"To host a conference, simply drag and drop one call on another. Additional " +"participants are added the same way, dragging a call on the conference icon." +msgstr "" + +#: sflphone.xml:528(guilabel) +msgid "Leave a conference" +msgstr "Quitter une conférence" + +#: sflphone.xml:529(para) +msgid "" +"SFLphone conference model let you leave a conference that you are currently " +"hosting to answer any other incoming communication or even initiate new " +"ones. The conference is not interupted Double clicking the conference icon " +"let you reintroduce the conference." +msgstr "" + +#: sflphone.xml:538(guilabel) +msgid "Multiple conference" +msgstr "Conférence multiple" + +#: sflphone.xml:539(para) +msgid "" +"SFLphone supports multiple conferences running simultaneously. Two " +"conferences can be joined the same way they are created, dragging one on the " +"other." +msgstr "" + +#: sflphone.xml:547(guilabel) +msgid "Hangup/Hold a conference" +msgstr "Raccrocher/Mettre en attente une conférence" + +#: sflphone.xml:548(para) +msgid "" +"Right click the conference icon. Holding the conference put all participants " +"on hold. Hangup a conference hangup all participants." +msgstr "" + +#: sflphone.xml:565(title) +msgid "Audio configuration" +msgstr "Paramètres audio" + +#: sflphone.xml:566(para) +msgid "ALSA and Pulseaudio native interfaces are available." +msgstr "Les interfaces natives ALSA et Pulseaudio sont disponibles" + +#: sflphone.xml:582(title) +msgid "Codecs overview" +msgstr "Présentation des codecs" + +#: sflphone.xml:583(para) +msgid "SFLphone supports several widely used audio codec:" +msgstr "SFlphone supporte de nombreux codecs très populaires:" + +#: sflphone.xml:587(guilabel) +msgid "PCMU/PCMA" +msgstr "PCMU/PCMA" + +#: sflphone.xml:588(para) +msgid "" +"ITU-T telefony standard PCM formats, 8kHz, 64 kbit/s, using logarithmic byte " +"compression algorithm." +msgstr "" + +#: sflphone.xml:594(guilabel) +msgid "GSM" +msgstr "GSM" + +#: sflphone.xml:595(para) +msgid "" +"Global System for Mobile communications (GSM) narrowband 8kHz standard based " +"on linear prediction encoding." +msgstr "" + +#: sflphone.xml:601(guilabel) +msgid "G722" +msgstr "G722" + +#: sflphone.xml:602(para) +msgid "ITU-T standard wideband 16kHz standard based on linear prediction." +msgstr "" + +#: sflphone.xml:607(guilabel) +msgid "SPEEX" +msgstr "SPEEX" + +#: sflphone.xml:608(para) +msgid "" +"High quality voice encoding/decoding available in narrowband 8Khz, wideband " +"16khz (HD Voice), and ultra-wideband 32 kHz. Integrate additional features " +"such as Variable Bit Rate (VBR) and noise reduction." +msgstr "" + +#: sflphone.xml:617(guilabel) +msgid "CELT" +msgstr "CELT" + +#: sflphone.xml:628(title) +msgid "Address books" +msgstr "Carnets d'adresse" + +#: sflphone.xml:630(title) +msgid "Enable the address book support" +msgstr "Activer le support du carnet d'adresse" + +#: sflphone.xml:631(para) +msgid "To enable the address book, perform the following steps:" +msgstr "" +"pour activer le support du carnet d'adresse, voici les étapes à suivre:" + +#: sflphone.xml:634(para) +msgid "" +"Choose " +"<menuchoice><guimenu>Edit</guimenu><guimenuitem>Preferences</guimenuitem></me" +"nuchoice>." +msgstr "" +"Sélectionnez " +"<menuchoice><guimenu>Éditer</guimenu><guimenuitem>Préférences</guimenuitem></" +"menuchoice>." + +#: sflphone.xml:638(para) +msgid "" +"Select the <menuchoice><guimenu>Address book</guimenu></menuchoice> tab." +msgstr "" +"Selectionner l'onglet<menuchoice><guimenu>Carnet " +"d'adresse</guimenu></menuchoice>." + +#: sflphone.xml:642(para) +msgid "Check the <guilabel>Use Evolution address books</guilabel> box." +msgstr "" +"Cochez la case <guilabel>Utiliser le carnet d'adresse d'Evolution</guilabel>" + +#: sflphone.xml:645(para) +msgid "" +"Every address books you configured in Evolution will be now available in " +"<application>SFLphone</application>. Please be sure you selected at least " +"one address book." +msgstr "" +"Tous les carnets d'adresse configurés dans Evolution sont accessibles dans " +"<application>SFLphone</application>. Attention à bien vérifier que au moins " +"un carnet d'adresse est sélectionné." + +#: sflphone.xml:649(title) +msgid "Available options" +msgstr "Options disponibles" + +#: sflphone.xml:650(para) +msgid "" +"In " +"<menuchoice><guimenu>Edit</guimenu><guimenuitem>Preferences</guimenuitem><gui" +"menuitem>Address book</guimenuitem></menuchoice>, you may select one or all " +"of the following options:" +msgstr "" +"Dans " +"<menuchoice><guimenu>Éditer</guimenu><guimenuitem>Préférences</guimenuitem><g" +"uimenuitem>Carnet d'adresse</guimenuitem></menuchoice>, vous pouvez une ou " +"plusieurs des options suivantes:" + +#: sflphone.xml:653(guilabel) +msgid "Display contact photo if available" +msgstr "Afficher la photo du contact si elle est disponible" + +#: sflphone.xml:654(para) +msgid "" +"The contact photo will be displayed as a thumbnail beside the phone number." +msgstr "La photo sera affichée à côté du numéro de téléphone." + +#: sflphone.xml:659(guilabel) +msgid "Fields from Evolution's address book" +msgstr "Champs du carnet d'adresse Evolution" + +#: sflphone.xml:660(para) +msgid "" +"You may use one or all of these following information from your contact." +msgstr "" +"Vous pouvez recevoir une ou plusieurs des informations suivantes pour vos " +"contacts." + +#: sflphone.xml:663(listitem) +msgid "Work phone number" +msgstr "Tel Bureau" + +#: sflphone.xml:664(listitem) +msgid "Home phone number" +msgstr "Tel Domicile" + +#: sflphone.xml:665(listitem) +msgid "Mobile phone number" +msgstr "Tel Portable" + +#: sflphone.xml:673(title) +msgid "Using the address book" +msgstr "Utiliser le carnet d'adresse" + +#: sflphone.xml:676(para) +msgid "" +"On the toolbar, click on the following button to display the address book " +"window:" +msgstr "" +"Dans la barre d'outil, cliquez sur le bouton suivant pour afficher le carnet " +"d'adresse:" + +#: sflphone.xml:680(title) +msgid "Address book toolbar button" +msgstr "Carnet d'adresse dans la barre d'outil" + +#: sflphone.xml:693(para) +msgid "Search for a contact" +msgstr "Chercher un contact" + +#: sflphone.xml:697(para) +msgid "" +"New entries should have appeared in the window. Double click on it to call " +"the contact. You may also <menuchoice><guimenu>Right " +"click</guimenu><guimenuitem>Edit before calling</guimenuitem></menuchoice> " +"to modify the entry before calling." +msgstr "" + +#: sflphone.xml:704(title) +msgid "Preferences" +msgstr "Préférences" + +#: sflphone.xml:706(para) +msgid "" +"Go to " +"<menuchoice><guimenu>Edit</guimenu><guimenuitem>Preferences</guimenuitem></me" +"nuchoice> to access the configuration panel." +msgstr "" +"Aller dans " +"<menuchoice><guimenu>Éditer</guimenu><guimenuitem>Préférences</guimenuitem></" +"menuchoice> pour accéder au panneau de configuration." + +#: sflphone.xml:707(para) +msgid "Each section is detailed below." +msgstr "Chaque section est détaillée ci-dessous." + +#: sflphone.xml:710(title) +msgid "General" +msgstr "Général" + +#: sflphone.xml:711(para) +msgid "" +"This section provides the user general settings regarding the application." +msgstr "" +"Cette partie permet à l'utilisateur de configurer des paramètres globaux de " +"l'application." + +#: sflphone.xml:715(title) +msgid "Desktop notifications options" +msgstr "Notifications de bureau" + +#: sflphone.xml:729(guilabel) +msgid "Enable notifications" +msgstr "Activer les notifications" + +#: sflphone.xml:730(para) +msgid "" +"Both clients use their desktop environment notification system. If checked, " +"you will receive desktop notifications for events such as incoming calls and " +"system messages." +msgstr "" + +#: sflphone.xml:734(title) +msgid "Example of an incoming call notification" +msgstr "Exemple d'une notification d'appel entrant" + +#: sflphone.xml:746(guilabel) +msgid "Enable voicemail notifications" +msgstr "Activer les notifications de messages vocaux" + +#: sflphone.xml:747(para) +msgid "" +"The voicemail notifications are handled separatly. If checked, you will be " +"notified with the number of unread voicemails for your accounts." +msgstr "" + +#: sflphone.xml:751(title) +msgid "Example of a voicemail notification" +msgstr "Exempel d'une notification de message vocal" + +#: sflphone.xml:770(title) +msgid "System tray options" +msgstr "Options de la barre des tâches" + +#: sflphone.xml:784(guilabel) +msgid "Popup main window on incoming call" +msgstr "Popup la fenêtre principale lors de l'arrivée d'un appel" + +#: sflphone.xml:785(para) +msgid "" +"If SFLphone is closed on the system tray, pops the main window up on " +"foreground when receiving an incoming call." +msgstr "" +"Si SFLphone est réduit dans la barre des tâches, faire apparaître la fenêtre " +"principale sur les appels entrants." + +#: sflphone.xml:790(guilabel) +msgid "Never popup main window" +msgstr "Ne jamais faire apparaître la fenêtre principale" + +#: sflphone.xml:791(para) +msgid "" +"If SFLphone is closed on the system tray, never pops the main window up on " +"foreground when receiving an incoming call." +msgstr "" +"Si SFLphone est réduit dans la barre des tâches, ne jamais ouvrir la fenêtre " +"au premier plan sur les appels entrants." + +#: sflphone.xml:796(guilabel) +msgid "Hide SFLphone window on startup" +msgstr "Cacher SFLphone au démarrage" + +#: sflphone.xml:797(para) +msgid "On startup, SFLphone will go directly on the system tray." +msgstr "Au démarrage, SFLphone se met directement dans la barre des tâches." + +#: sflphone.xml:810(title) +msgid "Calls history options" +msgstr "Historique des appels" + +#: sflphone.xml:823(guilabel) +msgid "Keep my history for at least n days" +msgstr "Garder mon historique pour au moins n jours" + +#: sflphone.xml:824(para) +msgid "" +"If checked, calls will be kept up to N days in the history. You may select a " +"custom number of days. Do not check it if you don't want to use this feature." +msgstr "" + +#: sflphone.xml:834(title) +msgid "Configuration file options" +msgstr "Fichier de configuration" + +#: sflphone.xml:847(guilabel) +msgid "Store SIP credentials as MD5 hash" +msgstr "" +"Stocker les informations d'authentification sour forme encryptée (MD5)" + +#: sflphone.xml:848(para) +msgid "" +"If checked, your password information will be encrypted in the configuration " +"file, instead of plain text." +msgstr "" + +#: sflphone.xml:859(title) +msgid "Audio" +msgstr "Audio" + +#: sflphone.xml:863(title) +msgid "Address book" +msgstr "Carnet d'adresse" + +#: sflphone.xml:865(para) +msgid "" +"Refer to the <link linkend=\"addressbook\">Address books</link> section for " +"more information." +msgstr "" +"Se référer à la section <link linkend=\"addressbook\">Carnet " +"d'adresse</link> pour plus d'informations." + +#: sflphone.xml:869(title) +msgid "Hooks" +msgstr "Ancrage" + +#: sflphone.xml:877(title) +msgid "Direct IP calls" +msgstr "Appels IP" + +#: sflphone.xml:878(para) +msgid "" +"Refer to the <link linkend=\"directip\">Direct IP calls</link> section for " +"more information." +msgstr "" + +#. Put one translator per line, in the form of NAME <EMAIL>, YEAR1, YEAR2 +#: sflphone.xml:0(None) +msgid "translator-credits" +msgstr "" +"Launchpad Contributions:\n" +" Emmanuel Milou https://launchpad.net/~manumilou" -- GitLab From ce33196aceb5dedaa762d486d97860b5bc317780 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Thu, 10 Dec 2009 12:12:56 -0500 Subject: [PATCH 076/188] [#2567] Fix iax conference call transfer --- sflphone-common/src/managerimpl.cpp | 44 ++++++++++++++++------------- 1 file changed, 25 insertions(+), 19 deletions(-) diff --git a/sflphone-common/src/managerimpl.cpp b/sflphone-common/src/managerimpl.cpp index 2a3d6d1f9a..a1380e0fbc 100644 --- a/sflphone-common/src/managerimpl.cpp +++ b/sflphone-common/src/managerimpl.cpp @@ -697,12 +697,31 @@ ManagerImpl::transferCall (const CallID& call_id, const std::string& to) CallID current_call_id = getCurrentCallId(); - /* Direct IP to IP call */ + if (participToConference (call_id)) { + + _debug("Particip to a conference\n"); + + Conference *conf = getConferenceFromCallID (call_id); + + if (conf != NULL) { + // remove this participant + removeParticipant (call_id); + + processRemainingParticipant (current_call_id, conf); + } + } else { + + _debug("Do not Particip to a conference\n"); + + // we are not participating to a conference, current call switched to "" + if (!isConference (current_call_id)) + switchCall (""); + } + /* Direct IP to IP call */ if (getConfigFromCall (call_id) == Call::IPtoIP) { returnValue = SIPVoIPLink::instance (AccountNULL)-> transfer (call_id, to); } - /* Classic call, attached to an account */ else { accountid = getAccountFromCall (call_id); @@ -719,22 +738,6 @@ ManagerImpl::transferCall (const CallID& call_id, const std::string& to) removeWaitingCall (call_id); - if (participToConference (call_id)) { - - Conference *conf = getConferenceFromCallID (call_id); - - if (conf != NULL) { - // remove this participant - removeParticipant (call_id); - - processRemainingParticipant (current_call_id, conf); - } - } else { - // we are not participating to a conference, current call switched to "" - if (!isConference (current_call_id)) - switchCall (""); - } - if (_dbus) _dbus->getCallManager()->callStateChanged (call_id, "HUNGUP"); return returnValue; @@ -1009,12 +1012,15 @@ ManagerImpl::participToConference (const CallID& call_id) accountId = getAccountFromCall (call_id); call = getAccountLink (accountId)->getCall (call_id); - if (call == NULL) + if (call == NULL) { return false; + } + if (call->getConfId() == "") { return false; } else { + return true; } } -- GitLab From cf648c48d72e703b13ff5f1b6c9f12eaf9c3ecfb Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Thu, 10 Dec 2009 12:22:28 -0500 Subject: [PATCH 077/188] [#2568] Frobid drag n drop actions implying a call in state DIALING --- sflphone-client-gnome/src/contacts/calltree.c | 55 ++++++++++++++++++- 1 file changed, 54 insertions(+), 1 deletion(-) diff --git a/sflphone-client-gnome/src/contacts/calltree.c b/sflphone-client-gnome/src/contacts/calltree.c index 8bb20d52a5..38fcaa6a76 100644 --- a/sflphone-client-gnome/src/contacts/calltree.c +++ b/sflphone-client-gnome/src/contacts/calltree.c @@ -1464,13 +1464,66 @@ static void drag_end_cb(GtkWidget * widget, GdkDragContext * context, gpointer d GtkTreeIter iter; GtkTreeIter iter_parent; GtkTreeIter iter_children; - GtkTreeIter parent_conference; + GtkTreeIter parent_conference; // conference for which this call is attached GValue val; + callable_obj_t* call; conference_obj_t* conf; + // Make sure that drag n drop does not imply a dialing call + if(selected_type == A_CALL && selected_call->_state == CALL_STATE_DIALING) { + + DEBUG("Dragged a call on a dialing call"); + + calltree_remove_call(current_calls, selected_call, NULL); + calltree_add_call(current_calls, selected_call, NULL); + return; + } + + else if(selected_type == A_CALL) { + + // user may have dragged it outside the conference + if(dragged_call && dragged_call->_state == CALL_STATE_DIALING) { + + calltree_remove_call(current_calls, dragged_call, NULL); + + DEBUG("Dragged a call on a dialing call"); + + // test if call participate to a conference + if(selected_call->_confID) { + + gtk_tree_path_up(spath); + gtk_tree_model_get_iter(GTK_TREE_MODEL(model), &parent_conference, path); + + calltree_add_call(current_calls, selected_call, &parent_conference); + } + else { + calltree_add_call(current_calls, selected_call, NULL); + } + + calltree_add_call(current_calls, dragged_call, NULL); + return; + + } + + } + else if(selected_type == A_CONFERENCE) { + + DEBUG("Dragged a conference on a dialing call"); + + if(dragged_call && dragged_call->_state == CALL_STATE_DIALING) { + + conf = selected_conf; + + calltree_remove_conference(current_calls, conf, NULL); + calltree_add_conference(current_calls, conf); + return; + } + } + + if(selected_path_depth == 1) { if(dragged_path_depth == 1) { -- GitLab From 5fa082c77356fbfb93b368dc7ee9b6cfb173d704 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Thu, 10 Dec 2009 17:53:22 -0500 Subject: [PATCH 078/188] [#2519] Sutdown UDP transport bound to a single account --- sflphone-common/src/sip/sipvoiplink.cpp | 119 ++++++++++-------------- sflphone-common/src/sip/sipvoiplink.h | 10 +- 2 files changed, 59 insertions(+), 70 deletions(-) diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp index 8e085aecfd..14e6dbea2b 100644 --- a/sflphone-common/src/sip/sipvoiplink.cpp +++ b/sflphone-common/src/sip/sipvoiplink.cpp @@ -644,11 +644,6 @@ SIPVoIPLink::sendUnregister (AccountID id) account = dynamic_cast<SIPAccount *> (Manager::instance().getAccount (id)); regc = account->getRegistrationInfo(); - _debug("Sending account unregistration using transport: %s %s (refcnt=%d)\n", - account->getAccountTransport()->obj_name, - account->getAccountTransport()->info, - (int)pj_atomic_get(account->getAccountTransport()->ref_cnt)); - if (!account->isRegister()) { account->setRegistrationState (Unregistered); return true; @@ -675,33 +670,24 @@ SIPVoIPLink::sendUnregister (AccountID id) if(account->getAccountTransport()) { - if(account->getAccountTransport() != _localUDPTransport) { - - // status = pjsip_transport_dec_ref(account->getAccountTransport()); - // status = pjsip_transport_shutdown(account->getAccountTransport()); - // status = pjsip_transport_destroy(account->getAccountTransport()); - // account->getAccountTransport()->destroy(account->getAccountTransport()); - - } - - _debug("Sent account unregistration using transport: %s %s (refcnt=%d)\n", + _debug("Sent account unregistration using transport: %s %s (refcnt=%d)\n", account->getAccountTransport()->obj_name, account->getAccountTransport()->info, (int)pj_atomic_get(account->getAccountTransport()->ref_cnt)); - pj_sockaddr *addr = (pj_sockaddr*)&(account->getAccountTransport()->key.rem_addr); + if(account->getAccountTransport() != _localUDPTransport) { - static char str[PJ_INET6_ADDRSTRLEN]; - pj_inet_ntop(((const pj_sockaddr*)addr)->addr.sa_family, - pj_sockaddr_get_addr(addr), - str, sizeof(str)); - - - _debug("------------------------------------- KEY: %s:%d\n", - // addr_string(account->getAccountTransport()->key.rem_addr), - str, - pj_sockaddr_get_port((const pj_sockaddr*)&(account->getAccountTransport()->key.rem_addr))); + shutdownSipTransport(account->getAccountID()); + /* + // PJSIP's UDP transport is considered permanent, reference counter + // is incremented by 1 at transport creation. + // To destroy this transport, reference counter must be zero + status = pjsip_transport_dec_ref(account->getAccountTransport()); + status = pjsip_transport_shutdown(account->getAccountTransport()); + */ + + } } //account->setRegistrationInfo(regc); @@ -1387,7 +1373,7 @@ SIPVoIPLink::SIPStartCall (SIPCall* call, const std::string& subject UNUSED) status = pjsip_dlg_set_transport (dialog, tp); // decrement transport's ref count - pjsip_transport_dec_ref(account->getAccountTransport()); + // pjsip_transport_dec_ref(account->getAccountTransport()); status = pjsip_inv_send_msg (inv, tdata); @@ -1624,7 +1610,7 @@ bool SIPVoIPLink::new_ip_to_ip_call (const CallID& id, const std::string& to) status = pjsip_dlg_set_transport (dialog, tp); // decrement transport's ref count - pjsip_transport_dec_ref(account->getAccountTransport()); + // pjsip_transport_dec_ref(account->getAccountTransport()); if (status != PJ_SUCCESS) { _debug ("Failed to set the transport for an IP call\n"); @@ -2061,7 +2047,8 @@ int SIPVoIPLink::createUDPServer (AccountID id) listeningAddress = account->getPublishedAddress (); // Set the listening port to the published port listeningPort = account->getPublishedPort (); - _debug (" ******************************** Use the published address %s:%i\n", listeningAddress.c_str (), listeningPort); + _debug ("Creating UDP transport published %s:%i\n", listeningAddress.c_str (), listeningPort); + } //strcpy (tmpIP, listeningAddress.data()); @@ -2078,39 +2065,12 @@ int SIPVoIPLink::createUDPServer (AccountID id) status = pjsip_udp_transport_start (_endpt, &bound_addr, &a_name, 1, &transport); - if(transport) { - - /* - _debug("------------------------------- INITIAL REF COUNT: %s %s (refcnt=%i)\n", - transport->obj_name, - transport->info, - (int)pj_atomic_get(transport->ref_cnt)); - - - pj_sockaddr *addr = (pj_sockaddr*)&(transport->key.rem_addr); - - static char str[PJ_INET6_ADDRSTRLEN]; - pj_inet_ntop(((const pj_sockaddr*)addr)->addr.sa_family, - pj_sockaddr_get_addr(addr), - str, sizeof(str)); - - - _debug("------------------------------------- KEY: %s:%d\n", - // addr_string(account->getAccountTransport()->key.rem_addr), - str, - pj_sockaddr_get_port((const pj_sockaddr*)&(transport->key.rem_addr))); - */ - } // Get the transport manager associated with // this endpoint pjsip_tpmgr * tpmgr = NULL; tpmgr = pjsip_endpt_get_tpmgr (_endpt); - _debug ("Number of transport: %i\n", pjsip_tpmgr_get_transport_count (tpmgr)); - - // status = pjsip_transport_register( tpmgr, (pjsip_transport*)transport); - pjsip_tpmgr_dump_transports (tpmgr); if (status != PJ_SUCCESS) { @@ -2446,7 +2406,7 @@ pj_status_t SIPVoIPLink::createAlternateUdpTransport (AccountID id) if(transport) { - _debug("------------------------------- INITIAL REF COUNT: %s %s (refcnt=%i)\n", + _debug("INITIAL REF COUNT: %s %s (refcnt=%i)\n", transport->obj_name, transport->info, (int)pj_atomic_get(transport->ref_cnt)); @@ -2460,7 +2420,7 @@ pj_status_t SIPVoIPLink::createAlternateUdpTransport (AccountID id) str, sizeof(str)); - _debug("------------------------------------- KEY: %s:%d\n", + _debug("KEY: %s:%d\n", // addr_string(account->getAccountTransport()->key.rem_addr), str, pj_sockaddr_get_port((const pj_sockaddr*)&(transport->key.rem_addr))); @@ -2556,6 +2516,28 @@ pj_status_t SIPVoIPLink::createTlsTransport (AccountID id) } +void SIPVoIPLink::shutdownSipTransport(const AccountID& accountID) +{ + _debug("Shutdown Sip Transport\n"); + + pj_status_t status = 0; + + SIPAccount* account = dynamic_cast<SIPAccount *> (Manager::instance().getAccount (accountID)); + + if(!account) + return; + + // PJSIP's UDP transport is considered permanent, reference counter + // is incremented by 1 at transport creation. + // To destroy this transport, reference counter must be zero + status = pjsip_transport_dec_ref(account->getAccountTransport()); + status = pjsip_transport_shutdown(account->getAccountTransport()); + + account->setAccountTransport(NULL); + +} + + void SIPVoIPLink::updateAccountInfo (const AccountID& accountID) { @@ -2982,6 +2964,8 @@ void call_on_tsx_changed (pjsip_inv_session *inv, pjsip_transaction *tsx, pjsip_ { _debug("call_on_tsx_changed to state %s\n", transactionStateMap[tsx->state]); + + if (tsx->role==PJSIP_ROLE_UAS && tsx->state==PJSIP_TSX_STATE_TRYING && pjsip_method_cmp (&tsx->method, &pjsip_refer_method) ==0) { /** Handle the refer method **/ @@ -3068,6 +3052,13 @@ void regc_cb (struct pjsip_regc_cbparam *param) } account->setRegister (false); + + // shutdown this transport since useless + if(account->getAccountTransport() != _localUDPTransport) { + + SIPVoIPLink::instance("")->shutdownSipTransport(account->getAccountID()); + } + } else { // Registration/Unregistration is success if (account->isRegister()) @@ -3350,7 +3341,7 @@ mod_on_rx_request (pjsip_rx_data *rdata) status = pjsip_dlg_set_transport (dialog, tp); // decrement transport's reference counter - pjsip_transport_dec_ref(rdata->tp_info.transport); + // pjsip_transport_dec_ref(rdata->tp_info.transport); PJ_ASSERT_RETURN (status == PJ_SUCCESS, 1); @@ -3883,18 +3874,8 @@ void handle_incoming_options (pjsip_rx_data *rdata) /* Send response statelessly */ pjsip_get_response_addr (tdata->pool, rdata, &res_addr); - _debug("--------------- Before sending option response: %s %s (refcnt=%d)\n", - res_addr.transport->obj_name, - res_addr.transport->info, - (int)pj_atomic_get(res_addr.transport->ref_cnt)); - status = pjsip_endpt_send_response (_endpt, &res_addr, tdata, NULL, NULL); - _debug("--------------- After sending option response: %s %s (refcnt=%d)\n", - res_addr.transport->obj_name, - res_addr.transport->info, - (int)pj_atomic_get(res_addr.transport->ref_cnt)); - if (status != PJ_SUCCESS) pjsip_tx_data_dec_ref (tdata); } diff --git a/sflphone-common/src/sip/sipvoiplink.h b/sflphone-common/src/sip/sipvoiplink.h index 69d79d8b7c..9c9d5eb2cc 100644 --- a/sflphone-common/src/sip/sipvoiplink.h +++ b/sflphone-common/src/sip/sipvoiplink.h @@ -302,6 +302,14 @@ class SIPVoIPLink : public VoIPLink */ void updateAccountInfo(const AccountID& accountID); + /** + * This function unset the transport for a given account. It tests wether the + * associated transport is used by other accounts. If not, it shutdown the transport + * putting its reference counter to zero. PJSIP assumes transport destruction since + * this action can be delayed by ongoing SIP transactions. + */ + void shutdownSipTransport(const AccountID& accountID); + private: /** * Constructor @@ -369,7 +377,7 @@ class SIPVoIPLink : public VoIPLink */ pj_status_t createTlsTransport(AccountID id); - pj_status_t createAlternateUdpTransport (AccountID id); + pj_status_t createAlternateUdpTransport (AccountID id); /** For registration use only */ int _regPort; -- GitLab From 395e37df4ef53e1b0bf5d8a963027a5af505fa25 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Mon, 14 Dec 2009 11:10:17 -0500 Subject: [PATCH 079/188] [#2519] Add internal SIP transport map and implement acwuireTransport method acquireTransport create a transport and look if available in the map if unable to create it. --- sflphone-common/src/sip/sipaccount.cpp | 23 +++ sflphone-common/src/sip/sipaccount.h | 25 ++-- sflphone-common/src/sip/sipvoiplink.cpp | 181 +++++++++++++++++++----- sflphone-common/src/sip/sipvoiplink.h | 50 +++++-- 4 files changed, 222 insertions(+), 57 deletions(-) diff --git a/sflphone-common/src/sip/sipaccount.cpp b/sflphone-common/src/sip/sipaccount.cpp index 52f7c3a0df..b8c509b29a 100644 --- a/sflphone-common/src/sip/sipaccount.cpp +++ b/sflphone-common/src/sip/sipaccount.cpp @@ -407,6 +407,29 @@ std::string SIPAccount::getLoginName (void) return username; } +std::string SIPAccount::getTransportMapKey(void) +{ + std::string mapKey; + + std::stringstream out; + + out << getLocalPort(); + std::string localAddress = getLocalAddress(); + std::string localPort = out.str(); + + out.seekp (0); + out << getPublishedPort(); + std::string publishedAddress = getPublishedAddress(); + std::string publishedPort = out.str(); + + mapKey.append(localAddress.c_str()); + mapKey.append(localPort.c_str()); + mapKey.append(publishedAddress.c_str()); + mapKey.append(publishedPort.c_str()); + + return mapKey; +} + std::string SIPAccount::getFromUri (void) { diff --git a/sflphone-common/src/sip/sipaccount.h b/sflphone-common/src/sip/sipaccount.h index 7a3a17d887..97116b56ca 100644 --- a/sflphone-common/src/sip/sipaccount.h +++ b/sflphone-common/src/sip/sipaccount.h @@ -24,6 +24,8 @@ #ifndef SIPACCOUNT_H #define SIPACCOUNT_H +#include <sstream> + #include "account.h" #include "sipvoiplink.h" #include "pjsip/sip_transport_tls.h" @@ -268,7 +270,9 @@ class SIPAccount : public Account inline void setAccountTransport (pjsip_transport *transport) { _transport = transport; } - private: + std::string getTransportMapKey(void); + + private: /* Maps a string description of the SSL method * to the corresponding enum value in pjsip_ssl_method. @@ -283,10 +287,10 @@ class SIPAccount : public Account */ void initTlsConfiguration(void); - /* - * Initializes STUN config from the config file - */ - void initStunConfiguration (void); + /* + * Initializes STUN config from the config file + */ + void initStunConfiguration (void); /* * Initializes set of additional credentials, if supplied by the user. @@ -308,8 +312,7 @@ class SIPAccount : public Account * @return std::string The login name under which SFLPhone is running. */ std::string getLoginName(void); - - private: + // The pjsip client registration information pjsip_regc *_regc; @@ -319,9 +322,9 @@ class SIPAccount : public Account // Network settings std::string _registrationExpire; - // Flag which determine if _localIpAddress or _publishedIpAddress is used in + // Flag which determine if _localIpAddress or _publishedIpAddress is used in // sip headers - bool _publishedSameasLocal; + bool _publishedSameasLocal; std::string _localIpAddress; std::string _publishedIpAddress; @@ -350,8 +353,8 @@ class SIPAccount : public Account // The STUN server name, if applicable pj_str_t _stunServerName; - // The STUN server port, if applicable - pj_uint16_t _stunPort; + // The STUN server port, if applicable + pj_uint16_t _stunPort; // Display Name that can be used in SIP URI. std::string _displayName; diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp index 14e6dbea2b..55f710d773 100644 --- a/sflphone-common/src/sip/sipvoiplink.cpp +++ b/sflphone-common/src/sip/sipvoiplink.cpp @@ -408,7 +408,6 @@ int SIPVoIPLink::sendRegister (AccountID id) _debug ("In sendRegister: account is null"); return false; } - // Resolve hostname here and keep its // IP address for the whole time the @@ -451,40 +450,9 @@ int SIPVoIPLink::sendRegister (AccountID id) } } - // Launch a new TLS listener/transport - // if the user did choose it. - if (account->isTlsEnabled()) { - pj_status_t status; - - _debug (" sendRegister: createTlsTransport\n"); - status = createTlsTransportRetryOnFailure (id); - - if (status != PJ_SUCCESS) { - _debug ("Failed to initialize TLS transport for account %s\n", id.c_str()); - } - } - - else { - // Launch a new UDP listener/transport, using the published address - if (account->isStunEnabled ()) { - pj_status_t status; - - _debug (" sendRegister: createAlternateUdpTransport\n"); - status = createAlternateUdpTransport (id); - - if (status != PJ_SUCCESS) { - _debug ("Failed to initialize UDP transport with an extern published address for account %s\n", id.c_str()); - } - } else { - - status = createUDPServer (id); - if (status != PJ_SUCCESS) { - _debug ("Use the local UDP transport\n"); - account->setAccountTransport (_localUDPTransport); - } - } - } + // Create SIP transport or get SIP transport from internal map + acquireTransport(account->getAccountID()); _mutexSIP.enterMutex(); @@ -1990,6 +1958,139 @@ pj_status_t SIPVoIPLink::stunServerResolve (AccountID id) return status; } + + +bool SIPVoIPLink::acquireTransport(const AccountID& accountID) { + + SIPAccount* account = dynamic_cast<SIPAccount *> (Manager::instance().getAccount (accountID)); + + if(!account) + return false; + + // Try to create a new transport + if(createSipTransport(accountID)) { + + return true; + } + else { + + _debug("Searching transport (%s) in transport map\n", account->getTransportMapKey().c_str()); + + // Could not create new transport, this transport may already exists + SipTransportMap::iterator transport; + transport = _transportMap.find(account->getTransportMapKey()); + + if(transport != _transportMap.end()) { + + // Transport already exist, use it for this account + _debug("Found transport (%s) in transport map\n", account->getTransportMapKey().c_str()); + + pjsip_transport* tr = transport->second; + + account->setAccountTransport(tr); + + + // Test is the associated transport is shutdowning + if(account->getAccountTransport()) { + + pjsip_transport* tp = account->getAccountTransport(); + + pj_lock_acquire(tp->lock); + + // associated transport is shutdowning, resurect it!!! + if(tp->is_shutdown == PJ_TRUE) { + + _debug("Transport is shutdowning, cancel timer and reactivate it.\n"); + + pjsip_endpt_cancel_timer(_endpt, &(tp->idle_timer)); + tp->is_shutdown = PJ_FALSE; + } + + pj_lock_release(tp->lock); + } + + return true; + } + else { + + // Transport could not either be created, socket not available + _debug("Found transport (%s) in transport map\n", account->getTransportMapKey().c_str()); + + // Transport could not either be created, socket not available + return false; + } + } +} + + +bool SIPVoIPLink::createSipTransport(AccountID id) { + + + SIPAccount* account = dynamic_cast<SIPAccount *> (Manager::instance().getAccount (id)); + + if (!account) + return false; + + pj_status_t status; + + // Launch a new TLS listener/transport + // if the user did choose it. + if (account->isTlsEnabled()) { + + _debug (" sendRegister: createTlsTransport\n"); + status = createTlsTransportRetryOnFailure (id); + + if (status != PJ_SUCCESS) { + _debug ("Failed to initialize TLS transport for account %s\n", id.c_str()); + } + } + else { + // Launch a new UDP listener/transport, using the published address + if (account->isStunEnabled ()) { + + _debug (" sendRegister: createAlternateUdpTransport\n"); + status = createAlternateUdpTransport (id); + + if (status != PJ_SUCCESS) { + _debug ("Failed to initialize UDP transport with an extern published address for account %s\n", id.c_str()); + } + } else { + + status = createUDPServer (id); + + if (status != PJ_SUCCESS) { + _debug ("Failed to initialize UDP transport for account %s\n", id.c_str()); + } + + // We should not bind account to local udp transport here since we must + /* + if (status != PJ_SUCCESS) { + _debug ("Use the local UDP transport\n"); + account->setAccountTransport (_localUDPTransport); + } + */ + } + } + + // If Transport created succesfully, store it in the internal map + if(status == PJ_SUCCESS) { + + std::string key = account->getTransportMapKey(); + pjsip_transport* transport = account->getAccountTransport(); + + _debug("Storing the newly created transport in transport map using key %s\n", key.c_str()); + _transportMap.insert(pair<std::string, pjsip_transport*>(key, transport)); + + return true; + } + else { + + return false; + } + +} + + int SIPVoIPLink::createUDPServer (AccountID id) { @@ -2176,6 +2277,8 @@ std::string SIPVoIPLink::findLocalAddressFromUri (const std::string& uri, pjsip_ return std::string (localAddress.ptr, localAddress.slen); } + + pj_status_t SIPVoIPLink::init_transport_selector (pjsip_transport *transport, pjsip_tpselector **tp_sel) { pjsip_tpselector *tp; @@ -2530,10 +2633,14 @@ void SIPVoIPLink::shutdownSipTransport(const AccountID& accountID) // PJSIP's UDP transport is considered permanent, reference counter // is incremented by 1 at transport creation. // To destroy this transport, reference counter must be zero + status = pjsip_transport_dec_ref(account->getAccountTransport()); status = pjsip_transport_shutdown(account->getAccountTransport()); - account->setAccountTransport(NULL); + // account->getAccountTransport())->is_paused = PJ_TRUE; + // pjsip_udp_transport_pause(account->getAccountTransport(), PJSIP_UDP_TRANSPORT_DESTROY_SOCKET); + + // account->setAccountTransport(NULL); } @@ -3104,7 +3211,7 @@ mod_on_rx_request (pjsip_rx_data *rdata) // Handle the incoming call invite in this function _debug ("UserAgent: Callback on_rx_request is involved! \n"); - _debug("Receiving request using transport: %s %s (refcnt=%d)\n", + _debug("Receiving REQUEST using transport: %s %s (refcnt=%d)\n", rdata->tp_info.transport->obj_name, rdata->tp_info.transport->info, (int)pj_atomic_get(rdata->tp_info.transport->ref_cnt)); @@ -3270,7 +3377,7 @@ mod_on_rx_request (pjsip_rx_data *rdata) link->init_transport_selector (account->getAccountTransport (), &tp); if(account->getAccountTransport()) { - _debug("Answer invite request using transport: %s %s (refcnt=%i)\n", + _debug("Process INVITE request using transport: %s %s (refcnt=%i)\n", account->getAccountTransport()->obj_name, account->getAccountTransport()->info, (int)pj_atomic_get(account->getAccountTransport()->ref_cnt)); diff --git a/sflphone-common/src/sip/sipvoiplink.h b/sflphone-common/src/sip/sipvoiplink.h index 9c9d5eb2cc..5a010702e4 100644 --- a/sflphone-common/src/sip/sipvoiplink.h +++ b/sflphone-common/src/sip/sipvoiplink.h @@ -36,6 +36,9 @@ #include <pjnath/stun_config.h> /////////////////////////////// +#include <map> +#include <sstream> + class EventThread; class SIPCall; @@ -45,6 +48,8 @@ class SIPCall; // To set the verbosity. From 0 (min) to 6 (max) #define PJ_LOG_LEVEL 6 +#define SipTransportMap std::map<std::string, pjsip_transport*> + /** * @file sipvoiplink.h * @brief Specific VoIPLink for SIP (SIP core for incoming and outgoing events). @@ -286,15 +291,22 @@ class SIPVoIPLink : public VoIPLink */ std::vector<std::string> getAllIpInterface(void); - /** - * Initialize the transport selector - * @param transport A transport associated with an account - * @param tp_sel A pointer to receive the transport selector structure - * - * @return pj_status_t PJ_SUCCESS if the structure was successfully initialized - */ - pj_status_t init_transport_selector (pjsip_transport *transport, pjsip_tpselector **tp_sel); + /** + * Initialize the transport selector + * @param transport A transport associated with an account + * @param tp_sel A pointer to receive the transport selector structure + * + * @return pj_status_t PJ_SUCCESS if the structure was successfully initialized + */ + pj_status_t init_transport_selector (pjsip_transport *transport, pjsip_tpselector **tp_sel); + + /** + * Requests PJSIP library for local IP address, using pj_gethostbyname() + * @param addr* A string to be initialized + * + * @return bool True if addr successfully initialized + */ bool loadSIPLocalIP (std::string *addr); /** @@ -346,6 +358,24 @@ class SIPVoIPLink : public VoIPLink pj_status_t stunServerResolve (AccountID id); + + /** + * Function used to create a new sip transport or get an existing one from the map. + * The SIP transport is "acquired" according to account's current settings. + * This function should be called before registering an account + * @param accountID An account id for which transport is to be set + * + * @return bool True if the account is succesfully created or + * successfully obtained from the transport map + */ + bool acquireTransport(const AccountID& accountID); + + + /** + * Create a new sip transport according to the trasport type specified in account settings + */ + bool createSipTransport(AccountID id); + /** Create SIP UDP Listener */ int createUDPServer (AccountID = ""); @@ -378,7 +408,9 @@ class SIPVoIPLink : public VoIPLink pj_status_t createTlsTransport(AccountID id); pj_status_t createAlternateUdpTransport (AccountID id); - + + SipTransportMap _transportMap; + /** For registration use only */ int _regPort; -- GitLab From 45d9368a5548ea72fe621b3bd5c1bf088818e171 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Mon, 14 Dec 2009 13:02:05 -0500 Subject: [PATCH 080/188] [#2519] Erase old transport reference when creating new one --- sflphone-common/src/sip/sipvoiplink.cpp | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp index 55f710d773..bfe65c535e 100644 --- a/sflphone-common/src/sip/sipvoiplink.cpp +++ b/sflphone-common/src/sip/sipvoiplink.cpp @@ -1983,7 +1983,7 @@ bool SIPVoIPLink::acquireTransport(const AccountID& accountID) { if(transport != _transportMap.end()) { // Transport already exist, use it for this account - _debug("Found transport (%s) in transport map\n", account->getTransportMapKey().c_str()); + _debug("Found transport (%s) in transport map\n", account->getTransportMapKey().c_str()); pjsip_transport* tr = transport->second; @@ -2000,11 +2000,17 @@ bool SIPVoIPLink::acquireTransport(const AccountID& accountID) { // associated transport is shutdowning, resurect it!!! if(tp->is_shutdown == PJ_TRUE) { + // Timer is automatically ended if refcnt increments from 0 to 1 + pjsip_transport_add_ref(tp); + _debug("Transport is shutdowning, cancel timer and reactivate it.\n"); - pjsip_endpt_cancel_timer(_endpt, &(tp->idle_timer)); - tp->is_shutdown = PJ_FALSE; + /* + pjsip_endpt_cancel_timer(_endpt, &(tp->idle_timer)); + tp->is_shutdown = PJ_FALSE; + */ } + pj_lock_release(tp->lock); } @@ -2013,6 +2019,7 @@ bool SIPVoIPLink::acquireTransport(const AccountID& accountID) { } else { + // Transport could not either be created, socket not available _debug("Found transport (%s) in transport map\n", account->getTransportMapKey().c_str()); @@ -2075,8 +2082,16 @@ bool SIPVoIPLink::createSipTransport(AccountID id) { // If Transport created succesfully, store it in the internal map if(status == PJ_SUCCESS) { + SipTransportMap::iterator iter_transport; + iter_transport = _transportMap.find(account->getTransportMapKey()); + + // old transport in transport map, erase it + if(iter_transport != _transportMap.end()){ + _transportMap.erase(iter_transport); + } + std::string key = account->getTransportMapKey(); - pjsip_transport* transport = account->getAccountTransport(); + pjsip_transport* transport = account->getAccountTransport(); _debug("Storing the newly created transport in transport map using key %s\n", key.c_str()); _transportMap.insert(pair<std::string, pjsip_transport*>(key, transport)); -- GitLab From 61aa119bfad057b173ba2e6d6705f7098bd398f8 Mon Sep 17 00:00:00 2001 From: Jonas Fonseca <jonas.fonseca@savoirfairelinux.com> Date: Mon, 14 Dec 2009 12:48:31 -0500 Subject: [PATCH 081/188] [#2582] main_window_message: use gtk_message_dialog_set_markup ... else the markup text is escaped. --- sflphone-client-gnome/src/mainwindow.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/sflphone-client-gnome/src/mainwindow.c b/sflphone-client-gnome/src/mainwindow.c index 12b7ecedc0..8218938509 100644 --- a/sflphone-client-gnome/src/mainwindow.c +++ b/sflphone-client-gnome/src/mainwindow.c @@ -291,11 +291,10 @@ main_window_message(GtkMessageType type, gchar * markup){ GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, type, GTK_BUTTONS_CLOSE, - "%s\n", - markup); - + NULL); gtk_window_set_title(GTK_WINDOW(dialog), _("SFLphone Error")); + gtk_message_dialog_set_markup(GTK_MESSAGE_DIALOG(dialog), markup); gtk_dialog_run (GTK_DIALOG(dialog)); gtk_widget_destroy (GTK_WIDGET(dialog)); -- GitLab From d6bfbe657b7b0d3c46a4f39648b4a910c8ec381d Mon Sep 17 00:00:00 2001 From: Jonas Fonseca <jonas.fonseca@savoirfairelinux.com> Date: Mon, 14 Dec 2009 12:56:00 -0500 Subject: [PATCH 082/188] [#2582] dbus_codec_list: initialize array variable to NULL ... in case the dbus call will fail. Else it will cause a segfault. --- sflphone-client-gnome/src/dbus/dbus.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sflphone-client-gnome/src/dbus/dbus.c b/sflphone-client-gnome/src/dbus/dbus.c index 3a5798348a..a00c4134f1 100644 --- a/sflphone-client-gnome/src/dbus/dbus.c +++ b/sflphone-client-gnome/src/dbus/dbus.c @@ -1195,7 +1195,7 @@ dbus_codec_list() { GError *error = NULL; - gchar** array; + gchar** array = NULL; org_sflphone_SFLphone_ConfigurationManager_get_codec_list ( configurationManagerProxy, &array, -- GitLab From 8c9a07947e0b5401873d48615da7d90f22a61485 Mon Sep 17 00:00:00 2001 From: Jonas Fonseca <jonas.fonseca@savoirfairelinux.com> Date: Mon, 14 Dec 2009 13:05:32 -0500 Subject: [PATCH 083/188] [#2582] Improve and reformat error message Removes redundant "Error:" prefix and reformats it to be slightly more readable. --- sflphone-client-gnome/src/actions.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sflphone-client-gnome/src/actions.c b/sflphone-client-gnome/src/actions.c index 5a28359011..7d78274db9 100644 --- a/sflphone-client-gnome/src/actions.c +++ b/sflphone-client-gnome/src/actions.c @@ -1102,7 +1102,7 @@ sflphone_fill_codec_list() } if( codec_list_get_size() == 0) { - gchar* markup = g_markup_printf_escaped(_("<b>Error: No audio codecs found.\n\n</b> SFL audio codecs have to be placed in <i>%s</i> or in the <b>.sflphone</b> directory in your home( <i>%s</i> )") , CODECS_DIR , g_get_home_dir()); + gchar* markup = g_markup_printf_escaped(_("<b>No audio codecs found.</b>\n\nSFL audio codecs have to be placed in <i>%s</i> or in the <b>.sflphone</b> directory in your home (<i>%s</i>)"), CODECS_DIR, g_get_home_dir()); main_window_error_message( markup ); dbus_unregister(getpid()); exit(0); -- GitLab From 60aa04cb019f6acc2735ecc66e3dc72da238a694 Mon Sep 17 00:00:00 2001 From: Jonas Fonseca <jonas.fonseca@savoirfairelinux.com> Date: Mon, 14 Dec 2009 11:27:30 -0500 Subject: [PATCH 084/188] [#2579] User manual: Fix spelling errors and consistency --- sflphone-client-gnome/doc/C/sflphone.xml | 26 ++++++++++++------------ 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/sflphone-client-gnome/doc/C/sflphone.xml b/sflphone-client-gnome/doc/C/sflphone.xml index c08d76564a..47c65754b2 100644 --- a/sflphone-client-gnome/doc/C/sflphone.xml +++ b/sflphone-client-gnome/doc/C/sflphone.xml @@ -117,7 +117,7 @@ <sect1 id="getting-started"> <title>Getting started</title> <para> - The first time you start up sflphone, you will be ask to complete a wizard to set up your(s) account(s). This account configuration manager offers you two possibilities: + The first time you start up SFLphone, you will be ask to complete a wizard to set up your(s) account(s). This account configuration manager offers you two possibilities: <itemizedlist> <listitem> <para><guilabel>Create a free SIP/IAX2 account on sflphone.org</guilabel></para> @@ -570,8 +570,8 @@ SFLphone conference model let you leave a conference that you are currently hosting to answer any other incoming communication or even initiate new ones. The conference is - not interupted, double clicking the conference icon - let you reintroduce it at any momment. + not interrupted, double clicking the conference icon + let you reintroduce it at any moment. </para> <!-- ==== Figure ==== --> <figure id="conference_detached-fig"> @@ -632,11 +632,11 @@ <para>RTP is the underlying protocol that is used in pair with the widely used SIP protocol to carry voice data. RTP alone does not provide any security features.</para> <para>Details for implementing Secure RTP (SRTP) were described independently in a separate document (RFC). However, in this paper, one aspect was deliberately left unspecified: how should the encryption keys be exchanged between the two parties involved in a secure RTP session ?</para> - <para>Mutiple solutions were proposed to fill in that blank. Among them, are SDES (RFC4568) and ZRTP which are probably the most popular today. For the 0.9.7 release, SFLphone integrates support for Secure RTP through the ZRTP protocol, and SDES is expected to be implemented in the very few next releases.</para> + <para>Multiple solutions were proposed to fill in that blank. Among them, are SDES (RFC4568) and ZRTP which are probably the most popular today. For the 0.9.7 release, SFLphone integrates support for Secure RTP through the ZRTP protocol, and SDES is expected to be implemented in the very few next releases.</para> - <para>As of today, blueprints for ZRTP are still laid out and are recognized under the name "zrtp-draftzimmerman" in the RFC machine. The author of ZRTP is Phil Zimmermann, that same person who brought us PGP. Therefore, it is not suprising that he designed ZRTP as an anti-PKI solution for key exchange.</para> + <para>As of today, blueprints for ZRTP are still laid out and are recognized under the name "zrtp-draftzimmerman" in the RFC machine. The author of ZRTP is Phil Zimmermann, that same person who brought us PGP. Therefore, it is not surprising that he designed ZRTP as an anti-PKI solution for key exchange.</para> - <para>ZRTP makes possible for two parties to automatically establish a shared secret in a very simple way from the users's point of view. Indeed under SFLphone no special configuration is needed, appart from enabling the option itself.</para> + <para>ZRTP makes possible for two parties to automatically establish a shared secret in a very simple way from the user's point of view. Indeed under SFLphone no special configuration is needed, apart from enabling the option itself.</para> <para>If you want to use ZRTP, please take note that if you are connecting to a PBX, this one must have been configured to support ZRTP. Unfortunately, security for VoIP communications is still young and chances are that your PBX software won't support it.</para> @@ -692,16 +692,16 @@ <varlistentry> <term><guilabel>Send Hello Hash in SDP</guilabel></term> <listitem><para>Selecting this option will cause the program to compute an hash function over the "Hello" packet and send it as an SDP field "zrtp-hash:". The remote end might be interested in getting this value to add an additional layer of protection based on another communication channel. Upon receiving this value, the remote point can compute the hash function on the received hello packet and compare it.</para> - <para>Take note that for 0.9.7, SFLPhone does not perform the comparasion on its side.</para></listitem> + <para>Take note that for 0.9.7, SFLphone does not perform the comparison on its side.</para></listitem> </varlistentry> <varlistentry> <term><guilabel>Ask user to confirm SAS</guilabel></term> - <listitem><para>The short authentication mechanism is at the heart of the ZRTP protocol. Not requirering the user to manually check the SAS value presents a security risk over Man in the Middle type of attacks.</para> + <listitem><para>The short authentication mechanism is at the heart of the ZRTP protocol. Not requiring the user to manually check the SAS value presents a security risk over Man in the Middle type of attacks.</para> <para>Disabling this option will stop the program from prompting the user with the SAS.</para> - <para>Such an option was motivated to be developped at that time by the the state of the libzrtpcpp library that SFLPhone was making use of. It is only from version x.x that this library can cache results of SAS computation between two peers.</para> + <para>Such an option was motivated to be developed at that time by the the state of the libzrtpcpp library that SFLphone was making use of. It is only from version x.x that this library can cache results of SAS computation between two peers.</para> </listitem> </varlistentry> @@ -729,7 +729,7 @@ <sect1 id="audio_interfaces"> <title>Audio configuration</title> <para> - ALSA and Pulseaudio native interfaces are available. + ALSA and PulseAudio native interfaces are available. </para> <sect2 label="Pulseaudio"> @@ -751,7 +751,7 @@ <listitem> <guilabel>PCMU/PCMA</guilabel> <para> - ITU-T telefony standard PCM formats, 8kHz, 64 + ITU-T telephony standard PCM formats, 8kHz, 64 kbit/s, using logarithmic byte compression algorithm. </para> </listitem> @@ -772,7 +772,7 @@ <guilabel>SPEEX</guilabel> <para> High quality voice encoding/decoding available - in narrowband 8Khz, wideband 16khz (HD Voice), + in narrowband 8kHz, wideband 16kHz (HD Voice), and ultra-wideband 32 kHz. Integrate additional features such as Variable Bit Rate (VBR) and noise reduction. @@ -910,7 +910,7 @@ <varlistentry> <term><guilabel>Enable voicemail notifications</guilabel></term> <listitem><para> - The voicemail notifications are handled separatly. If checked, you will be notified with the number of unread voicemails for your accounts. + The voicemail notifications are handled separately. If checked, you will be notified with the number of unread voicemails for your accounts. </para> <figure id="voicemail-notif-fig"> <title>Example of a voicemail notification</title> -- GitLab From 7de27b4557b5ecca968b0a8c0ccbf6dcbdc66606 Mon Sep 17 00:00:00 2001 From: Jonas Fonseca <jonas.fonseca@savoirfairelinux.com> Date: Mon, 14 Dec 2009 13:17:55 -0500 Subject: [PATCH 085/188] [#2579] User manual: Bump appversion to 0.9.7 and define a docversion entity --- sflphone-client-gnome/doc/C/sflphone.xml | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/sflphone-client-gnome/doc/C/sflphone.xml b/sflphone-client-gnome/doc/C/sflphone.xml index 47c65754b2..61130f23d1 100644 --- a/sflphone-client-gnome/doc/C/sflphone.xml +++ b/sflphone-client-gnome/doc/C/sflphone.xml @@ -1,7 +1,8 @@ <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook V4.1//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd" [ <!ENTITY app "SFLphone"> - <!ENTITY appversion "0.9.7 beta"> + <!ENTITY appversion "0.9.7"> + <!ENTITY docversion "1.0"> ]> <!-- =============Document Header ============================= --> @@ -9,7 +10,7 @@ <!-- please do not change the id; for translations, change lang to --> <!-- appropriate code --> <articleinfo> - <title>SFLphone Manual v1.0</title> + <title>SFLphone Manual v&docversion;</title> <copyright> <year>2006</year> @@ -73,7 +74,7 @@ <revhistory> <revision> - <revnumber>SFLphone Manual V1.0</revnumber> + <revnumber>SFLphone Manual v1.0</revnumber> <date>September 2009</date> <revdescription> <para role="author">SFLphone team</para> @@ -82,7 +83,7 @@ </revision> </revhistory> -<releaseinfo>This manual describes version 0.9.7 of SFLphone.</releaseinfo> +<releaseinfo>This manual describes SFLphone version &appversion;.</releaseinfo> </articleinfo> -- GitLab From e21f8714447f5bbe019d9973873d4215faa25515 Mon Sep 17 00:00:00 2001 From: Jonas Fonseca <jonas.fonseca@savoirfairelinux.com> Date: Mon, 14 Dec 2009 13:25:25 -0500 Subject: [PATCH 086/188] [#2579] User manual: Minor improvements --- sflphone-client-gnome/doc/C/sflphone.xml | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/sflphone-client-gnome/doc/C/sflphone.xml b/sflphone-client-gnome/doc/C/sflphone.xml index 61130f23d1..64861bea86 100644 --- a/sflphone-client-gnome/doc/C/sflphone.xml +++ b/sflphone-client-gnome/doc/C/sflphone.xml @@ -160,7 +160,7 @@ </listitem> <listitem> <para><guilabel>Protocol</guilabel></para> - <para>Select SIP or IAX2. The most commons are SIP accounts.</para> + <para>Select SIP or IAX2. The most commonly used protocol is SIP.</para> </listitem> <listitem> <para><guilabel>Host name</guilabel></para> @@ -182,7 +182,8 @@ </listitem> <listitem><para>Click the <menuchoice><guimenu>Apply</guimenu></menuchoice> button.</para></listitem> </orderedlist> - <para>You may now check the state of your account(s). You may have as many setup accounts as you wish. If it is registered, you may now use it to make calls.</para> + <para>You may now check the state of your account(s). If it is registered, you may now use it to make calls.</para> + <note>You can setup as many accounts as you wish.</note> </sect3> <sect3 id="account_edit"> @@ -206,7 +207,7 @@ <sect3 id="account_selection"> <title>Selecting a default account</title> - <para>As it is possible to have an unlimited number of registered accounts at the same time, which account will be used when making a call ? You can not only set up a default account to be used every time you are making a call, but an entire priority list. To do that, perform the following steps:</para> + <para>Since it is possible to have an unlimited number of registered accounts at the same time, which account will be used when making a call ? You can not only set up a default account to be used every time you are making a call, but an entire priority list. To do that, perform the following steps:</para> <orderedlist> <listitem><para>Choose <menuchoice><guimenu>Edit</guimenu><guimenuitem>Manage accounts</guimenuitem></menuchoice> to access the accounts list.</para></listitem> <listitem> @@ -237,8 +238,8 @@ <sect3 id="accounts_registration"> <title>Registration</title> <para>You may set the expires header for a contact.</para> - <para>It basically represents the duration your registration will remain active. If you don't register again within that time, calls will no longer be routed to you. it should be not used as a keepalive mechanism though. The default value is 600 seconds (ten minutes).</para> - <note>To register to some VoIP services, you will need to set this value at at least 1600 seconds (Example: French VoIP server freephonie.net). + <para>It basically represents the duration your registration will remain active. If you don't register again within that time, calls will no longer be routed to you. It should not be used as a keepalive mechanism though. The default value is 600 seconds (ten minutes).</para> + <note>Some VoIP services requires that you set this value at at least 1600 seconds (e.g. the French VoIP server freephonie.net). </note> </sect3> <sect3 id="accounts_stun"> @@ -301,7 +302,7 @@ <sect1 id="call_features"> <title>Call features</title> - <para>All the following features are available with both SIP and IAX2 accounts.</para> + <para>The following features are available with both SIP and IAX2 accounts.</para> <sect2 label="Dialing a number"> <!-- ==== Figure ==== --> @@ -746,7 +747,7 @@ <sect1 id="codecs_overview"> <title>Codecs overview</title> - <para>SFLphone supports several widely used audio codec:</para> + <para>SFLphone supports several widely used audio codecs:</para> <para> <itemizedlist> <listitem> -- GitLab From 80b99f90f4280eff8bdedf5e2e853fe7cff5ae00 Mon Sep 17 00:00:00 2001 From: Jonas Fonseca <jonas.fonseca@savoirfairelinux.com> Date: Mon, 14 Dec 2009 15:30:04 -0500 Subject: [PATCH 087/188] [#2586] Define LOCALEDIR to ${localedir} and pass it to bindtextdomain --- sflphone-client-gnome/globals.mak | 1 + sflphone-client-gnome/src/main.c | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/sflphone-client-gnome/globals.mak b/sflphone-client-gnome/globals.mak index 027c152adb..8fe5ee180b 100644 --- a/sflphone-client-gnome/globals.mak +++ b/sflphone-client-gnome/globals.mak @@ -18,5 +18,6 @@ AM_CPPFLAGS = $(DEPS_CFLAGS) \ -DSYSCONFDIR=\""$(sysconfdir)"\" \ -DDATADIR=\""$(datadir)"\" \ -DLIBDIR=\""$(libdir)"\" \ + -DLOCALEDIR=\""$(localedir)"\" \ -DSFLPHONE_UIDIR=\""$(datadir)/sflphone/ui"\" diff --git a/sflphone-client-gnome/src/main.c b/sflphone-client-gnome/src/main.c index 2a8b7ca5a9..fffd9a831b 100644 --- a/sflphone-client-gnome/src/main.c +++ b/sflphone-client-gnome/src/main.c @@ -84,7 +84,7 @@ There is NO WARRANTY, to the extent permitted by law.\n\n"); srand(time(NULL)); // Internationalization - bindtextdomain("sflphone-client-gnome", "/usr/share/locale"); + bindtextdomain("sflphone-client-gnome", LOCALEDIR); textdomain("sflphone-client-gnome"); // Initialises the GNOME libraries -- GitLab From b7937a0b5213dbb60bdd59722ba69d2197742340 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Tue, 15 Dec 2009 13:37:31 -0500 Subject: [PATCH 088/188] [#2519] Decrement transport's reference counter after calling regc_send --- sflphone-common/src/sip/sipvoiplink.cpp | 103 ++++++++++++++---------- 1 file changed, 59 insertions(+), 44 deletions(-) diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp index bfe65c535e..feaaa9b831 100644 --- a/sflphone-common/src/sip/sipvoiplink.cpp +++ b/sflphone-common/src/sip/sipvoiplink.cpp @@ -389,6 +389,7 @@ SIPVoIPLink::getEvent() int SIPVoIPLink::sendRegister (AccountID id) { + int expire_value; pj_status_t status; @@ -451,9 +452,15 @@ int SIPVoIPLink::sendRegister (AccountID id) } - // Create SIP transport or get SIP transport from internal map + // Create SIP transport or get existent SIP transport from internal map + // according to account settings acquireTransport(account->getAccountID()); + _debug("Acquire transport in account registration: %s %s (refcnt=%d)\n", + account->getAccountTransport()->obj_name, + account->getAccountTransport()->info, + (int)pj_atomic_get(account->getAccountTransport()->ref_cnt)); + _mutexSIP.enterMutex(); // Get the client registration information for this particular account @@ -581,8 +588,14 @@ int SIPVoIPLink::sendRegister (AccountID id) } // Send registration request + // pjsip_regc_send increment the transport ref count by one, status = pjsip_regc_send (regc, tdata); + // Decrease transport's ref count, since coresponding reference counter decrementation + // is performed in pjsip_regc_destroy. This function is never called in SFLphone as the + // regc data structure is permanently associated to the account at first registration. + pjsip_transport_dec_ref(account->getAccountTransport ()); + if (status != PJ_SUCCESS) { _debug ("UserAgent: Unable to send regc request.\n"); _mutexSIP.leaveMutex(); @@ -604,6 +617,7 @@ int SIPVoIPLink::sendRegister (AccountID id) int SIPVoIPLink::sendUnregister (AccountID id) { + pj_status_t status = 0; pjsip_tx_data *tdata = NULL; SIPAccount *account; @@ -612,6 +626,18 @@ SIPVoIPLink::sendUnregister (AccountID id) account = dynamic_cast<SIPAccount *> (Manager::instance().getAccount (id)); regc = account->getRegistrationInfo(); + // If an transport is attached to this account, detach it and decrease reference counter + if(account->getAccountTransport()) { + + _debug("Sent account unregistration using transport: %s %s (refcnt=%d)\n", + account->getAccountTransport()->obj_name, + account->getAccountTransport()->info, + (int)pj_atomic_get(account->getAccountTransport()->ref_cnt)); + + shutdownSipTransport(account->getAccountID()); + } + + // This may occurs if account failed to register and is in state INVALID if (!account->isRegister()) { account->setRegistrationState (Unregistered); return true; @@ -624,7 +650,7 @@ SIPVoIPLink::sendUnregister (AccountID id) _debug ("UserAgent: Unable to unregister regc.\n"); return false; } - + status = pjsip_regc_send (regc, tdata); if (status != PJ_SUCCESS) { @@ -636,28 +662,6 @@ SIPVoIPLink::sendUnregister (AccountID id) return false; } - if(account->getAccountTransport()) { - - _debug("Sent account unregistration using transport: %s %s (refcnt=%d)\n", - account->getAccountTransport()->obj_name, - account->getAccountTransport()->info, - (int)pj_atomic_get(account->getAccountTransport()->ref_cnt)); - - if(account->getAccountTransport() != _localUDPTransport) { - - shutdownSipTransport(account->getAccountID()); - - /* - // PJSIP's UDP transport is considered permanent, reference counter - // is incremented by 1 at transport creation. - // To destroy this transport, reference counter must be zero - status = pjsip_transport_dec_ref(account->getAccountTransport()); - status = pjsip_transport_shutdown(account->getAccountTransport()); - */ - - } - } - //account->setRegistrationInfo(regc); account->setRegister (false); @@ -1987,9 +1991,14 @@ bool SIPVoIPLink::acquireTransport(const AccountID& accountID) { pjsip_transport* tr = transport->second; + // Set transport to be used for transaction involving this account account->setAccountTransport(tr); + // Increment newly associated transport reference counter + // If the account is shutdowning, time is automatically canceled + pjsip_transport_add_ref(tr); + /* // Test is the associated transport is shutdowning if(account->getAccountTransport()) { @@ -2000,30 +2009,30 @@ bool SIPVoIPLink::acquireTransport(const AccountID& accountID) { // associated transport is shutdowning, resurect it!!! if(tp->is_shutdown == PJ_TRUE) { - // Timer is automatically ended if refcnt increments from 0 to 1 - pjsip_transport_add_ref(tp); + // Timer is automatically ended if refcnt increments from 0 to 1 + // pjsip_transport_add_ref(tp); - _debug("Transport is shutdowning, cancel timer and reactivate it.\n"); + _debug("Transport is shutdowning, cancel timer and reactivate it.\n"); - /* - pjsip_endpt_cancel_timer(_endpt, &(tp->idle_timer)); - tp->is_shutdown = PJ_FALSE; - */ + + // pjsip_endpt_cancel_timer(_endpt, &(tp->idle_timer)); + // tp->is_shutdown = PJ_FALSE; + } pj_lock_release(tp->lock); } + */ return true; } else { - // Transport could not either be created, socket not available _debug("Found transport (%s) in transport map\n", account->getTransportMapKey().c_str()); - // Transport could not either be created, socket not available + // Transport could not either be created or found in the map, socket not available return false; } } @@ -2645,17 +2654,19 @@ void SIPVoIPLink::shutdownSipTransport(const AccountID& accountID) if(!account) return; - // PJSIP's UDP transport is considered permanent, reference counter - // is incremented by 1 at transport creation. - // To destroy this transport, reference counter must be zero - + _debug("decrease ref count in transport shutdown\n"); + // decrease reference count added by pjsip_regc_send status = pjsip_transport_dec_ref(account->getAccountTransport()); - status = pjsip_transport_shutdown(account->getAccountTransport()); - // account->getAccountTransport())->is_paused = PJ_TRUE; - // pjsip_udp_transport_pause(account->getAccountTransport(), PJSIP_UDP_TRANSPORT_DESTROY_SOCKET); + // _debug("decrease ref count in transport shutdown\n"); + // PJSIP's UDP transport is considered permanent, reference counter + // is initialized to 1 at transport creation. + // To destroy this transport, reference counter must be zero + // status = pjsip_transport_dec_ref(account->getAccountTransport()); + // status = pjsip_transport_shutdown(account->getAccountTransport()); - // account->setAccountTransport(NULL); + // detach transport from this account + account->setAccountTransport(NULL); } @@ -3176,10 +3187,10 @@ void regc_cb (struct pjsip_regc_cbparam *param) account->setRegister (false); // shutdown this transport since useless - if(account->getAccountTransport() != _localUDPTransport) { + // if(account->getAccountTransport() != _localUDPTransport) { - SIPVoIPLink::instance("")->shutdownSipTransport(account->getAccountID()); - } + SIPVoIPLink::instance("")->shutdownSipTransport(account->getAccountID()); + //} } else { // Registration/Unregistration is success @@ -3188,6 +3199,9 @@ void regc_cb (struct pjsip_regc_cbparam *param) else { account->setRegistrationState (Unregistered); account->setRegister (false); + + // pjsip_regc_destroy(param->regc); + // account->setRegistrationInfo(NULL); } } } else { @@ -3998,6 +4012,7 @@ void handle_incoming_options (pjsip_rx_data *rdata) status = pjsip_endpt_send_response (_endpt, &res_addr, tdata, NULL, NULL); + if (status != PJ_SUCCESS) pjsip_tx_data_dec_ref (tdata); } -- GitLab From 0b24ccf7b24703e90f40332c08ecad3d0569dafb Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Tue, 15 Dec 2009 13:39:16 -0500 Subject: [PATCH 089/188] [#2519] Do not need to reactivate sip transport manually This is automatically done in PJSIP --- sflphone-common/src/sip/sipvoiplink.cpp | 27 ------------------------- 1 file changed, 27 deletions(-) diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp index feaaa9b831..5b90e495a2 100644 --- a/sflphone-common/src/sip/sipvoiplink.cpp +++ b/sflphone-common/src/sip/sipvoiplink.cpp @@ -1998,33 +1998,6 @@ bool SIPVoIPLink::acquireTransport(const AccountID& accountID) { // If the account is shutdowning, time is automatically canceled pjsip_transport_add_ref(tr); - /* - // Test is the associated transport is shutdowning - if(account->getAccountTransport()) { - - pjsip_transport* tp = account->getAccountTransport(); - - pj_lock_acquire(tp->lock); - - // associated transport is shutdowning, resurect it!!! - if(tp->is_shutdown == PJ_TRUE) { - - // Timer is automatically ended if refcnt increments from 0 to 1 - // pjsip_transport_add_ref(tp); - - _debug("Transport is shutdowning, cancel timer and reactivate it.\n"); - - - // pjsip_endpt_cancel_timer(_endpt, &(tp->idle_timer)); - // tp->is_shutdown = PJ_FALSE; - - } - - - pj_lock_release(tp->lock); - } - */ - return true; } else { -- GitLab From 6b6a1647410643ee47dca1fec7c7ea0830db688d Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Tue, 15 Dec 2009 16:30:34 -0500 Subject: [PATCH 090/188] [#2519] Added a case where the transport already set in account --- sflphone-common/src/sip/sipvoiplink.cpp | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp index 5b90e495a2..ecf0011e2e 100644 --- a/sflphone-common/src/sip/sipvoiplink.cpp +++ b/sflphone-common/src/sip/sipvoiplink.cpp @@ -451,9 +451,10 @@ int SIPVoIPLink::sendRegister (AccountID id) } } - // Create SIP transport or get existent SIP transport from internal map - // according to account settings + // according to account settings, if the transport could not be created but + // one is already set in account, use this one (most likely this is the + // transport we tried to create) acquireTransport(account->getAccountID()); _debug("Acquire transport in account registration: %s %s (refcnt=%d)\n", @@ -572,7 +573,8 @@ int SIPVoIPLink::sendRegister (AccountID id) // pjsip_regc_set_transport increments transport ref count by one status = pjsip_regc_set_transport (regc, tp); - // decrease transport's ref count + // decrease transport's ref count, counter icrementation is + // managed when acquiring transport pjsip_transport_dec_ref(account->getAccountTransport ()); _debug("After setting the transport in account registration using transport: %s %s (refcnt=%d)\n", @@ -1976,9 +1978,17 @@ bool SIPVoIPLink::acquireTransport(const AccountID& accountID) { return true; } + else if(account->getAccountTransport()) { + + // Transport could not be created, account account already have one set. + // Most likely this is the transport we tried to create. + _debug("Transport (%s) already set for account, use it\n", account->getTransportMapKey().c_str()); + + return true; + } else { - _debug("Searching transport (%s) in transport map\n", account->getTransportMapKey().c_str()); + _debug("Searching transport (%s) in transport map\n", account->getTransportMapKey().c_str()); // Could not create new transport, this transport may already exists SipTransportMap::iterator transport; -- GitLab From 109420c05ec298778bb9e66d2f7eb26e8ddf908c Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Tue, 15 Dec 2009 17:33:56 -0500 Subject: [PATCH 091/188] [#2519] Shutdown transport in regc_cb --- sflphone-common/src/sip/sipvoiplink.cpp | 40 ++++++++++++++----------- 1 file changed, 23 insertions(+), 17 deletions(-) diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp index ecf0011e2e..c483beb7e1 100644 --- a/sflphone-common/src/sip/sipvoiplink.cpp +++ b/sflphone-common/src/sip/sipvoiplink.cpp @@ -636,7 +636,7 @@ SIPVoIPLink::sendUnregister (AccountID id) account->getAccountTransport()->info, (int)pj_atomic_get(account->getAccountTransport()->ref_cnt)); - shutdownSipTransport(account->getAccountID()); + // shutdownSipTransport(account->getAccountID()); } // This may occurs if account failed to register and is in state INVALID @@ -1768,7 +1768,7 @@ bool SIPVoIPLink::pjsip_init() bool directIpCallsTlsEnabled = false; - account = dynamic_cast<SIPAccount *> (Manager::instance().getAccount (AccountNULL)); + account = dynamic_cast<SIPAccount *> (Manager::instance().getAccount (IP2IP_PROFILE)); if (account == NULL) { _debug ("Account is null in pjsip init\n"); @@ -1780,7 +1780,7 @@ bool SIPVoIPLink::pjsip_init() // Create a UDP listener meant for all accounts // for which TLS was not enabled - errPjsip = createUDPServer(); + errPjsip = createUDPServer(IP2IP_PROFILE); // If the above UDP server // could not be created, then give it another try @@ -1807,7 +1807,7 @@ bool SIPVoIPLink::pjsip_init() // if the user did enabled it. if (directIpCallsTlsEnabled) { - errPjsip = createTlsTransportRetryOnFailure (AccountNULL); + errPjsip = createTlsTransportRetryOnFailure (IP2IP_PROFILE); } if (errPjsip != PJ_SUCCESS) { @@ -2189,9 +2189,12 @@ int SIPVoIPLink::createUDPServer (AccountID id) } else { _debug ("UserAgent: UDP server listening on port %d\n", listeningPort); - if (account == NULL) + if (account == NULL) { + _debug("Use transport as local UDP server\n"); _localUDPTransport = transport; + } else { + _debug("Bind transport to account %s\n", account->getAccountID().c_str()); account->setAccountTransport (transport); } } @@ -2637,19 +2640,18 @@ void SIPVoIPLink::shutdownSipTransport(const AccountID& accountID) if(!account) return; - _debug("decrease ref count in transport shutdown\n"); - // decrease reference count added by pjsip_regc_send - status = pjsip_transport_dec_ref(account->getAccountTransport()); + if(account->getAccountTransport()) { - // _debug("decrease ref count in transport shutdown\n"); - // PJSIP's UDP transport is considered permanent, reference counter - // is initialized to 1 at transport creation. - // To destroy this transport, reference counter must be zero - // status = pjsip_transport_dec_ref(account->getAccountTransport()); - // status = pjsip_transport_shutdown(account->getAccountTransport()); + _debug("Transport bound to account, decrease ref count\n"); - // detach transport from this account - account->setAccountTransport(NULL); + // decrease reference count added by pjsip_regc_send + // PJSIP's IDLE timer is set if counter reach 0 + status = pjsip_transport_dec_ref(account->getAccountTransport()); + + // detach transport from this account + account->setAccountTransport(NULL); + + } } @@ -3183,6 +3185,8 @@ void regc_cb (struct pjsip_regc_cbparam *param) account->setRegistrationState (Unregistered); account->setRegister (false); + SIPVoIPLink::instance("")->shutdownSipTransport(account->getAccountID()); + // pjsip_regc_destroy(param->regc); // account->setRegistrationInfo(NULL); } @@ -3190,6 +3194,8 @@ void regc_cb (struct pjsip_regc_cbparam *param) } else { account->setRegistrationState (ErrorAuth); account->setRegister (false); + + SIPVoIPLink::instance("")->shutdownSipTransport(account->getAccountID()); } } @@ -4124,7 +4130,7 @@ std::string getLocalAddressAssociatedToAccount (AccountID id) // Set the local address - if (account != NULL) { + if (account != NULL && account->getAccountTransport ()) { tspt = account->getAccountTransport (); if (tspt != NULL) { -- GitLab From e31877b30f0150d36423db117ac322a59b26986a Mon Sep 17 00:00:00 2001 From: Julien Bonjean <julien@bonjean.info> Date: Tue, 15 Dec 2009 17:45:33 -0500 Subject: [PATCH 092/188] [#2445] Updated package --- .gitignore | 12 ++++++++++++ tools/mozilla-telify-sflphone/debian/changelog | 1 - .../debian/control.debian | 9 ++++++--- .../debian/{control => control.ubuntu} | 6 +++++- .../debian/mozilla-telify-sflphone.install | 5 +---- .../debian/mozilla-telify-sflphone.links | 1 - .../mozilla-telify-sflphone.links.debian | 1 + .../mozilla-telify-sflphone.links.ubuntu | 1 + tools/mozilla-telify-sflphone/debian/postinst | 2 -- tools/mozilla-telify-sflphone/debian/rules | 18 ++++++++---------- tools/mozilla-telify-sflphone/debian/watch | 2 ++ 11 files changed, 36 insertions(+), 22 deletions(-) rename tools/mozilla-telify-sflphone/debian/{control => control.ubuntu} (52%) delete mode 100644 tools/mozilla-telify-sflphone/debian/mozilla-telify-sflphone.links create mode 100644 tools/mozilla-telify-sflphone/debian/mozilla-telify-sflphone.links.debian create mode 100644 tools/mozilla-telify-sflphone/debian/mozilla-telify-sflphone.links.ubuntu create mode 100644 tools/mozilla-telify-sflphone/debian/watch diff --git a/.gitignore b/.gitignore index 84df355e2b..5c61460b9e 100644 --- a/.gitignore +++ b/.gitignore @@ -208,3 +208,15 @@ sflphone-client-gnome/stamp-h1 /tools/build-system/launchpad/*.build /tools/build-system/launchpad/*.upload +# telify +/tools/mozilla-telify-sflphone/debian/mozilla-telify-sflphone +/tools/mozilla-telify-sflphone/tmp/ +/tools/mozilla-telify-sflphone/*-stamp +/tools/*.dsc +/tools/*.tar.gz +/tools/*.deb +/tools/*.build +/tools/*.changes +/tools/mozilla-telify-sflphone/debian/control +/tools/mozilla-telify-sflphone/debian/mozilla-telify-sflphone.links + diff --git a/tools/mozilla-telify-sflphone/debian/changelog b/tools/mozilla-telify-sflphone/debian/changelog index 8ea3e02afc..e368436b93 100644 --- a/tools/mozilla-telify-sflphone/debian/changelog +++ b/tools/mozilla-telify-sflphone/debian/changelog @@ -4,4 +4,3 @@ mozilla-telify-sflphone (0.4.7.3) unstable; urgency=low * Package creation -- Julien Bonjean <julien.bonjean@savoirfairelinux.com> Fri, 20 Nov 2009 19:51:54 +0100 - diff --git a/tools/mozilla-telify-sflphone/debian/control.debian b/tools/mozilla-telify-sflphone/debian/control.debian index d4a3deefdd..36a90b1f2d 100644 --- a/tools/mozilla-telify-sflphone/debian/control.debian +++ b/tools/mozilla-telify-sflphone/debian/control.debian @@ -4,13 +4,16 @@ Priority: optional Maintainer: Julien Bonjean <julien.bonjean@savoirfairelinux.com> Uploaders: Julien Bonjean <julien.bonjean@savoirfairelinux.com> Build-Depends: debhelper (>= 7), unzip -Depends: iceweasel-gnome-support Homepage: http://www.sflphone.org Standards-Version: 3.8.3 DM-Upload-Allowed: yes Package: mozilla-telify-sflphone +Depends: iceweasel-gnome-support, sflphone-client-gnome Architecture: all -Depends: iceweasel (>= 3.0) -Description: TBD +Description: This package provides telify firefox plugin and handler for SFLphone. + Telify recognizes phone numbers on web pages and converts them to clickable links. + Additionally, any text can be selected and handled as a phone number (including + vanity number conversion) by selecting the corresponding context menu item. + http://www.codepad.de/en/software/firefox-add-ons/telify.html diff --git a/tools/mozilla-telify-sflphone/debian/control b/tools/mozilla-telify-sflphone/debian/control.ubuntu similarity index 52% rename from tools/mozilla-telify-sflphone/debian/control rename to tools/mozilla-telify-sflphone/debian/control.ubuntu index 88fcc2ff5f..01e98ce803 100644 --- a/tools/mozilla-telify-sflphone/debian/control +++ b/tools/mozilla-telify-sflphone/debian/control.ubuntu @@ -11,5 +11,9 @@ DM-Upload-Allowed: yes Package: mozilla-telify-sflphone Depends: firefox-gnome-support, sflphone-client-gnome Architecture: all -Description: TBD +Description: This package provides telify firefox plugin and handler for SFLphone. + Telify recognizes phone numbers on web pages and converts them to clickable links. + Additionally, any text can be selected and handled as a phone number (including + vanity number conversion) by selecting the corresponding context menu item. + http://www.codepad.de/en/software/firefox-add-ons/telify.html diff --git a/tools/mozilla-telify-sflphone/debian/mozilla-telify-sflphone.install b/tools/mozilla-telify-sflphone/debian/mozilla-telify-sflphone.install index ffb9a7d052..937e53876e 100644 --- a/tools/mozilla-telify-sflphone/debian/mozilla-telify-sflphone.install +++ b/tools/mozilla-telify-sflphone/debian/mozilla-telify-sflphone.install @@ -1,5 +1,2 @@ -temp/install.rdf usr/share/mozilla-extensions/telify/ -temp/chrome.manifest usr/share/mozilla-extensions/telify/ -temp/defaults/* usr/share/mozilla-extensions/telify/defaults -temp/chrome/* usr/share/mozilla-extensions/telify/chrome +tmp/telify usr/share/ sflphone-handler usr/bin/ diff --git a/tools/mozilla-telify-sflphone/debian/mozilla-telify-sflphone.links b/tools/mozilla-telify-sflphone/debian/mozilla-telify-sflphone.links deleted file mode 100644 index 5fa1937c3e..0000000000 --- a/tools/mozilla-telify-sflphone/debian/mozilla-telify-sflphone.links +++ /dev/null @@ -1 +0,0 @@ -usr/share/mozilla-extensions/telify usr/lib/iceweasel/extensions/{6c5f349a-ddda-49ad-bdf0-326d3fe1f938} diff --git a/tools/mozilla-telify-sflphone/debian/mozilla-telify-sflphone.links.debian b/tools/mozilla-telify-sflphone/debian/mozilla-telify-sflphone.links.debian new file mode 100644 index 0000000000..f8f52cec90 --- /dev/null +++ b/tools/mozilla-telify-sflphone/debian/mozilla-telify-sflphone.links.debian @@ -0,0 +1 @@ +usr/share/telify usr/lib/iceweasel/extensions/{6c5f349a-ddda-49ad-bdf0-326d3fe1f938} diff --git a/tools/mozilla-telify-sflphone/debian/mozilla-telify-sflphone.links.ubuntu b/tools/mozilla-telify-sflphone/debian/mozilla-telify-sflphone.links.ubuntu new file mode 100644 index 0000000000..f234168dd0 --- /dev/null +++ b/tools/mozilla-telify-sflphone/debian/mozilla-telify-sflphone.links.ubuntu @@ -0,0 +1 @@ +usr/share/telify usr/lib/firefox-addons/extensions/{6c5f349a-ddda-49ad-bdf0-326d3fe1f938} diff --git a/tools/mozilla-telify-sflphone/debian/postinst b/tools/mozilla-telify-sflphone/debian/postinst index 293cbf05a1..1039df3268 100755 --- a/tools/mozilla-telify-sflphone/debian/postinst +++ b/tools/mozilla-telify-sflphone/debian/postinst @@ -1,7 +1,5 @@ #!/bin/bash -set -x - gconftool-2 --direct --config-source xml::/etc/gconf/gconf.xml.defaults -t string -s /desktop/gnome/url-handlers/tel/command "/usr/bin/sflphone-handler %s" gconftool-2 --direct --config-source xml::/etc/gconf/gconf.xml.defaults -s /desktop/gnome/url-handlers/tel/needs_terminal false -t bool gconftool-2 --direct --config-source xml::/etc/gconf/gconf.xml.defaults -t bool -s /desktop/gnome/url-handlers/tel/enabled true diff --git a/tools/mozilla-telify-sflphone/debian/rules b/tools/mozilla-telify-sflphone/debian/rules index b6418e1b04..0e8b875eb4 100755 --- a/tools/mozilla-telify-sflphone/debian/rules +++ b/tools/mozilla-telify-sflphone/debian/rules @@ -1,42 +1,40 @@ #!/usr/bin/make -f # Uncomment this to turn on verbose mode. -#export DH_VERBOSE=1 +export DH_VERBOSE=1 -ID="{6c5f349a-ddda-49ad-bdf0-326d3fe1f938}" +VERSION="0.4.7.3" configure: configure-stamp configure-stamp: dh_testdir - touch configure-stamp build: configure-stamp build-stamp build-stamp: dh_testdir - mkdir -p temp - unzip -o -d temp *.xpi + echo ${DIR} + umask 0022 + mkdir -p tmp/telify + unzip telify-${VERSION}-fx.xpi -d tmp/telify touch build-stamp clean: dh_testdir dh_testroot rm -f build-stamp configure-stamp - - -rm -rf temp - dh_clean + rm -rf tmp + install: build dh_testdir dh_testroot dh_prep dh_installdirs - dh_install - # Build architecture-independent files here. binary-indep: build install dh_testdir diff --git a/tools/mozilla-telify-sflphone/debian/watch b/tools/mozilla-telify-sflphone/debian/watch new file mode 100644 index 0000000000..74d5ff2777 --- /dev/null +++ b/tools/mozilla-telify-sflphone/debian/watch @@ -0,0 +1,2 @@ +version=3 +http://www.codepad.de/en/telify.html /download/telify-(.*)-fx.xpi -- GitLab From be9f233be8d1b9ac4450ba8ec1c6bb1d9328d456 Mon Sep 17 00:00:00 2001 From: Julien Bonjean <julien@bonjean.info> Date: Tue, 15 Dec 2009 17:51:22 -0500 Subject: [PATCH 093/188] [#2445] Moved debian files to build system --- .../mozilla-telify-sflphone/debian/changelog | 0 .../mozilla-telify-sflphone/debian/compat | 0 .../mozilla-telify-sflphone/debian/control} | 0 .../debian/control.debian | 0 .../debian/control.ubuntu | 19 + .../mozilla-telify-sflphone/debian/copyright | 0 .../mozilla-telify-sflphone/debian/files | 0 .../mozilla-telify-sflphone.debhelper.log | 0 .../debian/mozilla-telify-sflphone.install | 0 .../debian/mozilla-telify-sflphone.links} | 0 .../mozilla-telify-sflphone.links.debian | 0 .../mozilla-telify-sflphone.links.ubuntu | 1 + .../debian/mozilla-telify-sflphone.substvars | 0 .../mozilla-telify-sflphone/DEBIAN/control | 14 + .../mozilla-telify-sflphone/DEBIAN/md5sums | 282 +++++++ .../mozilla-telify-sflphone/DEBIAN}/postinst | 0 .../usr/bin/sflphone-handler | 52 ++ .../{6c5f349a-ddda-49ad-bdf0-326d3fe1f938} | 1 + .../doc/mozilla-telify-sflphone/changelog.gz | Bin 0 -> 175 bytes .../usr/share/telify/chrome.manifest | 5 + .../usr/share/telify/chrome/content/ask32.png | Bin 0 -> 2671 bytes .../share/telify/chrome/content/browser.xul | 87 +++ .../usr/share/telify/chrome/content/config.js | 196 +++++ .../share/telify/chrome/content/config.xul | 180 +++++ .../telify/chrome/content/country_data.js | 258 +++++++ .../share/telify/chrome/content/dialog.css | 33 + .../share/telify/chrome/content/edit22x15.png | Bin 0 -> 2946 bytes .../share/telify/chrome/content/editNumber.js | 180 +++++ .../telify/chrome/content/editNumber.xul | 45 ++ .../share/telify/chrome/content/error32.png | Bin 0 -> 2478 bytes .../telify/chrome/content/flag/1-canada.png | Bin 0 -> 2979 bytes .../share/telify/chrome/content/flag/1.png | Bin 0 -> 2878 bytes .../share/telify/chrome/content/flag/1242.png | Bin 0 -> 2928 bytes .../share/telify/chrome/content/flag/1246.png | Bin 0 -> 347 bytes .../share/telify/chrome/content/flag/1264.png | Bin 0 -> 3228 bytes .../share/telify/chrome/content/flag/1268.png | Bin 0 -> 587 bytes .../share/telify/chrome/content/flag/1284.png | Bin 0 -> 3287 bytes .../share/telify/chrome/content/flag/1340.png | Bin 0 -> 785 bytes .../share/telify/chrome/content/flag/1345.png | Bin 0 -> 3245 bytes .../share/telify/chrome/content/flag/1441.png | Bin 0 -> 3238 bytes .../share/telify/chrome/content/flag/1473.png | Bin 0 -> 3288 bytes .../share/telify/chrome/content/flag/1649.png | Bin 0 -> 3206 bytes .../share/telify/chrome/content/flag/1664.png | Bin 0 -> 3220 bytes .../share/telify/chrome/content/flag/1670.png | Bin 0 -> 3233 bytes .../share/telify/chrome/content/flag/1671.png | Bin 0 -> 3003 bytes .../share/telify/chrome/content/flag/1684.png | Bin 0 -> 3124 bytes .../share/telify/chrome/content/flag/1758.png | Bin 0 -> 3002 bytes .../share/telify/chrome/content/flag/1767.png | Bin 0 -> 3064 bytes .../share/telify/chrome/content/flag/1784.png | Bin 0 -> 302 bytes .../share/telify/chrome/content/flag/1787.png | Bin 0 -> 440 bytes .../share/telify/chrome/content/flag/1809.png | Bin 0 -> 2961 bytes .../share/telify/chrome/content/flag/1829.png | Bin 0 -> 2961 bytes .../share/telify/chrome/content/flag/1868.png | Bin 0 -> 3278 bytes .../share/telify/chrome/content/flag/1869.png | Bin 0 -> 689 bytes .../share/telify/chrome/content/flag/1876.png | Bin 0 -> 2954 bytes .../share/telify/chrome/content/flag/1939.png | Bin 0 -> 440 bytes .../share/telify/chrome/content/flag/20.png | Bin 0 -> 223 bytes .../share/telify/chrome/content/flag/212.png | Bin 0 -> 312 bytes .../share/telify/chrome/content/flag/213.png | Bin 0 -> 411 bytes .../share/telify/chrome/content/flag/216.png | Bin 0 -> 401 bytes .../share/telify/chrome/content/flag/218.png | Bin 0 -> 2820 bytes .../share/telify/chrome/content/flag/220.png | Bin 0 -> 146 bytes .../share/telify/chrome/content/flag/221.png | Bin 0 -> 245 bytes .../share/telify/chrome/content/flag/222.png | Bin 0 -> 410 bytes .../share/telify/chrome/content/flag/223.png | Bin 0 -> 151 bytes .../share/telify/chrome/content/flag/224.png | Bin 0 -> 151 bytes .../share/telify/chrome/content/flag/225.png | Bin 0 -> 147 bytes .../share/telify/chrome/content/flag/226.png | Bin 0 -> 256 bytes .../share/telify/chrome/content/flag/227.png | Bin 0 -> 2931 bytes .../share/telify/chrome/content/flag/228.png | Bin 0 -> 3019 bytes .../share/telify/chrome/content/flag/229.png | Bin 0 -> 164 bytes .../share/telify/chrome/content/flag/230.png | Bin 0 -> 172 bytes .../share/telify/chrome/content/flag/231.png | Bin 0 -> 3043 bytes .../share/telify/chrome/content/flag/232.png | Bin 0 -> 137 bytes .../share/telify/chrome/content/flag/233.png | Bin 0 -> 253 bytes .../share/telify/chrome/content/flag/234.png | Bin 0 -> 2837 bytes .../share/telify/chrome/content/flag/235.png | Bin 0 -> 151 bytes .../share/telify/chrome/content/flag/236.png | Bin 0 -> 380 bytes .../share/telify/chrome/content/flag/237.png | Bin 0 -> 240 bytes .../share/telify/chrome/content/flag/238.png | Bin 0 -> 3037 bytes .../share/telify/chrome/content/flag/239.png | Bin 0 -> 2990 bytes .../share/telify/chrome/content/flag/240.png | Bin 0 -> 434 bytes .../share/telify/chrome/content/flag/241.png | Bin 0 -> 2888 bytes .../share/telify/chrome/content/flag/242.png | Bin 0 -> 449 bytes .../share/telify/chrome/content/flag/243.png | Bin 0 -> 3452 bytes .../share/telify/chrome/content/flag/244.png | Bin 0 -> 375 bytes .../share/telify/chrome/content/flag/245.png | Bin 0 -> 2932 bytes .../share/telify/chrome/content/flag/246.png | Bin 0 -> 3646 bytes .../share/telify/chrome/content/flag/247.png | Bin 0 -> 3740 bytes .../share/telify/chrome/content/flag/248.png | Bin 0 -> 3105 bytes .../share/telify/chrome/content/flag/249.png | Bin 0 -> 2972 bytes .../share/telify/chrome/content/flag/250.png | Bin 0 -> 323 bytes .../share/telify/chrome/content/flag/251.png | Bin 0 -> 3025 bytes .../share/telify/chrome/content/flag/252.png | Bin 0 -> 248 bytes .../share/telify/chrome/content/flag/253.png | Bin 0 -> 390 bytes .../share/telify/chrome/content/flag/254.png | Bin 0 -> 380 bytes .../share/telify/chrome/content/flag/255.png | Bin 0 -> 635 bytes .../share/telify/chrome/content/flag/256.png | Bin 0 -> 306 bytes .../share/telify/chrome/content/flag/257.png | Bin 0 -> 3326 bytes .../share/telify/chrome/content/flag/258.png | Bin 0 -> 471 bytes .../share/telify/chrome/content/flag/260.png | Bin 0 -> 280 bytes .../share/telify/chrome/content/flag/261.png | Bin 0 -> 161 bytes .../share/telify/chrome/content/flag/262.png | Bin 0 -> 147 bytes .../share/telify/chrome/content/flag/263.png | Bin 0 -> 3044 bytes .../share/telify/chrome/content/flag/264.png | Bin 0 -> 720 bytes .../share/telify/chrome/content/flag/265.png | Bin 0 -> 286 bytes .../share/telify/chrome/content/flag/266.png | Bin 0 -> 284 bytes .../share/telify/chrome/content/flag/267.png | Bin 0 -> 165 bytes .../share/telify/chrome/content/flag/268.png | Bin 0 -> 539 bytes .../share/telify/chrome/content/flag/269.png | Bin 0 -> 3169 bytes .../share/telify/chrome/content/flag/27.png | Bin 0 -> 558 bytes .../share/telify/chrome/content/flag/290.png | Bin 0 -> 3202 bytes .../share/telify/chrome/content/flag/291.png | Bin 0 -> 3091 bytes .../share/telify/chrome/content/flag/297.png | Bin 0 -> 260 bytes .../share/telify/chrome/content/flag/298.png | Bin 0 -> 2877 bytes .../share/telify/chrome/content/flag/299.png | Bin 0 -> 408 bytes .../share/telify/chrome/content/flag/30.png | Bin 0 -> 325 bytes .../share/telify/chrome/content/flag/31.png | Bin 0 -> 137 bytes .../share/telify/chrome/content/flag/32.png | Bin 0 -> 145 bytes .../share/telify/chrome/content/flag/33.png | Bin 0 -> 147 bytes .../share/telify/chrome/content/flag/34.png | Bin 0 -> 325 bytes .../share/telify/chrome/content/flag/350.png | Bin 0 -> 3054 bytes .../share/telify/chrome/content/flag/351.png | Bin 0 -> 413 bytes .../share/telify/chrome/content/flag/352.png | Bin 0 -> 2844 bytes .../share/telify/chrome/content/flag/353.png | Bin 0 -> 2839 bytes .../share/telify/chrome/content/flag/354.png | Bin 0 -> 2895 bytes .../share/telify/chrome/content/flag/355.png | Bin 0 -> 3109 bytes .../share/telify/chrome/content/flag/356.png | Bin 0 -> 235 bytes .../share/telify/chrome/content/flag/357.png | Bin 0 -> 3050 bytes .../share/telify/chrome/content/flag/358.png | Bin 0 -> 2910 bytes .../share/telify/chrome/content/flag/359.png | Bin 0 -> 2842 bytes .../share/telify/chrome/content/flag/36.png | Bin 0 -> 2839 bytes .../share/telify/chrome/content/flag/370.png | Bin 0 -> 2842 bytes .../share/telify/chrome/content/flag/371.png | Bin 0 -> 2841 bytes .../share/telify/chrome/content/flag/372.png | Bin 0 -> 2838 bytes .../share/telify/chrome/content/flag/373.png | Bin 0 -> 2976 bytes .../share/telify/chrome/content/flag/374.png | Bin 0 -> 2842 bytes .../telify/chrome/content/flag/37447.png | Bin 0 -> 3069 bytes .../telify/chrome/content/flag/37497.png | Bin 0 -> 3069 bytes .../share/telify/chrome/content/flag/375.png | Bin 0 -> 2946 bytes .../share/telify/chrome/content/flag/376.png | Bin 0 -> 404 bytes .../share/telify/chrome/content/flag/377.png | Bin 0 -> 2836 bytes .../telify/chrome/content/flag/37744.png | Bin 0 -> 473 bytes .../share/telify/chrome/content/flag/378.png | Bin 0 -> 3126 bytes .../share/telify/chrome/content/flag/379.png | Bin 0 -> 3050 bytes .../share/telify/chrome/content/flag/380.png | Bin 0 -> 137 bytes .../telify/chrome/content/flag/381-kosovo.png | Bin 0 -> 473 bytes .../share/telify/chrome/content/flag/381.png | Bin 0 -> 408 bytes .../share/telify/chrome/content/flag/382.png | Bin 0 -> 3001 bytes .../share/telify/chrome/content/flag/385.png | Bin 0 -> 3045 bytes .../share/telify/chrome/content/flag/386.png | Bin 0 -> 2933 bytes .../telify/chrome/content/flag/38649.png | Bin 0 -> 473 bytes .../share/telify/chrome/content/flag/387.png | Bin 0 -> 3078 bytes .../share/telify/chrome/content/flag/3883.png | Bin 0 -> 421 bytes .../share/telify/chrome/content/flag/389.png | Bin 0 -> 3170 bytes .../telify/chrome/content/flag/39-vatican.png | Bin 0 -> 3050 bytes .../share/telify/chrome/content/flag/39.png | Bin 0 -> 151 bytes .../share/telify/chrome/content/flag/40.png | Bin 0 -> 151 bytes .../share/telify/chrome/content/flag/41.png | Bin 0 -> 2849 bytes .../share/telify/chrome/content/flag/420.png | Bin 0 -> 400 bytes .../share/telify/chrome/content/flag/421.png | Bin 0 -> 409 bytes .../share/telify/chrome/content/flag/423.png | Bin 0 -> 2921 bytes .../share/telify/chrome/content/flag/43.png | Bin 0 -> 134 bytes .../share/telify/chrome/content/flag/44.png | Bin 0 -> 3740 bytes .../share/telify/chrome/content/flag/45.png | Bin 0 -> 3015 bytes .../share/telify/chrome/content/flag/46.png | Bin 0 -> 3059 bytes .../share/telify/chrome/content/flag/47.png | Bin 0 -> 3115 bytes .../share/telify/chrome/content/flag/48.png | Bin 0 -> 2820 bytes .../share/telify/chrome/content/flag/49.png | Bin 0 -> 2870 bytes .../share/telify/chrome/content/flag/500.png | Bin 0 -> 3239 bytes .../share/telify/chrome/content/flag/501.png | Bin 0 -> 654 bytes .../share/telify/chrome/content/flag/502.png | Bin 0 -> 2978 bytes .../share/telify/chrome/content/flag/503.png | Bin 0 -> 2902 bytes .../share/telify/chrome/content/flag/504.png | Bin 0 -> 2912 bytes .../share/telify/chrome/content/flag/505.png | Bin 0 -> 2934 bytes .../share/telify/chrome/content/flag/506.png | Bin 0 -> 2852 bytes .../share/telify/chrome/content/flag/507.png | Bin 0 -> 320 bytes .../share/telify/chrome/content/flag/508.png | Bin 0 -> 147 bytes .../share/telify/chrome/content/flag/509.png | Bin 0 -> 2964 bytes .../share/telify/chrome/content/flag/51.png | Bin 0 -> 147 bytes .../share/telify/chrome/content/flag/52.png | Bin 0 -> 2954 bytes .../share/telify/chrome/content/flag/53.png | Bin 0 -> 3234 bytes .../share/telify/chrome/content/flag/54.png | Bin 0 -> 3003 bytes .../share/telify/chrome/content/flag/55.png | Bin 0 -> 662 bytes .../share/telify/chrome/content/flag/56.png | Bin 0 -> 239 bytes .../share/telify/chrome/content/flag/57.png | Bin 0 -> 157 bytes .../share/telify/chrome/content/flag/58.png | Bin 0 -> 273 bytes .../share/telify/chrome/content/flag/590.png | Bin 0 -> 147 bytes .../share/telify/chrome/content/flag/591.png | Bin 0 -> 140 bytes .../share/telify/chrome/content/flag/592.png | Bin 0 -> 3185 bytes .../share/telify/chrome/content/flag/593.png | Bin 0 -> 3025 bytes .../share/telify/chrome/content/flag/594.png | Bin 0 -> 147 bytes .../share/telify/chrome/content/flag/595.png | Bin 0 -> 2922 bytes .../share/telify/chrome/content/flag/596.png | Bin 0 -> 147 bytes .../share/telify/chrome/content/flag/597.png | Bin 0 -> 295 bytes .../share/telify/chrome/content/flag/598.png | Bin 0 -> 380 bytes .../share/telify/chrome/content/flag/599.png | Bin 0 -> 255 bytes .../share/telify/chrome/content/flag/60.png | Bin 0 -> 3266 bytes .../share/telify/chrome/content/flag/61.png | Bin 0 -> 3547 bytes .../share/telify/chrome/content/flag/62.png | Bin 0 -> 138 bytes .../share/telify/chrome/content/flag/63.png | Bin 0 -> 3087 bytes .../share/telify/chrome/content/flag/64.png | Bin 0 -> 3206 bytes .../share/telify/chrome/content/flag/65.png | Bin 0 -> 319 bytes .../share/telify/chrome/content/flag/66.png | Bin 0 -> 157 bytes .../share/telify/chrome/content/flag/670.png | Bin 0 -> 3040 bytes .../content/flag/672-norfolk_island.png | Bin 0 -> 3053 bytes .../share/telify/chrome/content/flag/672.png | Bin 0 -> 3237 bytes .../share/telify/chrome/content/flag/673.png | Bin 0 -> 3236 bytes .../share/telify/chrome/content/flag/674.png | Bin 0 -> 2918 bytes .../share/telify/chrome/content/flag/675.png | Bin 0 -> 3408 bytes .../share/telify/chrome/content/flag/676.png | Bin 0 -> 2945 bytes .../share/telify/chrome/content/flag/677.png | Bin 0 -> 3090 bytes .../share/telify/chrome/content/flag/678.png | Bin 0 -> 3137 bytes .../share/telify/chrome/content/flag/679.png | Bin 0 -> 3236 bytes .../share/telify/chrome/content/flag/680.png | Bin 0 -> 3019 bytes .../share/telify/chrome/content/flag/681.png | Bin 0 -> 147 bytes .../share/telify/chrome/content/flag/682.png | Bin 0 -> 3333 bytes .../share/telify/chrome/content/flag/683.png | Bin 0 -> 3104 bytes .../share/telify/chrome/content/flag/685.png | Bin 0 -> 2936 bytes .../share/telify/chrome/content/flag/686.png | Bin 0 -> 3301 bytes .../share/telify/chrome/content/flag/687.png | Bin 0 -> 147 bytes .../share/telify/chrome/content/flag/688.png | Bin 0 -> 3330 bytes .../share/telify/chrome/content/flag/689.png | Bin 0 -> 347 bytes .../share/telify/chrome/content/flag/690.png | Bin 0 -> 3179 bytes .../share/telify/chrome/content/flag/691.png | Bin 0 -> 2956 bytes .../share/telify/chrome/content/flag/692.png | Bin 0 -> 3333 bytes .../chrome/content/flag/7-kazakhstan.png | Bin 0 -> 3324 bytes .../share/telify/chrome/content/flag/7.png | Bin 0 -> 136 bytes .../share/telify/chrome/content/flag/81.png | Bin 0 -> 327 bytes .../share/telify/chrome/content/flag/82.png | Bin 0 -> 666 bytes .../share/telify/chrome/content/flag/84.png | Bin 0 -> 354 bytes .../share/telify/chrome/content/flag/850.png | Bin 0 -> 2968 bytes .../share/telify/chrome/content/flag/852.png | Bin 0 -> 403 bytes .../share/telify/chrome/content/flag/853.png | Bin 0 -> 417 bytes .../share/telify/chrome/content/flag/855.png | Bin 0 -> 421 bytes .../share/telify/chrome/content/flag/856.png | Bin 0 -> 264 bytes .../share/telify/chrome/content/flag/86.png | Bin 0 -> 319 bytes .../share/telify/chrome/content/flag/870.png | Bin 0 -> 3427 bytes .../share/telify/chrome/content/flag/871.png | Bin 0 -> 3427 bytes .../share/telify/chrome/content/flag/872.png | Bin 0 -> 3427 bytes .../share/telify/chrome/content/flag/873.png | Bin 0 -> 3427 bytes .../share/telify/chrome/content/flag/874.png | Bin 0 -> 3427 bytes .../share/telify/chrome/content/flag/880.png | Bin 0 -> 2992 bytes .../share/telify/chrome/content/flag/886.png | Bin 0 -> 322 bytes .../share/telify/chrome/content/flag/90.png | Bin 0 -> 389 bytes .../telify/chrome/content/flag/90392.png | Bin 0 -> 390 bytes .../share/telify/chrome/content/flag/91.png | Bin 0 -> 249 bytes .../share/telify/chrome/content/flag/92.png | Bin 0 -> 419 bytes .../share/telify/chrome/content/flag/93.png | Bin 0 -> 377 bytes .../share/telify/chrome/content/flag/94.png | Bin 0 -> 3164 bytes .../share/telify/chrome/content/flag/95.png | Bin 0 -> 2998 bytes .../share/telify/chrome/content/flag/960.png | Bin 0 -> 295 bytes .../share/telify/chrome/content/flag/961.png | Bin 0 -> 383 bytes .../share/telify/chrome/content/flag/962.png | Bin 0 -> 2965 bytes .../share/telify/chrome/content/flag/963.png | Bin 0 -> 241 bytes .../share/telify/chrome/content/flag/964.png | Bin 0 -> 261 bytes .../share/telify/chrome/content/flag/965.png | Bin 0 -> 2923 bytes .../share/telify/chrome/content/flag/966.png | Bin 0 -> 437 bytes .../share/telify/chrome/content/flag/967.png | Bin 0 -> 137 bytes .../share/telify/chrome/content/flag/968.png | Bin 0 -> 2927 bytes .../share/telify/chrome/content/flag/971.png | Bin 0 -> 2873 bytes .../share/telify/chrome/content/flag/972.png | Bin 0 -> 3052 bytes .../share/telify/chrome/content/flag/973.png | Bin 0 -> 2964 bytes .../share/telify/chrome/content/flag/974.png | Bin 0 -> 2834 bytes .../share/telify/chrome/content/flag/975.png | Bin 0 -> 601 bytes .../share/telify/chrome/content/flag/976.png | Bin 0 -> 2973 bytes .../share/telify/chrome/content/flag/977.png | Bin 0 -> 3373 bytes .../share/telify/chrome/content/flag/98.png | Bin 0 -> 2957 bytes .../share/telify/chrome/content/flag/992.png | Bin 0 -> 2933 bytes .../share/telify/chrome/content/flag/993.png | Bin 0 -> 519 bytes .../share/telify/chrome/content/flag/994.png | Bin 0 -> 2927 bytes .../share/telify/chrome/content/flag/995.png | Bin 0 -> 286 bytes .../share/telify/chrome/content/flag/996.png | Bin 0 -> 3044 bytes .../share/telify/chrome/content/flag/998.png | Bin 0 -> 2949 bytes .../telify/chrome/content/icon18_active.png | Bin 0 -> 3820 bytes .../telify/chrome/content/icon18_inactive.png | Bin 0 -> 1424 bytes .../share/telify/chrome/content/icon32.png | Bin 0 -> 5391 bytes .../share/telify/chrome/content/icon96.png | Bin 0 -> 12314 bytes .../share/telify/chrome/content/icon_menu.png | Bin 0 -> 583 bytes .../share/telify/chrome/content/info32.png | Bin 0 -> 2328 bytes .../telify/chrome/content/jshashtable.js | 380 ++++++++++ .../share/telify/chrome/content/messagebox.js | 43 ++ .../telify/chrome/content/messagebox.xul | 34 + .../usr/share/telify/chrome/content/pref.js | 164 ++++ .../usr/share/telify/chrome/content/telify.js | 715 ++++++++++++++++++ .../usr/share/telify/chrome/content/util.js | 516 +++++++++++++ .../share/telify/chrome/content/warn32.png | Bin 0 -> 2125 bytes .../chrome/locale/de-DE/country_locale.js | 158 ++++ .../chrome/locale/de-DE/custom_preset.js | 8 + .../share/telify/chrome/locale/de-DE/lang.dtd | 39 + .../chrome/locale/de-DE/lang.properties | 13 + .../telify/chrome/locale/de-DE/locale.js | 25 + .../chrome/locale/en-US/country_locale.js | 3 + .../chrome/locale/en-US/custom_preset.js | 8 + .../share/telify/chrome/locale/en-US/lang.dtd | 39 + .../chrome/locale/en-US/lang.properties | 13 + .../telify/chrome/locale/en-US/locale.js | 25 + .../defaults/preferences/preferences.js | 18 + .../usr/share/telify/install.rdf | 37 + .../mozilla-telify-sflphone/debian/postinst | 16 + .../mozilla-telify-sflphone/debian/rules | 0 .../mozilla-telify-sflphone/debian/watch | 0 302 files changed, 3607 insertions(+) rename tools/{ => build-system/launchpad}/mozilla-telify-sflphone/debian/changelog (100%) rename tools/{ => build-system/launchpad}/mozilla-telify-sflphone/debian/compat (100%) rename tools/{mozilla-telify-sflphone/debian/control.ubuntu => build-system/launchpad/mozilla-telify-sflphone/debian/control} (100%) rename tools/{ => build-system/launchpad}/mozilla-telify-sflphone/debian/control.debian (100%) create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/control.ubuntu rename tools/{ => build-system/launchpad}/mozilla-telify-sflphone/debian/copyright (100%) rename tools/{ => build-system/launchpad}/mozilla-telify-sflphone/debian/files (100%) rename tools/{ => build-system/launchpad}/mozilla-telify-sflphone/debian/mozilla-telify-sflphone.debhelper.log (100%) rename tools/{ => build-system/launchpad}/mozilla-telify-sflphone/debian/mozilla-telify-sflphone.install (100%) rename tools/{mozilla-telify-sflphone/debian/mozilla-telify-sflphone.links.ubuntu => build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone.links} (100%) rename tools/{ => build-system/launchpad}/mozilla-telify-sflphone/debian/mozilla-telify-sflphone.links.debian (100%) create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone.links.ubuntu rename tools/{ => build-system/launchpad}/mozilla-telify-sflphone/debian/mozilla-telify-sflphone.substvars (100%) create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/DEBIAN/control create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/DEBIAN/md5sums rename tools/{mozilla-telify-sflphone/debian => build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/DEBIAN}/postinst (100%) create mode 100755 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/bin/sflphone-handler create mode 120000 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/lib/firefox-addons/extensions/{6c5f349a-ddda-49ad-bdf0-326d3fe1f938} create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/doc/mozilla-telify-sflphone/changelog.gz create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome.manifest create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/ask32.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/browser.xul create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/config.js create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/config.xul create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/country_data.js create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/dialog.css create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/edit22x15.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/editNumber.js create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/editNumber.xul create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/error32.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/1-canada.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/1.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/1242.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/1246.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/1264.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/1268.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/1284.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/1340.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/1345.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/1441.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/1473.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/1649.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/1664.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/1670.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/1671.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/1684.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/1758.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/1767.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/1784.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/1787.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/1809.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/1829.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/1868.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/1869.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/1876.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/1939.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/20.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/212.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/213.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/216.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/218.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/220.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/221.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/222.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/223.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/224.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/225.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/226.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/227.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/228.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/229.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/230.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/231.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/232.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/233.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/234.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/235.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/236.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/237.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/238.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/239.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/240.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/241.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/242.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/243.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/244.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/245.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/246.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/247.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/248.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/249.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/250.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/251.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/252.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/253.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/254.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/255.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/256.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/257.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/258.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/260.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/261.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/262.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/263.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/264.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/265.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/266.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/267.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/268.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/269.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/27.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/290.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/291.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/297.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/298.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/299.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/30.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/31.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/32.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/33.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/34.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/350.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/351.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/352.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/353.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/354.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/355.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/356.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/357.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/358.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/359.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/36.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/370.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/371.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/372.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/373.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/374.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/37447.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/37497.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/375.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/376.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/377.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/37744.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/378.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/379.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/380.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/381-kosovo.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/381.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/382.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/385.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/386.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/38649.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/387.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/3883.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/389.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/39-vatican.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/39.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/40.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/41.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/420.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/421.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/423.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/43.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/44.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/45.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/46.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/47.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/48.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/49.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/500.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/501.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/502.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/503.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/504.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/505.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/506.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/507.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/508.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/509.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/51.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/52.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/53.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/54.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/55.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/56.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/57.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/58.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/590.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/591.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/592.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/593.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/594.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/595.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/596.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/597.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/598.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/599.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/60.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/61.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/62.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/63.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/64.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/65.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/66.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/670.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/672-norfolk_island.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/672.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/673.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/674.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/675.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/676.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/677.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/678.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/679.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/680.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/681.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/682.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/683.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/685.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/686.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/687.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/688.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/689.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/690.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/691.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/692.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/7-kazakhstan.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/7.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/81.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/82.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/84.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/850.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/852.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/853.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/855.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/856.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/86.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/870.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/871.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/872.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/873.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/874.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/880.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/886.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/90.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/90392.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/91.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/92.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/93.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/94.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/95.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/960.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/961.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/962.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/963.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/964.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/965.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/966.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/967.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/968.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/971.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/972.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/973.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/974.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/975.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/976.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/977.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/98.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/992.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/993.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/994.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/995.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/996.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/998.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/icon18_active.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/icon18_inactive.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/icon32.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/icon96.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/icon_menu.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/info32.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/jshashtable.js create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/messagebox.js create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/messagebox.xul create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/pref.js create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/telify.js create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/util.js create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/warn32.png create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/locale/de-DE/country_locale.js create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/locale/de-DE/custom_preset.js create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/locale/de-DE/lang.dtd create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/locale/de-DE/lang.properties create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/locale/de-DE/locale.js create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/locale/en-US/country_locale.js create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/locale/en-US/custom_preset.js create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/locale/en-US/lang.dtd create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/locale/en-US/lang.properties create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/locale/en-US/locale.js create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/defaults/preferences/preferences.js create mode 100644 tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/install.rdf create mode 100755 tools/build-system/launchpad/mozilla-telify-sflphone/debian/postinst rename tools/{ => build-system/launchpad}/mozilla-telify-sflphone/debian/rules (100%) rename tools/{ => build-system/launchpad}/mozilla-telify-sflphone/debian/watch (100%) diff --git a/tools/mozilla-telify-sflphone/debian/changelog b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/changelog similarity index 100% rename from tools/mozilla-telify-sflphone/debian/changelog rename to tools/build-system/launchpad/mozilla-telify-sflphone/debian/changelog diff --git a/tools/mozilla-telify-sflphone/debian/compat b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/compat similarity index 100% rename from tools/mozilla-telify-sflphone/debian/compat rename to tools/build-system/launchpad/mozilla-telify-sflphone/debian/compat diff --git a/tools/mozilla-telify-sflphone/debian/control.ubuntu b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/control similarity index 100% rename from tools/mozilla-telify-sflphone/debian/control.ubuntu rename to tools/build-system/launchpad/mozilla-telify-sflphone/debian/control diff --git a/tools/mozilla-telify-sflphone/debian/control.debian b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/control.debian similarity index 100% rename from tools/mozilla-telify-sflphone/debian/control.debian rename to tools/build-system/launchpad/mozilla-telify-sflphone/debian/control.debian diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/control.ubuntu b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/control.ubuntu new file mode 100644 index 0000000000..01e98ce803 --- /dev/null +++ b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/control.ubuntu @@ -0,0 +1,19 @@ +Source: mozilla-telify-sflphone +Section: web +Priority: optional +Maintainer: Julien Bonjean <julien.bonjean@savoirfairelinux.com> +Uploaders: Julien Bonjean <julien.bonjean@savoirfairelinux.com> +Build-Depends: debhelper (>= 7), unzip +Homepage: http://www.sflphone.org +Standards-Version: 3.8.3 +DM-Upload-Allowed: yes + +Package: mozilla-telify-sflphone +Depends: firefox-gnome-support, sflphone-client-gnome +Architecture: all +Description: This package provides telify firefox plugin and handler for SFLphone. + Telify recognizes phone numbers on web pages and converts them to clickable links. + Additionally, any text can be selected and handled as a phone number (including + vanity number conversion) by selecting the corresponding context menu item. + http://www.codepad.de/en/software/firefox-add-ons/telify.html + diff --git a/tools/mozilla-telify-sflphone/debian/copyright b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/copyright similarity index 100% rename from tools/mozilla-telify-sflphone/debian/copyright rename to tools/build-system/launchpad/mozilla-telify-sflphone/debian/copyright diff --git a/tools/mozilla-telify-sflphone/debian/files b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/files similarity index 100% rename from tools/mozilla-telify-sflphone/debian/files rename to tools/build-system/launchpad/mozilla-telify-sflphone/debian/files diff --git a/tools/mozilla-telify-sflphone/debian/mozilla-telify-sflphone.debhelper.log b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone.debhelper.log similarity index 100% rename from tools/mozilla-telify-sflphone/debian/mozilla-telify-sflphone.debhelper.log rename to tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone.debhelper.log diff --git a/tools/mozilla-telify-sflphone/debian/mozilla-telify-sflphone.install b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone.install similarity index 100% rename from tools/mozilla-telify-sflphone/debian/mozilla-telify-sflphone.install rename to tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone.install diff --git a/tools/mozilla-telify-sflphone/debian/mozilla-telify-sflphone.links.ubuntu b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone.links similarity index 100% rename from tools/mozilla-telify-sflphone/debian/mozilla-telify-sflphone.links.ubuntu rename to tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone.links diff --git a/tools/mozilla-telify-sflphone/debian/mozilla-telify-sflphone.links.debian b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone.links.debian similarity index 100% rename from tools/mozilla-telify-sflphone/debian/mozilla-telify-sflphone.links.debian rename to tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone.links.debian diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone.links.ubuntu b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone.links.ubuntu new file mode 100644 index 0000000000..f234168dd0 --- /dev/null +++ b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone.links.ubuntu @@ -0,0 +1 @@ +usr/share/telify usr/lib/firefox-addons/extensions/{6c5f349a-ddda-49ad-bdf0-326d3fe1f938} diff --git a/tools/mozilla-telify-sflphone/debian/mozilla-telify-sflphone.substvars b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone.substvars similarity index 100% rename from tools/mozilla-telify-sflphone/debian/mozilla-telify-sflphone.substvars rename to tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone.substvars diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/DEBIAN/control b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/DEBIAN/control new file mode 100644 index 0000000000..2c8faf4345 --- /dev/null +++ b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/DEBIAN/control @@ -0,0 +1,14 @@ +Package: mozilla-telify-sflphone +Version: 0.4.7.3 +Architecture: all +Maintainer: Julien Bonjean <julien.bonjean@savoirfairelinux.com> +Installed-Size: 1296 +Depends: firefox-gnome-support, sflphone-client-gnome +Section: web +Priority: optional +Homepage: http://www.sflphone.org +Description: This package provides telify firefox plugin and handler for SFLphone. + Telify recognizes phone numbers on web pages and converts them to clickable links. + Additionally, any text can be selected and handled as a phone number (including + vanity number conversion) by selecting the corresponding context menu item. + http://www.codepad.de/en/software/firefox-add-ons/telify.html diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/DEBIAN/md5sums b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/DEBIAN/md5sums new file mode 100644 index 0000000000..20effcb346 --- /dev/null +++ b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/DEBIAN/md5sums @@ -0,0 +1,282 @@ +65ce74599376d092487f618de1e986fb usr/bin/sflphone-handler +1dfa9e4bdb5667ed2452cb1842598638 usr/share/telify/chrome/content/jshashtable.js +09146002421216f18e238dc9914df02a usr/share/telify/chrome/content/icon32.png +3efa199f5dc17af1806daf44c9c389be usr/share/telify/chrome/content/icon96.png +5897f6aab0803b91883a6235223c4c36 usr/share/telify/chrome/content/config.js +add45890afad2c0a4e7ae2ae7602662a usr/share/telify/chrome/content/warn32.png +d070239a3728cafad19bb8aef31739aa usr/share/telify/chrome/content/messagebox.js +5624cf500dd7c023075672d3fad866d6 usr/share/telify/chrome/content/config.xul +f6ea223fbe6e7f85e00e2164546b9bd4 usr/share/telify/chrome/content/messagebox.xul +e802bc3ff17f1ea2e68ccdb263dea3fd usr/share/telify/chrome/content/ask32.png +f4de0420b7dd240b29d42e2af3bbf50c usr/share/telify/chrome/content/util.js +1bb2b945ab6f911fd32f9b046bf735b0 usr/share/telify/chrome/content/flag/52.png +90576da5f20865375ea4719f1310000d usr/share/telify/chrome/content/flag/212.png +affd04a67faccde8d9539fb3b5ca0589 usr/share/telify/chrome/content/flag/685.png +f493cea29615a02b9a917bee58ac3af3 usr/share/telify/chrome/content/flag/228.png +d27ffb0f000c36985df32eb1b34de31d usr/share/telify/chrome/content/flag/250.png +6dd70c9752d8b50ea152f5c3f228312c usr/share/telify/chrome/content/flag/43.png +20edbfd5b61a01f2e619f22333635118 usr/share/telify/chrome/content/flag/61.png +573caf2b526203b5e27614e6cc9a655a usr/share/telify/chrome/content/flag/261.png +276bf37cf19ed4fdc5e9e92796b4878d usr/share/telify/chrome/content/flag/597.png +31b9f8c69f07fdfe837ea0bd470ce9bd usr/share/telify/chrome/content/flag/1809.png +1330db2111f10ec94e67aed37af92109 usr/share/telify/chrome/content/flag/31.png +22cfbf44cf2bb7559e07e3209c285c42 usr/share/telify/chrome/content/flag/7-kazakhstan.png +31675a29209b26b05bf2aed571b024c3 usr/share/telify/chrome/content/flag/39-vatican.png +4a7b9e35f3941cef8f31b7631337b513 usr/share/telify/chrome/content/flag/678.png +63bfbc37a0bba342ba7d409cba9df880 usr/share/telify/chrome/content/flag/594.png +f58e02ceba6a9d56b0fdace52f809575 usr/share/telify/chrome/content/flag/56.png +b684077e750479668a6b5471422aa009 usr/share/telify/chrome/content/flag/682.png +552223b24a21cfcae7a9dd24ca010ef4 usr/share/telify/chrome/content/flag/244.png +193393c898442920b2f2e6becf939b57 usr/share/telify/chrome/content/flag/673.png +fd3a4f77c790e3e0ca7c7a1936924d7c usr/share/telify/chrome/content/flag/996.png +bffee9389293cc9516811ca88039bbff usr/share/telify/chrome/content/flag/65.png +9323fd337065d66b3407bf19fdee3412 usr/share/telify/chrome/content/flag/1649.png +0966afaa93eee08c08672c762424654d usr/share/telify/chrome/content/flag/44.png +35c688e6e0fbaeede3d71a0d9970c8a9 usr/share/telify/chrome/content/flag/374.png +572dc608ba807fcfbe4f23083a529da3 usr/share/telify/chrome/content/flag/853.png +56a19c85de7d530c9b24b906d4ef1d78 usr/share/telify/chrome/content/flag/1284.png +12d703c057fe3a9d22b960df954259a1 usr/share/telify/chrome/content/flag/55.png +156d00760316249b723e65c4535f6a3a usr/share/telify/chrome/content/flag/502.png +63bfbc37a0bba342ba7d409cba9df880 usr/share/telify/chrome/content/flag/262.png +b469e92e74363294932063045ba5773b usr/share/telify/chrome/content/flag/852.png +b549b2c866e19bbaf05a71b142c8e277 usr/share/telify/chrome/content/flag/222.png +f0c6ad269ca79fd0a636c0f7e55ecd8f usr/share/telify/chrome/content/flag/63.png +9917632bbfeb986871fc2f0a9a0ef323 usr/share/telify/chrome/content/flag/54.png +cc0ef42fdf091b3cc7d79689f5d90d48 usr/share/telify/chrome/content/flag/873.png +0edfcb7932381257b781a33fdac17cba usr/share/telify/chrome/content/flag/37497.png +e57cb5d9b42417834781028e79c6ad80 usr/share/telify/chrome/content/flag/229.png +f38d97d28c2db81694c8d23bea8a544e usr/share/telify/chrome/content/flag/299.png +b9d35240a94c486c39ae66784cd4bb7c usr/share/telify/chrome/content/flag/1664.png +31b9f8c69f07fdfe837ea0bd470ce9bd usr/share/telify/chrome/content/flag/1829.png +cc0ef42fdf091b3cc7d79689f5d90d48 usr/share/telify/chrome/content/flag/874.png +63bfbc37a0bba342ba7d409cba9df880 usr/share/telify/chrome/content/flag/596.png +cf6d436e35c00502149621c9d2419633 usr/share/telify/chrome/content/flag/1473.png +cc0ef42fdf091b3cc7d79689f5d90d48 usr/share/telify/chrome/content/flag/871.png +59feda46a504c73c5de936e6cc463b91 usr/share/telify/chrome/content/flag/598.png +65637850eca375f5343b51772b2789e3 usr/share/telify/chrome/content/flag/34.png +63bfbc37a0bba342ba7d409cba9df880 usr/share/telify/chrome/content/flag/508.png +07be2870ef618a4d3b69d24b3b0523bf usr/share/telify/chrome/content/flag/92.png +bd75acef3588961ef3e1d8c1beea2ba1 usr/share/telify/chrome/content/flag/242.png +9416a0c7d9c580619faec6a6bff30cc9 usr/share/telify/chrome/content/flag/297.png +465c38736ae791e89917a99467567e44 usr/share/telify/chrome/content/flag/258.png +06a21021e5dce13dce475beb26697c69 usr/share/telify/chrome/content/flag/992.png +7efb0536329c0ec081b08f288a175d4c usr/share/telify/chrome/content/flag/94.png +ec7c4ad00ede6aebe170377b8b830b3e usr/share/telify/chrome/content/flag/680.png +4e6a1e93bcf98acb4a828bedb3b39bc5 usr/share/telify/chrome/content/flag/501.png +dae53d80a2dde3c0fca76ed93422eeb2 usr/share/telify/chrome/content/flag/223.png +8b5a3f217aa96af3a0e9c799db2d930b usr/share/telify/chrome/content/flag/599.png +88d8c448f7e85ceda0eff805b081fcff usr/share/telify/chrome/content/flag/420.png +0fc6b4583f851e874e64a68f2f365e96 usr/share/telify/chrome/content/flag/976.png +125aac84de4da114aef44a9a4282ac06 usr/share/telify/chrome/content/flag/994.png +36da0872dac993c2750a5a371903bb6e usr/share/telify/chrome/content/flag/373.png +4bef1704acdc80636c68dffee9c01b51 usr/share/telify/chrome/content/flag/265.png +ace80316bb7bfd2058e4bd8e281f93e3 usr/share/telify/chrome/content/flag/57.png +a879b03b7cca0d49600c24c7c2f335cc usr/share/telify/chrome/content/flag/254.png +f9733cf00793532e858c718c60488bd7 usr/share/telify/chrome/content/flag/49.png +6350bfec1685c569dcc6d52b5b5096f3 usr/share/telify/chrome/content/flag/30.png +abddcd041761748a1462bcf509f167ce usr/share/telify/chrome/content/flag/961.png +df3279055e7e07f46705c151ffa4b188 usr/share/telify/chrome/content/flag/995.png +9cf9ac77cf4c6d5504eb5cce3d9aeb4d usr/share/telify/chrome/content/flag/504.png +efc6524bcb70ef812b2725032e0b8cb9 usr/share/telify/chrome/content/flag/1787.png +42c9adf5c32e8574701c582dd970563c usr/share/telify/chrome/content/flag/220.png +06a1651c9d58610744de5edb29a60e58 usr/share/telify/chrome/content/flag/993.png +8f7b466990cbc4b0e6e31269cbc60ea8 usr/share/telify/chrome/content/flag/37744.png +d3f29ad4504d6360d19ef706f494d7da usr/share/telify/chrome/content/flag/298.png +aa57863f7e2c49d33d3a2a0a9fe6da64 usr/share/telify/chrome/content/flag/41.png +485ad10e06bd25ef65270af20dfc996b usr/share/telify/chrome/content/flag/84.png +929bd3c144dbcfc51d7d6836b6363cbe usr/share/telify/chrome/content/flag/232.png +3f9c4b8b9f8ee08e4e9f5135cb034657 usr/share/telify/chrome/content/flag/235.png +0f92d3e3a3e1e547af05567c2510ddf0 usr/share/telify/chrome/content/flag/593.png +77857f1400221cb796eebbb029a52617 usr/share/telify/chrome/content/flag/500.png +4304ebdaa34ab1885b1ab8e5a3e45303 usr/share/telify/chrome/content/flag/239.png +98bbf43c599a38d8eb6b5421fd7bacd0 usr/share/telify/chrome/content/flag/240.png +b6c5a45e5ce80d2b527d893b279caad8 usr/share/telify/chrome/content/flag/36.png +b5f4336bf7b5a30061b9eb3be8bdb71e usr/share/telify/chrome/content/flag/291.png +94c34b050a9d0860b91a96bddcbd2650 usr/share/telify/chrome/content/flag/850.png +63bfbc37a0bba342ba7d409cba9df880 usr/share/telify/chrome/content/flag/33.png +63bfbc37a0bba342ba7d409cba9df880 usr/share/telify/chrome/content/flag/590.png +0966afaa93eee08c08672c762424654d usr/share/telify/chrome/content/flag/247.png +74deccf3b9279029b092b0359088f955 usr/share/telify/chrome/content/flag/1.png +5c4b81590c1291ed24b6f2e0fb1db51b usr/share/telify/chrome/content/flag/1868.png +09aa245b094c7ebd785eb2d6651560b8 usr/share/telify/chrome/content/flag/1340.png +9fd5fd3d5ec1c59a5de2b2cd4a83d3ba usr/share/telify/chrome/content/flag/505.png +f6481f07b520e5494ccf4fd7f2130510 usr/share/telify/chrome/content/flag/40.png +2abd1722a95d7af6e316f906cde54e6d usr/share/telify/chrome/content/flag/507.png +66266f09754869056db176a7a99c999c usr/share/telify/chrome/content/flag/855.png +08d8941a6a94447cf6838bde5a2ec48c usr/share/telify/chrome/content/flag/45.png +a938868b993bbdc98caf18e1b022f5f8 usr/share/telify/chrome/content/flag/689.png +92cacebf8596b267f69b7b99bb2f5588 usr/share/telify/chrome/content/flag/974.png +5672868ef79592374bf990f652607a6e usr/share/telify/chrome/content/flag/387.png +8de229a968922437036b9731a376d12e usr/share/telify/chrome/content/flag/963.png +1bad50fdbd079efb01c9996dd3db9f39 usr/share/telify/chrome/content/flag/234.png +258acc3c84ef093985f20f0c4cc3e8bb usr/share/telify/chrome/content/flag/886.png +2a555ebb43f963161fa1046442d5bee8 usr/share/telify/chrome/content/flag/385.png +5b811ac6ef5af15e3a4fd75679814f01 usr/share/telify/chrome/content/flag/253.png +2748dfe6daeebefc78dc9e7e5261e2a7 usr/share/telify/chrome/content/flag/378.png +f4b5c9d9e2025a5cfa95652852aa0707 usr/share/telify/chrome/content/flag/688.png +f2ba52be3d5071a0fbf5ed58df529f14 usr/share/telify/chrome/content/flag/3883.png +d39cf563c53fd10e3f4e4d95f98b0035 usr/share/telify/chrome/content/flag/375.png +3bd363fac16b74cb23adbd7704ade65d usr/share/telify/chrome/content/flag/47.png +f7f4151604e5860cf696e7409ef173b2 usr/share/telify/chrome/content/flag/880.png +c964a9a106e3c9b76d3559c2cfcba90d usr/share/telify/chrome/content/flag/968.png +addd908670d7012818061979c7bace02 usr/share/telify/chrome/content/flag/221.png +90226addfca8c9861a770f15e94b78d2 usr/share/telify/chrome/content/flag/354.png +31675a29209b26b05bf2aed571b024c3 usr/share/telify/chrome/content/flag/379.png +63bfbc37a0bba342ba7d409cba9df880 usr/share/telify/chrome/content/flag/681.png +b5208534081b162fe790e854408b6dac usr/share/telify/chrome/content/flag/51.png +8f7b466990cbc4b0e6e31269cbc60ea8 usr/share/telify/chrome/content/flag/38649.png +168dc53ba860577f659345846d59cb45 usr/share/telify/chrome/content/flag/965.png +6e76764835f5db75d13b2498ba7e3efb usr/share/telify/chrome/content/flag/260.png +8678e140cb0965400a842595e8034e6e usr/share/telify/chrome/content/flag/670.png +07fcf184129db2d17310bed269bd032f usr/share/telify/chrome/content/flag/677.png +e8d950cb0f9b047987cfed72903a61b2 usr/share/telify/chrome/content/flag/82.png +2530d73e10540607d8c453f10030ccd3 usr/share/telify/chrome/content/flag/243.png +844f10c7a922da19a99fe6a9b7eb27dd usr/share/telify/chrome/content/flag/371.png +0fa3206cde59782c9998153683bff8d3 usr/share/telify/chrome/content/flag/238.png +26f26cccb7b432d4dde1a1eb394c0ceb usr/share/telify/chrome/content/flag/231.png +8bdeaa2a3bc46f876e7dff744fc47659 usr/share/telify/chrome/content/flag/90.png +0da3d2cf7c99fb9dfe238bfcb4ab11cf usr/share/telify/chrome/content/flag/251.png +4f9e0d2c82662f5b9b56acf472610c70 usr/share/telify/chrome/content/flag/998.png +46019464edfa1be7666087620fe7142b usr/share/telify/chrome/content/flag/382.png +eb0d4e938edac3bee751b17ca72849df usr/share/telify/chrome/content/flag/95.png +e9cdf4484d0646e09464a28350be4df2 usr/share/telify/chrome/content/flag/263.png +aa046c5e44c961089dbc6f45d8873122 usr/share/telify/chrome/content/flag/592.png +45e940da2982616d3cc99822128e6cae usr/share/telify/chrome/content/flag/267.png +e4d9d483a531c7a16436b09a8a4cf104 usr/share/telify/chrome/content/flag/20.png +7e6b762105a6b1679c1abd0280da2f73 usr/share/telify/chrome/content/flag/227.png +9fd0b3d477d8651a16241d130ee353ad usr/share/telify/chrome/content/flag/1758.png +d1e4b9739c6eff4f6beadc8eb4ab8650 usr/share/telify/chrome/content/flag/595.png +fb0490472ceed9b31b19dbe0a1d8f872 usr/share/telify/chrome/content/flag/236.png +390bf4371cc50c51c50d1d15d7e63e3f usr/share/telify/chrome/content/flag/7.png +bc4f5cc6c03cdd13217d6d32e6425989 usr/share/telify/chrome/content/flag/1246.png +757c67bf50c916597a5088829140286b usr/share/telify/chrome/content/flag/1767.png +f301e493e1c0271865c115a25f3f8680 usr/share/telify/chrome/content/flag/359.png +278b835433b00b47589b3d7cf28d52a7 usr/share/telify/chrome/content/flag/377.png +8f7b466990cbc4b0e6e31269cbc60ea8 usr/share/telify/chrome/content/flag/381-kosovo.png +50185d74128455cb2c16c0903a03ca0d usr/share/telify/chrome/content/flag/1684.png +ce84e48ba306877dd6112a8470bfdfb0 usr/share/telify/chrome/content/flag/248.png +0397fc499dce824e378c758682774440 usr/share/telify/chrome/content/flag/246.png +9bd332abc26865f07ebae01383b8494d usr/share/telify/chrome/content/flag/224.png +464067a945638f51c7d3ee7ed4dda81d usr/share/telify/chrome/content/flag/370.png +2c030899839f02c2954cda800e4c41db usr/share/telify/chrome/content/flag/266.png +f405c1ae5ff791f8f6c8ff31bfd98e91 usr/share/telify/chrome/content/flag/216.png +8b5f8aff9a34065f16db660509b6476b usr/share/telify/chrome/content/flag/1345.png +a3d9074daaf4b13a1c475469acb1ef40 usr/share/telify/chrome/content/flag/213.png +9b475b0988eff85c2e6758f3629d3e3a usr/share/telify/chrome/content/flag/1876.png +a4d03f19872b3a11d3c8c9f55477caac usr/share/telify/chrome/content/flag/355.png +ef1a2c9fc984d6e21c2543bac5d56b89 usr/share/telify/chrome/content/flag/53.png +7d71f58c22b314c64f304070cd4dcb4f usr/share/telify/chrome/content/flag/226.png +87d57818a5ad32dad3c512ebc93a80d6 usr/share/telify/chrome/content/flag/91.png +33f848b2031ff858cd7db75404640a6b usr/share/telify/chrome/content/flag/591.png +0dc574a3de142aecc3e996206371294a usr/share/telify/chrome/content/flag/225.png +c72a9c63d4d41272ea672a1c402ee189 usr/share/telify/chrome/content/flag/973.png +efe435a51af6d9c7e97c7c8a050d6efb usr/share/telify/chrome/content/flag/1264.png +0c3c91808881101dff1635101e02aa2b usr/share/telify/chrome/content/flag/269.png +4a6d3eee131acf89897c0b24689b82c3 usr/share/telify/chrome/content/flag/503.png +019ff6b8cd322dfa5663c511d07b0d5d usr/share/telify/chrome/content/flag/1671.png +4220598be43707f399cf5b62aec26a4e usr/share/telify/chrome/content/flag/27.png +cc0ef42fdf091b3cc7d79689f5d90d48 usr/share/telify/chrome/content/flag/872.png +94a4f42d77b298471b01e31068a4993c usr/share/telify/chrome/content/flag/421.png +6488bf155022194a4b9b419e5b411fdf usr/share/telify/chrome/content/flag/90392.png +0edfcb7932381257b781a33fdac17cba usr/share/telify/chrome/content/flag/37447.png +abac2bdc6ee86fed6f2a83b0bbc5af1b usr/share/telify/chrome/content/flag/218.png +9c120774fad7fae663c0c41e101410e9 usr/share/telify/chrome/content/flag/674.png +fb53ec0d0245f2e4ebb8361d8ff85f8f usr/share/telify/chrome/content/flag/690.png +5dcba80a818cf6b07c5b7ccd0297a65f usr/share/telify/chrome/content/flag/252.png +48967bc438e5a7bb69cca0f7732396eb usr/share/telify/chrome/content/flag/98.png +03453359634eecec412c8e467f67af76 usr/share/telify/chrome/content/flag/290.png +1cad1e69d782f42a29a1fcc532daf243 usr/share/telify/chrome/content/flag/48.png +4628248388e53df337b39730f8aefbfd usr/share/telify/chrome/content/flag/256.png +9a758bb3b0392ee2c6d814dbaeea01b4 usr/share/telify/chrome/content/flag/376.png +53ef3d82ba706db1e5dfdd5b0bf14c81 usr/share/telify/chrome/content/flag/972.png +acdae2b0851d5fec6c4b16ab884bbd9d usr/share/telify/chrome/content/flag/86.png +35a5b51d0e37656c93cca43686c7ce62 usr/share/telify/chrome/content/flag/233.png +c24a1dc23535660e8f013d7f4b15eba0 usr/share/telify/chrome/content/flag/60.png +9b0517891ee2538397a7140697bde925 usr/share/telify/chrome/content/flag/241.png +1f40c7e3f9513ea1a31d5b1efd2adae6 usr/share/telify/chrome/content/flag/249.png +6a190cf5b40502186d7a335a8e10dcfd usr/share/telify/chrome/content/flag/64.png +714928715307e35c9d96f82baa9e5658 usr/share/telify/chrome/content/flag/856.png +de204480ea7585fa2ab331b7c4b856af usr/share/telify/chrome/content/flag/257.png +fd92a03c9c1fbf78fea7e50b1e4085f9 usr/share/telify/chrome/content/flag/353.png +d9a1931187b34b91d8a0becbfcc8d92d usr/share/telify/chrome/content/flag/672.png +8f1c20cc56e3b0388c37fa9f300cdc80 usr/share/telify/chrome/content/flag/356.png +610a156d74efa1227e732319c0bddcdc usr/share/telify/chrome/content/flag/692.png +b44c818df281cad4bf13f54dcf67b151 usr/share/telify/chrome/content/flag/66.png +0399c70c9efba4caefd028ad5028bc25 usr/share/telify/chrome/content/flag/960.png +72f33ab0fff112755d90d65fc71042fd usr/share/telify/chrome/content/flag/423.png +a99812c389c8a521a9b7495e7d7318d7 usr/share/telify/chrome/content/flag/230.png +40796e5560f2fa63f523de45bfd20f07 usr/share/telify/chrome/content/flag/964.png +c5ba8166e7165bef7247b674faafa83a usr/share/telify/chrome/content/flag/32.png +44d65230c16730cc9b74ab0cf0f3a31d usr/share/telify/chrome/content/flag/962.png +328daac04aee3d4a868673667b29f561 usr/share/telify/chrome/content/flag/1268.png +a9123178222f6940496eeed41e4f7932 usr/share/telify/chrome/content/flag/245.png +7dd4f0a5d9fc3201cb03f90c5b9dd98d usr/share/telify/chrome/content/flag/509.png +5ac9bbaab7ef6edaf285a92655ad3100 usr/share/telify/chrome/content/flag/372.png +0215b1c78f1983ff93d4a71d994429b3 usr/share/telify/chrome/content/flag/967.png +bc2b7b1fea6191cadfe5563c4ec4f482 usr/share/telify/chrome/content/flag/1670.png +ad5a8bf6203aaa390432c164b7f98097 usr/share/telify/chrome/content/flag/1784.png +6cda8970ef0d1ac14ebda52fe7be9d50 usr/share/telify/chrome/content/flag/352.png +cf9a0a8e33c14011ca720d5c4308d145 usr/share/telify/chrome/content/flag/386.png +722cb977a10c1a2a8412fc5ee87d4fc4 usr/share/telify/chrome/content/flag/675.png +0641850973fa5605d26add1e6c859da4 usr/share/telify/chrome/content/flag/676.png +2e017a5dd612390255848dca5afb330d usr/share/telify/chrome/content/flag/255.png +01d51ff805bef4ce44d75fbbd93b28d9 usr/share/telify/chrome/content/flag/966.png +e81fd902853e1d3abfc59a8aa1ae6832 usr/share/telify/chrome/content/flag/1242.png +a71af7b8b48922f614b499239c8a51b8 usr/share/telify/chrome/content/flag/977.png +bea37d045f7026995838fcfc8b9b45ca usr/share/telify/chrome/content/flag/268.png +b24fbefbb7e51f8c68c3df2c74891878 usr/share/telify/chrome/content/flag/62.png +0c50a0a1bf667ae3271ffff33e2b9372 usr/share/telify/chrome/content/flag/380.png +8c0085810a9528c2bf6e3f5b6e43e281 usr/share/telify/chrome/content/flag/672-norfolk_island.png +b4e46a8d8576a1a717f8e1f2c5de85a9 usr/share/telify/chrome/content/flag/350.png +d45dfb7a968e89b66db04ddf446ffe09 usr/share/telify/chrome/content/flag/1869.png +8f797a746ef2192e4cfa5fb7fb1fb272 usr/share/telify/chrome/content/flag/58.png +949942100b8504bc91da99d9c237633b usr/share/telify/chrome/content/flag/683.png +cd560dd865ccea58212db45956248115 usr/share/telify/chrome/content/flag/975.png +3275d2a698a6fc4497c3628d681b5d12 usr/share/telify/chrome/content/flag/358.png +61c1ecffc039239ee6411394921aa241 usr/share/telify/chrome/content/flag/506.png +4a89ee4cf5fe72c332e90527e12c07cf usr/share/telify/chrome/content/flag/93.png +458b2d7875fc143704f636e7454e598d usr/share/telify/chrome/content/flag/971.png +111a19121adf21f6010aa43992cd5675 usr/share/telify/chrome/content/flag/389.png +63bfbc37a0bba342ba7d409cba9df880 usr/share/telify/chrome/content/flag/687.png +2d2714d2e0de8465ac12d65a5e52d82d usr/share/telify/chrome/content/flag/381.png +af283fcaf3f288709548bae1c4750031 usr/share/telify/chrome/content/flag/264.png +91c372b5e4167ab59eb858e442a8f91f usr/share/telify/chrome/content/flag/679.png +449f5fa5b87314615a7ea3aa501a78fd usr/share/telify/chrome/content/flag/691.png +a63f50a8081b441b48989267a6fb329c usr/share/telify/chrome/content/flag/39.png +bf17a973466b976ddefdcdf52503e6fa usr/share/telify/chrome/content/flag/46.png +efc6524bcb70ef812b2725032e0b8cb9 usr/share/telify/chrome/content/flag/1939.png +4b30c9135a576a61668ce14129c60ac7 usr/share/telify/chrome/content/flag/81.png +ec10eee9610f5ac6bc74311ae481fad7 usr/share/telify/chrome/content/flag/1441.png +300e025eca7079783221fcd86ea1942a usr/share/telify/chrome/content/flag/237.png +c9088d972106719cce7c9a226f2b1667 usr/share/telify/chrome/content/flag/1-canada.png +a676e93449fc74703d5f12636593b699 usr/share/telify/chrome/content/flag/686.png +63faf9dbefe527ed55e0d9170fb5fba2 usr/share/telify/chrome/content/flag/357.png +219a52448b0df4e66905086301b03b10 usr/share/telify/chrome/content/flag/351.png +cc0ef42fdf091b3cc7d79689f5d90d48 usr/share/telify/chrome/content/flag/870.png +dd8c6aa4b172928bc49969b80a0926a3 usr/share/telify/chrome/content/editNumber.js +8b49826c5b4ebfbb95c513be63a79b41 usr/share/telify/chrome/content/pref.js +cacb7d13f9781f1d71b6338f62df55e0 usr/share/telify/chrome/content/edit22x15.png +4d0fec589b212e8fd004abe97cae9884 usr/share/telify/chrome/content/telify.js +380345f5e1888667b412a9cc6d622ffb usr/share/telify/chrome/content/dialog.css +0c48e0a5c919244e39da008905bf3704 usr/share/telify/chrome/content/info32.png +b1b6854306f4547a0f17fa88e5bbfc2a usr/share/telify/chrome/content/browser.xul +b59d8264612fa19986333ce3f20c978a usr/share/telify/chrome/content/editNumber.xul +259e7299cf9c56c466e62b6d2e7a09be usr/share/telify/chrome/content/icon18_active.png +df8e1ad83cb3ee6cfb8073be99c9334d usr/share/telify/chrome/content/country_data.js +d11c921428d126525024f0269c289366 usr/share/telify/chrome/content/icon18_inactive.png +961bc17c9aab761902b5e755424c50f0 usr/share/telify/chrome/content/icon_menu.png +c192d0d65c0ee5093a9f520cbb203cde usr/share/telify/chrome/content/error32.png +081a39ee35f6fd034d47a52d18161e38 usr/share/telify/chrome/locale/en-US/custom_preset.js +f93c88f9730ab952c1607f01284c953b usr/share/telify/chrome/locale/en-US/lang.dtd +b05b084a52248112936f234f70afa445 usr/share/telify/chrome/locale/en-US/country_locale.js +d0568dafab9a1206113235173cc58c85 usr/share/telify/chrome/locale/en-US/lang.properties +878ffe167a481f93b26302871868618a usr/share/telify/chrome/locale/en-US/locale.js +24604d65d67874073ad9b3df7060e221 usr/share/telify/chrome/locale/de-DE/custom_preset.js +8ea28f7144c3da1b13824c751ed045d7 usr/share/telify/chrome/locale/de-DE/lang.dtd +ded79ce41ea89b117534c1af4e95d5b5 usr/share/telify/chrome/locale/de-DE/country_locale.js +f8c99d4e0ea6514f2d4f6ad71db85ae2 usr/share/telify/chrome/locale/de-DE/lang.properties +816dac9e3dc748bc9f7e6a46dd57e029 usr/share/telify/chrome/locale/de-DE/locale.js +4200a5c7a588e6aadbd6d56dc0f72ee7 usr/share/telify/defaults/preferences/preferences.js +8bed4b9918d4f36b8c3db1f0322e31bf usr/share/telify/chrome.manifest +7a164502d511ecbe38c3ad860e833579 usr/share/telify/install.rdf +a5a82bcdce14f9439cad46169b5bc354 usr/share/doc/mozilla-telify-sflphone/changelog.gz diff --git a/tools/mozilla-telify-sflphone/debian/postinst b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/DEBIAN/postinst similarity index 100% rename from tools/mozilla-telify-sflphone/debian/postinst rename to tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/DEBIAN/postinst diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/bin/sflphone-handler b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/bin/sflphone-handler new file mode 100755 index 0000000000..727ef0f93c --- /dev/null +++ b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/bin/sflphone-handler @@ -0,0 +1,52 @@ +#!/bin/sh +# +# This script can be used as a callto: (or other) protocol handler in +# Mozilla Firefox-based browser. +# In Firefox use Preferences > Applications and set the callto handler +# to this script. + +# The sflphone daemon config file +RESFILE=~/.config/sflphone/sflphonedrc + +# Parse sflphonedrc and get default account id string +if [ -f "$RESFILE" ]; then + + # Use first ID + ACCOUNTID=`grep Accounts.order $RESFILE | sed -e 's/Accounts.order=//' -e 's/\/.*//'` + + # Accounts.order is not set + if [ -z $ACCOUNTID ]; then + + # Use first account declared in sflphone config + ACCOUNTID="`grep -m 1 Account: $RESFILE | sed -e 's/\[//' -e 's/\]//'`" + fi + +else + echo Fatal: Cant find sflphonedrc config file. + exit 1 +fi + +# Check 1st argument (phone number) +if [ -z $1 ]; then + echo "Error: argument 1 (phone number) not provided." + exit 1 +fi + +# Cleanup destination, keeping numbers only +TO="`echo $1 | sed -e 's/[^0123456789]//g'`" + +# Generate call id. +CALLID=${RANDOM}$$ + +dbus-send \ + --type="method_call" \ + --dest="org.sflphone.SFLphone" \ + "/org/sflphone/SFLphone/CallManager" \ + "org.sflphone.SFLphone.CallManager.placeCall" \ + string:"$ACCOUNTID" \ + string:"$CALLID" \ + string:"$TO" + +exit 0 + +# EOF diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/lib/firefox-addons/extensions/{6c5f349a-ddda-49ad-bdf0-326d3fe1f938} b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/lib/firefox-addons/extensions/{6c5f349a-ddda-49ad-bdf0-326d3fe1f938} new file mode 120000 index 0000000000..7d660382bd --- /dev/null +++ b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/lib/firefox-addons/extensions/{6c5f349a-ddda-49ad-bdf0-326d3fe1f938} @@ -0,0 +1 @@ +../../../share/telify \ No newline at end of file diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/doc/mozilla-telify-sflphone/changelog.gz b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/doc/mozilla-telify-sflphone/changelog.gz new file mode 100644 index 0000000000000000000000000000000000000000..186ab5d35fe47e1e0590fbfa544a38e8604cbdfd GIT binary patch literal 175 zcmb2|=3oE;Cg#{aYyKt!5x4TXqq4PIHMtBQC?7j`@Zb*V_DeAvBJz9}YW%B`zB^~% z9Q|~Q-rDSBmDd+u6eZ+l%9(p}C?6Ew_oUmfBFj2bBBrribdr?WF}uYa518EZO@!X) zUe(}S_i)aE$W^=72uyLlnd$AA`X)a1di=Aa{pD-ltSwu5MXzK+ePQZs-2(?-N}gez elOykzB9LAw^*oa)Sdd$=mZ577|J{8I3=9BrrAbo& literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome.manifest b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome.manifest new file mode 100644 index 0000000000..bc9507c881 --- /dev/null +++ b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome.manifest @@ -0,0 +1,5 @@ +content telify chrome/content/ +locale telify en-US chrome/locale/en-US/ +locale telify de-DE chrome/locale/de-DE/ + +overlay chrome://browser/content/browser.xul chrome://telify/content/browser.xul diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/ask32.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/ask32.png new file mode 100644 index 0000000000000000000000000000000000000000..d56ba2c2449cb156979af2896e82be831f258d93 GIT binary patch literal 2671 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 literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/browser.xul b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/browser.xul new file mode 100644 index 0000000000..68f72fbff7 --- /dev/null +++ b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/browser.xul @@ -0,0 +1,87 @@ +<?xml version="1.0"?> +<?xml-stylesheet href="chrome://global/skin/global.css" type="text/css"?> +<?xml-stylesheet href="chrome://telify/content/dialog.css" type="text/css"?> + +<!DOCTYPE overlay SYSTEM "chrome://telify/locale/lang.dtd"> +<overlay xmlns='http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul'> + + <stringbundleset id="stringbundleset"> + <stringbundle id="idTelifyStringBundle" src="chrome://telify/locale/lang.properties"/> + </stringbundleset> + + <script type='application/x-javascript' src='chrome://telify/content/jshashtable.js'></script> + <script type='application/x-javascript' src='chrome://telify/content/util.js'></script> + <script type='application/x-javascript' src='chrome://telify/content/pref.js'></script> + <script type='application/x-javascript' src='chrome://telify/locale/country_locale.js'></script> + <script type='application/x-javascript' src='chrome://telify/content/country_data.js'></script> + <script type='application/x-javascript' src='chrome://telify/locale/locale.js'></script> + <script type='application/x-javascript' src='chrome://telify/content/telify.js'></script> + + <statusbar id="status-bar"> + <statusbarpanel id="idTelify_status" collapsed="true"> + <popup id="idTelify_status_popup" onpopupshowing="objTelify.modifyPopup(event)"> + <menuitem id="idTelify_status_activity" oncommand="objTelify.toggleActive()" /> + <menuitem id="idTelify_status_blacklist" oncommand="objTelify.toggleBlacklist()" /> + </popup> + <hbox id="idTelify_statusicon" context="idTelify_status_popup" class="statusbarpanel-menu-iconic" src="chrome://telify/content/icon18_active.png" /> + </statusbarpanel> + </statusbar> + + <menupopup id="contentAreaContextMenu"> + <menu id="idTelify_menu_context" label="&menu.selection;" collapsed="true" insertbefore="context-sep-stop" + class="menu-iconic" image="chrome://telify/content/icon_menu.png"> + <menupopup id="idTelify_popup_context"> + <menuitem id="idTelify_context" class="menuitem-iconic"/> + <menuseparator id="idTelify_sep_context"/> + <menuitem id="idTelify_tld_context" class="menuitem-iconic"/> + <menuitem id="idTelify_context0" class="menuitem-iconic"/> + <menuitem id="idTelify_context1" class="menuitem-iconic"/> + <menuitem id="idTelify_context2" class="menuitem-iconic"/> + <menuitem id="idTelify_context3" class="menuitem-iconic"/> + <menuitem id="idTelify_context4" class="menuitem-iconic"/> + <menuitem id="idTelify_context5" class="menuitem-iconic"/> + <menuitem id="idTelify_context6" class="menuitem-iconic"/> + <menuitem id="idTelify_context7" class="menuitem-iconic"/> + <menuitem id="idTelify_context8" class="menuitem-iconic"/> + <menuitem id="idTelify_context9" class="menuitem-iconic"/> + <menuseparator /> + <menuitem id="idTelify_edit_context" class="menuitem-iconic" label="&menu.edit_number;" image="chrome://telify/content/edit22x15.png"/> + </menupopup> + </menu> + </menupopup> + + <popupset> + <menupopup id="idTelify_popup_dial"> + <menuitem id="idTelify_dial" class="menuitem-iconic"/> + <menuseparator id="idTelify_sep_dial"/> + <menuitem id="idTelify_tld_dial" class="menuitem-iconic"/> + <menuitem id="idTelify_dial0" class="menuitem-iconic"/> + <menuitem id="idTelify_dial1" class="menuitem-iconic"/> + <menuitem id="idTelify_dial2" class="menuitem-iconic"/> + <menuitem id="idTelify_dial3" class="menuitem-iconic"/> + <menuitem id="idTelify_dial4" class="menuitem-iconic"/> + <menuitem id="idTelify_dial5" class="menuitem-iconic"/> + <menuitem id="idTelify_dial6" class="menuitem-iconic"/> + <menuitem id="idTelify_dial7" class="menuitem-iconic"/> + <menuitem id="idTelify_dial8" class="menuitem-iconic"/> + <menuitem id="idTelify_dial9" class="menuitem-iconic"/> + <menuseparator /> + <menuitem id="idTelify_edit_dial" class="menuitem-iconic" label="&menu.edit_number;" image="chrome://telify/content/edit22x15.png"/> + </menupopup> + </popupset> + + <menupopup id="menu_ToolsPopup"> + <menu id="idTelify_menu" label="Telify" insertafter="devToolsSeparator"> + <menupopup onpopupshowing="objTelify.modifyPopup(event)"> + <menuitem id="idTelify_menu_activity" oncommand="objTelify.toggleActive()"/> + <menuitem id="idTelify_menu_blacklist" oncommand="objTelify.toggleBlacklist()"/> + <menuseparator /> + <menuitem id="idTelify_menu_config" label="&menu.onlinehelp;" oncommand="objTelifyLocale.openOnlineHelp()"/> + <menuseparator /> + <menuitem id="idTelify_menu_config" label="&menu.config;" oncommand="objTelifyPrefs.showConfigDialog()"/> + </menupopup> + </menu> + </menupopup> + +</overlay> + diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/config.js b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/config.js new file mode 100644 index 0000000000..25e529121a --- /dev/null +++ b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/config.js @@ -0,0 +1,196 @@ +/* +Creative Commons License: Attribution-No Derivative Works 3.0 Unported +http://creativecommons.org/licenses/by-nd/3.0/ +(c)2009 Michael Koch +*/ + +var objTelifyConfig = { + +tmplIndex: 0, +customLabelDefault: "", + +setConfigValues: function() +{ + objTelifyPrefs.telPrefs.setCharPref(objTelifyPrefs.PREF_IDD_PREFIX, document.getElementById("idTelifyPref_idd_prefix").value); + objTelifyPrefs.telPrefs.setIntPref(objTelifyPrefs.PREF_HREFTYPE, document.getElementById("idTelifyPref_hreftype").value); + objTelifyPrefs.telPrefs.setIntPref(objTelifyPrefs.PREF_HIGHLIGHT, document.getElementById("idTelifyPref_highlight").value); + objTelifyPrefs.telPrefs.setIntPref(objTelifyPrefs.PREF_NUMHISTORY, document.getElementById("idTelifyPref_num_history").value); + objTelifyPrefs.telPrefs.setBoolPref(objTelifyPrefs.PREF_STATUSICON, document.getElementById("idTelifyPref_statusicon").value == 1); + objTelifyPrefs.telPrefs.setBoolPref(objTelifyPrefs.PREF_DIAL_CC_DIRECT, document.getElementById("idTelifyPref_dialcc").value == 1); + + objTelifyPrefs.telPrefs.setCharPref(objTelifyPrefs.PREF_CUSTOM_URL, document.getElementById("idTelifyPref_url_input").value); + objTelifyPrefs.telPrefs.setIntPref(objTelifyPrefs.PREF_CUSTOM_TMPL, this.tmplIndex); + for (var i=1; i<objTelifyPrefs.NUM_CUSTOM_PARAMS+1; i++) { + objTelifyPrefs.telPrefs.setCharPref(objTelifyPrefs.PREF_CUSTOM_PARAM+i, document.getElementById("idTelifyPref_param"+i+"_value").value); + } + objTelifyPrefs.telPrefs.setIntPref(objTelifyPrefs.PREF_CUSTOM_OPENTYPE, document.getElementById("idTelifyPref_opentype").value); +}, + +onAccept: function() +{ + this.setConfigValues(); + return true; +}, + +onHelp: function() +{ + objTelifyLocale.openOnlineHelp(); + return true; +}, + +initConfig: function() +{ + objTelifyPrefs.initTelifyPrefs(); + document.getElementById("idTelifyPref_idd_prefix").value = objTelifyPrefs.idd_prefix; + document.getElementById("idTelifyPref_hreftype").value = objTelifyPrefs.hrefType; + this.hrefTypeChanged(objTelifyPrefs.hrefType); + document.getElementById("idTelifyPref_highlight").value = objTelifyPrefs.highlight; + document.getElementById("idTelifyPref_num_history").value = objTelifyPrefs.numHistory; + document.getElementById("idTelifyPref_statusicon").value = (objTelifyPrefs.fStatusIcon ? 1 : 0); + document.getElementById("idTelifyPref_dialcc").value = (objTelifyPrefs.fDialCCDirect ? 1 : 0); + + document.getElementById("idTelifyPref_url_input").value = objTelifyPrefs.custom_url; + this.tmplIndex = objTelifyPrefs.custom_tmpl; + for (var i=1; i<objTelifyPrefs.NUM_CUSTOM_PARAMS+1; i++) { + document.getElementById("idTelifyPref_param"+i+"_value").value = objTelifyPrefs.custom_param[i]; + } + document.getElementById("idTelifyPref_opentype").value = objTelifyPrefs.custom_opentype; + + this.customLabelDefault = document.getElementById("idTelifyPref_custom_caption").label + + var popup = document.getElementById("idTelifyPref_url_popup"); + for (var i=0; i<telify_custom_preset.length; i++) { + var item = document.createElement("menuitem"); + item.setAttribute("label", telify_custom_preset[i][0]); + popup.appendChild(item); + } + + this.setTemplate(this.tmplIndex, true); + + document.getElementById("idTelifyPref_version_label").value = "Telify v"+objTelifyUtil.getAddonVersion(); +}, + +getTemplateParam: function(nr) +{ + if (nr == 0) return objTelifyPrefs.telStrings.getString("phonenr_tmpl"); + var param = document.getElementById("idTelifyPref_param"+nr+"_value").value; + var label = document.getElementById("idTelifyPref_param"+nr+"_caption").value; + if (label.value == "") param = ""; + return param; +}, + +createResultDOM: function(node) +{ + if (node == null) return 0; // safety + if (node.nodeType == Node.TEXT_NODE) { + var text = node.data; + var len = text.length; + var escape = 0; + for (var i=0; i<len-1; i++) { + if (escape == 1) {escape = 0; continue;} + var c = text.charAt(i); + if (c == '\\') {escape = 1; continue} + if (c != '$') continue; + c = text.charAt(i+1); + var nr = "0123456789".indexOf(c); + if (nr < 0 || nr > objTelifyPrefs.NUM_CUSTOM_PARAMS) continue; + var prev_node = document.createTextNode(text.substr(0, i)); + var next_node = document.createTextNode(text.substr(i+2)); + var hilite_node = document.createElement("span"); + hilite_node.setAttribute("class", (nr == 0 ? "tmpl_number" : "tmpl_param")); + var param_node = document.createTextNode(this.getTemplateParam(nr)); + hilite_node.appendChild(param_node); + var parentNode = node.parentNode; + parentNode.replaceChild(next_node, node); + parentNode.insertBefore(hilite_node, next_node); + parentNode.insertBefore(prev_node, hilite_node); + break; + } + } else { + for (var i=0; i<node.childNodes.length; i++) { + this.createResultDOM(node.childNodes[i]); + } + } +}, + +urlChanged: function() +{ + var url = document.getElementById("idTelifyPref_url_input").value; + var result = document.getElementById("idTelifyPref_url_result"); + while (result.childNodes[0]) result.removeChild(result.childNodes[0]); + if (url == "") { + var item = document.createElement("span"); + var empty_url = objTelifyPrefs.telStrings.getString("empty_url") + item.appendChild(document.createTextNode(empty_url)); + item.setAttribute("class", "tmpl_empty"); + result.appendChild(item); + } else { + var item = document.createTextNode(url); + result.appendChild(item); + this.createResultDOM(result); + } +}, + +setTemplate: function(nr, init) +{ + var caption = document.getElementById("idTelifyPref_custom_caption"); + caption.label = this.customLabelDefault; + if (telify_custom_preset[nr][0].length) caption.label += " ("+telify_custom_preset[nr][0]+")"; + if (!init) document.getElementById("idTelifyPref_url_input").value = telify_custom_preset[nr][1]; + for (var j=0; j<objTelifyPrefs.NUM_CUSTOM_PARAMS; j++) { + var label = document.getElementById("idTelifyPref_param"+(j+1)+"_caption"); + var param = document.getElementById("idTelifyPref_param"+(j+1)+"_value"); + var row = document.getElementById("idTelifyPref_param"+(j+1)+"_row"); + label.value = telify_custom_preset[nr][2+j]; + if (label.value != "") label.value += ":"; + if (label.value == "") param.setAttribute("disabled", true); else param.removeAttribute("disabled"); + } + this.urlChanged(); +}, + +tmplChanged: function() +{ + var obj = document.getElementById("idTelifyPref_url_input"); + for (var i=0; i<telify_custom_preset.length; i++) { + if (obj.value == telify_custom_preset[i][0]) { + this.tmplIndex = i; + this.setTemplate(i, false); + break; + } + } +}, + +paramChanged: function(nr, value) +{ + this.urlChanged(); +}, + +enableDOMTree: function(node, enable) +{ + if (node == null) return; + if (enable) { + if (node.removeAttribute) node.removeAttribute("disabled"); + } else { + if (node.setAttribute) node.setAttribute("disabled", true); + } + for (var i=0; i<node.childNodes.length; i++) { + this.enableDOMTree(node.childNodes[i], enable); + } +}, + +hrefTypeChanged: function(nr) +{ + var group = document.getElementById("idTelifyPref_custom_group"); + if (nr == objTelifyPrefs.HREFTYPE_CUSTOM) { + group.removeAttribute("collapsed"); + window.sizeToContent(); + } else { + //alert(group.clientHeight); + group.setAttribute("collapsed", true); + //window.resizeTo(500, 500); + window.resizeBy(0, -200); + window.sizeToContent(); + } +} + +}; diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/config.xul b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/config.xul new file mode 100644 index 0000000000..967d4db722 --- /dev/null +++ b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/config.xul @@ -0,0 +1,180 @@ +<?xml version="1.0"?> +<?xml-stylesheet href="chrome://global/skin/global.css" type="text/css"?> +<?xml-stylesheet href="chrome://telify/content/dialog.css" type="text/css"?> + +<!DOCTYPE dialog SYSTEM "chrome://telify/locale/lang.dtd"> + +<dialog id="dlgTelifyConfig" + xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" + buttons="accept,cancel,help" + onload="objTelifyConfig.initConfig()" + ondialogaccept="objTelifyConfig.onAccept()" + ondialogcancel="" + ondialoghelp="objTelifyConfig.onHelp()" + title="&dialog.config.title;"> + + <stringbundleset id="stringbundleset"> + <stringbundle id="idTelifyStringBundle" src="chrome://telify/locale/lang.properties"/> + </stringbundleset> + + <script type='application/x-javascript' src='chrome://telify/content/util.js'></script> + <script type='application/x-javascript' src='chrome://telify/content/pref.js'></script> + <script type='application/x-javascript' src='chrome://telify/content/config.js'></script> + <script type='application/x-javascript' src='chrome://telify/locale/locale.js'></script> + <script type='application/x-javascript' src='chrome://telify/locale/custom_preset.js'></script> + + <hbox> + + <groupbox style="padding-bottom:8px;"> + <caption label="&dialog.config.general;"/> + <grid> + <columns> + <column flex="1"/> + <column flex="2"/> + </columns> + <rows> + <row align="center"> + <label value="&dialog.config.hreftype;:"/> + <menulist id="idTelifyPref_hreftype" onselect="objTelifyConfig.hrefTypeChanged(this.value)"> + <menupopup> + <menuitem label="&dialog.config.hreftype0;" value="0"/> + <menuitem label="&dialog.config.hreftype1;" value="1"/> + <menuitem label="&dialog.config.hreftype2;" value="2"/> + <menuitem label="&dialog.config.hreftype3;" value="3"/> + <menuitem label="&dialog.config.hreftype_custom;" value="9"/> + </menupopup> + </menulist> + </row> + + <row align="center"> + <label value="&dialog.config.dialcc;:"/> + <menulist id="idTelifyPref_dialcc"> + <menupopup> + <menuitem label="&dialog.config.dialcc_menu;" value="0"/> + <menuitem label="&dialog.config.dialcc_direct;" value="1"/> + </menupopup> + </menulist> + </row> + + <row align="center"> + <label value="&dialog.config.highlight;:"/> + <menulist id="idTelifyPref_highlight"> + <menupopup> + <menuitem label="&dialog.config.highlight0;" value="0"/> + <menuitem label="&dialog.config.highlight1;" value="25"/> + <menuitem label="&dialog.config.highlight2;" value="50"/> + <menuitem label="&dialog.config.highlight3;" value="100"/> + </menupopup> + </menulist> + </row> + <row align="center"> + <label value="&dialog.config.num_history;:"/> + <menulist id="idTelifyPref_num_history"> + <menupopup> + <menuitem label="3" value="3"/> + <menuitem label="4" value="4"/> + <menuitem label="5" value="5"/> + <menuitem label="6" value="6"/> + <menuitem label="7" value="7"/> + <menuitem label="8" value="8"/> + <menuitem label="9" value="9"/> + <menuitem label="10" value="10"/> + </menupopup> + </menulist> + </row> + <row align="center"> + <label value="&dialog.config.statusicon;:"/> + <menulist id="idTelifyPref_statusicon"> + <menupopup> + <menuitem label="&dialog.config.statusicon0;" value="0" /> + <menuitem label="&dialog.config.statusicon1;" value="1" /> + </menupopup> + </menulist> + </row> + <row align="center"> + <label value="&dialog.config.idd_prefix;"/> + <menulist id="idTelifyPref_idd_prefix" editable="true"> + <menupopup> + <menuitem label="" value=""/> + <menuitem label="00" value="00"/> + <menuitem label="001" value="001"/> + <menuitem label="011" value="011"/> + <menuitem label="0011" value="0011"/> + </menupopup> + </menulist> + </row> + </rows> + </grid> + </groupbox> + + <groupbox style="padding-bottom:8px;"> + <caption label="&dialog.config.about;"/> + <vbox style="width:96px;"> + <spacer style="height:0px;"/> + <hbox> + <image src="chrome://telify/content/icon96.png" style="width:96px;height:96px;margin-left:0px;"/> + <spacer/> + </hbox> + <spacer style="height:4px;"/> + <label id="idTelifyPref_version_label" value="" style="font-weight:bold;"/> + <label value="www.codepad.de" href="http://www.codepad.de" class="text-link"/> + <spacer flex="1"/> + </vbox> + </groupbox> + + </hbox> + + <groupbox id="idTelifyPref_custom_group" style="padding-bottom:8px;"> + <caption id="idTelifyPref_custom_caption" label="&dialog.config.custom;"/> + <vbox> + <description id="idTelifyPref_url_result" class="urlresult"> + </description> + + <menulist id="idTelifyPref_url_input" editable="true" + oninput="objTelifyConfig.urlChanged(this.value)" onselect="objTelifyConfig.tmplChanged(this.value)"> + <menupopup id="idTelifyPref_url_popup"> + </menupopup> + </menulist> + + <grid> + <columns> + <column flex="0"/> + <column flex="2"/> + <column flex="3"/> + </columns> + <rows> + <row align="center" id="idTelifyPref_param1_row" style="margin-top:4px;"> + <label id="idTelifyPref_param1_caption"/> + <textbox id="idTelifyPref_param1_value" emptytext="&dialog.config.replaces; $1 &dialog.config.in_template;" + oninput="objTelifyConfig.paramChanged(1, this.value)"/> + <spacer flex="2"/> + </row> + <row align="center" id="idTelifyPref_param2_row"> + <label id="idTelifyPref_param2_caption"/> + <textbox id="idTelifyPref_param2_value" emptytext="&dialog.config.replaces; $2 &dialog.config.in_template;" + oninput="objTelifyConfig.paramChanged(2, this.value)"/> + </row> + <row align="center" id="idTelifyPref_param3_row"> + <label id="idTelifyPref_param3_caption"/> + <textbox id="idTelifyPref_param3_value" emptytext="&dialog.config.replaces; $3 &dialog.config.in_template;" + oninput="objTelifyConfig.paramChanged(3, this.value)"/> + </row> + <row align="center" style="margin-top:4px;"> + <label value="&dialog.config.opentype;:"/> + <menulist id="idTelifyPref_opentype"> + <menupopup> + <menuitem label="&dialog.config.opentype0;" value="0"/> + <menuitem label="&dialog.config.opentype1;" value="1"/> + <menuitem label="&dialog.config.opentype2;" value="2"/> + <menuitem label="&dialog.config.opentype3;" value="3"/> + </menupopup> + </menulist> + </row> + </rows> + </grid> + + + </vbox> + </groupbox> + +</dialog> diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/country_data.js b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/country_data.js new file mode 100644 index 0000000000..63acf6089a --- /dev/null +++ b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/country_data.js @@ -0,0 +1,258 @@ +/* +Creative Commons License: Attribution-No Derivative Works 3.0 Unported +http://creativecommons.org/licenses/by-nd/3.0/ +(c)2009 Michael Koch +*/ +// must be saved as UTF-8 +var telify_country_data = [ +["", "", "", ""], +["+1", "USA", "us,mil,gov,edu", "1"], +["+1340", "U.S. Virgin Islands", "vi", "1"], +["+1670", "Northern Mariana Islands", "mp", "1"], +["+1671", "Guam", "gu", "1"], +["+1684", "American Samoa", "as", "1"], +["+1787", "Puerto Rico", "pr", "1"], +["+1939", "Puerto Rico", "", "1"], +["+1", "Canada", "ca", "1"], +["+1264", "Anguilla", "ai", "1"], +["+1268", "Antigua and Barbuda", "ag", "1"], +["+1242", "Bahamas", "bs", "1"], +["+1246", "Barbados", "bb", "1"], +["+1441", "Bermuda", "bm", "1"], +["+1284", "British Virgin Islands", "vg", "1"], +["+1345", "Cayman Islands", "ky", "1"], +["+1767", "Dominica", "dm", "1"], +["+1808", "Midway Island", "", "1"], +["+1809", "Dominican Republic", "do", "1"], +["+1829", "Dominican Republic", "", "1"], +["+1849", "Dominican Republic", "", "1"], +["+1473", "Grenada", "gd", "1"], +["+1876", "Jamaica", "jm", "1"], +["+1664", "Montserrat", "ms", "1"], +["+1869", "Saint Kitts and Nevis", "kn", "1"], +["+1758", "Saint Lucia", "lc", "1"], +["+1784", "Saint Vincent and the Grenadines", "vc", "1"], +["+1868", "Trinidad and Tobago", "tt", "1"], +["+1649", "Turks and Caicos Islands", "tc", "1"], +["+20", "Egypt", "eg", "0"], +["+212", "Morocco", "ma", ""], +["+213", "Algeria", "dz", "7"], +["+216", "Tunisia", "tn", "0"], +["+218", "Libya", "ly", "0"], +["+220", "Gambia", "gm", ""], +["+221", "Senegal", "sn", "0"], +["+222", "Mauritania", "mr", "0"], +["+223", "Mali", "ml", "0"], +["+224", "Guinea", "gn", "0"], +["+225", "Ivory Coast", "ci", "0"], +["+226", "Burkina Faso", "bf", ""], +["+227", "Niger", "ne", "0"], +["+228", "Togo", "tg", ""], +["+229", "Benin", "bj", ""], +["+230", "Mauritius", "mu", "0"], +["+231", "Liberia", "lr", "22"], +["+232", "Sierra Leone", "sl", "0"], +["+233", "Ghana", "gh", ""], +["+234", "Nigeria", "ng", "0"], +["+235", "Chad", "td", ""], +["+236", "Central African Republic", "cf", ""], +["+237", "Cameroon", "cm", ""], +["+238", "Cape Verde", "cv", ""], +["+239", "São Tomé and Príncipe", "st", "0"], +["+240", "Equatorial Guinea", "gq", ""], +["+241", "Gabon", "ga", ""], +["+242", "Congo (Republic)", "cg", ""], +["+243", "Congo (Democratic Republic)", "cd", ""], +["+244", "Angola", "ao", "0"], +["+245", "Guinea-Bissau", "gw", ""], +["+246", "Diego Garcia", "", ""], +["+247", "Ascension Island", "ac", ""], +["+248", "Seychelles", "sc", "0"], +["+249", "Sudan", "sd", "0"], +["+250", "Rwanda", "rw", "0"], +["+251", "Ethiopia", "et", "0"], +["+252", "Somalia", "so", ""], +["+253", "Djibouti", "dj", ""], +["+254", "Kenya", "ke", "0"], +["+255", "Tanzania", "tz", "0"], +["+256", "Uganda", "ug", "0"], +["+257", "Burundi", "bi", ""], +["+258", "Mozambique", "mz", "0"], +["+260", "Zambia", "zm", "0"], +["+261", "Madagascar", "mg", "0"], +["+262", "Réunion", "re", "0"], +["+262", "Mayotte", "yt", "0"], +["+263", "Zimbabwe", "zw", "0"], +["+264", "Namibia", "na", "0"], +["+265", "Malawi", "mw", ""], +["+266", "Lesotho", "ls", "0"], +["+267", "Botswana", "bw", ""], +["+268", "Swaziland", "sz", ""], +["+269", "Comoros", "km", ""], +["+27", "South Africa", "za", "0"], +["+290", "Saint Helena", "sh", ""], +["+290", "Tristan da Cunha", "", "0"], +["+291", "Eritrea", "er", "0"], +["+297", "Aruba", "aw", ""], +["+298", "Faroe Islands", "fo", ""], +["+299", "Greenland", "gl", ""], +["+30", "Greece", "gr", ""], +["+31", "Netherlands", "nl", "0"], +["+32", "Belgium", "be", "0"], +["+33", "France", "fr", "0"], +["+34", "Spain", "es", "0"], +["+350", "Gibraltar", "gi", ""], +["+351", "Portugal", "pt", ""], +["+352", "Luxembourg", "lu", ""], +["+353", "Ireland", "ie", "0"], +["+354", "Iceland", "is", "0"], +["+355", "Albania", "al", "0"], +["+356", "Malta", "mt", "0"], +["+357", "Cyprus (South)", "cy", ""], +["+358", "Finland", "fi", "0"], +["+359", "Bulgaria", "bg", "0"], +["+36", "Hungary", "hu", "06"], +["+370", "Lithuania", "lt", "8"], +["+371", "Latvia", "lv", "8"], +["+372", "Estonia", "ee", ""], +["+373", "Moldova", "md", "0"], +["+374", "Armenia", "am", "8"], +["+37447", "Nagorno-Karabakh", "", "0"], +["+37497", "Nagorno-Karabakh (Mobile)", "", "0"], +["+375", "Belarus", "by", "8"], +["+376", "Andorra", "ad", ""], +["+377", "Monaco", "mc", "0"], +["+37744", "Kosovo (Mobile)", "", "0"], +["+378", "San Marino", "sm", "0"], +["+379", "Vatican City", "va", ""], +["+380", "Ukraine", "ua", "8"], +["+381", "Serbia", "rs", "0"], +["+381", "Kosovo", "", "0"], +["+382", "Montenegro", "me", "0"], +["+385", "Croatia", "hr", "0"], +["+386", "Slovenia", "si", "0"], +["+38649", "Kosovo (Mobile)", "", "0"], +["+387", "Bosnia and Herzegovina", "ba", "0"], +["+389", "Macedonia", "mk", "0"], +["+39", "Italy and Vatican City", "it", ""], +["+40", "Romania", "ro", "0"], +["+41", "Switzerland", "ch", "0"], +["+420", "Czech Republic", "cz", ""], +["+421", "Slovakia", "sk", "0"], +["+423", "Liechtenstein", "li", ""], +["+43", "Austria", "at", "0"], +["+44", "United Kingdom", "uk,gb", "0"], +["+45", "Denmark", "dk", ""], +["+46", "Sweden", "se", "0"], +["+47", "Norway", "no", ""], +["+48", "Poland", "pl", "0"], +["+49", "Germany", "de", "0"], +["+500", "Falkland Islands", "fk", ""], +["+501", "Belize", "bz", "0"], +["+502", "Guatemala", "gt", ""], +["+503", "El Salvador", "sv", ""], +["+504", "Honduras", "hn", "0"], +["+505", "Nicaragua", "ni", "0"], +["+506", "Costa Rica", "cr", ""], +["+507", "Panama", "pa", "0"], +["+508", "Saint-Pierre and Miquelon", "pm", "0"], +["+509", "Haiti", "ht", "0"], +["+51", "Peru", "pe", "0"], +["+52", "Mexico", "mx", "01"], +["+53", "Cuba", "cu", "0"], +["+5399", "Guantanamo Bay", "", "0"], +["+54", "Argentina", "ar", "0"], +["+55", "Brazil", "br", "0"], +["+56", "Chile", "cl", "0"], +["+57", "Colombia", "co", "0"], +["+58", "Venezuela", "ve", "0"], +["+590", "Guadeloupe", "gp", ""], +["+591", "Bolivia", "bo", "0"], +["+592", "Guyana", "gy", "0"], +["+593", "Ecuador", "ec", "0"], +["+594", "French Guiana", "gf", ""], +["+595", "Paraguay", "py", "0"], +["+596", "Martinique", "mq", ""], +["+597", "Suriname", "sr", ""], +["+598", "Uruguay", "uy", "0"], +["+599", "Netherlands Antilles", "an", ""], +["+60", "Malaysia", "my", "0"], +["+61", "Australia", "au", "0"], +["+62", "Indonesia", "id", "0"], +["+63", "Philippines", "ph", "0"], +["+64", "New Zealand", "nz", ""], +["+65", "Singapore", "sg", ""], +["+66", "Thailand", "th", "0"], +["+670", "East Timor", "tp,tl", ""], +["+672", "Australian external territories", "", ""], +["+673", "Brunei", "bn", "0"], +["+674", "Nauru", "nr", "0"], +["+675", "Papua New Guinea", "pg", ""], +["+676", "Tonga", "to", ""], +["+677", "Solomon Islands", "sb", ""], +["+678", "Vanuatu", "vu", ""], +["+679", "Fiji", "fj", ""], +["+680", "Palau", "pw", ""], +["+681", "Wallis and Futuna", "wf", ""], +["+682", "Cook Islands", "ck", "00"], +["+683", "Niue Island", "nu", "0"], +["+685", "Samoa", "ws", ""], +["+686", "Kiribati", "ki", "0"], +["+687", "New Caledonia", "nc", "0"], +["+688", "Tuvalu", "tv", ""], +["+689", "French Polynesia", "pf", ""], +["+690", "Tokelau", "tk", ""], +["+691", "Micronesia", "fm", "1"], +["+692", "Marshall Islands", "mh", "1"], +["+7", "Russia", "ru,su", "8"], +["+7", "Kazakhstan", "kz", "8"], +["+81", "Japan", "jp", "0"], +["+82", "South Korea", "kr", "0"], +["+84", "Vietnam", "vn", "0"], +["+850", "North Korea", "", "0"], +["+852", "Hong Kong", "hk", ""], +["+853", "Macao", "mo", "0"], +["+855", "Cambodia", "kh", "0"], +["+856", "Laos", "la", "0"], +["+86", "China", "cn", "0"], +["+870", "Inmarsat SNAC", "", ""], +["+871", "Inmarsat (Atlantic East)", "", ""], +["+872", "Inmarsat (Pacific)", "", ""], +["+873", "Inmarsat (Indian)", "", ""], +["+874", "Inmarsat (Atlantic West)", "", ""], +["+880", "Bangladesh", "bd", "0"], +["+881", "Global Mobile Satellite System", "", ""], +["+882", "International Networks", "", ""], +["+883", "International Networks", "", ""], +["+886", "Taiwan", "tw", ""], +["+90", "Turkey", "tr", "0"], +["+90392", "Cyprus (North)", "", "0"], +["+91", "India", "in", "0"], +["+92", "Pakistan", "pk", "0"], +["+93", "Afghanistan", "af", "0"], +["+94", "Sri Lanka", "lk", "0"], +["+95", "Burma", "mm", ""], +["+960", "Maldives", "mv", "0"], +["+961", "Lebanon", "lb", "0"], +["+962", "Jordan", "jo", "0"], +["+963", "Syria", "sy", "0"], +["+964", "Iraq", "iq", "0"], +["+965", "Kuwait", "kw", "0"], +["+966", "Saudi Arabia", "sa", "0"], +["+967", "Yemen", "ye", "0"], +["+968", "Oman", "om", "0"], +["+971", "United Arab Emirates", "ae", ""], +["+972", "Israel", "il", "0"], +["+973", "Bahrain", "bh", ""], +["+974", "Qatar", "qa", "0"], +["+975", "Bhutan", "bt", ""], +["+976", "Mongolia", "mn", "0"], +["+977", "Nepal", "np", "0"], +["+98", "Iran", "ir", "0"], +["+992", "Tajikistan", "tj", "8"], +["+993", "Turkmenistan", "tm", "8"], +["+994", "Azerbaijan", "az", "8"], +["+995", "Georgia", "ge", "8"], +["+996", "Kyrgyzstan", "kg", "0"], +["+998", "Uzbekistan", "uz", "8"], +]; diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/dialog.css b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/dialog.css new file mode 100644 index 0000000000..c154c52006 --- /dev/null +++ b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/dialog.css @@ -0,0 +1,33 @@ +.telInputCC { + width: 6em; +} + +#idTelify_popup_dial .menu-iconic-icon { + width: 22px; + height: 15px; +} + +#idTelify_popup_context .menu-iconic-icon { + width: 22px; + height: 15px; +} + +.tmpl_empty { + color: #a0a0a0; +} + +.tmpl_number { + color: #008000; +} + +.tmpl_param { + color: #000080; +} + +.urlresult { + height:4.2em; + padding:2px 3px; + border:1px solid #e0e0e0; + background-color:#f0f0f0; + margin-left:4px; +} diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/edit22x15.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/edit22x15.png new file mode 100644 index 0000000000000000000000000000000000000000..cb4c614f0b8250a5424018630cc4663962591633 GIT binary patch literal 2946 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 literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/editNumber.js b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/editNumber.js new file mode 100644 index 0000000000..64896ad5c8 --- /dev/null +++ b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/editNumber.js @@ -0,0 +1,180 @@ +/* +Creative Commons License: Attribution-No Derivative Works 3.0 Unported +http://creativecommons.org/licenses/by-nd/3.0/ +(c)2009 Michael Koch +*/ + +var objTelifyEditNumber = { + +checkKey: function(event, allowed) +{ + if (event.which < 32) return + var key = String.fromCharCode(event.which) + if (allowed.indexOf(key) >= 0) return; + event.preventDefault(); +}, + + +createListItem: function() +{ + var item = document.createElement('listitem'); + for (var i=0; i<arguments.length; i++) { + var cell = document.createElement('listcell'); + cell.setAttribute("label", arguments[i]); + item.appendChild(cell); + } + return item; +}, + + +updateCountrySelection: function() +{ + var list = document.getElementById("idTelifyCountryCodeList"); + var editcc = document.getElementById("idTelifyInputCC"); + if (editcc.value == "" || editcc.value == "+" || editcc.value.charAt(0) != '+') { + list.scrollToIndex(0); + list.selectedIndex = 0; + editcc.style.color = "#ff0000"; + return; + } + var index = 0; + var maxlen = 1; + for (var i=0; i<telify_country_data.length; i++) { + if (editcc.value == telify_country_data[i][0]) { + index = i; + break; + } + for (var j=1; j<editcc.value.length; j++) { + if (editcc.value.charAt(j) == telify_country_data[i][0].charAt(j)) { + if (j+1 > maxlen) { + maxlen = j+1; + index = i; + } + } else { + break; + } + } + } + if (index >= 0) { + list.scrollToIndex(index); + if (editcc.value == telify_country_data[index][0]) { + list.selectedIndex = index; + editcc.style.color = "#000000"; + } else { + list.clearSelection(); + editcc.style.color = "#ff0000"; + } + } else { + list.scrollToIndex(0); + list.clearSelection(); + editcc.style.color = "#ff0000"; + } +}, + + +ccChanged: function() +{ + var editcc = document.getElementById("idTelifyInputCC"); + if (editcc.value.length == 1 && editcc.value.charAt(0) != '+') { + editcc.value = "+" + editcc.value; + } + this.updateCountrySelection(); +}, + + +updateNumberEdit: function() +{ + var list = document.getElementById("idTelifyCountryCodeList"); + var fClear = false; + if (list.getRowCount() != telify_country_data.length) { + while (list.getRowCount() > 0) list.removeItemAt(0); + fClear = true; + } + for (var i=0; i<telify_country_data.length; i++) { + var item = this.createListItem(telify_country_data[i][0], telify_country_data[i][1]); + if (fClear) { + list.appendChild(item); + } else { + list.replaceChild(item, list.getItemAtIndex(i)); + } + } + this.updateCountrySelection(); +}, + + +updateListSelection: function() +{ + var list = document.getElementById("idTelifyCountryCodeList"); + var editcc = document.getElementById("idTelifyInputCC"); + if (list.selectedCount > 0) { + editcc.value = telify_country_data[list.selectedIndex][0]; + editcc.style.color = "#000000"; + } +}, + + +compareCol1: function(a, b) +{ + var v = a[0].localeCompare(b[0]); + if (v == 0) return a[1].localeCompare(b[1]); + return v; +}, + + +compareCol2: function(a, b) +{ + var v = a[1].localeCompare(b[1]); + if (v == 0) return a[0].localeCompare(b[0]); + return v; +}, + + +last_sorted_column: -1, + +sortCountryCodeList: function(column) +{ + var telPrefs = objTelifyPrefs.getPrefObj(); + if (column < 0) { + column = telPrefs.getIntPref(objTelifyPrefs.PREF_COLSORTCC); + } else { + telPrefs.setIntPref(objTelifyPrefs.PREF_COLSORTCC, column); + } + if (column == this.last_sorted_column) return; + if (column == 0) { + telify_country_data.sort(this.compareCol1); + document.getElementById("idTelifyColCode").setAttribute("sortDirection", "descending"); + document.getElementById("idTelifyColCountry").setAttribute("sortDirection", "natural"); + } + if (column == 1) { + telify_country_data.sort(this.compareCol2); + document.getElementById("idTelifyColCode").setAttribute("sortDirection", "natural"); + document.getElementById("idTelifyColCountry").setAttribute("sortDirection", "descending"); + } + this.last_sorted_column = column; + this.updateNumberEdit(); +}, + + +setNumberEditReturnValue: function(fOK) +{ + window.arguments[0].cc = document.getElementById("idTelifyInputCC").value; + window.arguments[0].nr = document.getElementById("idTelifyInputNr").value; + window.arguments[0].fOK = fOK; +}, + + +initNumberEdit: function() +{ + var cc = window.arguments[0].cc; + var nr = window.arguments[0].nr; + var index = -1; + var maxlen = 0; + + objTelifyUtil.localizeCountryData(); + document.getElementById("idTelifyInputCC").value = (cc ? cc : ""); + document.getElementById("idTelifyInputNr").value = nr; + this.sortCountryCodeList(-1); +} + +}; + diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/editNumber.xul b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/editNumber.xul new file mode 100644 index 0000000000..251fbc0198 --- /dev/null +++ b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/editNumber.xul @@ -0,0 +1,45 @@ +<?xml version="1.0"?> +<?xml-stylesheet href="chrome://global/skin/global.css" type="text/css"?> +<?xml-stylesheet href="chrome://telify/content/dialog.css" type="text/css"?> + +<!DOCTYPE dialog SYSTEM "chrome://telify/locale/lang.dtd"> + +<dialog id="dlgTelifyEditNumber" + xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" + buttons="accept,cancel" + buttonlabelaccept="&dialog.edit.dial;" + onload="objTelifyEditNumber.initNumberEdit()" + ondialogaccept="objTelifyEditNumber.setNumberEditReturnValue(true)" + ondialogcancel="objTelifyEditNumber.setNumberEditReturnValue(false)" + title="&dialog.edit.title;"> + + <stringbundleset id="stringbundleset"> + <stringbundle id="idTelifyStringBundle" src="chrome://telify/locale/lang.properties"/> + </stringbundleset> + + <script type='application/x-javascript' src='chrome://telify/content/jshashtable.js'></script> + <script type='application/x-javascript' src='chrome://telify/content/util.js'></script> + <script type='application/x-javascript' src='chrome://telify/content/pref.js'></script> + <script type='application/x-javascript' src='chrome://telify/content/country_data.js'></script> + <script type='application/x-javascript' src='chrome://telify/locale/country_locale.js'></script> + <script type='application/x-javascript' src='chrome://telify/content/editNumber.js'></script> + + <vbox> + <hbox align="center"> + <textbox id="idTelifyInputCC" class="telInputCC" oninput="objTelifyEditNumber.ccChanged()" onkeypress="objTelifyEditNumber.checkKey(event,'+0123456789')"/> + <label value="–"/> + <textbox id="idTelifyInputNr" flex="1" onkeypress="objTelifyEditNumber.checkKey(event,'0123456789')"/> + </hbox> + <listbox id="idTelifyCountryCodeList" flex="1" width="280" height="250" onselect="objTelifyEditNumber.updateListSelection()"> + <listhead> + <listheader id="idTelifyColCode" class="telInputCC" label="&dialog.edit.code;" onclick="objTelifyEditNumber.sortCountryCodeList(0)"/> + <listheader id="idTelifyColCountry" label="&dialog.edit.country;" onclick="objTelifyEditNumber.sortCountryCodeList(1)"/> + </listhead> + <listcols> + <listcol flex="0"/> + <listcol flex="1"/> + </listcols> + </listbox> + </vbox> + +</dialog> diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/error32.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/error32.png new file mode 100644 index 0000000000000000000000000000000000000000..2d5e260a5f21585e0a76c81a0a66b6dbf5be60e6 GIT binary patch literal 2478 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 HB{Ts5^Zkk9 literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/1-canada.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/1-canada.png new file mode 100644 index 0000000000000000000000000000000000000000..fd226fef001e55ec8e0ede8fdf897babf89c2ed3 GIT binary patch literal 2979 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 O1B0ilpUXO@geCwrg@PCW literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/1.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/1.png new file mode 100644 index 0000000000000000000000000000000000000000..34bd21fd5cdfa2525a224ac596e07713d87de6af GIT binary patch literal 2878 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`(#+;1OBOz`!jG!i)^F z=14FwaQSCCI|l@0<d@_ZXXF<scse^P6cpvBW#*(ZFjU-{8=M{z{8G&J`@Jtt-W?57 zyz_%ZITV7Nx*J3$s%a^53V3xWF1#rkcu>&Ql|}l*f)3`szJ?yrKpmbgt{d!66c_b1 zFYf3%_4{G<;_PdCzCSzrZ|ilt=W9OC-F%+?00+-B592`72A-8pa)J+<j~_Yq@QI#7 zBbQ16g8;|o6vg7d%8U#@>TGPZl@74)V_>Yf%+0}Yz<2fm1DW>!{I8s5#xORtFditG zXyMJ#Aj05K)#tQ~!NHBOVeSmIV1@-O3<;-`lO8h!=rSaz*FU?=&@lJM%xXr4=qZY# zj0+|*C<v!^xG-c`Gpsou*5%3&VZb1g=6%GH;f5}QfoFJ{2g8Q#3<u5$aBpJZ;9)Qb z>}b_wV5w$EIH9au!O$|3LB#D-xXnlHbpp?|7#J#MZnD{_V(Ho#&7oV!9v-eIr*Y0x zTwBB}ktuPOgWjRanUY40Cj1XRpJ8BFFi}+SLG$Oo73cWYojYgNw~a4e_tk#3|4K<o zkN-VAzq-JIf#G3E-Nk=8`kSR1tl1iJ|1DB|$C44py`c1aciJX?hph|?Ufv4-TmT9i z*M$>y-n{wr$&(viN1UP)Pleb1OFtBUApCF6&pMkw-@iWC_eiDDD7Mj^<;R0VXTJC> zl{r6&vnA=yvwrtK+qwV$k-e;R#4~AUgqFzTK%v4umsvfZjg~5PI!)3%s(R^v%A@-_ zznSgsn=)+3vSX~CsJkLInfaTyx<Ew9fk)pN7(VUJKX^rhgSjE2`QiEU|L^Vpx-U>= zXh`#%RLH;(=c1w)a%!{vaSjFsmj#Vl8yuy-9F)*Gz$SB$_0B==KM7_nPAW$ZISDv% zr8LMCC1|c`a?)r!yFpefLH~+_tjU4EjJC-Ie0qmMcktO3@c&BWn0HWPPa`Lb;|UJo zM8#Vjj7eP)%6%N-Gh2Ts9`s-l>Q+%W*&!0B<UP^U!!W2TL?P5e_LFT9lVy91+pdY$ zCm4*H{<Q6JH=NSADbV%`&sOK1E6k-@+!k?PNGUO#)i1VS_JyJ?Qno#23!h(Doxy*r z-_H5C!GRYN?8ZlO4D^m2cG_s6!#O$m^hTvMJgbjMZ3tV#yu0&j^7)PBEJBU02RO}G z%AFJv<s3aCd?NgAc&t#6Q85v`#c9sT+!A<5U1{<P?=5P(1b-fpNHQ{PkMPh@z9!T! ztS?aA;e5ngMX1x+NPXu7CeMvaLM{nia=Vllr2JB6<!loVDdov0Z>3~!Vz->4qo94F z^~u~Pho2Zfk$$51DVl3;l0)H=AHk0_f=*?5Nj?>LYVwpVb%v2+=;B#HcULS75j5?O za$37^ThRKz_7%b=rL!#0Hj8<BFI~H6>Sd`6@r>`8>tB@Y61+QA&TsmK@Jpv(y1$tI zg85514{w`j^YM;!4awOO>=Nmc<r3>>_$-sW+%0)L#K7F}^^E5;`Df;bMrdu*su7)d zifgLZRJEznTKXX?S1nt0Zxwgw=g`w3{VU^wYuCAj8V5gK$$4ek>d;kl16~J92dA&J zUeUfPeMNqV{gS%KznyH6hkXwFJ1+@burdDeo?{B!$&#BZbQH6BSGScmnjTTxc=l#Z znbz(Ze`R-f+pb!<(9+r1%Q$><(B~;>_Uw;m6#ke~;>Y=1WBK&YbzS#F-fKS6lwM}y zv(qp&CVSPi>C+-sd#nyz?f!bN*}AvO=Pujpx;yfBBcJ1OFZCF8_w@dAtaG0S-weLH zoNKw5udUVBb$Y9^mr5_(?NYu!Z~40!^Y+Cx%=5`#ey?)x^ItNx`hP?I=Kfm#)tx7T zZ8MJw+ijk65;jLo3-fJc^^f2F80Z{(*ui;e;?%_H4_hYgylAuds#~uce^2JIn8zxQ zbC2a7Tdc;Wrl{ua`^xv-tRUZ=%QTl+`&j!NKYQlvqO;d#n$EU0yl(V-_Vd}-XW!qR z5LFSSvu(w;9jTt1o<uE+e79{+UTc(P<kE=HsMyVJYv-<2y|#Pp?&X5Zclu5CTRrbu z`r!>9x1HR!a=YY)r#IMcuiKWptu`?|Nj!b~(RGL4P2M}Xc2{lhUt4zG_M3dGWus*4 zinkPrScO^Ln{{r^JNw$BU#7j(Pmee+aQ=qz<88vHHIHP@4W513JzYF~XL0lAj_ywH zrqg=U?eu0#AG>>E?-Q?*uZ6J>t1f+=JA3o&LvL5yUjNSQUFN&?JM+(&%-5V3X<U5a z@CoM!fln{mbI+e@kbQqmoxihxWBS(T%KFLr6T{bD->`jY`Ks@U@5SxD*%i%yZ1>p4 z{GQRh$oMnn2ezNse%k+V{=E3s`_A>s|5N@~{lCbtyg`*Qow>8ou`!zI_m8R?#r=Ku zR<~2XZMyl^v1h?fM^VTArnOB^53W_rIPqq}TE*|rXPldOE|ae{pzg)B3+#!{61xxA z@u;`9w}!Xb_Z4(RNL@6XZd!ivj&t#SmtQW^T<*<IH}tn$uj^&1Ww%N%%jTB(E|XpM z$Mn)7&s>d|8{wJbEn}&twazRrXW#ulZ$Gy`n)`_Rakcmi{S&bTl?%@u`qH{wY^9!% zj@2{=pAJ8ZDIXjKv{s1qsD2VISMB4fJS2N4T}l6<*~N|<&M{hYexE$Fe5)qCnYhQa zQst=eQk|zeThv!h*yF?Nb9c7YJh5423b{tMR(lPbCrzAC=(I}Fck;IMSLx5v%1*CI zZQb<mXkPbreYvUZC$l$CSi>5r%eBpE*^7`Ujq6(Mo6=Lm)Apb3JY_j;^*rsfZ_jK# zb$f#OocHtpzZE(p^l;L)rET8fy0Q_^_O8jY++<T&d7JC8D64i`7~2|~9bMbBa<BTY zej7f0UEN-_D&OqJxPzyf4sK=4e$5@q^|ZD2^_}Z)WBnuaBkylb{M9yB+D^2yYn{k# z@#&)VH#F{4Je6+GKed16ohe&Zu0FCe<$T(uw3pBB>CTJho3?8Dv*~<!yf<%c;k_TW z<?YvRuDA84pVhd%yLp@Q&c*v}cI-)Ae)8N|Yx|HTAzwm%g_ym&ba!jw^&fc`-$_^R z`DXIw>h0(~-~Za3+;=;aG1T{J+SSzGp1(JLw_n$}>gA7VzjI^P`sEhBJ<fcI`7gUN z-?r;JuUwVAWE&FHe@*+fJKu5negEdZFW2QY;|=YdbL^3FflK9+m)|+>f0yI6x>eRw zz2+hNW%)AMbXol@r&*t7xy=rq^*cH#dYAthyNlOe-K+ZJep{Y@j)_fVrPt?>lbN?( zHeH^a{^@+r+^KVG>-2u!Nw~deTlMqgbN93O^WX0hD0z6v^?&zs>pj-zVm|FC`LyZw zQ{nI(;j`9T#pk{%d1do&@@4<yyXWklwQgrj_Re=zd$(4neSaxE&-~ooFMBILiv7QK zb)Kc|-Mycy^1mPb{`J1t-MS+6zvoWxzFDsRZtWibJ@H>0-a6iNzT1A)KKkFC8}IMb zXB{YC@cH5$_wQ`2&FBA3{Myg&%-TP*|8yH~+v|B2c9xcp?2G=s{IlHoe9C#XdE);T z{X4x*Tui_2$JN)@&t05xapCk&(<krGty%i_)q&TN>u(=BbWCpF$qHk`xG!P9-yST# zQ!e{{@qK>(Cp8N78viqXZu}a2VfpXLl9MO@XJMZ4`A@R3?rjDJ28CpgAYTTCDpdxC zhGqtapZ^&c8eTFmlo~KFyh>nTu$sZZAf7)d{-_%R14E{#i(^Q|t)xHy|JyU`GIY0v zGdoV6zGtuBu9L6kef<vt^96jh5<<SOY2Q7gbK=B@_y7Or@$u>5`Ty^)Jd@tCe2HpP z9zAj6f6D`%(kzqZ{5CE7|NlR)p*a6u1GQ^MO$;R%7#RNlXJ%;MEU|cX-Fia?1_lOC LS3j3^P6<r_mo-_V literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/1242.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/1242.png new file mode 100644 index 0000000000000000000000000000000000000000..cb72ea2c0f48e6935ee8bad01b77b11d8108855a GIT binary patch literal 2928 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 LS3j3^P6<r_JVIRx literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/1246.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/1246.png new file mode 100644 index 0000000000000000000000000000000000000000..b6db2cd4a7aa6a3c71375bcaa8181440de130884 GIT binary patch literal 347 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`($k<n8Xl@E-&h>|H*Y zfq{X&#M9T6{U)QBu$0x!Z9l#+Ffjb}ba4!^=sh}lZx)lIgzI@9laK0APdL{wZ4BSy zk(#j4bGk@p#PThh&Su~Eefg%=Ee|Pi#Yxwc1iDpUP8B_TsPAY~M9T5I8Wo9M56{`& zZ+$2nvtO&`N}XY)*17**tkT+^yIs`p`clew<>f)I%I6vhORtET&01ISJK`<RMgNOU zv8--qlm0!vAf=P>ZF)_uwS*~mx&QBub2gKkvMhb`bBd>XGhHyxUG>x?sO!HuTZP8b ziur4|e}DOA`thKwc%S<c50tbbZs^^;cqv<n^?6|JZHI)0s;6BKkNmb+Jb^=qlkHr3 za!nK;!_L_^J|1BBzWw9^|HF;?j~`C^@<m%VOnPFd+c&#~EG7&L3=E#GelF{r5}E)< C?3bMY literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/1264.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/1264.png new file mode 100644 index 0000000000000000000000000000000000000000..45b6ec574ecf6afe62656e876878e1ed0b2fa253 GIT binary patch literal 3228 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 UCbWbwFfcH9y85}Sb4q9e0DPhi_y7O^ literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/1268.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/1268.png new file mode 100644 index 0000000000000000000000000000000000000000..d618aeb5f3d0490a063bde2f04aa11aa7e316038 GIT binary patch literal 587 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`($k<n8Xl@E-&h>|H*Y zfq{X&#M9T6{RTIyxH`{{wfm|V7#QDrx;Tbd^sb$>KRY;3<hcF!ecwNwINkqjW`}3{ zmMaM>nw|bP^eE|CtPBuuS9_%7p?SlVlZC6Pc;h-(!MjGR?S6B;Un#J3HF8aw<kf3B z(d^`IzF8C0^fTM)9v*r)=lsv2A4QQLSVRjJ<{uOe$!QnLiu&Bc@;GqiGBs0E(aRw= zTJD=J&vMUg7xLQPl5$r3@x%4Cvoxwi`8;`KFO}<l`xech^2qA-dufyC5094@x0ws9 z`I!{qq*V4Mo9n^dlY;A|LVtbzRmm`4b;nE-0f&uOmfQ=lIVa1%LHk;&+zc~@O_yU# za)a8|bF==PbXB$6Bf@CD(agCQJ>ss;@So|Tm$^nSlI8E+(xA5fqyLvNR4o^9&@(t0 zT;J`?xN$@C;_VyNZ&jQ%bNZ9KXW4;mdo7|GZZ3K9d!foAh40bsUsP`PE?PV{W0L#! z`42fxT1-0i(D$Kg@zhH<>+CJUH79C5J8r~!LgX{^vUSH8X2zD^_}UTsU72ms3%*6+ z98c_(-f&)bEe(16<D6~C(*vdJc9$`RS~~1GVf497w&jJi);_zFe5S36fh8f@Ie~X? z$h-(QH(M#X&224T|03=Ro=NlV9_%fYZLpueKVVm>eCaKj%$j%egO>ZAdYL+>ih23H v1#{x;u8X*(+*v(&uhIRmO?Rtg{<8M)98%DJZhVh{fq}u()z4*}Q$iB}xkd$! literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/1284.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/1284.png new file mode 100644 index 0000000000000000000000000000000000000000..93c6f1125582c3c4ed2ad91b13f94a4d225b297a GIT binary patch literal 3287 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 literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/1340.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/1340.png new file mode 100644 index 0000000000000000000000000000000000000000..0949b5fa6d5194dc591ac483794fd0d3ab2f740c GIT binary patch literal 785 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`($k<n8Xl@E-&h>|H*Y zfq{X&#M9T6{RTH10|&F=rN+4o3{0CnT^vI!dbdvT_6RAII9h-1j&<?#rN(x%Cz+^p z>u_yeptC3^IUvl-F=Y0l1q&8AWC-ps$`0ff&lC*gY}8$3zH5fu1d%`yTMe1qS(j$2 zO|85?^WB-h+c`K-X9>=G`}5qx54G+3?i`9Um?V}RDrqXzDe1ovz&>$e_+-8|W;vyM zwJF9QJu6M^d{S0)dpwY0xMZ>LwbjQ)<rzy<{+Z{^xokecaQ%U}koJ?0)TG`lo8Wil zqSYJK-jpp8uV%1MtZ}lr(0hhGD6?_tpF2m6R9=3yA*^KLSt&)~h643t5BNgfyX~v> zei+1N=qbSemBHX!nfb5dy(b<%Ua^sJQ>5(DExm^#cQc$2bn2KbZ?{q7{>jY+Q%+s+ zUbC<{gHwO==?6vc&HBoAXat(DO*Tpu>kYVdX5m@MS=;9ylxJv;>3Nc;`Xb|imUqZA z>v|PAgHtwM%QE@<0^_#LI@kX-;~aCvU$#$2b+f#SW=02`nWbbb%4dC=E5+-J+#kjd zFQa$9_%b1Sm#n|i(e9L2&-=`G%Dkzx_LzFw^Zjb+nEFc5;B$Q6!sahHbi?)Ygif30 zrW0BVxG%XmCN1>Sd2g_M((Qs3k@MP>_itZxCeb-m$7ENI$(5XgX{8T7-ghl~zog`& z=%Z^7ITx)kaeBI{Y)Rzt3zsz8ggKvC7OS6;h>nViVo1|cTlGfl%_Nr!l{0@2$o{d@ zziOGjajN={U+V<gk9yvivn=Co_@($;7SgfJI+`WxW4c18ZS-(U(@5hwyG;K0@2!&$ zZe*A)H*c{`Y2&R~hi5!Z`X&Ef{o;K8kBb8Dgs$Dw=OX#{&e306YiEew&fh!lN`*{R z*yAs6!)86xcYK|%bbisIWxOq2=PnD(a&EkPZuV1dHSz9xhwG(^Edm=a)INN@T6E&V xJi*Y=!2b_cTKv5C-TiL7@PGbgZ#Zk&6)dCO-o7|^mVtqR!PC{xWt~$(699JGYuEq) literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/1345.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/1345.png new file mode 100644 index 0000000000000000000000000000000000000000..4ade1ca9be95a1952190fafbfc153ffb3c35827f GIT binary patch literal 3245 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 literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/1441.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/1441.png new file mode 100644 index 0000000000000000000000000000000000000000..775a6b67b56424fc2e5c950c88f902a5aa78c627 GIT binary patch literal 3238 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 literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/1473.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/1473.png new file mode 100644 index 0000000000000000000000000000000000000000..19612cf7a73a7be8c0ffb1f405c025c30a2ad305 GIT binary patch literal 3288 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 literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/1649.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/1649.png new file mode 100644 index 0000000000000000000000000000000000000000..d8f0e6ec7e98e80146665ad258cd7603285ff461 GIT binary patch literal 3206 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 literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/1664.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/1664.png new file mode 100644 index 0000000000000000000000000000000000000000..35d8f052b93c5208e3d430bc5213c6c984f47423 GIT binary patch literal 3220 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 L{an^LB{Ts510ek! literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/1670.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/1670.png new file mode 100644 index 0000000000000000000000000000000000000000..a5c8609a24821b02da585b50bef280f9cc23d65e GIT binary patch literal 3233 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`(#+;1OBOz`!jG!i)^F z=14FwaQSCCI|l@0<d@_ZXXF<scse^P6cpvBW#*(ZFjU-{8=M{z{8G&J`@Jtt-W?57 zyz_%ZITV7Nx*J3$s%a^53V3xWF1#rkcu>&Ql|}l*f)3`szJ?yrKpmbgt{d!66c_b1 zFYf3%_4{G<;_PdCzCSzrZ|ilt=W9OC-F%+?00+-B592`72A-8pa)J+<j~_Yq@QI#7 zBbQ16g8;|o6vg7d%8U#@>TGPZl@74)V_>Yf%+0}Yz<2fm1DW>!{I8s5#xORtFditG zXyMJ#Aj05K)#tQ~!NHBOVeSmIV1@-O3<;-`lO8h!=rSaz*FU?=&@lJM%xXr4=qZY# zj0+|*C<v!^xG-c`Gpsou*5%3&VZb1g=6%GH;f5}QfoFJ{2g8Q#3<u5$aBpJZ;9)Qb z>}b_wV5w$EIH9au!O$|3LB#D-xXnlHbpp?|7#J#MZnD{_V(Ho#&7oV!9v-eIr*Y0x zTwBB}ktuPOgWjRanUY40Cj1XRpJ8BFFi}+SLG$Oo73cWYojYgNw~a4e_tk#3|4K<o zkN-VAzq-JIf#G3E-Nk=8`kSR1tl1iJ|1DB|$C44py`c1aciJX?hph|?Ufv4-TmT9i z*M$>y-n{wr$&(viN1UP)Pleb1OFtBUApCF6&pMkw-@iWC_eiDDD7Mj^<;R0VXTJC> zl{r6&vnA=yvwrtK+qwV$k-e;R#4~AUgqFzTK%v4umsvfZjg~5PI!)3%s(R^v%A@-_ zznSgsn=)+3vSX~CsJkLInfaTyx<Ew9fk)pN7(VUJKX^rhgSjE2`QiEU|L^Vpx-U>= zXh`#%RLH;(=c1w)a%!{vaSjFsmj#Vl8yuy-9F)*Gz$SB$_0B==KM7_nPAW$ZISDv% zr8LMCC1|c`a?)r!yFpefLH~+_tjU4EjJC-Ie0qmMcktO3@c&BWn0HWPPa`Lb;|UJo zM8#Vjj7eP)%6%N-Gh2Ts9`s-l>Q+%W*&!0B<UP^U!!W2TL?P5e_LFT9lVy91+pdY$ zCm4*H{<Q6JH=NSADbV%`&sOK1E6k-@+!k?PNGUO#)i1VS_JyJ?Qno#23!h(Doxy*r z-_H5C!GRYN?8ZlO4D^m2cG_s6!#O$m^hTvMJgbjMZ3tV#yu0&j^7)PBEJBU02RO}G z%AFJv<s3aCd?NgAc&t#6Q85v`#c9sT+!A<5U1{<P?=5P(1b-fpNHQ{PkMPh@z9!T! ztS?aA;e5ngMX1x+NPXu7CeMvaLM{nia=Vllr2JB6<!loVDdov0Z>3~!Vz->4qo94F z^~u~Pho2Zfk$$51DVl3;l0)H=AHk0_f=*?5Nj?>LYVwpVb%v2+=;B#HcULS75j5?O za$37^ThRKz_7%b=rL!#0Hj8<BFI~H6>Sd`6@r>`8>tB@Y61+QA&TsmK@Jpv(y1$tI zg85514{w`j^YM;!4awOO>=Nmc<r3>>_$-sW+%0)L#K7F}^^E5;`Df;bMrdu*su7)d zifgLZRJEznTKXX?S1nt0Zxwgw=g`w3{VU^wYuCAj8V5gK$$4ek>d;kl16~J92dA&J zUeUfPeMNqV{gS%KznyH6hkXwFJ1+@burdDeo?{B!$&#BZbQH6BSGScmnjTTxc=l#Z znbz(Ze`R-f+pb!<(9+r1%Q$><(B~;>_Uw;m6#ke~;>Y=1WBK&YbzS#F-fKS6lwM}y zv(qp&CVSPi>C+-sd#nyz?f!bN*}AvO=Pujpx;yfBBcJ1OFZCF8_w@dAtaG0S-weLH zoNKw5udUVBb$Y9^mr5_(?NYu!Z~40!^Y+Cx%=5`#ey?)x^ItNx`hP?I=Kfm#)tx7T zZ8MJw+ijk65;jLo3-fJc^^f2F80Z{(*ui;e;?%_H4_hYgylAuds#~uce^2JIn8zxQ zbC2a7Tdc;Wrl{ua`^xv-tRUZ=%QTl+`&j!NKYQlvqO;d#n$EU0yl(V-_Vd}-XW!qR z5LFSSvu(w;9jTt1o<uE+e79{+UTc(P<kE=HsMyVJYv-<2y|#Pp?&X5Zclu5CTRrbu z`r!>9x1HR!a=YY)r#IMcuiKWptu`?|Nj!b~(RGL4P2M}Xc2{lhUt4zG_M3dGWus*4 zinkPrScO^Ln{{r^JNw$BU#7j(Pmee+aQ=qz<88vHHIHP@4W513JzYF~XL0lAj_ywH zrqg=U?eu0#AG>>E?-Q?*uZ6J>t1f+=JA3o&LvL5yUjNSQUFN&?JM+(&%-5V3X<U5a z@CoM!fln{mbI+e@kbQqmoxihxWBS(T%KFLr6T{bD->`jY`Ks@U@5SxD*%i%yZ1>p4 z{GQRh$oMnn2ezNse%k+V{=E3s`_A>s|5N@~{lCbtyg`*Qow>8ou`!zI_m8R?#r=Ku zR<~2XZMyl^v1h?fM^VTArnOB^53W_rIPqq}TE*|rXPldOE|ae{pzg)B3+#!{61xxA z@u;`9w}!Xb_Z4(RNL@6XZd!ivj&t#SmtQW^T<*<IH}tn$uj^&1Ww%N%%jTB(E|XpM z$Mn)7&s>d|8{wJbEn}&twazRrXW#ulZ$Gy`n)`_Rakcmi{S&bTl?%@u`qH{wY^9!% zj@2{=pAJ8ZDIXjKv{s1qsD2VISMB4fJS2N4T}l6<*~N|<&M{hYexE$Fe5)qCnYhQa zQst=eQk|zeThv!h*yF?Nb9c7YJh5423b{tMR(lPbCrzAC=(I}Fck;IMSLx5v%1*CI zZQb<mXkPbreYvUZC$l$CSi>5r%eBpE*^7`Ujq6(Mo6=Lm)Apb3JY_j;^*rsfZ_jK# zb$f#OocHtpzZE(p^l;L)rET8fy0Q_^_O8jY++<T&d7JC8D64i`7~2|~9bMbBa<BTY zej7f0UEN-_D&OqJxPzyf4sK=4e$5@q^|ZD2^_}Z)WBnuaBkylb{M9yB+D^2yYn{k# z@#&)VH#F{4Je6+GKed16ohe&Zu0FCe<$T(uw3pBB>CTJho3?8Dv*~<!yf<%c;k_TW z<?YvRuDA84pVhd%yLp@Q&c*v}cI-)Ae)8N|Yx|HTAzwm%g_ym&ba!jw^&fc`-$_^R z`DXIw>h0(~-~Za3+;=;aG1T{J+SSzGp1(JLw_n$}>gA7VzjI^P`sEhBJ<fcI`7gUN z-?r;JuUwVAWE&FHe@*+fJKu5negEdZFW2QY;|=YdbL^3FflK9+m)|+>f0yI6x>eRw zz2+hNW%)AMbXol@r&*t7xy=rq^*cH#dYAthyNlOe-K+ZJep{Y@j)_fVrPt?>lbN?( zHeH^a{^@+r+^KVG>-2u!Nw~deTlMqgbN93O^WX0hD0z6v^?&zs>pj-zVm|FC`LyZw zQ{nI(;j`9T#pk{%d1do&@@4<yyXWklwQgrj_Re=zd$(4neSaxE&-~ooFMBILiv7QK zb)Kc|-Mycy^1mPb{`J1t-MS+6zvoWxzFDsRZtWibJ@H>0-a6iNzT1A)KKkFC8}IMb zXB{YC@cH5$_wQ`2&FBA3{Myg&%-TP*|8yH~+v|B2c9xcp?2G=s{IlHoe9C#XdE);T z{X4x*Tui_2$JN)@&t05xapCk&(<krGty%i_)q&TN>u(=BbWCpF$qHk`xG!P9-yST# zQ!e{{@qK>(Cp8N78viqXZu}a2VfpXLl9MO@XJMZ4`A@R3?rjDJ28CpgAYTTCDpdxC zhGqtapZ^&c8eTFmlo~KFyh>nTu$sZZAf7)d{-_%R1LGM_7srr_TUVy+%??f!IadFE z?@8Y+hO-KMCpWll><n5X(%oUQKyWo*SyA~EtCazQ$N#Y^_3h%^I@wRm-sozByz?55 z?hqa?4s-b%6HIceia$RqeR1y@mu$^7=Jw}*&Q<mWcx{xvbVHT%UE21oZ?0A?S<JVb z;rRQdS|a+~Rz>ZOwzoysA7QfL*sGlM=it5RkB(kSUzWtS{k+OdP2S16KkqEwG3CMx zv3x<n$<a%B_{Bx-ZzbQ!j$6L<c#7J-BQNUi);_jA{z~V2*v?;d9Wh4}{#4Al*m83A zqH|kYoojxj7XE+IU@hXfUMcK^aeiFNnH#5n1hkx1W|NlnwADMQ7cFvzM>BgG<9n6Y zeXq`Myf*pDqUS&Niakj#Y<5_GbmEc3w#n`ruU|hAp0mnNLeL}m%bb6KTRu+EJvZ5} z?S<CCuB!`jrmno2r88}ohN^_*mx-&Nt@PeoFS3p0w?kX!grhk(9Nur4QEk`0EStr% zu<SyD(X|JW*-WP{-TgFg9m|iXX*N4AIAxnp47#+@x@C*6-2CiMYhOORIDOsk)fv`Z zvn}PhMeQ%XJHOV1^C0KPx#3d{%;T&}rvCW;gmK2IgPH%e_~h)i@NZiAv%K$1{r8rC bd<@Fl)?W;*o$!`{fq}u()z4*}Q$iB})tM2l literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/1671.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/1671.png new file mode 100644 index 0000000000000000000000000000000000000000..5189a550be437d825ec88b09ec090bfd8138ac5c GIT binary patch literal 3003 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 literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/1684.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/1684.png new file mode 100644 index 0000000000000000000000000000000000000000..553b350cd38f66a8304aef45ca4c879f7559d5ff GIT binary patch literal 3124 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 N@O1TaS?83{1OTO~&bt5r literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/1758.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/1758.png new file mode 100644 index 0000000000000000000000000000000000000000..4e92314b7bd0ae2c79a532e0359a57edc262e506 GIT binary patch literal 3002 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 literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/1767.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/1767.png new file mode 100644 index 0000000000000000000000000000000000000000..472d05c29aa90043c2992380c7f924a6c7ebbbd8 GIT binary patch literal 3064 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 CQ@FVR literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/1784.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/1784.png new file mode 100644 index 0000000000000000000000000000000000000000..ceb8103b06c6bc457c5263c5adf2e454281dac20 GIT binary patch literal 302 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`($k<n8Xl@E-&h>|H*Y zfq{X&#M9T6{RWo=hoxj^g!)GY28IisE{-7<y~!yWR^R3`@=kfZCN;w}u1Bv&v}9jE z+KReWeTwH?rsNqNSaEQP<egtJtlG1cn!neIrLCx6cC6r;wEf|k`G0u6p1&gTtyWAe z!+=|nwfp`l0}#-uRPI%JcI5XoBk|*0_K67z2?++zf1XG<_gT=DM_%DYlKQ>vJiS5N zC9c&Aq=RHLrtEUPu+>HK%z*<3CTM(WaeTN*nVFfH`7q1P>?0Y9=Mprp$@8?u$Un?k x1y&QFT-YA5bcy5}<qutEY{rvPbeNeL{P>In-=9la#K6G7;OXk;vd$@?2>=5ebAtc? literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/1787.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/1787.png new file mode 100644 index 0000000000000000000000000000000000000000..7e25408dc26822567bdf78e54e4ded5eaadb3775 GIT binary patch literal 440 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`($k<n8Xl@E-&h>|H*Y zfq{X&#M9T6{U)P4yNZQC)Ujp;2F55)7sn8b-mOy%J)9B+8utIUt>yA^-Q&o?)xK>} z58Le~k0Rlm!VHcq4aEsf8A3{jRxY^KbZvpD21gc8lg1iXCGJUGYgj}d|EyW>saW!% z^<GK&o!WBta&@ME&c((%+qVDk&~_C#HM47>VC@anX}1n76^~|LCuO^o=i_gShtn5d zYg%n&myn!(?qtIJKlvN3oTw~ZZoDZbA#=UUx`^=WRuR(@>Vg;@)*pDc(d~cIyuZf0 zhn3<5PR(>W@MVVVdUqwMkO<2k55KK+(n`L<RD1ur%B0mjb+M-RH)cAS<!=%!ys+A< z<!{-g^;TUAA70~Laf^LE-_#oy%+%*41Sdp?TKd1TN%uXq>tyOGr<)TTf-b1EGUe5{ zX3JjRw&=F*ixSRD@7WH=&757r%COaW!i+*A>xBxP%VyLcEM0tJgTc}ba)p<kZgN=j w%)Dq@QvdC;O0$NtKU~od-cBj2*&e_5QO~hC8>@vF7#J8lUHx3vIVCg!0IjvX=>Px# literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/1809.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/1809.png new file mode 100644 index 0000000000000000000000000000000000000000..d1caf4f21030542284ed53c3c88e2aca2a061a69 GIT binary patch literal 2961 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 literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/1829.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/1829.png new file mode 100644 index 0000000000000000000000000000000000000000..d1caf4f21030542284ed53c3c88e2aca2a061a69 GIT binary patch literal 2961 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 literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/1868.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/1868.png new file mode 100644 index 0000000000000000000000000000000000000000..a1e2ea500745872e6060bf58f0e125ee9f762e95 GIT binary patch literal 3278 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 Sbsqx*1B0ilpUXO@geCw?HXG&u literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/1869.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/1869.png new file mode 100644 index 0000000000000000000000000000000000000000..45e13d35c7d3ef278ca8beaf967eab7b00348854 GIT binary patch literal 689 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`($k<n8Xl@E-&h>|H*Y zfq{X&#M9T6{RTH1gOcc~+#gRE7?^@RT^vI!dgoq>_PER_a{S}_|C@?_@9zG;CT&5; z1rBu~$C*18wX5iEnx~{K;B-XqTfihAd6N@d&1<G`=qkTee4+bF@ui{@FUxB7@SCjH z=PYBsyHqo3_WyaCu7xan{<Zu^fyHx<EuvXEo4c-Z>aD!LBA4UChnFQjYWnOxQ<Y89 zD>l@~B$xl>Z*yB*X!|JWBJ(tb_2xS&N{@R#Jb7SGMwh3DjG1@ft!uki^3*PP@Iu0} zb$g-J>XYZs_rJV7dwbLN{xH>TUAD^v&So}m*~X&rcE+KsSogp{!L-dY@7#%D5ZQZR z>#3B!+r1TYt5o>%Rz-7|bZn0CmtUk}<MDAO=e#|094{+qYje*(-@a;9g^irZ!K0hi zxNkD6?Fs+t!lZP_DSo4J<)qy&^W@5Vig%_?il2BRX8GlZCr&R+cx~<X*2Jjf=z%Zk znR@-vN4)|Uo8`9D1|Oa>h3#dr>%V+Ph1<&tH$SpnxmPRx)Z`0w$DSE}5IZdL-T2Oz zl2cDiStgcpO%hR)`deK&m*;9K*K;nPntTI;SCeL}Php6>P!Q#ADfBU@%&Oz|_O^ZI ze}DY_xAQSWO5T*pfPAILlMf}#oOg3(r7y#gv!0hrZnAm2{(0)#;m2RTIfsUdn$70j zeYfxMLkE$EHJy#?)I^JCw?35aUd(XF;d$2EH%ArD?@pe6<=#C%Utiu;hG*7tPq18O zaA}FUm8Oo~zs6vnrf2*|?c1*In&!OQ>B@YANBLnKrLTpUo+l{y`EK{xa!vB4+2k_? zi|2V5Y}6EQ?SJdPXyYNDAM+XybT9S&ng5qfJp7cF`~tB|1_lNOPgg&ebxsLQ0Q}BA AtN;K2 literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/1876.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/1876.png new file mode 100644 index 0000000000000000000000000000000000000000..6398ed535192024ccf662d56747b8268d9e9d4a0 GIT binary patch literal 2954 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 literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/1939.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/1939.png new file mode 100644 index 0000000000000000000000000000000000000000..7e25408dc26822567bdf78e54e4ded5eaadb3775 GIT binary patch literal 440 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`($k<n8Xl@E-&h>|H*Y zfq{X&#M9T6{U)P4yNZQC)Ujp;2F55)7sn8b-mOy%J)9B+8utIUt>yA^-Q&o?)xK>} z58Le~k0Rlm!VHcq4aEsf8A3{jRxY^KbZvpD21gc8lg1iXCGJUGYgj}d|EyW>saW!% z^<GK&o!WBta&@ME&c((%+qVDk&~_C#HM47>VC@anX}1n76^~|LCuO^o=i_gShtn5d zYg%n&myn!(?qtIJKlvN3oTw~ZZoDZbA#=UUx`^=WRuR(@>Vg;@)*pDc(d~cIyuZf0 zhn3<5PR(>W@MVVVdUqwMkO<2k55KK+(n`L<RD1ur%B0mjb+M-RH)cAS<!=%!ys+A< z<!{-g^;TUAA70~Laf^LE-_#oy%+%*41Sdp?TKd1TN%uXq>tyOGr<)TTf-b1EGUe5{ zX3JjRw&=F*ixSRD@7WH=&757r%COaW!i+*A>xBxP%VyLcEM0tJgTc}ba)p<kZgN=j w%)Dq@QvdC;O0$NtKU~od-cBj2*&e_5QO~hC8>@vF7#J8lUHx3vIVCg!0IjvX=>Px# literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/20.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/20.png new file mode 100644 index 0000000000000000000000000000000000000000..0bb0d4e877dfc90324faa34953da79e04d145f8b GIT binary patch literal 223 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`($k<n8Xl@E-&h>|H*Y zfq{X&#M9T6{U!?^ld;*A_d>-C3=EB)E{-7<y>Blo@*N5gXn9z_jo05HdV)$uUgLp+ zq;rj{U6KWtcrw>U#~$U<^02DgFF5&XZh1*s$Js``4=P39Z&du14Py`ZB|B$+_?OB? z)jfBTzW&sXal5rQd*O<N69y#{CrhkJ>b)cv>0D>;RFGk_+D{|D;QhvDLQSkX^S>|u az;V)1aiyD|^ezSl1_n=8KbLh*2~7a$(^G^1 literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/212.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/212.png new file mode 100644 index 0000000000000000000000000000000000000000..3319fa7f6f16eedf976ebabc0c88b1e2058cf39d GIT binary patch literal 312 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`($k<n8Xl@E-&h>|H*Y zfq{X&#M9T6{U$R9kD|%_18cn)7#MDOx;Tbd^q!q;>vz~epml%b%_B}`5t$him{}J! zChvT}cBfnT!qSc@r}Q)ef?SH&g%Xs1rfc}jtPoG}uDoQn_~Q1@Y4=Zke!JJG@r=lY z#|-6{=3hKmnQ_9oym?;s<Dz^0)!z-7etZo%u}E$Qcgup%d3tBwvz{ugv<PUvw@zy* zM@wjqhu70j(UHg7lmx`C7I?8AbW^;$?M{tWzWRrE+@33!+!jmr+<&=mb8+IegOO|B zIBm~}nE&&1^NP0P)7#p8y>EOmoqgon(ro6s^!0x$AJsBQU*Y@{@5}a&@w&17&A`lC Sw;3217(8A5T-G@yGywqqfQG&R literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/213.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/213.png new file mode 100644 index 0000000000000000000000000000000000000000..92b1190e3dca8bb2caac257ccc69b840192b34fe GIT binary patch literal 411 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`($k<n8Xl@E-&h>|H*Y zfq{X&#M9T6{U)=FfUtSuKciR%21Z*?7sn8b-lLN@>N^LDwC}IJUwtni%6F@;NMNst zneybN-L5J+Y0bVZOS@fMnjDjaoBubs97);`p(EC;6v(Ecv~X2uZv5Ts7i((QcHFPp zSM&4f6Pbg58jhuYaXY2kRpM(l<G-jk??!Xak4C&+JB4O{Z8(_TJXKhFrRmHIc4-z3 z<s~fEa=CFbe?)R*Z_a5K+1#nL^eSt~O~<F)rP9}9jvm?CdR%Y~|5Q!s54$#>{(DAg z#<BNDCdz0m-1#~5dsOAg3APr`67zV!&dZPcbAv62``0EW2IU9G&8IEMHtzhg%}oDZ zw{=a#tS2jdPm8lGQ-66cj%|5RFjs<sOw6y$hz$?c1RK^R8%^Ex!RDz(?A;{SLo;Om z%}RRsZ0XXrjIg4KHb?rtHms@tSNdMUfzxBV_M3lk<`r9evNs+4GxLY^gj3O+&1d2a R7#J8BJYD@<);T3K0RRv{u@(RT literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/216.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/216.png new file mode 100644 index 0000000000000000000000000000000000000000..f00450b7afc3e22cddcdeca9c540747dba82969e GIT binary patch literal 401 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`($k<n8Xl@E-&h>|H*Y zfq{X&#M9T6{RTIyxE`-uhUroU21a8~7sn8b-m6pgdovYE9J9YySuXK+hrlT*?&)1T zA!nAZ{J-F+*zTnrFaBp_c5y9KT)SZ5Gmc-(hYl(p<mkJl#Oam0<FNJLTLN3Yx{9>V z`&nzZXV3Y=(iO^g5*dQn7-cmqZd{$RYSGbWj34B+F64dZzcx*HMys;RUdD!`zQFVE z9*BDf#XE@26Pl?|Q}1oNxzozjGefz#Am+<d6Zw;&E?@upZ}@UdF<bWe6B!%+&%dUm zZEQ(;QDT?PlN)`hcj<$KlD4p&P1F1y#l<{)Bmd|Lm&Rqmri+o95mk?;{cRG9UQk(l z{KY}Jf0KJBMmX&W%e;AhZ~mKS`kc9`j@MVNjg(kvap*Hg%kjdZO3er<xrS+7$@65D zrQ+?|CMHT<%d21eW9q6!y5|@lOqbvNs<8Zl+?W4#N6izzCM|FNcXl5G0|SGntDnm{ Hr-UW|Nqw(u literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/218.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/218.png new file mode 100644 index 0000000000000000000000000000000000000000..52530626a429d202624f72c4309f1f106a8c87a4 GIT binary patch literal 2820 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 CrZ}De literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/220.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/220.png new file mode 100644 index 0000000000000000000000000000000000000000..b5964b2715b6fb4fd993384843aac0973395360d GIT binary patch literal 146 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`($k<n8Xl@E-&h>|H*Y zfq{X&#M9T6{U##^lc}{}zvL4J1_l#P7sn8b-eeo~72oDJvNd#ywe?B$FiD(`t#X`v yBKgV0my*7sJUl#Gc#>Ba^<FfPTg1l9a6Xe~yVuDZe;61T7(8A5T-G@yGywp#<SWVm literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/221.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/221.png new file mode 100644 index 0000000000000000000000000000000000000000..ff6071bad1d33253fb04d625b496cdb36bbddb3b GIT binary patch literal 245 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`($k<n8Xl@E-&h>|H*Y zfq{X&#M9T6{RTH11H1J+57jda3=GpfT^vI!dXrN!w*Eigz#P+=WVcN7KtikUyVHOC zkK29ScU<fEfddB)w0JiK8Dtr}WV`=^;ouP_F(<Ble}A4Y_+!a@_}A|VM}$|LIFX>~ z$=bX#LPGN1-#_OKo=Y7`sMd62(-U)R)1M-B=D>ji35o{~Bq$u>NEc@AF#2K7%zXHu zgGb4pKYhmb6Z1C6@GFOz*%^E|nfpVUhhgpurJX<GPR(IpU|{fc^>bP0l+XkKibh}q literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/222.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/222.png new file mode 100644 index 0000000000000000000000000000000000000000..08d9e225999a18374839a2cc754aee51df360ecd GIT binary patch literal 410 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`($k<n8Xl@E-&h>|H*Y zfq{X&#M9T6{RX!<w}s+;7R`wa42(9OE{-7<y;mpOdLIsuXq`V>Eq9iKX5H2x0Zt`X z!6R$!4_&<(`M+iHxl4O@=lR`Tnk*}`v?C~IrAL6r<yrl&gR)wW-Pu*SjQjf@{^$Gd zD6e?$9W+I7(j+;i3;d-?nwQ)z1j{<8u<AE1Oq%NzY$|3X*y^){$IoX^9?KUs&F?<* zAFGNlS@KY?*xrayLz?k#%XAgBb<d7n-Yorc&YC?%yMDDvXBOL@dhmAU!nlkALybba zh{fV*`wu?T5S+84E4H|0=~15KUXMeO`~N(?cPXjt-=rO;TXw7|x%ljlj<3VsOHZ$D z7H5y&>AGsCq3?3%v)=@S6V86iu#%ngM*aHxqb>!Hw3Jxd`}ul%)uW>MStbWbI2C;k zeDI=j@{j3RoKv64KB>)`#_o`vQT+V*Ww$G{u7CTyMKob^P~N>ozv>_8XH+EnPrEyZ RgMop8!PC{xWt~$(69B2PvKjyY literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/223.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/223.png new file mode 100644 index 0000000000000000000000000000000000000000..27da235bc70c04011749e7d5a0e3ee29be40662e GIT binary patch literal 151 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`($k<n8Xl@E-&h>|H*Y zfq{X&#M9T6{RTIyxS_<p_xCR_Ffdqpx;Tbd^d^hk%=$W?k=;V&<A)hir}MRQiq=ot zEL&|jnR~SiGcz-@upXz^!4(G=v-L~aWPNCm;$aZa=2F_Z!<e6efq}u()z4*}Q$iB} D?kOx$ literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/224.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/224.png new file mode 100644 index 0000000000000000000000000000000000000000..fba8996037e0cf45309c313628d775604cfff23b GIT binary patch literal 151 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`($k<n8Xl@E-&h>|H*Y zfq{X&#M9T6{RTIyxQQN*(moyr1_nz{7sn8b-eeo~72oDFvIoR}_$jgbP`q|dk!}Cf zzEGPB2eghKIB?)Vi+59yLDq*A2N$#TOW7=7V`ez`o=foeowlD03=9mOu6{1-oD!M< D5pXds literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/225.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/225.png new file mode 100644 index 0000000000000000000000000000000000000000..acc23943de8d5712d09ac176b9edbf2534bb001a GIT binary patch literal 147 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`($k<n8Xl@E-&h>|H*Y zfq{X&#M9T6{RTIyxT?UsSq<A67#K`FT^vI!dXxXeo&PYOkv)Mo?$m)b(ygI+H}?wj zTx3swbm`QAmf$uggRBoL4lZWvm$F&F#>{a2GKaK%*|kOn1_lOCS3j3^P6<r_sE98> literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/226.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/226.png new file mode 100644 index 0000000000000000000000000000000000000000..8f43316c680dd169ae90a297722331a65befdd80 GIT binary patch literal 256 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`($k<n8Xl@E-&h>|H*Y zfq{X&#M9T6{RWpTrwU`Ri|0ND28KnRE{-7<y>BnsavgFIXnR;*+PQjycZN$q^NoyT z&8F?2S>jwg(i4-HFL)rS(wq0s<J6SR9F79ZXC>`RPmuUJr$v=FWHsj({(8383X5e^ z&TW{+7Q+AK&Z2O!hCdl6&bNJ1J+Qk~KQF$Gb#^3=gUIhWL6(be<R7({n=$3^hc>2b z-v#@R2q%6NVUP_q*yqFeqPo-j2=BgqyG!$Xh5!65|6RL-Ni9feXUE%mdj<vu22WQ% Jmvv4FO#rEqV*daD literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/227.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/227.png new file mode 100644 index 0000000000000000000000000000000000000000..9d2a6556f0796c412ae9498ede3c5dd5982beaa5 GIT binary patch literal 2931 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 P1_lOCS3j3^P6<r_Ix=_G literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/228.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/228.png new file mode 100644 index 0000000000000000000000000000000000000000..efc38d4c716f41f2b207a4f6cc940983173be58e GIT binary patch literal 3019 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 E00lvl*8l(j literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/229.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/229.png new file mode 100644 index 0000000000000000000000000000000000000000..c433ed9e6da4ed1090acb54335e1d9b6fcad4ed0 GIT binary patch literal 164 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`($k<n8Xl@E-&h>|H*Y zfq{X&#M9T6{RWo^v!wcLJHLet3=D3bE{-7<y~!yV{D00juuFWd-&uR<*CH)D(;E!J zE2Z3c<rvvE3j}@mE_?dFzibWr$~=R^+HS|<tu5YqnpV7M{kY=b7IO)PJLmZni>K|~ R&A`CG;OXk;vd$@?2>_zXHNpS@ literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/230.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/230.png new file mode 100644 index 0000000000000000000000000000000000000000..3fe55dc10a1a738e059c6064485f43949a94d183 GIT binary patch literal 172 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`($k<n8Xl@E-&h>|H*Y zfq{X&#M9T6{RTIyxVlm0nZ*|w7#RFKT^vI!dXx7kD}JBf$kxy))^_Pi!nC(Jr=Djd z8YnLg`<)?SYybl1qEm_+)Y$%4p0$@c#sdO6Rj=P>OzMlg_b0)4QR_ix{T{}hX?(}$ UEsFoez`(%Z>FVdQ&MBb@0QqG)b^rhX literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/231.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/231.png new file mode 100644 index 0000000000000000000000000000000000000000..82ba43a3af028eea86b9fd02443953c638a90bc8 GIT binary patch literal 3043 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 literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/232.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/232.png new file mode 100644 index 0000000000000000000000000000000000000000..8577c25bd3c8b085a12c25030b81e5b304ddadae GIT binary patch literal 137 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`($k<n8Xl@E-&h>|H*Y zfq{X&#M9T6{RWpTD~rj@%z$VH1_o_U7sn8b-sCB_v%b!6WNYXYYwMHhVUqa&|G&Ld orSp{px3)#eizk}9@Uk(?IK>e?&+qtI1_lNOPgg&ebxsLQ0C=(~i2wiq literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/233.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/233.png new file mode 100644 index 0000000000000000000000000000000000000000..33066499d0a6623939dd1e9a83c8c5525558c77d GIT binary patch literal 253 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`($k<n8Xl@E-&h>|H*Y zfq{X&#M9T6{RWpTi?zvtQh@*l28Q{bE{-7<y~#G}E56NdWNYXYYwMHhVUqYCBciPJ zDeunz(+3V5IIv*h37;tkSz`Y@eqP`9ef~e=HMc%CCtmH7=Xr1cH~q)Q$s3|0I5dC! z`fKkT^ftY1ZF`-Ofq{X+oW0-L6XT5anc1zC<7!=4k1l>*FL|Z*9$50u9i=l0>Yf%B z9J^*THa0%IwAP-dU5x9{%_9<LPE5$PpY^$I#X*K6draP3%C&4@U|?YIboFyt=akR{ E0Q1CV761SM literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/234.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/234.png new file mode 100644 index 0000000000000000000000000000000000000000..b2fb61dbd0ea7f746536b65020019c1fa17e069d GIT binary patch literal 2837 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 W`*v>9u`>(|3=E#GelF{r5}E+i2}0Ze literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/235.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/235.png new file mode 100644 index 0000000000000000000000000000000000000000..de17bf8393dd9fc3c7b601d0e7f49553f76d1438 GIT binary patch literal 151 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`($k<n8Xl@E-&h>|H*Y zfq{X&#M9T6{RXoHr@8{)xfuxz3=Ec@E{-7<y~!y7XaAgUV2*hmUFZ}1Yp<x;&g<Go z`}fY!><;Z~Y;0`goX)Z|;mU)+W_MmW(+US(HinooF5^>`)y@nI3=E#GelF{r5}E)t Cqb~IT literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/236.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/236.png new file mode 100644 index 0000000000000000000000000000000000000000..4babeeb7ca2bd4af882bdaf462a6074499cfa9c0 GIT binary patch literal 380 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`($k<n8Xl@E-&h>|H*Y zfq{X&#M9T6{W>=fx3SulTkM+{7#QU|T^vI!dXrNOGJc(BU_G_yy~MkHVo46{+4JQR z0{;H(Y;0_7d}yXE@4R6PbDLDj0hZ()8Fy17rtIodJp9mvnftPRlT@eKk2lVmY=-;v zdFuZe8vgltyv3hCu)%Ok$=OIYHa51nKL0cK>kI!qe){9gpMSG2$fvm8T%DH1Ra<lZ z<beYRKJ>+Z_<d!=m)9)3|Nj5~U+>hF7wvBJXGd8($nr*K?^egJFN&J<mfbo3#camX zs`{^vPF*$kY>gi#COk+>NJyyo{O;y;*59ko3z$^gJzM&%MI_R&!0>~E?f1Ti+~$T= zZ3z<chWm>9CM>$H6E$nU<P8f+2?>cQk^gG!lWN)%tkMM2ekQwkT(rKnpJ)HVoV08E h=Nx$<S(V7c@G>g&m!U9EF9QPugQu&X%Q~loCIInnrF{SZ literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/237.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/237.png new file mode 100644 index 0000000000000000000000000000000000000000..85a0664c5ce94f045586951d41c38a96faf8a1ee GIT binary patch literal 240 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`($k<n8Xl@E-&h>|H*Y zfq{X&#M9T6{W>=fr=j|!{KgXu3=ESzT^vI!dXrODbp1Zxz`Q21@a2q4zw^UxJaJL3 zlbd|zM_*`PV`F0@=X92(30D#>@uofdcmBYcUgLR&4BUoYH&p){a#a0E`tg5$<HNsx zW^M83Id`{fG)FG|Z`9%TKOrF{A>l{W%$Zee^?Q#T`tZ|2yQOxfhVBu`KmYla4>w2U sakQU^Q1rWLFO$>7tH#_T#lz0<OGAw>x3VOFfq{X+)78&qol`;+0E2a1$N&HU literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/238.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/238.png new file mode 100644 index 0000000000000000000000000000000000000000..a587e353b2ed434f04c7ea3e24441ba2831f3e7b GIT binary patch literal 3037 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 a40D%8@|YfH@MB<LVDNPHb6Mw<&;$Tj$*Yb4 literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/239.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/239.png new file mode 100644 index 0000000000000000000000000000000000000000..9b2c63a54e4604533710f926fc89ddac2e9df95a GIT binary patch literal 2990 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 Y{Ptd_>z_3;FfcH9y85}Sb4q9e009Vw6951J literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/240.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/240.png new file mode 100644 index 0000000000000000000000000000000000000000..097a4dab5681fab5316683991a997572d216e1eb GIT binary patch literal 434 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`($k<n8Xl@E-&h>|H*Y zfq{X&#M9T6{RWpTrwY?4UkMfl2F4Ii7sn8b-nAD_Yqtc-9Q*j*ve<aN=BH`iJd4&$ z?OnQb)8Zv+o|1`+Pq=x8{bN{Jc=A-+gf(f;?Pn-0O_?>rQEKM&nQpy>eXZW>&id?4 zFMee?*MI+g<ym6xrIUAd-F1(<(<``Nev>>~hpPHcFV;8hjEhcct_x!Rb~wY)#PV?O z)ogB^8GSGE8yf=V+e^PODVD!^IXPt2owWfTZ#7pRdz&5Dn(+L*L-vdt-V$-sP1vkg z-Fxud%c(tD<x}Ca-OpBh?Q9Z0z5kH-Qpub9R6c(Av#)i@(YMQEw>~V`#l7hNAwJEB z_xVc}9%6M+o4oK?a?o=F&*hh05AI(jz%*_5*_;KT&!(g@2CSR%<+{05?Af&v6T+v3 zMjdB5o0QTy@9u^|-ecFz-~XP=ysmr3kIh_-X%9169du%jY!`a4^Ra2$V)ktd=6`r| rlI`H<+S>sPmbJT1{<zt<R^x!S@VE5a&$Ir5f}FwA)z4*}Q$iB}D?-PU literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/241.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/241.png new file mode 100644 index 0000000000000000000000000000000000000000..0080a167553681c5698549cf53da57cc3874e076 GIT binary patch literal 2888 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`(#+;1OBOz`!jG!i)^F z=14FwaQSCCI|l@0<d@_ZXXF<scse^P6cpvBW#*(ZFjU-{8=M{z{8G&J`@Jtt-W?57 zyz_%ZITV7Nx*J3$s%a^53V3xWF1#rkcu>&Ql|}l*f)3`szJ?yrKpmbgt{d!66c_b1 zFYf3%_4{G<;_PdCzCSzrZ|ilt=W9OC-F%+?00+-B592`72A-8pa)J+<j~_Yq@QI#7 zBbQ16g8;|o6vg7d%8U#@>TGPZl@74)V_>Yf%+0}Yz<2fm1DW>!{I8s5#xORtFditG zXyMJ#Aj05K)#tQ~!NHBOVeSmIV1@-O3<;-`lO8h!=rSaz*FU?=&@lJM%xXr4=qZY# zj0+|*C<v!^xG-c`Gpsou*5%3&VZb1g=6%GH;f5}QfoFJ{2g8Q#3<u5$aBpJZ;9)Qb z>}b_wV5w$EIH9au!O$|3LB#D-xXnlHbpp?|7#J#MZnD{_V(Ho#&7oV!9v-eIr*Y0x zTwBB}ktuPOgWjRanUY40Cj1XRpJ8BFFi}+SLG$Oo73cWYojYgNw~a4e_tk#3|4K<o zkN-VAzq-JIf#G3E-Nk=8`kSR1tl1iJ|1DB|$C44py`c1aciJX?hph|?Ufv4-TmT9i z*M$>y-n{wr$&(viN1UP)Pleb1OFtBUApCF6&pMkw-@iWC_eiDDD7Mj^<;R0VXTJC> zl{r6&vnA=yvwrtK+qwV$k-e;R#4~AUgqFzTK%v4umsvfZjg~5PI!)3%s(R^v%A@-_ zznSgsn=)+3vSX~CsJkLInfaTyx<Ew9fk)pN7(VUJKX^rhgSjE2`QiEU|L^Vpx-U>= zXh`#%RLH;(=c1w)a%!{vaSjFsmj#Vl8yuy-9F)*Gz$SB$_0B==KM7_nPAW$ZISDv% zr8LMCC1|c`a?)r!yFpefLH~+_tjU4EjJC-Ie0qmMcktO3@c&BWn0HWPPa`Lb;|UJo zM8#Vjj7eP)%6%N-Gh2Ts9`s-l>Q+%W*&!0B<UP^U!!W2TL?P5e_LFT9lVy91+pdY$ zCm4*H{<Q6JH=NSADbV%`&sOK1E6k-@+!k?PNGUO#)i1VS_JyJ?Qno#23!h(Doxy*r z-_H5C!GRYN?8ZlO4D^m2cG_s6!#O$m^hTvMJgbjMZ3tV#yu0&j^7)PBEJBU02RO}G z%AFJv<s3aCd?NgAc&t#6Q85v`#c9sT+!A<5U1{<P?=5P(1b-fpNHQ{PkMPh@z9!T! ztS?aA;e5ngMX1x+NPXu7CeMvaLM{nia=Vllr2JB6<!loVDdov0Z>3~!Vz->4qo94F z^~u~Pho2Zfk$$51DVl3;l0)H=AHk0_f=*?5Nj?>LYVwpVb%v2+=;B#HcULS75j5?O za$37^ThRKz_7%b=rL!#0Hj8<BFI~H6>Sd`6@r>`8>tB@Y61+QA&TsmK@Jpv(y1$tI zg85514{w`j^YM;!4awOO>=Nmc<r3>>_$-sW+%0)L#K7F}^^E5;`Df;bMrdu*su7)d zifgLZRJEznTKXX?S1nt0Zxwgw=g`w3{VU^wYuCAj8V5gK$$4ek>d;kl16~J92dA&J zUeUfPeMNqV{gS%KznyH6hkXwFJ1+@burdDeo?{B!$&#BZbQH6BSGScmnjTTxc=l#Z znbz(Ze`R-f+pb!<(9+r1%Q$><(B~;>_Uw;m6#ke~;>Y=1WBK&YbzS#F-fKS6lwM}y zv(qp&CVSPi>C+-sd#nyz?f!bN*}AvO=Pujpx;yfBBcJ1OFZCF8_w@dAtaG0S-weLH zoNKw5udUVBb$Y9^mr5_(?NYu!Z~40!^Y+Cx%=5`#ey?)x^ItNx`hP?I=Kfm#)tx7T zZ8MJw+ijk65;jLo3-fJc^^f2F80Z{(*ui;e;?%_H4_hYgylAuds#~uce^2JIn8zxQ zbC2a7Tdc;Wrl{ua`^xv-tRUZ=%QTl+`&j!NKYQlvqO;d#n$EU0yl(V-_Vd}-XW!qR z5LFSSvu(w;9jTt1o<uE+e79{+UTc(P<kE=HsMyVJYv-<2y|#Pp?&X5Zclu5CTRrbu z`r!>9x1HR!a=YY)r#IMcuiKWptu`?|Nj!b~(RGL4P2M}Xc2{lhUt4zG_M3dGWus*4 zinkPrScO^Ln{{r^JNw$BU#7j(Pmee+aQ=qz<88vHHIHP@4W513JzYF~XL0lAj_ywH zrqg=U?eu0#AG>>E?-Q?*uZ6J>t1f+=JA3o&LvL5yUjNSQUFN&?JM+(&%-5V3X<U5a z@CoM!fln{mbI+e@kbQqmoxihxWBS(T%KFLr6T{bD->`jY`Ks@U@5SxD*%i%yZ1>p4 z{GQRh$oMnn2ezNse%k+V{=E3s`_A>s|5N@~{lCbtyg`*Qow>8ou`!zI_m8R?#r=Ku zR<~2XZMyl^v1h?fM^VTArnOB^53W_rIPqq}TE*|rXPldOE|ae{pzg)B3+#!{61xxA z@u;`9w}!Xb_Z4(RNL@6XZd!ivj&t#SmtQW^T<*<IH}tn$uj^&1Ww%N%%jTB(E|XpM z$Mn)7&s>d|8{wJbEn}&twazRrXW#ulZ$Gy`n)`_Rakcmi{S&bTl?%@u`qH{wY^9!% zj@2{=pAJ8ZDIXjKv{s1qsD2VISMB4fJS2N4T}l6<*~N|<&M{hYexE$Fe5)qCnYhQa zQst=eQk|zeThv!h*yF?Nb9c7YJh5423b{tMR(lPbCrzAC=(I}Fck;IMSLx5v%1*CI zZQb<mXkPbreYvUZC$l$CSi>5r%eBpE*^7`Ujq6(Mo6=Lm)Apb3JY_j;^*rsfZ_jK# zb$f#OocHtpzZE(p^l;L)rET8fy0Q_^_O8jY++<T&d7JC8D64i`7~2|~9bMbBa<BTY zej7f0UEN-_D&OqJxPzyf4sK=4e$5@q^|ZD2^_}Z)WBnuaBkylb{M9yB+D^2yYn{k# z@#&)VH#F{4Je6+GKed16ohe&Zu0FCe<$T(uw3pBB>CTJho3?8Dv*~<!yf<%c;k_TW z<?YvRuDA84pVhd%yLp@Q&c*v}cI-)Ae)8N|Yx|HTAzwm%g_ym&ba!jw^&fc`-$_^R z`DXIw>h0(~-~Za3+;=;aG1T{J+SSzGp1(JLw_n$}>gA7VzjI^P`sEhBJ<fcI`7gUN z-?r;JuUwVAWE&FHe@*+fJKu5negEdZFW2QY;|=YdbL^3FflK9+m)|+>f0yI6x>eRw zz2+hNW%)AMbXol@r&*t7xy=rq^*cH#dYAthyNlOe-K+ZJep{Y@j)_fVrPt?>lbN?( zHeH^a{^@+r+^KVG>-2u!Nw~deTlMqgbN93O^WX0hD0z6v^?&zs>pj-zVm|FC`LyZw zQ{nI(;j`9T#pk{%d1do&@@4<yyXWklwQgrj_Re=zd$(4neSaxE&-~ooFMBILiv7QK zb)Kc|-Mycy^1mPb{`J1t-MS+6zvoWxzFDsRZtWibJ@H>0-a6iNzT1A)KKkFC8}IMb zXB{YC@cH5$_wQ`2&FBA3{Myg&%-TP*|8yH~+v|B2c9xcp?2G=s{IlHoe9C#XdE);T z{X4x*Tui_2$JN)@&t05xapCk&(<krGty%i_)q&TN>u(=BbWCpF$qHk`xG!P9-yST# zQ!e{{@qK>(Cp8N78viqXZu}a2VfpXLl9MO@XJMZ4`A@R3?rjDJ28CpgAYTTCDpdxC zhGqtapZ^&c8eTFmlo~KFyh>nTu$sZZAf7)d{-_%R14FT=i(^Q|tu0eFayA$+u;?3V zx{8!=nr|vvHHGgXOJCwc7O`a_JdV=tC+;&G|NJ38;u*6<gNvk1fz<-mtW%S8lw{Ul z?6Cfyapd=o%p-fX3d2fcZmtnLzWZXwa?^|>)3r7Vm+H(hIr4v^*S_dK3=9na|1&cf YXNooEd*6P<z`(%Z>FVdQ&MBb@0O{6PS^xk5 literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/242.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/242.png new file mode 100644 index 0000000000000000000000000000000000000000..9b775eb9a6204a8b6373c3486a2b6287d74363bd GIT binary patch literal 449 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`($k<n8Xl@E-&h>|H*Y zfq{X&#M9T6{RTIyxVpfaHIGag7#Nd1T^vI!dZ%9T*EpOgap2?o-R1A6$f!7JXl9!J zyd1>GH>tV1yC|5i@6<`pi9(*bn*S%A4ifV0n$#V{=cV~H&*avhZ8z;F+ZSKl^zGla z`}1z!{=8@YysCNMMb~^=s%dmeWlovquG6`<{@nIss8#cy;$=}bd-27+3WE6?EOvw( znizdCII&4is%1Mf!?lM((lRAlRlXN)OmwXHtXjN{#hT?!xz;c3uTMWt7FhUI{D=A4 zrVY*q^4gOYc*W1M=uTK;lfIDQTg?iQ2f5)qVY5rB<PJuBd%mF3dK%N7+^&UEll}A; zNyypPyxtyK?ag%~E0pK@tOe5p<HYCt1nTNE@J>%!;@7XXK1qW6=S7(ahHO3S#b2ww z{Ixpw`i}C;^@sXRl{pSP-eP=B;p+?ErUz@z3(aEHw|v`U{_5hDxAMO-|3+_QJhR<H z?aYPUDvg=)FR%2ciX1SztTQv`()!QGYbQOp;(Sr#fPPL!X<wJ?+Eok;3=E#GelF{r G5}E*Km&d38 literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/243.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/243.png new file mode 100644 index 0000000000000000000000000000000000000000..a0673c0e4e2786360e76bcd6ff6d65f8b29b7184 GIT binary patch literal 3452 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 literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/244.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/244.png new file mode 100644 index 0000000000000000000000000000000000000000..923e1368ef2a83749ad67facd7ce688a2409615a GIT binary patch literal 375 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`($k<n8Xl@E-&h>|H*Y zfq{X&#M9T6{RTIyxH`{{wfm|V7#JlzT^vI!de2U=^*$UR(RzNbr<8Nn<(3X7-J?p| z9xU=}+F?CIUV$r5ZxP44rU$Rq{9}A>bt`brZYyqCt&$9fC7vFAlV?A>*5AN>?_;IK zoQI;e<((P|n>b$D3wb-N_StslNfPIe-GWln*RRM?t5+6NJ#e>gVjI(6Zs~t@EXjI* z_s%d(xE4I)tH{UAE*1F)cpv>SIzDZ^Om3<7g8wW%Y%W5KTg3$CaK*?!SsZfr*sOzb z$CI-i)fwd8McP<z3Y`;W^VoCUdWk)|R~D(ycyxH}aW~)7sU=r=wy9p&S!5uQCebQ6 zP299Z{&<CCnpVi&8^tQOedoSi=C@qO(th>FKTCWztL#fTa$N4dZ)uc*U&Ho~&wunE gT_y5O`yOLUTyyH0@5|*G7#J8lUHx3vIVCg!0AFI9zW@LL literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/245.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/245.png new file mode 100644 index 0000000000000000000000000000000000000000..bcd4652e3b0874a14963db07e7b68276a62be233 GIT binary patch literal 2932 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`(#+;1OBOz`!jG!i)^F z=14FwaQSCCI|l@0<d@_ZXXF<scse^P6cpvBW#*(ZFjU-{8=M{z{8G&J`@Jtt-W?57 zyz_%ZITV7Nx*J3$s%a^53V3xWF1#rkcu>&Ql|}l*f)3`szJ?yrKpmbgt{d!66c_b1 zFYf3%_4{G<;_PdCzCSzrZ|ilt=W9OC-F%+?00+-B592`72A-8pa)J+<j~_Yq@QI#7 zBbQ16g8;|o6vg7d%8U#@>TGPZl@74)V_>Yf%+0}Yz<2fm1DW>!{I8s5#xORtFditG zXyMJ#Aj05K)#tQ~!NHBOVeSmIV1@-O3<;-`lO8h!=rSaz*FU?=&@lJM%xXr4=qZY# zj0+|*C<v!^xG-c`Gpsou*5%3&VZb1g=6%GH;f5}QfoFJ{2g8Q#3<u5$aBpJZ;9)Qb z>}b_wV5w$EIH9au!O$|3LB#D-xXnlHbpp?|7#J#MZnD{_V(Ho#&7oV!9v-eIr*Y0x zTwBB}ktuPOgWjRanUY40Cj1XRpJ8BFFi}+SLG$Oo73cWYojYgNw~a4e_tk#3|4K<o zkN-VAzq-JIf#G3E-Nk=8`kSR1tl1iJ|1DB|$C44py`c1aciJX?hph|?Ufv4-TmT9i z*M$>y-n{wr$&(viN1UP)Pleb1OFtBUApCF6&pMkw-@iWC_eiDDD7Mj^<;R0VXTJC> zl{r6&vnA=yvwrtK+qwV$k-e;R#4~AUgqFzTK%v4umsvfZjg~5PI!)3%s(R^v%A@-_ zznSgsn=)+3vSX~CsJkLInfaTyx<Ew9fk)pN7(VUJKX^rhgSjE2`QiEU|L^Vpx-U>= zXh`#%RLH;(=c1w)a%!{vaSjFsmj#Vl8yuy-9F)*Gz$SB$_0B==KM7_nPAW$ZISDv% zr8LMCC1|c`a?)r!yFpefLH~+_tjU4EjJC-Ie0qmMcktO3@c&BWn0HWPPa`Lb;|UJo zM8#Vjj7eP)%6%N-Gh2Ts9`s-l>Q+%W*&!0B<UP^U!!W2TL?P5e_LFT9lVy91+pdY$ zCm4*H{<Q6JH=NSADbV%`&sOK1E6k-@+!k?PNGUO#)i1VS_JyJ?Qno#23!h(Doxy*r z-_H5C!GRYN?8ZlO4D^m2cG_s6!#O$m^hTvMJgbjMZ3tV#yu0&j^7)PBEJBU02RO}G z%AFJv<s3aCd?NgAc&t#6Q85v`#c9sT+!A<5U1{<P?=5P(1b-fpNHQ{PkMPh@z9!T! ztS?aA;e5ngMX1x+NPXu7CeMvaLM{nia=Vllr2JB6<!loVDdov0Z>3~!Vz->4qo94F z^~u~Pho2Zfk$$51DVl3;l0)H=AHk0_f=*?5Nj?>LYVwpVb%v2+=;B#HcULS75j5?O za$37^ThRKz_7%b=rL!#0Hj8<BFI~H6>Sd`6@r>`8>tB@Y61+QA&TsmK@Jpv(y1$tI zg85514{w`j^YM;!4awOO>=Nmc<r3>>_$-sW+%0)L#K7F}^^E5;`Df;bMrdu*su7)d zifgLZRJEznTKXX?S1nt0Zxwgw=g`w3{VU^wYuCAj8V5gK$$4ek>d;kl16~J92dA&J zUeUfPeMNqV{gS%KznyH6hkXwFJ1+@burdDeo?{B!$&#BZbQH6BSGScmnjTTxc=l#Z znbz(Ze`R-f+pb!<(9+r1%Q$><(B~;>_Uw;m6#ke~;>Y=1WBK&YbzS#F-fKS6lwM}y zv(qp&CVSPi>C+-sd#nyz?f!bN*}AvO=Pujpx;yfBBcJ1OFZCF8_w@dAtaG0S-weLH zoNKw5udUVBb$Y9^mr5_(?NYu!Z~40!^Y+Cx%=5`#ey?)x^ItNx`hP?I=Kfm#)tx7T zZ8MJw+ijk65;jLo3-fJc^^f2F80Z{(*ui;e;?%_H4_hYgylAuds#~uce^2JIn8zxQ zbC2a7Tdc;Wrl{ua`^xv-tRUZ=%QTl+`&j!NKYQlvqO;d#n$EU0yl(V-_Vd}-XW!qR z5LFSSvu(w;9jTt1o<uE+e79{+UTc(P<kE=HsMyVJYv-<2y|#Pp?&X5Zclu5CTRrbu z`r!>9x1HR!a=YY)r#IMcuiKWptu`?|Nj!b~(RGL4P2M}Xc2{lhUt4zG_M3dGWus*4 zinkPrScO^Ln{{r^JNw$BU#7j(Pmee+aQ=qz<88vHHIHP@4W513JzYF~XL0lAj_ywH zrqg=U?eu0#AG>>E?-Q?*uZ6J>t1f+=JA3o&LvL5yUjNSQUFN&?JM+(&%-5V3X<U5a z@CoM!fln{mbI+e@kbQqmoxihxWBS(T%KFLr6T{bD->`jY`Ks@U@5SxD*%i%yZ1>p4 z{GQRh$oMnn2ezNse%k+V{=E3s`_A>s|5N@~{lCbtyg`*Qow>8ou`!zI_m8R?#r=Ku zR<~2XZMyl^v1h?fM^VTArnOB^53W_rIPqq}TE*|rXPldOE|ae{pzg)B3+#!{61xxA z@u;`9w}!Xb_Z4(RNL@6XZd!ivj&t#SmtQW^T<*<IH}tn$uj^&1Ww%N%%jTB(E|XpM z$Mn)7&s>d|8{wJbEn}&twazRrXW#ulZ$Gy`n)`_Rakcmi{S&bTl?%@u`qH{wY^9!% zj@2{=pAJ8ZDIXjKv{s1qsD2VISMB4fJS2N4T}l6<*~N|<&M{hYexE$Fe5)qCnYhQa zQst=eQk|zeThv!h*yF?Nb9c7YJh5423b{tMR(lPbCrzAC=(I}Fck;IMSLx5v%1*CI zZQb<mXkPbreYvUZC$l$CSi>5r%eBpE*^7`Ujq6(Mo6=Lm)Apb3JY_j;^*rsfZ_jK# zb$f#OocHtpzZE(p^l;L)rET8fy0Q_^_O8jY++<T&d7JC8D64i`7~2|~9bMbBa<BTY zej7f0UEN-_D&OqJxPzyf4sK=4e$5@q^|ZD2^_}Z)WBnuaBkylb{M9yB+D^2yYn{k# z@#&)VH#F{4Je6+GKed16ohe&Zu0FCe<$T(uw3pBB>CTJho3?8Dv*~<!yf<%c;k_TW z<?YvRuDA84pVhd%yLp@Q&c*v}cI-)Ae)8N|Yx|HTAzwm%g_ym&ba!jw^&fc`-$_^R z`DXIw>h0(~-~Za3+;=;aG1T{J+SSzGp1(JLw_n$}>gA7VzjI^P`sEhBJ<fcI`7gUN z-?r;JuUwVAWE&FHe@*+fJKu5negEdZFW2QY;|=YdbL^3FflK9+m)|+>f0yI6x>eRw zz2+hNW%)AMbXol@r&*t7xy=rq^*cH#dYAthyNlOe-K+ZJep{Y@j)_fVrPt?>lbN?( zHeH^a{^@+r+^KVG>-2u!Nw~deTlMqgbN93O^WX0hD0z6v^?&zs>pj-zVm|FC`LyZw zQ{nI(;j`9T#pk{%d1do&@@4<yyXWklwQgrj_Re=zd$(4neSaxE&-~ooFMBILiv7QK zb)Kc|-Mycy^1mPb{`J1t-MS+6zvoWxzFDsRZtWibJ@H>0-a6iNzT1A)KKkFC8}IMb zXB{YC@cH5$_wQ`2&FBA3{Myg&%-TP*|8yH~+v|B2c9xcp?2G=s{IlHoe9C#XdE);T z{X4x*Tui_2$JN)@&t05xapCk&(<krGty%i_)q&TN>u(=BbWCpF$qHk`xG!P9-yST# zQ!e{{@qK>(Cp8N78viqXZu}a2VfpXLl9MO@XJMZ4`A@R3?rjDJ28CpgAYTTCDpdxC zhGqtapZ^&c8eTFmlo~KFyh>nTu$sZZAf7)d{-_%R1H*hz7srr_TS<TZ|F>t>We{fW zWjI}_SUSfqEdIk!iQR|dS35pU`X%va>O=Wb-hby09Qg3?e|+1t_4<<c{{KJyVRGZA zDTfXnIB?*=i30~VynF867Q5fh*yi8&*@<lZJj~Y0%7<I3AHB~v+90QLJAsXjjjdLU zuPucykxk5vjZMzYgX8R9MV*TGy0b-H*`zlY7)op|;N2KvsKS#bQ`9Pu!0`OPwo$d( SFHr^t1_n=8KbLh*2~7a>uWwWU literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/246.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/246.png new file mode 100644 index 0000000000000000000000000000000000000000..f8ad19709be8b5d8177f14a5ecd177bb39b10b60 GIT binary patch literal 3646 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`(#+;1OBOz`!jG!i)^F z=14FwaQSCCI|l@0<d@_ZXXF<scse^P6cpvBW#*(ZFjU-{8=M{z{8G&J`@Jtt-W?57 zyz_%ZITV7Nx*J3$s%a^53V3xWF1#rkcu>&Ql|}l*f)3`szJ?yrKpmbgt{d!66c_b1 zFYf3%_4{G<;_PdCzCSzrZ|ilt=W9OC-F%+?00+-B592`72A-8pa)J+<j~_Yq@QI#7 zBbQ16g8;|o6vg7d%8U#@>TGPZl@74)V_>Yf%+0}Yz<2fm1DW>!{I8s5#xORtFditG zXyMJ#Aj05K)#tQ~!NHBOVeSmIV1@-O3<;-`lO8h!=rSaz*FU?=&@lJM%xXr4=qZY# zj0+|*C<v!^xG-c`Gpsou*5%3&VZb1g=6%GH;f5}QfoFJ{2g8Q#3<u5$aBpJZ;9)Qb z>}b_wV5w$EIH9au!O$|3LB#D-xXnlHbpp?|7#J#MZnD{_V(Ho#&7oV!9v-eIr*Y0x zTwBB}ktuPOgWjRanUY40Cj1XRpJ8BFFi}+SLG$Oo73cWYojYgNw~a4e_tk#3|4K<o zkN-VAzq-JIf#G3E-Nk=8`kSR1tl1iJ|1DB|$C44py`c1aciJX?hph|?Ufv4-TmT9i z*M$>y-n{wr$&(viN1UP)Pleb1OFtBUApCF6&pMkw-@iWC_eiDDD7Mj^<;R0VXTJC> zl{r6&vnA=yvwrtK+qwV$k-e;R#4~AUgqFzTK%v4umsvfZjg~5PI!)3%s(R^v%A@-_ zznSgsn=)+3vSX~CsJkLInfaTyx<Ew9fk)pN7(VUJKX^rhgSjE2`QiEU|L^Vpx-U>= zXh`#%RLH;(=c1w)a%!{vaSjFsmj#Vl8yuy-9F)*Gz$SB$_0B==KM7_nPAW$ZISDv% zr8LMCC1|c`a?)r!yFpefLH~+_tjU4EjJC-Ie0qmMcktO3@c&BWn0HWPPa`Lb;|UJo zM8#Vjj7eP)%6%N-Gh2Ts9`s-l>Q+%W*&!0B<UP^U!!W2TL?P5e_LFT9lVy91+pdY$ zCm4*H{<Q6JH=NSADbV%`&sOK1E6k-@+!k?PNGUO#)i1VS_JyJ?Qno#23!h(Doxy*r z-_H5C!GRYN?8ZlO4D^m2cG_s6!#O$m^hTvMJgbjMZ3tV#yu0&j^7)PBEJBU02RO}G z%AFJv<s3aCd?NgAc&t#6Q85v`#c9sT+!A<5U1{<P?=5P(1b-fpNHQ{PkMPh@z9!T! ztS?aA;e5ngMX1x+NPXu7CeMvaLM{nia=Vllr2JB6<!loVDdov0Z>3~!Vz->4qo94F z^~u~Pho2Zfk$$51DVl3;l0)H=AHk0_f=*?5Nj?>LYVwpVb%v2+=;B#HcULS75j5?O za$37^ThRKz_7%b=rL!#0Hj8<BFI~H6>Sd`6@r>`8>tB@Y61+QA&TsmK@Jpv(y1$tI zg85514{w`j^YM;!4awOO>=Nmc<r3>>_$-sW+%0)L#K7F}^^E5;`Df;bMrdu*su7)d zifgLZRJEznTKXX?S1nt0Zxwgw=g`w3{VU^wYuCAj8V5gK$$4ek>d;kl16~J92dA&J zUeUfPeMNqV{gS%KznyH6hkXwFJ1+@burdDeo?{B!$&#BZbQH6BSGScmnjTTxc=l#Z znbz(Ze`R-f+pb!<(9+r1%Q$><(B~;>_Uw;m6#ke~;>Y=1WBK&YbzS#F-fKS6lwM}y zv(qp&CVSPi>C+-sd#nyz?f!bN*}AvO=Pujpx;yfBBcJ1OFZCF8_w@dAtaG0S-weLH zoNKw5udUVBb$Y9^mr5_(?NYu!Z~40!^Y+Cx%=5`#ey?)x^ItNx`hP?I=Kfm#)tx7T zZ8MJw+ijk65;jLo3-fJc^^f2F80Z{(*ui;e;?%_H4_hYgylAuds#~uce^2JIn8zxQ zbC2a7Tdc;Wrl{ua`^xv-tRUZ=%QTl+`&j!NKYQlvqO;d#n$EU0yl(V-_Vd}-XW!qR z5LFSSvu(w;9jTt1o<uE+e79{+UTc(P<kE=HsMyVJYv-<2y|#Pp?&X5Zclu5CTRrbu z`r!>9x1HR!a=YY)r#IMcuiKWptu`?|Nj!b~(RGL4P2M}Xc2{lhUt4zG_M3dGWus*4 zinkPrScO^Ln{{r^JNw$BU#7j(Pmee+aQ=qz<88vHHIHP@4W513JzYF~XL0lAj_ywH zrqg=U?eu0#AG>>E?-Q?*uZ6J>t1f+=JA3o&LvL5yUjNSQUFN&?JM+(&%-5V3X<U5a z@CoM!fln{mbI+e@kbQqmoxihxWBS(T%KFLr6T{bD->`jY`Ks@U@5SxD*%i%yZ1>p4 z{GQRh$oMnn2ezNse%k+V{=E3s`_A>s|5N@~{lCbtyg`*Qow>8ou`!zI_m8R?#r=Ku zR<~2XZMyl^v1h?fM^VTArnOB^53W_rIPqq}TE*|rXPldOE|ae{pzg)B3+#!{61xxA z@u;`9w}!Xb_Z4(RNL@6XZd!ivj&t#SmtQW^T<*<IH}tn$uj^&1Ww%N%%jTB(E|XpM z$Mn)7&s>d|8{wJbEn}&twazRrXW#ulZ$Gy`n)`_Rakcmi{S&bTl?%@u`qH{wY^9!% zj@2{=pAJ8ZDIXjKv{s1qsD2VISMB4fJS2N4T}l6<*~N|<&M{hYexE$Fe5)qCnYhQa zQst=eQk|zeThv!h*yF?Nb9c7YJh5423b{tMR(lPbCrzAC=(I}Fck;IMSLx5v%1*CI zZQb<mXkPbreYvUZC$l$CSi>5r%eBpE*^7`Ujq6(Mo6=Lm)Apb3JY_j;^*rsfZ_jK# zb$f#OocHtpzZE(p^l;L)rET8fy0Q_^_O8jY++<T&d7JC8D64i`7~2|~9bMbBa<BTY zej7f0UEN-_D&OqJxPzyf4sK=4e$5@q^|ZD2^_}Z)WBnuaBkylb{M9yB+D^2yYn{k# z@#&)VH#F{4Je6+GKed16ohe&Zu0FCe<$T(uw3pBB>CTJho3?8Dv*~<!yf<%c;k_TW z<?YvRuDA84pVhd%yLp@Q&c*v}cI-)Ae)8N|Yx|HTAzwm%g_ym&ba!jw^&fc`-$_^R z`DXIw>h0(~-~Za3+;=;aG1T{J+SSzGp1(JLw_n$}>gA7VzjI^P`sEhBJ<fcI`7gUN z-?r;JuUwVAWE&FHe@*+fJKu5negEdZFW2QY;|=YdbL^3FflK9+m)|+>f0yI6x>eRw zz2+hNW%)AMbXol@r&*t7xy=rq^*cH#dYAthyNlOe-K+ZJep{Y@j)_fVrPt?>lbN?( zHeH^a{^@+r+^KVG>-2u!Nw~deTlMqgbN93O^WX0hD0z6v^?&zs>pj-zVm|FC`LyZw zQ{nI(;j`9T#pk{%d1do&@@4<yyXWklwQgrj_Re=zd$(4neSaxE&-~ooFMBILiv7QK zb)Kc|-Mycy^1mPb{`J1t-MS+6zvoWxzFDsRZtWibJ@H>0-a6iNzT1A)KKkFC8}IMb zXB{YC@cH5$_wQ`2&FBA3{Myg&%-TP*|8yH~+v|B2c9xcp?2G=s{IlHoe9C#XdE);T z{X4x*Tui_2$JN)@&t05xapCk&(<krGty%i_)q&TN>u(=BbWCpF$qHk`xG!P9-yST# zQ!e{{@qK>(Cp8N78viqXZu}a2VfpXLl9MO@XJMZ4`A@R3?rjDJ28CpgAYTTCDpdxC zhGqtapZ^&c8eTFmlo~KFyh>nTu$sZZAf7)d{-_%R19PUQi(^Q|tt(Sr`rl?{Xqz9; z-*{=$rRLQ#(+)4&a)OVIF^R>sfX#flqmZ!qq|{?GC4GC2UwEOOyev(=Co-+%^2(DO zZimuRCLee<tt6+oZE=RBH@j|YoPh?b*X{Z8(=xuXziECS|6$Mh*?XEax@<Z;DjX(S z`qe0Z+Ay&{|L)V6{<+t`M_E*Sl1PvL-J-Am=j_ES+jj4i6W!dLlD;Xgf_{G4(%YIa zV_WUhkO<zAFFi#k&5nNNO`9cO-@+L#u<*%D{Uh7vM#bq&aH_OC{4SJ>e{ak4*YXBy zcTAKhvPg}8{O74**Jsl+zr!lO2k1sxsowu@<l|uFkh!e&*s8Z*Vn2U;ebuw%C0EPF zU(er7);acg&28BwQ)UV-x%B&0tnDYpNGsL(wb{;d-z)07x2^af$l*3~?uAX413ZiG z+9u81oX5|^RMp!gvs9+jCE@ScvP=B?do(;EzpQ@{d(+7!CCjWOw_uv^dlSPa@0XW< z;bNTME|e?je!oKOypNHr?c$89Tq$!e^4z<<RLSh^lO48g6Ba&aD5!~Ps^{(teHLW! z_|cb=IcM+a`nbum-`*X#EO(K<uadIo*(Y-u<ZtcvXz}`2Y*W23{>zakF?0F_Bf1ha z12&&76ReIkRyJ0AVx+0-D^|4EIHq&i!>{d`EA&z{g%XmT51m-MIcI&Y>OR#8OV2IJ zKhPPs*rB52zvo5`|HCh)^sh2ve!NcM=gr$2{PmJ_&nd`sG6_WVEeKMXIC)`Gm0nBK z)E>KMOO~E+T)uirZ;0?WPx+~-ZPiDv|10Ti?qi*|#>nV#q+0ayBW5P<t*W!nX3S}S zVkF~dZ?(1Q&l?jlrfd}<PBG`~h<1A?q1kGR`p?o%{<hh8`^4PV)S$^vIjZCS2Hwd% zyKr~?oBLnCo6p#3_~zKlI432JH*3u|O7MLCEw2}{(sRmeqm!33KUO_oq1$0x81A@B zumAJ(;~htZS*BkX-1lma?md~p%a>9Prd%<4AOG~s`Q|HcPAuNItm8w}l;FABFJ=d2 z*52y!QM+)__>_~vna0|u9gn9MEDO0*efK1{|4c*4(w1q;9QpP4w8N%J{&=~4|BKxZ zQ`#+OE3Xyh;n{6@J=uM!$D+SekAG;rW^vinBSG^}bnexZtf@8EZCz^WSc-jZdre(S qzFNN6YuB3=&2{MiyOw{F48m`-Ydg;z7G+>yVDNPHb6Mw<&;$S%QPtT1 literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/247.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/247.png new file mode 100644 index 0000000000000000000000000000000000000000..9318eb8fe70febc98c026e9a4ffd1afa3d3208d2 GIT binary patch literal 3740 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 literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/248.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/248.png new file mode 100644 index 0000000000000000000000000000000000000000..b2cb6d37d7b7957319f3398bdb7ddf50789007dd GIT binary patch literal 3105 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 literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/249.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/249.png new file mode 100644 index 0000000000000000000000000000000000000000..2d785b7516a7e614ab9928437b520a57d6c700e3 GIT binary patch literal 2972 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 I=akR{0PVMo*#H0l literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/250.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/250.png new file mode 100644 index 0000000000000000000000000000000000000000..0a68f35de952e90fac0b33b40674f3fb9c870c29 GIT binary patch literal 323 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`($k<n8Xl@E-&h>|H*Y zfq{X&#M9T6{RWpTD}#LC&K!9L28O4eE{-7<y;m<8dNDgn9R2v;eCAyiW-U%mGe*Oe zZ+sG$FG&B$_w5nm8eQ9lgt=bUoSuq-I%~}zWGSiaK78iJ5})saN6H)GKi(5wH(&YG zlAxf89sN#{!3=A}a&P3Hd+p4ZEx$+nH_x-<PwJxCrJ2&d3Qm7(y(%c^n25Lz|K{Kx zHn9bn=~sG^^?#}ex*Pv=3J4QyobKAc^7c{p6My+8yY{bWWp2CvsA2V+rfFwS#x$SY z<bB}9@!7w1=hgMC5cnW*XjN?W?fsQk9=%pN8Xf)jacSV*NB#-7ciKzlvz(ijSugzI b|LY&(`wzNv*PG7<1s8*-tDnm{r-UW|pL&I{ literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/251.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/251.png new file mode 100644 index 0000000000000000000000000000000000000000..e4fe22ffc7676114a7787ed83693d5b87dc35f50 GIT binary patch literal 3025 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`(#+;1OBOz`!jG!i)^F z=14FwaQSCCI|l@0<d@_ZXXF<scse^P6cpvBW#*(ZFjU-{8=M{z{8G&J`@Jtt-W?57 zyz_%ZITV7Nx*J3$s%a^53V3xWF1#rkcu>&Ql|}l*f)3`szJ?yrKpmbgt{d!66c_b1 zFYf3%_4{G<;_PdCzCSzrZ|ilt=W9OC-F%+?00+-B592`72A-8pa)J+<j~_Yq@QI#7 zBbQ16g8;|o6vg7d%8U#@>TGPZl@74)V_>Yf%+0}Yz<2fm1DW>!{I8s5#xORtFditG zXyMJ#Aj05K)#tQ~!NHBOVeSmIV1@-O3<;-`lO8h!=rSaz*FU?=&@lJM%xXr4=qZY# zj0+|*C<v!^xG-c`Gpsou*5%3&VZb1g=6%GH;f5}QfoFJ{2g8Q#3<u5$aBpJZ;9)Qb z>}b_wV5w$EIH9au!O$|3LB#D-xXnlHbpp?|7#J#MZnD{_V(Ho#&7oV!9v-eIr*Y0x zTwBB}ktuPOgWjRanUY40Cj1XRpJ8BFFi}+SLG$Oo73cWYojYgNw~a4e_tk#3|4K<o zkN-VAzq-JIf#G3E-Nk=8`kSR1tl1iJ|1DB|$C44py`c1aciJX?hph|?Ufv4-TmT9i z*M$>y-n{wr$&(viN1UP)Pleb1OFtBUApCF6&pMkw-@iWC_eiDDD7Mj^<;R0VXTJC> zl{r6&vnA=yvwrtK+qwV$k-e;R#4~AUgqFzTK%v4umsvfZjg~5PI!)3%s(R^v%A@-_ zznSgsn=)+3vSX~CsJkLInfaTyx<Ew9fk)pN7(VUJKX^rhgSjE2`QiEU|L^Vpx-U>= zXh`#%RLH;(=c1w)a%!{vaSjFsmj#Vl8yuy-9F)*Gz$SB$_0B==KM7_nPAW$ZISDv% zr8LMCC1|c`a?)r!yFpefLH~+_tjU4EjJC-Ie0qmMcktO3@c&BWn0HWPPa`Lb;|UJo zM8#Vjj7eP)%6%N-Gh2Ts9`s-l>Q+%W*&!0B<UP^U!!W2TL?P5e_LFT9lVy91+pdY$ zCm4*H{<Q6JH=NSADbV%`&sOK1E6k-@+!k?PNGUO#)i1VS_JyJ?Qno#23!h(Doxy*r z-_H5C!GRYN?8ZlO4D^m2cG_s6!#O$m^hTvMJgbjMZ3tV#yu0&j^7)PBEJBU02RO}G z%AFJv<s3aCd?NgAc&t#6Q85v`#c9sT+!A<5U1{<P?=5P(1b-fpNHQ{PkMPh@z9!T! ztS?aA;e5ngMX1x+NPXu7CeMvaLM{nia=Vllr2JB6<!loVDdov0Z>3~!Vz->4qo94F z^~u~Pho2Zfk$$51DVl3;l0)H=AHk0_f=*?5Nj?>LYVwpVb%v2+=;B#HcULS75j5?O za$37^ThRKz_7%b=rL!#0Hj8<BFI~H6>Sd`6@r>`8>tB@Y61+QA&TsmK@Jpv(y1$tI zg85514{w`j^YM;!4awOO>=Nmc<r3>>_$-sW+%0)L#K7F}^^E5;`Df;bMrdu*su7)d zifgLZRJEznTKXX?S1nt0Zxwgw=g`w3{VU^wYuCAj8V5gK$$4ek>d;kl16~J92dA&J zUeUfPeMNqV{gS%KznyH6hkXwFJ1+@burdDeo?{B!$&#BZbQH6BSGScmnjTTxc=l#Z znbz(Ze`R-f+pb!<(9+r1%Q$><(B~;>_Uw;m6#ke~;>Y=1WBK&YbzS#F-fKS6lwM}y zv(qp&CVSPi>C+-sd#nyz?f!bN*}AvO=Pujpx;yfBBcJ1OFZCF8_w@dAtaG0S-weLH zoNKw5udUVBb$Y9^mr5_(?NYu!Z~40!^Y+Cx%=5`#ey?)x^ItNx`hP?I=Kfm#)tx7T zZ8MJw+ijk65;jLo3-fJc^^f2F80Z{(*ui;e;?%_H4_hYgylAuds#~uce^2JIn8zxQ zbC2a7Tdc;Wrl{ua`^xv-tRUZ=%QTl+`&j!NKYQlvqO;d#n$EU0yl(V-_Vd}-XW!qR z5LFSSvu(w;9jTt1o<uE+e79{+UTc(P<kE=HsMyVJYv-<2y|#Pp?&X5Zclu5CTRrbu z`r!>9x1HR!a=YY)r#IMcuiKWptu`?|Nj!b~(RGL4P2M}Xc2{lhUt4zG_M3dGWus*4 zinkPrScO^Ln{{r^JNw$BU#7j(Pmee+aQ=qz<88vHHIHP@4W513JzYF~XL0lAj_ywH zrqg=U?eu0#AG>>E?-Q?*uZ6J>t1f+=JA3o&LvL5yUjNSQUFN&?JM+(&%-5V3X<U5a z@CoM!fln{mbI+e@kbQqmoxihxWBS(T%KFLr6T{bD->`jY`Ks@U@5SxD*%i%yZ1>p4 z{GQRh$oMnn2ezNse%k+V{=E3s`_A>s|5N@~{lCbtyg`*Qow>8ou`!zI_m8R?#r=Ku zR<~2XZMyl^v1h?fM^VTArnOB^53W_rIPqq}TE*|rXPldOE|ae{pzg)B3+#!{61xxA z@u;`9w}!Xb_Z4(RNL@6XZd!ivj&t#SmtQW^T<*<IH}tn$uj^&1Ww%N%%jTB(E|XpM z$Mn)7&s>d|8{wJbEn}&twazRrXW#ulZ$Gy`n)`_Rakcmi{S&bTl?%@u`qH{wY^9!% zj@2{=pAJ8ZDIXjKv{s1qsD2VISMB4fJS2N4T}l6<*~N|<&M{hYexE$Fe5)qCnYhQa zQst=eQk|zeThv!h*yF?Nb9c7YJh5423b{tMR(lPbCrzAC=(I}Fck;IMSLx5v%1*CI zZQb<mXkPbreYvUZC$l$CSi>5r%eBpE*^7`Ujq6(Mo6=Lm)Apb3JY_j;^*rsfZ_jK# zb$f#OocHtpzZE(p^l;L)rET8fy0Q_^_O8jY++<T&d7JC8D64i`7~2|~9bMbBa<BTY zej7f0UEN-_D&OqJxPzyf4sK=4e$5@q^|ZD2^_}Z)WBnuaBkylb{M9yB+D^2yYn{k# z@#&)VH#F{4Je6+GKed16ohe&Zu0FCe<$T(uw3pBB>CTJho3?8Dv*~<!yf<%c;k_TW z<?YvRuDA84pVhd%yLp@Q&c*v}cI-)Ae)8N|Yx|HTAzwm%g_ym&ba!jw^&fc`-$_^R z`DXIw>h0(~-~Za3+;=;aG1T{J+SSzGp1(JLw_n$}>gA7VzjI^P`sEhBJ<fcI`7gUN z-?r;JuUwVAWE&FHe@*+fJKu5negEdZFW2QY;|=YdbL^3FflK9+m)|+>f0yI6x>eRw zz2+hNW%)AMbXol@r&*t7xy=rq^*cH#dYAthyNlOe-K+ZJep{Y@j)_fVrPt?>lbN?( zHeH^a{^@+r+^KVG>-2u!Nw~deTlMqgbN93O^WX0hD0z6v^?&zs>pj-zVm|FC`LyZw zQ{nI(;j`9T#pk{%d1do&@@4<yyXWklwQgrj_Re=zd$(4neSaxE&-~ooFMBILiv7QK zb)Kc|-Mycy^1mPb{`J1t-MS+6zvoWxzFDsRZtWibJ@H>0-a6iNzT1A)KKkFC8}IMb zXB{YC@cH5$_wQ`2&FBA3{Myg&%-TP*|8yH~+v|B2c9xcp?2G=s{IlHoe9C#XdE);T z{X4x*Tui_2$JN)@&t05xapCk&(<krGty%i_)q&TN>u(=BbWCpF$qHk`xG!P9-yST# zQ!e{{@qK>(Cp8N78viqXZu}a2VfpXLl9MO@XJMZ4`A@R3?rjDJ28CpgAYTTCDpdxC zhGqtapZ^&c8eTFmlo~KFyh>nTu$sZZAf7)d{-_%R1H&Ir7srr_TS<TZ|F>t>We{fW zWl(nB_V>Ty(<HG+e~z9wa6pkS@qfk10}d{GHn6O&J+%4(zcTw_%SNZR{+ukHH$D3$ zE$Z&28~nO({J^LG>UG=y?9pz!{%hIsl{~lYBMe>?-cL+O{BykE(`K{g{SOq|qHbDF zVLkdYKZ|Go|BVKF{vJO6;kmsqv;1lCw&MF&H2ZCw*Ujd6|L>C_hjD$%gw*P@A0ACN zXx985dMNQvp%i}{tL7PL3BOgZ4A%U5edxf65AzSc`kdN!L^xW)?%(0{{U0Z;Wjm<x z@BE1q1@q&(8bAK8XKVF8FDcRKDeAIx+yDQPQ|xSHRU)fSh&nYeGE_?j-V!WVwq{^p OVDNPHb6Mw<&;$TXSE$DT literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/252.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/252.png new file mode 100644 index 0000000000000000000000000000000000000000..01c5ab21dab57f18048130d4eb87de81642bf814 GIT binary patch literal 248 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`($k<n8Xl@E-&h>|H*Y zfq{X&#M9T6{U$Su2%GxN2;oKs28LOlE{-7<y~!nS_WYjT$kxy)*48KGGw<N1Lu+_G z9a?k6ct&sQ#K!5(od+G8+d&w_ZtQKHxZt2pi%7u+Bg2r2PNN8oVnYK11A`Ub8;nbG zs?UCSeLntF%%7LP<J&lQ-#7U4^ZWdV=lB2T5iZ-G_~VQ0{)H|(XEZi8I!5;ND(1g5 xw)lN@x&0NxA3x^iAJK4TWS)PgZT~?Awq?qy3y*(qU|?Wi@O1TaS?83{1OUieXOjQ` literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/253.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/253.png new file mode 100644 index 0000000000000000000000000000000000000000..dfd4a6c385127dc422fc54075be8d370df532663 GIT binary patch literal 390 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`($k<n8Xl@E-&h>|H*Y zfq{X&#M9T6{RWpTr<lBpwZa+(21X4}7sn8b-nAFcdNC!69Q(NcMQ?@vy1i23L93%u zR^Pd@$~BkkB{PqaM}~4+H;<vZ>zXrX1YDNila!ske*0COBO=S6-IP6dxSv@)<hB3P zn~M_+$~cS^HJ5IQJ$d$X%WL(y`O$3b)y-KJDbi9;@0mp0@XpRCTEt=3BCEsmz)NF~ z-;SJD64Rt*-ng2_>Pbm0U3c))Gou@Y3e%e_YS!KOxy2%sCHLwlPH)ammK37^9VZj3 z@Uo>TfB&tRR=>XIPi%}<qkurSqlHcIniX6pv${U5c=h=atK=-L*<Q0A`-z3G`*-BT zqE=m5zBr>LuXfi&-a7Rl=to(B`=(v4v0G}I_aCxde7<ed;mYr?&OhME*(FxJ*7?%e v+GF3I+}ChWxv#(B+Xmn0dTy34pO`0o+_Je`W9I<|1_lOCS3j3^P6<r_RVb!P literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/254.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/254.png new file mode 100644 index 0000000000000000000000000000000000000000..caed18859343cb4313b1df209d525e8c8f5b461c GIT binary patch literal 380 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`($k<n8Xl@E-&h>|H*Y zfq{X&#M9T6{RTU`n2vyAa)~no1EZX$i(`mI@75{%y$%P69IMaVbj6<avZiE{w?V6g z$dU`52kjglHuXOc=7^Mu{bk_felTDTvublA-%YD4D;FL~5EqV}v*nJorsd_QA8Pj( z?<lb2{jsPq%am~~>o=SAVejuJD6(uzH7t}->ub)9<WQWFpv%GZQa(Jib?UO1-0ci| zw%p#cQ*Z6G8uiC%cHw^gi#ghy8LT!-PIq1SMIutdi`CMA^_&<t!?MbAo)VV=8$%~w zcVLtGX~%H0=%my)_HssHjY%wZ_hP4V8l1W4p=HomC{lRiHKW1391B^VD-WJqTkiOy zV_9L-c9oss{i9jxg^hVHg61Dv`)A4TFP^8u<$|Oes>@r~&leVc&%W%@d&#%2{%Vzm hy$QPFG2@ui3+dCAo(9K%=77SN!PC{xWt~$(698N1mL~uJ literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/255.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/255.png new file mode 100644 index 0000000000000000000000000000000000000000..0f43c74c1468360f70dc74e03494ba15ea334421 GIT binary patch literal 635 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`($k<n8Xl@E-&h>|H*Y zfq{X&#M9T6{RWpTr!Het+o$gg3{0|~E{-7<y>qX`djuy+9RK*<^7f^(XLl|QT2tiI zB(TJB*3u(-T%2MaDkduz)Qi8?H@tKzRZN)Ex$}*h&>OX$4u{TN9Uqhy&DPNGx_csO z*Ob4Rw`b1CE`F^P@+HT#c3s@P&(-$ND=YZjZ+t59pJf`>`pLY!x6W>FU%^kmo)>3? zmd0>va20q-Kg>`%a8z4Jd2wN6+SP)YMvna#&u_oTVH#`LG;xYfaQM<wvSJO>nl#D` z9kSbxTv%-xsg^(YfNwRU@3yr&4@!%8?&7U`X6JU}uI9tfr+2Se7h-f{>GQb@XU_Wg z`G5Ot6GNF*4D04;^w0aRwD-}fsa!kCb~QX!KXYUG+&v$!{=0jgZJqe@LP@3-`&%}a zcvRGU-sF?Iv*~zj)g3i$>*KO6!MB!*r#VSqHMTIVtNN|_&VHuq)}*4q7H(ZBy}5T= zly4mCelIq2BhNKX%{)n_oNq0eIsK2mo!G5ot|_r2)?-DIed)chKc3FVI*+!xI{(vA zJ{ot7ZTU+3Z^3O`Omi&PJbN1;$-Go=*5133fecICJPNmJxO@%iaDJ|0w|nxY2`fXM zB&I9o-1k2Gq_n1U(wYZJ#}BIt|EaJ#suyjcT=m4k?*06k5@yyLtE!5f7+ZE}h5kAm z;q-064v!`KV~-#E73Jr5FTp176lY8e<4yk;3sn27{gnA9mHlcm3(7P+e6jxeru9zi tMPFoJ-k5uzZ;h~QP4Db*UcD>w(gIs&vCi3N%)r3F;OXk;vd$@?2>`8;9(4c! literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/256.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/256.png new file mode 100644 index 0000000000000000000000000000000000000000..89967cbd6b9def6deb79e9c11451af80277453cb GIT binary patch literal 306 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`($k<n8Xl@E-&h>|H*Y zfq{X&#M9T6{W>=fr=e!)^)=@i7#Oa2x;Tbd^d_eyB>Xt<z<j`k+gVaVLL%Z+aYnMi z<Nwc{bu=X2M-~Z`7|!mqJS-br%~n~c$#zZmv}9eZrRRl&CcS^>l@BP~+d41t{^9#P zm)?2uJc@lS`R_A_fXR&1W0&nKL{CVpG<x!h)5xa!@2tePSM=EaA24WJduJ7of1aFr z#*g}%h=70(|96|e|0i!-^rgN&_Ur$4>F__|A|gjtw>LIEv_H6@;{QL}=KlHohv)7t zm#|Ptkx;T$H{4VIf8K)Z_JpF_5~rPn#W%mWm$<NX=N4`*2FG=QZ6%*3Co(WFFnGH9 KxvX<aXaWF_1bm|a literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/257.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/257.png new file mode 100644 index 0000000000000000000000000000000000000000..ff347ae1bfe101580f9914e57207b7ff7cbc2558 GIT binary patch literal 3326 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 TCHr>_3=9mOu6{1-oD!M<i<3Y1 literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/258.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/258.png new file mode 100644 index 0000000000000000000000000000000000000000..1f6c7665207e2a4162f4766f34938ea87539d478 GIT binary patch literal 471 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`($k<n8Xl@E-&h>|H*Y zfq{X&#M9T6{RTIyxQWG&Z``pA42+eYE{-7<y=yP+^->OGXnXj5j-+sJq49<&iN&iQ zm}%zlXe|*a6bux(a?Q>0#$HxO0UkC-Z+!=8-O|?FZJRa-x#*+>_6S{w=#i+ORG9YI zQmm;pcG6G12by+q8*dn|xm<g{fVXk}<jLt~()IrYYrp+zWqefD`1byCmG$y}TN!n> zANh5^xK8f*gs5=dZei_@3r{R?+BxZSg|zi$<~=P<R}XUe>OHw&`qd?Ev!K8B6wSy? zjR}Tcq6e2HPW7-&d6`lB^hV)|evURNrHbpOOFkzC`Av&GuO~gt>A;UQ3g7q2oB!&5 zxR#OWtv&-wYl`L-zxv)#yO<s37I!ieb5u_DA7uGmt@g87pJ7MT#(+IZ|LgbVM94(m z-E|@R^2`qvb{zrsRqkq{hYeS}N-j)N-LfWF<N02j$mJYg+d9{pCAsu;1uzKzaG3a^ z^x3p!JEbQq=oa1m-k>3IYDVNfl{qylVt(^nKh}NZnjVKsY<vL2<yjjt=bcw#I%O{M bfcMPlh66XAUfRdNz`)??>gTe~DWM4f^cKk} literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/260.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/260.png new file mode 100644 index 0000000000000000000000000000000000000000..fd801209b2883c1cd8c4f0dfe0c6c437d0f668a5 GIT binary patch literal 280 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`($k<n8Xl@E-&h>|H*Y zfq{X&#M9T6{RWo^qnhx;3odR93=F$GT^vI!df#5y$ak<n;P}V<%x*{FwG-TwCMG=Q z)H$Z-)_wN0N6x*2$q_j@9y&s7!o6)r7HIvwexW1qQrpS=olo?>pM0uP>~TO`$vt*W z+(IUu&=Z^+L@PK}+&?5GX}A2~E$4V9TjtjcCE_xS$;?Z3tUpnmU>Wc^QSI;&j(H-F zABFpA`S8xTpE$YpyYk_^u3eW@J9W9;+{GKpn5~}9D9B!Z!RADc>HLFQEnAsN&KAt; j;Hp0*|L?GU%Y2p~-O2u?o8uW67#KWV{an^LB{Ts5&HQWC literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/261.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/261.png new file mode 100644 index 0000000000000000000000000000000000000000..a9b1bdf47de6952e73435c96e09cce2f2f916ad7 GIT binary patch literal 161 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`($k<n8Xl@E-&h>|H*Y zfq{X&#M9T6{RTIyxS`>nSob{)3=GbmE{-7<y~%(6|NmdlCi5UZ*!1v!Tk8VP$E-dn zFQrT?Dx}Xe`4^r3znv%i=|?Ta^AALM)=Ny&o|yjO0{7#<=FEHphOI(;&Ff^Ri!v}U OFnGH9xvX<aXaWH3lQvuc literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/262.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/262.png new file mode 100644 index 0000000000000000000000000000000000000000..24b6a4bca6540e3c9f2bfb13dbf91cd37186842a GIT binary patch literal 147 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`($k<n8Xl@E-&h>|H*Y zfq{X&#M9T6{U(!$h!%@}d3g~71B0oji(`mIZ*oe&jQ{f)*(0nD_9>o<=Ujbf{@QBE zx@lV<T{?B3CAiJWAnU`5gNxbvrEC_kF*7W?%TY5oS!4+V0|SGntDnm{r-UW|TbwR| literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/263.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/263.png new file mode 100644 index 0000000000000000000000000000000000000000..5f3008748d97f1c338c201757243c40b0673ecf5 GIT binary patch literal 3044 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 literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/264.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/264.png new file mode 100644 index 0000000000000000000000000000000000000000..d349a7da20100f79192ffe6d564a9c378aba88f3 GIT binary patch literal 720 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`($k<n8Xl@E-&h>|H*Y zfq{X&#M9T6{W_;8BeSyN2JT!22BsoU7sn8b-ldbGJuVlD9Jl{}_loKAv$`7(op#Px zar5Y<Q`3J2M5?%nXwB@fRjKSfa^i>(Px#xV+;%grDAjmqENq|Wwc@~=RYA*A#C4^t z)L-7oDc&V_=w-d|#$S8q-v2)5yycwFqBp9}9j@Q=<%z^BzBR{Vi#gN(i@)E0#yn8; z#i4go9)INUW}4bq#N%4USNrzhr0AyOw#t|GCM->wb!f}>7fo+#wyk;cZgqu>-p@rB z-gaj1oVi^xbM3^5^XfKgaAbViJmJjI-$M4AbYEGg8_(OIddX)=+8zEC6TA)Qcr4fT zJXlg@7;G0%+0wUR8k^tSuV?&a)@@rHd|Qx(->bFTV5)P-lr4HPmp6tq>Bpu2sGJ^u z`NCnzJ=)iTf9w+6oSY-~=Y_LLw$rhf#@QSHawVLQ`jj3X#2H#?tuZlL(l)5;uA%C^ zrGCxF0vt<URL`1!?R<X9LhUJCnPKg>4Ek4ZuogYynr$fS?_9pN^W-<b{hC*Qf8_~F zE84PpqT}riJ02c7@Nkl`!6HW`L5=gC54W7_+`3@S$xhF}i6Lv1-Z)wEUbNrw>5a{1 zx%%V3Zt7|&wcK9%(q-m5gHH?Yu6J1Ke=unF;e+?2zm(R0zAVlvo|d=BPH)1-MP6z; z$%|Y%jW}{+4Z|PjN?5%rINw#fTf@R>^`f0Rb6cvvOB&jJ@s66fOE9{YaW}h9$^M^P zR4#CzyEnDL(Dk&7tEv52v56Wi8WE+>EVh@OT2UF;o_%evjz+_qO?&0D_c7M+32afE zCYfv)>8x8)@=Z_rh3qPIlSmhll%NuI?u@&O7r#n1=G*>x{lW*udm3&?q#QFUa=%@1 h=i)E_13SM<cW|Da^K{!mb_NCp22WQ%mvv4FO#lO<PZj_G literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/265.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/265.png new file mode 100644 index 0000000000000000000000000000000000000000..daf195c20648708591b3f508db4b32c8fbf221ba GIT binary patch literal 286 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`($k<n8Xl@E-&h>|H*Y zfq{X&#M9T6{RTIyxS`>nSob{)3=9W6T^vI!df!g8<zoyKY2E+(+4Gq$Y)d=5d{ztW z<;{rfeA{6gFlhs$*aA0w<ulSYTa(h9OoW!(THfEe)1AS)u}1LKDdq=1JPfxPG(Bmo z75o)9bKByZ_CX9%r;^M4BbFBCHJ&nV+ttP3EgUS^9v~y8=GHKAU0OS%`RNxs7(2Jd zZ1g#-X2;aPsq^@A<La#?cN*Tl{Uo<TrK?oR_=EGalP`~UPf1Jj+afc!a$`<b;71{O ojrYFwAIeqkdcL>6*WWZ>CC$7t^{q?~0|Nttr>mdKI;Vst0G8-*4FCWD literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/266.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/266.png new file mode 100644 index 0000000000000000000000000000000000000000..2cb51a16dd4ca57a012b5ac250a5ad66a6179a4a GIT binary patch literal 284 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`($k<n8Xl@E-&h>|H*Y zfq{X&#M9T6{W>=fr=j|!{KgXu3=I1`T^vI!df!e~<U8ab;Cg>jn-i;0<15wzQPI*E zw&0r+?lA;*yA@4R3thANNMZqp#=_mQc?Z_5R7m_XfBJlLN!J<?w;3lTF5G8f-~INM z_6^&23q(F=Je(S?^r&>ts#Pz3&)cN4_dsJf*Na_z=lL4ale2X*XC?J4%#=E0P%`<b z;k78uE++;?mGi}h$97yhveGHrH}-l;<S_%DExFy-W~q4YTYY1`zn|#)=iRrTatR+b oiZkp@^Aqkm{Otdw$4&N|E_PlmNK9;EU|?YIboFyt=akR{0N9vv`2YX_ literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/267.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/267.png new file mode 100644 index 0000000000000000000000000000000000000000..046aa3a6d090196eaed6a48e5960efde008e34cb GIT binary patch literal 165 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`($k<n8Xl@E-&h>|H*Y zfq{X&#M9T6{RTIyxQW8+S(CXL7#Q3=T^vI!dXsfxOMlxl^D+qQ^2nM>ux^;4{qf?F z1UGSU@mWi_+}POIW=WiR^yrZjcd?|z^*NQE(&F>?eD4%{#&@v9<_ixS1EU_VK>37o RX$%Yu44$rjF6*2UngFz9FcSa( literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/268.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/268.png new file mode 100644 index 0000000000000000000000000000000000000000..068b38ef54a682cc4659f052a7666f74776f982e GIT binary patch literal 539 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`($k<n8Xl@E-&h>|H*Y zfq{X&#M9T6{RWpTD}(Cvty|YJFfi`*ba4!^=-oPHZ+38@NZb71H_euqn8ld5Daq>e zn#nHlX7iR+@eYWNVJQst_|M?T6uaB9qk3tco~nh$%24)|6EqbzcB`5D8YmuA+q=;| z|6P0YmH-y+L$<dYzuP>2I_L02v3L8waVk7fSitZq>65cU!pgrfoGBug(k%Y?e<&!K z(m#Fuft{OeVxk@`h*`FAU*G-r|Lu2J*`77F_IY&4=-flTqv84!QYBa4Tr%bKMSZdV z9L|bUHX7c^`@SP==jzw1-8<z!1qSQA>hVrBJL>KIIO!47zU3D)!!xezS87Sv9;I5C zE@}BoR&c99-o3-pJd)R5*ISEyPXA$Kd4ADvF?ZRA-)1{2P2^}xOt@{fH?F_L%GYlG z@ol+}K3Y6h=9+p(XPv}`$FZuf$|UcvV_YCts<Aa)!#^%P>$k1&J%737K{-qtBX|^9 z)`oTGn005);!wOG+In}Z={Ig>8P7!(Z`qF3^+sRuv-+me8D(+oisR=aJ@ZSfYK(nN zd>033OgNdc;oCQjwQDZizh!mpABXG2x$!<XuDv|XTu?ICzqq(Ytm$*x!RC}n&yF2? v87_E5cD28Bf763S`&R3)F!8<N{L3~aeWUN|GVMPM3=9mOu6{1-oD!M<qbBO7 literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/269.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/269.png new file mode 100644 index 0000000000000000000000000000000000000000..67e1e9aac9bbf52bb14080ed3a16899955473786 GIT binary patch literal 3169 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 KelF{r5}E*DZu6S} literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/27.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/27.png new file mode 100644 index 0000000000000000000000000000000000000000..8ddf0c22c9600cb1243f11131e9a660ceab65fb4 GIT binary patch literal 558 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`($k<n8Xl@E-&h>|H*Y zfq{X&#M9T6{U)OTuc>Njq0A`;2F44XE{-7<y<4yNdt5G*IR5c_{yEF-ma~JWr>&S+ zKVj2-1x|0(iLxPcoTl?l{K0PP6Y}DLtB2y33#!6`Zv<SX^EJB6<I-Qo``^U;sQp?G z0dFB+k&8R)<&x};RO<g6dj9S2hYyb)o<6L6AyAU-LiQG$bt{$|{*}6IJ6FcX`se(v zF3p{HM0vP>G&8zQTUL;_Ht^+(BPpIopU-M?a1dNGOUypu>U)oa*6X`h`$tvOYPNpX zZ@U;HIMw&h>*tBry>Dw-@%Fq|6L2~p{=s<9gCl#ldxqY2=5Z5l-)t<vb*hb3Va_Cm z^HB#TN&CM|pV(U4d}YE4bEAmI3!<hUNh@csdq1hh;#0;3$Na@z_rAvb+LtciG(qZp zq<3Xj{xOkki<3Xic_w5wK7V__)wuLt%|6)|DUQnzF}%|FVZ?Ir`IeX&I>9Wf|M3~= ze)uQ2=Ew}qPa;}Q4|)Da@P2q6b|=oJQoG2ca>_l)qkDI#a);g3WenecAf?Exbzb!G zfa-g^ch)l3$eITw)N4z#3OtKD+WKC<d&jq)Ac^%?FNa?};#<tPmH*g}ADPZ(8oo8P z+g?ayo!;~)Q$8WxPITj=UL_HSx7>f@dQOyT`)e;dXL#_%5q{T%C4CI@3uisbJ$A;H Qfq{X+)78&qol`;+0I_ZNKL7v# literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/290.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/290.png new file mode 100644 index 0000000000000000000000000000000000000000..38484c45c1ad4cf584589633c91b1604ea9fe3b2 GIT binary patch literal 3202 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 literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/291.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/291.png new file mode 100644 index 0000000000000000000000000000000000000000..46564ddbb54c11f0424a8fa359f9437d383c60e7 GIT binary patch literal 3091 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 literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/297.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/297.png new file mode 100644 index 0000000000000000000000000000000000000000..7b9bf9de6991ac980dd189bea4cb6d03bb2a07d8 GIT binary patch literal 260 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`($k<n8Xl@E-&h>|H*Y zfq{X&#M9T6{RTIyxQWb>ukU*p7#Nm$x;Tbd^d^_Q+4FloBbS7vq{P3&l~WkiB$}tr zoT%vbfw$DBRr1V<69)uN{cJjzbXtfl&`(S9%#jlZCMf;rI#_nqq^*AWIpdJ~w+}2( zI^Yta&Uk=>J6U&LJddaOcB3gC>_Isi%*;U&@xKop+u(D3zE;~Ji8BWd94L4v`_!@F zYC=}i!gPbjQ<KX=PGzrXNWD5&B5KCz1B<i@CabX-D~UT@VKM2pVNh7DGWGQt&#ep$ O3=E#GelF{r5}E-2Eo12b literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/298.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/298.png new file mode 100644 index 0000000000000000000000000000000000000000..8d9ee26cb801accac4a0c0ccb028e04f857f8511 GIT binary patch literal 2877 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 F1OScNRZ9Q> literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/299.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/299.png new file mode 100644 index 0000000000000000000000000000000000000000..f77fe6f8ac31cd597e7892b55e6bc3f30b48ec36 GIT binary patch literal 408 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`($k<n8Xl@E-&h>|H*Y zfq{X&#M9T6{RWo^lbAv?!`fdA42)KuE{-7<y~%(6|NmdlCdHr@C2{J&fddDcydS-9 z_ve{kCX@K%?;lg<?hXa!`Lj)#yLT9*vh9!F)%q~gQ~dCL{reA+eCE92d35z9Ptwmq z7s)dna>wMay-%!=h(CFtLHWhf-ChzdM#>(>KmOmZ=eb^5BUxu(*%{1itZ&}@>})R2 znLT$Zc-=bpycb{h*mO!`W8=g3&)4(Bf19uJ<`KU&zkEaCzrDY8e$0Qk-^MZa|3ABQ zF~K9RnT~PW9Q&}~fzh?J0NV`{7VP9-<RxjBcdtL3x6-ljfr#VjK%Rg9zsn!K+!Z%R zvk7FX>*J8N{qy%vN;6<)W<Gqp_qT*xs)@m$zds~h|J?sRpXdClUy}FE#JFAvU}M{2 z;Kp`_sfMQ}FN|l+rAIvVaeI@0Z27Hmcz*c%4kMBE2d6O25_MwWim$(9w2AXA0|Ntt Mr>mdKI;Vst0Pmr)DF6Tf literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/30.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/30.png new file mode 100644 index 0000000000000000000000000000000000000000..c288eda81631852ee988e604ddb3b9ac117dd29f GIT binary patch literal 325 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`($k<n8Xl@E-&h>|H*Y zfq{X&#M9T6{RS5klYs8MnRQJJ3=GdbT^vI!dXrNUGJc$AU=`O-+c$mMvs6*RmyZ$` z2y9R&wyXW6sG)G6Z_$CXzB3!=%ZK&|B&4PNI_BgN=-)5hyl$O@C!4W>L4o1B8->5m zF8ANxA}JvuAtNg)v13Ps<hH!Myx|+OugA9a%hyjx(K0r^Y<}$j|NsAwFZb}zw>tdv z^m>m{LuTcoC$e^PPAI4!Kd+!~&$#ZvrKLVaO-+pn67O%7PJei;*IY&N)bZorrY$(A zs=C|5NQA3}(@oB@p}+sF?!gnv;tO2lOc}jhTF!0XU;n=_@N&SSONKie43(13hR@nD dBP@}J;SO`KCU;G~DFXuogQu&X%Q~loCIE8;e|P`@ literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/31.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/31.png new file mode 100644 index 0000000000000000000000000000000000000000..33bb87b3ac9b40b8a07c0ad694042bd878a9c654 GIT binary patch literal 137 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`($k<n8Xl@E-&h>|H*Y zfq{X&#M9T6{RX!ro0zEV1_O{HZBG}+5R2aA81=;;=Qpx7bc(h0N%b&E{Qv*oUaHdh mN`jl~_IDRgNH1bzW|+dj{%c9<sw@Tu1_n=8KbLh*2~7Y<i74a% literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/32.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/32.png new file mode 100644 index 0000000000000000000000000000000000000000..51ece017cec4f19ee0f2a8dcc7ee0410ef9a11c4 GIT binary patch literal 145 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`($k<n8Xl@E-&h>|H*Y zfq{X&#M9T6{U#&7xT0ik^|f*a1_onK7sn8b-sF^ogdgV{n04kJI3Vz}J@(yoHMX|( xtUF4K3=AGlTg1~NWs~(`#lgjF{3{MJcuKQzzumyIk%57M!PC{xWt~$(695ukEkytT literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/33.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/33.png new file mode 100644 index 0000000000000000000000000000000000000000..24b6a4bca6540e3c9f2bfb13dbf91cd37186842a GIT binary patch literal 147 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`($k<n8Xl@E-&h>|H*Y zfq{X&#M9T6{U(!$h!%@}d3g~71B0oji(`mIZ*oe&jQ{f)*(0nD_9>o<=Ujbf{@QBE zx@lV<T{?B3CAiJWAnU`5gNxbvrEC_kF*7W?%TY5oS!4+V0|SGntDnm{r-UW|TbwR| literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/34.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/34.png new file mode 100644 index 0000000000000000000000000000000000000000..823535c5fc0a584c9090ed7ca540dd28174dcc04 GIT binary patch literal 325 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`($k<n8Xl@E-&h>|H*Y zfq{X&#M9T6{U$SyAS*x1ex^MP3=GdbT^vI!daqvDn{_BaqT%89Bgu7HIV_F~osS-j zjG6Q3((V_rUl#59Viz(;gmqzwsR#Sf`4f)0*}i05aX};fL(lyWJnxT}yX^lkXVF7R ztAMo|zC>B;Zt&P0lQTzy`Eo$`!B2NSsGl=_Bg$c@8O{0joRx9SC5t}R`N57KN)>u+ zC$&p8d%i2H*jzTjb8_XqC!W7-rrp<gRBU;}{^8s0Dfv5Bw4Obl;AT+y+<Z%5d(H>X z<n_xeR>^)1a=F~;F<rY$KlI4W+?0masfR_4t=98RtX$%Cpd#@?!RCWWufn&?*>a~R gNA{iUKhgRr98TZf=ufI)U|?YIboFyt=akR{0C5P7qyPW_ literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/350.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/350.png new file mode 100644 index 0000000000000000000000000000000000000000..ef227ecfcbd29b8ff2bd7d542db526dc3b4761ae GIT binary patch literal 3054 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 literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/351.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/351.png new file mode 100644 index 0000000000000000000000000000000000000000..856c4266e2e9c7b9843a00a6b4b615d4f23bf6a3 GIT binary patch literal 413 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`($k<n8Xl@E-&h>|H*Y zfq{X&#M9T6{RXqRkP(Y-#<3&@21a{N7sn8b-m{nYdov}<9RK+J<;wCZwTh;t7A&39 zrCJ1a9fJc@t^^3_=Kkg6{i}L0K;Q>E2d`tWv$LbGs-svruj!Q5wCU3dd~^T3;rO-Y z{O3JCK79Dgm6LE$v1qb%@$`!2)@vWV_<rzzo2}o8tRK>g{~k`--F$S)>@N%YH)v=) z+v2Lr&TPGYhg|M~YD<rpr3T;MXKE};5=otRJp0JD#0t?n@^>Fji~sn6DY3slq=+@~ zugKdqM?wr+X0@O1={<H*;6+>K;h!z*u4{;t2t`dzV0$H`p}s$-CZg%{vI8>;-Ag=@ z^wI=Yt~epa^2tnU_Z)$ldmd~vI{4<9&HKRaPn&wm*_xvF9(3A$_H>p&xZ>OJv#pC) zU4QsnX#)H9xhokgcCdN2ES*?X`c`6n$Q#~2p2t~NnlCIk8NELv{D$8@o_}ns=LDD9 U$z}^PFfcH9y85}Sb4q9e0K+x3W&i*H literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/352.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/352.png new file mode 100644 index 0000000000000000000000000000000000000000..8ab3e5925ebbfa5a0ba2636b0b62c8eb43f84818 GIT binary patch literal 2844 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 b!~g%x3>&YDmZheICxZB%u6{1-oD!M<03AgY literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/353.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/353.png new file mode 100644 index 0000000000000000000000000000000000000000..54c9b405a3ea025e4a9bee8df9df97dc59c05c33 GIT binary patch literal 2839 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 Wx|Z)U=jFHDAik%opUXO@geCws96_%D literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/354.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/354.png new file mode 100644 index 0000000000000000000000000000000000000000..48a016944efd9057ffaa04b1a070217e905928a6 GIT binary patch literal 2895 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 literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/355.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/355.png new file mode 100644 index 0000000000000000000000000000000000000000..ce8467aea1f081d9676e2f6e05aaec14a9ad1171 GIT binary patch literal 3109 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 literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/356.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/356.png new file mode 100644 index 0000000000000000000000000000000000000000..69e7525933dcfe35998584580c79dec3a855402c GIT binary patch literal 235 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`($k<n8Xl@E-&h>|H*Y zfq{X&#M9T6{RTIyxQt$4y}&XC28Lcw7sn8b-sC_3|NpONV`FRM-Wx1YBD7dCqJ>4W zppko#mBrHwjKa*!%!ik|_e<=X`O;vIO=(+3FAML!3-(hVzF8~HW1bh2w&UoZ_J<YW z@})dspFbx~sQNa|(b2QH@&7Spwp@PyRT5`7xF0)DUT!#pmBpaogxA9mA1{f+ylQL{ mWGc5XEN1JMvXS9oV@P4rk<#vd@PmPYfx*+&&t;ucLK6U?PEVBp literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/357.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/357.png new file mode 100644 index 0000000000000000000000000000000000000000..1689fcbf67274bedecbd967d0df7d45ac3c6b5d5 GIT binary patch literal 3050 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 literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/358.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/358.png new file mode 100644 index 0000000000000000000000000000000000000000..0f8476dc7de76b11b85911bda3e0f52c54291899 GIT binary patch literal 2910 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 literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/359.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/359.png new file mode 100644 index 0000000000000000000000000000000000000000..34bb5e4877b780057f169bceb38178c681a7e320 GIT binary patch literal 2842 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 bpP6C%Onwt4ZCOqR1_lOCS3j3^P6<r_WcWWx literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/36.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/36.png new file mode 100644 index 0000000000000000000000000000000000000000..b7bef807073e241bbd0de46148259990229fd363 GIT binary patch literal 2839 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 Z95b$;x7OA^WME)m@O1TaS?83{1OP+@M{588 literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/370.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/370.png new file mode 100644 index 0000000000000000000000000000000000000000..01ca64fc001b753cd4541defbdafb3fff8997e24 GIT binary patch literal 2842 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 b&&(k7Pk=?MtZX#{0|SGntDnm{r-UW|+L%F! literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/371.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/371.png new file mode 100644 index 0000000000000000000000000000000000000000..324c5ce6b23ec72dfd7c12b797826f6f90d47d9b GIT binary patch literal 2841 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 bnZZL!=;)8l)6O$6Ffe$!`njxgN@xNAAKOF( literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/372.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/372.png new file mode 100644 index 0000000000000000000000000000000000000000..2417be67f663f4bccc4c65df2385ca1d19a879bb GIT binary patch literal 2838 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 ToVMhPGKlZ#>gTe~DWM4fv&cj` literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/373.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/373.png new file mode 100644 index 0000000000000000000000000000000000000000..af1fcbf4b86432e28db96347fde091e9f5d2c544 GIT binary patch literal 2976 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 N@O1TaS?83{1OR%ahYJ7z literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/374.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/374.png new file mode 100644 index 0000000000000000000000000000000000000000..fbf4cd84eee773fd3293d125ce07ac69d9bbcba2 GIT binary patch literal 2842 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`(#+;1OBOz`!jG!i)^F z=14FwaQSCCI|l@0<d@_ZXXF<scse^P6cpvBW#*(ZFjU-{8=M{z{8G&J`@Jtt-W?57 zyz_%ZITV7Nx*J3$s%a^53V3xWF1#rkcu>&Ql|}l*f)3`szJ?yrKpmbgt{d!66c_b1 zFYf3%_4{G<;_PdCzCSzrZ|ilt=W9OC-F%+?00+-B592`72A-8pa)J+<j~_Yq@QI#7 zBbQ16g8;|o6vg7d%8U#@>TGPZl@74)V_>Yf%+0}Yz<2fm1DW>!{I8s5#xORtFditG zXyMJ#Aj05K)#tQ~!NHBOVeSmIV1@-O3<;-`lO8h!=rSaz*FU?=&@lJM%xXr4=qZY# zj0+|*C<v!^xG-c`Gpsou*5%3&VZb1g=6%GH;f5}QfoFJ{2g8Q#3<u5$aBpJZ;9)Qb z>}b_wV5w$EIH9au!O$|3LB#D-xXnlHbpp?|7#J#MZnD{_V(Ho#&7oV!9v-eIr*Y0x zTwBB}ktuPOgWjRanUY40Cj1XRpJ8BFFi}+SLG$Oo73cWYojYgNw~a4e_tk#3|4K<o zkN-VAzq-JIf#G3E-Nk=8`kSR1tl1iJ|1DB|$C44py`c1aciJX?hph|?Ufv4-TmT9i z*M$>y-n{wr$&(viN1UP)Pleb1OFtBUApCF6&pMkw-@iWC_eiDDD7Mj^<;R0VXTJC> zl{r6&vnA=yvwrtK+qwV$k-e;R#4~AUgqFzTK%v4umsvfZjg~5PI!)3%s(R^v%A@-_ zznSgsn=)+3vSX~CsJkLInfaTyx<Ew9fk)pN7(VUJKX^rhgSjE2`QiEU|L^Vpx-U>= zXh`#%RLH;(=c1w)a%!{vaSjFsmj#Vl8yuy-9F)*Gz$SB$_0B==KM7_nPAW$ZISDv% zr8LMCC1|c`a?)r!yFpefLH~+_tjU4EjJC-Ie0qmMcktO3@c&BWn0HWPPa`Lb;|UJo zM8#Vjj7eP)%6%N-Gh2Ts9`s-l>Q+%W*&!0B<UP^U!!W2TL?P5e_LFT9lVy91+pdY$ zCm4*H{<Q6JH=NSADbV%`&sOK1E6k-@+!k?PNGUO#)i1VS_JyJ?Qno#23!h(Doxy*r z-_H5C!GRYN?8ZlO4D^m2cG_s6!#O$m^hTvMJgbjMZ3tV#yu0&j^7)PBEJBU02RO}G z%AFJv<s3aCd?NgAc&t#6Q85v`#c9sT+!A<5U1{<P?=5P(1b-fpNHQ{PkMPh@z9!T! ztS?aA;e5ngMX1x+NPXu7CeMvaLM{nia=Vllr2JB6<!loVDdov0Z>3~!Vz->4qo94F z^~u~Pho2Zfk$$51DVl3;l0)H=AHk0_f=*?5Nj?>LYVwpVb%v2+=;B#HcULS75j5?O za$37^ThRKz_7%b=rL!#0Hj8<BFI~H6>Sd`6@r>`8>tB@Y61+QA&TsmK@Jpv(y1$tI zg85514{w`j^YM;!4awOO>=Nmc<r3>>_$-sW+%0)L#K7F}^^E5;`Df;bMrdu*su7)d zifgLZRJEznTKXX?S1nt0Zxwgw=g`w3{VU^wYuCAj8V5gK$$4ek>d;kl16~J92dA&J zUeUfPeMNqV{gS%KznyH6hkXwFJ1+@burdDeo?{B!$&#BZbQH6BSGScmnjTTxc=l#Z znbz(Ze`R-f+pb!<(9+r1%Q$><(B~;>_Uw;m6#ke~;>Y=1WBK&YbzS#F-fKS6lwM}y zv(qp&CVSPi>C+-sd#nyz?f!bN*}AvO=Pujpx;yfBBcJ1OFZCF8_w@dAtaG0S-weLH zoNKw5udUVBb$Y9^mr5_(?NYu!Z~40!^Y+Cx%=5`#ey?)x^ItNx`hP?I=Kfm#)tx7T zZ8MJw+ijk65;jLo3-fJc^^f2F80Z{(*ui;e;?%_H4_hYgylAuds#~uce^2JIn8zxQ zbC2a7Tdc;Wrl{ua`^xv-tRUZ=%QTl+`&j!NKYQlvqO;d#n$EU0yl(V-_Vd}-XW!qR z5LFSSvu(w;9jTt1o<uE+e79{+UTc(P<kE=HsMyVJYv-<2y|#Pp?&X5Zclu5CTRrbu z`r!>9x1HR!a=YY)r#IMcuiKWptu`?|Nj!b~(RGL4P2M}Xc2{lhUt4zG_M3dGWus*4 zinkPrScO^Ln{{r^JNw$BU#7j(Pmee+aQ=qz<88vHHIHP@4W513JzYF~XL0lAj_ywH zrqg=U?eu0#AG>>E?-Q?*uZ6J>t1f+=JA3o&LvL5yUjNSQUFN&?JM+(&%-5V3X<U5a z@CoM!fln{mbI+e@kbQqmoxihxWBS(T%KFLr6T{bD->`jY`Ks@U@5SxD*%i%yZ1>p4 z{GQRh$oMnn2ezNse%k+V{=E3s`_A>s|5N@~{lCbtyg`*Qow>8ou`!zI_m8R?#r=Ku zR<~2XZMyl^v1h?fM^VTArnOB^53W_rIPqq}TE*|rXPldOE|ae{pzg)B3+#!{61xxA z@u;`9w}!Xb_Z4(RNL@6XZd!ivj&t#SmtQW^T<*<IH}tn$uj^&1Ww%N%%jTB(E|XpM z$Mn)7&s>d|8{wJbEn}&twazRrXW#ulZ$Gy`n)`_Rakcmi{S&bTl?%@u`qH{wY^9!% zj@2{=pAJ8ZDIXjKv{s1qsD2VISMB4fJS2N4T}l6<*~N|<&M{hYexE$Fe5)qCnYhQa zQst=eQk|zeThv!h*yF?Nb9c7YJh5423b{tMR(lPbCrzAC=(I}Fck;IMSLx5v%1*CI zZQb<mXkPbreYvUZC$l$CSi>5r%eBpE*^7`Ujq6(Mo6=Lm)Apb3JY_j;^*rsfZ_jK# zb$f#OocHtpzZE(p^l;L)rET8fy0Q_^_O8jY++<T&d7JC8D64i`7~2|~9bMbBa<BTY zej7f0UEN-_D&OqJxPzyf4sK=4e$5@q^|ZD2^_}Z)WBnuaBkylb{M9yB+D^2yYn{k# z@#&)VH#F{4Je6+GKed16ohe&Zu0FCe<$T(uw3pBB>CTJho3?8Dv*~<!yf<%c;k_TW z<?YvRuDA84pVhd%yLp@Q&c*v}cI-)Ae)8N|Yx|HTAzwm%g_ym&ba!jw^&fc`-$_^R z`DXIw>h0(~-~Za3+;=;aG1T{J+SSzGp1(JLw_n$}>gA7VzjI^P`sEhBJ<fcI`7gUN z-?r;JuUwVAWE&FHe@*+fJKu5negEdZFW2QY;|=YdbL^3FflK9+m)|+>f0yI6x>eRw zz2+hNW%)AMbXol@r&*t7xy=rq^*cH#dYAthyNlOe-K+ZJep{Y@j)_fVrPt?>lbN?( zHeH^a{^@+r+^KVG>-2u!Nw~deTlMqgbN93O^WX0hD0z6v^?&zs>pj-zVm|FC`LyZw zQ{nI(;j`9T#pk{%d1do&@@4<yyXWklwQgrj_Re=zd$(4neSaxE&-~ooFMBILiv7QK zb)Kc|-Mycy^1mPb{`J1t-MS+6zvoWxzFDsRZtWibJ@H>0-a6iNzT1A)KKkFC8}IMb zXB{YC@cH5$_wQ`2&FBA3{Myg&%-TP*|8yH~+v|B2c9xcp?2G=s{IlHoe9C#XdE);T z{X4x*Tui_2$JN)@&t05xapCk&(<krGty%i_)q&TN>u(=BbWCpF$qHk`xG!P9-yST# zQ!e{{@qK>(Cp8N78viqXZu}a2VfpXLl9MO@XJMZ4`A@R3?rjDJ28CpgAYTTCDpdxC zhGqtapZ^&c8eTFmlo~KFyh>nTu$sZZAf7)d{-_%R1B0uli(^Q|t)xHy|JyU`G6*yG zGCZzlYy0nf>ZpnFj8voM=Y_Lc44DtFx@geGa`bIlXYv-$<Hqin4Rtiyq7+#e7#RNl bXJ&X1FJRQ6Wt+pmz`)??>gTe~DWM4f4Ru0M literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/37447.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/37447.png new file mode 100644 index 0000000000000000000000000000000000000000..2bd0a8fa986ccf03ab61b7126c5a67854a8720c5 GIT binary patch literal 3069 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 GGywofHLuwK literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/37497.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/37497.png new file mode 100644 index 0000000000000000000000000000000000000000..2bd0a8fa986ccf03ab61b7126c5a67854a8720c5 GIT binary patch literal 3069 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 GGywofHLuwK literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/375.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/375.png new file mode 100644 index 0000000000000000000000000000000000000000..ff3603ea87997cae8f55bbad844a3a22eb349278 GIT binary patch literal 2946 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 literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/376.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/376.png new file mode 100644 index 0000000000000000000000000000000000000000..a28055171420ec44cf9344c4e71bedc51f1f34b6 GIT binary patch literal 404 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`($k<n8Xl@E-&h>|H*Y zfq{X&#M9T6{U#F!zof_+@nsVj7#PhwT^vI!daq92>vt$Yq-}oxHWLTYfGc9c!ksLo zS7ua*yXhZWT~PeRDyFx)ySbY?klj-uh-st7!i8U6KYx-CbZg16gXOj7E6<($DfskQ ztCCxl-mCJw^KUKQM<0CoZuToFzd6&Rrz~L!6cTZ8)!Mew<wO40^aNYo1I7F^dQ=bJ zQ*`QH@!m#Z%A##QXUMLZa^U}+<GTzaw=Fx-o8F^7+3)1SEcIq#cf(g^k~^c<n0bY) zkxI2((B%E(?MJ&C=lJ3Z<4#B?I~BTXyq_r|o3hev0q@Fnd)1nR-4#<A>!VzLe@IxP ze2vl6osIQb9pgmNo(_W&&)as++f`>s)tanXs!;m2bKAu4nR2m4pI3jmrQTBKu(#BA z<D0};ikr{KGPhYCH(=k=xBik-{fqy#_nbBaymWQ-)3NE%m)V~bx#im@eg*~x22WQ% Jmvv4FO#m$Cs@(tp literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/377.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/377.png new file mode 100644 index 0000000000000000000000000000000000000000..c680a315bf8a78ee30ce2826418e571d03d1159c GIT binary patch literal 2836 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 V!}8YBZww3!44$rjF6*2UngIVdL*xJe literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/37744.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/37744.png new file mode 100644 index 0000000000000000000000000000000000000000..e5ec034a6f5b9fbcb4fb4fba7f8c9859fe3c23fb GIT binary patch literal 473 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`($k<n8Xl@E-&h>|H*Y zfq{X&#M9T6{RWpTD}xq0*9sd32F7Yn7sn8b-mOz&wVM+qj@O?zOHS);otN|3tkorm zuj3P^$k9gr2S>^aPEEhjsmy+)Q`z&Bcc)0$jMg_tPk(!H^VT<s+ixAF+>*PU_5bke zUH|sKd%ZN;$Zs8omV&eD0tU6cDSNN_1pQ8_+A>wRzDI8R+yI@{Nfqi6zKQ}JOn;xT zR;Nfi$MW6j4V!oG(w-Gk3>SB}nW@i^%zmsUa$NcLjnB5lVgX&u-a>m;y<a11!=S*z zW1?!oe`V4?lcK`^Y!2&B_su%>q;_M-n@`)8`RxdM_2Ji?AB(otzb;Mxv-sva^_1+k zX}cueeiQk8`>)I8(5KDMs}A|>5M`S!EV1PMF{?M3V(xj7cJEXsnJBkRxxTtOFY4Nf z4Qql@PyFrdw-z;1^Dhjk7y0t4$vl7d&S2fj;@5REXQb)z&k+{lwyu?FeO;d{Z^`_7 zAzRq`s4r{&>+4TibFBL1q1?+6R_|2i8Ge-5z98+(TGv=tgTTXi7Y-)wSU96-L5sCs fsOayOeGHY2ZAYpz>k1hd7#KWV{an^LB{Ts5b?DMg literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/378.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/378.png new file mode 100644 index 0000000000000000000000000000000000000000..a0bb8102e6c7612401aa52b3ca1c6e8896e7fac2 GIT binary patch literal 3126 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`(#+;1OBOz`!jG!i)^F z=14FwaQSCCI|l@0<d@_ZXXF<scse^P6cpvBW#*(ZFjU-{8=M{z{8G&J`@Jtt-W?57 zyz_%ZITV7Nx*J3$s%a^53V3xWF1#rkcu>&Ql|}l*f)3`szJ?yrKpmbgt{d!66c_b1 zFYf3%_4{G<;_PdCzCSzrZ|ilt=W9OC-F%+?00+-B592`72A-8pa)J+<j~_Yq@QI#7 zBbQ16g8;|o6vg7d%8U#@>TGPZl@74)V_>Yf%+0}Yz<2fm1DW>!{I8s5#xORtFditG zXyMJ#Aj05K)#tQ~!NHBOVeSmIV1@-O3<;-`lO8h!=rSaz*FU?=&@lJM%xXr4=qZY# zj0+|*C<v!^xG-c`Gpsou*5%3&VZb1g=6%GH;f5}QfoFJ{2g8Q#3<u5$aBpJZ;9)Qb z>}b_wV5w$EIH9au!O$|3LB#D-xXnlHbpp?|7#J#MZnD{_V(Ho#&7oV!9v-eIr*Y0x zTwBB}ktuPOgWjRanUY40Cj1XRpJ8BFFi}+SLG$Oo73cWYojYgNw~a4e_tk#3|4K<o zkN-VAzq-JIf#G3E-Nk=8`kSR1tl1iJ|1DB|$C44py`c1aciJX?hph|?Ufv4-TmT9i z*M$>y-n{wr$&(viN1UP)Pleb1OFtBUApCF6&pMkw-@iWC_eiDDD7Mj^<;R0VXTJC> zl{r6&vnA=yvwrtK+qwV$k-e;R#4~AUgqFzTK%v4umsvfZjg~5PI!)3%s(R^v%A@-_ zznSgsn=)+3vSX~CsJkLInfaTyx<Ew9fk)pN7(VUJKX^rhgSjE2`QiEU|L^Vpx-U>= zXh`#%RLH;(=c1w)a%!{vaSjFsmj#Vl8yuy-9F)*Gz$SB$_0B==KM7_nPAW$ZISDv% zr8LMCC1|c`a?)r!yFpefLH~+_tjU4EjJC-Ie0qmMcktO3@c&BWn0HWPPa`Lb;|UJo zM8#Vjj7eP)%6%N-Gh2Ts9`s-l>Q+%W*&!0B<UP^U!!W2TL?P5e_LFT9lVy91+pdY$ zCm4*H{<Q6JH=NSADbV%`&sOK1E6k-@+!k?PNGUO#)i1VS_JyJ?Qno#23!h(Doxy*r z-_H5C!GRYN?8ZlO4D^m2cG_s6!#O$m^hTvMJgbjMZ3tV#yu0&j^7)PBEJBU02RO}G z%AFJv<s3aCd?NgAc&t#6Q85v`#c9sT+!A<5U1{<P?=5P(1b-fpNHQ{PkMPh@z9!T! ztS?aA;e5ngMX1x+NPXu7CeMvaLM{nia=Vllr2JB6<!loVDdov0Z>3~!Vz->4qo94F z^~u~Pho2Zfk$$51DVl3;l0)H=AHk0_f=*?5Nj?>LYVwpVb%v2+=;B#HcULS75j5?O za$37^ThRKz_7%b=rL!#0Hj8<BFI~H6>Sd`6@r>`8>tB@Y61+QA&TsmK@Jpv(y1$tI zg85514{w`j^YM;!4awOO>=Nmc<r3>>_$-sW+%0)L#K7F}^^E5;`Df;bMrdu*su7)d zifgLZRJEznTKXX?S1nt0Zxwgw=g`w3{VU^wYuCAj8V5gK$$4ek>d;kl16~J92dA&J zUeUfPeMNqV{gS%KznyH6hkXwFJ1+@burdDeo?{B!$&#BZbQH6BSGScmnjTTxc=l#Z znbz(Ze`R-f+pb!<(9+r1%Q$><(B~;>_Uw;m6#ke~;>Y=1WBK&YbzS#F-fKS6lwM}y zv(qp&CVSPi>C+-sd#nyz?f!bN*}AvO=Pujpx;yfBBcJ1OFZCF8_w@dAtaG0S-weLH zoNKw5udUVBb$Y9^mr5_(?NYu!Z~40!^Y+Cx%=5`#ey?)x^ItNx`hP?I=Kfm#)tx7T zZ8MJw+ijk65;jLo3-fJc^^f2F80Z{(*ui;e;?%_H4_hYgylAuds#~uce^2JIn8zxQ zbC2a7Tdc;Wrl{ua`^xv-tRUZ=%QTl+`&j!NKYQlvqO;d#n$EU0yl(V-_Vd}-XW!qR z5LFSSvu(w;9jTt1o<uE+e79{+UTc(P<kE=HsMyVJYv-<2y|#Pp?&X5Zclu5CTRrbu z`r!>9x1HR!a=YY)r#IMcuiKWptu`?|Nj!b~(RGL4P2M}Xc2{lhUt4zG_M3dGWus*4 zinkPrScO^Ln{{r^JNw$BU#7j(Pmee+aQ=qz<88vHHIHP@4W513JzYF~XL0lAj_ywH zrqg=U?eu0#AG>>E?-Q?*uZ6J>t1f+=JA3o&LvL5yUjNSQUFN&?JM+(&%-5V3X<U5a z@CoM!fln{mbI+e@kbQqmoxihxWBS(T%KFLr6T{bD->`jY`Ks@U@5SxD*%i%yZ1>p4 z{GQRh$oMnn2ezNse%k+V{=E3s`_A>s|5N@~{lCbtyg`*Qow>8ou`!zI_m8R?#r=Ku zR<~2XZMyl^v1h?fM^VTArnOB^53W_rIPqq}TE*|rXPldOE|ae{pzg)B3+#!{61xxA z@u;`9w}!Xb_Z4(RNL@6XZd!ivj&t#SmtQW^T<*<IH}tn$uj^&1Ww%N%%jTB(E|XpM z$Mn)7&s>d|8{wJbEn}&twazRrXW#ulZ$Gy`n)`_Rakcmi{S&bTl?%@u`qH{wY^9!% zj@2{=pAJ8ZDIXjKv{s1qsD2VISMB4fJS2N4T}l6<*~N|<&M{hYexE$Fe5)qCnYhQa zQst=eQk|zeThv!h*yF?Nb9c7YJh5423b{tMR(lPbCrzAC=(I}Fck;IMSLx5v%1*CI zZQb<mXkPbreYvUZC$l$CSi>5r%eBpE*^7`Ujq6(Mo6=Lm)Apb3JY_j;^*rsfZ_jK# zb$f#OocHtpzZE(p^l;L)rET8fy0Q_^_O8jY++<T&d7JC8D64i`7~2|~9bMbBa<BTY zej7f0UEN-_D&OqJxPzyf4sK=4e$5@q^|ZD2^_}Z)WBnuaBkylb{M9yB+D^2yYn{k# z@#&)VH#F{4Je6+GKed16ohe&Zu0FCe<$T(uw3pBB>CTJho3?8Dv*~<!yf<%c;k_TW z<?YvRuDA84pVhd%yLp@Q&c*v}cI-)Ae)8N|Yx|HTAzwm%g_ym&ba!jw^&fc`-$_^R z`DXIw>h0(~-~Za3+;=;aG1T{J+SSzGp1(JLw_n$}>gA7VzjI^P`sEhBJ<fcI`7gUN z-?r;JuUwVAWE&FHe@*+fJKu5negEdZFW2QY;|=YdbL^3FflK9+m)|+>f0yI6x>eRw zz2+hNW%)AMbXol@r&*t7xy=rq^*cH#dYAthyNlOe-K+ZJep{Y@j)_fVrPt?>lbN?( zHeH^a{^@+r+^KVG>-2u!Nw~deTlMqgbN93O^WX0hD0z6v^?&zs>pj-zVm|FC`LyZw zQ{nI(;j`9T#pk{%d1do&@@4<yyXWklwQgrj_Re=zd$(4neSaxE&-~ooFMBILiv7QK zb)Kc|-Mycy^1mPb{`J1t-MS+6zvoWxzFDsRZtWibJ@H>0-a6iNzT1A)KKkFC8}IMb zXB{YC@cH5$_wQ`2&FBA3{Myg&%-TP*|8yH~+v|B2c9xcp?2G=s{IlHoe9C#XdE);T z{X4x*Tui_2$JN)@&t05xapCk&(<krGty%i_)q&TN>u(=BbWCpF$qHk`xG!P9-yST# zQ!e{{@qK>(Cp8N78viqXZu}a2VfpXLl9MO@XJMZ4`A@R3?rjDJ28CpgAYTTCDpdxC zhGqtapZ^&c8eTFmlo~KFyh>nTu$sZZAf7)d{-_%R17o76i(^Q|ts_%T>oF&a9Iu}* zwl}eBNzkkn9WNG@daluNNm^PKar<T!TbbMe?GDzB6K;eCO%HW`B&5>8YIV_V`P@L` z-iznCXJknA{{J@T&$+)GnoE~3W-W63RbSwEI`Be~X|t=Yt=_)04Z5P8OKu9gar*w@ zD*OLz!qrW8Y-BF4eb2;XysPE>Ww%AiJO1^o-gN5BFO$!)sa*RibAESUoW^|V@8mT{ zrgyR_os)cjUoulY`B&EN%SLNE6xpZN{ANnMd@Ov|5d-_JXMbP*Gb27w_Tb62$2E^{ zSf=tv&MCAcZc}x{)v!a04jr9rzN7dd|FoXt3x8F;>06Xsu&lKB_qHzYih}QFE<V{N z=yc6~Ph39t$s0!h^c@qH_XJ*g>C-3tzIWj&yROp4r7DlgCsxTRNPPGdG+{-%dWe|0 z#i@`NpLbRKnxJsxeDuLvmAU&LU2b|U(xdYK$CBB$6K3RISYM#=TfLT_;jez1&=+N$ R9}El(44$rjF6*2UngBBr-pv32 literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/379.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/379.png new file mode 100644 index 0000000000000000000000000000000000000000..68e637378ed913fc4077c9d4391aca4eefa5f9b1 GIT binary patch literal 3050 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 literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/380.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/380.png new file mode 100644 index 0000000000000000000000000000000000000000..15b68969955bb0629f7bc467f92c787c76ed09d7 GIT binary patch literal 137 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`($k<n8Xl@E-&h>|H*Y zfq{X&#M9T6{U#%`C@ZtZ;-$3=3=G<yE{-7<y~$g&Y(LF!WNYXYYwMG;Il`OPX%gWt o+$>ptPgL6X_+qxpCleT2Ua@Tnvf6!(fq{X+)78&qol`;+03r1#6951J literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/381-kosovo.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/381-kosovo.png new file mode 100644 index 0000000000000000000000000000000000000000..e5ec034a6f5b9fbcb4fb4fba7f8c9859fe3c23fb GIT binary patch literal 473 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`($k<n8Xl@E-&h>|H*Y zfq{X&#M9T6{RWpTD}xq0*9sd32F7Yn7sn8b-mOz&wVM+qj@O?zOHS);otN|3tkorm zuj3P^$k9gr2S>^aPEEhjsmy+)Q`z&Bcc)0$jMg_tPk(!H^VT<s+ixAF+>*PU_5bke zUH|sKd%ZN;$Zs8omV&eD0tU6cDSNN_1pQ8_+A>wRzDI8R+yI@{Nfqi6zKQ}JOn;xT zR;Nfi$MW6j4V!oG(w-Gk3>SB}nW@i^%zmsUa$NcLjnB5lVgX&u-a>m;y<a11!=S*z zW1?!oe`V4?lcK`^Y!2&B_su%>q;_M-n@`)8`RxdM_2Ji?AB(otzb;Mxv-sva^_1+k zX}cueeiQk8`>)I8(5KDMs}A|>5M`S!EV1PMF{?M3V(xj7cJEXsnJBkRxxTtOFY4Nf z4Qql@PyFrdw-z;1^Dhjk7y0t4$vl7d&S2fj;@5REXQb)z&k+{lwyu?FeO;d{Z^`_7 zAzRq`s4r{&>+4TibFBL1q1?+6R_|2i8Ge-5z98+(TGv=tgTTXi7Y-)wSU96-L5sCs fsOayOeGHY2ZAYpz>k1hd7#KWV{an^LB{Ts5b?DMg literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/381.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/381.png new file mode 100644 index 0000000000000000000000000000000000000000..c900d994fbd85684a22dbbc50238703fa17b5aa6 GIT binary patch literal 408 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`($k<n8Xl@E-&h>|H*Y zfq{X&#M9T6{RTH11FQDNli^wn42)KuE{-7<y<4yB^*Wp&a_nQh-7J%dCM%{2wNLX} z-I2h~9(d&9!Pf%%2aZY$q^rB%J#z5wMOW(`ohvfBJ6x3|l4q}4yTx};!?Ftj)z_Hq z<?cQI!1eS@$pHa388$A3?@=`pTHiMdEi*slbJF!)iPFJ^o%Zg&dea|ycuj44S+vbU z%rL+INZQ)AYb6;Gxhf~qA8q1$F)=}L`>xxe_Y!xVss1eHdj6uv$qaqDeUs8(Uwk9Y zSKD<egze^x!{?s;EDhZ!7PdliqerLn!)a27=WWsWp>S*c6=AmASXr6A<03BS4}0`Y z-lX&7z5J4}Evq?n{nt*pFjsor9j(5<ZPzp(AD_;+G(Uo)X~F6}yPIX@{Js@l+a@@F zy{FCGP5a9Grk&$s6J`nN@6(JE@#JD^J<EILP|f{}{2%gZ8TCgmJg}Eto7^AiVJgJH Pz`)??>gTe~DWM4f9>TBe literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/382.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/382.png new file mode 100644 index 0000000000000000000000000000000000000000..00f247911a40dd9ca96c84aa47b8bcc22685ad0b GIT binary patch literal 3001 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 literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/385.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/385.png new file mode 100644 index 0000000000000000000000000000000000000000..dadf7b2f397f9c3fb5d987934929f88562e9f92a GIT binary patch literal 3045 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 literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/386.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/386.png new file mode 100644 index 0000000000000000000000000000000000000000..3600748d60e07aed4cd4e436e4838013e6225355 GIT binary patch literal 2933 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 UZ+y3hfq{X+)78&qol`;+03!)^IsgCw literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/38649.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/38649.png new file mode 100644 index 0000000000000000000000000000000000000000..e5ec034a6f5b9fbcb4fb4fba7f8c9859fe3c23fb GIT binary patch literal 473 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`($k<n8Xl@E-&h>|H*Y zfq{X&#M9T6{RWpTD}xq0*9sd32F7Yn7sn8b-mOz&wVM+qj@O?zOHS);otN|3tkorm zuj3P^$k9gr2S>^aPEEhjsmy+)Q`z&Bcc)0$jMg_tPk(!H^VT<s+ixAF+>*PU_5bke zUH|sKd%ZN;$Zs8omV&eD0tU6cDSNN_1pQ8_+A>wRzDI8R+yI@{Nfqi6zKQ}JOn;xT zR;Nfi$MW6j4V!oG(w-Gk3>SB}nW@i^%zmsUa$NcLjnB5lVgX&u-a>m;y<a11!=S*z zW1?!oe`V4?lcK`^Y!2&B_su%>q;_M-n@`)8`RxdM_2Ji?AB(otzb;Mxv-sva^_1+k zX}cueeiQk8`>)I8(5KDMs}A|>5M`S!EV1PMF{?M3V(xj7cJEXsnJBkRxxTtOFY4Nf z4Qql@PyFrdw-z;1^Dhjk7y0t4$vl7d&S2fj;@5REXQb)z&k+{lwyu?FeO;d{Z^`_7 zAzRq`s4r{&>+4TibFBL1q1?+6R_|2i8Ge-5z98+(TGv=tgTTXi7Y-)wSU96-L5sCs fsOayOeGHY2ZAYpz>k1hd7#KWV{an^LB{Ts5b?DMg literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/387.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/387.png new file mode 100644 index 0000000000000000000000000000000000000000..c7ea660b758bd41cb82c54d010aca9c0bb671413 GIT binary patch literal 3078 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 QFfcH9y85}Sb4q9e037kSxc~qF literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/3883.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/3883.png new file mode 100644 index 0000000000000000000000000000000000000000..d9cdd7b04dac4bcc565266746535e1cd9f83fb85 GIT binary patch literal 421 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`($k<n8Xl@E-&h>|H*Y zfq{X&#M9T6{RTIyxUQ+J`@J6w42<rcE{-7<y;~>m&0=yCY2E+EzieX1UAv})xn8RU za&lA-CIm%BE)~$$u4ULL*zMr3K~$AZ=ZMylJLUqP7@Eqm4&1ePy-dKF!}?##lWpJc z<)52lTzu%~;`8=Xie4;O$juY`hc_bJcG5<{Woj$pzORV0P0VUa$!S?vwV%CvtCOWE z!_nneP6t%&V?4Tij+DZ+-TKu^pLfj5{rsWo<n1e5F+EYi@ATs|%HH(_+r+mOv}%Pu z;hOr>sASJ0<I4~48ZPbroyH{k{E^w)nqqa41#|N!b>D8>>u~h;k??tUx@wCXyTa#r z>0VaN@?COah3Ud+FTMDuw{0(Q+Tk?4DR$xJf+r6>4^FL{^-<^0h6@Tg7V-A_ITk$J zyvH_kOs$LJy0%2tY}%GLEZo<Z%zNALKKRYOOPhqN|4z5tKEHHTZqu(DAGh&`{n^XM cn)h0GetntGgdaxI3=9kmp00i_>zopr0I*WH_y7O^ literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/389.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/389.png new file mode 100644 index 0000000000000000000000000000000000000000..0f3ba712423b81de3c838f375d374b0dacf68c42 GIT binary patch literal 3170 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 II;Vst02A}y+5i9m literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/39-vatican.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/39-vatican.png new file mode 100644 index 0000000000000000000000000000000000000000..68e637378ed913fc4077c9d4391aca4eefa5f9b1 GIT binary patch literal 3050 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 literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/39.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/39.png new file mode 100644 index 0000000000000000000000000000000000000000..4fa1169543b3645a2cd29eb4d4472a042dc1678e GIT binary patch literal 151 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`($k<n8Xl@E-&h>|H*Y zfq{X&#M9T6{RWGyAS?Uqy;~15Ffdqpx;Tbd^d_gwc=ByNBl`|9+ut*mO_(EUwln<m zbeZZ~)~u^#n3<WGh4nbS4z4)3n5|#RChJ3k6c58iM=oEkq8w`m1_lOCS3j3^P6<r_ D@NO)- literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/40.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/40.png new file mode 100644 index 0000000000000000000000000000000000000000..4787d77bcba76196842d46952c278280dee94326 GIT binary patch literal 151 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`($k<n8Xl@E-&h>|H*Y zfq{X&#M9T6{U$RPCy$}B6Q>sg1B0cfi(`mIZ*t0ob^p&dFvq-$D)b3{wpY|_XZY!x zeS2q|Yz^&eY;0`goX)Z|;mU)+W_MmW(+US(HU{2eE~N`j$^RJ`7#KWV{an^LB{Ts5 D3xzK6 literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/41.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/41.png new file mode 100644 index 0000000000000000000000000000000000000000..737149fd040f764ca255204e8fb3209d03de0ac5 GIT binary patch literal 2849 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 literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/420.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/420.png new file mode 100644 index 0000000000000000000000000000000000000000..5b01670a952df71a8a685c8bff47bdb9a9fc37cb GIT binary patch literal 400 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`($k<n8Xl@E-&h>|H*Y zfq{X&#M9T6{RX!rtCjjYfi3b342(veE{-7<y~!SVv48*HU7r7cCGQM*gKV=kcZw%E z`i8YQM!L;tjB1z}d~@H!*WcrLvcJWrRs8xT+}yiQiP>74`zV{SV)3*$7RM7N+x0%Y z(E3|M`plV?IrkfMKD>O*-!`>c&uGv8KfMQ|{2Lpmw$9XPp1FbZ-~a#f6R)*R=HZJp zmN<8>!fDz;2|YKq_ja|(5&K><9X@}*UQ(yzspO2A8+I{kCy11+{q5g#$U)MtO^-Ql z5wDuW-!uRJ8y?xS>&S$Xk1~f}pZ&igdBdN6ex9xUd`20ywZ2;#D|pjV5)wEni>E5S zewoSkt-jvFOl0*zq5b;|LTs&$Bz*cQ8OfGpdgJ+9-?l%?)g^cQ|F`Hwz>b55_U|_i zv9mgo@b#tPQMN<8WtH{)3!j_}WZP$NzcNjOnVFfHVdcJUlj?MH9T*rG7(8A5T-G@y GGywp9{jJyl literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/421.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/421.png new file mode 100644 index 0000000000000000000000000000000000000000..2fef0e26e14e3eaecac16189cf9377efdb8f593f GIT binary patch literal 409 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`($k<n8Xl@E-&h>|H*Y zfq{X&#M9T6{RTIyxFNgo^Gm7>42;&EE{-7<y;rZ;dLIrDVSDiXRc>&UNS>(Dt`@K6 z7cUm=uz2xK!{UeVANGH&=8j!EI^=gRkZqEm;drpY*>R(X`qs5mpIy5#&CE7$l13}r z*$2C2ExzxZ&ivd+NvUPRK7$JZiSKl+-t*0weOumlV+q&9ixU%!DuayIpA@o+bXxvu zqvN#;ERjyjA3ft^<xSt*9zQ+h*{d0B3v%-vJTpDy-zx3j(zW}JafpAs{>QU33i<5j zxERMbXsc$Wt0n!i__cV??VtA^2zf8~9N2E6ccH4v@$3$l-7$?JZ1wEv-CQ~I4rHD? zb}CL({kyNoy;}ycrUqvWiXTKzFg<&$Zr(y6*@kNx$wr)WE=w%A%*7V%^!=a@M~<(q za&XW_iTb0v&M1BRA@Jwu{X~X@iyTs)xjW)#7UW7wyyg1u`tN@HN6wj7SK0BWlrl3g PFfe$!`njxgN@xNAj5Vt= literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/423.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/423.png new file mode 100644 index 0000000000000000000000000000000000000000..1a7db9fa5a614ddf75c9125b76c048f74c94db28 GIT binary patch literal 2921 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 I=akR{0Nx#N(EtDd literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/43.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/43.png new file mode 100644 index 0000000000000000000000000000000000000000..40e0b1a0ea35572fc9d87bbf7c5a061b16103a69 GIT binary patch literal 134 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`($k<n8Xl@E-&h>|H*Y zfq{X&#M9T6{RTIyu&~y(=7cp23=A5cE{-7<y~%qNkN=wA$kxy)*48K0!zA(l|9^X_ lO6MyH$1ct>FX3flxcrNQXTEMBGXnzygQu&X%Q~loCIB5FC`14N literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/44.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/44.png new file mode 100644 index 0000000000000000000000000000000000000000..9318eb8fe70febc98c026e9a4ffd1afa3d3208d2 GIT binary patch literal 3740 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 literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/45.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/45.png new file mode 100644 index 0000000000000000000000000000000000000000..969748551ec2684350e526cb03bdad0f30181c7e GIT binary patch literal 3015 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 BpKJgC literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/46.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/46.png new file mode 100644 index 0000000000000000000000000000000000000000..143799009caa4c49364369cc7cb1ea1d5cb641e0 GIT binary patch literal 3059 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 literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/47.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/47.png new file mode 100644 index 0000000000000000000000000000000000000000..1afaeccf0977d2aa0f1e98d2117b0b9ac73a1773 GIT binary patch literal 3115 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 E09L)sCjbBd literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/48.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/48.png new file mode 100644 index 0000000000000000000000000000000000000000..8a8fe27ba9d1c24b3b5a5a888d4f8f7f406b6b90 GIT binary patch literal 2820 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 E0CoU6L;wH) literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/49.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/49.png new file mode 100644 index 0000000000000000000000000000000000000000..72f0868642f812b89768f6dd45b984ba90239b5a GIT binary patch literal 2870 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`(#+;1OBOz`!jG!i)^F z=14FwaQSCCI|l@0<d@_ZXXF<scse^P6cpvBW#*(ZFjU-{8=M{z{8G&J`@Jtt-W?57 zyz_%ZITV7Nx*J3$s%a^53V3xWF1#rkcu>&Ql|}l*f)3`szJ?yrKpmbgt{d!66c_b1 zFYf3%_4{G<;_PdCzCSzrZ|ilt=W9OC-F%+?00+-B592`72A-8pa)J+<j~_Yq@QI#7 zBbQ16g8;|o6vg7d%8U#@>TGPZl@74)V_>Yf%+0}Yz<2fm1DW>!{I8s5#xORtFditG zXyMJ#Aj05K)#tQ~!NHBOVeSmIV1@-O3<;-`lO8h!=rSaz*FU?=&@lJM%xXr4=qZY# zj0+|*C<v!^xG-c`Gpsou*5%3&VZb1g=6%GH;f5}QfoFJ{2g8Q#3<u5$aBpJZ;9)Qb z>}b_wV5w$EIH9au!O$|3LB#D-xXnlHbpp?|7#J#MZnD{_V(Ho#&7oV!9v-eIr*Y0x zTwBB}ktuPOgWjRanUY40Cj1XRpJ8BFFi}+SLG$Oo73cWYojYgNw~a4e_tk#3|4K<o zkN-VAzq-JIf#G3E-Nk=8`kSR1tl1iJ|1DB|$C44py`c1aciJX?hph|?Ufv4-TmT9i z*M$>y-n{wr$&(viN1UP)Pleb1OFtBUApCF6&pMkw-@iWC_eiDDD7Mj^<;R0VXTJC> zl{r6&vnA=yvwrtK+qwV$k-e;R#4~AUgqFzTK%v4umsvfZjg~5PI!)3%s(R^v%A@-_ zznSgsn=)+3vSX~CsJkLInfaTyx<Ew9fk)pN7(VUJKX^rhgSjE2`QiEU|L^Vpx-U>= zXh`#%RLH;(=c1w)a%!{vaSjFsmj#Vl8yuy-9F)*Gz$SB$_0B==KM7_nPAW$ZISDv% zr8LMCC1|c`a?)r!yFpefLH~+_tjU4EjJC-Ie0qmMcktO3@c&BWn0HWPPa`Lb;|UJo zM8#Vjj7eP)%6%N-Gh2Ts9`s-l>Q+%W*&!0B<UP^U!!W2TL?P5e_LFT9lVy91+pdY$ zCm4*H{<Q6JH=NSADbV%`&sOK1E6k-@+!k?PNGUO#)i1VS_JyJ?Qno#23!h(Doxy*r z-_H5C!GRYN?8ZlO4D^m2cG_s6!#O$m^hTvMJgbjMZ3tV#yu0&j^7)PBEJBU02RO}G z%AFJv<s3aCd?NgAc&t#6Q85v`#c9sT+!A<5U1{<P?=5P(1b-fpNHQ{PkMPh@z9!T! ztS?aA;e5ngMX1x+NPXu7CeMvaLM{nia=Vllr2JB6<!loVDdov0Z>3~!Vz->4qo94F z^~u~Pho2Zfk$$51DVl3;l0)H=AHk0_f=*?5Nj?>LYVwpVb%v2+=;B#HcULS75j5?O za$37^ThRKz_7%b=rL!#0Hj8<BFI~H6>Sd`6@r>`8>tB@Y61+QA&TsmK@Jpv(y1$tI zg85514{w`j^YM;!4awOO>=Nmc<r3>>_$-sW+%0)L#K7F}^^E5;`Df;bMrdu*su7)d zifgLZRJEznTKXX?S1nt0Zxwgw=g`w3{VU^wYuCAj8V5gK$$4ek>d;kl16~J92dA&J zUeUfPeMNqV{gS%KznyH6hkXwFJ1+@burdDeo?{B!$&#BZbQH6BSGScmnjTTxc=l#Z znbz(Ze`R-f+pb!<(9+r1%Q$><(B~;>_Uw;m6#ke~;>Y=1WBK&YbzS#F-fKS6lwM}y zv(qp&CVSPi>C+-sd#nyz?f!bN*}AvO=Pujpx;yfBBcJ1OFZCF8_w@dAtaG0S-weLH zoNKw5udUVBb$Y9^mr5_(?NYu!Z~40!^Y+Cx%=5`#ey?)x^ItNx`hP?I=Kfm#)tx7T zZ8MJw+ijk65;jLo3-fJc^^f2F80Z{(*ui;e;?%_H4_hYgylAuds#~uce^2JIn8zxQ zbC2a7Tdc;Wrl{ua`^xv-tRUZ=%QTl+`&j!NKYQlvqO;d#n$EU0yl(V-_Vd}-XW!qR z5LFSSvu(w;9jTt1o<uE+e79{+UTc(P<kE=HsMyVJYv-<2y|#Pp?&X5Zclu5CTRrbu z`r!>9x1HR!a=YY)r#IMcuiKWptu`?|Nj!b~(RGL4P2M}Xc2{lhUt4zG_M3dGWus*4 zinkPrScO^Ln{{r^JNw$BU#7j(Pmee+aQ=qz<88vHHIHP@4W513JzYF~XL0lAj_ywH zrqg=U?eu0#AG>>E?-Q?*uZ6J>t1f+=JA3o&LvL5yUjNSQUFN&?JM+(&%-5V3X<U5a z@CoM!fln{mbI+e@kbQqmoxihxWBS(T%KFLr6T{bD->`jY`Ks@U@5SxD*%i%yZ1>p4 z{GQRh$oMnn2ezNse%k+V{=E3s`_A>s|5N@~{lCbtyg`*Qow>8ou`!zI_m8R?#r=Ku zR<~2XZMyl^v1h?fM^VTArnOB^53W_rIPqq}TE*|rXPldOE|ae{pzg)B3+#!{61xxA z@u;`9w}!Xb_Z4(RNL@6XZd!ivj&t#SmtQW^T<*<IH}tn$uj^&1Ww%N%%jTB(E|XpM z$Mn)7&s>d|8{wJbEn}&twazRrXW#ulZ$Gy`n)`_Rakcmi{S&bTl?%@u`qH{wY^9!% zj@2{=pAJ8ZDIXjKv{s1qsD2VISMB4fJS2N4T}l6<*~N|<&M{hYexE$Fe5)qCnYhQa zQst=eQk|zeThv!h*yF?Nb9c7YJh5423b{tMR(lPbCrzAC=(I}Fck;IMSLx5v%1*CI zZQb<mXkPbreYvUZC$l$CSi>5r%eBpE*^7`Ujq6(Mo6=Lm)Apb3JY_j;^*rsfZ_jK# zb$f#OocHtpzZE(p^l;L)rET8fy0Q_^_O8jY++<T&d7JC8D64i`7~2|~9bMbBa<BTY zej7f0UEN-_D&OqJxPzyf4sK=4e$5@q^|ZD2^_}Z)WBnuaBkylb{M9yB+D^2yYn{k# z@#&)VH#F{4Je6+GKed16ohe&Zu0FCe<$T(uw3pBB>CTJho3?8Dv*~<!yf<%c;k_TW z<?YvRuDA84pVhd%yLp@Q&c*v}cI-)Ae)8N|Yx|HTAzwm%g_ym&ba!jw^&fc`-$_^R z`DXIw>h0(~-~Za3+;=;aG1T{J+SSzGp1(JLw_n$}>gA7VzjI^P`sEhBJ<fcI`7gUN z-?r;JuUwVAWE&FHe@*+fJKu5negEdZFW2QY;|=YdbL^3FflK9+m)|+>f0yI6x>eRw zz2+hNW%)AMbXol@r&*t7xy=rq^*cH#dYAthyNlOe-K+ZJep{Y@j)_fVrPt?>lbN?( zHeH^a{^@+r+^KVG>-2u!Nw~deTlMqgbN93O^WX0hD0z6v^?&zs>pj-zVm|FC`LyZw zQ{nI(;j`9T#pk{%d1do&@@4<yyXWklwQgrj_Re=zd$(4neSaxE&-~ooFMBILiv7QK zb)Kc|-Mycy^1mPb{`J1t-MS+6zvoWxzFDsRZtWibJ@H>0-a6iNzT1A)KKkFC8}IMb zXB{YC@cH5$_wQ`2&FBA3{Myg&%-TP*|8yH~+v|B2c9xcp?2G=s{IlHoe9C#XdE);T z{X4x*Tui_2$JN)@&t05xapCk&(<krGty%i_)q&TN>u(=BbWCpF$qHk`xG!P9-yST# zQ!e{{@qK>(Cp8N78viqXZu}a2VfpXLl9MO@XJMZ4`A@R3?rjDJ28CpgAYTTCDpdxC zhGqtapZ^&c8eTFmlo~KFyh>nTu$sZZAf7)d{-_%R14E*xi(^Q|tu0qJayA%9us%GU zujA^P{aruyfbX0GY70_XVwK97YtA-LZxEi58SQz1m#6okdV|;REQP7++;%z@TOV9+ zvgdy1#(A%dv(L3@;x+CC;&<$rr+*NC%Fe*>|35Rsza6{_9?!O4$iTqB;OXk;vd$@? F2>?^VP$B>T literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/500.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/500.png new file mode 100644 index 0000000000000000000000000000000000000000..55137c4ae14ab41c4b4f6fa1e89899c1ee636aa8 GIT binary patch literal 3239 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 literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/501.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/501.png new file mode 100644 index 0000000000000000000000000000000000000000..57eb05c951a0e39f4c9706cba6dc6c7783d30cb6 GIT binary patch literal 654 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`($k<n8Xl@E-&h>|H*Y zfq{X&#M9T6{RTIyxUNe1_kUar3`_=|E{-7<y<4Z)`Uo?M9IwAFw|CpTrBl9Thz1F; zUJ_#yKA^=W?AfzhjYV9&M_#&{Pl{K~N<yZ0cAlFs8@qDhMMhUw<|Uk5E-L~iRW1G2 zye)jkwsXhK)-vbUzW;yv_le)!@zPdaZyY<8{}Ep$R=RZ;hfE%m!WN;Yw`WDk&M}&$ zrPg1zW2fz{<`e#}e2q%ogm*r&E3#JK`R|2svG&ETDCea|9LkL!hl_q{b)De7CwTdc zUf<wN9VuT}=iPhr)MdfX{|CZ~Wgk!POEBXq;r2bVr_wd>YDd1#r(aK<V<g!x-cNiN z|2c8uky{53FTd@XcD>+u3D?5sbKZXmys$m6{Ibjyz70R#a9&!UyJ;qevh%-N2M@}z zdYUY@5M`On>uhr_;{%)c-dGJbX|{0TcW(MtR>zsXZF;b&xZ>4Yj-?Xk9PFQk*>}$H zN~vR89=!bf8-{h?6jLJ8iW9roqJKV~{?=lak8)=kgNd*6q+FG#W|vpzH^gT;UN&I} z`Y95<a_%kbe;WjjXZjoOw>*9Psd&!P#b<K2IbLkK{;hS}F+Vr9<0syw{S@(<!phBa z@Avc1I+IR3X|6l-Bp^k9wSAI^toN0vYgDeM-m1wnn{;}M^)HUNc`DPdXGgp0tuOvw zIAhVpmRUTHGdEt+kU6f!V)3MSvD)F1>R&sI3}eNj1bGZ(Zzbd;P5rWtyFVx0*4la5 zhq+FP(w<+6-(8Eo*RC}63CFfZ>rmenhhP6Wtv&6~#w?+hy+zyYd3#SY%c`FK%fP_E N;OXk;vd$@?2>=;DA-Dhl literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/502.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/502.png new file mode 100644 index 0000000000000000000000000000000000000000..5163b833e9a1094e9b04e61556033e2d40c11f7b GIT binary patch literal 2978 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 PU|{fc^>bP0l+XkK1-Oc0 literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/503.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/503.png new file mode 100644 index 0000000000000000000000000000000000000000..efa15872dc3e335a1ac64dedfae871866b245e0e GIT binary patch literal 2902 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 literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/504.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/504.png new file mode 100644 index 0000000000000000000000000000000000000000..f362afaf493b9a84b7b24ce5585ec4c2a35a6c0b GIT binary patch literal 2912 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 literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/505.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/505.png new file mode 100644 index 0000000000000000000000000000000000000000..083033e12dba965ace9af837e41b61d1266d89b0 GIT binary patch literal 2934 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 UItV{tU|?YIboFyt=akR{02>KzlmGw# literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/506.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/506.png new file mode 100644 index 0000000000000000000000000000000000000000..59e1f37393f51e88566824926c42fd96f2e31cd0 GIT binary patch literal 2852 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 literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/507.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/507.png new file mode 100644 index 0000000000000000000000000000000000000000..a6b852c9785475de9af4a24f47ed57c2b71602b4 GIT binary patch literal 320 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`($k<n8Xl@E-&h>|H*Y zfq{X&#M9T6{RTIyxG9tR!^i6w7#JRTx;Tbd^d|rL|NnnIo6^Bl$Ka%?Mh1z(e?IqT z{9Ph>XV+iDQr>@GzuP;1*>ju6clLaPBWHG>{qS1<;=-2u31(?-Y}TT7Y^9!hY|)~2 zY-VY0n|RY)`uF(T|1<bdxZyx%ibLR&gFMdWQ$h~h*!Y<9BBNw|lI=$}<0bOSw;udA z*6B2p$SzW5{j;O2eHYvR-ygdlzI_wQ!=L0WdGB1@(GTyB>%WpXbL8N$5ATorx846f z-{{ZppOYIqn|rO;j13G7HfWwSS|JyG^1w2UZbkRNS&zP#C4j(#3js$aEVlSmz{oIB X#O2mpm10K*1_lOCS3j3^P6<r_$`6RJ literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/508.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/508.png new file mode 100644 index 0000000000000000000000000000000000000000..24b6a4bca6540e3c9f2bfb13dbf91cd37186842a GIT binary patch literal 147 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`($k<n8Xl@E-&h>|H*Y zfq{X&#M9T6{U(!$h!%@}d3g~71B0oji(`mIZ*oe&jQ{f)*(0nD_9>o<=Ujbf{@QBE zx@lV<T{?B3CAiJWAnU`5gNxbvrEC_kF*7W?%TY5oS!4+V0|SGntDnm{r-UW|TbwR| literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/509.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/509.png new file mode 100644 index 0000000000000000000000000000000000000000..f9269b395de1c66ee46e911586a72a9d70427edc GIT binary patch literal 2964 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 Bf%E_X literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/51.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/51.png new file mode 100644 index 0000000000000000000000000000000000000000..afb3e6ea871c39fb1992fbabf6e5a0abaf549f9f GIT binary patch literal 147 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`($k<n8Xl@E-&h>|H*Y zfq{X&#M9T6{RTIyxQ<eLe^wm>1B0oji(`mIZ?etd10UuyvIoTMn&POT#kKm*?$px~ z@7&!VUpjT5CAiJWAnU`5gNxbvrEC_kF*BU0V}JQGu*QUefq}u()z4*}Q$iB}f;%rC literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/52.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/52.png new file mode 100644 index 0000000000000000000000000000000000000000..8fc90266fb3a34a700b3239baa97eda842033df7 GIT binary patch literal 2954 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 literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/53.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/53.png new file mode 100644 index 0000000000000000000000000000000000000000..fd7ce15da4cc7c4786515401ef10172f9ed307ed GIT binary patch literal 3234 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 XeziZ(q)>4N1_lOCS3j3^P6<r_weta) literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/54.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/54.png new file mode 100644 index 0000000000000000000000000000000000000000..64a961aa762f80fe60b3c6c8fbe9be0bbd432ca3 GIT binary patch literal 3003 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 literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/55.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/55.png new file mode 100644 index 0000000000000000000000000000000000000000..d2b4c2231efa14dcf4afd6b9eecc13fd2d859a8b GIT binary patch literal 662 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`($k<n8Xl@E-&h>|H*Y zfq{X&#M9T6{U#GL1BarhLgRb}1||zn7sn8b-mQ~;Jth~*9JfDzd0WZ3otAU;-yRiB zX76OvD!t_VLQ%;kbvj?^hHghel{h8;X9``f1e|wqT;wkCvg(*_!1HB6->I#a%p%Xt zEZ(}ce12&_x_*DQKyCm3>F58S{{H(n_nns~KFh02s|rwk7TCG8T7&b>x=y3FGZJqZ zI`3Bd^**6l>2ybGqv7oKvkThJE@(5H-7a{ViOqGJMug&a4Tkj9&OEXaPu|Yy6#jmG zv)D?80~sB~Zx6A2c3&pRA(vtj)F0zeZ&5ZyRbu=3N873*zrNo2&dyh7q4t~h>!vYf zb5n97+i$;0y<^wCSVu8AuUhMrYv<}x#&r_Rt&`?ez5AHw+#R%Z!7e9nzY~I=TqUY4 z{M}!(=Y6$jS5W4>!xLSwHp;{6QJ%;mhW_0A7nj`XD!-m=)~soi($c<qBq@4bpX~Na z&tE0IYZbb|wEBn*^VhnlD~7wo`IVn;Up(Q{h0Rya1f1}46XHskZRxn!)8A_D(Tpp> z(W{?+ZJB>jI(Umk`QwuwOwNkhw%%twe%?3o^HOTo_T5q$J+mjAv0&YA(Rk(i8sXZV zNB2+mdTucD%N5fp#akYlF--obb!*RBo^>XoNfUI>&knl$viQ>L@`Nop1~o4we}8ZF zRNZ_e*>lS-mD=TZuFP2c<(F*9uQ?ULulAmvJlSz#>W+`f=_T2F{)aRxG~E5w>V7fm zm%V(F?eaUXvkE`--7*b)H>;K*CT81bqjkSe_X-_!NMxzk+dd<ue%>4})^{)1!(+~d VKNYDiV_;xl@O1TaS?83{1OQ$3Eg}E_ literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/56.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/56.png new file mode 100644 index 0000000000000000000000000000000000000000..e1ebcdc4d00eeacf068fc738b36d8b69a9221b26 GIT binary patch literal 239 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`($k<n8Xl@E-&h>|H*Y zfq{X&#M9T6{U(#7fUfFIo5oiR3=9)JT^vI!dXrNOVt>zPWRJL&b4uW;UbnZDeuC3O zgNH$G3lDDfoOQ)~hh}W|LOs{!hc9HR*$f@aUP<ox`hvSnx__U+oc&)XKD_#SzKHZ0 zrsO+2{?Bx@&M{|}H`hMeW@MnS^T*@s_jy2I{sNPw4XQuSm(7`!^n1O*p2}1H(+>88 ne`zULmh8nK8vJg>!NbQA7%o_;a=wpy&j13Ru6{1-oD!M<1qocQ literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/57.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/57.png new file mode 100644 index 0000000000000000000000000000000000000000..56d1d716f022f124ec49e28da33229243e9a912f GIT binary patch literal 157 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`($k<n8Xl@E-&h>|H*Y zfq{X&#M9T6{RX!ryP##_>jl*e3=H<3E{-7<y~%%y1K-#)^D+qQ^2nN2bV#3>wB^8i z1zn!Blnpa%X7x!*fWY^T7xS049@KHF-!Faf(1V5I#~AcxaXmaOWwD-tfq}u()z4*} HQ$iB}?*lPl literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/58.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/58.png new file mode 100644 index 0000000000000000000000000000000000000000..0c259dd70208631cbefd34936fee59117071cd47 GIT binary patch literal 273 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`($k<n8Xl@E-&h>|H*Y zfq{X&#M9T6{RWo^qm<I&zqZW`3=Eq+T^vI!dXxXu1^%&T=4BAp<&ia&U^Ot3Sbt2q zvZsfKXU>~5JZxD^JRl&RSDWzT-)H^9^-O_&7mnUssKsNY^@pd%W(^pF*f$qyvBaKf z^510Z-o7yZWp3N`_w|c9?$`gCx)3B%bV_tiRUunz^G1!slf&;zzO(t)6uP)ehrhW; zLj7>#=Jgv-J?7~Oe_wA@^Xr%N@@~8OzlT3?omJP+v(sN>JL_}Xih~UIS&UaMP<&Cv Qz`(%Z>FVdQ&MBb@0C|pQhyVZp literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/590.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/590.png new file mode 100644 index 0000000000000000000000000000000000000000..24b6a4bca6540e3c9f2bfb13dbf91cd37186842a GIT binary patch literal 147 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`($k<n8Xl@E-&h>|H*Y zfq{X&#M9T6{U(!$h!%@}d3g~71B0oji(`mIZ*oe&jQ{f)*(0nD_9>o<=Ujbf{@QBE zx@lV<T{?B3CAiJWAnU`5gNxbvrEC_kF*7W?%TY5oS!4+V0|SGntDnm{r-UW|TbwR| literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/591.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/591.png new file mode 100644 index 0000000000000000000000000000000000000000..397b63958533972636df624646a2576e7084a0b7 GIT binary patch literal 140 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`($k<n8Xl@E-&h>|H*Y zfq{X&#M9T6{U)<4x48H;<3Fhk3=DdnE{-7<y~#G}E56NdWNYXYYwMHhVUnni6PE7X rqnKsD{adJXmW0ihrlc2=JPgjxtTzkA?tW)rU|{fc^>bP0l+XkKm5L}r literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/592.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/592.png new file mode 100644 index 0000000000000000000000000000000000000000..7ee71fd7e9258889a32fad74e618b029a2cba9ce GIT binary patch literal 3185 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`(#+;1OBOz`!jG!i)^F z=14FwaQSCCI|l@0<d@_ZXXF<scse^P6cpvBW#*(ZFjU-{8=M{z{8G&J`@Jtt-W?57 zyz_%ZITV7Nx*J3$s%a^53V3xWF1#rkcu>&Ql|}l*f)3`szJ?yrKpmbgt{d!66c_b1 zFYf3%_4{G<;_PdCzCSzrZ|ilt=W9OC-F%+?00+-B592`72A-8pa)J+<j~_Yq@QI#7 zBbQ16g8;|o6vg7d%8U#@>TGPZl@74)V_>Yf%+0}Yz<2fm1DW>!{I8s5#xORtFditG zXyMJ#Aj05K)#tQ~!NHBOVeSmIV1@-O3<;-`lO8h!=rSaz*FU?=&@lJM%xXr4=qZY# zj0+|*C<v!^xG-c`Gpsou*5%3&VZb1g=6%GH;f5}QfoFJ{2g8Q#3<u5$aBpJZ;9)Qb z>}b_wV5w$EIH9au!O$|3LB#D-xXnlHbpp?|7#J#MZnD{_V(Ho#&7oV!9v-eIr*Y0x zTwBB}ktuPOgWjRanUY40Cj1XRpJ8BFFi}+SLG$Oo73cWYojYgNw~a4e_tk#3|4K<o zkN-VAzq-JIf#G3E-Nk=8`kSR1tl1iJ|1DB|$C44py`c1aciJX?hph|?Ufv4-TmT9i z*M$>y-n{wr$&(viN1UP)Pleb1OFtBUApCF6&pMkw-@iWC_eiDDD7Mj^<;R0VXTJC> zl{r6&vnA=yvwrtK+qwV$k-e;R#4~AUgqFzTK%v4umsvfZjg~5PI!)3%s(R^v%A@-_ zznSgsn=)+3vSX~CsJkLInfaTyx<Ew9fk)pN7(VUJKX^rhgSjE2`QiEU|L^Vpx-U>= zXh`#%RLH;(=c1w)a%!{vaSjFsmj#Vl8yuy-9F)*Gz$SB$_0B==KM7_nPAW$ZISDv% zr8LMCC1|c`a?)r!yFpefLH~+_tjU4EjJC-Ie0qmMcktO3@c&BWn0HWPPa`Lb;|UJo zM8#Vjj7eP)%6%N-Gh2Ts9`s-l>Q+%W*&!0B<UP^U!!W2TL?P5e_LFT9lVy91+pdY$ zCm4*H{<Q6JH=NSADbV%`&sOK1E6k-@+!k?PNGUO#)i1VS_JyJ?Qno#23!h(Doxy*r z-_H5C!GRYN?8ZlO4D^m2cG_s6!#O$m^hTvMJgbjMZ3tV#yu0&j^7)PBEJBU02RO}G z%AFJv<s3aCd?NgAc&t#6Q85v`#c9sT+!A<5U1{<P?=5P(1b-fpNHQ{PkMPh@z9!T! ztS?aA;e5ngMX1x+NPXu7CeMvaLM{nia=Vllr2JB6<!loVDdov0Z>3~!Vz->4qo94F z^~u~Pho2Zfk$$51DVl3;l0)H=AHk0_f=*?5Nj?>LYVwpVb%v2+=;B#HcULS75j5?O za$37^ThRKz_7%b=rL!#0Hj8<BFI~H6>Sd`6@r>`8>tB@Y61+QA&TsmK@Jpv(y1$tI zg85514{w`j^YM;!4awOO>=Nmc<r3>>_$-sW+%0)L#K7F}^^E5;`Df;bMrdu*su7)d zifgLZRJEznTKXX?S1nt0Zxwgw=g`w3{VU^wYuCAj8V5gK$$4ek>d;kl16~J92dA&J zUeUfPeMNqV{gS%KznyH6hkXwFJ1+@burdDeo?{B!$&#BZbQH6BSGScmnjTTxc=l#Z znbz(Ze`R-f+pb!<(9+r1%Q$><(B~;>_Uw;m6#ke~;>Y=1WBK&YbzS#F-fKS6lwM}y zv(qp&CVSPi>C+-sd#nyz?f!bN*}AvO=Pujpx;yfBBcJ1OFZCF8_w@dAtaG0S-weLH zoNKw5udUVBb$Y9^mr5_(?NYu!Z~40!^Y+Cx%=5`#ey?)x^ItNx`hP?I=Kfm#)tx7T zZ8MJw+ijk65;jLo3-fJc^^f2F80Z{(*ui;e;?%_H4_hYgylAuds#~uce^2JIn8zxQ zbC2a7Tdc;Wrl{ua`^xv-tRUZ=%QTl+`&j!NKYQlvqO;d#n$EU0yl(V-_Vd}-XW!qR z5LFSSvu(w;9jTt1o<uE+e79{+UTc(P<kE=HsMyVJYv-<2y|#Pp?&X5Zclu5CTRrbu z`r!>9x1HR!a=YY)r#IMcuiKWptu`?|Nj!b~(RGL4P2M}Xc2{lhUt4zG_M3dGWus*4 zinkPrScO^Ln{{r^JNw$BU#7j(Pmee+aQ=qz<88vHHIHP@4W513JzYF~XL0lAj_ywH zrqg=U?eu0#AG>>E?-Q?*uZ6J>t1f+=JA3o&LvL5yUjNSQUFN&?JM+(&%-5V3X<U5a z@CoM!fln{mbI+e@kbQqmoxihxWBS(T%KFLr6T{bD->`jY`Ks@U@5SxD*%i%yZ1>p4 z{GQRh$oMnn2ezNse%k+V{=E3s`_A>s|5N@~{lCbtyg`*Qow>8ou`!zI_m8R?#r=Ku zR<~2XZMyl^v1h?fM^VTArnOB^53W_rIPqq}TE*|rXPldOE|ae{pzg)B3+#!{61xxA z@u;`9w}!Xb_Z4(RNL@6XZd!ivj&t#SmtQW^T<*<IH}tn$uj^&1Ww%N%%jTB(E|XpM z$Mn)7&s>d|8{wJbEn}&twazRrXW#ulZ$Gy`n)`_Rakcmi{S&bTl?%@u`qH{wY^9!% zj@2{=pAJ8ZDIXjKv{s1qsD2VISMB4fJS2N4T}l6<*~N|<&M{hYexE$Fe5)qCnYhQa zQst=eQk|zeThv!h*yF?Nb9c7YJh5423b{tMR(lPbCrzAC=(I}Fck;IMSLx5v%1*CI zZQb<mXkPbreYvUZC$l$CSi>5r%eBpE*^7`Ujq6(Mo6=Lm)Apb3JY_j;^*rsfZ_jK# zb$f#OocHtpzZE(p^l;L)rET8fy0Q_^_O8jY++<T&d7JC8D64i`7~2|~9bMbBa<BTY zej7f0UEN-_D&OqJxPzyf4sK=4e$5@q^|ZD2^_}Z)WBnuaBkylb{M9yB+D^2yYn{k# z@#&)VH#F{4Je6+GKed16ohe&Zu0FCe<$T(uw3pBB>CTJho3?8Dv*~<!yf<%c;k_TW z<?YvRuDA84pVhd%yLp@Q&c*v}cI-)Ae)8N|Yx|HTAzwm%g_ym&ba!jw^&fc`-$_^R z`DXIw>h0(~-~Za3+;=;aG1T{J+SSzGp1(JLw_n$}>gA7VzjI^P`sEhBJ<fcI`7gUN z-?r;JuUwVAWE&FHe@*+fJKu5negEdZFW2QY;|=YdbL^3FflK9+m)|+>f0yI6x>eRw zz2+hNW%)AMbXol@r&*t7xy=rq^*cH#dYAthyNlOe-K+ZJep{Y@j)_fVrPt?>lbN?( zHeH^a{^@+r+^KVG>-2u!Nw~deTlMqgbN93O^WX0hD0z6v^?&zs>pj-zVm|FC`LyZw zQ{nI(;j`9T#pk{%d1do&@@4<yyXWklwQgrj_Re=zd$(4neSaxE&-~ooFMBILiv7QK zb)Kc|-Mycy^1mPb{`J1t-MS+6zvoWxzFDsRZtWibJ@H>0-a6iNzT1A)KKkFC8}IMb zXB{YC@cH5$_wQ`2&FBA3{Myg&%-TP*|8yH~+v|B2c9xcp?2G=s{IlHoe9C#XdE);T z{X4x*Tui_2$JN)@&t05xapCk&(<krGty%i_)q&TN>u(=BbWCpF$qHk`xG!P9-yST# zQ!e{{@qK>(Cp8N78viqXZu}a2VfpXLl9MO@XJMZ4`A@R3?rjDJ28CpgAYTTCDpdxC zhGqtapZ^&c8eTFmlo~KFyh>nTu$sZZAf7)d{-_%R1LGV|7srr_TW6-&dPFBmw9ePR zx8&d5q|!|xSqn23PH<ehPIZMd`^x4QOITlCaSbWR5Og<Z7i2Fin!ur$a8^Y9qK4Za z$LN?X(_XY5c`eVm&HPTay|`}Hnod=x^EDL~?@vGE&{XAD{CF-{b#=9!fxgMJMfW{! zrG*`^JnUZiH(2=c6_H~fwr%^c?N0OQ$TR<LDyA>{_`WlIUWi9S=x6cAKdt0<$80gX zs&Lh6+Z!*n#fAIa4y}=Wr!et5J9C6b%`wf_>mTvdoO}G$n{|p%OVs&~i=&qH7k_-8 zD|997a$GTQ%}U`+!=x8e_W57>zH)+6Xv~he9ZgYdnE1QhB;#`X9aPTbDb14n5fnY` zpvO7J+__wDdv{vMnDeX??>Nr;M<lOi*U6BS)_^zG)3&^4W4_@~?sWKWj^T~f|L(r1 z=~}#{Kliw_)pWPOcTN91|F|yPYiNJ9z_>7@F(8M>`_}g6_5W_ne|KCuu}t{1W>5Bm zD`6{EuKlsmGhp_~J)$??ZCrF)&Dm47{CM%6*u5>4ZpZ)eH9l44t2_U%K3Y*O>+U&r ahPl%o+}zIf!HI!^fx*+&&t;ucLK6UE`1ExE literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/593.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/593.png new file mode 100644 index 0000000000000000000000000000000000000000..371dfcba928413beb06ac80e337be95964646c1c GIT binary patch literal 3025 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 P7#KWV{an^LB{Ts5w*ITn literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/594.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/594.png new file mode 100644 index 0000000000000000000000000000000000000000..24b6a4bca6540e3c9f2bfb13dbf91cd37186842a GIT binary patch literal 147 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`($k<n8Xl@E-&h>|H*Y zfq{X&#M9T6{U(!$h!%@}d3g~71B0oji(`mIZ*oe&jQ{f)*(0nD_9>o<=Ujbf{@QBE zx@lV<T{?B3CAiJWAnU`5gNxbvrEC_kF*7W?%TY5oS!4+V0|SGntDnm{r-UW|TbwR| literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/595.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/595.png new file mode 100644 index 0000000000000000000000000000000000000000..e5b17e7b71e05fd6f430d05a054a03c2101c953f GIT binary patch literal 2922 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 J);T3K0RT+NZubBH literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/596.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/596.png new file mode 100644 index 0000000000000000000000000000000000000000..24b6a4bca6540e3c9f2bfb13dbf91cd37186842a GIT binary patch literal 147 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`($k<n8Xl@E-&h>|H*Y zfq{X&#M9T6{U(!$h!%@}d3g~71B0oji(`mIZ*oe&jQ{f)*(0nD_9>o<=Ujbf{@QBE zx@lV<T{?B3CAiJWAnU`5gNxbvrEC_kF*7W?%TY5oS!4+V0|SGntDnm{r-UW|TbwR| literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/597.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/597.png new file mode 100644 index 0000000000000000000000000000000000000000..546ed104b93f776f2f85af1a4081f827357607c0 GIT binary patch literal 295 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`($k<n8Xl@E-&h>|H*Y zfq{X&#M9T6{RXQfpOMgE`PEw(7#L1^x;Tbd^uC?4m(S5rpmqOU?HEU=ehw+#&I<PY z2dXAYS*-pKdMlVZow|3FNc|5_3Re{2+TEG+JjD3qOk?%QlLbq(rPwFvxy<F_Ub}U2 zuuIdogruWW${8Czt?B8A+?D9+bM5;A*5jF{PPrd(>3F*C#15s)cNh!oD_3-@#QfgR zxmfXb^rPwL&%3sAzfQbpk>=wn@gv9WXZe2Fr<~32^9~*}oUlSR;;T0YztC0X=arW% zl*QJbyWukF;_Q&^D}Jrn&$av1#vlK?#N{LzZA+8(@kKK*Ffe$!`njxgN@xNA9qx45 literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/598.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/598.png new file mode 100644 index 0000000000000000000000000000000000000000..3f28450d7fdda086e88991fc30dcfa8d0a67ceb0 GIT binary patch literal 380 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`($k<n8Xl@E-&h>|H*Y zfq{X&#M9T6{W>>~kUEEHsOxnG21Yqg7sn8b-m91QdmSziIr{OvZssi$p@pu|+EO|k zN=l2I=eSI_Yk2TXdxzyup1gf6FP^A1S>1dT#8S9gR9AFuy+K&8lyBX+U8WNb{$`Np zYcF=yT-x!_gkh=3`M1(vQYNMCJ>`+vnWNX=QBd-);rCBbUcSQ<j$LJ(6@T!1+{bF& zrjwy<+-9?_#be@jUwja@xa(aw$DQCyQYG@cS(5n@Ht#hQ*WDP@^}Wyg#qNkSCQp_x zd-S&VO6`2al)C(aIoE<tj%yDD-cFaiXXRh>+jh$vuB9(iOKgw6`IY!ZtLvN1N}qYZ zf3c)lHRtst@$@hUlyUjo47<PK&)nJ1YZD~YlrEWn<Bq#+)t!3$(4#z?f}Hu=>o4^j k?%mk6_wnxkS3mL>tS^|6qp|n~0|Nttr>mdKI;Vst0HLR&8UO$Q literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/599.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/599.png new file mode 100644 index 0000000000000000000000000000000000000000..677c952bde158de0418c70b96b809be7833e66ea GIT binary patch literal 255 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`($k<n8Xl@E-&h>|H*Y zfq{X&#M9T6{RTIyxQS)|N9)rJ3=9iBT^vI!df!eq<Z5;haJ_$QgR8;Z4Q7^(?-VN7 z^fyniZGB*9)0*xvU2Sex!o&>gmrRPA@+K=iXl`t@|16m%k<z+x&66}gdBbT}qh`PP zAvpV^G^;qLrcReJLuoCq(Y@bCR4fg6j2V23-8CbxO#86z&`z1;B!*xAJg@sQNC-cU zc{kT0Lo~B$Nv?eS&i)0DBWEuxZMi0RElp8(L+!o)Qu`Uq%J*zCvi$Xmfq{X+)78&q Iol`;+02+{Af&c&j literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/60.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/60.png new file mode 100644 index 0000000000000000000000000000000000000000..20cf467e4d985b3db724d9e649965c553e61aa2b GIT binary patch literal 3266 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 F698cd6p8=< literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/61.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/61.png new file mode 100644 index 0000000000000000000000000000000000000000..59f8fbabf96de683340ee0d8b331ff9ffc8b260c GIT binary patch literal 3547 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 literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/62.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/62.png new file mode 100644 index 0000000000000000000000000000000000000000..6e2480649711fcffd5ec7c3a378f893d1d7d25e6 GIT binary patch literal 138 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`($k<n8Xl@E-&h>|H*Y zfq{X&#M9T6{RTIyxP}I^nOh121A~sIi(`mIZ?cX0if{89*%~^<+WMqyj_{_{Y%Y1r pI7{Ns|Ns9lme^z&%;jNYIB<tk$~rZ_g@J*A!PC{xWt~$(698jODGdMs literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/63.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/63.png new file mode 100644 index 0000000000000000000000000000000000000000..e240964121dd1a00f3a60af77260e83c43c1069d GIT binary patch literal 3087 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 YN|TqbQz`w;z`(%Z>FVdQ&MBb@08{_D$N&HU literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/64.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/64.png new file mode 100644 index 0000000000000000000000000000000000000000..44955986fe3f7bd9705a5d55bd70f41bb4ef28f7 GIT binary patch literal 3206 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 literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/65.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/65.png new file mode 100644 index 0000000000000000000000000000000000000000..8f4d09771500007dd65c4790d8627d52a50205a1 GIT binary patch literal 319 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`($k<n8Xl@E-&h>|H*Y zfq{X&#M9T6{U#$9yRy*ZbUS+n28M^8E{-7<y>BmV^g9$FarEQ=y)T!pb>#?5u3%!? z%&9oB_2}}1lvLGq`<j)TXA5&r)-h3RX>2@@Aa&Q!Q0UmSxCd4f4Loz)Z7)ln`##%l zqt<nv<AGdT)N<E23;vY3ci49KgWd`QmfMNnrBvFUE}T<(>&<j|7yt8b?DtO)XLY&e z&A<A#)-CzPQl%4wY-df_nXMqBE}IjUedMa@$I}9ld)#*D-M+~r?E3P-hmGC0vy?tt z9;p<Qk$&T&B;p`b-x{j9Fv~orx%^8B-$yk|nQy=99=)EQklbTw`@8nZ%aitho<GPp Y-(oB9SylNf0|Nttr>mdKI;Vst0ED7}zW@LL literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/66.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/66.png new file mode 100644 index 0000000000000000000000000000000000000000..eee0b35558823195dc7f86f2366625962d142c9d GIT binary patch literal 157 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`($k<n8Xl@E-&h>|H*Y zfq{X&#M9T6{RTIyxQ<SOxqBr81B1P%i(`mIZ}J{>g^%+a*%~^<+Kdbg3^sfae{$hS z!m<DV|MRb1kdP9vQZ`CY&QyZ0Ev_i}r$r){FHf3GQL6yMLJNTdNjlfJGcYhPc)I$z JtaD0e0ssK-Fk=7! literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/670.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/670.png new file mode 100644 index 0000000000000000000000000000000000000000..abfd2b8b5ba9f9cb0a3626f75bac7a33ca24c2e6 GIT binary patch literal 3040 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 literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/672-norfolk_island.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/672-norfolk_island.png new file mode 100644 index 0000000000000000000000000000000000000000..dbe675de43b003a20ecea8ebeea485f3a11f48a2 GIT binary patch literal 3053 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 literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/672.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/672.png new file mode 100644 index 0000000000000000000000000000000000000000..706fb7c9b8e36a30ff3a7e5841bbd4400c3e68bc GIT binary patch literal 3237 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 literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/673.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/673.png new file mode 100644 index 0000000000000000000000000000000000000000..7c574d3e592b52c178fd54a4f1e50217832b5376 GIT binary patch literal 3236 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 literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/674.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/674.png new file mode 100644 index 0000000000000000000000000000000000000000..15c514149847b9c08038a1ee1f8907449da9b1a7 GIT binary patch literal 2918 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 De&uIP literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/675.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/675.png new file mode 100644 index 0000000000000000000000000000000000000000..257f7c27c828b843f207c94b5f3b497654414351 GIT binary patch literal 3408 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 literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/676.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/676.png new file mode 100644 index 0000000000000000000000000000000000000000..d1ea1a14f13d13640e04b490b672fa4b761b57ce GIT binary patch literal 2945 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 YI=z1<m>ZiJ7#J8lUHx3vIVCg!08hGZP5=M^ literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/677.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/677.png new file mode 100644 index 0000000000000000000000000000000000000000..1e49ea6356a3affc9fea64f9f44b0739fc105b69 GIT binary patch literal 3090 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 literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/678.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/678.png new file mode 100644 index 0000000000000000000000000000000000000000..a5e36f5d4b40164d483b825538a93b54e2ae3c2c GIT binary patch literal 3137 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 literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/679.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/679.png new file mode 100644 index 0000000000000000000000000000000000000000..fec582b952687b2570b97151402c621c3991d2c7 GIT binary patch literal 3236 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 literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/680.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/680.png new file mode 100644 index 0000000000000000000000000000000000000000..a3320c7fd398e7f0bf3d19556b4434fe9a4284f8 GIT binary patch literal 3019 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`(#+;1OBOz`!jG!i)^F z=14FwaQSCCI|l@0<d@_ZXXF<scse^P6cpvBW#*(ZFjU-{8=M{z{8G&J`@Jtt-W?57 zyz_%ZITV7Nx*J3$s%a^53V3xWF1#rkcu>&Ql|}l*f)3`szJ?yrKpmbgt{d!66c_b1 zFYf3%_4{G<;_PdCzCSzrZ|ilt=W9OC-F%+?00+-B592`72A-8pa)J+<j~_Yq@QI#7 zBbQ16g8;|o6vg7d%8U#@>TGPZl@74)V_>Yf%+0}Yz<2fm1DW>!{I8s5#xORtFditG zXyMJ#Aj05K)#tQ~!NHBOVeSmIV1@-O3<;-`lO8h!=rSaz*FU?=&@lJM%xXr4=qZY# zj0+|*C<v!^xG-c`Gpsou*5%3&VZb1g=6%GH;f5}QfoFJ{2g8Q#3<u5$aBpJZ;9)Qb z>}b_wV5w$EIH9au!O$|3LB#D-xXnlHbpp?|7#J#MZnD{_V(Ho#&7oV!9v-eIr*Y0x zTwBB}ktuPOgWjRanUY40Cj1XRpJ8BFFi}+SLG$Oo73cWYojYgNw~a4e_tk#3|4K<o zkN-VAzq-JIf#G3E-Nk=8`kSR1tl1iJ|1DB|$C44py`c1aciJX?hph|?Ufv4-TmT9i z*M$>y-n{wr$&(viN1UP)Pleb1OFtBUApCF6&pMkw-@iWC_eiDDD7Mj^<;R0VXTJC> zl{r6&vnA=yvwrtK+qwV$k-e;R#4~AUgqFzTK%v4umsvfZjg~5PI!)3%s(R^v%A@-_ zznSgsn=)+3vSX~CsJkLInfaTyx<Ew9fk)pN7(VUJKX^rhgSjE2`QiEU|L^Vpx-U>= zXh`#%RLH;(=c1w)a%!{vaSjFsmj#Vl8yuy-9F)*Gz$SB$_0B==KM7_nPAW$ZISDv% zr8LMCC1|c`a?)r!yFpefLH~+_tjU4EjJC-Ie0qmMcktO3@c&BWn0HWPPa`Lb;|UJo zM8#Vjj7eP)%6%N-Gh2Ts9`s-l>Q+%W*&!0B<UP^U!!W2TL?P5e_LFT9lVy91+pdY$ zCm4*H{<Q6JH=NSADbV%`&sOK1E6k-@+!k?PNGUO#)i1VS_JyJ?Qno#23!h(Doxy*r z-_H5C!GRYN?8ZlO4D^m2cG_s6!#O$m^hTvMJgbjMZ3tV#yu0&j^7)PBEJBU02RO}G z%AFJv<s3aCd?NgAc&t#6Q85v`#c9sT+!A<5U1{<P?=5P(1b-fpNHQ{PkMPh@z9!T! ztS?aA;e5ngMX1x+NPXu7CeMvaLM{nia=Vllr2JB6<!loVDdov0Z>3~!Vz->4qo94F z^~u~Pho2Zfk$$51DVl3;l0)H=AHk0_f=*?5Nj?>LYVwpVb%v2+=;B#HcULS75j5?O za$37^ThRKz_7%b=rL!#0Hj8<BFI~H6>Sd`6@r>`8>tB@Y61+QA&TsmK@Jpv(y1$tI zg85514{w`j^YM;!4awOO>=Nmc<r3>>_$-sW+%0)L#K7F}^^E5;`Df;bMrdu*su7)d zifgLZRJEznTKXX?S1nt0Zxwgw=g`w3{VU^wYuCAj8V5gK$$4ek>d;kl16~J92dA&J zUeUfPeMNqV{gS%KznyH6hkXwFJ1+@burdDeo?{B!$&#BZbQH6BSGScmnjTTxc=l#Z znbz(Ze`R-f+pb!<(9+r1%Q$><(B~;>_Uw;m6#ke~;>Y=1WBK&YbzS#F-fKS6lwM}y zv(qp&CVSPi>C+-sd#nyz?f!bN*}AvO=Pujpx;yfBBcJ1OFZCF8_w@dAtaG0S-weLH zoNKw5udUVBb$Y9^mr5_(?NYu!Z~40!^Y+Cx%=5`#ey?)x^ItNx`hP?I=Kfm#)tx7T zZ8MJw+ijk65;jLo3-fJc^^f2F80Z{(*ui;e;?%_H4_hYgylAuds#~uce^2JIn8zxQ zbC2a7Tdc;Wrl{ua`^xv-tRUZ=%QTl+`&j!NKYQlvqO;d#n$EU0yl(V-_Vd}-XW!qR z5LFSSvu(w;9jTt1o<uE+e79{+UTc(P<kE=HsMyVJYv-<2y|#Pp?&X5Zclu5CTRrbu z`r!>9x1HR!a=YY)r#IMcuiKWptu`?|Nj!b~(RGL4P2M}Xc2{lhUt4zG_M3dGWus*4 zinkPrScO^Ln{{r^JNw$BU#7j(Pmee+aQ=qz<88vHHIHP@4W513JzYF~XL0lAj_ywH zrqg=U?eu0#AG>>E?-Q?*uZ6J>t1f+=JA3o&LvL5yUjNSQUFN&?JM+(&%-5V3X<U5a z@CoM!fln{mbI+e@kbQqmoxihxWBS(T%KFLr6T{bD->`jY`Ks@U@5SxD*%i%yZ1>p4 z{GQRh$oMnn2ezNse%k+V{=E3s`_A>s|5N@~{lCbtyg`*Qow>8ou`!zI_m8R?#r=Ku zR<~2XZMyl^v1h?fM^VTArnOB^53W_rIPqq}TE*|rXPldOE|ae{pzg)B3+#!{61xxA z@u;`9w}!Xb_Z4(RNL@6XZd!ivj&t#SmtQW^T<*<IH}tn$uj^&1Ww%N%%jTB(E|XpM z$Mn)7&s>d|8{wJbEn}&twazRrXW#ulZ$Gy`n)`_Rakcmi{S&bTl?%@u`qH{wY^9!% zj@2{=pAJ8ZDIXjKv{s1qsD2VISMB4fJS2N4T}l6<*~N|<&M{hYexE$Fe5)qCnYhQa zQst=eQk|zeThv!h*yF?Nb9c7YJh5423b{tMR(lPbCrzAC=(I}Fck;IMSLx5v%1*CI zZQb<mXkPbreYvUZC$l$CSi>5r%eBpE*^7`Ujq6(Mo6=Lm)Apb3JY_j;^*rsfZ_jK# zb$f#OocHtpzZE(p^l;L)rET8fy0Q_^_O8jY++<T&d7JC8D64i`7~2|~9bMbBa<BTY zej7f0UEN-_D&OqJxPzyf4sK=4e$5@q^|ZD2^_}Z)WBnuaBkylb{M9yB+D^2yYn{k# z@#&)VH#F{4Je6+GKed16ohe&Zu0FCe<$T(uw3pBB>CTJho3?8Dv*~<!yf<%c;k_TW z<?YvRuDA84pVhd%yLp@Q&c*v}cI-)Ae)8N|Yx|HTAzwm%g_ym&ba!jw^&fc`-$_^R z`DXIw>h0(~-~Za3+;=;aG1T{J+SSzGp1(JLw_n$}>gA7VzjI^P`sEhBJ<fcI`7gUN z-?r;JuUwVAWE&FHe@*+fJKu5negEdZFW2QY;|=YdbL^3FflK9+m)|+>f0yI6x>eRw zz2+hNW%)AMbXol@r&*t7xy=rq^*cH#dYAthyNlOe-K+ZJep{Y@j)_fVrPt?>lbN?( zHeH^a{^@+r+^KVG>-2u!Nw~deTlMqgbN93O^WX0hD0z6v^?&zs>pj-zVm|FC`LyZw zQ{nI(;j`9T#pk{%d1do&@@4<yyXWklwQgrj_Re=zd$(4neSaxE&-~ooFMBILiv7QK zb)Kc|-Mycy^1mPb{`J1t-MS+6zvoWxzFDsRZtWibJ@H>0-a6iNzT1A)KKkFC8}IMb zXB{YC@cH5$_wQ`2&FBA3{Myg&%-TP*|8yH~+v|B2c9xcp?2G=s{IlHoe9C#XdE);T z{X4x*Tui_2$JN)@&t05xapCk&(<krGty%i_)q&TN>u(=BbWCpF$qHk`xG!P9-yST# zQ!e{{@qK>(Cp8N78viqXZu}a2VfpXLl9MO@XJMZ4`A@R3?rjDJ28CpgAYTTCDpdxC zhGqtapZ^&c8eTFmlo~KFyh>nTu$sZZAf7)d{-_%R1H(5@7srr_TS;G{s^8i(^D+oC z_cAy(Th82Ps8Mhy=|Os>`=o<9J5(Yh>kU=B%Z+z%uTM-!{&n)h{Kkn7&!|VYY4%G= z-uok_e*dWJr>Q*q7I{nFm{DhB00KsT(hZ(kAGxqj>imI|U#8kLhgz&Ry1|)ue3fI@ zU%}?(C$v8CTzhEQ94@R_`D=NXcD&DrEG3ox%MYyYZ<XZR`~AqOhd2E#+ur6MI>Fzy zul+60?09$MKfjKjJ8<B@0k8wUs9U$4y3H-Q@Bd@93<KqbI%iLQ>2;j*mh<p$dnF$E z{~Uqy91|Y=w%2Q8x4**XA9?V{e|ujpbG8EvlVjYro!7N}#K6G7;OXk;vd$@?2>@5V Bp1%M9 literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/681.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/681.png new file mode 100644 index 0000000000000000000000000000000000000000..24b6a4bca6540e3c9f2bfb13dbf91cd37186842a GIT binary patch literal 147 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`($k<n8Xl@E-&h>|H*Y zfq{X&#M9T6{U(!$h!%@}d3g~71B0oji(`mIZ*oe&jQ{f)*(0nD_9>o<=Ujbf{@QBE zx@lV<T{?B3CAiJWAnU`5gNxbvrEC_kF*7W?%TY5oS!4+V0|SGntDnm{r-UW|TbwR| literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/682.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/682.png new file mode 100644 index 0000000000000000000000000000000000000000..fda0828867c02e6116e14e1dc556b0a1d818b37c GIT binary patch literal 3333 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 a;a|w{yl1PwpJrfSVDNPHb6Mw<&;$T14Ldjh literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/683.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/683.png new file mode 100644 index 0000000000000000000000000000000000000000..a9eb7f285bb11c2ac876c72346da032bafd76deb GIT binary patch literal 3104 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 literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/685.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/685.png new file mode 100644 index 0000000000000000000000000000000000000000..d20e142173432ffd762fcf58fce6e3e8ee72d12b GIT binary patch literal 2936 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 Uvnh8N7#J8lUHx3vIVCg!03}R!VE_OC literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/686.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/686.png new file mode 100644 index 0000000000000000000000000000000000000000..e6814ccf3b2e6ff0034423046c5eccf405fc7e56 GIT binary patch literal 3301 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 literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/687.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/687.png new file mode 100644 index 0000000000000000000000000000000000000000..24b6a4bca6540e3c9f2bfb13dbf91cd37186842a GIT binary patch literal 147 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`($k<n8Xl@E-&h>|H*Y zfq{X&#M9T6{U(!$h!%@}d3g~71B0oji(`mIZ*oe&jQ{f)*(0nD_9>o<=Ujbf{@QBE zx@lV<T{?B3CAiJWAnU`5gNxbvrEC_kF*7W?%TY5oS!4+V0|SGntDnm{r-UW|TbwR| literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/688.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/688.png new file mode 100644 index 0000000000000000000000000000000000000000..96e1da3c2a5dde8b84d556b92e99e0acec56c77d GIT binary patch literal 3330 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 Z=^<yC!e5;7Vqjok@O1TaS?83{1ONoBKNA1| literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/689.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/689.png new file mode 100644 index 0000000000000000000000000000000000000000..5a325063fd1a942cc902987cb7b1cbe99d8b576c GIT binary patch literal 347 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`($k<n8Xl@E-&h>|H*Y zfq{X&#M9T6{RTIyxQTX+hgUNL1H)fW7sn8b-nUZ>y`2Ij+U8fEGkw+8vO>kpbHXhp zlV@T-`2Vmw71t|l*t=H#!nF$uyuEA9S~{A0mq}>Ol$s*jw5PN`c(r=h=C9}O|Nijt z)86@)J5o%<RB{~FHr>72T&tbno}GKH;?l#PyZWZbrf2H%b{j4}YU*bbR=L~q@z+!8 z6&)WX<puR*4xPFdGg~p4xBNLzR3L}Gv8>j-Tb>#7{uDkw(EgoKe=>{F{_Y7)7jl_H z<iChpe43uH@xV&0&4%j?)@?6fmiN!hl27$2UXW%m;kIAVMO}lbdQR*oET)tNsog%m zZjpINOxSxyjd!_|I;zqN{=c~4wRG<P_>XHP`JecI7gU+r!@$76;OXk;vd$@?2>_{F BkQe{} literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/690.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/690.png new file mode 100644 index 0000000000000000000000000000000000000000..a3513fc62b1eddf991e13412a016a98764f72498 GIT binary patch literal 3179 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 Uwx1U>FfcH9y85}Sb4q9e00e3L^#A|> literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/691.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/691.png new file mode 100644 index 0000000000000000000000000000000000000000..6bf6ea1352624b0e9ba957537d8cb705e96d09a4 GIT binary patch literal 2956 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 literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/692.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/692.png new file mode 100644 index 0000000000000000000000000000000000000000..c94bac9dcb889445ebefd423dec160af5a2ce8d2 GIT binary patch literal 3333 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 ZLEYtQ!2R5LkqitB44$rjF6*2UngER&H4*>- literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/7-kazakhstan.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/7-kazakhstan.png new file mode 100644 index 0000000000000000000000000000000000000000..ec69dd0e2e9301a2da7330df8de3be4a25a839e3 GIT binary patch literal 3324 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 P1_lOCS3j3^P6<r_^c6D+ literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/7.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/7.png new file mode 100644 index 0000000000000000000000000000000000000000..53261c06fcd02a8f850a5fd8d7e66a1c7f568e21 GIT binary patch literal 136 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`($k<n8Xl@E-&h>|H*Y zfq{X&#M9T6{U#HeD5p$iLT(xZ1A~^Qi(`mIZ}Ol2|NqysNinEJNmykWa3!Q9Nc8Sm nm}T&|o~`ZT3F$>_%nT{lI7DtG^BrSgU|{fc^>bP0l+XkK0CFbd literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/81.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/81.png new file mode 100644 index 0000000000000000000000000000000000000000..6c029f42c208ef2f5df6713ccdffbc3ef82821c6 GIT binary patch literal 327 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`($k<n8Xl@E-&h>|H*Y zfq{X&#M9T6{U)O{uY$ngvYmez7#Lo9x;Tbd^j^KPk?&xD2-|~r;k{x<mUa3q(-TS+ zNPOL9$5t!!kxT5OfLXM2(gl~Uh#U?v&bjLjZWPL!?dCG)>-qmrpWT@)t*CTJ-0c_J zujm`I^&VWCwc&B)jgK~Ws<`KE=4nx`v$o?sKEqt+&X2D@O?=$)F1Vi3Xm8K|)8%=M z;lAvBv6-tDY>{)Cv^c-`q1HKN_YNk8`)>;6EDyzSe17W~QFX-mu+C(@mYJ(s+9zLK zls|DL*QBXV6%msbU#QCUF#I;_sKk~!_liOW2Cf;WOB~l_PMmw;q~D7tv&1SlhX(Z4 i-2bTlxxW6Wtiz6p!Y^A-axyS5FnGH9xvX<aXaWG+q={Al literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/82.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/82.png new file mode 100644 index 0000000000000000000000000000000000000000..30d01ec01717a12d50b7da648ec57a881d42ffa1 GIT binary patch literal 666 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`($k<n8Xl@E-&h>|H*Y zfq{X&#M9T6{RXF;Ft2up>>FtY1|}O%7sn8b-mR1TJwy^Ej@27m?F#12w!E}zLHpb( zKB@tmuI_4SU*LS>pq}itC=DilBkp-tY_YZ#vkxDNv(fAHda$s0O^27U<J_{30{<48 z=E!c3GPuuo@Y1VyLN5F@?eG8Id(Qs;yIofY$A8DHrH>vxdKAyR>g%=ndOEtg8~5xv z^Xiq>#f&Kh7BLrRoK5po5fb5Im6DQ@kd<A__pMg`c%guxiLbH*&%Zi>hqsUOaJ&dV ztWm0UFkym^n)Aj8mAQV#CMGS35~^W0!<PhU-nw;bgHHFxjfOs#pA@7Dmp@><ceZfP z35)l?-WBfH)R{TU$KU_*<;%``)0L-sP3>1%{$$s>8{2f1l>RNZjm(yv_@(uAYPzn8 z($TwfIy!D_(_Qy^-m#7#ZPEOA)r=a;;9c@7rRLR5yeH58Wp9Ps?!P-`eSP!k-<8*E z*WX#0zvSnR6Z4jR-t(BPdY0ek!inb5ySH5baE&GY)%#}`kL9kbwSTbp-jRu`7(XoC zH<9<E<cf#3latSX?l}IK!KSjJdvdYW%g?&18V!OMcKrTg$MCU2=KSZZ=E)~j`W`P> zrBz&9yk!>KXJg@#mRVl5cjxM!Iq!4fru?zeSf)mXzQ+@M)J`8rJ^i_Meujycicn&0 z?cAF;BYiGEd47^pe$)Iwkr%x2Zh<1-zJH%NXHH5%!33v;2d-QR`6?sb=BOi<oSxpk zZk^tzpEeAotGxbC6{rp4a1CTQ@%(edw4>j?nH@fSI5prwPM@obn3$N>RP9w!`DbPR cch@maWb?n<!tkM#fq{X+)78&qol`;+0FIY6egFUf literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/84.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/84.png new file mode 100644 index 0000000000000000000000000000000000000000..1a101f13622a34fdff0e3389a4d53fb7bc7c23f8 GIT binary patch literal 354 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`($k<n8Xl@E-&h>|H*Y zfq{X&#M9T6{RWpTt2Vz?U84{K10##4i(`mI@776%euo_dT<=${b-m}(&>g~|#p230 zQIGwEWD$#(mzRnKkBOy=l-3jvL51xLnXEgnJ0~^<d^pDTF#g=TJ#+u3Up284jtaQI z_9Z+amo<0x>};OC_H4fP+5g$!^P9==T<bl!@cU7ZfW*w$)(bDKSrmJ?RrKF`tkVbz zy}7<-zmk=%#lD*4_eU0PtMO!9oqqOoXnRRq?k#CoEB+b1yLH~5?ce-#Zlc+{s)g1E z1EPHMbl%O5o$geWJ#mj!lUoAA?Q#~k6JoP+7G7Mo=IY7ad;Gt;Nv;=mE|O&|D4BRs zdTmA32J7E@PXC_u<Icx_E3&h1uj*aI6~La$@^5t%b3H?YMX-{{nq3hL3=9mOu6{1- HoD!M<I0K9h literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/850.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/850.png new file mode 100644 index 0000000000000000000000000000000000000000..efecdb6b018af952ebd1340c6c4244608e306f68 GIT binary patch literal 2968 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`(#+;1OBOz`!jG!i)^F z=14FwaQSCCI|l@0<d@_ZXXF<scse^P6cpvBW#*(ZFjU-{8=M{z{8G&J`@Jtt-W?57 zyz_%ZITV7Nx*J3$s%a^53V3xWF1#rkcu>&Ql|}l*f)3`szJ?yrKpmbgt{d!66c_b1 zFYf3%_4{G<;_PdCzCSzrZ|ilt=W9OC-F%+?00+-B592`72A-8pa)J+<j~_Yq@QI#7 zBbQ16g8;|o6vg7d%8U#@>TGPZl@74)V_>Yf%+0}Yz<2fm1DW>!{I8s5#xORtFditG zXyMJ#Aj05K)#tQ~!NHBOVeSmIV1@-O3<;-`lO8h!=rSaz*FU?=&@lJM%xXr4=qZY# zj0+|*C<v!^xG-c`Gpsou*5%3&VZb1g=6%GH;f5}QfoFJ{2g8Q#3<u5$aBpJZ;9)Qb z>}b_wV5w$EIH9au!O$|3LB#D-xXnlHbpp?|7#J#MZnD{_V(Ho#&7oV!9v-eIr*Y0x zTwBB}ktuPOgWjRanUY40Cj1XRpJ8BFFi}+SLG$Oo73cWYojYgNw~a4e_tk#3|4K<o zkN-VAzq-JIf#G3E-Nk=8`kSR1tl1iJ|1DB|$C44py`c1aciJX?hph|?Ufv4-TmT9i z*M$>y-n{wr$&(viN1UP)Pleb1OFtBUApCF6&pMkw-@iWC_eiDDD7Mj^<;R0VXTJC> zl{r6&vnA=yvwrtK+qwV$k-e;R#4~AUgqFzTK%v4umsvfZjg~5PI!)3%s(R^v%A@-_ zznSgsn=)+3vSX~CsJkLInfaTyx<Ew9fk)pN7(VUJKX^rhgSjE2`QiEU|L^Vpx-U>= zXh`#%RLH;(=c1w)a%!{vaSjFsmj#Vl8yuy-9F)*Gz$SB$_0B==KM7_nPAW$ZISDv% zr8LMCC1|c`a?)r!yFpefLH~+_tjU4EjJC-Ie0qmMcktO3@c&BWn0HWPPa`Lb;|UJo zM8#Vjj7eP)%6%N-Gh2Ts9`s-l>Q+%W*&!0B<UP^U!!W2TL?P5e_LFT9lVy91+pdY$ zCm4*H{<Q6JH=NSADbV%`&sOK1E6k-@+!k?PNGUO#)i1VS_JyJ?Qno#23!h(Doxy*r z-_H5C!GRYN?8ZlO4D^m2cG_s6!#O$m^hTvMJgbjMZ3tV#yu0&j^7)PBEJBU02RO}G z%AFJv<s3aCd?NgAc&t#6Q85v`#c9sT+!A<5U1{<P?=5P(1b-fpNHQ{PkMPh@z9!T! ztS?aA;e5ngMX1x+NPXu7CeMvaLM{nia=Vllr2JB6<!loVDdov0Z>3~!Vz->4qo94F z^~u~Pho2Zfk$$51DVl3;l0)H=AHk0_f=*?5Nj?>LYVwpVb%v2+=;B#HcULS75j5?O za$37^ThRKz_7%b=rL!#0Hj8<BFI~H6>Sd`6@r>`8>tB@Y61+QA&TsmK@Jpv(y1$tI zg85514{w`j^YM;!4awOO>=Nmc<r3>>_$-sW+%0)L#K7F}^^E5;`Df;bMrdu*su7)d zifgLZRJEznTKXX?S1nt0Zxwgw=g`w3{VU^wYuCAj8V5gK$$4ek>d;kl16~J92dA&J zUeUfPeMNqV{gS%KznyH6hkXwFJ1+@burdDeo?{B!$&#BZbQH6BSGScmnjTTxc=l#Z znbz(Ze`R-f+pb!<(9+r1%Q$><(B~;>_Uw;m6#ke~;>Y=1WBK&YbzS#F-fKS6lwM}y zv(qp&CVSPi>C+-sd#nyz?f!bN*}AvO=Pujpx;yfBBcJ1OFZCF8_w@dAtaG0S-weLH zoNKw5udUVBb$Y9^mr5_(?NYu!Z~40!^Y+Cx%=5`#ey?)x^ItNx`hP?I=Kfm#)tx7T zZ8MJw+ijk65;jLo3-fJc^^f2F80Z{(*ui;e;?%_H4_hYgylAuds#~uce^2JIn8zxQ zbC2a7Tdc;Wrl{ua`^xv-tRUZ=%QTl+`&j!NKYQlvqO;d#n$EU0yl(V-_Vd}-XW!qR z5LFSSvu(w;9jTt1o<uE+e79{+UTc(P<kE=HsMyVJYv-<2y|#Pp?&X5Zclu5CTRrbu z`r!>9x1HR!a=YY)r#IMcuiKWptu`?|Nj!b~(RGL4P2M}Xc2{lhUt4zG_M3dGWus*4 zinkPrScO^Ln{{r^JNw$BU#7j(Pmee+aQ=qz<88vHHIHP@4W513JzYF~XL0lAj_ywH zrqg=U?eu0#AG>>E?-Q?*uZ6J>t1f+=JA3o&LvL5yUjNSQUFN&?JM+(&%-5V3X<U5a z@CoM!fln{mbI+e@kbQqmoxihxWBS(T%KFLr6T{bD->`jY`Ks@U@5SxD*%i%yZ1>p4 z{GQRh$oMnn2ezNse%k+V{=E3s`_A>s|5N@~{lCbtyg`*Qow>8ou`!zI_m8R?#r=Ku zR<~2XZMyl^v1h?fM^VTArnOB^53W_rIPqq}TE*|rXPldOE|ae{pzg)B3+#!{61xxA z@u;`9w}!Xb_Z4(RNL@6XZd!ivj&t#SmtQW^T<*<IH}tn$uj^&1Ww%N%%jTB(E|XpM z$Mn)7&s>d|8{wJbEn}&twazRrXW#ulZ$Gy`n)`_Rakcmi{S&bTl?%@u`qH{wY^9!% zj@2{=pAJ8ZDIXjKv{s1qsD2VISMB4fJS2N4T}l6<*~N|<&M{hYexE$Fe5)qCnYhQa zQst=eQk|zeThv!h*yF?Nb9c7YJh5423b{tMR(lPbCrzAC=(I}Fck;IMSLx5v%1*CI zZQb<mXkPbreYvUZC$l$CSi>5r%eBpE*^7`Ujq6(Mo6=Lm)Apb3JY_j;^*rsfZ_jK# zb$f#OocHtpzZE(p^l;L)rET8fy0Q_^_O8jY++<T&d7JC8D64i`7~2|~9bMbBa<BTY zej7f0UEN-_D&OqJxPzyf4sK=4e$5@q^|ZD2^_}Z)WBnuaBkylb{M9yB+D^2yYn{k# z@#&)VH#F{4Je6+GKed16ohe&Zu0FCe<$T(uw3pBB>CTJho3?8Dv*~<!yf<%c;k_TW z<?YvRuDA84pVhd%yLp@Q&c*v}cI-)Ae)8N|Yx|HTAzwm%g_ym&ba!jw^&fc`-$_^R z`DXIw>h0(~-~Za3+;=;aG1T{J+SSzGp1(JLw_n$}>gA7VzjI^P`sEhBJ<fcI`7gUN z-?r;JuUwVAWE&FHe@*+fJKu5negEdZFW2QY;|=YdbL^3FflK9+m)|+>f0yI6x>eRw zz2+hNW%)AMbXol@r&*t7xy=rq^*cH#dYAthyNlOe-K+ZJep{Y@j)_fVrPt?>lbN?( zHeH^a{^@+r+^KVG>-2u!Nw~deTlMqgbN93O^WX0hD0z6v^?&zs>pj-zVm|FC`LyZw zQ{nI(;j`9T#pk{%d1do&@@4<yyXWklwQgrj_Re=zd$(4neSaxE&-~ooFMBILiv7QK zb)Kc|-Mycy^1mPb{`J1t-MS+6zvoWxzFDsRZtWibJ@H>0-a6iNzT1A)KKkFC8}IMb zXB{YC@cH5$_wQ`2&FBA3{Myg&%-TP*|8yH~+v|B2c9xcp?2G=s{IlHoe9C#XdE);T z{X4x*Tui_2$JN)@&t05xapCk&(<krGty%i_)q&TN>u(=BbWCpF$qHk`xG!P9-yST# zQ!e{{@qK>(Cp8N78viqXZu}a2VfpXLl9MO@XJMZ4`A@R3?rjDJ28CpgAYTTCDpdxC zhGqtapZ^&c8eTFmlo~KFyh>nTu$sZZAf7)d{-_%R1H)lY7srr_TS<TZ|F>t>We{fW zW#I0<pES#2=25rkKUTUtX*K!pzjdhT{VRXJPiL3H<}M@V@NDM8|I6P?{@Y)F{=?dh zy$}DNpFhQ2E<IM1`SAVyJoag4(h{y+PkrFgv)Cro;L}IL4I0`;HQ8CoKZ-vZ9X_AB zS|Vc28Bcz$lE(k@?F|3?|2era(sN?t(Gv}gk+HoG&;RVc;(0v&QjtUibB(0M=S`CT z>VKd5kbG;6;}k6>o$mb?jyzBfkI%ZK(#*5diNk>5w3}m`&xOi%1_lNOPgg&ebxsLQ E03H*F1poj5 literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/852.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/852.png new file mode 100644 index 0000000000000000000000000000000000000000..bc443392e955cac72568952bf0f8d7d9b080abd9 GIT binary patch literal 403 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`($k<n8Xl@E-&h>|H*Y zfq{X&#M9T6{RTIa0H@WH4xY~p42-6pE{-7<y=N!y^>#`WX_t?;_u7*b-n~dkqlxFv zY?)gv9J^Y01uuqOxNs@VnZ;N4(k-2<0<{gv$=>x26DBx$K5~!U;@x~NJX-ooRqK*@ zKmW{oIOl$0N*epDFANvCU;Y=+zNNMBZ}RP=>2np&`>>Q2i$`9qcVDBkE}**Zkga8} zM8MBo`;|9r>@BVkd93BB`}c;~>kU~)D_$|S9N4jUfxgT^9npX!si1oI6^i#BeV*|% z=6h0V;>?51ENOPfkDnB@VD&5IxPC(7>gHgnr$WA&+s;JEo%e{Hba_$Dy*ZCL-3xv; zvy^{Zk$(Av)4sJ^7E2tk7C$N<ufAa$Yn=Y3m?Pqst&XladT9BBZe2y2zb`tSdtR$- ziaAnqwoD}Y-44-roti1G%L6yAo3~c(|B`=`Hky9_u76kee#+v+O|#E?+A%ONFnGH9 KxvX<aXaWFUaj_@> literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/853.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/853.png new file mode 100644 index 0000000000000000000000000000000000000000..f1b63fc10a547025a8b9421fffc936b9e2ffead5 GIT binary patch literal 417 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`($k<n8Xl@E-&h>|H*Y zfq{X&#M9T6{W>=fFNcAIp<*Tj1EaI2i(`mI@7*c3-cE@k$LssQ-%2o7>SnswZE<H= z+W~Qo+uY{u%Q*h<=+(ANyEbiK`%agX?h7xTonF$i==(H%&G6cFyk~6}KDktHJ4gQi zXZv>L9s8m-u>HKo7|WIOLdbb~J$oPfZ;4$h+1pOe%H@d_;{R69`g+wOfdFZ?0^45o z-y96ri&yY6b1-rrEt}G3yihNB<wPT0uAMfmG4rNm8cvg%8Bkt&eCa$-C81;QFL$th zXZ-NnL};S3*IO}zNZy*t8mE6>=G=QO;9J9AUR-wY-ZQc7`uumM%GbXMbu*kiX{WlU zThbObzO{|cMncK&Jkx?|6}^r>O>6#rJ-w%wH|lRW!=c;OJu%aZHgB}rkypN94s#hZ zo1G#<g>+3qzx$Q9eL`z`l8j~ttqGfOuc_pUlI+$A_nMNn9!fC_Z94k@ujuJl+;?Uc WS>Jh4bBck1fx*+&&t;ucLK6UyA*_l3 literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/855.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/855.png new file mode 100644 index 0000000000000000000000000000000000000000..8ddee31654d7f75c59c720120ca6dc1efb15e394 GIT binary patch literal 421 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`($k<n8Xl@E-&h>|H*Y zfq{X&#M9T6{RTIyxQx2S;uTB`42<rcE{-7<y;r9k^kNDWY1?nTSaq?XR+olrt`^54 zvCb61knS#x48bjVg1Sv{3tYb#*n0k8aN=I+x=q8!ury7=_xU}sCIOR#?#Pm|cINv( ze?E|L{1+zZkm=~a%-Y^{E?ptvqsZ-V<vJ`Y9$IX&>7Uef@A2n|gnCh@1ev^^TQBMw zZ#X7ik*<Dy_^6%eCuyI&bprPGi=wrRHyU`SnDcWe@u%+73VkGgT;udX-Kq8GpDtIb zu5X{_*_682rgNU(0u$NDYzD5gCLg7A@14*4H!b3{3TJxo1n-3{OxyeI=C&P`OxfEj zRq-P8a`@5peZ6x{zZ?;{RP@2hthq{BRdv(T3+qEB%1S>iJ2+V)di7&fzVlBz;^#fM zIx8cM=jJv>i5q&mZaYW4GngoOINPi<e(t6EzYG3<`qr%6<$b+zPRR-pUzUS^+xI_` ZwzytsrIPJ0#K6G7;OXk;vd$@?2>_~Ut5^U4 literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/856.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/856.png new file mode 100644 index 0000000000000000000000000000000000000000..1461d62e71ee0e1d11dbb283267c9f473c7e1201 GIT binary patch literal 264 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`($k<n8Xl@E-&h>|H*Y zfq{X&#M9T6{W_;0k1{)d?|CT(28LChE{-7<y~#G}E56NdWNYXYYrAwMVcO&zClkXN z6CIVC6C}DhKO6n9d}U~0U|^7QtG@H$)!XM;c+(V@IE4GoO1$61#3tw{$HvCS*7ogt zyu=(KHG`OaUq#m2H6`AOl;JR+(%9JO=rW;w;bw~o3%WU_)+|<Yog#6PEq>?M9u31u zyn63r&wqIKSKQ+N+28s+Pxrp&l=9gea?m37PLo>XtfPOfTSv{XW;xBpV6ejA@XU@$ S%NQ6K7(8A5T-G@yGywoZw_#}j literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/86.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/86.png new file mode 100644 index 0000000000000000000000000000000000000000..8cc127bc3f115545663b659913f684524c4264cd GIT binary patch literal 319 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`($k<n8Xl@E-&h>|H*Y zfq{X&#M9T6{RWQ|hlr5$%b9x_7#JRUx;Tbd^uE35o5f@(aqMILq{2C^ix)py#eIEV zN|>DE3)QMg_YS(g57^VBF3=^t@JiRI7d0v`o!p`o5BY>Qo!8s*aC-ZmB*QM9J`T=n zJC<!%{x5TDy7`_)#aS}1S6(l8|FhwPf5k`5n?B4<fsL=i*XuH-BuMU2X(>E*`88kt z3dRkV9cl`z%)c?53EVK>bb_w;#z`siuWA&dHNI@yrE}`(%6X3KRaa$SxIbM!t3Q~p zxW8uQoQ}<g4RP}~2!+aeODxa1*K{iPVOHh-WTAua?yhgW*OJTk>$K%M{{QCuKl&cZ Zi-<TT7xTTZU|?Wi@O1TaS?83{1OT~jhXDWp literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/870.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/870.png new file mode 100644 index 0000000000000000000000000000000000000000..c68fefef31d27d0b28ef370ba9b0e278d772a5b2 GIT binary patch literal 3427 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`(#+;1OBOz`!jG!i)^F z=14FwaQSCCI|l@0<d@_ZXXF<scse^P6cpvBW#*(ZFjU-{8=M{z{8G&J`@Jtt-W?57 zyz_%ZITV7Nx*J3$s%a^53V3xWF1#rkcu>&Ql|}l*f)3`szJ?yrKpmbgt{d!66c_b1 zFYf3%_4{G<;_PdCzCSzrZ|ilt=W9OC-F%+?00+-B592`72A-8pa)J+<j~_Yq@QI#7 zBbQ16g8;|o6vg7d%8U#@>TGPZl@74)V_>Yf%+0}Yz<2fm1DW>!{I8s5#xORtFditG zXyMJ#Aj05K)#tQ~!NHBOVeSmIV1@-O3<;-`lO8h!=rSaz*FU?=&@lJM%xXr4=qZY# zj0+|*C<v!^xG-c`Gpsou*5%3&VZb1g=6%GH;f5}QfoFJ{2g8Q#3<u5$aBpJZ;9)Qb z>}b_wV5w$EIH9au!O$|3LB#D-xXnlHbpp?|7#J#MZnD{_V(Ho#&7oV!9v-eIr*Y0x zTwBB}ktuPOgWjRanUY40Cj1XRpJ8BFFi}+SLG$Oo73cWYojYgNw~a4e_tk#3|4K<o zkN-VAzq-JIf#G3E-Nk=8`kSR1tl1iJ|1DB|$C44py`c1aciJX?hph|?Ufv4-TmT9i z*M$>y-n{wr$&(viN1UP)Pleb1OFtBUApCF6&pMkw-@iWC_eiDDD7Mj^<;R0VXTJC> zl{r6&vnA=yvwrtK+qwV$k-e;R#4~AUgqFzTK%v4umsvfZjg~5PI!)3%s(R^v%A@-_ zznSgsn=)+3vSX~CsJkLInfaTyx<Ew9fk)pN7(VUJKX^rhgSjE2`QiEU|L^Vpx-U>= zXh`#%RLH;(=c1w)a%!{vaSjFsmj#Vl8yuy-9F)*Gz$SB$_0B==KM7_nPAW$ZISDv% zr8LMCC1|c`a?)r!yFpefLH~+_tjU4EjJC-Ie0qmMcktO3@c&BWn0HWPPa`Lb;|UJo zM8#Vjj7eP)%6%N-Gh2Ts9`s-l>Q+%W*&!0B<UP^U!!W2TL?P5e_LFT9lVy91+pdY$ zCm4*H{<Q6JH=NSADbV%`&sOK1E6k-@+!k?PNGUO#)i1VS_JyJ?Qno#23!h(Doxy*r z-_H5C!GRYN?8ZlO4D^m2cG_s6!#O$m^hTvMJgbjMZ3tV#yu0&j^7)PBEJBU02RO}G z%AFJv<s3aCd?NgAc&t#6Q85v`#c9sT+!A<5U1{<P?=5P(1b-fpNHQ{PkMPh@z9!T! ztS?aA;e5ngMX1x+NPXu7CeMvaLM{nia=Vllr2JB6<!loVDdov0Z>3~!Vz->4qo94F z^~u~Pho2Zfk$$51DVl3;l0)H=AHk0_f=*?5Nj?>LYVwpVb%v2+=;B#HcULS75j5?O za$37^ThRKz_7%b=rL!#0Hj8<BFI~H6>Sd`6@r>`8>tB@Y61+QA&TsmK@Jpv(y1$tI zg85514{w`j^YM;!4awOO>=Nmc<r3>>_$-sW+%0)L#K7F}^^E5;`Df;bMrdu*su7)d zifgLZRJEznTKXX?S1nt0Zxwgw=g`w3{VU^wYuCAj8V5gK$$4ek>d;kl16~J92dA&J zUeUfPeMNqV{gS%KznyH6hkXwFJ1+@burdDeo?{B!$&#BZbQH6BSGScmnjTTxc=l#Z znbz(Ze`R-f+pb!<(9+r1%Q$><(B~;>_Uw;m6#ke~;>Y=1WBK&YbzS#F-fKS6lwM}y zv(qp&CVSPi>C+-sd#nyz?f!bN*}AvO=Pujpx;yfBBcJ1OFZCF8_w@dAtaG0S-weLH zoNKw5udUVBb$Y9^mr5_(?NYu!Z~40!^Y+Cx%=5`#ey?)x^ItNx`hP?I=Kfm#)tx7T zZ8MJw+ijk65;jLo3-fJc^^f2F80Z{(*ui;e;?%_H4_hYgylAuds#~uce^2JIn8zxQ zbC2a7Tdc;Wrl{ua`^xv-tRUZ=%QTl+`&j!NKYQlvqO;d#n$EU0yl(V-_Vd}-XW!qR z5LFSSvu(w;9jTt1o<uE+e79{+UTc(P<kE=HsMyVJYv-<2y|#Pp?&X5Zclu5CTRrbu z`r!>9x1HR!a=YY)r#IMcuiKWptu`?|Nj!b~(RGL4P2M}Xc2{lhUt4zG_M3dGWus*4 zinkPrScO^Ln{{r^JNw$BU#7j(Pmee+aQ=qz<88vHHIHP@4W513JzYF~XL0lAj_ywH zrqg=U?eu0#AG>>E?-Q?*uZ6J>t1f+=JA3o&LvL5yUjNSQUFN&?JM+(&%-5V3X<U5a z@CoM!fln{mbI+e@kbQqmoxihxWBS(T%KFLr6T{bD->`jY`Ks@U@5SxD*%i%yZ1>p4 z{GQRh$oMnn2ezNse%k+V{=E3s`_A>s|5N@~{lCbtyg`*Qow>8ou`!zI_m8R?#r=Ku zR<~2XZMyl^v1h?fM^VTArnOB^53W_rIPqq}TE*|rXPldOE|ae{pzg)B3+#!{61xxA z@u;`9w}!Xb_Z4(RNL@6XZd!ivj&t#SmtQW^T<*<IH}tn$uj^&1Ww%N%%jTB(E|XpM z$Mn)7&s>d|8{wJbEn}&twazRrXW#ulZ$Gy`n)`_Rakcmi{S&bTl?%@u`qH{wY^9!% zj@2{=pAJ8ZDIXjKv{s1qsD2VISMB4fJS2N4T}l6<*~N|<&M{hYexE$Fe5)qCnYhQa zQst=eQk|zeThv!h*yF?Nb9c7YJh5423b{tMR(lPbCrzAC=(I}Fck;IMSLx5v%1*CI zZQb<mXkPbreYvUZC$l$CSi>5r%eBpE*^7`Ujq6(Mo6=Lm)Apb3JY_j;^*rsfZ_jK# zb$f#OocHtpzZE(p^l;L)rET8fy0Q_^_O8jY++<T&d7JC8D64i`7~2|~9bMbBa<BTY zej7f0UEN-_D&OqJxPzyf4sK=4e$5@q^|ZD2^_}Z)WBnuaBkylb{M9yB+D^2yYn{k# z@#&)VH#F{4Je6+GKed16ohe&Zu0FCe<$T(uw3pBB>CTJho3?8Dv*~<!yf<%c;k_TW z<?YvRuDA84pVhd%yLp@Q&c*v}cI-)Ae)8N|Yx|HTAzwm%g_ym&ba!jw^&fc`-$_^R z`DXIw>h0(~-~Za3+;=;aG1T{J+SSzGp1(JLw_n$}>gA7VzjI^P`sEhBJ<fcI`7gUN z-?r;JuUwVAWE&FHe@*+fJKu5negEdZFW2QY;|=YdbL^3FflK9+m)|+>f0yI6x>eRw zz2+hNW%)AMbXol@r&*t7xy=rq^*cH#dYAthyNlOe-K+ZJep{Y@j)_fVrPt?>lbN?( zHeH^a{^@+r+^KVG>-2u!Nw~deTlMqgbN93O^WX0hD0z6v^?&zs>pj-zVm|FC`LyZw zQ{nI(;j`9T#pk{%d1do&@@4<yyXWklwQgrj_Re=zd$(4neSaxE&-~ooFMBILiv7QK zb)Kc|-Mycy^1mPb{`J1t-MS+6zvoWxzFDsRZtWibJ@H>0-a6iNzT1A)KKkFC8}IMb zXB{YC@cH5$_wQ`2&FBA3{Myg&%-TP*|8yH~+v|B2c9xcp?2G=s{IlHoe9C#XdE);T z{X4x*Tui_2$JN)@&t05xapCk&(<krGty%i_)q&TN>u(=BbWCpF$qHk`xG!P9-yST# zQ!e{{@qK>(Cp8N78viqXZu}a2VfpXLl9MO@XJMZ4`A@R3?rjDJ28CpgAYTTCDpdxC zhGqtapZ^&c8eTFmlo~KFyh>nTu$sZZAf7)d{-_%R15=-;i(^Q|t)3~-9+wj(j?MpD z{^5dKU*@cHS+^2ZFZQxXCUQw-E|4fqo<7Spt-Q%xHqU970MkpQQwxN;H5T4vJmt~5 z@Z<@RtxIROpPg#8)$(~s@&D!BL3b|fynpxir@H;!@2mHPJALAJlGtz~;f<lPfI?T1 z@kEjJZY&iHD(gf4oL^KwQTelS$?rS=r5Hc0T-Y1A)O1ha|DJcQ`kqB6-ag%K$#0&J zSi4c}8~dLc>u+tLvQzimtewkup2hQ1dudZ<rRW)p(wTGj+G|d#Nt~ZL^W>>(n%AqQ zXFGq?@>@SybpGj?KMWfC*`z%tCHG~%JEghUXmN}0`+XBsq>s<NlW4H<M8>j%hVJnW zJo<4<S3TAWWWQDtHd$qNRlCM@@xX=p&)6TAPkJJ|xp~s`*pU5Z8&72P`PjUl{ruhW zs7HD?jItCw<5uS?2o=wmR^NHfQhYkIlK(bdqh&j1?|j?rn3T9#J?v!Y3BQwUH3ym- ze={_6r+;4H;nlG9e$%gI-vc;=ro0r|AR<s0vzW_DzvXoQ)l|kO4R@2-1smd)A7zX+ zQsBtQ$!x#>-u<ATY02$H1u4}zDUY5_41e+GtLOxVm8U{H6j~KngM>^Q6b`;PBC=+i z=ZaLOO(tG%!rk(9^S0Kz{9InNCV+)O<h2(A!y=8Os%xwstUvy0OZ>NGX0Q-k-(=>t zZ|jY127FUvSaq0>Z*ecw`)k8+AZfPC{|&qoPAW`4y}<Vp1B21yDFLUJ9GrAE$Z+$M zl(jF-e$UyPz4z5F^&|5xAGv3IC%mBb-qO@bOC(OR-|Ts}FY!@=;lwzPjL(&??|r^7 z@x&vsE;YZ-)#6-&OM8w!Jmb7VN0&pEa~JnXx7)fhw$B1xw4Ypf9dsyf`+jDI`%OhV Vy1hS`GB7YOc)I$ztaD0e0swP^WPShu literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/871.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/871.png new file mode 100644 index 0000000000000000000000000000000000000000..c68fefef31d27d0b28ef370ba9b0e278d772a5b2 GIT binary patch literal 3427 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 Vy1hS`GB7YOc)I$ztaD0e0swP^WPShu literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/872.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/872.png new file mode 100644 index 0000000000000000000000000000000000000000..c68fefef31d27d0b28ef370ba9b0e278d772a5b2 GIT binary patch literal 3427 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 Vy1hS`GB7YOc)I$ztaD0e0swP^WPShu literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/873.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/873.png new file mode 100644 index 0000000000000000000000000000000000000000..c68fefef31d27d0b28ef370ba9b0e278d772a5b2 GIT binary patch literal 3427 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 Vy1hS`GB7YOc)I$ztaD0e0swP^WPShu literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/874.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/874.png new file mode 100644 index 0000000000000000000000000000000000000000..c68fefef31d27d0b28ef370ba9b0e278d772a5b2 GIT binary patch literal 3427 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 Vy1hS`GB7YOc)I$ztaD0e0swP^WPShu literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/880.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/880.png new file mode 100644 index 0000000000000000000000000000000000000000..56500cb283c9ccea8f49643692b9b5713f794903 GIT binary patch literal 2992 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 literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/886.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/886.png new file mode 100644 index 0000000000000000000000000000000000000000..9e08a99299eefd264f6597c3933130b23a9e46c8 GIT binary patch literal 322 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`($k<n8Xl@E-&h>|H*Y zfq{X&#M9T6{RWSOh^YCu!|zlW7#N;-x;Tbd^d>(E@cn<jflWeEQu5#b;{s_v>Z;Y+ zB=in6=`C2QbyPuL_soY6FQePCx6c>M6^Lt|yT(LPX3Z7JD<VfE^K2_l7CgA&+g5vg z-Q-jQ;X7<;YHX>jfo$Q@xoq|3&TQt=xnRCnnp({-PU%0--`ltS=8reNv+H|PV`F3E z!(Vfs^L&@zm-gfHclk)R#VkiB8kb94nW8GW?oQRI4_|NVw<)K;n~<u}cF?}=U)qeF zUl^JvFqj|S%^xrMZ_>*sHa0f4X^*~(8@S$|kSix+@Gm{#fX{{yh9|B+R~$TiJAq+o Xtcyu?>LV!z1_lOCS3j3^P6<r_pLu}! literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/90.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/90.png new file mode 100644 index 0000000000000000000000000000000000000000..f0baa01617e063f2375cd96af633cf1b8fd0781f GIT binary patch literal 389 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`($k<n8Xl@E-&h>|H*Y zfq{X&#M9T6{U$T3n1*)3#izXt42<fYE{-7<y;rZC^<oN?IQDV><&A2JB^+*@hvtZh z>PBho(CXR1AH$-%tE23$yP_jo?yXjVT%|>?J2FGwBnL<C2${i{e#y-3$^?r}m-D|K zmh<U9x7~N#VTY@{(pToc(h)}%@u&%V9DJ}o;h~i$=fWr7CS1Q1As)WRc7K92>zT=y z?<G9Vkhk3GP^#HnyLNkY)54Udw!8~Qy6-n!P?J2jCg}V#yFiBH2lr_T-ME#auqa9V zbj0)Nat}0l8E$Lr?7H+rLfQH@hwicLnv1u4=l*7A_)~1WF6r}1C)?@{k-(4V{T@$w zZ*^$jdv2py_HJ>0fxh`Qa|>(cwZ*-tI;Iy9<fOsA`^0PQx8Z>YukoJw6B+)X|AV_r u36tiUM^o}LuVu}<&{wejXMO!qYolw4cV%@SCNMBCFnGH9xvX<aXaWG`siqqM literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/90392.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/90392.png new file mode 100644 index 0000000000000000000000000000000000000000..ba425f0f787d1e1bfa8d116481a1b6c95930564f GIT binary patch literal 390 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`($k<n8Xl@E-&h>|H*Y zfq{X&#M9T6{RWpTt2851!>nfv42&9{E{-7<y~%(6|NmdlCdDxAd~I+>q8{_(WWB;! zJ7x%m2mIOjf5OB2tFQCuNUh@W`SV9b`b?AFhxdQk+rHmC%41*lChftOuPF)BCZ!}? zy_oc%i%<FNlm8hHd^7I+S6|fizdm+Hi@=}1zyF^XUjG08?_a#JmVOOMAKvf&{@?zY z(EtAncX2vD+^--1uYTVCC;yj!yZ8UTS)O8sfmgtvoz?w~AP^eOd^o*+zFqo{OZL4F z&+o0~5lZKqD0WQelot;O>|cNHK)?wd-IE7`XB_?T|EYG{ee-<74J%epk~k*VX>sTW zk7r`f#5@1?{y*@+Zh6bY<KJQ@gedABJ+Nx^*#n}IP8WWkU?{h$`!VC;{nOzSO3oa2 tpR|yN$K*_<&K_6GEe7J{0RdbLpUgbe_C(*dVqjok@O1TaS?83{1OVzEw;TWf literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/91.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/91.png new file mode 100644 index 0000000000000000000000000000000000000000..0e8ce1fa92f59c27cdfd7133008f057fb72f6458 GIT binary patch literal 249 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`($k<n8Xl@E-&h>|H*Y zfq{X&#M9T6{U)Ovm!aTQOP{k03=Fe9T^vI!df#5&$lGinz<Qxx@xif#BMdiqxl>N9 znQ(K#21$m*(`Oqe1TQaY)KL2Pdj0are)BIqpIYE37rwy!kFb|!>iqP#T+eMf8uo=7 zEIWJXX7^0~p2tlB68DUkWggrn`#do_+@#l`$2#dw;B}^RKR<6U)OAYmh;%w7q-d}u zEb_-pZH~YM39B=k*##Z5TUTjqGAPY2)PL{)P=DPVlP85AzJff);OXk;vd$@?2>?dj BV9Nji literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/92.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/92.png new file mode 100644 index 0000000000000000000000000000000000000000..6e105a14409b87ebba7c0c7dfdbd8aac53614843 GIT binary patch literal 419 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`($k<n8Xl@E-&h>|H*Y zfq{X&#M9T6{RWpTrwDh>^=ZKj42-UxE{-7<y~%(6|NmdlW^!TU;^u`#wW_-eJR3Td z?l#|h;Lz;A=IiPEN-E}k@c9F$51uag`?GXM#GF)_=E=K+!@lYqkyxd@_H@9@$dd{& zDm>zo#iymukT9G0@bC8TJYHA5o=D2%37z}!<gaksdi(u{j>_$;JrS^JTg$^AcOUb- z(RstO|KGnP2fqXtNgZ8<vkE8mPaZgS=-7wX=k<5|xT9SBFo#c!uT8$b?!Zr%){mF@ z{UvwY*dg&q_i^E>pTGa>bIsRi4xbl!^27W8_HFMT<grPMO7m38$I7?eudiR+At)*` zeSTcpiu)nwFTA;breMPpg~Pi(zn18`V|nPn(PKvw)bfu_*sR3v%pb^RY+zupB_}&^ z$JbY4&Yjtu&Hd~6o40N<J$$TNTJqBLWyX7c{pqS{mXwf?2%8&ubi=DNT8pmm_38L> bF)-u_Cu^$yd2pS9fq}u()z4*}Q$iB}+fuwB literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/93.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/93.png new file mode 100644 index 0000000000000000000000000000000000000000..45e31c8fdde0c1653225b4015f5c350290cf7428 GIT binary patch literal 377 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`($k<n8Xl@E-&h>|H*Y zfq{X&#M9T6{RTIyxQtr-k{MGN7#O8JT^vI!daq92>vfnxq;>xlfusP%jU7r70Wn8c zb}v<8TgYmyVb{3+;ernS2QMCJ@wsmId8IQ+S0H2SBGLa@3$LjpY`J(=S8<8Omo?Al z^&fs3$M{3hDf&QB%l7%rm(Q+HNm;b^-j(_U!;=%1yk61fcp>9L?$#F(Veb<P6XhbW zet5;l)8X;ca>+q|jyE@A-e{?~Cf2O&sjof#<(-_d_3a(v(|e|No!B&I-^UYc{3O~^ z%)@?Elzq^deKCk}i=vwPvWBc($KG$1W_dXKTd1gK=!G8DnB9IKu047A)v)%lzP-YV zyM{3lPo7>-X>N!*_t=X6$Gq8cJQr*%oFernnT9F8xnyU(ytsyG=Z~00#h<m+zKa^4 jd@=vm`_KP)|8U=a6Jj$n{SiL{0|SGntDnm{r-UW|k3FaG literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/94.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/94.png new file mode 100644 index 0000000000000000000000000000000000000000..b102a002100b583ce99176321556c6c0e16958a8 GIT binary patch literal 3164 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 F2>?i7?O*@^ literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/95.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/95.png new file mode 100644 index 0000000000000000000000000000000000000000..c840e3835685b9ca18ed5316cbdd9075da369f63 GIT binary patch literal 2998 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 literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/960.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/960.png new file mode 100644 index 0000000000000000000000000000000000000000..97a58b98d2c76159ef4068d57120b1c215bb7773 GIT binary patch literal 295 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`($k<n8Xl@E-&h>|H*Y zfq{X&#M9T6{RWo^v!V1$o;f`X3=AhdT^vI!dXx94Bz&6R$kxy))^_Pif>_EqX+5?! zYo(qP$t9nj**BjsmtmVfDKTlqhXlv#&LS^vd~84X`kMV4w#Uq(W`;cR_5V{MN(!Y9 z@2~$aY4`tETexi?+itDdMlZUwja}B~wsadB8X5ih-EZwEC|a3zDT*h3-dzX5!|56q z+2+?2^&WKbVh&YS{^y}~>VfTdKjWCH!gj^;N>dygn%f(v&+T5&-PyP2++y#}&{GFM upkvO`%xQhD`wR^_Y!>-lH2iXki-G%_E#K|a?UoD-3=E#GelF{r5}E*oW_3LP literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/961.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/961.png new file mode 100644 index 0000000000000000000000000000000000000000..c7001fb90c622dd11fbac14d7932b8d371ab91cb GIT binary patch literal 383 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`($k<n8Xl@E-&h>|H*Y zfq{X&#M9T6{RXFuxGJ;n*De_b21Z3s7sn8b-nUmAwOI-!j(>b#|8~=jGTmw2Q<yC^ zJk54$<R6UfJLUQ==8nu9nLSM6J1sO+JuPz<6(n@_EcMx4HrsUe%!~iz)vwR&{PxW9 z|F17!zS#5^EpKmO3t1wV;ruWorA8~{LZDMjNJd1b#|p{wa%(Ti`foI{a*wZ8Gmz(P z&a;;*3awo5Btj)Qca6W!f)DTQ3XZkqZYtf~{xfpnX4R7iUrX+M<eOl;Z-dy`bC(UL zg*$g2`;_x3tnqWuzx)ls-wocF&&yVmJ<ECO9sA!-IlX)DHFsaVf4D8z=$h#Xx3Y<g zk_{)xB@`ER=A_No{i<7EW`}6ghWHbONpVG4aht6-yX9x!5@!vFKmB>%hQ%!sU22WH nn4&X-tbVM!@_+r0mHEOddE7Y)|I!#37#KWV{an^LB{Ts5HyWgW literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/962.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/962.png new file mode 100644 index 0000000000000000000000000000000000000000..240d0f52ca1787e3cd77a141ad6b763e19fa1d5b GIT binary patch literal 2965 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 Bfo=c* literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/963.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/963.png new file mode 100644 index 0000000000000000000000000000000000000000..32f0122ab71a70c0b16940f5f0ac53b1fcef8269 GIT binary patch literal 241 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`($k<n8Xl@E-&h>|H*Y zfq{X&#M9T6{W>=fkFM&RyY(PllRaG=Lo9leZPZtMo8QRR&?(l|C)L9w@&Et-e$!9? zjQ^x3q$C_!EjeFmj^4cD*8+~=4?{o8b4PrCaHhVklJo!Tb8G+qfB)Z}=V$%@|9{t8 zZ~te1cu&j!*K%_XrX8tY<M{Ez>FBoNe0hV8;!nmAohuVcFKi4imx!zTe<DF;%>jk; s$~}tx#yy&>Jv=--i!Jjzq<9!Ygo<y!TH9pLz`(%Z>FVdQ&MBb@0J)B0v;Y7A literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/964.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/964.png new file mode 100644 index 0000000000000000000000000000000000000000..1e3371f0029bcfacc903ac1b4b1f4d035b46450f GIT binary patch literal 261 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`($k<n8Xl@E-&h>|H*Y zfq{X&#M9T6{RTIyxE`-uhUroU28QLHE{-7<y>BP$a~}#|I8y&U_i$$yN0I?&)HR<v zr~S=0lSIz2ZRBrH5OCedaai4mE$@uI&E^G7i5(kOAOCwuR((&~VoygS-VC<7Nf)C2 z=j}OJ$JS6C!L)(9w(a)I<2^smdAtk%^P**Wn9KH-dr2;vW89B2Hh-0HmdY?;`Y3C$ zXU@xAwOwIy4PNV7aw9~1q(#|FviLqfZY$gR)o6ayaVM{tw(tE9^548^TKX__$7==# O1_n=8KbLh*2~7ZB9%ZZm literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/965.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/965.png new file mode 100644 index 0000000000000000000000000000000000000000..ec3f620292c2bd0423608470e1cffcef7021722a GIT binary patch literal 2923 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 Kb6Mw<&;$U_hH-EJ literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/966.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/966.png new file mode 100644 index 0000000000000000000000000000000000000000..811fbe23dbc1c42e844a9b914f5687235a386637 GIT binary patch literal 437 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`($k<n8Xl@E-&h>|H*Y zfq{X&#M9T6{RWo^vz)HUD#Ho}2F7qt7sn8b-m6n~dmUyFY1?nIZ0#|r+fCv<$Hew1 zHZ}7#ZEntgz-{r9&#txqp<14+0Q*a&M+-WpuUczz>B_M!YPou)MFNXgL>$cjV_73p z$LF4qz0a4uqr~Y}U}1Q~j0q`KODvR>@@^mfYHL)hd}No3UbZX4rMrJ6{CJONC+_TB z-?_Q#)U!iY$EOw-Ew#~J?A_tS64>z}Av}{!FDhw9^lG1jyV93$_<v3?>geX|;t<PZ zqm_npWsVm~znS_eWRBD-n-2LOGSmELcxBy~CmiLvB4Ru5tbM10S09XxRaZQjb7t+r zBSLeot#cHZ@k0Lbk|IYFAzo4L#OG$WtdBf8pmTKBIS2o)RmqQ7?fA>4u340{RVrpi z`I#j~ccN0eO8;g*y8j^m{M)IaxssuBPd5JiqUL{Gl;?QLZ!Px=eEan8?X~1Md%3VR sXMWd*%f0r83Ve8u|0#L)|8JN0GvTHnhg(Vt3=9kmp00i_>zopr0FHRQ4*&oF literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/967.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/967.png new file mode 100644 index 0000000000000000000000000000000000000000..cf4fc8a339cc5d53d0aa0dc9a1a528fe84b211d5 GIT binary patch literal 137 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`($k<n8Xl@E-&h>|H*Y zfq{X&#M9T6{RR&|pOEZ6w;x*>7#OrYT^vI!dXsI`SA3h_$kxy)*48K0!zA(l|9^X_ oO6MyHZftCA7f(npVq<0qS;j7{vGV^71_lNOPgg&ebxsLQ0Ct@y*8l(j literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/968.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/968.png new file mode 100644 index 0000000000000000000000000000000000000000..3d7b6102e7d09105d30bbaa621f428f9a32f3771 GIT binary patch literal 2927 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 N44$rjF6*2UngC3qZ$|(C literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/971.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/971.png new file mode 100644 index 0000000000000000000000000000000000000000..db976ea171d47f8e2155be63cfde307e4ef16a4b GIT binary patch literal 2873 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 Hl+XkKwUJlb literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/972.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/972.png new file mode 100644 index 0000000000000000000000000000000000000000..560752617fed5108121fa882a025beb7442d4f26 GIT binary patch literal 3052 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 literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/973.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/973.png new file mode 100644 index 0000000000000000000000000000000000000000..fb803fd859294e979f25ea7ef7ae76f4e954f739 GIT binary patch literal 2964 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 A?f?J) literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/974.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/974.png new file mode 100644 index 0000000000000000000000000000000000000000..88f902a36b9d7d3a954f4f337a4015f866941512 GIT binary patch literal 2834 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 R>T(0b_jL7hS?83{1OT7UKD__{ literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/975.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/975.png new file mode 100644 index 0000000000000000000000000000000000000000..acf16d9ff145df0ea71f052ac835eaebb878251f GIT binary patch literal 601 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`($k<n8Xl@E-&h>|H*Y zfq{X&#M9T6{RTIyxQx2S;uTB`42-`$T^vI!de>gI&Ik^aIsWne&YdsMo?UISwd}&I zpslhsjS&L7G+#V;@aRccx%<IDE+q?2rE_^!77|e!K?35_n*yR<I_F+il!#t)>~*f+ zJ6nGCjY6}hvHY4}|NQX(gM#<H({<P*w(%9YJ(lB0V|9wSvdYy@JICXB!Gn2+mb9NZ zF2CWc5g*&rc@F-%Lg)WW?^BLQb1SUYpQtg%wTmZkiAVix*V;9LdDlLyc#|@>Eb#G< z9Q7`X_Tv|hP4ao_G37bODJk2?L#xAPeabC=Gs9}${9{p#_o9}6{Gzxjzh%k$!#lZe zyb^Eey4AjRw(6UGU4gtoSA_~|CtNup@#&gD(qb>8Niz%_eD=OskbGR-qDp+S)PaMI z|7Nea<)3uZ!G2$VpVE;}OcBjL-oM<p;Y{3-AI%*n*>`kzW&AMNR3TKq+b=0k?DA8^ zp1ix4>o%0Nd+xB@^Vq!OH~WV5^Cr)$_usSCvFMN4zqy=`YW%AU4ySQmPG;Hr{l>pg zmADv(y0~N7BL7(K`CR;(!L)Z@TYXN)nV%P@ZOHg_DQ}uaHLrU8%z{kTdA5qXisnvv zp6IPFka*$GuKyfmn{O4#`dUwWYIo+B)UUfg&S~t7;oJUPpmFkz+6n8Y#=2)W<#H57 zEes29n7XW?^7kyaaz^tX8`(FqubIYE<d*z;E%UBFE0sUw|7DwZ;PTu9@-sk*h{4m< K&t;ucLK6U|$Qe%n literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/976.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/976.png new file mode 100644 index 0000000000000000000000000000000000000000..21114e73be7e073336806f993c469c1022d8e302 GIT binary patch literal 2973 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 JWt~$(69BUhenJ2M literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/977.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/977.png new file mode 100644 index 0000000000000000000000000000000000000000..03ca19284acf9aad8812ac67720d2986f22e652a GIT binary patch literal 3373 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 O1B0ilpUXO@geCw@Tt$5V literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/98.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/98.png new file mode 100644 index 0000000000000000000000000000000000000000..f8c7d6749636bcffd74fbb3963cb97464643ace1 GIT binary patch literal 2957 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 literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/992.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/992.png new file mode 100644 index 0000000000000000000000000000000000000000..9b571f6d8502a7671ba1592785a5140568f185c0 GIT binary patch literal 2933 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 U&mu0vz`(%Z>FVdQ&MBb@0E%#M!2kdN literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/993.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/993.png new file mode 100644 index 0000000000000000000000000000000000000000..be6df0d155f2c9f1618c18d89d4cf08bac55daa6 GIT binary patch literal 519 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`($k<n8Xl@E-&h>|H*Y zfq{X&#M9T6{W_;0Bab|r>YpM82F8`1E{-7<y=yP;^$!k|IR5ed&gc6AZaI4^ES<p? zFSYVmi(_wdj+%se%wOg?J~DUb{B53d_2h~`;UxB61&(H4*Y#Us@=x#7f4+m`Rl+5w z`7b5??0!Bi|HScbZB)bU`@8Pk=a~^VYw`AN$0pBu6u9_Q;c?5DU7h|vuSu3^aplFO z=<_j5=sWziSbWE(f_X2UGD~(mQg`u>59Ix((YAbsmI}j)1rAI2IUdWEPY-WvyL;G` zL!!i{Zcjw|g?nyh4jcz-b~gD5Z#x{D=EddC(X;iidY{mAecr~ICtjE&{6BC!s{35g zC7blpms0DL+nxS<uG!P`Ynkd=?pL|q>sK<~_;oLF*@_!CazF3*TJ=S%Nc)El@B4bI zD@)wcC%g9_vQX+-yfE;`>MlpUpC&Vd!d=U_IIX5CJO1}wv!_RT<MHcxK9^axh<&Me zP^VW}x$DI4N@vq4K1bDy{)ar|c8+|0Cd<(`{l_{<ex25(H^uMlyz*pIv{J$6j|YCQ zJbtrXyQTB|Rrb>*zYkU<XtPA0kJ8ce`|$85+pF)M^5uPY=Ot#;eir;&Hg}WBmpwa$ c5AJ99uyD43(5fq@3=9kmp00i_>zopr0M*^?fdBvi literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/994.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/994.png new file mode 100644 index 0000000000000000000000000000000000000000..bd0fb1adc861300c81c2dd5ad461a265ba0bd011 GIT binary patch literal 2927 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 Lu6{1-oD!M<>7`~U literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/995.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/995.png new file mode 100644 index 0000000000000000000000000000000000000000..ca25b95487020021ee6f3d6aabafc8f86d15b107 GIT binary patch literal 286 zcmeAS@N?(olHy`uVBq!ia0y~yU=U+qVBqIqV_;x-kZYg8z`($k<n8Xl@E-&h>|H*Y zfq{X&#M9T6{RWo^v!r4EtKT0O7#I$Cx;Tbd^d|rCXZdl-{`r4y$GiXaSxW!cznt&f zGwr_*PsW4euh#O^=iPS~KgRj*&aUGhlFyp)6pA$0uep2fL+&r3Hu>&rMt^F5Oj)q7 zUfw40$Ho-d!`CyrCF|DQ?Yo`8=H?bMOCTX7B_Sc9C1^!e!~{zjM>!sz|Njg(yvQ~( zIPEQLGCeYGR->|6N29C1@FMZ)2YGmScw`jgj_edmYgnbk+`USv&Ehe)<K6!%GhI{; pc!)ONOK7{u({%O0#JP?Pv9sRk{(t4On}LCW!PC{xWt~$(699KZbHo4u literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/996.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/996.png new file mode 100644 index 0000000000000000000000000000000000000000..f64723f6ffc304e27cb3a1dc49ad612aafe692d2 GIT binary patch literal 3044 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 literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/998.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/flag/998.png new file mode 100644 index 0000000000000000000000000000000000000000..f0d8338ed7cb3ed23f5510bb364101224b1935c1 GIT binary patch literal 2949 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 literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/icon18_active.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/icon18_active.png new file mode 100644 index 0000000000000000000000000000000000000000..4daf42d88e83cd92acd59008c986abc7bab51cfb GIT binary patch literal 3820 zcmeAS@N?(olHy`uVBq!ia0y~yU=RXf4mJh`hOl#e;S3B6oCO|{#S9GG!XV7ZFl&wk z0|S?Trn7TEKt_H^esM;Afr6*AvqC{pep+TuDg#5st+~PJA;B-jY`@?8;^f`YFvUAR zNR&e%$f>(QWTKjuBBy{?hvLGUqJakmU0qqEPb}zQ?(1vl5e?Mg>EgP<{zP$6U-ROQ zu2a7sRxi%Jw&(k^v;VeUw|l<k^W4qn*$;5=O!F`fG;QEn=_Dukp!xWbV-KI`IW%&q z6fg*IY)(-u{;SN$@T1PgMqB9s`#uK7ip$&_3<rE?A25(<|Ih!*X=V&#Lkr`9l8F}H z91S824pn_l%NQKo7#rr!Pzz>Qz`~GlIyvbvLx3(rf_nY4%M1;3f6T0AWQd-kD9X5C zB7=f(YKIF$hBd>Q^I=`C3=swlB5B@7EE#U-G8lM<r+F}J*v@d^oB;PG1`ZwugTRhf zO$L@~hJ+K!$`uSPGZ{qOK84$S)Ltj>T#JFBV&*2Bohp{DjnN#sh3w(sdU6`)JjJy| z%o3RrXF2E{s+=il)M�PV*<h6NKv1s^nj{#$X5Z{4|bW_{cE;&or`XZx>|l=S%D z)AOqf92giLmegJRr=!1Fs==DAA@|=R)pslzaoh_^zjvo?;&<4}u;Asb@XrOHuyI{D zVdu@8PoF%w;dR6*I`LF^?Z5Ox@dv{H=KQR)`SbnjgME)w8jWHb-C2G-ICSQV&r+H5 zlQ>(F?mX*v|FfO@{~y`QN=H1Cc1CE4JPs5p>~opb^Vw*rQm4}-&7-Q9{-->;uk)MP z?!GC*hAcbA>WR85Vw0J_d8-RVlpJ{Uoq^%g?)-ySG&q<WGMXQrFaQ7E{;&H2RfdK% z&q;+03~??hdLgGa+aKp(U~pN`sI|dS`pZEHodaw#2U+hN<o=Uj*5agc<dBnq6IV)u zOi_a7nkFZWwzC^#wG#BNILMkD2+U}kT)?MyD0By(Z2|wUM2>j}HTE=evN)dL5KdIQ z)xnt56`|b6AwIM9hvGpG7NKqxg_9j3flA&JO+5^Qx<V8}J!C)G7BN}2$GGj9Xnlgg zsOeAJ9(Thjjhg~(ukdVj-nqhDs>N*)_l1-a!&&`e3ua#^+9GA!W47@5h1D7SxBBgz zj~g6#A;E5ZB*#GS*kPxQ7CM}hlTU9{TEnyYnAC=_HO#v^zb2pGSk5BU=z4(DjHTR3 zAyLlJBf=-b?}o<;1sN3+!CRc>oXjnOht!oOukhZYwoCBm5s4%t!}bUd9p!66{lfYJ z)g8`9%vFRsosHCYPGIufxFqC~&?UD^c|poAbym(c@sLuUeDYRG_9k}ADLM+;Ct9D( zeRBAT@e}DMil3sn<|a85F8LAsNF(S}mY3vHfu|-<*-~d1IfgEt6?AvS!Vp2z{wSxl z3%3QW4{To{Y*ISQ@@%u1r}xsei>6+d$`H@^p1J--$u7aWQ|0`oUkJZ+`lb7e=`WbS zl=JYmi8deaNY{{@Ex|64E?F+IeumF7$;;i6$3qOv4PVcAK9hfDerSZ&Hmw@biKn=x zdQDZEDy^j-vU1h3RrgkLhkgz{9n!xtF1U7`Tc~mH<CUCOrmYTLH8<dOuyk<xO6wKv ztI}8GhuANvi~QTk7J1m`u)p(?zy%xQAMZJ)z@03)xk5)Vn|F0vX`|^8wT)+Q)|6@O zp7B?9cem}Tl?yGMjlGP+HwS&5l4j5Tct+umIVFCa&o!1$|6JE~PvpJkBTeaLCO$h2 zQ)9AMO`AR~VztNWz}4=r_nNJHyL|4ly{@|>e>d_u9`{m@QFl-8KgT-vdGO8PyUV$j zi}~7GeO;%wDtoE)!rd<A`}3B+n=x-+T*Ew{{N?v5_dfq6Q>*_s<Zte;<zL--BG@+b zsIcAUIVWLr)U+_)Mppm$?T>-Zv4<U;mnKe4oc^$7;?9dUi?6!%y7Bj99*cRb@;LWc z?y<#cY-);X-oCGV-^~j0-MLJ2nYE9#&+)To&MrE8ZKmmLTf^%{&u2fMeSP-*?Fms8 zQ99dJY}=9Qx#>yNvdDMa_T;rjSw=362#t!}?6!99TGea2*X~{}xO}JIWWUw(uB9K| z@NwJ8Z7a7+Zg_fw?e@BDx!Y<J)04#0w;x@1_}%2alWTX?_WreH=WV~qw^}wzwyt<f zk%(28)xBBg=Df47J^E$ZOa1hS^8)8@7(d=7d|LBJ=G@@fm)+CF({~m(f9~k+^lmz> zH{DKew)C;PC-y$^D*0L%`>^WL*SWJd&pz~a#qIU)%-&_bYrix9jLCe>d6CA&7Y?6r zeh~QdqCNNgsRr5i*VOqt`!}X<eXgvZtUob)?ez`YmzJ;kp7>te?weiF{Ks~WZOrc( z-HVJrV}4-!iS4KT59iN|Z@uqaulzsdf7Sns49go-8Pl0N8yy>?nSTGMs!`nEXK!^o z_1mVKZykFU>~s`$>~C7z^z`6b#f%egCahKb{(Q!{iRUu;S_A4{T)V)Y_$;yea2=0& zYkO;Wn|)tFM}*Wx!|A5w7w<S1-*@@tGR@`Q>~uqa%k{cmrdoEZ^s;PjneQ^$Wq(XB zE%MCOh`AA-Io>jsdRptu@^bdw|MT{9`=hy!xF1)G&(J>+TTr?1+@UY6%f(je3F%l( zbMWc#vzYS1Q9x^jSdZ!_;d0eJuF6BQhtiewFPdHKxZxb5CFl3aL(8{n(wm8UOe<B6 z8ZXs(y0b-n<%B&xygqklTg?-jRi=<@WNWq8uzAwN358Cp6n!UeOMjLAEUoPHn$*@! z|BmK$Z`YTb%6>9?^Mp05k-A*loR+-^iPE^P#l9&$H9T$q+0Ijz(^k*ZKKu5}=2N#P zn9q4X|NmQ|LqZQHZCl#r9j+@I@oev!EXz$cg_XCt9*eSSw}r8-vDwkJO)K}R|LV8l z)7RDQRjcyNZj3v4s_EcX#_ZSJp<GW}YhT~F{x;S>LO=5U*2G_JbEWM>JG<72+!miM zT7N_1PQ_E{_WV=(XWp5zW##H4J5$c5T}pfT?4IttXufHyrazm`m&bea))wCTVO!pQ z{pNaGfBIRC+q;{$IqzJ&-)6_2)a577owc?PSrYOk<X4E<yGwVsCSL!Mck!Kc^`37g zZ?4{s-t+yh-N}8oLm5MTuclp1{q6aC^LP7oovU8{nD#q2cCBA-;oIZPmze*uEAwr; zzVpge*-N$|LH*aXU%T@im*4kq?)!3GUNhd%-Z{q}DHpg@K6&|_^Zs`^UaMPWJ=JR- zvR{@jlTDY^&vKgeX_njU;90+;lcIO|pRv1m?bW@iKkm2X`RAC}L{@rz4mp{5>t)mB z$?2cY_spF-x3*62=bePxi?&riPd;})i$DMUE`gGVmt6mMKeygveJ<wHj*?HCZa)<c z-w{4*y;XeftCCkX|0ZAdKfZg;?pf=0#$@k&SG9L*b=vor((}yE-Tkt+@}t=QYggx4 z+TPv!xhntr(eGdHi`}g&QvZAI^zNJG>hIR>@!u2w#o?{vP3ODqSM8(!-MR7pPJPya z@&%tS-f{oV*4ljj-^8!|{LZZXGy6}s@wUC5XJKb)`N+QL@5?{SozJJ7SDPpPZ_&Tg z>%_(M>wa8)ef`|U85b8$|1^E_{@j|Se_tJVExG>ou|vn?_MNOSHjMic_WSL@@;l|S z?-$?a_kU8OP_OYn<LAb&!55bQo-8?e@_!cQ8K3_o8|&U?U|>*4_6YK2V5m}MU}$J& zVEFl;fuZ3g14F3+1H-EX1_rAc3=HD=lj4uMF)*-*d%8G=RNShW9GMfsD$=&Uy4rf~ z+AVWmmfSk$BObMpTU0P=5vwU<R?xIA6*omYfo3=Pn2sY7@*R^hl6Yo&xp2Ff2n8^Q z2`yk+d?biVHzRVn?&*@be6eZTZw*d=WK?OB*xx>R^5j49=PE6@R?gnp-7t$KR_n+l z15uVoRTrK%I<|({pPFfK>HMC`tNE3CYjy4BzkjpW;Fdk_sl7sStUjiq-K(zaS81hp zp3XGOnAP{OQ(X9V`I|pwZ97eG6@B`!TJHSSBX@RQy*kn3$)8xqS7{!1nQkpV@H=J7 zo7?}t7Vfw42wGIMX03Bx@7;a&*%=u(YU>4q%$v8d{%E+w+J4KQt!dH(xsQFNUG^p3 zO&1r$e2Ja%cDKFo`K9)*E-FTX6Z^Nlk$C-Tm)h#^^|z|t?^t_)txMi=LwWvt%a1I5 zr&|BzN%Hu51-VR8+VpWX|I-Tx)n@kGnHIM`+%Er*(;eOVj*gD&uctOOH9gh(sM*t% zz47(UM)4{e_kvlkH>6Hobopf`^YdT3H#`@=Xm8}x|6I%c?*2y`tY^fAojY)V!EG_) z^2;+<JI(mSy3ABkm30fxz9V-0cQ_7ZXq@WY796v)Wa^?n?H6?<P5y0|A7F53@zc<X zs;Uc1v$kyA`Z@gh(LCOe=7SSg%;s@Fd8+u4TmyIAiOV8<Z*IAy{IN2tW__lk?jCi= z=A}kT;ajGrg#srdCLDgJr>2zT*Z4f<^7HgP*NYNu=f2B*an@|jIxVM8ktQ!a^FxNe zYT~SJ^H1X72{he1CsK8)hKgnJH}g9AlZiERHfw6FUh}Q%p!u=or3zM4?*;cBIotX~ z?A);|%_Vu6vYclRnAQtNRq<s%(@|72ymC9x%KdWT)pZX(b^bkmRYkYXSLfiFQ$9f@ znIXqyU-+8~%QPm4?Aq;kT9YxiDLu#7@D)!>e(#5~59dpiahWwY9(-MUSnCbPYqd*$ zXHG<URJHfFFFSjv<S|e3J71Bhji&Nj8s^P%;Wakq-g)!-*{ON*?8j#9oOj3By*S!H z^5we#hD~d>u1*iJ*w4+sZBl@#(dN$vPp2i#-`w*fq{X3H_~$W`Wm7!c{@ASwTl4ti zbM3%KFV|F89iD#JynO$%1sY<yuCsL1yw|1$Y_#q^Sv1YC<fq8VPQe~G;hEcN)ZVFZ zwjI)`{+oQSu2}Wwfm`MM?$Y*=Av`>cHi<@(s(06jXK&NCt50;^bl|Cg`@C2$ujSsA zku#^HiF>C$)VcYu_VQo*>h#;GjE9Tl5>~D<T4x@m%$7V&f;V$g?&*m!vt5mhCoZa* zEc5!WtBZ@<`;II7KNa(Q`TAc>gP%iM)U`75vPp<)qf*(YtXG;*(Vl_Zx@TAm{wRFD z&NjI5S?_@p|2rANn7kXq4CY^7YCrAtlzSEGWhdF0mp8tsPx(>JU?2a<I_A~Q^$ZLQ N44$rjF6*2UngBg)A+rDg literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/icon18_inactive.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/icon18_inactive.png new file mode 100644 index 0000000000000000000000000000000000000000..ec52c3ef7b742bd46939a10b8ed10deb76dbc199 GIT binary patch literal 1424 zcmeAS@N?(olHy`uVBq!ia0y~yU=RXf4i*LmhCj#M?l3Sga29w(7Bet#3xhBt!>l<H z3=GWDna<7u0U7xv`NbLe1qz<d&I$!Z`DvLssSFGiw~`YQ<~?}v=*cOS0|x>ELV}*i zJ&}+Ulw5kCZeC+=<IF}7P&C}R<A9;Uf%eA6Mn!#l{i%$i21W)oyN?|>ap1s#g2?L^ zkDi>`XmVgyOhCw?0|yEk8XFI4sBX2G+1U7yo0-|Us?yVulbJc0hnczABd83_W(2Xz zJSG@3GbeL1GYk8BX1Q`QGcz|A*EyyJrd7FhHZ5GbbZJwvS6$F5r-IZ%&#b(SP3dt( zb%Bm`fk~cOT+GbOSNPc2*x2Hx{}E#Se&mb|t8;KDn^tqj2@O^bZb3T^LlzG`U9Dzz zRpw@fX0c{@XVt@6ZR|aldIEbsOUyTtG%_`aO}dtlm$L74(qW_isWVMyf7O~Td|Rzd z^xI4sCYiZ&*33B@b0#MD&Ye5Ll}jq7eUkbt_lWyh^|5$e1(gj^7kocV3|PEj(TBu| zC4q4l*CrJ{n)4`HHAtmZwcjh$<F%Ll#F@&{TIw3*Vf)+<x=#%M*mOzcsfMWP)a$FF zuS#A0Ym#DmFYDdqSu5tQN?xnI<hR%Rj(;`HQinB^y^}p3-&gzY!#{hi!TaqiHu!A$ zv~k;pz^$SilQ;g(`hVx)w#Tf?lh0MhZrio4Jo@FnE6Ed|JFREE$6YJ-Tkmu9)BSb{ z*$?h5NIv-7Ij_}@`?t_R5lxAuBDpe;#iT{2i{GDQU|m>z>E@H?D}6GHUYbb;&J2y* zyy^RsJExORh3kLN)X|$2TeIUy?o5}R-mZyH_pI7{wLbgnt4FWZO=YtG+|9W#>7Ld4 zw^i*4%ge*7zdwv?v-|yT7w2!afAim1EG>Q2`ErkOQ~J4CUo-ly-I-MRTdY8rCwfc8 z$Ky-+POItE@3>SE`uf%E?9%I|YxnQGm=JvY8GH2FZN7K^B`$xzF0|U>+p_o8bq;?M zo-e%a{--a`POom!w<nV?-%H;%XR_`6x`&sS?l`@CT~thTne&&l*K608UwVIU&->30 z4k%wfzIwiv-Rz%EA5yPpKQk}QuivNt_ruHJgU`$3KkwW7d*c7khu=T4zyB}v?|*&< zJs#Qa1vZ?93=9kk$sR$z3=CDO3=9p;3=BX2GcYu~WMC*YU|@Kaz`$TNgMmRje^UHW zHwFgA_nt0}Ar-f5ChgA_PGoSn|NZHt-7!M_E;-4*tn~@9EP@x8Iv-r55Zdf~)HP$P zf}ShOf5xNs2VxyX)^O+rm0Vhyadk!D1`*w3@>`e1DSKA!%`V!z`~1RX`E~i#kJw&w zhzLp~X&Y^Dc2A6rt9>|~VatC$#YY9-vd&MKI%Q3({QHyNrgndR_|`eG(z(k(j*n0N zg~-N39*i$~OMAoJ9ho%NY=7SV{qljM$Dc{6Nk;ix>sH=t?$~r_j)t6wj-a}0)Ay7Y z$I`lFZ{~^|{~8>m*#GRj-h@P9sV*(C(>fnGyWd_h@OZXV$#&M!ht_<0oBt@aJ9dV0 z{c(HDeQu81C5vlnr{iZGsc@DSp6hz)%R@l}_ZicS<nRA!zW&EW@Ivc3uFqRKA2OsW z1?^rs!OqH4D@5Q+LCahTm77ko?ESVJzHHkvo=s@zJuPLHsiG#Ow|U8h%)b-&3EP@y zCOrsTD9tVJ*~MlWQ)6e|TrPE^|ITHueil7>jtHf`?&ErFfp_L7xC!rkFsb>-frOcC zLUY9!e_Qk&Yu;AQYqB-`n|8>I38f1=81)Q)NixhcC~nj8h-*_{>~>{UH-l?~|Eyx3 z2gT|$<Q^5KPxYM2o8QUZB;eR)x6knEkE-kY{c>x&&iN<5T4{CA<muF!lRV;AwQuEo b$Y%(cbV$Es$BRY=1_lOCS3j3^P6<r_r`v;2 literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/icon32.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/icon32.png new file mode 100644 index 0000000000000000000000000000000000000000..38949785768fa37e6490cd89025e35f38518997b GIT binary patch literal 5391 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4mJh`hT^KKFANL}oCO|{#S9GG!XV7ZFl&wk z0|S?Trn7TEKt_H^esM;Afr6*AvqC{pep+TuDg#5st+~PJA;B-jY`@?8;^f`YFvUAR zNR&e%$f>(QWTKjuBBy{?hvLGUqJakmU0qqEPb}zQ?(1vl5e?Mg>EgP<{zP$6U-ROQ zu2a7sRxi%Jw&(k^v;VeUw|l<k^W4qn*$;5=O!F`fG;QEn=_Dukp!xWbV-KI`IW%&q z6fg*IY)(-u{;SN$@T1PgMqB9s`#uK7ip$&_3<rE?A25(<|Ih!*X=V&#Lkr`9l8F}H z91S824pn_l%NQKo7#rr!Pzz>Qz`~GlIyvbvLx3(rf_nY4%M1;3f6T0AWQd-kD9X5C zB7=f(YKIF$hBd>Q^I=`C3=swlB5B@7EE#U-G8lM<r+F}J*v@d^oB;PG1`ZwugTRhf zO$L@~hJ+K!$`uSPGZ{qOK84$S)Ltj>T#JFBV&*2Bohp{DjnN#sh3w(sdU6`)JjJy| z%o3RrXF2E{s+=il)M�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 L`njxgN@xNAPyR=V literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/icon96.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/icon96.png new file mode 100644 index 0000000000000000000000000000000000000000..0c0ea89ad2356ba6a6253bc2b545cf6584ed0298 GIT binary patch literal 12314 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 UtFwQ`z`(%Z>FVdQ&MBb@0Bj4I)&Kwi literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/icon_menu.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/icon_menu.png new file mode 100644 index 0000000000000000000000000000000000000000..62dd257f7e86daefb4f01088da641f90a2a9e6be GIT binary patch literal 583 zcmeAS@N?(olHy`uVBq!ia0y~yVBiN~4mJh`2J356y%-o6I14-?iy0WWg+Z8+Vb&Z8 z1_lO&WRD<U28JqC28M=a28N&i85kN~GBA`HFfhDIU|_JC!N4G%KPmpG8v_I5Sx*<o zkcwMVE^W*cb`)THP+$JO?7iNnyE7%`9P#XFXcF<*!zkM8>gYJtgCmeJNTA<Av~w2w z0w<-Q70O;(DlUw?LK8I#dpdoK`u2W%_m+>h(?e?Z%IBBQy!&&Y=cq*Xk-|+!C9)sb zubz~8_3qVYp{G7`zh_`!P)KX=oECb2N#s`7Cnqb9?=8Nw^Aq!It4)*kom;)NROz|< z;)~&$PnDi4z5kc9y(x1>hl#_5sCw?hACd%GKKB@Utjzn6`Qt~$hMO<{RCu^Vd4;Mg zRlHAFd-JjJp2+CrxT)9PF)}=tiF)mS?bi2$J^SZ+EzJ{RbdhU*^ntbE(V3K$i;jD_ z&VHUMqwc?0W8XOm=Rldf=<M<Wu~qK9PnSi<?etkVMOyu4K;W00%*?B6Ox9nhd3#Bm zfm>aTp}~OXdiK^|-sddMkA0a`@$O(tx9ieH(Nn#u+PND)Mr{ARxA`}N)$*0XPIuPn zo0PQ*BpFF=pIhu+XtbS8$>12nu?6mj-~YY0zWUzp^Z)Zs?_J)vHEq9+_uEsO<d2_} zs;s|dAR{7Q&3^Y<<qz|DSFSF8*k?G|Q}yh7E=86D32R^efA@VGTk~RdhHuN~HhXKD oU(%_URzF#M?8es22j>~2{SQhx@3&sfz`(%Z>FVdQ&MBb@0F)R39smFU literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/info32.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/info32.png new file mode 100644 index 0000000000000000000000000000000000000000..d8197d61a38f508651d3ce759bcd60d620226bbb GIT binary patch literal 2328 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 literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/jshashtable.js b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/jshashtable.js new file mode 100644 index 0000000000..3806f818f9 --- /dev/null +++ b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/jshashtable.js @@ -0,0 +1,380 @@ +/** + * Copyright 2009 Tim Down. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * jshashtable + * + * jshashtable is a JavaScript implementation of a hash table. It creates a + * single constructor function called Hashtable in the global scope. + * + * Author: Tim Down <tim@timdown.co.uk> + * Version: 1.0 + * Build date: 5 February 2009 + * Website: http://www.timdown.co.uk/jshashtable + */ + +var Hashtable = (function() { + function isUndefined(obj) { + return (typeof obj === "undefined"); + } + + function isFunction(obj) { + return (typeof obj === "function"); + } + + function isString(obj) { + return (typeof obj === "string"); + } + + function hasMethod(obj, methodName) { + if (obj[methodName]) { + return isFunction(obj[methodName]); + } else { + return false; + } + } + + function hasEquals(obj) { + return hasMethod(obj, "equals"); + } + + function hasHashCode(obj) { + return hasMethod(obj, "hashCode"); + } + + function keyForObject(obj) { + if (isString(obj)) { + return obj; + } else if (hasHashCode(obj)) { + // Check the hashCode method really has returned a string + var hashCode = obj.hashCode(); + if (!isString(hashCode)) { + return keyForObject(hashCode); + } + return hashCode; + } else if (hasMethod(obj, "toString")) { + return obj.toString(); + } else { + return String(obj); + } + } + + function equals_fixedValueHasEquals(fixedValue, variableValue) { + return fixedValue.equals(variableValue); + } + + function equals_fixedValueNoEquals(fixedValue, variableValue) { + if (hasEquals(variableValue)) { + return variableValue.equals(fixedValue); + } else { + return fixedValue === variableValue; + } + } + + function equals_equivalence(o1, o2) { + return o1 === o2; + } + + function arraySearch(arr, value, arrayValueFunction, returnFoundItem, equalityFunction) { + var currentValue; + for (var i = 0, len = arr.length; i < len; i++) { + currentValue = arr[i]; + if (equalityFunction(value, arrayValueFunction(currentValue))) { + return returnFoundItem ? [i, currentValue] : true; + } + } + return false; + } + + function arrayRemoveAt(arr, idx) { + if (hasMethod(arr, "splice")) { + arr.splice(idx, 1); + } else { + if (idx === arr.length - 1) { + arr.length = idx; + } else { + var itemsAfterDeleted = arr.slice(idx + 1); + arr.length = idx; + for (var i = 0, len = itemsAfterDeleted.length; i < len; i++) { + arr[idx + i] = itemsAfterDeleted[i]; + } + } + } + } + + function checkKeyOrValue(kv, kvStr) { + if (kv === null) { + throw new Error("null is not a valid " + kvStr); + } else if (isUndefined(kv)) { + throw new Error(kvStr + " must not be undefined"); + } + } + + var keyStr = "key", valueStr = "value"; + + function checkKey(key) { + checkKeyOrValue(key, keyStr); + } + + function checkValue(value) { + checkKeyOrValue(value, valueStr); + } + + /*------------------------------------------------------------------------*/ + + function Bucket(firstKey, firstValue, equalityFunction) { + this.entries = []; + this.addEntry(firstKey, firstValue); + + if (equalityFunction !== null) { + this.getEqualityFunction = function() { + return equalityFunction; + }; + } + } + + function getBucketEntryKey(entry) { + return entry[0]; + } + + function getBucketEntryValue(entry) { + return entry[1]; + } + + Bucket.prototype = { + getEqualityFunction: function(searchValue) { + if (hasEquals(searchValue)) { + return equals_fixedValueHasEquals; + } else { + return equals_fixedValueNoEquals; + } + }, + + searchForEntry: function(key) { + return arraySearch(this.entries, key, getBucketEntryKey, true, this.getEqualityFunction(key)); + }, + + getEntryForKey: function(key) { + return this.searchForEntry(key)[1]; + }, + + getEntryIndexForKey: function(key) { + return this.searchForEntry(key)[0]; + }, + + removeEntryForKey: function(key) { + var result = this.searchForEntry(key); + if (result) { + arrayRemoveAt(this.entries, result[0]); + return true; + } + return false; + }, + + addEntry: function(key, value) { + this.entries[this.entries.length] = [key, value]; + }, + + size: function() { + return this.entries.length; + }, + + keys: function(keys) { + var startIndex = keys.length; + for (var i = 0, len = this.entries.length; i < len; i++) { + keys[startIndex + i] = this.entries[i][0]; + } + }, + + values: function(values) { + var startIndex = values.length; + for (var i = 0, len = this.entries.length; i < len; i++) { + values[startIndex + i] = this.entries[i][1]; + } + }, + + containsKey: function(key) { + return arraySearch(this.entries, key, getBucketEntryKey, false, this.getEqualityFunction(key)); + }, + + containsValue: function(value) { + return arraySearch(this.entries, value, getBucketEntryValue, false, equals_equivalence); + } + }; + + /*------------------------------------------------------------------------*/ + + function BucketItem() {} + BucketItem.prototype = []; + + // Supporting functions for searching hashtable bucket items + + function getBucketKeyFromBucketItem(bucketItem) { + return bucketItem[0]; + } + + function searchBucketItems(bucketItems, bucketKey, equalityFunction) { + return arraySearch(bucketItems, bucketKey, getBucketKeyFromBucketItem, true, equalityFunction); + } + + function getBucketForBucketKey(bucketItemsByBucketKey, bucketKey) { + var bucketItem = bucketItemsByBucketKey[bucketKey]; + + // Check that this is a genuine bucket item and not something + // inherited from prototype + if (bucketItem && (bucketItem instanceof BucketItem)) { + return bucketItem[1]; + } + return null; + } + + /*------------------------------------------------------------------------*/ + + function Hashtable(hashingFunction, equalityFunction) { + var bucketItems = []; + var bucketItemsByBucketKey = {}; + + hashingFunction = isFunction(hashingFunction) ? hashingFunction : keyForObject; + equalityFunction = isFunction(equalityFunction) ? equalityFunction : null; + + this.put = function(key, value) { + checkKey(key); + checkValue(value); + var bucketKey = hashingFunction(key); + + // Check if a bucket exists for the bucket key + var bucket = getBucketForBucketKey(bucketItemsByBucketKey, bucketKey); + if (bucket) { + // Check this bucket to see if it already contains this key + var bucketEntry = bucket.getEntryForKey(key); + if (bucketEntry) { + // This bucket entry is the current mapping of key to value, so replace + // old value and we're done. + bucketEntry[1] = value; + } else { + // The bucket does not contain an entry for this key, so add one + bucket.addEntry(key, value); + } + } else { + // No bucket, so create one and put our key/value mapping in + var bucketItem = new BucketItem(); + bucketItem[0] = bucketKey; + bucketItem[1] = new Bucket(key, value, equalityFunction); + bucketItems[bucketItems.length] = bucketItem; + bucketItemsByBucketKey[bucketKey] = bucketItem; + } + }; + + this.get = function(key) { + if (key == null) return null; + checkKey(key); + var bucketKey = hashingFunction(key); + // Check if a bucket exists for the bucket key + var bucket = getBucketForBucketKey(bucketItemsByBucketKey, bucketKey); + if (bucket) { + // Check this bucket to see if it contains this key + var bucketEntry = bucket.getEntryForKey(key); + if (bucketEntry) { + // This bucket entry is the current mapping of key to value, so return + // the value. + return bucketEntry[1]; + } + } + return null; + }; + + this.containsKey = function(key) { + checkKey(key); + + var bucketKey = hashingFunction(key); + + // Check if a bucket exists for the bucket key + var bucket = getBucketForBucketKey(bucketItemsByBucketKey, bucketKey); + if (bucket) { + return bucket.containsKey(key); + } + + return false; + }; + + this.containsValue = function(value) { + checkValue(value); + for (var i = 0, len = bucketItems.length; i < len; i++) { + if (bucketItems[i][1].containsValue(value)) { + return true; + } + } + return false; + }; + + this.clear = function() { + bucketItems.length = 0; + bucketItemsByBucketKey = {}; + }; + + this.isEmpty = function() { + return bucketItems.length === 0; + }; + + this.keys = function() { + var keys = []; + for (var i = 0, len = bucketItems.length; i < len; i++) { + bucketItems[i][1].keys(keys); + } + return keys; + }; + + this.values = function() { + var values = []; + for (var i = 0, len = bucketItems.length; i < len; i++) { + bucketItems[i][1].values(values); + } + return values; + }; + + this.remove = function(key) { + checkKey(key); + + var bucketKey = hashingFunction(key); + + // Check if a bucket exists for the bucket key + var bucket = getBucketForBucketKey(bucketItemsByBucketKey, bucketKey); + + if (bucket) { + // Remove entry from this bucket for this key + if (bucket.removeEntryForKey(key)) { + // Entry was removed, so check if bucket is empty + if (bucket.size() === 0) { + // Bucket is empty, so remove it + var result = searchBucketItems(bucketItems, bucketKey, bucket.getEqualityFunction(key)); + arrayRemoveAt(bucketItems, result[0]); + delete bucketItemsByBucketKey[bucketKey]; + } + } + } + }; + + this.size = function() { + var total = 0; + for (var i = 0, len = bucketItems.length; i < len; i++) { + total += bucketItems[i][1].size(); + } + return total; + }; + } + + return Hashtable; +})(); \ No newline at end of file diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/messagebox.js b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/messagebox.js new file mode 100644 index 0000000000..8be1b98285 --- /dev/null +++ b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/messagebox.js @@ -0,0 +1,43 @@ +/* +Creative Commons License: Attribution-No Derivative Works 3.0 Unported +http://creativecommons.org/licenses/by-nd/3.0/ +(c)2009 Michael Koch +*/ + +var objTelifyMessageBox = { + +init: function() +{ + var title = window.arguments[0].title; + if (title == null || title == "") title =" Telify"; + document.getElementById("dlgTelifyMessageBox").setAttribute("title", title); + var msg_node = document.createTextNode(window.arguments[0].msg); + document.getElementById("idTelify_mb_msg").appendChild(msg_node); + var flags = window.arguments[0].flags; + if ((flags & objTelifyUtil.MB_MASK) == 0) flags |= objTelifyUtil.MB_OK; // default button + if ((flags & objTelifyUtil.MB_OK) == 0) document.documentElement.getButton("accept").collapsed = true; + if ((flags & objTelifyUtil.MB_CANCEL) == 0) document.documentElement.getButton("cancel").collapsed = true; + var icon = "info32.png"; + switch (flags & objTelifyUtil.MB_ICON_MASK) { + case objTelifyUtil.MB_ICON_ERROR: icon = "error32.png"; break; + case objTelifyUtil.MB_ICON_WARNING: icon = "warn32.png"; break; + case objTelifyUtil.MB_ICON_ASK: icon = "ask32.png"; break; + case objTelifyUtil.MB_ICON_INFO: icon = "info32.png"; break; + } + document.getElementById("idTelify_mb_icon").setAttribute("src", "chrome://telify/content/"+icon); +}, + +onAccept: function() +{ + window.arguments[0].fResult = true; + return true; +}, + +onCancel: function() +{ + window.arguments[0].fResult = false; + return true; +} + +}; + diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/messagebox.xul b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/messagebox.xul new file mode 100644 index 0000000000..1be8d587f4 --- /dev/null +++ b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/messagebox.xul @@ -0,0 +1,34 @@ +<?xml version="1.0"?> +<?xml-stylesheet href="chrome://global/skin/global.css" type="text/css"?> +<?xml-stylesheet href="chrome://telify/content/dialog.css" type="text/css"?> + +<!DOCTYPE dialog SYSTEM "chrome://telify/locale/lang.dtd"> + +<dialog id="dlgTelifyMessageBox" + xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" + buttons="accept, cancel" + onload="objTelifyMessageBox.init()" + ondialogaccept="objTelifyMessageBox.onAccept()" + ondialogcancel="objTelifyMessageBox.onCancel()" + title=""> + + <stringbundleset id="stringbundleset"> + <stringbundle id="idTelifyStringBundle" src="chrome://telify/locale/lang.properties"/> + </stringbundleset> + + <script type='application/x-javascript' src='chrome://telify/content/pref.js'></script> + <script type='application/x-javascript' src='chrome://telify/content/util.js'></script> + <script type='application/x-javascript' src='chrome://telify/content/messagebox.js'></script> + + + <groupbox style="background-color:white;padding:8px;"> + <hbox> + <vbox> + <image id="idTelify_mb_icon" src="chrome://telify/content/info32.png" style="width:32px;height:32px;margin-right:4px;"/> + <spacer flex="1"/> + </vbox> + <description id="idTelify_mb_msg" style="width:240px;text-align:justify;"/> + </hbox> + </groupbox> + +</dialog> diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/pref.js b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/pref.js new file mode 100644 index 0000000000..2d3b635917 --- /dev/null +++ b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/pref.js @@ -0,0 +1,164 @@ +/* +Creative Commons License: Attribution-No Derivative Works 3.0 Unported +http://creativecommons.org/licenses/by-nd/3.0/ +(c)2009 Michael Koch +*/ + +var objTelifyPrefs = { + +PREF_BLACKLIST: "blacklist", +PREF_HIGHLIGHT: "highlight", +PREF_EXCLUDE: "exclude", +PREF_DEBUG: "debug", +PREF_ACTIVE: "active", +PREF_STATUSICON: "statusicon", +PREF_HREFTYPE: "linktype", +PREF_COLSORTCC: "colsortcc", +PREF_NUMHISTORY: "num_history", +PREF_IDD_PREFIX: "idd_prefix", +PREF_DONT_ESCAPE_PLUS: "dont_escape_plus", +PREF_DIAL_CC_DIRECT: "dial_cc_direct", + +NUM_CUSTOM_PARAMS: 3, + +PREF_CUSTOM_URL: "custom_url", +PREF_CUSTOM_TMPL: "custom_tmpl", +PREF_CUSTOM_PARAM: "custom_param", +PREF_CUSTOM_OPENTYPE: "custom_opentype", + +maxHistory: 10, + +telPrefs: null, +telStrings: null, + +blacklist: null, +excludedHosts: null, +highlight: null, +excludedTags: null, +hrefType: null, +numHistory: null, +idd_prefix: null, +fStatusIcon: null, +fActive: null, +fDebug: null, +fDontEscapePlus: null, +fDialCCDirect: null, + +custom_url: null, +custom_tmpl: null, +custom_param: [], +custom_opentype: null, + +HREFTYPE_CUSTOM: 9, + +protoList: new Array("tel", "callto", "skype", "sip"), + + +showConfigDialog: function() +{ + while (true) { + window.openDialog("chrome://telify/content/config.xul", "dlgTelifyConfig", "centerscreen,chrome,modal").focus; + if (this.hrefType == this.HREFTYPE_CUSTOM && this.custom_url.indexOf("$0") < 0) { + var result = objTelifyUtil.showMessageBox("", objTelifyLocale.msgNumberTemplateMissing(), + objTelifyUtil.MB_OK|objTelifyUtil.MB_CANCEL|objTelifyUtil.MB_ICON_WARNING); + if (result == false) continue; + } + break; + } +}, + + +getPrefObj: function() +{ + var obj = Components.classes["@mozilla.org/preferences-service;1"]; + obj = obj.getService(Components.interfaces.nsIPrefService); + obj = obj.getBranch("telify.settings."); + obj.QueryInterface(Components.interfaces.nsIPrefBranch2); + return obj; +}, + + +getCharPref: function(name) +{ + try { + return this.telPrefs.getCharPref(name); + } catch (e) { + alert(e); + return ""; + } +}, + + +getIntPref: function(name) +{ + try { + return this.telPrefs.getIntPref(name); + } catch (e) { + return 0; + } +}, + + +getBoolPref: function(name) +{ + try { + return this.telPrefs.getBoolPref(name); + } catch (e) { + return false; + } +}, + + +getPrefs: function() +{ + this.blacklist = this.telPrefs.getCharPref(this.PREF_BLACKLIST); + if (this.blacklist.length > 0) { + this.excludedHosts = this.blacklist.toLowerCase().split(","); + } else { + this.excludedHosts = new Array(); + } + this.highlight = this.telPrefs.getIntPref(this.PREF_HIGHLIGHT); + this.highlight = objTelifyUtil.trimInt(this.highlight, 0, 100); + this.numHistory = this.telPrefs.getIntPref(this.PREF_NUMHISTORY); + this.numHistory = objTelifyUtil.trimInt(this.numHistory, 1, 10); + this.idd_prefix = this.telPrefs.getCharPref(this.PREF_IDD_PREFIX); + var exclude = this.telPrefs.getCharPref(this.PREF_EXCLUDE); + this.excludedTags = exclude.toLowerCase().split(","); + this.hrefType = this.telPrefs.getIntPref(this.PREF_HREFTYPE); + if ((this.hrefType < 0 || this.hrefType >= this.protoList.length) && this.hrefType != this.HREFTYPE_CUSTOM) this.hrefType = 0; + this.fStatusIcon = this.telPrefs.getBoolPref(this.PREF_STATUSICON); + var status = document.getElementById("idTelify_status"); + if (status) status.setAttribute("collapsed", !this.fStatusIcon); + this.fDebug = this.telPrefs.getBoolPref(this.PREF_DEBUG); + this.fActive = this.telPrefs.getBoolPref(this.PREF_ACTIVE); + this.fDontEscapePlus = this.telPrefs.getBoolPref(this.PREF_DONT_ESCAPE_PLUS); + this.fDialCCDirect = this.telPrefs.getBoolPref(this.PREF_DIAL_CC_DIRECT); + // custom url + this.custom_url = this.getCharPref(this.PREF_CUSTOM_URL); + this.custom_tmpl = this.getIntPref(this.PREF_CUSTOM_TMPL); + for (var i=1; i<this.NUM_CUSTOM_PARAMS+1; i++) { + this.custom_param[i] = this.getCharPref(this.PREF_CUSTOM_PARAM+i); + } + this.custom_opentype = this.getIntPref(this.PREF_CUSTOM_OPENTYPE); +}, + + +prefObserver: { + observe: function(subject, topic, data) { + if (topic != "nsPref:changed") return; + objTelifyPrefs.getPrefs(); + } +}, + + +initTelifyPrefs: function() +{ + objTelifyPrefs.telPrefs = objTelifyPrefs.getPrefObj(); + objTelifyPrefs.telPrefs.addObserver("", objTelifyPrefs.prefObserver, false); + objTelifyPrefs.telStrings = document.getElementById("idTelifyStringBundle"); + objTelifyPrefs.getPrefs(); +} + +}; + + diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/telify.js b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/telify.js new file mode 100644 index 0000000000..58a615ec06 --- /dev/null +++ b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/telify.js @@ -0,0 +1,715 @@ +/* +Creative Commons License: Attribution-No Derivative Works 3.0 Unported +http://creativecommons.org/licenses/by-nd/3.0/ +(c)2009 Michael Koch +*/ + +var objTelify = { + +digits_min: 7, +digits_max: 16, + +hilite_color: new Array(0,0,255), +hilite_bgcolor: new Array(255,255,0), + +// special chars +sc_nbsp: String.fromCharCode(0xa0), + +// chars which look like dashes +token_dash: + String.fromCharCode(0x2013) + + String.fromCharCode(0x2014) + + String.fromCharCode(0x2212), + +exclPatternList: [ + /^\d{2}\.\d{2} ?(-|–) ?\d{2}\.\d{2}$/, // time range e.g. 08.00 - 17.00 + /^\d{2}\/\d{2}\/\d{2}$/, // date e.g. 09/03/09 + /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/, // ip address + /^[0-3]?[0-9]\.[0-3]?[0-9]\.(19|20)\d{2} - \d{2}\.\d{2}$/, // date and time e.g. 09.03.2009 - 17.59 + /^[0-3]?[0-9][\/\.-][0-3]?[0-9][\/\.-](19|20)\d{2}$/, // date e.g. 09/03/2009, 09.03.2009, 09-03-2009 + /^[0-3]?[0-9][\/\.-][0-3]?[0-9][\/\.-]\d{2} ?(-|–) ?[0-3]?[0-9][\/\.-][0-3]?[0-9][\/\.-]\d{2}$/, // date range short + /^[0-3]?[0-9][\/\.-][0-3]?[0-9][\/\.-] ?(-|–) ?[0-3]?[0-9][\/\.-][0-3]?[0-9][\/\.-](19|20)\d{2}$/, // date range medium + /^[0-3]?[0-9][\/\.-][0-3]?[0-9][\/\.-](19|20)\d{2} ?(-|–) ?[0-3]?[0-9][\/\.-][0-3]?[0-9][\/\.-](19|20)\d{2}$/, // date range long + /^0\.\d+$/, // e.g. 0.12345678 +], + +inclLocalList: [ + [/^[1-9]\d{2}[\.-]\d{3}[\.-]\d{4}$/, "+1"], // US +], + +token_trigger: "+(0123456789", +token_part: " -/()[].\r\n" + + String.fromCharCode(0xa0) // sc_nbsp + + String.fromCharCode(0x2013) + String.fromCharCode(0x2014) + String.fromCharCode(0x2212), // token_dash +token_start: "+(0", +token_sep: " -/(.", +token_disallowed_post: ":-", +token_disallowed_prev: "-,.", + +dialHistory: new Array(objTelifyPrefs.maxHistory), + + +getDialHistory: function() +{ + for (var i=0; i<objTelifyPrefs.maxHistory; i++) { + try { + this.dialHistory[i] = objTelifyPrefs.telPrefs.getCharPref("history"+i); + } catch (e) { + this.dialHistory[i] = ""; + } + } +}, + + +saveDialHistory: function() +{ + for (var i=0; i<objTelifyPrefs.maxHistory; i++) { + if (this.dialHistory[i] == null) this.dialHistory[i] = ""; + objTelifyPrefs.telPrefs.setCharPref("history"+i, this.dialHistory[i]); + } +}, + + +updateDialHistory: function(prefix) +{ + //logmsg("updateDialHistory("+prefix+")"); + var newList = new Array(objTelifyPrefs.maxHistory); + newList[0] = prefix; + for (var i=0, j=1; i<objTelifyPrefs.maxHistory && j<objTelifyPrefs.maxHistory; i++) { + if (this.dialHistory[i] == null || this.dialHistory[i] == "" || this.dialHistory[i] == prefix) continue; + newList[j++] = this.dialHistory[i]; + } + this.dialHistory = newList; + this.saveDialHistory(); +}, + + +setStatus: function() +{ + var statusicon = document.getElementById("idTelify_statusicon"); + if (objTelifyPrefs.fActive) { + statusicon.setAttribute("src", "chrome://telify/content/icon18_active.png"); + var text = objTelifyPrefs.telStrings.getString("telify_active"); + statusicon.setAttribute("tooltiptext", text); + } else { + statusicon.setAttribute("src", "chrome://telify/content/icon18_inactive.png"); + var text = objTelifyPrefs.telStrings.getString("telify_inactive"); + statusicon.setAttribute("tooltiptext", text); + } +}, + + +toggleBlacklist: function() +{ + var host = objTelifyUtil.getHost(); + if (host == null) return; + if (objTelifyPrefs.excludedHosts.indexOf(host) >= 0) { + objTelifyUtil.arrayRemove(objTelifyPrefs.excludedHosts, host); + } else { + objTelifyPrefs.excludedHosts.push(host); + } + objTelifyPrefs.blacklist = objTelifyPrefs.excludedHosts.join(","); + objTelifyPrefs.telPrefs.setCharPref(objTelifyPrefs.PREF_BLACKLIST, objTelifyPrefs.blacklist); +}, + + +toggleActive: function() +{ + objTelifyPrefs.telPrefs.setBoolPref(objTelifyPrefs.PREF_ACTIVE, !objTelifyPrefs.fActive); + this.setStatus(); +}, + + +getSelectionNumber: function() +{ + //var sel = content.window.getSelection().toString(); + var sel = document.commandDispatcher.focusedWindow.getSelection().toString(); + sel = this.convertVanityNr(sel); + sel = objTelifyUtil.stripNumber(sel); + return sel; +}, + + +dialNumber: function(nr) +{ + var requ = new XMLHttpRequest(); + var url = objTelifyUtil.createDialURL(nr); + + if (objTelifyPrefs.hrefType == objTelifyPrefs.HREFTYPE_CUSTOM) { + if (objTelifyPrefs.custom_opentype == 1) { + window.open(url, "_blank"); + return; + } + if (objTelifyPrefs.custom_opentype == 2) { + var browser = top.document.getElementById("content"); + var tab = browser.addTab(url); + return; + } + if (objTelifyPrefs.custom_opentype == 3) { + var browser = top.document.getElementById("content"); + var tab = browser.addTab(url); + browser.selectedTab = tab; + return; + } + } + + try { + requ.open("GET", url, true); + requ.send(null); + } catch(e) { + // throws exception because answer is empty (or protocol is unknown) + if (e.name == "NS_ERROR_UNKNOWN_PROTOCOL") { + objTelifyUtil.showMessageBox("", objTelifyLocale.msgUnknownProtocol(), objTelifyUtil.MB_ICON_ERROR); + } + } +}, + + +modifyPopup: function(event) +{ + var label, key; + + //var selText = content.window.getSelection().toString(); + var selText = document.commandDispatcher.focusedWindow.getSelection().toString(); + + if (document.popupNode && document.popupNode.getAttribute("class") == "telified") { + var nr = document.popupNode.getAttribute("nr"); + var nr_parts = objTelifyUtil.splitPhoneNr(nr); + objTelify.modifyDialPopup(nr_parts[0], nr_parts[1], "context"); + objTelifyUtil.setIdAttr("collapsed", false, "idTelify_menu_context"); + } else if (objTelifyPrefs.fActive && selText.length > 0 && objTelifyUtil.countDigits(selText) > 1) { + var nr = objTelify.getSelectionNumber(); + var nr_parts = objTelifyUtil.splitPhoneNr(nr); + objTelify.modifyDialPopup(nr_parts[0], nr_parts[1], "context"); + objTelifyUtil.setIdAttr("collapsed", false, "idTelify_menu_context"); + } else { + objTelifyUtil.setIdAttr("collapsed", true, "idTelify_menu_context"); + } + + if (objTelifyPrefs.fActive) { + label = objTelifyPrefs.telStrings.getString("telify_deactivate"); + } else { + label = objTelifyPrefs.telStrings.getString("telify_activate"); + } + objTelifyUtil.setIdAttr("label", label, "idTelify_menu_activity", "idTelify_status_activity"); + + var host = objTelifyUtil.getHost(); + if (host) { + objTelifyUtil.setIdAttr("disabled", !objTelifyPrefs.fActive, "idTelify_menu_blacklist", "idTelify_status_blacklist"); + if (objTelifyPrefs.excludedHosts.indexOf(host) >= 0) key = "host_active_arg"; else key = "host_inactive_arg"; + label = objTelifyUtil.substArgs(objTelifyPrefs.telStrings.getString(key), host); + objTelifyUtil.setIdAttr("label", label, "idTelify_menu_blacklist", "idTelify_status_blacklist"); + } else { + objTelifyUtil.setIdAttr("label", "Kein Host aktiv", "idTelify_menu_blacklist", "idTelify_status_blacklist"); + objTelifyUtil.setIdAttr("disabled", true, "idTelify_menu_blacklist", "idTelify_status_blacklist"); + } +}, + + +showEditNumberDialog: function(cc, nr) +{ + var argObj = {cc: cc, nr: nr, fOK: false}; + window.openDialog("chrome://telify/content/editNumber.xul", "dlgTelifyEditNumber", "centerscreen,chrome,modal", argObj); + if (argObj.fOK) { + this.updateDialHistory(argObj.cc); + var dial = objTelifyUtil.prefixNumber(argObj.cc, argObj.nr, ""); + objTelify.dialNumber(dial); + } +}, + + +dialMenuSelection: function(cc, nr) +{ + this.updateDialHistory(cc); + var dial = objTelifyUtil.prefixNumber(cc, nr, ""); + objTelify.dialNumber(dial); +}, + + +createTargetCountryInfo: function(prefix) +{ + var cstring = objTelifyUtil.getCountryListString(prefix); + if (cstring) return "\n" + objTelifyPrefs.telStrings.getString('country_code') + ": " + cstring; + return ""; +}, + + +setDialMenuItem: function(item, code, nr) +{ + var label = objTelifyUtil.prefixNumber(code, nr, "-"); + item.setAttribute("label", label); + var cmd = "objTelify.dialMenuSelection('"+code+"','"+nr+"');"; + item.setAttribute("oncommand", cmd); + label = objTelifyUtil.substArgs(objTelifyPrefs.telStrings.getString('call_arg'), label); + label += objTelify.createTargetCountryInfo(code); + item.setAttribute("tooltiptext", label); + item.setAttribute("image", "chrome://telify/content/flag/"+code.substr(1)+".png"); +}, + + +modifyDialPopup: function(cc, nr, id) +{ + var item = document.getElementById("idTelify_"+id); + var sep = document.getElementById("idTelify_sep_"+id); + var numShown = 0; + + if (cc) { + this.setDialMenuItem(item, cc, nr); + } else { + item.setAttribute("label", nr); + var label = objTelifyUtil.substArgs(objTelifyPrefs.telStrings.getString('call_arg'), nr); + item.setAttribute("tooltiptext", label); + item.removeAttribute("image"); + item.setAttribute("oncommand", "objTelify.dialNumber('"+nr+"')"); + } + + item = document.getElementById("idTelify_edit_"+id); + if (cc) { + item.setAttribute("oncommand", "objTelify.showEditNumberDialog('"+cc+"','"+nr+"')"); + } else { + item.setAttribute("oncommand", "objTelify.showEditNumberDialog(null,'"+nr+"')"); + } + + var tldcc = objTelifyUtil.tld2cc(objTelifyUtil.getHostTLD()); + item = document.getElementById("idTelify_tld_"+id); + if (!cc && tldcc) { + item.setAttribute("collapsed", false); + this.setDialMenuItem(item, tldcc, nr); + numShown = 1; + } else { + item.setAttribute("collapsed", true); + tldcc = null; + } + + this.getDialHistory(); + + if (!cc && nr.charAt(0) != '+') { + var numLeft = objTelifyPrefs.numHistory; + if (tldcc) numLeft--; + for (var i=0; i<objTelifyPrefs.maxHistory; i++) { + item = document.getElementById("idTelify_"+id+i); + if (numLeft == 0 || this.dialHistory[i] == null || this.dialHistory[i].length == 0 || this.dialHistory[i] == cc || this.dialHistory[i] == tldcc) { + item.setAttribute("collapsed", true); + } else { + item.setAttribute("collapsed", false); + this.setDialMenuItem(item, this.dialHistory[i], nr); + numLeft--; + numShown++; + } + } + } else { + for (var i=0; i<objTelifyPrefs.maxHistory; i++) { + item = document.getElementById("idTelify_"+id+i); + item.setAttribute("collapsed", true); + } + } + sep.setAttribute("collapsed", numShown == 0); +}, + + +showDialPopup: function(target, cc, nr) +{ + var menu = document.getElementById("idTelify_popup_dial"); + var nr_parts = objTelifyUtil.splitPhoneNr(nr); + this.modifyDialPopup(cc, nr, "dial"); + menu.openPopup(target, "after_start", 0, 0, true, false); +}, + + +onClick: function(event) +{ + if (event.button != 0) return; + var class = event.target.getAttribute("class"); + if (class != "telified") return; + event.preventDefault(); + var nr = event.target.getAttribute("nr"); + var nr_parts = objTelifyUtil.splitPhoneNr(nr); + if (event.button == 0) { + if (nr_parts[0] && objTelifyPrefs.fDialCCDirect) { + objTelify.dialNumber(nr); + } else { + objTelify.showDialPopup(event.target, nr_parts[0], nr_parts[1]); + } + } + if (event.button == 2) { + objTelify.showDialPopup(event.target, nr_parts[0], nr_parts[1]); + } +}, + + +getNodeBackgroundColor: function(node) +{ + node = node.parentNode; + if (node == null) return null; + if (node.nodeType == Node.ELEMENT_NODE) { + var style = content.document.defaultView.getComputedStyle(node, ""); + var image = style.getPropertyValue("background-image"); + if (image && image != "none") return null; + var color = style.getPropertyValue("background-color"); + if (color && color != "transparent") return color; + } + return this.getNodeBackgroundColor(node); +}, + + +getNodeColor: function(node) +{ + node = node.parentNode; + if (node == null) return null; + if (node.nodeType == Node.ELEMENT_NODE) { + var style = content.document.defaultView.getComputedStyle(node, ""); + var color = style.getPropertyValue("color"); + if (color && color != "transparent") return color; + } + return this.getNodeColor(node); +}, + + +formatPhoneNr: function(phonenr) +{ + var substList = [ + [" ", " "], // double spaces to single space + [this.sc_nbsp, " "], // non-breaking space to plain old space + ["+ ", "+"], // remove space after + + ["--", "-"], // double dashes to single dash + ["(0)", " "], // remove optional area code prefix + ["[0]", " "], // remove optional area code prefix + ["-/", "/"], + ["/-", "/"], + ["( ", "("], + [" )", ")"], + ["\r", " "], + ["\n", " "], + ]; + + // replace dash-like chars with dashes + for (var i=0; i<phonenr.length; i++) { + var c = phonenr.charAt(i); + if (this.token_dash.indexOf(c) >= 0) { + phonenr = phonenr.substr(0, i) + "-" + phonenr.substr(i+1); + } + } + + const MAXLOOP = 100; // safety bailout + var nChanged; + + nChanged = 1; + for (var j=0; nChanged > 0 && j < MAXLOOP; j++) { + nChanged = 0; + for (var i=0; i<substList.length; i++) { + var index; + while ((index = phonenr.indexOf(substList[i][0])) >= 0) { + phonenr = phonenr.substr(0, index) + substList[i][1] + phonenr.substr(index+substList[i][0].length); + nChanged++; + } + } + } + + return phonenr; +}, + + +convertVanityNr: function(phonenr) +{ + const tab_alpha = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; + const tab_digit = "22233344455566677778889999"; + var newnr = ""; + for (var i=0; i<phonenr.length; i++) { + var c = phonenr.charAt(i); + var index = tab_alpha.indexOf(c); + if (index >= 0) c = tab_digit.substr(index, 1); + newnr += c; + } + return newnr; +}, + + +reject: function(str, reason) +{ + if (objTelifyPrefs.fDebug == false) return; + var msg = "Telify: reject '"+str+"' reason: "+reason; + objTelifyUtil.logmsg(msg); +}, + + +basechar_tab: [ + String.fromCharCode(0xa0) + + String.fromCharCode(0x2013) + + String.fromCharCode(0x2014) + + String.fromCharCode(0x2212), + " ---" +], + + +basechar: function(c) +{ + var index = this.basechar_tab[0].indexOf(c); + if (index >= 0) c = this.basechar_tab[1].charAt(index); + return c; +}, + + +telifyTextNode: function(node) +{ + if (node == null) return 0; + var text = node.data; + var len = text.length; + if (len < this.digits_min) return 0; + var hlFactor = objTelifyPrefs.highlight/200.0; + + for (var i=0; i<len; i++) { + var c = text.charAt(i); + + if (this.token_trigger.indexOf(c) < 0) continue; + + c = this.basechar(c); + + var str = "" + c; + var strlen = 1; + var last_c = c; + var ndigits = (objTelifyUtil.isdigit(c) ? 1 : 0); + var index; + var fStartsWithCountryCode = false; + var CCfromPattern = null; + + // gather allowed chars + while (strlen < len-i) { + c = text.charAt(i+strlen); + c = this.basechar(c); + if ((c == '+' && ndigits == 0) || (this.token_part.indexOf(c) >= 0)) { + if (c == last_c && c!=' ') break; + } else { + if (!objTelifyUtil.isdigit(c)) break; + ndigits++; + } + str += c; + strlen++; + last_c = c; + } + + // check against digit count min value + if (ndigits < this.digits_min) { + this.reject(str, "less than "+this.digits_min+" digits"); + i += strlen - 1; continue; + } + + // check allowed prev token + if (i > 0) { + var prev_c = text.charAt(i-1); + if (this.token_disallowed_prev.indexOf(prev_c) >= 0) { + this.reject(str, "unallowed previous token (reject list)"); + i += strlen - 1; continue; + } + if ((prev_c >= 'a' && prev_c <= "z") || (prev_c >= 'A' && prev_c <= "Z")) { + this.reject(str, "unallowed previous token (letter)"); + i += strlen - 1; continue; + } + } + + // check if phone number starts with country code + for (var j=0; j<telify_country_data.length; j++) { + var cclen = telify_country_data[j][0].length; + if (cclen < 2 || cclen > 4) continue; + var pattern = telify_country_data[j][0].substr(1); + var plen = pattern.length; + if (str.substr(0, plen) != pattern) continue; + var c = str.charAt(plen); + if (this.token_sep.indexOf(c) < 0) continue; + fStartsWithCountryCode = true; + break; + } + + // check against special local patterns + for (var j=0; j<this.inclLocalList.length; j++) { + var res = this.inclLocalList[j][0].exec(str); + if (res) {CCfromPattern = this.inclLocalList[j][1]; break;} + } + + // check if phone number starts with allowed token + if (CCfromPattern == null && fStartsWithCountryCode == false && this.token_start.indexOf(str.charAt(0)) < 0) { + this.reject(str, "unallowed start token (reject list)"); + i += strlen - 1; continue; + } + + // trim chars at end of string up to an unmatched opening bracket + index = -1; + for (var j=strlen-1; j>=0; j--) { + c = str.charAt(j); + if (c == ')') break; + if (c == '(') {index = j; break;} + } + if (index == 0) continue; + if (index > 0) { + str = str.substr(0, index); + strlen = str.length; + } + + // check against digit count max value (after we have removed unnecessary digits) + if (objTelifyUtil.countDigits(str) > this.digits_max) { + this.reject(str, "more than "+this.digits_max+" digits"); + i += strlen - 1; continue; + } + + // trim non-digit chars at end of string + while (str.length > 0) { + c = str.charAt(str.length-1); + if (!objTelifyUtil.isdigit(c)) { + str = str.substr(0, str.length-1); + strlen--; + } else break; + } + + // check allowed post token + var post_c = text.charAt(i+strlen); + if (post_c) { + if (this.token_disallowed_post.indexOf(post_c) >= 0) { + this.reject(str, "unallowed post token (reject list)"); + i += strlen - 1; continue; + } + if ((post_c >= 'a' && post_c <= "z") || (post_c >= 'A' && post_c <= "Z")) { + this.reject(str, "unallowed post token (letter)"); + i += strlen - 1; continue; + } + } + + // check if this is just a number in braces + // first check for unnecessary opening braces + if (str.substr(0, 1) == "(" && str.indexOf(")") < 0) { + str = str.substr(1); + i++; + strlen--; + // now check if it still starts with allowed token + if (this.token_start.indexOf(str.charAt(0)) < 0) { + this.reject(str, "unallowed start token (after brace removal)"); + i += strlen - 1; + continue; + } + } + + // check against blacklist patterns (date, time ranges etc.) + index = -1; + for (var j=0; j<this.exclPatternList.length; j++) { + var res = this.exclPatternList[j].exec(str); + if (res) {index = j; break;} + } + if (index >= 0) {this.reject(str, "blacklisted pattern #"+index); i += strlen - 1; continue;} + + + // ---------------------------------------------------------------- + + var display = this.formatPhoneNr(str); + var href = objTelifyUtil.stripNumber(display); + if (fStartsWithCountryCode) href = "+"+href; + //if (CCfromPattern) href = CCfromPattern + href; + + // insert link into DOM + + var node_prev = content.document.createTextNode(text.substr(0, i)); + var node_after = content.document.createTextNode(text.substr(i+strlen)); + + //alert("match="+str); + + var node_anchor = content.document.createElement("a"); + + if (hlFactor > 0.0) { + var color = objTelifyUtil.parseColor(this.getNodeColor(node)); + if (color == null) color = new Array(0,0,0); + var bgcolor = objTelifyUtil.parseColor(this.getNodeBackgroundColor(node)); + if (bgcolor == null) bgcolor = new Array(255,255,255); + for (var i=0; i<3; i++) { + color[i] = color[i] + hlFactor * (this.hilite_color[i] - color[i]); + bgcolor[i] = bgcolor[i] + hlFactor * (this.hilite_bgcolor[i] - bgcolor[i]); + } + var style = "color:#"+objTelifyUtil.color2hex(color)+";background-color:#"+objTelifyUtil.color2hex(bgcolor)+";-moz-border-radius:3px"; + node_anchor.setAttribute("style", style); + } + + node_anchor.setAttribute("title", objTelifyPrefs.telStrings.getString('link_title')); + node_anchor.setAttribute("class", "telified"); + node_anchor.setAttribute("nr", href); + node_anchor.setAttribute("href", objTelifyUtil.createDialURL(href)); + + var node_text = content.document.createTextNode(str); + node_anchor.appendChild(node_text); + + var parentNode = node.parentNode; + parentNode.replaceChild(node_after, node); + parentNode.insertBefore(node_anchor, node_after); + parentNode.insertBefore(node_prev, node_anchor); + + return 1; + } + + return 0; +}, + + +recurseNode: function(node) +{ + if (node == null) return 0; // safety + if (node.nodeType == Node.TEXT_NODE) { + return this.telifyTextNode(node); + } else { + var nChanged = 0; + //objTelifyUtil.logmsg("node type="+node.nodeType+" "+node.tagName+" (childs:"+node.childNodes.length+")"); + if (node.nodeType == Node.ELEMENT_NODE) { + var tagName = node.tagName.toLowerCase(); + if (objTelifyPrefs.excludedTags.indexOf(tagName) >= 0) return 0; + } + for (var i=0; i<node.childNodes.length; i++) { + nChanged += this.recurseNode(node.childNodes[i]); + } + if (node.contentDocument) { + nChanged += this.recurseNode(node.contentDocument.body); + node.contentDocument.addEventListener("click", objTelify.onClick, false); + } + } + return nChanged; +}, + + +parsePage: function(event) +{ + if (!objTelifyPrefs.fActive) return; + //objTelifyUtil.logmsg("eventPhase: "+event.eventPhase+"\n"+content.document.URL); + if (content.document.body == null) return; + if (event && event.eventPhase != 1) return; + + var host = objTelifyUtil.getHost(); + if (host && objTelifyPrefs.excludedHosts.indexOf(host) >= 0) return; + + //if (content.document.body.getAttribute('telified') == 1) return; + //content.document.body.setAttribute('telified', 1); + +/* + var nChanged = 0; + var duration = (new Date()).getTime(); + nChanged = objTelify.recurseNode(content.document.body); + duration = (new Date()).getTime() - duration; + var label = "Telify\n" + objTelifyPrefs.telStrings.getString('converted') + ": " + nChanged + " (" + duration + " ms)"; + document.getElementById("idTelify_statusicon").setAttribute("tooltiptext", label); +*/ + + window.setTimeout("objTelify.recurseNode(content.document.body)", 0); + + content.document.addEventListener("click", objTelify.onClick, false); +}, + + +init: function(event) +{ + window.addEventListener('load', objTelify.init, false); + objTelifyPrefs.initTelifyPrefs(); + objTelify.setStatus(); + getBrowser().addEventListener("load", objTelify.parsePage, true); + document.getElementById("contentAreaContextMenu").addEventListener("popupshowing", objTelify.modifyPopup, false); + objTelifyUtil.addScheme("tel"); + objTelifyUtil.localizeCountryData(); + objTelifyUtil.getAddonVersion(); +} + +}; + + +window.addEventListener('load', objTelify.init, false); + diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/util.js b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/util.js new file mode 100644 index 0000000000..838cd91afb --- /dev/null +++ b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/util.js @@ -0,0 +1,516 @@ +/* +Creative Commons License: Attribution-No Derivative Works 3.0 Unported +http://creativecommons.org/licenses/by-nd/3.0/ +(c)2009 Michael Koch +*/ + +var objTelifyUtil = { + +getBrowser: function() +{ + var wm = Components.classes["@mozilla.org/appshell/window-mediator;1"].getService(Components.interfaces.nsIWindowMediator); + var mainWindow = wm.getMostRecentWindow("navigator:browser"); + var browser = mainWindow.getBrowser(); + return browser; +}, + + +getAddonVersion: function() +{ + var gExtensionManager = Components.classes["@mozilla.org/extensions/manager;1"] + .getService(Components.interfaces.nsIExtensionManager); + return gExtensionManager.getItemForID("{6c5f349a-ddda-49ad-bdf0-326d3fe1f938}").version; +}, + + +createDialURL: function(nr) +{ + var url; + if (nr.charAt(0) == '+') { + if (objTelifyPrefs.idd_prefix.length > 0) { + nr = objTelifyPrefs.idd_prefix + nr.substr(1); + } else if (objTelifyPrefs.hrefType == objTelifyPrefs.HREFTYPE_CUSTOM && !objTelifyPrefs.fDontEscapePlus) { + nr = "%2B" + nr.substr(1); + } + } + if (objTelifyPrefs.hrefType == objTelifyPrefs.HREFTYPE_CUSTOM) { + url = objTelifyPrefs.custom_url; + url = objTelifyUtil.replaceRefs(url, 0, nr); + for (var i=1; i<objTelifyPrefs.NUM_CUSTOM_PARAMS+1; i++) { + url = objTelifyUtil.replaceRefs(url, i, objTelifyPrefs.custom_param[i]); + } + } else { + url = objTelifyPrefs.protoList[objTelifyPrefs.hrefType]+":"+nr; + } + return url; +}, + + +token_href: "+0123456789", + +stripNumber: function(phonenr) +{ + var newnr = ""; + for (var i=0; i<phonenr.length; i++) { + var c = phonenr.charAt(i); + if (this.token_href.indexOf(c) >= 0) newnr += c; + } + return newnr.substr(0, objTelify.digits_max); +}, + + +code2ndd_hashtable: null, + +create_code2ndd_hashtable: function() +{ + this.code2ndd_hashtable = new Hashtable(); + for (var i=0; i<telify_country_data.length; i++) { + if (telify_country_data[i][0] == "") continue; + this.code2ndd_hashtable.put(telify_country_data[i][0], telify_country_data[i][3]); + } +}, + + +prefixNumber: function(prefix, nr, sep) +{ + if (prefix == null || prefix == "") return this.stripNumber(nr); + if (this.code2ndd_hashtable == null) this.create_code2ndd_hashtable(); + var ndd = this.code2ndd_hashtable.get(prefix); + if ((ndd.length > 0) && (nr.substr(0, ndd.length) == ndd)) nr = nr.substr(ndd.length); + return this.stripNumber(prefix) + sep + this.stripNumber(nr); +}, + + +trim: function(s) +{ + s = s.replace(/^\s*(.*)/, "$1"); + s = s.replace(/(.*?)\s*$/, "$1"); + return s; +}, + + +localizeCountryData: function() +{ +/* + for (var i=0; i < telify_country_data.length; i++) { + for (var j=0; j<telify_country_locale.length; j++) { + if (telify_country_data[i][1] == telify_country_locale[j][0]) { + telify_country_data[i][1] = telify_country_locale[j][1]; + break; + } + } + } +*/ + var hashtable = new Hashtable(); + for (var i=0; i<telify_country_locale.length; i++) { + hashtable.put(telify_country_locale[i][0], telify_country_locale[i][1]); + } + for (var i=0; i<telify_country_data.length; i++) { + var value = hashtable.get(telify_country_data[i][1]); + if (value) telify_country_data[i][1] = value; + } +}, + + +tld_hashtable: null, + +create_tld_hashtable: function() +{ + this.tld_hashtable = new Hashtable(); + for (var i=0; i<telify_country_data.length; i++) { + if (telify_country_data[i][2] == "") continue; + var tld_list = telify_country_data[i][2].toLowerCase().split(","); + for (var j=0; j<tld_list.length; j++) { + tld_list[j] = this.trim(tld_list[j]); + this.tld_hashtable.put(tld_list[j], telify_country_data[i][0]); + } + } +}, + + +tld2cc: function(tld) +{ + if (this.tld_hashtable == null) this.create_tld_hashtable(); + return this.tld_hashtable.get(tld); +}, + + +splitPhoneNr: function(nr) +{ + var index = -1; + var maxlen = 0; + var idd_list = ["00", "011"]; + var oldnr = nr; + + if (nr.charAt(0) != '+') { + for (var i=0; i<idd_list.length; i++) { + if (nr.substr(0, idd_list[i].length) == idd_list[i]) { + nr = "+" + nr.substr(idd_list[i].length); + break; + } + } + } + if (nr.charAt(0) != '+') return [null, oldnr]; + for (var i=0; i<telify_country_data.length; i++) { + if (nr.substr(0, telify_country_data[i][0].length) == telify_country_data[i][0]) { + if (telify_country_data[i][0].length > maxlen) { + index = i; + maxlen = telify_country_data[i][0].length; + } + } + } + if (index >= 0) { + var cc = telify_country_data[index][0]; + return [cc, nr.substr(cc.length)]; + } + return [null, oldnr]; +}, + + +code2name_hashtable: null, + +create_code2name_hashtable: function() +{ + this.code2name_hashtable = new Hashtable(); + for (var i=0; i<telify_country_data.length; i++) { + if (telify_country_data[i][0] == "") continue; + var name = telify_country_data[i][1]; + var prev = this.code2name_hashtable.get(telify_country_data[i][0]); + if (prev) name = prev + ", " + name; + this.code2name_hashtable.put(telify_country_data[i][0], name); + } +}, + + +getCountryListString: function(prefix) +{ + if (this.code2name_hashtable == null) this.create_code2name_hashtable(); + return this.code2name_hashtable.get(prefix); +}, + + +getHost: function() +{ + try { + return content.document.location.host.toLowerCase(); + } catch (e) { + return null; + } +}, + + +getHostTLD: function() +{ + var host = this.getHost(); + if (host) { + var index = host.lastIndexOf('.'); + if (index >= 0) { + var tld = host.substr(index+1); + if (tld.length) return tld; + } + } + return null; +}, + + +MB_MASK: 0xff, MB_OK: 1, MB_CANCEL: 2, +MB_ICON_MASK: 0xff00, MB_ICON_INFO: 0, MB_ICON_WARNING: 0x0100, MB_ICON_ERROR: 0x0200, MB_ICON_ASK: 0x0300, + +showMessageBox: function(title, msg, flags) +{ + var argObj = {title: title, msg: msg, flags: flags, fResult: true}; + window.openDialog("chrome://telify/content/messagebox.xul", "dlgTelifyMessageBox", "centerscreen,chrome,modal", argObj).focus(); + return argObj.fResult; +}, + + +consoleService: null, + +logmsg: function(msg) { + if (this.consoleService == null) { + this.consoleService = Components.classes["@mozilla.org/consoleservice;1"]; + this.consoleService = this.consoleService.getService(Components.interfaces.nsIConsoleService); + } + this.consoleService.logStringMessage(msg); +}, + + +logerror: function(msg) { + Components.utils.reportError(msg); +}, + + +arrayRemove: function(a, v) +{ + for (var i=0; i<a.length; i++) { + if (a[i] == v) { + a.splice(i, 1); + i--; + } + } +}, + + +replaceRefs: function(string, nr, param) +{ + var index; + while ((index = string.indexOf("$"+nr)) >= 0 && string.charAt(index-1) != '\\') { + string = string.substr(0, index) + param + string.substr(index+2); + } + return string; +}, + + +substArgs: function(text) +{ + var newText = ""; + for (var i=1; i<arguments.length && i<10; i++) { + for (var j=0; j<text.length; j++) { + var c = text.charAt(j); + if (c == '$') { + c = text.charAt(j+1); + if (c >= '1' && c <= '9') { + var index = c - '0'; + if (index < arguments.length) { + newText += arguments[index]; + } else { + this.logerror("substArgs("+text+"): argument for $"+index+" missing"); + } + j++; + } else { + newText += c; + } + } else { + newText += c; + } + } + } + return newText; +}, + + +setIdAttr: function(name, value) +{ + for (var i=2; i<arguments.length; i++) { + var e = document.getElementById(arguments[i]); + if (e) { + e.setAttribute(name, value); + } else { + this.logerror("unknown element '"+arguments[i]+"'"); + } + } +}, + + +countDigits: function(text) +{ + var count = 0; + for (var i=0; i<text.length; i++) { + var c = text.charAt(i); + if (c >= '0' && c <= '9') count++; + } + return count; +}, + + +isdigit: function(c) +{ + return ("0123456789".indexOf(c) >= 0); +}, + + +trimInt: function(value, min, max) +{ + if (value < min) return min; + if (value > max) return max; + return value; +}, + + +parseColor: function(text) +{ + var exp, res, color; + + if (text == null) return null; + + exp = /^rgb *\( *(\d{1,3}) *, *(\d{1,3}) *, *(\d{1,3}) *\)$/; + res = exp.exec(text); + if (res) { + color = new Array(parseInt(res[1]), parseInt(res[2]), parseInt(res[3])); + for (var i=0; i<3; i++) { + if (color[i] < 0) color[i] = 0; + if (color[i] > 255) color[i] = 255; + } + return color; + } + + exp = /^#?([\da-f]{2})([\da-f]{2})([\da-f]{2})$/i; + res = exp.exec(text); + if (res) { + color = new Array(parseInt(res[1], 16), parseInt(res[2], 16), parseInt(res[3], 16)); + return color; + } + + exp = /^#?([\da-f])([\da-f])([\da-f])$/i; + res = exp.exec(text); + if (res) { + color = new Array(parseInt(res[1], 16), parseInt(res[2], 16), parseInt(res[3], 16)); + for (var i=0; i<3; i++) color[i] = color[i]*16+color[i]; + return color; + } + + return null; +}, + + +color2hex: function(color) +{ + var hex; + + if (color == null || color.length != 3) return ""; + for (var i=0, hex=""; i<3; i++) { + var d = "0"+Math.floor(color[i]).toString(16); + hex += d.substr(d.length - 2, 2); + } + return hex; +}, + + +esc2xml: function(string) +{ + var substList = [ + ["&", "&"], // here be dragons: must be first element in list + ["<", "<"], + [">", ">"], + ["\'", "'"], + ["\"", """], + ["Ä", "Ä"], + ["Ö", "Ö"], + ["Ü", "Ü"], + ["ä", "ä"], + ["ö", "ö"], + ["ü", "ü"], + ["ß", "ß"], + ]; + + for (var i=0; i<substList.length; i++) { + var index; + while ((index = string.indexOf(substList[i][0])) >= 0) { + string = string.substr(0, index) + substList[i][1] + string.substr(index+substList[i][0].length); + } + } + + return string; +}, + + +iso2utf8: function(s) +{ + s = s.split(""); + for (var i=0; i<s.length; i++) { + var c = s[i].charCodeAt(0); + if (c > 127) s[i] = String.fromCharCode(0xc0 | ((c >> 6) & 3)) + String.fromCharCode(0x80 | (c & 0x3f)); + } + return s.join(""); +}, + +addScheme: function(scheme) +{ + var createNC = function(aProperty) {return "http://home.netscape.com/NC-rdf#" + aProperty;}; + + var RDF = Components.classes["@mozilla.org/rdf/rdf-service;1"].getService(); + var IRDFService = RDF.QueryInterface(Components.interfaces.nsIRDFService); + + var ContainerUtils = Components.classes["@mozilla.org/rdf/container-utils;1"].getService(); + var IRDFContainerUtils = ContainerUtils.QueryInterface(Components.interfaces.nsIRDFContainerUtils); + + var Container = Components.classes["@mozilla.org/rdf/container;1"].createInstance(); + var IRDFContainer = Container.QueryInterface(Components.interfaces.nsIRDFContainer); + + const mimeTypes = "UMimTyp"; + var fileLocator = Components.classes["@mozilla.org/file/directory_service;1"].getService(Components.interfaces.nsIProperties); + var file = fileLocator.get(mimeTypes, Components.interfaces.nsIFile); + var ioService = Components.classes["@mozilla.org/network/io-service;1"].getService(Components.interfaces.nsIIOService); + var fileHandler = ioService.getProtocolHandler("file").QueryInterface(Components.interfaces.nsIFileProtocolHandler); + var datasource = IRDFService.GetDataSource(fileHandler.getURLSpecFromFile(file)); + var irds = datasource.QueryInterface(Components.interfaces.nsIRDFRemoteDataSource); + + var about, property, value; + + about = IRDFService.GetResource("urn:schemes"); + property = IRDFService.GetResource(createNC("Protocol-Schemes")); + value = IRDFService.GetResource("urn:schemes:root"); + datasource.Assert(about, property, value, true); + + about = IRDFService.GetResource("urn:schemes:root"); + if (IRDFContainerUtils.IsSeq(datasource, about) == false) { + datasource.Assert(about, null, null, true); + IRDFContainerUtils.MakeSeq(datasource, about); + } + IRDFContainer.Init(datasource, about); + var element = IRDFService.GetResource("urn:scheme:"+scheme); + if (IRDFContainer.IndexOf(element) < 0) { + IRDFContainer.AppendElement(element); + } + + about = IRDFService.GetResource("urn:scheme:"+scheme); + property = IRDFService.GetResource(createNC("value")); + value = IRDFService.GetLiteral(scheme); + datasource.Assert(about, property, value, true); + property = IRDFService.GetResource(createNC("handlerProp")); + value = IRDFService.GetResource("urn:scheme:handler:"+scheme) + datasource.Assert(about, property, value, true); + + about = IRDFService.GetResource("urn:scheme:handler:"+scheme); + property = IRDFService.GetResource(createNC("alwaysAsk")); + value = IRDFService.GetLiteral("true"); + datasource.Assert(about, property, value, true); + property = IRDFService.GetResource(createNC("useSystemDefault")); + value = IRDFService.GetLiteral("false"); + datasource.Assert(about, property, value, true); +/* + property = IRDFService.GetResource(createNC("possibleApplication")); + value = IRDFService.GetResource("urn:scheme:possibleApplication:tel"); + datasource.Assert(about, property, value, true); + + about = IRDFService.GetResource("urn:scheme:possibleApplication:tel"); + property = IRDFService.GetResource(createNC("prettyName")); + value = IRDFService.GetLiteral("Nicht konfiguriert"); + datasource.Assert(about, property, value, true); + property = IRDFService.GetResource(createNC("uriTemplate")); + value = IRDFService.GetLiteral("urn:handler:web:http://www.mike-koch.de"); + datasource.Assert(about, property, value, true); +*/ + irds.Flush(); +} + + +/* + <RDF:Description RDF:about="urn:schemes"> + <NC:Protocol-Schemes RDF:resource="urn:schemes:root"/> + </RDF:Description> + + <RDF:Seq RDF:about="urn:schemes:root"> + <RDF:li RDF:resource="urn:scheme:webcal"/> + <RDF:li RDF:resource="urn:scheme:mailto"/> + <RDF:li RDF:resource="urn:scheme:callto"/> + <RDF:li RDF:resource="urn:scheme:tel"/> + </RDF:Seq> + + <RDF:Description RDF:about="urn:scheme:tel" NC:value="tel"> + <NC:handlerProp RDF:resource="urn:scheme:handler:tel"/> + </RDF:Description> + + <RDF:Description RDF:about="urn:scheme:handler:tel" NC:alwaysAsk="true"> + <NC:externalApplication RDF:resource="urn:scheme:externalApplication:tel"/> + </RDF:Description> + + <RDF:Description RDF:about="urn:scheme:externalApplication:tel" + NC:prettyName="3GP_Converter.exe" + NC:path="C:\Programme\3GP_Converter033\3GP_Converter.exe" /> + +*/ + + +}; + diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/warn32.png b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/content/warn32.png new file mode 100644 index 0000000000000000000000000000000000000000..d5f6551d940eb76b48597f3f9bf09e2a3395b090 GIT binary patch literal 2125 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 literal 0 HcmV?d00001 diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/locale/de-DE/country_locale.js b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/locale/de-DE/country_locale.js new file mode 100644 index 0000000000..57e1c7035d --- /dev/null +++ b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/locale/de-DE/country_locale.js @@ -0,0 +1,158 @@ +// caveat: save as UTF-8 +var telify_country_locale = [ +['U.S. Virgin Islands', 'Amerikanische Jungferninseln'], +['Northern Mariana Islands', 'Nördliche Marianen'], +['American Samoa', 'Amerikanisch-Samoa'], +['Canada', 'Kanada'], +['Antigua and Barbuda', 'Antigua und Barbuda'], +['British Virgin Islands', 'Britische Junferninseln'], +['Cayman Islands', 'Kaimaninseln'], +['Dominican Republic', 'Dominikanische Republik'], +['Jamaica', 'Jamaika'], +['Saint Kitts and Nevis', 'Saint Kitts und Nevis'], +['Saint Lucia', 'St. Lucia'], +['Saint Vincent and the Grenadines', 'St. Vincent und die Grenadinen'], +['Trinidad and Tobago', 'Trinidad und Tobago'], +['Turks and Caicos Islands', 'Turks- und Caicosinseln'], +['Egypt', 'Ägypten'], +['Morocco', 'Marokko'], +['Algeria', 'Algerien'], +['Tunisia', 'Tunesien'], +['Libya', 'Libyen'], +['Mauritania', 'Mauretanien'], +['Ivory Coast', 'Elfenbeinküste'], +['Ghana', 'Gana'], +['Chad', 'Tschad'], +['Central African Republic', 'Zentralafrikanische Republik'], +['Cameroon', 'Kamerun'], +['Cape Verde', 'Kap Verde'], +['São Tomé and Príncipe', 'São Tomé und Príncipe'], +['Equatorial Guinea', 'Äquatorialguinea'], +['Gabon', 'Gabun'], +['Congo (Republic)', 'Kongo (Republik)'], +['Congo (Democratic Republic)', 'Kongo (Demokratische Republik)'], +['Ascension Island', 'Ascension'], +['Seychelles', 'Seychellen'], +['Rwanda', 'Ruanda'], +['Ethiopia', 'Äthiopien'], +['Djibouti', 'Dschibuti'], +['Kenya', 'Kenia'], +['Tanzania', 'Tansania'], +['Mozambique', 'Mosambik'], +['Zambia', 'Sambia'], +['Madagascar', 'Madagaskar'], +['Zimbabwe', 'Simbabwe'], +['Botswana', 'Botsuana'], +['Swaziland', 'Swasiland'], +['Comoros', 'Komoren'], +['South Africa', 'Südafrika'], +['Saint Helena', 'St.Helena'], +['Faroe Islands', 'Färöer'], +['Greenland', 'Grönland'], +['Greece', 'Griechenland'], +['Netherlands', 'Niederlande'], +['Belgium', 'Belgien'], +['France', 'Frankreich'], +['Spain', 'Spanien'], +['Luxembourg', 'Luxemburg'], +['Ireland', 'Irland'], +['Iceland', 'Island'], +['Albania', 'Albanien'], +['Cyprus (South)', 'Zypern (Süden)'], +['Finland', 'Finnland'], +['Bulgaria', 'Bulgarien'], +['Hungary', 'Ungarn'], +['Lithuania', 'Litauen'], +['Latvia', 'Lettland'], +['Estonia', 'Estland'], +['Moldova', 'Moldawien'], +['Armenia', 'Armenien'], +['Nagorno-Karabakh', 'Bergkarabach'], +['Nagorno-Karabakh (Mobile)', 'Bergkarabach (Handynetz)'], +['Belarus', 'Weißrussland'], +['Kosovo (Mobile)', 'Kosovo (Handynetz)'], +['Serbia', 'Serbien'], +['Croatia', 'Kroatien'], +['Slovenia', 'Slowenien'], +['Kosovo (Mobile)', 'Kosovo (Handynetz)'], +['Bosnia and Herzegovina', 'Bosnien und Herzegowina'], +['Macedonia', 'Mazedonien'], +['Italy and Vatican City', 'Italien und Vatikanstadt'], +['Romania', 'Rumänien'], +['Switzerland', 'Schweiz'], +['Czech Republic', 'Tschechien'], +['Slovakia', 'Slowakei'], +['Austria', 'Österreich'], +['United Kingdom', 'Großbritannien'], +['Denmark', 'Dänemark'], +['Sweden', 'Schweden'], +['Norway', 'Norwegen'], +['Poland', 'Polen'], +['Germany', 'Deutschland'], +['Falkland Islands', 'Falklandinseln'], +['Saint-Pierre and Miquelon', 'Saint-Pierre und Miquelon'], +['Mexico', 'Mexiko'], +['Cuba', 'Kuba'], +['Argentina', 'Argentinien'], +['Brazil', 'Brasilien'], +['Colombia', 'Kolumbien'], +['Bolivia', 'Bolivien'], +['French Guiana', 'Französisch-Guayana'], +['Suriname', 'Surinam'], +['Netherlands Antilles', 'Niederländische Antillen'], +['Malaysia', 'Malaisia'], +['Australia', 'Australien'], +['Indonesia', 'Indonesien'], +['Philippines', 'Philippinen'], +['New Zealand', 'Neuseeland'], +['Singapore', 'Singapur'], +['East Timor', 'Ost-Timor'], +['Australian external territories', 'Australische Außengebiete'], +['Papua New Guinea', 'Papua-Neuguinea'], +['Solomon Islands', 'Salomonen'], +['Fiji', 'Fidschi'], +['Wallis and Futuna', 'Wallis und Futuna'], +['Cook Islands', 'Cook-Inseln'], +['Niue Island', 'Niue'], +['New Caledonia', 'Neukaledonien'], +['French Polynesia', 'Französisch-Polynesien'], +['Micronesia', 'Mikronesien'], +['Marshall Islands', 'Marshallinseln'], +['Russia', 'Russland'], +['Kazakhstan', 'Kasachstan'], +['South Korea', 'Südkorea'], +['North Korea', 'Nordkorea'], +['Hong Kong', 'Hongkong'], +['Macau', 'Macao'], +['Cambodia', 'Kambodscha'], +['Inmarsat (Atlantic East)', 'Inmarsat (Ostatlantik)'], +['Inmarsat (Pacific)', 'Inmarsat (Pazifik)'], +['Inmarsat (Indian)', 'Inmarsat (Indien)'], +['Inmarsat (Atlantic West)', 'Inmarsat (Westatlantik)'], +['Bangladesh', 'Bangladesch'], +['Global Mobile Satellite System', 'Globales mobiles Satellitensystem'], +['International Networks', 'Internationale Netzwerke'], +['Turkey', 'Türkei'], +['Cyprus (North)', 'Zypern (Nord)'], +['India', 'Indien'], +['Maldives', 'Malediven'], +['Lebanon', 'Libanon'], +['Jordan', 'Jordanien'], +['Syria', 'Syrien'], +['Iraq', 'Irak'], +['Saudi Arabia', 'Saudi Arabien'], +['Yemen', 'Jemen'], +['United Arab Emirates', 'Vereinigte Arabische Emirate'], +['Bahrain', 'Barain'], +['Qatar', 'Katar'], +['Bhutan', 'Butan'], +['Mongolia', 'Mongolei'], +['Tajikistan', 'Tadschikistan'], +['Azerbaijan', 'Aserbaidschan'], +['Georgia', 'Georgien'], +['Kyrgyzstan', 'Kirgisistan'], +['Uzbekistan', 'Usbekistan'], +['Guantanamo Bay', 'Guantanamo'], +['Midway Island', 'Midway Inseln'], +['Vatican City', 'Vatikanstadt'], +]; diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/locale/de-DE/custom_preset.js b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/locale/de-DE/custom_preset.js new file mode 100644 index 0000000000..7f248be61d --- /dev/null +++ b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/locale/de-DE/custom_preset.js @@ -0,0 +1,8 @@ +/* (c)2009 Michael Koch +*/ + +/* name, url, parameter #1, parameter #2, parameter #3 */ +var telify_custom_preset = [ + ["", "", "Parameter #1", "Parameter #2", "Parameter #3"], + ["Vorlage für snom-Telefone", "http://$1/command.htm?number=$0&outgoing_uri=$2", "Telefon-IP", "Ausgehende URI", ""], +]; diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/locale/de-DE/lang.dtd b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/locale/de-DE/lang.dtd new file mode 100644 index 0000000000..797fd04dcf --- /dev/null +++ b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/locale/de-DE/lang.dtd @@ -0,0 +1,39 @@ +<!ENTITY menu.edit_number "Telefonnummer bearbeiten"> +<!ENTITY menu.selection "Rufnummernauswahl"> +<!ENTITY menu.config "Einstellungen"> +<!ENTITY menu.onlinehelp "Online-Hilfe"> +<!ENTITY dialog.edit.title "Telefonnummer bearbeiten"> +<!ENTITY dialog.edit.code "Vorwahl"> +<!ENTITY dialog.edit.country "Land"> +<!ENTITY dialog.edit.dial "Wählen"> +<!ENTITY dialog.config.title "Telify-Einstellungen"> +<!ENTITY dialog.config.general "Allgemeine Einstellungen"> +<!ENTITY dialog.config.custom "Eigene URL"> +<!ENTITY dialog.config.about "Info"> +<!ENTITY dialog.config.replaces "Ersetzt"> +<!ENTITY dialog.config.in_template "in der Vorlage"> +<!ENTITY dialog.config.empty_url "Vorlage unten eingeben oder aus der Liste auswählen"> +<!ENTITY dialog.config.idd_prefix "Ersetze '+' durch"> +<!ENTITY dialog.config.hreftype "Verwendetes Protokoll"> +<!ENTITY dialog.config.hreftype0 "tel:"> +<!ENTITY dialog.config.hreftype1 "callto:"> +<!ENTITY dialog.config.hreftype2 "skype:"> +<!ENTITY dialog.config.hreftype3 "sip:"> +<!ENTITY dialog.config.hreftype_custom "Eigene URL"> +<!ENTITY dialog.config.dialcc "Bei vorhandener Landesvorwahl"> +<!ENTITY dialog.config.dialcc_menu "Öffne Menu"> +<!ENTITY dialog.config.dialcc_direct "Wähle direkt"> +<!ENTITY dialog.config.highlight "Texthervorhebung"> +<!ENTITY dialog.config.highlight0 "Keine"> +<!ENTITY dialog.config.highlight1 "Leicht"> +<!ENTITY dialog.config.highlight2 "Mittel"> +<!ENTITY dialog.config.highlight3 "Stark"> +<!ENTITY dialog.config.num_history "Anzahl der Nummerneinträge"> +<!ENTITY dialog.config.statusicon "Status-Icon anzeigen"> +<!ENTITY dialog.config.statusicon0 "Nein"> +<!ENTITY dialog.config.statusicon1 "Ja"> +<!ENTITY dialog.config.opentype "Öffne Link"> +<!ENTITY dialog.config.opentype0 "im Hintergrund"> +<!ENTITY dialog.config.opentype1 "in einem neuen Fenster"> +<!ENTITY dialog.config.opentype2 "in einem neuen Tab ohne Fokus"> +<!ENTITY dialog.config.opentype3 "in einem neuen Tab mit Fokus"> diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/locale/de-DE/lang.properties b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/locale/de-DE/lang.properties new file mode 100644 index 0000000000..52c37336e6 --- /dev/null +++ b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/locale/de-DE/lang.properties @@ -0,0 +1,13 @@ +leave_blank= +converted=Konvertiert +telify_active=Telify ist aktiv +telify_inactive=Telify ist inaktiv +telify_activate=Telify aktivieren +telify_deactivate=Telify deaktivieren +call_arg=$1 anrufen +host_active_arg=Auf $1 aktivieren +host_inactive_arg=Auf $1 deaktivieren +link_title=Wählbare Rufnummer +country_code=Landesvorwahl +empty_url=Vorlage unten eingeben oder aus der Liste auswählen +phonenr_tmpl=[TelNr] diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/locale/de-DE/locale.js b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/locale/de-DE/locale.js new file mode 100644 index 0000000000..539c6126e6 --- /dev/null +++ b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/locale/de-DE/locale.js @@ -0,0 +1,25 @@ +/* (c)2009 Michael Koch +*/ + +var objTelifyLocale = { + +openOnlineHelp: function() +{ + var browser = objTelifyUtil.getBrowser(); + var tab = browser.addTab("http://www.codepad.de/de/download/firefox-add-ons/telify.html"); + browser.selectedTab = tab; +}, + +msgNumberTemplateMissing: function() +{ + return "Ihre Vorlage enthält keinen Platzhalter für die Telefonnummer (d.h. '$0') und wird deshalb keine Telefonnummer übermitteln. " + + "Wollen Sie das wirklich?"; +}, + +msgUnknownProtocol: function() +{ + return "Im diesem System ist keine Anwendung installiert, die sich für das verwendete Protokoll registriert hat. " + + "Bitte stellen Sie in der Telify-Konfiguration ein geeignetes Protokoll ein oder installieren Sie eine geeignete Anwendung."; +} + +} diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/locale/en-US/country_locale.js b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/locale/en-US/country_locale.js new file mode 100644 index 0000000000..8d0143c5c1 --- /dev/null +++ b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/locale/en-US/country_locale.js @@ -0,0 +1,3 @@ +var telify_country_locale = [ +/* for en-US this is empty */ +]; diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/locale/en-US/custom_preset.js b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/locale/en-US/custom_preset.js new file mode 100644 index 0000000000..e8d3b6be97 --- /dev/null +++ b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/locale/en-US/custom_preset.js @@ -0,0 +1,8 @@ +/* (c)2009 Michael Koch +*/ + +/* name, url, parameter #1, parameter #2, parameter #3 */ +var telify_custom_preset = [ + ["", "", "Parameter #1", "Parameter #2", "Parameter #3"], + ["snom phones template", "http://$1/command.htm?number=$0&outgoing_uri=$2", "Telefon-IP", "Ausgehende URI", ""], +]; diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/locale/en-US/lang.dtd b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/locale/en-US/lang.dtd new file mode 100644 index 0000000000..7dd845151d --- /dev/null +++ b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/locale/en-US/lang.dtd @@ -0,0 +1,39 @@ +<!ENTITY menu.edit_number "Edit phone number"> +<!ENTITY menu.selection "Phone number selection"> +<!ENTITY menu.config "Preferences"> +<!ENTITY menu.onlinehelp "Online Help"> +<!ENTITY dialog.edit.title "Edit phone number"> +<!ENTITY dialog.edit.code "Code"> +<!ENTITY dialog.edit.country "Country"> +<!ENTITY dialog.edit.dial "Dial"> +<!ENTITY dialog.config.title "Telify Preferences"> +<!ENTITY dialog.config.general "General Settings"> +<!ENTITY dialog.config.custom "Custom URL"> +<!ENTITY dialog.config.about "About"> +<!ENTITY dialog.config.replaces "Replaces"> +<!ENTITY dialog.config.in_template "in template string"> +<!ENTITY dialog.config.idd_prefix "Replace '+' with"> +<!ENTITY dialog.config.hreftype "Used protocol"> +<!ENTITY dialog.config.hreftype0 "tel:"> +<!ENTITY dialog.config.hreftype1 "callto:"> +<!ENTITY dialog.config.hreftype2 "skype:"> +<!ENTITY dialog.config.hreftype3 "sip:"> +<!ENTITY dialog.config.hreftype_custom "Custom URL"> +<!ENTITY dialog.config.dialcc "When number has country code"> +<!ENTITY dialog.config.dialcc_menu "open menu"> +<!ENTITY dialog.config.dialcc_direct "dial directly"> +<!ENTITY dialog.config.highlight "Text highlighting"> +<!ENTITY dialog.config.highlight0 "None"> +<!ENTITY dialog.config.highlight1 "Light"> +<!ENTITY dialog.config.highlight2 "Medium"> +<!ENTITY dialog.config.highlight3 "Strong"> +<!ENTITY dialog.config.num_history "Number of recent country codes"> +<!ENTITY dialog.config.statusicon "Status icon"> +<!ENTITY dialog.config.statusicon0 "Hide"> +<!ENTITY dialog.config.statusicon1 "Show"> +<!ENTITY dialog.config.opentype "Open link"> +<!ENTITY dialog.config.opentype0 "silently in the background"> +<!ENTITY dialog.config.opentype1 "in a new window"> +<!ENTITY dialog.config.opentype2 "in a new tab without focus"> +<!ENTITY dialog.config.opentype3 "in a new tab with focus"> + \ No newline at end of file diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/locale/en-US/lang.properties b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/locale/en-US/lang.properties new file mode 100644 index 0000000000..ce7ed93d49 --- /dev/null +++ b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/locale/en-US/lang.properties @@ -0,0 +1,13 @@ +leave_blank= +converted=Converted +telify_active=Telify is active +telify_inactive=Telify is inactive +telify_activate=Activate Telify +telify_deactivate=Deactivate Telify +call_arg=Call $1 +host_active_arg=Activate on $1 +host_inactive_arg=Deactivate on $1 +link_title=phone number +country_code=Country Code +empty_url=Enter template below or choose from the list +phonenr_tmpl=[phonenr] diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/locale/en-US/locale.js b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/locale/en-US/locale.js new file mode 100644 index 0000000000..5240f8585d --- /dev/null +++ b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/chrome/locale/en-US/locale.js @@ -0,0 +1,25 @@ +/* (c)2009 Michael Koch +*/ + +var objTelifyLocale = { + +openOnlineHelp: function() +{ + var browser = objTelifyUtil.getBrowser(); + var tab = browser.addTab("http://www.codepad.de/en/download/firefox-add-ons/telify.html"); + browser.selectedTab = tab; +}, + +msgNumberTemplateMissing: function() +{ + return "Your template does not contain a placeholder for the phone number (i.e. '$0') and will therefore not transmit a phone number. " + + "Do you really want to continue?"; +}, + +msgUnknownProtocol: function() +{ + return "No application is installed which registered itself for the used protocol. " + + "Please configure a suitable protocol in the Telify preferences or install a suitable application."; +} + +} diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/defaults/preferences/preferences.js b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/defaults/preferences/preferences.js new file mode 100644 index 0000000000..b0bb58542d --- /dev/null +++ b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/defaults/preferences/preferences.js @@ -0,0 +1,18 @@ +pref("telify.settings.blacklist", ""); +pref("telify.settings.highlight", 25); +pref("telify.settings.debug", false); +pref("telify.settings.active", true); +pref("telify.settings.exclude", "a,applet,map,select,script,textarea"); +pref("telify.settings.statusicon", true); +pref("telify.settings.linktype", 0); +pref("telify.settings.colsortcc", 1); +pref("telify.settings.num_history", 5); +pref("telify.settings.idd_prefix", ""); +pref("telify.settings.custom_url", ""); +pref("telify.settings.custom_tmpl", 0); +pref("telify.settings.custom_param1", ""); +pref("telify.settings.custom_param2", ""); +pref("telify.settings.custom_param3", ""); +pref("telify.settings.custom_opentype", 3); +pref("telify.settings.dont_escape_plus", false); +pref("telify.settings.dial_cc_direct", false); diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/install.rdf b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/install.rdf new file mode 100644 index 0000000000..5128cb4f70 --- /dev/null +++ b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/mozilla-telify-sflphone/usr/share/telify/install.rdf @@ -0,0 +1,37 @@ +<?xml version="1.0"?> +<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:em="http://www.mozilla.org/2004/em-rdf#"> + <Description about="urn:mozilla:install-manifest"> + <em:id>{6c5f349a-ddda-49ad-bdf0-326d3fe1f938}</em:id> + <em:extension>true</em:extension> + <em:iconURL>chrome://telify/content/icon32.png</em:iconURL> + <em:version>0.4.7.3</em:version> + <em:creator>Michael Koch</em:creator> + <em:homepageURL>http://www.codepad.de/</em:homepageURL> + <em:optionsURL>chrome://telify/content/config.xul</em:optionsURL> + + <em:localized> + <Description> + <em:locale>de-DE</em:locale> + <em:name>Telify</em:name> + <em:description>Erzeugt klickbare Links aus Telefonnummern</em:description> + </Description> + </em:localized> + + <em:localized> + <Description> + <em:locale>en-US</em:locale> + <em:name>Telify</em:name> + <em:description>Converts telephone numbers into clickable links</em:description> + </Description> + </em:localized> + + <!-- Firefox --> + <em:targetApplication> + <Description> + <em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id> + <em:minVersion>3.0</em:minVersion> + <em:maxVersion>3.6.*</em:maxVersion> + </Description> + </em:targetApplication> + </Description> +</RDF> \ No newline at end of file diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/postinst b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/postinst new file mode 100755 index 0000000000..1039df3268 --- /dev/null +++ b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/postinst @@ -0,0 +1,16 @@ +#!/bin/bash + +gconftool-2 --direct --config-source xml::/etc/gconf/gconf.xml.defaults -t string -s /desktop/gnome/url-handlers/tel/command "/usr/bin/sflphone-handler %s" +gconftool-2 --direct --config-source xml::/etc/gconf/gconf.xml.defaults -s /desktop/gnome/url-handlers/tel/needs_terminal false -t bool +gconftool-2 --direct --config-source xml::/etc/gconf/gconf.xml.defaults -t bool -s /desktop/gnome/url-handlers/tel/enabled true + +gconftool-2 --direct --config-source xml::/etc/gconf/gconf.xml.defaults -t string -s /desktop/gnome/url-handlers/callto/command "/usr/bin/sflphone-handler %s" +gconftool-2 --direct --config-source xml::/etc/gconf/gconf.xml.defaults -s /desktop/gnome/url-handlers/callto/needs_terminal false -t bool +gconftool-2 --direct --config-source xml::/etc/gconf/gconf.xml.defaults -t bool -s /desktop/gnome/url-handlers/callto/enabled true + +gconftool-2 --direct --config-source xml::/etc/gconf/gconf.xml.defaults -t string -s /desktop/gnome/url-handlers/sip/command "/usr/bin/sflphone-handler %s" +gconftool-2 --direct --config-source xml::/etc/gconf/gconf.xml.defaults -s /desktop/gnome/url-handlers/sip/needs_terminal false -t bool +gconftool-2 --direct --config-source xml::/etc/gconf/gconf.xml.defaults -t bool -s /desktop/gnome/url-handlers/sip/enabled true + +exit 0 + diff --git a/tools/mozilla-telify-sflphone/debian/rules b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/rules similarity index 100% rename from tools/mozilla-telify-sflphone/debian/rules rename to tools/build-system/launchpad/mozilla-telify-sflphone/debian/rules diff --git a/tools/mozilla-telify-sflphone/debian/watch b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/watch similarity index 100% rename from tools/mozilla-telify-sflphone/debian/watch rename to tools/build-system/launchpad/mozilla-telify-sflphone/debian/watch -- GitLab From 828e5384daa712b8e9a40b173185bf9d1c3bde44 Mon Sep 17 00:00:00 2001 From: Julien Bonjean <julien@bonjean.info> Date: Tue, 15 Dec 2009 18:00:38 -0500 Subject: [PATCH 094/188] [#2181] Cleaning --- tools/build-system/README | 42 - .../distributions/build-packages.sh | 95 -- tools/build-system/distributions/globals | 53 - .../mandriva/build-packages-mandriva.sh | 94 -- .../mandriva/sflphone-client-gnome.spec | 75 - .../mandriva/sflphone-client-kde.spec | 68 - .../mandriva/sflphone-common.spec | 91 -- .../opensuse/build-packages-opensuse.sh | 94 -- .../opensuse/sflphone-client-gnome.spec | 75 - .../opensuse/sflphone-client-kde.spec | 69 - .../opensuse/sflphone-common.spec | 90 -- .../ubuntu/build-packages-ubuntu.sh | 109 -- .../debian-sflphone-client-gnome/changelog | 1284 ----------------- .../debian-sflphone-client-gnome/compat | 1 - .../control.hardy | 20 - .../control.intrepid | 20 - .../control.jaunty | 20 - .../debian-sflphone-client-gnome/copyright | 28 - .../debian-sflphone-client-gnome/cron.d | 4 - .../ubuntu/debian-sflphone-client-gnome/dirs | 7 - .../ubuntu/debian-sflphone-client-gnome/docs | 5 - .../debian-sflphone-client-gnome/manpages | 2 - .../debian-sflphone-client-gnome/postinst | 7 - .../debian-sflphone-client-gnome/postrm | 36 - .../debian-sflphone-client-gnome/preinst | 19 - .../ubuntu/debian-sflphone-client-gnome/prerm | 7 - .../ubuntu/debian-sflphone-client-gnome/rules | 117 -- .../debian-sflphone-client-kde/changelog | 1284 ----------------- .../ubuntu/debian-sflphone-client-kde/compat | 1 - .../control.intrepid | 20 - .../debian-sflphone-client-kde/control.jaunty | 20 - .../debian-sflphone-client-kde/copyright | 28 - .../ubuntu/debian-sflphone-client-kde/cron.d | 4 - .../ubuntu/debian-sflphone-client-kde/dirs | 7 - .../ubuntu/debian-sflphone-client-kde/docs | 5 - .../debian-sflphone-client-kde/manpages | 2 - .../debian-sflphone-client-kde/postinst | 9 - .../ubuntu/debian-sflphone-client-kde/preinst | 15 - .../ubuntu/debian-sflphone-client-kde/prerm | 7 - .../ubuntu/debian-sflphone-client-kde/rules | 118 -- .../ubuntu/debian-sflphone-common/changelog | 1284 ----------------- .../ubuntu/debian-sflphone-common/compat | 1 - .../debian-sflphone-common/control.hardy | 20 - .../debian-sflphone-common/control.intrepid | 20 - .../debian-sflphone-common/control.jaunty | 19 - .../ubuntu/debian-sflphone-common/copyright | 28 - .../ubuntu/debian-sflphone-common/cron.d | 4 - .../ubuntu/debian-sflphone-common/dirs | 8 - .../ubuntu/debian-sflphone-common/docs | 6 - .../ubuntu/debian-sflphone-common/manpages | 1 - .../ubuntu/debian-sflphone-common/postinst | 56 - .../ubuntu/debian-sflphone-common/postrm | 36 - .../ubuntu/debian-sflphone-common/preinst | 16 - .../ubuntu/debian-sflphone-common/rules | 120 -- tools/build-system/gpg/setup-gpg.sh | 56 - tools/build-system/launch-build-machine.sh | 431 ------ .../packages/git-buildpackage_0.4.45_all.deb | Bin 62098 -> 0 bytes .../build-system/remote/update-repository.sh | 68 - tools/build-system/send-emails.sh | 41 - tools/build-system/sfl-git-dch.sh | 163 --- 60 files changed, 6430 deletions(-) delete mode 100644 tools/build-system/README delete mode 100755 tools/build-system/distributions/build-packages.sh delete mode 100644 tools/build-system/distributions/globals delete mode 100755 tools/build-system/distributions/mandriva/build-packages-mandriva.sh delete mode 100644 tools/build-system/distributions/mandriva/sflphone-client-gnome.spec delete mode 100644 tools/build-system/distributions/mandriva/sflphone-client-kde.spec delete mode 100644 tools/build-system/distributions/mandriva/sflphone-common.spec delete mode 100755 tools/build-system/distributions/opensuse/build-packages-opensuse.sh delete mode 100644 tools/build-system/distributions/opensuse/sflphone-client-gnome.spec delete mode 100644 tools/build-system/distributions/opensuse/sflphone-client-kde.spec delete mode 100644 tools/build-system/distributions/opensuse/sflphone-common.spec delete mode 100755 tools/build-system/distributions/ubuntu/build-packages-ubuntu.sh delete mode 100644 tools/build-system/distributions/ubuntu/debian-sflphone-client-gnome/changelog delete mode 100644 tools/build-system/distributions/ubuntu/debian-sflphone-client-gnome/compat delete mode 100644 tools/build-system/distributions/ubuntu/debian-sflphone-client-gnome/control.hardy delete mode 100644 tools/build-system/distributions/ubuntu/debian-sflphone-client-gnome/control.intrepid delete mode 100644 tools/build-system/distributions/ubuntu/debian-sflphone-client-gnome/control.jaunty delete mode 100644 tools/build-system/distributions/ubuntu/debian-sflphone-client-gnome/copyright delete mode 100644 tools/build-system/distributions/ubuntu/debian-sflphone-client-gnome/cron.d delete mode 100644 tools/build-system/distributions/ubuntu/debian-sflphone-client-gnome/dirs delete mode 100644 tools/build-system/distributions/ubuntu/debian-sflphone-client-gnome/docs delete mode 100644 tools/build-system/distributions/ubuntu/debian-sflphone-client-gnome/manpages delete mode 100644 tools/build-system/distributions/ubuntu/debian-sflphone-client-gnome/postinst delete mode 100644 tools/build-system/distributions/ubuntu/debian-sflphone-client-gnome/postrm delete mode 100644 tools/build-system/distributions/ubuntu/debian-sflphone-client-gnome/preinst delete mode 100644 tools/build-system/distributions/ubuntu/debian-sflphone-client-gnome/prerm delete mode 100755 tools/build-system/distributions/ubuntu/debian-sflphone-client-gnome/rules delete mode 100644 tools/build-system/distributions/ubuntu/debian-sflphone-client-kde/changelog delete mode 100644 tools/build-system/distributions/ubuntu/debian-sflphone-client-kde/compat delete mode 100644 tools/build-system/distributions/ubuntu/debian-sflphone-client-kde/control.intrepid delete mode 100644 tools/build-system/distributions/ubuntu/debian-sflphone-client-kde/control.jaunty delete mode 100644 tools/build-system/distributions/ubuntu/debian-sflphone-client-kde/copyright delete mode 100644 tools/build-system/distributions/ubuntu/debian-sflphone-client-kde/cron.d delete mode 100644 tools/build-system/distributions/ubuntu/debian-sflphone-client-kde/dirs delete mode 100644 tools/build-system/distributions/ubuntu/debian-sflphone-client-kde/docs delete mode 100644 tools/build-system/distributions/ubuntu/debian-sflphone-client-kde/manpages delete mode 100644 tools/build-system/distributions/ubuntu/debian-sflphone-client-kde/postinst delete mode 100644 tools/build-system/distributions/ubuntu/debian-sflphone-client-kde/preinst delete mode 100644 tools/build-system/distributions/ubuntu/debian-sflphone-client-kde/prerm delete mode 100755 tools/build-system/distributions/ubuntu/debian-sflphone-client-kde/rules delete mode 100644 tools/build-system/distributions/ubuntu/debian-sflphone-common/changelog delete mode 100644 tools/build-system/distributions/ubuntu/debian-sflphone-common/compat delete mode 100644 tools/build-system/distributions/ubuntu/debian-sflphone-common/control.hardy delete mode 100644 tools/build-system/distributions/ubuntu/debian-sflphone-common/control.intrepid delete mode 100644 tools/build-system/distributions/ubuntu/debian-sflphone-common/control.jaunty delete mode 100644 tools/build-system/distributions/ubuntu/debian-sflphone-common/copyright delete mode 100644 tools/build-system/distributions/ubuntu/debian-sflphone-common/cron.d delete mode 100644 tools/build-system/distributions/ubuntu/debian-sflphone-common/dirs delete mode 100644 tools/build-system/distributions/ubuntu/debian-sflphone-common/docs delete mode 100644 tools/build-system/distributions/ubuntu/debian-sflphone-common/manpages delete mode 100644 tools/build-system/distributions/ubuntu/debian-sflphone-common/postinst delete mode 100644 tools/build-system/distributions/ubuntu/debian-sflphone-common/postrm delete mode 100644 tools/build-system/distributions/ubuntu/debian-sflphone-common/preinst delete mode 100755 tools/build-system/distributions/ubuntu/debian-sflphone-common/rules delete mode 100755 tools/build-system/gpg/setup-gpg.sh delete mode 100755 tools/build-system/launch-build-machine.sh delete mode 100644 tools/build-system/packages/git-buildpackage_0.4.45_all.deb delete mode 100755 tools/build-system/remote/update-repository.sh delete mode 100755 tools/build-system/send-emails.sh delete mode 100755 tools/build-system/sfl-git-dch.sh diff --git a/tools/build-system/README b/tools/build-system/README deleted file mode 100644 index c12a4bbfc4..0000000000 --- a/tools/build-system/README +++ /dev/null @@ -1,42 +0,0 @@ -# register image -VBoxManage registerimage disk VDI/ubuntu-9.04.vdi -type normal - -# check registration -VBoxManage showvdiinfo VDI/ubuntu-9.04.vdi - -# create VM -VBoxManage createvm -name "ubuntu-9.04" -register - -# check vm creation -VBoxManage list vms - -# update configuration -VBoxManage modifyvm "ubuntu-9.04" -hda "VDI/ubuntu-9.04.vdi" -memory "1024MB" -acpi on -nic1 nat - -#si 64 bits -# VBoxManage modifyvm ubuntu-9.04-64 --ostype Ubuntu_64 -# VBoxManage modifyvm ubuntu-9.04-64 --hwvirtex on - -VBoxManage setextradata "ubuntu-9.04" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/ssh/Protocol" TCP -VBoxManage setextradata "ubuntu-9.04" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/ssh/HostPort" 50001 -VBoxManage setextradata "ubuntu-9.04" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/ssh/GuestPort" 22 - -# start vm -VBoxHeadless -startvm "ubuntu-9.04" -p 50000 - -# install ssh support -sudo apt-get install openssh-server - -# add office-srv-01 sflphone user ssh key in authorized_keys of vm -ssh -o LogLevel=ERROR -o CheckHostIP=no -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -p 50001 sflphone@127.0.0.1 "mkdir ~/.ssh/" -scp -o LogLevel=ERROR -o CheckHostIP=no -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -P 50001 /home/projects/sflphone/.ssh/id_dsa.pub sflphone@127.0.0.1:~/.ssh/authorized_keys -ssh -o LogLevel=ERROR -o CheckHostIP=no -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -p 50001 sflphone@127.0.0.1 "chmod 0600 ~/.ssh/authorized_keys" - -# si nécessaire -# scp -o LogLevel=ERROR -o CheckHostIP=no -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -P 50001 /home/projects/sflphone/build-system/git-buildpackage_0.4.45_all.deb sflphone@127.0.0.1: - -# update /etc/sudoers -sflphone ALL = NOPASSWD: /sbin/shutdown, /usr/bin/apt-get, /usr/bin/dpkg - -# stop vm -VBoxManage controlvm "ubuntu-9-04" poweroff diff --git a/tools/build-system/distributions/build-packages.sh b/tools/build-system/distributions/build-packages.sh deleted file mode 100755 index 0b9e09fbec..0000000000 --- a/tools/build-system/distributions/build-packages.sh +++ /dev/null @@ -1,95 +0,0 @@ -#!/bin/bash -##################################################### -# File Name: build-packages.sh -# -# Purpose : -# -# Author: Julien Bonjean (julien@bonjean.info) -# -# Creation Date: 2009-05-29 -# Last Modified: 2009-06-01 17:27:25 -0400 -##################################################### - -. ./globals - -if [ "$?" -ne 0 ]; then - echo "!! Cannot source global file" - exit -1 -fi - -cd ${PACKAGING_DIR} - -if [ ! ${PACKAGING_DIR} ];then - echo "!! Cannot go to working directory" - exit -1 -fi - -# check if version is ok -if [ ! ${VERSION} ]; then - echo "!! Cannot detect current version" - exit -1 -fi - -# open log file -exec 3<>${LOG_FILE} - -# redirect outputs (stdout & stderr) -exec 1>&3 -exec 2>&3 - -echo "SFLPhone version is ${VERSION}" - -# check user -if [ "${WHOAMI}" != "${USER}" ]; then - echo "!! Please use user ${USER} to run this script" - exit -1; -fi - -if [ ${RELEASE_MODE} ]; then - echo "Release mode : ${RELEASE_MODE}" -else - echo "Snapshot mode" -fi - -# decompress repository -echo "Untar repository" -cd ${BUILD_DIR} && tar xf ${REPOSITORY_ARCHIVE} >/dev/null 2>&1 - -if [ "$?" -ne "0" ]; then - echo " !! Cannot untar repository" - exit -1 -fi - -# launch distribution specific script -if [ "${DISTRIBUTION}" = "ubuntu" ];then - echo "Launch packaging for Ubuntu (hardy/intrepid/jaunty)" - cd ${UBUNTU_DIR} && ./build-packages-ubuntu.sh $* - -elif [ "${DISTRIBUTION}" = "opensuse" ]; then - echo "Launch packaging for openSUSE 11" - cd ${OPENSUSE_DIR} && ./build-packages-opensuse.sh $* - -elif [ "${DISTRIBUTION}" = "mandriva" ]; then - echo "Launch packaging for Mandriva 2009.1" - cd ${MANDRIVA_DIR} && ./build-packages-mandriva.sh $* - -elif [ "${DISTRIBUTION}" = "fedora" ]; then - echo "Launch packaging for Fedora 11" - cd ${FEDORA_DIR} && ./build-packages-fedora.sh $* - -else - echo "!! Cannot detect distribution" - exit -1 -fi - -if [ "$?" -ne 0 ]; then - echo "!! Error in subprocess" - exit -1 -fi - -echo "All done" - -# close file descriptor -exec 3>&- - -exit 0 diff --git a/tools/build-system/distributions/globals b/tools/build-system/distributions/globals deleted file mode 100644 index 0de0f01a92..0000000000 --- a/tools/build-system/distributions/globals +++ /dev/null @@ -1,53 +0,0 @@ -##################################################### -# File Name: globals -# -# Purpose : -# -# Author: Julien Bonjean (julien@bonjean.info) -# -# Creation Date: 2009-05-28 -# Last Modified: 2009-05-28 15:55:14 -0400 -##################################################### - -# general -RELEASE_MODE="$1" -ROOT_DIR="/home/sflphone" -PACKAGING_DIR="${ROOT_DIR}/sflphone-packaging" - -# distributions -UBUNTU_DIR="${PACKAGING_DIR}/ubuntu" -OPENSUSE_DIR="${PACKAGING_DIR}/opensuse" -MANDRIVA_DIR="${PACKAGING_DIR}/mandriva" -FEDORA_DIR="${PACKAGING_DIR}/fedora" - -# where packaging will be donne -BUILD_DIR="${PACKAGING_DIR}/build" -REPOSITORY_ARCHIVE="${BUILD_DIR}/sflphone.tar.gz" -REPOSITORY_DIR="${BUILD_DIR}/sflphone" - -# target directories -DEB_RESULT_DIR="${PACKAGING_DIR}/deb/dists" -RPM_RESULT_DIR="${PACKAGING_DIR}/rpm" - -# system information -ARCH_FLAG=`getconf -a|grep LONG_BIT | sed -e 's/LONG_BIT\s*//'` -OS_VERSION=`lsb_release -d -s -c | sed -e '1d'` -DISTRIBUTION=`lsb_release -s -d | sed 's/"//g' | tr 'A-Z' 'a-z' | cut -d " " -f1` -VERSION=`cat ${BUILD_DIR}/VERSION` - -# other stuff -EDITOR=echo -export EDITOR -RELEASE_MODE=$1 -USER="sflphone" -WHOAMI=`whoami` - -# packages we will build -PACKAGES=('sflphone-common sflphone-client-gnome' 'sflphone-client-kde') - -# log file -LOG_ID="${OS_VERSION}" -if [ "${LOG_ID}" = "" ]; then - LOG_ID="${DISTRIBUTION}" -fi -LOG_FILE=${PACKAGING_DIR}/sflphone-${LOG_ID}-${ARCH_FLAG}.log diff --git a/tools/build-system/distributions/mandriva/build-packages-mandriva.sh b/tools/build-system/distributions/mandriva/build-packages-mandriva.sh deleted file mode 100755 index 88137cba65..0000000000 --- a/tools/build-system/distributions/mandriva/build-packages-mandriva.sh +++ /dev/null @@ -1,94 +0,0 @@ -#!/bin/bash -##################################################### -# File Name: build-packages-mandriva.sh -# -# Purpose : -# -# Author: Julien Bonjean (julien@bonjean.info) -# -# Creation Date: 2009-05-27 -# Last Modified: 2009-06-04 16:29:34 -0400 -##################################################### - -. ../globals - -cd ${MANDRIVA_DIR} - -if [ "$?" -ne "0" ]; then - echo " !! Cannot cd to Mandriva directory" - exit -1 -fi - -echo "Do updates" -sudo /usr/sbin/urpmi --auto-update --auto >/dev/null - -# create build directories -echo "Create directories" -mkdir -p ${BUILD_DIR}/BUILD -mkdir -p ${RPM_RESULT_DIR} -mkdir -p ${BUILD_DIR}/SOURCES -mkdir -p ${BUILD_DIR}/SPECS - -# create rpm macros -echo "Create RPM macros" -cat > ~/.rpmmacros << STOP -%packager Julien Bonjean (julien.bonjean@savoirfairelinux.com) -%distribution Savoir-faire Linux -%vendor Savoir-faire Linux - -%_signature gpg -%_gpg_name Julien Bonjean - -%_topdir ${BUILD_DIR} -%_builddir %{_topdir}/BUILD -%_rpmdir ${RPM_RESULT_DIR} -%_sourcedir %{_topdir}/SOURCES -%_specdir %{_topdir}/SPECS -%_srcrpmdir ${RPM_RESULT_DIR} -STOP - -# create packages -for PACKAGE in ${PACKAGES[@]} -do - echo "Prepare ${PACKAGE}" - - cd ${REPOSITORY_DIR} - - echo " -> create source archive" - mv ${PACKAGE} ${PACKAGE}-${VERSION} 2>/dev/null && \ - tar cf ${PACKAGE}.tar.gz ${PACKAGE}-${VERSION} >/dev/null && \ - mv ${PACKAGE}-${VERSION} ${PACKAGE} - - if [ "$?" -ne "0" ]; then - echo "!! Cannot create source archive" - exit -1 - fi - - echo " -> move archive to source directory" - mv ${PACKAGE}.tar.gz ${BUILD_DIR}/SOURCES - - if [ "$?" -ne "0" ]; then - echo "!! Cannot move archive" - exit -1 - fi - - cd ${PACKAGING_DIR} - - echo " -> update spec file" - sed "s/VERSION/${VERSION}/g" mandriva/${PACKAGE}.spec > ${BUILD_DIR}/SPECS/${PACKAGE}.spec - - if [ "$?" -ne "0" ]; then - echo "!! Cannot update spec file" - exit -1 - fi -done - -# launch build -echo "Launch build" -rpmbuild -ba ${BUILD_DIR}/SPECS/*.spec - -if [ "$?" -ne "0" ]; then - echo "!! Cannot build packages" - exit -1 -fi - diff --git a/tools/build-system/distributions/mandriva/sflphone-client-gnome.spec b/tools/build-system/distributions/mandriva/sflphone-client-gnome.spec deleted file mode 100644 index 0e7ac8beb0..0000000000 --- a/tools/build-system/distributions/mandriva/sflphone-client-gnome.spec +++ /dev/null @@ -1,75 +0,0 @@ -##################################################### -# File Name: sflphone-client-gnome.spec -# -# Purpose : -# -# Author: Julien Bonjean (julien@bonjean.info) -# -# Creation Date: 2009-05-27 -# Last Modified: 2009-05-27 17:23:32 -0400 -##################################################### - -Name: sflphone-client-gnome -License: GNU General Public License (GPL) -Group: Productivity/Networking/System -Summary: GNOME client for SFLphone -Version: VERSION -Release: mandriva -URL: http://www.sflphone.org/ -Vendor: Savoir-faire Linux -Packager: Julien Bonjean <julien.bonjean@savoirfairelinux.com> - -BuildRoot: %{_tmppath}/%{name}-%{version} -Source0: sflphone-client-gnome.tar.gz -BuildRequires: gtk2-devel -BuildRequires: libnotify-devel -BuildRequires: libsexy-devel -BuildRequires: evolution-data-server-devel -BuildRequires: check-devel -BuildRequires: libdbus-glib-devel -BuildRequires: log4c-devel -Requires: sflphone-common = %{version} -Requires: dbus-1-glib -Requires: gtk2 -Requires: glib2 -Requires: dbus-1-glib -Requires: libnotify -Requires: librsvg -Requires: log4c -Requires: libsexy -Conflicts: sflphone -Prefix: %{_prefix} - -%description -Provide a GNOME client for SFLphone. - SFLphone is meant to be a robust enterprise-class desktop phone. - SFLphone is released under the GNU General Public License. - SFLphone is being developed by the global community, and maintained by - Savoir-faire Linux, a Montreal, Quebec, Canada-based Linux consulting company. - -Authors: --------- - Julien Bonjean <julien.bonjean@savoirfairelinux.com> - -%lang_package - -%prep -%setup -q - -%build -./autogen.sh -./configure --prefix=%{_prefix} -make -j - -%install -make DESTDIR=%{buildroot} install - -%clean -make clean - -%files -%defattr(-, root, root) -%{_prefix}/* -%doc AUTHORS COPYING README - -%changelog diff --git a/tools/build-system/distributions/mandriva/sflphone-client-kde.spec b/tools/build-system/distributions/mandriva/sflphone-client-kde.spec deleted file mode 100644 index a453cf9144..0000000000 --- a/tools/build-system/distributions/mandriva/sflphone-client-kde.spec +++ /dev/null @@ -1,68 +0,0 @@ -##################################################### -# File Name: sflphone-client-kde.spec -# -# Purpose : -# -# Author: Julien Bonjean (julien@bonjean.info) -# -# Creation Date: 2009-05-27 -# Last Modified: 2009-05-27 17:23:32 -0400 -##################################################### - -Name: sflphone-client-kde -License: GNU General Public License (GPL) -Group: Productivity/Networking/System -Summary: KDE client for SFLphone -Version: VERSION -Release: mandriva -URL: http://www.sflphone.org/ -Vendor: Savoir-faire Linux -Packager: Julien Bonjean <julien.bonjean@savoirfairelinux.com> - -BuildRoot: %{_tmppath}/%{name}-%{version} -Source0: sflphone-client-kde.tar.gz -Requires: sflphone-common = %{version} -Requires: commoncpp2 -Requires: libkdepimlibs4 -Requires: libqt4-dbus-1 -Requires: libqt4-svg -Requires: libqt4-x11 -BuildRequires: cmake -BuildRequires: libcommoncpp-devel -BuildRequires: kdepimlibs4-devel -BuildRequires: libqt4-devel >= 4.3 -Conflicts: sflphone -Prefix: %{_prefix} - -%description -Provide a KDE client for SFLphone. - SFLphone is meant to be a robust enterprise-class desktop phone. - SFLphone is released under the GNU General Public License. - SFLphone is being developed by the global community, and maintained by - Savoir-faire Linux, a Montreal, Quebec, Canada-based Linux consulting company. - -Authors: --------- - Julien Bonjean <julien.bonjean@savoirfairelinux.com> - -%lang_package - -%prep -%setup -q - -%build -cmake . -DCMAKE_INSTALL_PREFIX=%{_prefix} -make - -%install -make DESTDIR=%{buildroot} install - -%clean -make clean - -%files -%defattr(-, root, root) -%{_prefix}/* -%doc AUTHORS COPYING README - -%changelog diff --git a/tools/build-system/distributions/mandriva/sflphone-common.spec b/tools/build-system/distributions/mandriva/sflphone-common.spec deleted file mode 100644 index 84f14d414a..0000000000 --- a/tools/build-system/distributions/mandriva/sflphone-common.spec +++ /dev/null @@ -1,91 +0,0 @@ -##################################################### -# File Name: sflphone-common.spec -# -# Purpose : -# -# Author: Julien Bonjean (julien@bonjean.info) -# -# Creation Date: 2009-05-27 -# Last Modified: 2009-05-27 17:23:32 -0400 -##################################################### - -Name: sflphone-common -License: GNU General Public License (GPL) -Group: System Environment/Daemons -Summary: SIP and IAX2 compatible softphone - Core -Version: VERSION -Release: mandriva -URL: http://www.sflphone.org/ -Vendor: Savoir-faire Linux -Packager: Julien Bonjean <julien.bonjean@savoirfairelinux.com> - -BuildRoot: %{_tmppath}/%{name}-%{version} -Source0: sflphone-common.tar.gz -BuildRequires: glibc-devel -BuildRequires: libccrtp-devel -BuildRequires: libsamplerate-devel -BuildRequires: libdbus-1-devel -BuildRequires: libexpat-devel -BuildRequires: libgsm-devel -BuildRequires: speex-devel -BuildRequires: libcppunit-devel -BuildRequires: libcommoncpp-devel -BuildRequires: libalsa2-devel -BuildRequires: libpulseaudio-devel -BuildRequires: libext2fs-devel -Requires: libsamplerate -Requires: libexpat1 -Requires: commoncpp2 -Requires: libgsm1 -Requires: libspeex -Requires: dbus-1 -Requires: libasound2 -Requires: libpulse0 -Requires: libccrtp1 -Conflicts: sflphone -Prefix: %{_prefix} - -%description -SFLphone is meant to be a robust enterprise-class desktop phone. - SFLphone is released under the GNU General Public License. - SFLphone is being developed by the global community, and maintained by - Savoir-faire Linux, a Montreal, Quebec, Canada-based Linux consulting company. - -Authors: --------- - Julien Bonjean <julien.bonjean@savoirfairelinux.com> - -%prep -%setup -q - -%build -cd libs/pjproject -./autogen.sh -./configure --prefix=%{_prefix} -make dep -make clean -make -cd - -./autogen.sh -./configure --prefix=%{_prefix} -make -j - -%install -cd libs/pjproject -make DESTDIR=%{buildroot} install -cd - -make DESTDIR=%{buildroot} install - -%clean -cd libs/pjproject -make clean -cd - -make clean - -%files -%defattr(-, root, root) -%{_prefix}/* -%exclude %{_prefix}/include -%doc AUTHORS COPYING README TODO - -%changelog diff --git a/tools/build-system/distributions/opensuse/build-packages-opensuse.sh b/tools/build-system/distributions/opensuse/build-packages-opensuse.sh deleted file mode 100755 index 8ea2639ad3..0000000000 --- a/tools/build-system/distributions/opensuse/build-packages-opensuse.sh +++ /dev/null @@ -1,94 +0,0 @@ -#!/bin/bash -##################################################### -# File Name: build-packages-opensuse.sh -# -# Purpose : -# -# Author: Julien Bonjean (julien@bonjean.info) -# -# Creation Date: 2009-05-27 -# Last Modified: 2009-09-11 11:22:27 -0400 -##################################################### - -. ../globals - -cd ${OPENSUSE_DIR} - -if [ "$?" -ne "0" ]; then - echo " !! Cannot cd to openSUSE directory" - exit -1 -fi - -echo "Do updates" -sudo /usr/bin/zypper -n update --auto-agree-with-licenses >/dev/null - -# create build directories -echo "Create directories" -mkdir -p ${BUILD_DIR}/BUILD -mkdir -p ${RPM_RESULT_DIR} -mkdir -p ${BUILD_DIR}/SOURCES -mkdir -p ${BUILD_DIR}/SPECS - -# create rpm macros -echo "Create RPM macros" -cat > ~/.rpmmacros << STOP -%packager Julien Bonjean (julien.bonjean@savoirfairelinux.com) -%distribution Savoir-faire Linux -%vendor Savoir-faire Linux - -%_signature gpg -%_gpg_name Julien Bonjean - -%_topdir ${BUILD_DIR} -%_builddir %{_topdir}/BUILD -%_rpmdir ${RPM_RESULT_DIR} -%_sourcedir %{_topdir}/SOURCES -%_specdir %{_topdir}/SPECS -%_srcrpmdir ${RPM_RESULT_DIR} -STOP - -# create packages -for PACKAGE in ${PACKAGES[@]} -do - echo "Prepare ${PACKAGE}" - - cd ${REPOSITORY_DIR} - - echo " -> create source archive" - mv ${PACKAGE} ${PACKAGE}-${VERSION} 2>/dev/null && \ - tar cf ${PACKAGE}.tar.gz ${PACKAGE}-${VERSION} >/dev/null && \ - mv ${PACKAGE}-${VERSION} ${PACKAGE} - - if [ "$?" -ne "0" ]; then - echo "!! Cannot create source archive" - exit -1 - fi - - echo " -> move archive to source directory" - mv ${PACKAGE}.tar.gz ${BUILD_DIR}/SOURCES - - if [ "$?" -ne "0" ]; then - echo "!! Cannot move archive" - exit -1 - fi - - cd ${PACKAGING_DIR} - - echo " -> update spec file" - sed "s/VERSION/${VERSION}/g" opensuse/${PACKAGE}.spec > ${BUILD_DIR}/SPECS/${PACKAGE}.spec - - if [ "$?" -ne "0" ]; then - echo "!! Cannot update spec file" - exit -1 - fi -done - -# launch build -echo "Launch build" -rpmbuild -ba ${BUILD_DIR}/SPECS/*.spec - -if [ "$?" -ne "0" ]; then - echo "!! Cannot build packages" - exit -1 -fi - diff --git a/tools/build-system/distributions/opensuse/sflphone-client-gnome.spec b/tools/build-system/distributions/opensuse/sflphone-client-gnome.spec deleted file mode 100644 index c6f20e7a0f..0000000000 --- a/tools/build-system/distributions/opensuse/sflphone-client-gnome.spec +++ /dev/null @@ -1,75 +0,0 @@ -##################################################### -# File Name: sflphone-client-gnome.spec -# -# Purpose : -# -# Author: Julien Bonjean (julien@bonjean.info) -# -# Creation Date: 2009-05-27 -# Last Modified: 2009-05-27 17:23:32 -0400 -##################################################### - -Name: sflphone-client-gnome -License: GNU General Public License (GPL) -Group: Productivity/Networking/System -Summary: GNOME client for SFLphone -Version: VERSION -Release: opensuse -URL: http://www.sflphone.org/ -Vendor: Savoir-faire Linux -Packager: Julien Bonjean <julien.bonjean@savoirfairelinux.com> - -BuildRoot: %{_tmppath}/%{name}-%{version} -Source0: sflphone-client-gnome.tar.gz -BuildRequires: liblog4c-devel -BuildRequires: gtk2-devel -BuildRequires: dbus-1-glib-devel -BuildRequires: libnotify-devel -BuildRequires: libsexy-devel -BuildRequires: evolution-data-server-devel -BuildRequires: check-devel -Requires: sflphone-common = %{version} -Requires: dbus-1-glib -Requires: gtk2 -Requires: glib2 -Requires: dbus-1-glib -Requires: libnotify -Requires: librsvg -Requires: liblog4c3 -Requires: libsexy -Conflicts: sflphone -Prefix: %{_prefix} - -%description -Provide a GNOME client for SFLphone. - SFLphone is meant to be a robust enterprise-class desktop phone. - SFLphone is released under the GNU General Public License. - SFLphone is being developed by the global community, and maintained by - Savoir-faire Linux, a Montreal, Quebec, Canada-based Linux consulting company. - -Authors: --------- - Julien Bonjean <julien.bonjean@savoirfairelinux.com> - -%lang_package - -%prep -%setup -q - -%build -./autogen.sh -./configure --prefix=%{_prefix} -make -j - -%install -make DESTDIR=%{buildroot} install - -%clean -make clean - -%files -%defattr(-, root, root) -%{_prefix}/* -%doc AUTHORS COPYING README - -%changelog diff --git a/tools/build-system/distributions/opensuse/sflphone-client-kde.spec b/tools/build-system/distributions/opensuse/sflphone-client-kde.spec deleted file mode 100644 index f558d9b0cd..0000000000 --- a/tools/build-system/distributions/opensuse/sflphone-client-kde.spec +++ /dev/null @@ -1,69 +0,0 @@ -##################################################### -# File Name: sflphone-client-kde.spec -# -# Purpose : -# -# Author: Julien Bonjean (julien@bonjean.info) -# -# Creation Date: 2009-05-27 -# Last Modified: 2009-05-27 17:23:32 -0400 -##################################################### - -Name: sflphone-client-kde -License: GNU General Public License (GPL) -Group: Productivity/Networking/System -Summary: KDE client for SFLphone -Version: VERSION -Release: opensuse -URL: http://www.sflphone.org/ -Vendor: Savoir-faire Linux -Packager: Julien Bonjean <julien.bonjean@savoirfairelinux.com> - -BuildRoot: %{_tmppath}/%{name}-%{version} -Source0: sflphone-client-kde.tar.gz -Requires: sflphone-common = %{version} -Requires: commoncpp2 -Requires: libkdepimlibs4 -Requires: libqt4-dbus-1 -Requires: libqt4-svg -Requires: libqt4-x11 -BuildRequires: cmake -BuildRequires: libkdepimlibs4-devel -BuildRequires: commoncpp2-devel -BuildRequires: libqt4-devel >= 4.3 -BuildRequires: gettext-tools -Conflicts: sflphone -Prefix: %{_prefix} - -%description -Provide a KDE client for SFLphone. - SFLphone is meant to be a robust enterprise-class desktop phone. - SFLphone is released under the GNU General Public License. - SFLphone is being developed by the global community, and maintained by - Savoir-faire Linux, a Montreal, Quebec, Canada-based Linux consulting company. - -Authors: --------- - Julien Bonjean <julien.bonjean@savoirfairelinux.com> - -%lang_package - -%prep -%setup -q - -%build -cmake . -DCMAKE_INSTALL_PREFIX=%{_prefix} -make - -%install -make DESTDIR=%{buildroot} install - -%clean -make clean - -%files -%defattr(-, root, root) -%{_prefix}/* -%doc AUTHORS COPYING README - -%changelog diff --git a/tools/build-system/distributions/opensuse/sflphone-common.spec b/tools/build-system/distributions/opensuse/sflphone-common.spec deleted file mode 100644 index 1929b7e222..0000000000 --- a/tools/build-system/distributions/opensuse/sflphone-common.spec +++ /dev/null @@ -1,90 +0,0 @@ -##################################################### -# File Name: sflphone-common.spec -# -# Purpose : -# -# Author: Julien Bonjean (julien@bonjean.info) -# -# Creation Date: 2009-05-27 -# Last Modified: 2009-05-27 17:23:32 -0400 -##################################################### - -Name: sflphone-common -License: GNU General Public License (GPL) -Group: System Environment/Daemons -Summary: SIP and IAX2 compatible softphone - Core -Version: VERSION -Release: opensuse -URL: http://www.sflphone.org/ -Vendor: Savoir-faire Linux -Packager: Julien Bonjean <julien.bonjean@savoirfairelinux.com> - -BuildRoot: %{_tmppath}/%{name}-%{version} -Source0: sflphone-common.tar.gz -BuildRequires: libpulse-devel -BuildRequires: commoncpp2-devel -BuildRequires: libccrtp-devel -BuildRequires: libsamplerate-devel -BuildRequires: dbus-1-devel -BuildRequires: libexpat-devel -BuildRequires: libgsm-devel -BuildRequires: speex-devel -BuildRequires: libcppunit-devel -BuildRequires: alsa-devel -BuildRequires: libuuid-devel -Requires: libsamplerate -Requires: libexpat1 -Requires: commoncpp2 -Requires: libgsm1 -Requires: libspeex -Requires: dbus-1 -Requires: libasound2 -Requires: libpulse0 -Requires: libccrtp1 -Conflicts: sflphone -Prefix: %{_prefix} - -%description -SFLphone is meant to be a robust enterprise-class desktop phone. - SFLphone is released under the GNU General Public License. - SFLphone is being developed by the global community, and maintained by - Savoir-faire Linux, a Montreal, Quebec, Canada-based Linux consulting company. - -Authors: --------- - Julien Bonjean <julien.bonjean@savoirfairelinux.com> - -%prep -%setup -q - -%build -cd libs/pjproject -./autogen.sh -./configure --prefix=%{_prefix} -make dep -make clean -make -cd - -./autogen.sh -./configure --prefix=%{_prefix} -make -j - -%install -cd libs/pjproject -make DESTDIR=%{buildroot} install -cd - -make DESTDIR=%{buildroot} install - -%clean -cd libs/pjproject -make clean -cd - -make clean - -%files -%defattr(-, root, root) -%{_prefix}/* -%exclude %{_prefix}/include -%doc AUTHORS COPYING README TODO - -%changelog diff --git a/tools/build-system/distributions/ubuntu/build-packages-ubuntu.sh b/tools/build-system/distributions/ubuntu/build-packages-ubuntu.sh deleted file mode 100755 index 8dd8a30ed5..0000000000 --- a/tools/build-system/distributions/ubuntu/build-packages-ubuntu.sh +++ /dev/null @@ -1,109 +0,0 @@ -#!/bin/bash -# -# @author: Yun Liu <yun.liu@savoirfairelinux.com>, Julien Bonjean <julien.bonjean@savoirfairelinux.com> -# -# Refer to http://www.sflphone.org for futher information -# - -. ../globals - -cd ${UBUNTU_DIR} - -if [ "$?" -ne "0" ]; then - echo " !! Cannot cd to Ubuntu directory" - exit -1 -fi - -PACKAGE_SYSVER="0ubuntu1" -FULL_VERSION="${VERSION}-${PACKAGE_SYSVER}" - -######################### -# BEGIN -######################### - -DIST="${OS_VERSION}" -if [ ${RELEASE_MODE} ]; then - if [ "${RELEASE_MODE}" != "release" ]; then - DIST="${DIST}-testing" - fi -else - DIST="${DIST}-daily" -fi - -echo "Do updates and dependencies build" -sudo apt-get update >/dev/null -sudo apt-get upgrade -y >/dev/null -sudo apt-get build-dep sflphone-common >/dev/null -sudo apt-get build-dep sflphone-client-gnome >/dev/null -sudo apt-get build-dep sflphone-client-kde >/dev/null - -for PACKAGE in ${PACKAGES[@]} -do - echo "Process ${PACKAGE}" - - echo " -> prepare debian directories" - mv ${UBUNTU_DIR}/debian-${PACKAGE} ${REPOSITORY_DIR}/${PACKAGE}/debian - - # generate the changelog - echo " -> generate changelog" - sed -i 's/SYSTEM/'${OS_VERSION}'/g' ${REPOSITORY_DIR}/${PACKAGE}/debian/changelog && \ - sed -i 's/SYSVER/'${PACKAGE_SYSVER}'/g' ${REPOSITORY_DIR}/${PACKAGE}/debian/changelog - - if [ "$?" -ne "0" ]; then - echo "!! Cannot generate changelog" - exit -1 - fi - - # copy the appropriate control file based on architecture - echo " -> generate control file" - if [ ! -e ${REPOSITORY_DIR}/${PACKAGE}/debian/control.$OS_VERSION ];then - echo " -> no control file, skipping" - continue - fi - cp ${REPOSITORY_DIR}/${PACKAGE}/debian/control.$OS_VERSION ${REPOSITORY_DIR}/${PACKAGE}/debian/control && \ - sed -i "s/VERSION/${FULL_VERSION}/g" ${REPOSITORY_DIR}/${PACKAGE}/debian/control - - if [ "$?" -ne "0" ]; then - echo "!! Cannot generate control file" - exit -1 - fi - - # provide prerequisite directories used by debuild - echo " -> prepare directories" - cp -r ${REPOSITORY_DIR}/${PACKAGE} ${REPOSITORY_DIR}/${PACKAGE}-${FULL_VERSION}.orig && \ - mv ${REPOSITORY_DIR}/${PACKAGE} ${REPOSITORY_DIR}/${PACKAGE}-${FULL_VERSION} - - # build package sflphone-common - cd ${REPOSITORY_DIR}/${PACKAGE}-${FULL_VERSION}/debian && \ - debuild -us -uc - - if [ "$?" -ne "0" ]; then - echo "!! Cannot generate package ${PACKAGE}" - exit -1 - fi -done - -# move to dist -echo "Deploy files in dist directories" -BINARY_DIR="" -if [ "${ARCH_FLAG}" -eq "32" ]; then - BINARY_DIR="binary-i386" -else - BINARY_DIR="binary-amd64" -fi - -mkdir -p ${DEB_RESULT_DIR}/${DIST}/universe/source -mkdir -p ${DEB_RESULT_DIR}/${DIST}/universe/${BINARY_DIR} - -mv ${REPOSITORY_DIR}/sflphone*.deb ${DEB_RESULT_DIR}/${DIST}/universe/${BINARY_DIR} && \ -mv ${REPOSITORY_DIR}/sflphone*.dsc ${DEB_RESULT_DIR}/${DIST}/universe/source/ && \ -mv ${REPOSITORY_DIR}/sflphone*.build ${DEB_RESULT_DIR}/${DIST}/universe/source/ && \ -mv ${REPOSITORY_DIR}/sflphone*.changes ${DEB_RESULT_DIR}/${DIST}/universe/source/ && \ -mv ${REPOSITORY_DIR}/sflphone*.orig.tar.gz ${DEB_RESULT_DIR}/${DIST}/universe/source/ && \ -mv ${REPOSITORY_DIR}/sflphone*.diff.gz ${DEB_RESULT_DIR}/${DIST}/universe/source/ - -if [ "$?" -ne "0" ]; then - echo "!! Cannot copy dist files" - exit -1 -fi - diff --git a/tools/build-system/distributions/ubuntu/debian-sflphone-client-gnome/changelog b/tools/build-system/distributions/ubuntu/debian-sflphone-client-gnome/changelog deleted file mode 100644 index 003c33d69c..0000000000 --- a/tools/build-system/distributions/ubuntu/debian-sflphone-client-gnome/changelog +++ /dev/null @@ -1,1284 +0,0 @@ -sflphone-client-gnome (0.9.6-SYSVER) SYSTEM; urgency=low - - ** 0.9.6 ** - - * Documentation on echo test - * [redmine_down] codec names not displayed in total - * [redmine_down] crash when hanging up a dialing call because tries to - add it to history whereas no starttime - * [#1927] alternate every time screen changed to call history - * [#1886] clean code - * [#1886] debug messages when loading history removed - * [redmine_down] sflphone-kde icons - * [#1855] Update language files - * [#1502] Update version number - * [redmine_down] setHistory at close - * [#redmine_down] Handle PJ_DECLINE_SC as failure - * [#1923] Fix segmentation fault when adding a new account - * [#1923] Check on iterator before setting the config - * [#1904] Added mnemonic to tabs in sflphone-client-gnome. - * [#1905] The daemon was not sending the currentSelectedCodec signal - on dbus when answering a call. - * [#1922] Default values set to all account details - * [#1886] Spinbox reg expire enables apply, and address book is not - visible when disabled - * [#1905] Bug fix for segmentation fault caused by an empty string, - * [#1910] Warnings in test directory - * [#1919] Error fixed - * [#1855] Update russian translation - Hussein Abdallah - * [#1910] Remove files - * [#1919] fixed - * [#1777] Code indentation - * [#1918] fixed - * [#1917] fixed - * [#1910] Remove warnings compilation in src - * [#1886] removed AccountListModel in configskeleton - * [#1914] - * [#1911] check previous and new port - * [#1910] Remove compilation warnings in src/dbus and src/history - * [#1910] Remove compilation warnings in src/audio - * [1855] Update german translation - Sven Werlen - * [#1909] removed - * [#1906] Done - * [#1904] The registration expire value is now configurable from the - * Cleaned up debug messages. - * [#1886] separated initCallItem in two functions - * [#1886] reversed error in commit - * [#1886] clean debug - * [#1886] changed Name of classes and files - * [#1886] clean - * [#1870] In call_state_cb (dbus.c:126), _time_stop was overridden by - the actual time. - * [#1884] Added some new gpg flags to prevent tty warnings - * [#1886] Clean audio config dialog - * [#1886] No more compile warnings. + 1 comm - * [#1872] Check if the user input is smaller than PJ_MAX_HOSTNAME. - * [#1886] - * [#1785] Fixed build when no new commit - * [#1852] If chosen by the user, the hostname can now be solved and - used - * [#1871] * and # inverted back - * [#1869] Conditional compilation that checks if - * [#1309] removed test in main - * [#1425] Put actions in SFLPhone window class instead of ui view, - made a separate toolbar for screens. - - -- SFLphone Automatic Build System <team@sflphone.org> Mon, 27 Jul 2009 09:53:19 -0400 - -sflphone-client-gnome (0.9.6~rc2-SYSVER) SYSTEM; urgency=low - - ** 0.9.6~rc2 ** - - * [#1755] Remove generated file - * [#1753] restore ilbc ... - * [#1866] Methods getSipPort and setSipPort now have an effect on the - * [#1753] make pjsip compile without ilbc. Use ./autogen.sh --disable- - ilbc-codec - * [#1855] Fix error in russian translation - * [#1805] Remove the old flawed signal mechanism which was failing in - * [#1855] Refresh translation - * Spanish translation finished + po README files updated + echo's in - copy-in-clients - * [#1850] Yun made the chinese HK-CN translation - * [#1848] Fix transfer interface bug - * [#1862] At install, kde client installs only french translation file - * [#1841] A new fallback mechanism was added to the internal resolver - in PJSIP. - * Started AccountList model/view - * [#1855] Remove po subdir in Makefile.am - * [#1855] Fix typo error in sflphone-client-gnome - * [#1855] Do not generate Makefile in sflphone-common/po - * [#1855] Copy translation files into both clients dirs - * [#1855] Remove po dir from sflphone-common - * Comments added - * [#1860] mailbox->voicemail... - * make scripts executable - * [#1855] French translation - * [#1855] Chinese zh_HK partially filled... - * [#1859] An unnamed pipe monitored by poll() was added. When we want - to - * [#1855] Sven completed the first part of the german translation - * [#1855] Cantonese manually filled for already translated, almost - equal strings - * [#1855] Merge russian translation - * [#1855] Spanish manually filled for already translated, almost equal - strings - * [#1855] Update german translation in ./lang/de - * [#1858] This problem was fixed by removing a useless line in - * [#1855] merged existing translations in lang/ sflphone.po's - * [#1842] [#1843] An attempt at improving the expected behaviour that - can't - * [#1855] added po folder in gnome client and scripts for copying from - common lang folder to clients - * [#1853] Edit before call does nothing on call history - * Put most language entries possible in common. From 300 to 250 - entries. Stays underscores problem. Scripts for copy in clients. - * commit to merge master - * [#1825] Changed "Bad authentification" to "Authentication Failed". - * common po files - * [#1753] Remove ILBC from pjproject - - -- SFLphone Automatic Build System <team@sflphone.org> Fri, 17 Jul 2009 19:12:58 -0400 - -sflphone-client-gnome (0.9.6~rc1-SYSVER) SYSTEM; urgency=low - - ** 0.9.6~rc1 ** - - * Update some version number - * [#1792] Creates .sflphone directory with permission 600. Also, - "chmod 600" after - * [#1810] GUI is now notified that the call failed. Also, a segfault - was - * [#1816] Address book search disabled when disabled address book and - enabled it back plus button stays triggered - * codeclistmodel + asynchronous loading of address book + - enable/disable address book - * [#1810] Now checking SDP answer after 200 OK. Still need to - implement full - * [#1794] Can't use the interface during a call - * Updated translation files - * Russian translation integrated - * Codec list model/view started. - * [#1807] Add configure.ac in pjproject-1.0.3 - * [#1787] closeRtpSession added in some places where it should have - been - * Use Item class for contacts and accounts - * Comments + clean code - * [#1794] Improved debug messages - * [#1805] Replaced the old and unreliable mecanism that was was - waiting for - * [#1794] Can't use the interface during a call - * [#1787] For those cases where no registered SIP account is - configured - * [#1797] Make pjsip compile - * [#1787] Minor changes. Removed useless commented line. Changed order - of - * [#1777] Code indentation - * [#1797] Update package generation with new pjsip version - * [#1798] Does not hang up when the call is building up - * [#1797] Update .gitignore with new pjsip version - * [#1797] Remove generated files from repo - * [#1797] Main build system now uses pjproject-1.0.3 - * [#1797] Add pjproject-1.0.3 - * [#1797] Remove pjproject-1.0.2 - * [#1796] Computing time optimization (samplerate conversion) - * [#1787] _audiortp->start() moved away from offhold(), - SIPCallAnswered() - * [#1312] Added new states for calls initialized by other clients - * [#1795] Crashes when adding a new account, checking it and applying - * [#1782] Missing icons - * [#1793] KDE client compilation problem - * Fake ringtone files can no longer be set. - * indentation - * [#1312] Able to fetch to differentiate incoming/ringing call state - * [#1784] Use DESTDIR variable in po Makefile - fix language file - installation - * [#1785] Fixed typo - * [#1785] Fixed changelog update - * [#1759] ./autogen.sh --prefix=/usr --with-debug to use optimization - level 0 - * [#1773] Changed snapshot naming convention - * [#1773] Removed gpg agent use, added repository cache cleaning - * [#1759] Use optimization level 0 for repository, 2 for packages - * [#1777] Code indentation/formatting - * Translated new features in french - * [#1785] Added missing changelog entry - * [#1781] Window title is SFLPhone - * [#1777] Add code indentation/formatting in the buil system - * [#1774] Can't set voicemail number in KDE account creation wizard - * [#1775] Can't modify account information for account created with - the wizard - * [#1771] Add a "Default" button in context menu to disable chosen - prior account - * [#1705] - * [#1224] Remove generated file from the repo - * [#1224] Remove generated file from the repo - * [#1762] distclean target should remove kconfig generated files - (settings.h, settings.cpp). Rename them? - * [#1761] clear history button should really clear history - * Dialpad works. - * Implemented Dialpad widget instead of building it in main view. - * Removed last occurence of the old config dialog, that made the build - crash. - * [#1755] Do not consider G722 as a dynamic payload elsewhere than in - RTP layer - * [#1753] Remove ilbc Makefile generation - * [#1756] Implement a kde configuration dialog with kconfig xt and - kconfigdialog class - * [#1755] fix audiocodec folder parsing problem - * [#1450] Reinit timestamp comparison in RTP, create session in - newOutgoingCall - * [#1753] Remove milenage third party code from pjsip - * New Config Dialog integrated in GUI.(without codecs) - * [#1753] Remove ILBC codec - * kconfig started, tr2i18n -> i18n, icons folder, accountList changed - * [#1705] Fixed Audio RTP thread creation/start - * [#1714] Fix codec negociation result handling - * [#1678] Fix audiortp payload setting - * [#1678] Put bac putData method in rtp - * [#1669] gtk_file_chooser_get_filename() support UTF-8 by default - * [#1735] Add conditions to sdp update call if call declined - * [#1737] substr of recordings destination folder to remove "file://" - should be done in client rather than in daemon - * [#1731] Enlarge audio stream buffer size - * [#1714] Missing true - * [#1317] Fixed Mandriva timeout - * [#1317] Changed tag convention - * [#1317] Cleaned git-dch - - -- SFLphone Automatic Build System <team@sflphone.org> Fri, 10 Jul 2009 15:50:26 -0400 - -sflphone-client-gnome (0.9.6~beta-SYSVER) SYSTEM; urgency=low - - ** 0.9.6~beta ** - - * spec files for mandriva and opensuse updated with buildrequires - libqt4-dev >=4.3 - * [#1700] Cannot build on ubuntu 8.10 and a few other distribs - * [#1502] Update version number where applicable - * [#1642] Update client icons - * [#1450] Clean up useless debug and comments in sipvoiplink and - audiortp - * [#1450] Remove Semaphore object in AudioRtp thread deletion - * [#1450] Audio RTP init now synchronized with Sip/SDP - * [#1693] kde client crashes when changing codecs order/activation - * [#1450] Deep refactoring of audiortp - * [#1450] setRtpSessionRemoteIp - * [#1689] getCallList at start - * [#1224] Change path in package files - * [#1450] Audio RTP initialized only once, payload and remote ip set - at runtime - * [#1450] Add setRtpSessionMedia and setRtpSessionRemoteIp address - * [#1642] Make GNOME GUI fresher and younger ;) - * [#1686] Status bar displaying used account - * added sflphone-kde icon so that it compiles - * [#1659] Ending a call causes the daemon to crash - * corrected introspection XMLs, po files... - * [#1211] g722 media descriptor in codecDescriptor - * [#1310] Install sflphoned in $(prefix)/lib/sflphone - * [#1502] Do not install test binaries and dbus utilitaries - * [#1224] hack for pjsip build system! - * [#1224] Remove pjsip binaries from repo - * [#1224] Upgrade to pjsip 1.0.2 - * [#1658] About SFLphone (bugs) - * [#1658] About SFLphone - * [#1660] Displaying all dialed numbers in a call - * Tested status bar. - * [#790] Optimize pulse audio streams parameters - * [#1678] Some usefull debug messages for mutex/semaphore deadlock - problem - * [#1669] Add/remove some usefull/unusefull debug - * [#1665] Fix latency related to pulse audio stream openning/closing - * [#1457] Make the menus and panels accessible in french - * [#1457] Improve broken keyboard accessibility in menus and conf - panels - * [#961] Instanciate only once the searchbar icons - * [#961] Restore transfer fonction - * [#961] Filter on the history type OK - * [#961] Fix compilation problems on hardy/intrepid - * [#1157] Commit missing files - * [#790] Reduce number of start/stop streams call on pulse audio - * [#1639] kde client crashes when no account registered - * [#1620] Fix the searchbar - * [#1620] Get back caltree as it was during gtkcritical area - * [#1620] Add history filter reinit function - * [#1335] Add a missing label in address book preferences - * [#1561] Update russian translation - Hussein Abdallah - * [#1605] Fix edit menu french translation - * [#961] Enable to search in the history according to the call type - * [#1449] Searchbar does not work anymore - * [#961] Add popup menu on the entry primary icon for history - * [#1317] Fixed KDE client package dependency - * [#936] speex 32 khz integration completed - * [#936] Use 320 frame size - * [#936] Test using a frame size at 320 smpls - * [#1214] Enable / Disable history - * [#1607] Fix compilation problem for ubuntu 8.10 (libsexy) - * [#1313] Implement processDataEncode processDataDecode in audiortp - * [#1613] codec list order can't be set - * Better handling of localisation + added languages + corrected - warnings + begginning of new config dialog with kconfig + 14px - account leds - * [#1214] Save and load history according to the limit timestamp + - unit tests - * [1609] Fix call number copy/paste feature - * [1607] Restore clear action icon in searchbar - * [#936] Try to decode using 1280 samples - * [#936] Add some debug - * [#936] Add .cpp file - * [#936] Oops Forgot speex 32 khz - * [#1214] Add configuration panel for history + D-Bus calls - * [#1313] Test rtp thread function, frame size, nbbytes, resampling - * [#790] Flush audio data before closing audio streams - * [#1214] History displays local time - * [#1214] Skip empty field on display - * [#1214] Associate an account to an history entry - * [#1342] Get addressbook options sensitive/non-sensitive - * [#1211] Clean up and comments - * [#1211] Get back to 20 ms framesize - * [#1211] Use sendImmediate instead of putData in RTP - * [#1211] Fix nb byte available in RTP - * [#1211] Clear condition on maxNbSamples in RTP - * [#1211] Fix max byte available in RTP session - * [#1211] G722: Use 160 samples per frame instead of 320 - * [#1211] Test using a dynamic payload - * [#1211] Test using a dynamic payload type - * [#1211] Rename size variable (nb_samples, nb_bytes) - * [#1211] Test g722 ip-to-ip sending twice the data lenth - * [#1211] Test g722 ip-to-ip - * [#1214] Do not select an history item by default at startup - * [#1214] Remove some compilation warnings - * [#1214] Handle empty field - remove g_print - * [#1214] Add each history item only once - * [#1214] Handle call timestamps properlier - * [#1214] Do not need timestamp files anymore - * [#1214] Use the saved date for history entry - * Clean up - * [#1214] Client doesn't crash if the D-Bus call fails - * [#1214] Client is able to save its history - still some glitches - * [#1211] Forgot 16000 for g722 - * [#1211] G722 initialization - * [#1214] Save name/number, successfully load the history if no fields - are empty - * [#1499] Fixed destination directory bug - * [#1214] Restore all the functionalities; peer name/number way more - easy to handle !! - * [#1214] Add callable_object instead of call_t, refactoring - * [#1211] Test with polycom soundstation 16000 - * [#1211] Remove C like inline function in g722 codec - * [#1342] Finalize gnome client preference window formating - * [#1214] Retrieve the history when the gnome client startsup - * [#1306] Implement localization for KDE client - * [#1593] enable accounts apply button when account checked/unchecked - * [#1214] Implement the dbus calls on server side - * [#1214] Add serialized/unserialized functions to pass data on DBUS - * [#1342] Formating gnome client configuration windows - * [#1214] Save sucessfully a map of history items - * [#1499] Removed multiple jobs compilation for KDE client (2) - * [#1214] Load history from file into memory, add unit tests - * [#1534] Throws a length_error exception in case URL exceeds - std::string max_size - * [#1499] Removed multiple jobs compilation for KDE client - * [#1565] make account leds smaller - * [1430] Fix dbus debug - * [#1562] crashes when trying to change item of a call of state "OVER" - * [#1116] Fix compilation bug - * [#1317] Added mandriva and opensuse-11 64 bits - * [#1108] Add messges in main window concerning transfer success - failure - * [#1116] Fix compilation problems - * [#1211] g722 Makefile - * [#1108] Client side transferFailed/trasferSucceded signals handling - * [#1211] G722 mostly completed, - * [#1555] make bigger toolbar (24x24) - * [#1551] remove default mailbox number in wizard and disable mailbox - button when first account doesn't have mailbox number - * [#1342] Re-add sflphone manpages - * [#1116] Fix compilation on non-jaunty distros - * [#1317] Fixed opensuse startup sleep - * [#1108] Add a signal in the client to notify successful or failed - transfer - * [#1108] Dbus signals concerning call transfer success/failure - * [#1317] Added opensuse to automatic build system - * [#1223] Fix manpages bug - * [#1060] german translation glitch - * Clean up some gnome client warnings - * [#1547] replace ugly account leds by beautiful icons - * [#1548] add close button that hides windowand just hide on clicking - the cross - * [#1549] put introspec XMLs in the client's source - * [#1312] Implement getCallList D-BUS method - * [#1116] Clear text in history and contacts - * [#1499] KDE integration - * [#1469] Modify header linkers in dbus-c++'s Makefile.am's - * [#1469] Remove examples folder from dbus-c++ - * [#1214] History integration in build system; unit test squeleton - * [#1317] Cleaning - * [#1469] Remove configure stuff in dbus-c++ - * [#1469] Add unofficial mainline dbus-c++ - * [#1469] Remove dbus-c++ from freedesktop - * [#1430] Bring account changed signal/callback back to normal - * [#1060] Update german translation - Sven Werlen - * [#1430] Add marshaller one string define - * [#1430] Send account change signal broadcast using account id - * [#1430] Remove condition on setRegistrationState, cause stun to - crash - * [#1317] Centralized version handling - * [#1317] Fixed version number on sfl-git-dch - * [#1317] Refactoring for new distributions - * [#1215] Fix account order at startup if latency - * [#1088] Restore sip dns srv - * [#1214] Add squeleton for history manager - * [#1430] Add accout id to accout changed method - * [#1430] No connectionStatusNotification (account changed) if no - changes - * [#1538] Add COPYING file - * [#1430] Add audio rtp thread tests - * [#1317] Changed version detection - * [#1538] Document license in libs/stund - * [#1317] Added version files - * [#1538] Apply François patches - debian packages - * [#1317] Updated spec files - * add files - * [#1538] Apply François patches - debian packages - * [#1535] Change program file structure (directory src...) - * [#1317] Updated build system scripts - * [#1317] Cleaning - * [#1317] Copied introspect files to gnome client - * [#1317] Added opensuse to build-system : first-shot - * [#1317] Remove spec files from configure - * [#1317] Added missing prefix - * removed debug for daemon account fix - * [#1430] Add a connection reference which most likely belong to - libdbus - * [#1430] Use shared connection instead of private - * make daemon find the account, added userMatch - * Clean code, add comments... - * [#1317] Fixed packaging rules - * [#1317] Updated autogen - * Updated autogen.sh for pjsip - * [#1526] Set accounts order - * [#1317] Fixed pjsip lib dirs - * [#1317] Updated debian packaging for new pjsip configuration script - * [#1317] Switch to autogenerated guess and sub files - * [#1317] Updated pjsip inclusion in build system - * [#1317] Replaced pjsip guess and sub files - * [#1317] Fixed compilation issues on opensuse 11 - * [#1505] account list seem to crash the application when clicking - Apply very fast... - * [#1456] Add a flag to be replaced in the control files - * [#1456] Added version dependancy handling - * put account alias in AccountWidgetItem rather than in the item with - " " before. - * [#1034] The KDE client should start sflphoned if it is not started - * [#1500] Handle options for notifications and display on incoming - call. - * [#1443] Client should not crash when receive an unexpected - stateChanged signal - * [#1403] Do not stop the notification anymore - * [#1456] Added version dependancy handling - * [#1426] Daemon crashes when get alsa plugin - * [#1422] Improved error messages - * commit for merge - * [#1424] Change logo in tray icon and put a different one when - incoming call - * [#1425] first part done, window title... - * [#1413] add manpages creating and installing in build system - * [#1417] The client should start the account creation wizard if - started for the first time (if config file doesn't exist) - * [#1421] Make volume bars horizontal when dialpad is hidden. - * Changed main window title and fixed a mistake in sflphone_const.h - * [#1412] make debian package building work - * changelog changed. - * Changed addAccount method in gnome client. - * Debian and man folders added. - * [#1388] Change project name from sflphone_kde to sflphone-client-kde - * Better handle of kabc check. - * [#1351] Automatic generation of dbus interfaces in makefile - generated by cmake - * [#1307] Implement "edit before call" in history and address book. - * [#1344] change action_call label in call history from "call" to - "call back". - * [#1308] Implement Hook feature in kde client - * Improved build system. - * #1219 : Add address book configuration page - * Better handling of registration to the daemon. - * #1039 : Add tray icon in kde. - * Issue no 1216 : Double click on item in history or address book - causes call. - * display peer name in call list and call history when called from - address book. - * Address book functionnal with photo displayed. - * Help menu kde available but actions disappeared. All fonctions in - view. - * Address book functionnal but ugly and making its own sort in the - complete address book. - * Account choice on right click, clean out includes, page address - book, fixed bugs... - * Wizard, double click, context menu... - * Removed sflphone_kde.kdevelop.filelist - * Added account creation wizard and translated interface in english. - * Transfer functionnal but ugly. - * transfer not functionnal - * Bug fixed : unholding (UNHOLD_CURRENT, UNHOLD_RECORD) - * Commit functional for push. With install.sh - * Before merge. - * Problem with enable accounts. Account display increased. - * Functional with codec order working , playDTMF. - * Commit functional. - * sflphone_kde/build added in .gitignore. - * complete commit for checkout previous. - * Commit before checkout previous version to check the display - bug(little font everywhere...) - * Functionnal client. Rest : history icons, config icons and - functionalities - * commit before merge asavard for isRecording. - * Call and Automate fusion done and seems to work. - * Commiting before putting Automate class in Call class. - * Functionnal main window without recording, history, voicemail, kio - widgets. - * client kde avec kdevelop. - * Config Dialog almost finished. - * Base of QT client - - -- SFLphone Automatic Build System <team@sflphone.org> Tue, 23 Jun 2009 11:13:42 -0400 - -sflphone-client-gnome (0.9.5-SYSVER) SYSTEM; urgency=low - - ** 0.9.5 release ** - - * [#1060] FIx bug in chinese translation - * [#1313] git add rtpTest.cpp rtpTest.h - * [#1313] Add init/close rtp tests - * [#1313] Basic instanciation of the rtp layer - * [#1449] Gtk-Critical concerning history filters and new calls - * [#1400] Make the match with the hostname instead of username - * [#1324] Change status bar label for "Using %s (%s)" - * [#1403] Icon size: 60x60 px - * [#1403] Do not remove notification, improve icon quality - * [#1403] Add smaller icon for gnome notifications - * [#1403] Prevent crash when hangup && no notification - * [#1403] Remove all actions on notifications; code refactoring - * [#1451] Use stun.sflphone.org as default STUN server - * [#1060] New po files - need to be translated - * [#1060] Update french translation - Rebuild template file - * [#1456] Add a flag to be replaced in the control files - * [#1454] Make cppunit optional; remove from build deps in control - files - * [#1401] Add libexpat1-dev dependency in control files - * [#1448] Take off these ugly debug messages - * [#1448] fixed getTelephoneTone and getTelephoneFile() called - repeatedly - * [#1406] add liblog4c-dev in build-depends - * [#1409] Restore .desktop icon - - -- SFLphone Automatic Build System <team@sflphone.org> Mon, 25 May 2009 11:34:48 -0400 - -sflphone-client-gnome (0.9.5-SYSVER~rc2) SYSTEM; urgency=low - - ** 0.9.5 rc2 ** - - * [#1422] Improved error message - * [#1402] Fix pjsip build - * [#1404] Clear GTK-Critical Bug at client startup - * [#1422] Added automatic VM shutdown when building on more than one - VM - * [#1422] Fixed some issues with new changelog generation script - * [#1422] Moved distribution update to specific file - * [#1422] Dropped git-dch, replace by home made implementation - * [#1402] Fix pjsip build - * [#1404] Clear GTK-Critical Bug at client startup - * Changes for name based dbus connection - * Clean changelogs - * [#1343] Gnome: Implement a callback system to handle focus on - different widgets - * Debus Session - * Refactoring Python code, PEP8 - * [#1430] Get back dbus_g_proxy_new_for_name - * [#1430] Get back DBUS_BUS_SESSION type - * [#1430] Dbus fixed owner message binding - * Second test with DBUS owner - * [#1404] Gnome -> Preferences -> Hooks - * [#1404] Gnome -> Preferences -> Recordings - * [#1404] Call History - * [#1404] Gnome -> Preferences -> Address Book - * [#1404] IF the first notification option disable the second - notification - * Dbus with fixed owner does not automatically start the deamon - * Add codec debug tests in pysflphone - * [#1407] Some print info - * [#1407] Add a scenario to pick_up action - * Test client dbus connection to a fixed owner - * Add python dbus test suite - * [#1161] Modified version handling in build system - * [#1314] Test pulse audio and audio streams connect and disconnect - * [#1402] Add info message after configure - * [#1402] Build the daemon with the local pjsip library (vs the - installed one) - * [#1009] Fix Codec Sampling Rate set to zeros - * [#1314] Add mutex to pulse layer audio streams - * [#1314] Refactoring pulseaudio stream to test connect disconnect - * [#1314] Refactoring of pulselayer to test conect/disconnect - * Add debug messages in debus calls concerning account - * [#1314] Add some return values to audio init functions - * [#1406] add liblog4c-dev in build-depends - * [#1409] Restore .desktop icon - * Bug #1405: Fix strings as requested. - * Bug #1404: Fix strings in preferences panel. - - -- SFLphone Automatic Build System <team@sflphone.org> Tue, 19 May 2009 12:08:18 -0400 - -sflphone-client-gnome (0.9.5-0ubuntu1~rc1) SYSTEM; urgency=low - - [ SFLphone Project ] - * [#1262] Updated changelogs for version 0.9.5-0ubuntu1 Snapshot 2009- - 05-05 - - [ Emmanuel Milou ] - * Add some python CLI client code; not really functional - * [#1108] Fix peerHungup method for IP to IP call - - [ Alexandre Savard ] - * [#1108] Correct setting of SIP contact for direct IP call - * [#1108] SIP user agent handles incoming REFER - - [ Emmanuel Milou ] - * Remove website from repository - * Update translation - - [ Alexandre Savard ] - * Sflphone icon's tooltip changed for "configured" instead of - "registered" - - [ Emmanuel Milou ] - * Update translation - - [ Sflphone Project ] - - -- Sflphone Project <sflphone@mtl.savoirfairelinux.net> Tue, 05 May 2009 19:16:13 -0400 - -sflphone-client-gnome (0.9.5-0ubuntu1~beta) SYSTEM; urgency=low - - [ Julien Bonjean ] - * Updated Eclipse stuff - * Improved addressbook config window - * Added sflphone Eclipse stuff - * Implemented addressbook list server side - * Moved dbus stuff in dbus directory - * Updated addressbook configuration - - [ Emmanuel Milou ] - * Remove unuseful installation scripts. Use apt-get build-dep sflphone - instead - * fix bug #1090 - - [ Alexandre Savard ] - * defining speex 16khz - - [ Emmanuel Milou ] - * Remove unuseful file from build system - * Start dns srv resolver - - [ Alexandre Savard ] - * Basic ogg/vorbis initialization - - [ Emmanuel Milou ] - * Handle incoming IP-to-IP invite correctly - - [ Alexandre Savard ] - * speex wideband 16000 - - [ Emmanuel Milou ] - * Better handling of incoming IP to IP call - * DNS SRV resolution functional - * Implement IAX2 incoming URL - * Allow user to make IP call without any accounts configured - * Add a contextual menu to edit a number from the contacts tab - * Add comments, tooltip and new button to the contextual menu - * add delete event, migrate to GTK 2.16 for sexy icons - * Resolve ticket #1118 - * Update suse spec file - * Add phone number cleanup functions, unit tests and panel - configuration - * Add pertinent test that fails - * fix dependencies for suse package - * Add contextual edit menu in history - #1120 - - [ Alexandre Savard ] - * Temporary comit: make speex wideband (16 khz) - * Temporary: shared object for speex narrow band - * Temporary: speex narrowband and wideband coexist - - [ Julien Bonjean ] - * Fixed bug when no book selected - * Fixed addressbook related compilation warnings - * Fixed GTK client remaining compilation warnings - * Fixed segfault when book removed since last sflphone run - * Fixed bug when book is unreachable (ldap error) - - [ Alexandre Savard ] - * Fix codec list in audio config window - * Active/inactive speex codec by payload - - [ Julien Bonjean ] - * Updated gitignore - * Added some comments - - [ Emmanuel Milou ] - * Add callto: handler script for browsers and al. - * Integrate test compilation in the daemon build-system - - [ Julien Bonjean ] - * Fixed g_object_unref warning for pixbuf - * Cleaned too verbose output - * Fixed toolbar update warning - * Added support for asynchornous books open (first shot) - - [ Emmanuel Milou ] - * Add a DBus call to fetch the call details from a call ID - Ticket - #928 - - [ Julien Bonjean ] - * Improved async open books - * Fixed bug #1139 - - [ Emmanuel Milou ] - * Add a way to save account order - * commit missing files - - [ Julien Bonjean ] - * Introduced log4c (ticket #1162) - - [ Emmanuel Milou ] - * Load/save account order functionnal - ticket #813 - - [ Alexandre Savard ] - * Add CELT codec (#1143) - * Make celt frame size 256 (*1143) - - [ Julien Bonjean ] - * Switched everything to log4c (ticket #1162) - * Updated eclipse settings - - [ Emmanuel Milou ] - * Restore adding account - ticket #1172 - * Add liblog4c dependecy - ticket #1179 - - [ Alexandre Savard ] - * Double maxAvailByte for frame size in rtp (#1143) - - [ Emmanuel Milou ] - * Add User-Agent SIP header - Ticket #1173 - - [ Julien Bonjean ] - * Fixed autoresize issue (#708) - - [ Emmanuel Milou ] - * Remove libcppuint dependency for the debian packages - * Look for libsexy only if gtk version < 2.16 - Ticket #1116 - * Remove libsexy dependency for jaunty. ticket #1116 - - [ Julien Bonjean ] - * Introduced unit tests (#1146) - * Updated gitignore - * Fixed Makefile (#1146) - - [ Emmanuel Milou ] - * [TICKET #1112] Add a test on the voice buffer to send through iax - packets - * Remove doublon in dependencies - * Remove warnings from the client test framework - * Update version number to 0.9.5~beta - * Update build-package script - * Add check dependency in build-deps control file field - * Create debian files for the new sflphone-client-gnome - * [TICKET #1212] Add Replaces field in control files - * [TICKET #1212] Fix manpages installation path - * [TICKET #1212] Add maintainer scripts to create alternatives - * [#1212] Update the manpages generation - edit preinst maintainer - script - * [#1212] Fix reference error in manpage - * [#1212] Add missing files on the client side - * [#1212] Fix debian docs files - no TODO file - * [1212] Fix manpage creation problem - * [#1220] Generate client-side glue files and marshaller at - compilation time - * [#1220] Generate server-side glue files at compilation time - * [#1212] Change binary name to sflphone-client-gnome - * [#1212] Update .gitignore to fit the new working tree - * [#1220] Explicitly generate glue files before building the library - * [#1220] Compile dbus directory before audio - * [#1212] Create sflphone-common at the root of the repository - * [#1212] Re-add pjproject - * [#1212] Remove Makefile from repo - * [#1220] Fix Makefile.am - * [#1212] New working directory functional - * [#1212] Update .gitignore - * [#1212] Hack to make pjsip compile.. - * [#1220] Use non-installed binary for dbusxx-xml2cpp - * [#1212] Add descriptive files, remove unuseful scripts from tools/ - - [ Alexandre Savard ] - * Restore speex codecs - * add frame size for celt (#1143) - * add framesize to codec, independant from audiolayer (#1143) - * use codec frame size in rtp (#1143) - * compute fixed_codec_framesize (#1143) - * do not resample if not required (#1143) - * add condition on resampling for decoder (#1143) - * add a condition on bytesAvail == 0 from mic data - * no maximum in rtp decode (#1143) - * compute maximum for decoding (#1143) - - [ Emmanuel Milou ] - * [#1146] Implement unitary tests on the client-side - - [ Alexandre Savard ] - * use float instead of int to compute max nb of sample (#1143) - * add nbSampleMax for unresampled data (#1143) - * make thread sleep during 5 ms insead of 20 (#1143) - * use unix usleep (#1143) - * 50 usecond thread!!!!! (#1143) - * try with the smallest compression (#1143) - * use timer set at framesize (#1143) - - [ Emmanuel Milou ] - * [#1161] Restore changelog version - - [ Alexandre Savard ] - * Remove celt stuff - - [ Emmanuel Milou ] - * [#1161] Update changelog - * [#1220] Add Conflicts: sflphone in debian control files - * [#1179] Add liblog4c3 runtime dependency - * [#1212] FIx typo error in dependency list for itnrepid - * [#1212] FIx .desktop file to point on the right exec - * [#1212] Modify changelog replacing tag - - [ Sflphone Project ] - * "[#1262] Updated changelogs for version 0.9.5-0ubuntu1~beta" - - [ Emmanuel Milou ] - * [#1212] restore changelogs - - [ Sflphone Project ] - * [#1262] Updated changelogs for version 0.9.5-0ubuntu1 Snapshot 2009- - 04-27 - - [ Emmanuel Milou ] - * [#1212] restore changelogs - - [ Sflphone Project ] - * [#1262] Updated changelogs for version 0.9.5-0ubuntu1~beta - - [ Emmanuel Milou ] - * [#1212] restore changelogs - - [ Sflphone Project ] - - -- Sflphone Project <sflphone@mtl.savoirfairelinux.net> Mon, 27 Apr 2009 17:00:03 -0400 - -sflphone-client-gnome (0.9.4-0ubuntu2) SYSTEM; urgency=low - - [ Alexandre Savard ] - * Restore speex and GSM detection - - [ Emmanuel Milou ] - * Fix bug #1090 - - -- Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> Wed, 8 Apr 2009 11:29:15 -0500 - -sflphone (0.9.4-0ubuntu1) SYSTEM; urgency=low - - [ Emmanuel Milou ] - * Integrate DBus-c++ and libiax2 in the main build system - * Clean up in the working repository - * Reorder hooks configuration panel - * Protect case when no codecs are active - * Fix some return values - * Add unitary tests for the hook manager (premisces) - - [Yun Liu] - * Update chinese translation - - [Sven Werlen] - * Update german translation - - [Hussein Abdallah] - * Update russian translation - - [Maxime Chambreuil] - * Update spanish translation - - -- Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> Fri, 3 Apr 2009 18:29:15 -0500 - - -sflphone (0.9.4-rc1) SYSTEM; urgency=low - - [ Emmanuel Milou ] - * Fix bug while trying to hold/unhold several simultaneous call - * Improve address book build system - * Implement SIP url popup on incoming call - * Improve GTK+ panel configuration - [ Julien Bonjean ] - * GTK+ client refactoring - * GTK+ clean up - * Address book improvment - - -- Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> Fri, 27 Mar 2009 18:29:15 -0500 - -sflphone (0.9.4-0beta1) SYSTEM; urgency=low - - [ Alexandre Savard ] - * Display codec used during conversation on the GUI - * Enable/disable STUN parameters at runtime - * Refactor search bar use - [ Emmanuel Milou ] - * Build system fixes - * Implement SIP re-invite - * Implement IP to IP call - [ Julien Bonjean ] - * Integrate GNOME address book based on evolution data server - - -- Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> Fri, 20 Mar 2009 18:29:15 -0500 - - -sflphone (0.9.3-0ubuntu3) SYSTEM; urgency=low - - [ Alexandre Savard ] - * Both playback and record streams in PA_STREAM_CORKED (pulseaudio) - * Use PLUGHW device for ALSA capture - * Functional IAX and SIP recording for voicemail - * Use the less CPU-consuming interpolator algorithm for resampling - * Display in GTK GUI the codec used in conversation - * GTK GUI use ASCII instread of utf-8 - * Add record menus in GTK GUI - * Put on hold when dialing a new number - * AccountID's are saved in the history - - [ Emmanuel Milou ] - * Integrate DBUS C++, libiax2 in the git repository - * Update website - * Use libspeexdsp only if available on the system - * Updated .gitignore file - - [Cyrille Béraud] - * Account assistant manager improvment - * Add an email request when creating a new account to receive voicemails - - -- Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> Sat, 14 Feb 2009 13:29:15 -0500 - -sflphone (0.9.3-0ubuntu2) SYSTEM; urgency=low - - [ Emmanuel Milou ] - * Add compilation note in README - * Use default ALSA plugin for capture - * Fix the ALSA capture problem one more time - * Clean up debug messages in dbus.c - * Add libspeexdsp dependency - * Remove implicit declaration compilation warnings - * Fix links in the website, add release note - * Change capture for the website front page - * Add alsa devel dependency in build-depends control file field - * Clean up, indentation, try to handle latency problems in iax/pulseaudio - * Remove pjsip generated files from the repo - * Use the previous declared curAlias function in accountwindow - * Fix bug in history call duration when the call fails - * Remove runtime warning in the GTK+ client - * Add librsvg2-common dependency to load SVG under KDE - * Refresh .gitignore - * Update locales files + french translation - * Add configuration panel for future noise reduction - * Add configuration panel for audio record module - * Daemon less verbose; accounts don't try to access STUn options anymore - * Fix typo in configwindow - * Add content in the official website - * use a GTK_STOCK icon for the record button - * Complete description text in the assistant manager - * Add libtool flags in client configure.ac - * Remove unuseful dependency (snd) - * Fix SIP transfer problems - * Remove previous version of PJSIP from the repo - * Upgrade PJSIP to version 1.0.1 - * Add the new website source in the repository - * Use libspeexdsp for silence detection only if available - - [ Loïc Faure-Lacroix ] - * Ajout du logo gpl3 - * Ajout des images - * Ajout de la section screenshot pour le site - * Ajout du favicon dans le header - * Modification des cartes - - [ Alexandre Savard ] - * Clean up <speex/libspeexdsp> - * Small cleanup - * Save Wave fixed - * Fix new call button when recording - * libspeexdsp added - * Recording: default home folder at startup - * Minor changes to config window - * IAX recording fixed - * Set / get recording path, still need some GTK for client - * AudioRecord file name format - * Now recording in HOME folder - - [ Cyrille Béraud ] - * Fix bug in reqaccount.c - - [ Maxime Chambreuil ] - * Update spanish translation - - [Yun Liu ] - * Update chinese translation - - [ Hussein Abdallah ] - * Update russian translation - - -- Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> Sat, 14 Feb 2009 13:29:15 -0500 - -sflphone (0.9.3-0ubuntu1) SYSTEM; urgency=low - - * Remove debug - * Join thread before leaving - * Fix implicit declaration in reqaccount - * Add REST code to build the request to server - * Fix GValue initialization warnings - * Update version number, fix implicit declaration, fix GTK markup - warnings - * Apply patch to create custom SIP account from our own server - - -- Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> Fri, 06 Feb 2009 19:17:32 -0500 - -sflphone (0.9.2-2ubuntu9) SYSTEM; urgency=low - - [ Alexandre Savard ] - * Speex audio codec preprocessing initialization - * peer hung up segmentation fault solved - * Stop recording when transfering - * Terminate only one call - * Add isRecording() function - * Fix call_icon GTK client - * Fix SIPCallClose() function, recorded file now close properly - * Function terminateSIPCall added in sipvoiplink and managerimpl - * Fix thread destructor - * setRecordingOption function implement in audiorecord - * Record now implemented in Call class - * Record interface complete (on hold erase previous recording) - * Added recButton in client - * Added: record button related icons - * Record button added - * Overload AudioRecord::recData to get mic and speaker data mixed - * Recording now in audiortp::run() method - * Audio recording working in AudioRTP: receiveSessionForSpeaker - * Open/close a wave file when pulse audio stream start/stop - - [ Emmanuel Milou ] - * Fix path for GTK+ icons; clean up - - -- Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> Thu, 05 Feb 2009 18:27:53 -0500 - -sflphone (0.9.2-2ubuntu8) SYSTEM; urgency=low - - [ Emmanuel Milou ] - * Update changelogs - * Fix bug in merge and in Makefile.am - * Terminate only one call - * Disable PJsip shutdown when changing STUN parameters - * Function terminateSIPCall added in sipvoiplink and managerimpl - * Add a timer to the alsa thread to not jam the CPU load - * Fix bug in sipvoiplink.cpp - * Clean shutdown of pulseaudio on quiting - * Fix DTMF at first start with Pulseaudio - * Remove zeroconf from the build system - * Add a library manager + exception handling - * Clean up in the working directory - * Better handling of capture XRUNs - * Restore mic adjust volume on ALSA layer - * Protect device ALSA operation if not opened - * Fix the switching layer bug - * Use dynamic_cast<> to use audiolayer-specific methods - * Open the audio devices only once at startup - * Refactoring of the ALSA part - * Functional plug-in manager - * Use a C++ thread to handle tones and DTMF in ALSA - * Restore IAXVoIPLink, restore Mutex - * Make the plugins registering against the plugin manager - * Migrate to 1->N relationship between voiplink and accounts - * API plugin for registration - * Use C++ thread in SIP, move everything in sipvoiplink - * Complete singleton pattern for the plugin manager - * Add -Wno-return-type compilation flag to remove warnings; Update - version number in configure.ac - * Add the dynamic loading for the plugin framework; integate unittest - - [ Yun Liu ] - * Update rpm spec file - * modify build package script and spec file for suse - - [ Alexandre Savard ] - * Add audiorecorder plugin and testaudiorecorder - * Add audio Recording class, edit global.h - - -- Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> Wed, 04 Feb 2009 14:00:30 -0500 - -sflphone (0.9.2-2ubuntu7) SYSTEM; urgency=low - - [ Emmanuel Milou ] - * Update changelog to 0.9.2-6 - * Fix some dbus-glib implementation details on the client side - * Init history after dbus initialization - * Add error checking in useragent; Clean sipvoiplink - * Prevent crash when trying to call an empty number - * Set the volume of the playback stream to PA_VOLUME_NORM at startup - * Fix GTK+ generic value double initialization - * Fix jaunty control file dependency problems - * Fix jaunty control file dependency problems - - [ Yun Liu ] - * Fix bug ticket # 137 - * Tolerant to gsm library of OpenSuse 11 - - [ Sven Werlen ] - * Update german translation - - -- Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> Fri, 23 Jan 2009 17:48:13 -0500 - -sflphone (0.9.2-2ubuntu6) SYSTEM; urgency=low - - [ Emmanuel Milou ] - * Migrate STUN configuration to the main config window - * Update french translation - * Other tiny memory leaks - * Fix memory leak in sampleconverter.cpp - * Generate packages from the release branch - * update the build package script - * modify the control files with architecture=any - * Remove valgring uninitialized value - * IAX and SIP use the same global variables to set account - configuration ; fix broken code - - [ Maxime Chambreuil ] - * Update spanish translation - - [ Hussein Abdallah ] - * Update russian translation - - [ Yun Liu ] - * Update translation files - * Fix the bug when user uncheck the account which fails in the - previous registration - * Add stun error status - * Fix bug ticket #143 - * Script for auto-install dependencies - * Fix bug ticket #140 - * Fix bug ticket 141 - * Fix the reregister process when user change the details of an - account - - -- Emmanuel Milou <manu@sulfur.inside.savoirfairelinux.net> Fri, 16 Jan 2009 18:19:05 -0500 - -sflphone (0.9.2-2ubuntu5) SYSTEM; urgency=low - - * Fix memory leak in the pulseaudio callback - * Update debian package generation script - * Warnings removal in GTK+ client - * Clean adjust volume method in alsalayer - * Plug the sflphone playback volume control to the pulseaudio volume - manager - * Display the date in history according to the current locale - * Generate the changelog according to the git commit messages - * Complete header in chinese translation file - * Use the right gpg key to sign the packages - * add debian jaunty jackalope support - - -- Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> Wed, 14 Jan 2009 21:17:20 -0500 - -sflphone (0.9.2-2ubuntu4) SYSTEM; urgency=low - - [ Emmanuel Milou ] - * add german translation - - [ Yun Liu ] - * Fix GUI crash in Ubuntu8.10 64bit system - - -- Yun Liu <yun.liu@savoirfairelinux.com> Thu, 08 Jan 2009 13:08:51 -0500 - -sflphone (0.9.2-2ubuntu3) SYSTEM; urgency=low - - [ Emmanuel Milou ] - * The main thread synchronizes the ringtone thread - * disable custom ringtone for the ALSA layer - * Fix the Makefile.am in man directory, add a SEE ALSO section - - [ Yun Liu ] - * Fix daemon crash caused by the previous patch ( for bug ticket #129) - - -- Yun Liu <yun.liu@savoirfairelinux.com> Tue, 06 Jan 2009 16:18:38 -0500 - -sflphone (0.9.2-2ubuntu2) SYSTEM; urgency=low - - * Fix bug ticket #129 - - -- Yun Liu <yun.liu@savoirfairelinux.com> Wed, 5 Jan 2009 15:54:53 -0500 - -sflphone (0.9.2-2ubuntu1) SYSTEM; urgency=low - - * Migrate from eXosip library to pjsip - * Add multiple SIP accounts support - * Fix ringtones problems - * Add a pulseaudio support - * Improve audio quality with ALSA - * Add chinese translation - * Improve spanish translation - * Migrate to a maintained C++ DBus bindings - * Clean and improve the build system - * Add build-dependency on Perl because we need pod2man to generate manpages - - -- Yun Liu <yun.liu@savoirfairelinux.com> Wed, 26 Nov 2008 09:47:53 -0500 - -sflphone (0.9.1) unstable; urgency=low - * Add a search tool in the history - * Migrate some gtk_entry_new to sexy_icon_entry_new - * Bug fix (Ticket #78): The voicemail password isn't displayed anymore in - the history tab - * Add the SIP registration expire value in the user file. - - -- Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> Thu, 22 May 2008 11:14:25 -0500 - -sflphone (0.9.0) unstable; urgency=low - * Add history features - * Call date - * Call duration - * Mouse events in the history tab - * Smooth switch from the history tab to the calls tab - * Remove most of GTK-Critical warnings - - -- Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> Wed, 13 May 2008 16:58:25 -0500 - -sflphone (0.9-2008-06-06) unstable; urgency=low - * Audio bug correction: capture stopped after a few minutes of conversation - with USB Plantronics sound card - - -- Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> Tue, 06 May 2008 16:58:25 -0500 - -sflphone (0.9-2008-05-06) unstable; urgency=low - * Bug correction: account creation with the assistant - * GTK+ warnings removal - * libnotify warnings removal - * Remove aliasing on the SFLphone logo - - -- Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> Mon, 05 May 2008 16:58:25 -0500 - -sflphone (0.9) unstable; urgency=low - * Clean dependencies ( removal of libboost ) - * Several GTK improvement and updates - -account window - -configuration window - * Migrate from GtkCheckMenuItem to GtkImageMenuItem - * ALSA standard I/O transfers: MMAP instead of R/W - * Fix speex audio quality - * IAX2 protocol - -Fix hold/unhold situation - -Add on hold music - * SIP protocol - -Ringtone on incoming call - -Fix transfer situation - * Add desktop notification ( libnotify ) - * Improve the system tray icon behaviour - * Improve registration error handling - * Register/unregister from the account window takes effect without starting back SFLphone - * Compilation warnings removal - * Call history - * Add an account configuration wizard - - -- Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> Wed, 30 Apr 2008 16:58:25 -0500 - -sflphone (0.8.2) unstable; urgency=low - * Internationalization of the GTK GUI - * English / French - * STUN support - * Slight modifications of the graphical interface ( tooltips, dialpad, ...) - - -- Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> Fri, 21 Mar 2008 11:37:53 -0500 diff --git a/tools/build-system/distributions/ubuntu/debian-sflphone-client-gnome/compat b/tools/build-system/distributions/ubuntu/debian-sflphone-client-gnome/compat deleted file mode 100644 index 7ed6ff82de..0000000000 --- a/tools/build-system/distributions/ubuntu/debian-sflphone-client-gnome/compat +++ /dev/null @@ -1 +0,0 @@ -5 diff --git a/tools/build-system/distributions/ubuntu/debian-sflphone-client-gnome/control.hardy b/tools/build-system/distributions/ubuntu/debian-sflphone-client-gnome/control.hardy deleted file mode 100644 index 95d2f2538c..0000000000 --- a/tools/build-system/distributions/ubuntu/debian-sflphone-client-gnome/control.hardy +++ /dev/null @@ -1,20 +0,0 @@ -Source: sflphone-client-gnome -Maintainer: SavoirFaireLinux Inc <emmanuel.milou@savoirfairelinux.com> -Section: gnome -Priority: optional -Build-Depends: debhelper (>= 5), libgcc1, autoconf, automake, libtool, libgtk2.0-dev, libsexy-dev, libdbus-glib-1-dev, libnotify-dev, libebook1.2-dev, check, liblog4c-dev -Standards-Version: 3.7.3 - -Package: sflphone-client-gnome -Priority: optional -Architecture: any -Depends: sflphone-common (=VERSION), libdbus-glib-1-2 (>= 0.73), libgtk2.0-0 , libc6 (>= 2.3.6-6) , libglib2.0-0 (>= 2.12.0), libdbus-glib-1-2, libnotify1 (>= 0.4), libsexy2 (>= 0.1), librsvg2-common (>=2.22.2), liblog4c3 -Replaces: sflphone -Conflicts: sflphone -Homepage: http://www.sflphone.org -Description: GNOME client for SFLphone - Provide a GNOME client to SFLphone. - SFLphone is meant to be a robust enterprise-class desktop phone. - SFLphone is released under the GNU General Public License. - SFLphone is being developed by the global community, and maintained by - Savoir-faire Linux, a Montreal, Quebec, Canada-based Linux consulting company. diff --git a/tools/build-system/distributions/ubuntu/debian-sflphone-client-gnome/control.intrepid b/tools/build-system/distributions/ubuntu/debian-sflphone-client-gnome/control.intrepid deleted file mode 100644 index 17532c599e..0000000000 --- a/tools/build-system/distributions/ubuntu/debian-sflphone-client-gnome/control.intrepid +++ /dev/null @@ -1,20 +0,0 @@ -Source: sflphone-client-gnome -Maintainer: SavoirFaireLinux Inc <emmanuel.milou@savoirfairelinux.com> -Section: gnome -Priority: optional -Build-Depends: debhelper (>= 5), libgcc1, autoconf, libtool, libgtk2.0-dev, libsexy-dev, libdbus-glib-1-dev, libnotify-dev, libebook1.2-dev, check, liblog4c-dev -Standards-Version: 3.8.0 - -Package: sflphone-client-gnome -Priority: optional -Architecture: any -Depends: sflphone-common (=VERSION), libdbus-glib-1-2 (>= 0.73), libgtk2.0-0 , libc6 (>= 2.3.6-6) , libglib2.0-0 (>= 2.12.0), libdbus-glib-1-2, libnotify1 (>= 0.4), libsexy2 (>= 0.1), librsvg2-common (>= 2.22.2), liblog4c3 -Replaces: sflphone -Conflicts: sflphone -Homepage: http://www.sflphone.org -Description: GNOME client for SFLphone - Provide a GNOME client to SFLphone. - SFLphone is meant to be a robust enterprise-class desktop phone. - SFLphone is released under the GNU General Public License. - SFLphone is being developed by the global community, and maintained by - Savoir-faire Linux, a Montreal, Quebec, Canada-based Linux consulting company. diff --git a/tools/build-system/distributions/ubuntu/debian-sflphone-client-gnome/control.jaunty b/tools/build-system/distributions/ubuntu/debian-sflphone-client-gnome/control.jaunty deleted file mode 100644 index 9b9c3130e5..0000000000 --- a/tools/build-system/distributions/ubuntu/debian-sflphone-client-gnome/control.jaunty +++ /dev/null @@ -1,20 +0,0 @@ -Source: sflphone-client-gnome -Maintainer: SavoirFaireLinux Inc <emmanuel.milou@savoirfairelinux.com> -Section: gnome -Priority: optional -Build-Depends: debhelper (>= 5), libgcc1, autoconf, automake, libtool, libgtk2.0-dev (>=2.16), libdbus-glib-1-dev, libnotify-dev, libebook1.2-dev, check, liblog4c-dev, libgnomeui-dev -Standards-Version: 3.7.3 - -Package: sflphone-client-gnome -Priority: optional -Architecture: any -Depends: sflphone-common (=VERSION), libdbus-glib-1-2 (>= 0.73), libgtk2.0-0 (>=2.16) , libc6 (>= 2.3.6-6) , libglib2.0-0 (>= 2.12.0) ,libdbus-glib-1-2, libnotify1 (>= 0.4), librsvg2-common (>=2.22.2), liblog4c3 -Replaces: sflphone -Conflicts: sflphone -Homepage: http://www.sflphone.org -Description: GNOME client for SFLphone - Provide a GNOME client for SFLphone. - SFLphone is meant to be a robust enterprise-class desktop phone. - SFLphone is released under the GNU General Public License. - SFLphone is being developed by the global community, and maintained by - Savoir-faire Linux, a Montreal, Quebec, Canada-based Linux consulting company. diff --git a/tools/build-system/distributions/ubuntu/debian-sflphone-client-gnome/copyright b/tools/build-system/distributions/ubuntu/debian-sflphone-client-gnome/copyright deleted file mode 100644 index fbde2314be..0000000000 --- a/tools/build-system/distributions/ubuntu/debian-sflphone-client-gnome/copyright +++ /dev/null @@ -1,28 +0,0 @@ -This package was debianized by Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> on -Fri, 3 Apr 2009 09:47:53 -0500. - -It was downloaded from the git repository of SFLphone: git://sflphone.org/git/sflphone.git - -Upstream Author: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> - -Copyright: - -Savoir-Faire Linux Inc. - -License: - -This software is copyright (c) 2004-2009 Savoir-Faire Linux inc. - -You are free to distribute this software under the terms of -the GNU General Public License version 3. -On Debian systems, the complete text of the GNU General Public -License can be found in the file `/usr/share/common-licenses/GPL'. - -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., 51 Franklyn St, Fifth Floor, Boston, MA 02110-1301, USA. diff --git a/tools/build-system/distributions/ubuntu/debian-sflphone-client-gnome/cron.d b/tools/build-system/distributions/ubuntu/debian-sflphone-client-gnome/cron.d deleted file mode 100644 index d11e611777..0000000000 --- a/tools/build-system/distributions/ubuntu/debian-sflphone-client-gnome/cron.d +++ /dev/null @@ -1,4 +0,0 @@ -# -# Regular cron jobs for the sflphone package -# -0 4 * * * root sflphone_maintenance diff --git a/tools/build-system/distributions/ubuntu/debian-sflphone-client-gnome/dirs b/tools/build-system/distributions/ubuntu/debian-sflphone-client-gnome/dirs deleted file mode 100644 index e2dc98dcb2..0000000000 --- a/tools/build-system/distributions/ubuntu/debian-sflphone-client-gnome/dirs +++ /dev/null @@ -1,7 +0,0 @@ -usr/bin -usr/share/applications -usr/share/pixmaps -usr/share/sflphone -usr/share/locale -usr/share/doc -usr/share/man diff --git a/tools/build-system/distributions/ubuntu/debian-sflphone-client-gnome/docs b/tools/build-system/distributions/ubuntu/debian-sflphone-client-gnome/docs deleted file mode 100644 index 9830da213f..0000000000 --- a/tools/build-system/distributions/ubuntu/debian-sflphone-client-gnome/docs +++ /dev/null @@ -1,5 +0,0 @@ -NEWS -README -ChangeLog -AUTHORS - diff --git a/tools/build-system/distributions/ubuntu/debian-sflphone-client-gnome/manpages b/tools/build-system/distributions/ubuntu/debian-sflphone-client-gnome/manpages deleted file mode 100644 index 7e75945912..0000000000 --- a/tools/build-system/distributions/ubuntu/debian-sflphone-client-gnome/manpages +++ /dev/null @@ -1,2 +0,0 @@ -debian/sflphone-client-gnome/usr/share/man/man1/sflphone-client-gnome.1 -debian/sflphone-client-gnome/usr/share/man/man1/sflphone.1 diff --git a/tools/build-system/distributions/ubuntu/debian-sflphone-client-gnome/postinst b/tools/build-system/distributions/ubuntu/debian-sflphone-client-gnome/postinst deleted file mode 100644 index ebee7fa2bb..0000000000 --- a/tools/build-system/distributions/ubuntu/debian-sflphone-client-gnome/postinst +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/sh -e - -update-alternatives --install /usr/bin/sflphone sflphone /usr/bin/sflphone-client-gnome 100 \ - --slave /usr/share/man/man1/sflphone.1.gz sflphone.1.gz \ - /usr/share/man/man1/sflphone-client-gnome.1.gz - -exit 0 diff --git a/tools/build-system/distributions/ubuntu/debian-sflphone-client-gnome/postrm b/tools/build-system/distributions/ubuntu/debian-sflphone-client-gnome/postrm deleted file mode 100644 index 70be710bd1..0000000000 --- a/tools/build-system/distributions/ubuntu/debian-sflphone-client-gnome/postrm +++ /dev/null @@ -1,36 +0,0 @@ -#!/bin/sh -# postrm script for sflphone -# -# see: dh_installdeb(1) - -set -e - -# summary of how this script can be called: -# * <postrm> `remove' -# * <postrm> `purge' -# * <old-postrm> `upgrade' <new-version> -# * <new-postrm> `failed-upgrade' <old-version> -# * <new-postrm> `abort-install' -# * <new-postrm> `abort-install' <old-version> -# * <new-postrm> `abort-upgrade' <old-version> -# * <disappearer's-postrm> `disappear' <overwriter> -# <overwriter-version> -# for details, see http://www.debian.org/doc/debian-policy/ or -# the debian-policy package - -if [ "$1" = "purge" ] -then - - # remove the user config file - rm -f $HOME/.sflphone/sflphonedrc - -fi - -# dh_installdeb will replace this with shell code automatically -# generated by other debhelper scripts. - -#DEBHELPER# - -exit 0 - - diff --git a/tools/build-system/distributions/ubuntu/debian-sflphone-client-gnome/preinst b/tools/build-system/distributions/ubuntu/debian-sflphone-client-gnome/preinst deleted file mode 100644 index ab8a90ca57..0000000000 --- a/tools/build-system/distributions/ubuntu/debian-sflphone-client-gnome/preinst +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/sh -# postrm script for sflphone -# -# see: dh_installdeb(1) - -set -e - -package=sflphone-client-gnome - -case "$1" in - install|upgrade) - ## Clean up the previous manpage - if [ -f /usr/share/man/man1/sflphone-gtk.1 ]; then - rm /usr/share/man/man1/sflphone-gtk.1 - fi - ;; -esac - -exit 0 diff --git a/tools/build-system/distributions/ubuntu/debian-sflphone-client-gnome/prerm b/tools/build-system/distributions/ubuntu/debian-sflphone-client-gnome/prerm deleted file mode 100644 index 5e90217068..0000000000 --- a/tools/build-system/distributions/ubuntu/debian-sflphone-client-gnome/prerm +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/sh -e - - -if [ "$1" = "remove" ]; then - # Remove alternatives symlink set in postinst - update-alternatives --remove sflphone /usr/bin/sflphone -fi diff --git a/tools/build-system/distributions/ubuntu/debian-sflphone-client-gnome/rules b/tools/build-system/distributions/ubuntu/debian-sflphone-client-gnome/rules deleted file mode 100755 index 3ff2428272..0000000000 --- a/tools/build-system/distributions/ubuntu/debian-sflphone-client-gnome/rules +++ /dev/null @@ -1,117 +0,0 @@ -#!/usr/bin/make -f -# -*- makefile -*- -# Sample debian/rules that uses debhelper. -# This file was originally written by Joey Hess and Craig Small. -# As a special exception, when this file is copied by dh-make into a -# dh-make output file, you may use that output file without restriction. -# This special exception was added by Craig Small in version 0.37 of dh-make. - -# Uncomment this to turn on verbose mode. -#export DH_VERBOSE=1 -export DH_OPTIONS - -package=sflphone-client-gnome - -CXX = g++-4.0 -CFLAGS = -Wall -g -DEB_INSTALL_MANPAGES_sflphone_client_gnome = sflphone.1 sflphone-client-gnome.1 - -configure: configure-stamp -configure-stamp: - dh_testdir - # Add here commands to configure the package. - ./autogen.sh - ./configure --prefix=/usr - touch configure-stamp - - -#Architecture -build: build-arch build-indep - -build-arch: build-arch-stamp -build-arch-stamp: configure-stamp - - # Add here commands to compile the arch part of the package. - $(MAKE) - touch $@ - -build-indep: build-indep-stamp -build-indep-stamp: configure-stamp - - # Add here commands to compile the indep part of the package. - #$(MAKE) doc - touch $@ -clean: - dh_testdir - dh_testroot - rm -f build-arch-stamp build-indep-stamp configure-stamp - # Add here commands to clean up after the build process. - [ ! -f Makefile ] || $(MAKE) distclean - -ifneq "$(wildcard /usr/share/misc/config.sub)" "" - cp -f /usr/share/misc/config.sub config.sub -endif -ifneq "$(wildcard /usr/share/misc/config.guess)" "" - cp -f /usr/share/misc/config.guess config.guess -endif - dh_clean - -install: install-indep install-arch -install-indep: - dh_testdir - dh_testroot - dh_clean -k -i - dh_installdirs -i - # Add here commands to install the package into debian/sflphone. - -install-arch: - dh_testdir - dh_testroot - dh_clean -k -s - dh_installdirs -s - # Add here commands to install the arch part of the package into - # debian/tmp. - $(MAKE) DESTDIR=$(CURDIR)/debian/$(package) install - dh_install -s -# Must not depend on anything. This is to be called by -# binary-arch/binary-indep -# in another 'make' thread. - -binary-common: - dh_testdir - dh_testroot - dh_installchangelogs ChangeLog - dh_installdocs - dh_installexamples -# dh_installmenu -# dh_installdebconf -# dh_installlogrotate -# dh_installemacsen -# dh_installpam -# dh_installmime -# dh_python -# dh_installinit -# dh_installcron -# dh_installinfo - dh_installman - dh_link - dh_strip - dh_compress - dh_fixperms -# dh_perl - dh_makeshlibs - dh_installdeb -# dh_shlibdeps - dh_gencontrol - dh_md5sums - dh_builddeb -# Build architecture independant packages using the common target. -binary-indep: build-indep install-indep - $(MAKE) -f debian/rules DH_OPTIONS=-i binary-common - -# Build architecture dependant packages using the common target. -binary-arch: build-arch install-arch - $(MAKE) -f debian/rules DH_OPTIONS=-s binary-common - -binary: binary-arch binary-indep -.PHONY: build clean binary-indep binary-arch binary install install-indep install-arch configure diff --git a/tools/build-system/distributions/ubuntu/debian-sflphone-client-kde/changelog b/tools/build-system/distributions/ubuntu/debian-sflphone-client-kde/changelog deleted file mode 100644 index d59275102a..0000000000 --- a/tools/build-system/distributions/ubuntu/debian-sflphone-client-kde/changelog +++ /dev/null @@ -1,1284 +0,0 @@ -sflphone-client-kde (0.9.6-SYSVER) SYSTEM; urgency=low - - ** 0.9.6 ** - - * Documentation on echo test - * [redmine_down] codec names not displayed in total - * [redmine_down] crash when hanging up a dialing call because tries to - add it to history whereas no starttime - * [#1927] alternate every time screen changed to call history - * [#1886] clean code - * [#1886] debug messages when loading history removed - * [redmine_down] sflphone-kde icons - * [#1855] Update language files - * [#1502] Update version number - * [redmine_down] setHistory at close - * [#redmine_down] Handle PJ_DECLINE_SC as failure - * [#1923] Fix segmentation fault when adding a new account - * [#1923] Check on iterator before setting the config - * [#1904] Added mnemonic to tabs in sflphone-client-gnome. - * [#1905] The daemon was not sending the currentSelectedCodec signal - on dbus when answering a call. - * [#1922] Default values set to all account details - * [#1886] Spinbox reg expire enables apply, and address book is not - visible when disabled - * [#1905] Bug fix for segmentation fault caused by an empty string, - * [#1910] Warnings in test directory - * [#1919] Error fixed - * [#1855] Update russian translation - Hussein Abdallah - * [#1910] Remove files - * [#1919] fixed - * [#1777] Code indentation - * [#1918] fixed - * [#1917] fixed - * [#1910] Remove warnings compilation in src - * [#1886] removed AccountListModel in configskeleton - * [#1914] - * [#1911] check previous and new port - * [#1910] Remove compilation warnings in src/dbus and src/history - * [#1910] Remove compilation warnings in src/audio - * [1855] Update german translation - Sven Werlen - * [#1909] removed - * [#1906] Done - * [#1904] The registration expire value is now configurable from the - * Cleaned up debug messages. - * [#1886] separated initCallItem in two functions - * [#1886] reversed error in commit - * [#1886] clean debug - * [#1886] changed Name of classes and files - * [#1886] clean - * [#1870] In call_state_cb (dbus.c:126), _time_stop was overridden by - the actual time. - * [#1884] Added some new gpg flags to prevent tty warnings - * [#1886] Clean audio config dialog - * [#1886] No more compile warnings. + 1 comm - * [#1872] Check if the user input is smaller than PJ_MAX_HOSTNAME. - * [#1886] - * [#1785] Fixed build when no new commit - * [#1852] If chosen by the user, the hostname can now be solved and - used - * [#1871] * and # inverted back - * [#1869] Conditional compilation that checks if - * [#1309] removed test in main - * [#1425] Put actions in SFLPhone window class instead of ui view, - made a separate toolbar for screens. - - -- SFLphone Automatic Build System <team@sflphone.org> Mon, 27 Jul 2009 09:53:37 -0400 - -sflphone-client-kde (0.9.6~rc2-SYSVER) SYSTEM; urgency=low - - ** 0.9.6~rc2 ** - - * [#1755] Remove generated file - * [#1753] restore ilbc ... - * [#1866] Methods getSipPort and setSipPort now have an effect on the - * [#1753] make pjsip compile without ilbc. Use ./autogen.sh --disable- - ilbc-codec - * [#1855] Fix error in russian translation - * [#1805] Remove the old flawed signal mechanism which was failing in - * [#1855] Refresh translation - * Spanish translation finished + po README files updated + echo's in - copy-in-clients - * [#1850] Yun made the chinese HK-CN translation - * [#1848] Fix transfer interface bug - * [#1862] At install, kde client installs only french translation file - * [#1841] A new fallback mechanism was added to the internal resolver - in PJSIP. - * Started AccountList model/view - * [#1855] Remove po subdir in Makefile.am - * [#1855] Fix typo error in sflphone-client-gnome - * [#1855] Do not generate Makefile in sflphone-common/po - * [#1855] Copy translation files into both clients dirs - * [#1855] Remove po dir from sflphone-common - * Comments added - * [#1860] mailbox->voicemail... - * make scripts executable - * [#1855] French translation - * [#1855] Chinese zh_HK partially filled... - * [#1859] An unnamed pipe monitored by poll() was added. When we want - to - * [#1855] Sven completed the first part of the german translation - * [#1855] Cantonese manually filled for already translated, almost - equal strings - * [#1855] Merge russian translation - * [#1855] Spanish manually filled for already translated, almost equal - strings - * [#1855] Update german translation in ./lang/de - * [#1858] This problem was fixed by removing a useless line in - * [#1855] merged existing translations in lang/ sflphone.po's - * [#1842] [#1843] An attempt at improving the expected behaviour that - can't - * [#1855] added po folder in gnome client and scripts for copying from - common lang folder to clients - * [#1853] Edit before call does nothing on call history - * Put most language entries possible in common. From 300 to 250 - entries. Stays underscores problem. Scripts for copy in clients. - * commit to merge master - * [#1825] Changed "Bad authentification" to "Authentication Failed". - * common po files - * [#1753] Remove ILBC from pjproject - - -- SFLphone Automatic Build System <team@sflphone.org> Fri, 17 Jul 2009 19:13:11 -0400 - -sflphone-client-kde (0.9.6~rc1-SYSVER) SYSTEM; urgency=low - - ** 0.9.6~rc1 ** - - * Update some version number - * [#1792] Creates .sflphone directory with permission 600. Also, - "chmod 600" after - * [#1810] GUI is now notified that the call failed. Also, a segfault - was - * [#1816] Address book search disabled when disabled address book and - enabled it back plus button stays triggered - * codeclistmodel + asynchronous loading of address book + - enable/disable address book - * [#1810] Now checking SDP answer after 200 OK. Still need to - implement full - * [#1794] Can't use the interface during a call - * Updated translation files - * Russian translation integrated - * Codec list model/view started. - * [#1807] Add configure.ac in pjproject-1.0.3 - * [#1787] closeRtpSession added in some places where it should have - been - * Use Item class for contacts and accounts - * Comments + clean code - * [#1794] Improved debug messages - * [#1805] Replaced the old and unreliable mecanism that was was - waiting for - * [#1794] Can't use the interface during a call - * [#1787] For those cases where no registered SIP account is - configured - * [#1797] Make pjsip compile - * [#1787] Minor changes. Removed useless commented line. Changed order - of - * [#1777] Code indentation - * [#1797] Update package generation with new pjsip version - * [#1798] Does not hang up when the call is building up - * [#1797] Update .gitignore with new pjsip version - * [#1797] Remove generated files from repo - * [#1797] Main build system now uses pjproject-1.0.3 - * [#1797] Add pjproject-1.0.3 - * [#1797] Remove pjproject-1.0.2 - * [#1796] Computing time optimization (samplerate conversion) - * [#1787] _audiortp->start() moved away from offhold(), - SIPCallAnswered() - * [#1312] Added new states for calls initialized by other clients - * [#1795] Crashes when adding a new account, checking it and applying - * [#1782] Missing icons - * [#1793] KDE client compilation problem - * Fake ringtone files can no longer be set. - * indentation - * [#1312] Able to fetch to differentiate incoming/ringing call state - * [#1784] Use DESTDIR variable in po Makefile - fix language file - installation - * [#1785] Fixed typo - * [#1785] Fixed changelog update - * [#1759] ./autogen.sh --prefix=/usr --with-debug to use optimization - level 0 - * [#1773] Changed snapshot naming convention - * [#1773] Removed gpg agent use, added repository cache cleaning - * [#1759] Use optimization level 0 for repository, 2 for packages - * [#1777] Code indentation/formatting - * Translated new features in french - * [#1785] Added missing changelog entry - * [#1781] Window title is SFLPhone - * [#1777] Add code indentation/formatting in the buil system - * [#1774] Can't set voicemail number in KDE account creation wizard - * [#1775] Can't modify account information for account created with - the wizard - * [#1771] Add a "Default" button in context menu to disable chosen - prior account - * [#1705] - * [#1224] Remove generated file from the repo - * [#1224] Remove generated file from the repo - * [#1762] distclean target should remove kconfig generated files - (settings.h, settings.cpp). Rename them? - * [#1761] clear history button should really clear history - * Dialpad works. - * Implemented Dialpad widget instead of building it in main view. - * Removed last occurence of the old config dialog, that made the build - crash. - * [#1755] Do not consider G722 as a dynamic payload elsewhere than in - RTP layer - * [#1753] Remove ilbc Makefile generation - * [#1756] Implement a kde configuration dialog with kconfig xt and - kconfigdialog class - * [#1755] fix audiocodec folder parsing problem - * [#1450] Reinit timestamp comparison in RTP, create session in - newOutgoingCall - * [#1753] Remove milenage third party code from pjsip - * New Config Dialog integrated in GUI.(without codecs) - * [#1753] Remove ILBC codec - * kconfig started, tr2i18n -> i18n, icons folder, accountList changed - * [#1705] Fixed Audio RTP thread creation/start - * [#1714] Fix codec negociation result handling - * [#1678] Fix audiortp payload setting - * [#1678] Put bac putData method in rtp - * [#1669] gtk_file_chooser_get_filename() support UTF-8 by default - * [#1735] Add conditions to sdp update call if call declined - * [#1737] substr of recordings destination folder to remove "file://" - should be done in client rather than in daemon - * [#1731] Enlarge audio stream buffer size - * [#1714] Missing true - * [#1317] Fixed Mandriva timeout - * [#1317] Changed tag convention - * [#1317] Cleaned git-dch - - -- SFLphone Automatic Build System <team@sflphone.org> Fri, 10 Jul 2009 15:50:55 -0400 - -sflphone-client-kde (0.9.6~beta-SYSVER) SYSTEM; urgency=low - - ** 0.9.6~beta ** - - * spec files for mandriva and opensuse updated with buildrequires - libqt4-dev >=4.3 - * [#1700] Cannot build on ubuntu 8.10 and a few other distribs - * [#1502] Update version number where applicable - * [#1642] Update client icons - * [#1450] Clean up useless debug and comments in sipvoiplink and - audiortp - * [#1450] Remove Semaphore object in AudioRtp thread deletion - * [#1450] Audio RTP init now synchronized with Sip/SDP - * [#1693] kde client crashes when changing codecs order/activation - * [#1450] Deep refactoring of audiortp - * [#1450] setRtpSessionRemoteIp - * [#1689] getCallList at start - * [#1224] Change path in package files - * [#1450] Audio RTP initialized only once, payload and remote ip set - at runtime - * [#1450] Add setRtpSessionMedia and setRtpSessionRemoteIp address - * [#1642] Make GNOME GUI fresher and younger ;) - * [#1686] Status bar displaying used account - * added sflphone-kde icon so that it compiles - * [#1659] Ending a call causes the daemon to crash - * corrected introspection XMLs, po files... - * [#1211] g722 media descriptor in codecDescriptor - * [#1310] Install sflphoned in $(prefix)/lib/sflphone - * [#1502] Do not install test binaries and dbus utilitaries - * [#1224] hack for pjsip build system! - * [#1224] Remove pjsip binaries from repo - * [#1224] Upgrade to pjsip 1.0.2 - * [#1658] About SFLphone (bugs) - * [#1658] About SFLphone - * [#1660] Displaying all dialed numbers in a call - * Tested status bar. - * [#790] Optimize pulse audio streams parameters - * [#1678] Some usefull debug messages for mutex/semaphore deadlock - problem - * [#1669] Add/remove some usefull/unusefull debug - * [#1665] Fix latency related to pulse audio stream openning/closing - * [#1457] Make the menus and panels accessible in french - * [#1457] Improve broken keyboard accessibility in menus and conf - panels - * [#961] Instanciate only once the searchbar icons - * [#961] Restore transfer fonction - * [#961] Filter on the history type OK - * [#961] Fix compilation problems on hardy/intrepid - * [#1157] Commit missing files - * [#790] Reduce number of start/stop streams call on pulse audio - * [#1639] kde client crashes when no account registered - * [#1620] Fix the searchbar - * [#1620] Get back caltree as it was during gtkcritical area - * [#1620] Add history filter reinit function - * [#1335] Add a missing label in address book preferences - * [#1561] Update russian translation - Hussein Abdallah - * [#1605] Fix edit menu french translation - * [#961] Enable to search in the history according to the call type - * [#1449] Searchbar does not work anymore - * [#961] Add popup menu on the entry primary icon for history - * [#1317] Fixed KDE client package dependency - * [#936] speex 32 khz integration completed - * [#936] Use 320 frame size - * [#936] Test using a frame size at 320 smpls - * [#1214] Enable / Disable history - * [#1607] Fix compilation problem for ubuntu 8.10 (libsexy) - * [#1313] Implement processDataEncode processDataDecode in audiortp - * [#1613] codec list order can't be set - * Better handling of localisation + added languages + corrected - warnings + begginning of new config dialog with kconfig + 14px - account leds - * [#1214] Save and load history according to the limit timestamp + - unit tests - * [1609] Fix call number copy/paste feature - * [1607] Restore clear action icon in searchbar - * [#936] Try to decode using 1280 samples - * [#936] Add some debug - * [#936] Add .cpp file - * [#936] Oops Forgot speex 32 khz - * [#1214] Add configuration panel for history + D-Bus calls - * [#1313] Test rtp thread function, frame size, nbbytes, resampling - * [#790] Flush audio data before closing audio streams - * [#1214] History displays local time - * [#1214] Skip empty field on display - * [#1214] Associate an account to an history entry - * [#1342] Get addressbook options sensitive/non-sensitive - * [#1211] Clean up and comments - * [#1211] Get back to 20 ms framesize - * [#1211] Use sendImmediate instead of putData in RTP - * [#1211] Fix nb byte available in RTP - * [#1211] Clear condition on maxNbSamples in RTP - * [#1211] Fix max byte available in RTP session - * [#1211] G722: Use 160 samples per frame instead of 320 - * [#1211] Test using a dynamic payload - * [#1211] Test using a dynamic payload type - * [#1211] Rename size variable (nb_samples, nb_bytes) - * [#1211] Test g722 ip-to-ip sending twice the data lenth - * [#1211] Test g722 ip-to-ip - * [#1214] Do not select an history item by default at startup - * [#1214] Remove some compilation warnings - * [#1214] Handle empty field - remove g_print - * [#1214] Add each history item only once - * [#1214] Handle call timestamps properlier - * [#1214] Do not need timestamp files anymore - * [#1214] Use the saved date for history entry - * Clean up - * [#1214] Client doesn't crash if the D-Bus call fails - * [#1214] Client is able to save its history - still some glitches - * [#1211] Forgot 16000 for g722 - * [#1211] G722 initialization - * [#1214] Save name/number, successfully load the history if no fields - are empty - * [#1499] Fixed destination directory bug - * [#1214] Restore all the functionalities; peer name/number way more - easy to handle !! - * [#1214] Add callable_object instead of call_t, refactoring - * [#1211] Test with polycom soundstation 16000 - * [#1211] Remove C like inline function in g722 codec - * [#1342] Finalize gnome client preference window formating - * [#1214] Retrieve the history when the gnome client startsup - * [#1306] Implement localization for KDE client - * [#1593] enable accounts apply button when account checked/unchecked - * [#1214] Implement the dbus calls on server side - * [#1214] Add serialized/unserialized functions to pass data on DBUS - * [#1342] Formating gnome client configuration windows - * [#1214] Save sucessfully a map of history items - * [#1499] Removed multiple jobs compilation for KDE client (2) - * [#1214] Load history from file into memory, add unit tests - * [#1534] Throws a length_error exception in case URL exceeds - std::string max_size - * [#1499] Removed multiple jobs compilation for KDE client - * [#1565] make account leds smaller - * [1430] Fix dbus debug - * [#1562] crashes when trying to change item of a call of state "OVER" - * [#1116] Fix compilation bug - * [#1317] Added mandriva and opensuse-11 64 bits - * [#1108] Add messges in main window concerning transfer success - failure - * [#1116] Fix compilation problems - * [#1211] g722 Makefile - * [#1108] Client side transferFailed/trasferSucceded signals handling - * [#1211] G722 mostly completed, - * [#1555] make bigger toolbar (24x24) - * [#1551] remove default mailbox number in wizard and disable mailbox - button when first account doesn't have mailbox number - * [#1342] Re-add sflphone manpages - * [#1116] Fix compilation on non-jaunty distros - * [#1317] Fixed opensuse startup sleep - * [#1108] Add a signal in the client to notify successful or failed - transfer - * [#1108] Dbus signals concerning call transfer success/failure - * [#1317] Added opensuse to automatic build system - * [#1223] Fix manpages bug - * [#1060] german translation glitch - * Clean up some gnome client warnings - * [#1547] replace ugly account leds by beautiful icons - * [#1548] add close button that hides windowand just hide on clicking - the cross - * [#1549] put introspec XMLs in the client's source - * [#1312] Implement getCallList D-BUS method - * [#1116] Clear text in history and contacts - * [#1499] KDE integration - * [#1469] Modify header linkers in dbus-c++'s Makefile.am's - * [#1469] Remove examples folder from dbus-c++ - * [#1214] History integration in build system; unit test squeleton - * [#1317] Cleaning - * [#1469] Remove configure stuff in dbus-c++ - * [#1469] Add unofficial mainline dbus-c++ - * [#1469] Remove dbus-c++ from freedesktop - * [#1430] Bring account changed signal/callback back to normal - * [#1060] Update german translation - Sven Werlen - * [#1430] Add marshaller one string define - * [#1430] Send account change signal broadcast using account id - * [#1430] Remove condition on setRegistrationState, cause stun to - crash - * [#1317] Centralized version handling - * [#1317] Fixed version number on sfl-git-dch - * [#1317] Refactoring for new distributions - * [#1215] Fix account order at startup if latency - * [#1088] Restore sip dns srv - * [#1214] Add squeleton for history manager - * [#1430] Add accout id to accout changed method - * [#1430] No connectionStatusNotification (account changed) if no - changes - * [#1538] Add COPYING file - * [#1430] Add audio rtp thread tests - * [#1317] Changed version detection - * [#1538] Document license in libs/stund - * [#1317] Added version files - * [#1538] Apply François patches - debian packages - * [#1317] Updated spec files - * add files - * [#1538] Apply François patches - debian packages - * [#1535] Change program file structure (directory src...) - * [#1317] Updated build system scripts - * [#1317] Cleaning - * [#1317] Copied introspect files to gnome client - * [#1317] Added opensuse to build-system : first-shot - * [#1317] Remove spec files from configure - * [#1317] Added missing prefix - * removed debug for daemon account fix - * [#1430] Add a connection reference which most likely belong to - libdbus - * [#1430] Use shared connection instead of private - * make daemon find the account, added userMatch - * Clean code, add comments... - * [#1317] Fixed packaging rules - * [#1317] Updated autogen - * Updated autogen.sh for pjsip - * [#1526] Set accounts order - * [#1317] Fixed pjsip lib dirs - * [#1317] Updated debian packaging for new pjsip configuration script - * [#1317] Switch to autogenerated guess and sub files - * [#1317] Updated pjsip inclusion in build system - * [#1317] Replaced pjsip guess and sub files - * [#1317] Fixed compilation issues on opensuse 11 - * [#1505] account list seem to crash the application when clicking - Apply very fast... - * [#1456] Add a flag to be replaced in the control files - * [#1456] Added version dependancy handling - * put account alias in AccountWidgetItem rather than in the item with - " " before. - * [#1034] The KDE client should start sflphoned if it is not started - * [#1500] Handle options for notifications and display on incoming - call. - * [#1443] Client should not crash when receive an unexpected - stateChanged signal - * [#1403] Do not stop the notification anymore - * [#1456] Added version dependancy handling - * [#1426] Daemon crashes when get alsa plugin - * [#1422] Improved error messages - * commit for merge - * [#1424] Change logo in tray icon and put a different one when - incoming call - * [#1425] first part done, window title... - * [#1413] add manpages creating and installing in build system - * [#1417] The client should start the account creation wizard if - started for the first time (if config file doesn't exist) - * [#1421] Make volume bars horizontal when dialpad is hidden. - * Changed main window title and fixed a mistake in sflphone_const.h - * [#1412] make debian package building work - * changelog changed. - * Changed addAccount method in gnome client. - * Debian and man folders added. - * [#1388] Change project name from sflphone_kde to sflphone-client-kde - * Better handle of kabc check. - * [#1351] Automatic generation of dbus interfaces in makefile - generated by cmake - * [#1307] Implement "edit before call" in history and address book. - * [#1344] change action_call label in call history from "call" to - "call back". - * [#1308] Implement Hook feature in kde client - * Improved build system. - * #1219 : Add address book configuration page - * Better handling of registration to the daemon. - * #1039 : Add tray icon in kde. - * Issue no 1216 : Double click on item in history or address book - causes call. - * display peer name in call list and call history when called from - address book. - * Address book functionnal with photo displayed. - * Help menu kde available but actions disappeared. All fonctions in - view. - * Address book functionnal but ugly and making its own sort in the - complete address book. - * Account choice on right click, clean out includes, page address - book, fixed bugs... - * Wizard, double click, context menu... - * Removed sflphone_kde.kdevelop.filelist - * Added account creation wizard and translated interface in english. - * Transfer functionnal but ugly. - * transfer not functionnal - * Bug fixed : unholding (UNHOLD_CURRENT, UNHOLD_RECORD) - * Commit functional for push. With install.sh - * Before merge. - * Problem with enable accounts. Account display increased. - * Functional with codec order working , playDTMF. - * Commit functional. - * sflphone_kde/build added in .gitignore. - * complete commit for checkout previous. - * Commit before checkout previous version to check the display - bug(little font everywhere...) - * Functionnal client. Rest : history icons, config icons and - functionalities - * commit before merge asavard for isRecording. - * Call and Automate fusion done and seems to work. - * Commiting before putting Automate class in Call class. - * Functionnal main window without recording, history, voicemail, kio - widgets. - * client kde avec kdevelop. - * Config Dialog almost finished. - * Base of QT client - - -- SFLphone Automatic Build System <team@sflphone.org> Tue, 23 Jun 2009 11:15:26 -0400 - -sflphone-client-kde (0.9.5-SYSVER) SYSTEM; urgency=low - - ** 0.9.5 release ** - - * [#1060] FIx bug in chinese translation - * [#1313] git add rtpTest.cpp rtpTest.h - * [#1313] Add init/close rtp tests - * [#1313] Basic instanciation of the rtp layer - * [#1449] Gtk-Critical concerning history filters and new calls - * [#1400] Make the match with the hostname instead of username - * [#1324] Change status bar label for "Using %s (%s)" - * [#1403] Icon size: 60x60 px - * [#1403] Do not remove notification, improve icon quality - * [#1403] Add smaller icon for gnome notifications - * [#1403] Prevent crash when hangup && no notification - * [#1403] Remove all actions on notifications; code refactoring - * [#1451] Use stun.sflphone.org as default STUN server - * [#1060] New po files - need to be translated - * [#1060] Update french translation - Rebuild template file - * [#1456] Add a flag to be replaced in the control files - * [#1454] Make cppunit optional; remove from build deps in control - files - * [#1401] Add libexpat1-dev dependency in control files - * [#1448] Take off these ugly debug messages - * [#1448] fixed getTelephoneTone and getTelephoneFile() called - repeatedly - * [#1406] add liblog4c-dev in build-depends - * [#1409] Restore .desktop icon - - -- SFLphone Automatic Build System <team@sflphone.org> Mon, 25 May 2009 11:34:48 -0400 - -sflphone-client-kde (0.9.5-SYSVER~rc2) SYSTEM; urgency=low - - ** 0.9.5 rc2 ** - - * [#1422] Improved error message - * [#1402] Fix pjsip build - * [#1404] Clear GTK-Critical Bug at client startup - * [#1422] Added automatic VM shutdown when building on more than one - VM - * [#1422] Fixed some issues with new changelog generation script - * [#1422] Moved distribution update to specific file - * [#1422] Dropped git-dch, replace by home made implementation - * [#1402] Fix pjsip build - * [#1404] Clear GTK-Critical Bug at client startup - * Changes for name based dbus connection - * Clean changelogs - * [#1343] Gnome: Implement a callback system to handle focus on - different widgets - * Debus Session - * Refactoring Python code, PEP8 - * [#1430] Get back dbus_g_proxy_new_for_name - * [#1430] Get back DBUS_BUS_SESSION type - * [#1430] Dbus fixed owner message binding - * Second test with DBUS owner - * [#1404] Gnome -> Preferences -> Hooks - * [#1404] Gnome -> Preferences -> Recordings - * [#1404] Call History - * [#1404] Gnome -> Preferences -> Address Book - * [#1404] IF the first notification option disable the second - notification - * Dbus with fixed owner does not automatically start the deamon - * Add codec debug tests in pysflphone - * [#1407] Some print info - * [#1407] Add a scenario to pick_up action - * Test client dbus connection to a fixed owner - * Add python dbus test suite - * [#1161] Modified version handling in build system - * [#1314] Test pulse audio and audio streams connect and disconnect - * [#1402] Add info message after configure - * [#1402] Build the daemon with the local pjsip library (vs the - installed one) - * [#1009] Fix Codec Sampling Rate set to zeros - * [#1314] Add mutex to pulse layer audio streams - * [#1314] Refactoring pulseaudio stream to test connect disconnect - * [#1314] Refactoring of pulselayer to test conect/disconnect - * Add debug messages in debus calls concerning account - * [#1314] Add some return values to audio init functions - * [#1406] add liblog4c-dev in build-depends - * [#1409] Restore .desktop icon - * Bug #1405: Fix strings as requested. - * Bug #1404: Fix strings in preferences panel. - - -- SFLphone Automatic Build System <team@sflphone.org> Tue, 19 May 2009 12:08:18 -0400 - -sflphone-client-kde (0.9.5-0ubuntu1~rc1) SYSTEM; urgency=low - - [ SFLphone Project ] - * [#1262] Updated changelogs for version 0.9.5-0ubuntu1 Snapshot 2009- - 05-05 - - [ Emmanuel Milou ] - * Add some python CLI client code; not really functional - * [#1108] Fix peerHungup method for IP to IP call - - [ Alexandre Savard ] - * [#1108] Correct setting of SIP contact for direct IP call - * [#1108] SIP user agent handles incoming REFER - - [ Emmanuel Milou ] - * Remove website from repository - * Update translation - - [ Alexandre Savard ] - * Sflphone icon's tooltip changed for "configured" instead of - "registered" - - [ Emmanuel Milou ] - * Update translation - - [ Sflphone Project ] - - -- Sflphone Project <sflphone@mtl.savoirfairelinux.net> Tue, 05 May 2009 19:16:13 -0400 - -sflphone-client-kde (0.9.5-0ubuntu1~beta) SYSTEM; urgency=low - - [ Julien Bonjean ] - * Updated Eclipse stuff - * Improved addressbook config window - * Added sflphone Eclipse stuff - * Implemented addressbook list server side - * Moved dbus stuff in dbus directory - * Updated addressbook configuration - - [ Emmanuel Milou ] - * Remove unuseful installation scripts. Use apt-get build-dep sflphone - instead - * fix bug #1090 - - [ Alexandre Savard ] - * defining speex 16khz - - [ Emmanuel Milou ] - * Remove unuseful file from build system - * Start dns srv resolver - - [ Alexandre Savard ] - * Basic ogg/vorbis initialization - - [ Emmanuel Milou ] - * Handle incoming IP-to-IP invite correctly - - [ Alexandre Savard ] - * speex wideband 16000 - - [ Emmanuel Milou ] - * Better handling of incoming IP to IP call - * DNS SRV resolution functional - * Implement IAX2 incoming URL - * Allow user to make IP call without any accounts configured - * Add a contextual menu to edit a number from the contacts tab - * Add comments, tooltip and new button to the contextual menu - * add delete event, migrate to GTK 2.16 for sexy icons - * Resolve ticket #1118 - * Update suse spec file - * Add phone number cleanup functions, unit tests and panel - configuration - * Add pertinent test that fails - * fix dependencies for suse package - * Add contextual edit menu in history - #1120 - - [ Alexandre Savard ] - * Temporary comit: make speex wideband (16 khz) - * Temporary: shared object for speex narrow band - * Temporary: speex narrowband and wideband coexist - - [ Julien Bonjean ] - * Fixed bug when no book selected - * Fixed addressbook related compilation warnings - * Fixed GTK client remaining compilation warnings - * Fixed segfault when book removed since last sflphone run - * Fixed bug when book is unreachable (ldap error) - - [ Alexandre Savard ] - * Fix codec list in audio config window - * Active/inactive speex codec by payload - - [ Julien Bonjean ] - * Updated gitignore - * Added some comments - - [ Emmanuel Milou ] - * Add callto: handler script for browsers and al. - * Integrate test compilation in the daemon build-system - - [ Julien Bonjean ] - * Fixed g_object_unref warning for pixbuf - * Cleaned too verbose output - * Fixed toolbar update warning - * Added support for asynchornous books open (first shot) - - [ Emmanuel Milou ] - * Add a DBus call to fetch the call details from a call ID - Ticket - #928 - - [ Julien Bonjean ] - * Improved async open books - * Fixed bug #1139 - - [ Emmanuel Milou ] - * Add a way to save account order - * commit missing files - - [ Julien Bonjean ] - * Introduced log4c (ticket #1162) - - [ Emmanuel Milou ] - * Load/save account order functionnal - ticket #813 - - [ Alexandre Savard ] - * Add CELT codec (#1143) - * Make celt frame size 256 (*1143) - - [ Julien Bonjean ] - * Switched everything to log4c (ticket #1162) - * Updated eclipse settings - - [ Emmanuel Milou ] - * Restore adding account - ticket #1172 - * Add liblog4c dependecy - ticket #1179 - - [ Alexandre Savard ] - * Double maxAvailByte for frame size in rtp (#1143) - - [ Emmanuel Milou ] - * Add User-Agent SIP header - Ticket #1173 - - [ Julien Bonjean ] - * Fixed autoresize issue (#708) - - [ Emmanuel Milou ] - * Remove libcppuint dependency for the debian packages - * Look for libsexy only if gtk version < 2.16 - Ticket #1116 - * Remove libsexy dependency for jaunty. ticket #1116 - - [ Julien Bonjean ] - * Introduced unit tests (#1146) - * Updated gitignore - * Fixed Makefile (#1146) - - [ Emmanuel Milou ] - * [TICKET #1112] Add a test on the voice buffer to send through iax - packets - * Remove doublon in dependencies - * Remove warnings from the client test framework - * Update version number to 0.9.5~beta - * Update build-package script - * Add check dependency in build-deps control file field - * Create debian files for the new sflphone-client-gnome - * [TICKET #1212] Add Replaces field in control files - * [TICKET #1212] Fix manpages installation path - * [TICKET #1212] Add maintainer scripts to create alternatives - * [#1212] Update the manpages generation - edit preinst maintainer - script - * [#1212] Fix reference error in manpage - * [#1212] Add missing files on the client side - * [#1212] Fix debian docs files - no TODO file - * [1212] Fix manpage creation problem - * [#1220] Generate client-side glue files and marshaller at - compilation time - * [#1220] Generate server-side glue files at compilation time - * [#1212] Change binary name to sflphone-client-gnome - * [#1212] Update .gitignore to fit the new working tree - * [#1220] Explicitly generate glue files before building the library - * [#1220] Compile dbus directory before audio - * [#1212] Create sflphone-common at the root of the repository - * [#1212] Re-add pjproject - * [#1212] Remove Makefile from repo - * [#1220] Fix Makefile.am - * [#1212] New working directory functional - * [#1212] Update .gitignore - * [#1212] Hack to make pjsip compile.. - * [#1220] Use non-installed binary for dbusxx-xml2cpp - * [#1212] Add descriptive files, remove unuseful scripts from tools/ - - [ Alexandre Savard ] - * Restore speex codecs - * add frame size for celt (#1143) - * add framesize to codec, independant from audiolayer (#1143) - * use codec frame size in rtp (#1143) - * compute fixed_codec_framesize (#1143) - * do not resample if not required (#1143) - * add condition on resampling for decoder (#1143) - * add a condition on bytesAvail == 0 from mic data - * no maximum in rtp decode (#1143) - * compute maximum for decoding (#1143) - - [ Emmanuel Milou ] - * [#1146] Implement unitary tests on the client-side - - [ Alexandre Savard ] - * use float instead of int to compute max nb of sample (#1143) - * add nbSampleMax for unresampled data (#1143) - * make thread sleep during 5 ms insead of 20 (#1143) - * use unix usleep (#1143) - * 50 usecond thread!!!!! (#1143) - * try with the smallest compression (#1143) - * use timer set at framesize (#1143) - - [ Emmanuel Milou ] - * [#1161] Restore changelog version - - [ Alexandre Savard ] - * Remove celt stuff - - [ Emmanuel Milou ] - * [#1161] Update changelog - * [#1220] Add Conflicts: sflphone in debian control files - * [#1179] Add liblog4c3 runtime dependency - * [#1212] FIx typo error in dependency list for itnrepid - * [#1212] FIx .desktop file to point on the right exec - * [#1212] Modify changelog replacing tag - - [ Sflphone Project ] - * "[#1262] Updated changelogs for version 0.9.5-0ubuntu1~beta" - - [ Emmanuel Milou ] - * [#1212] restore changelogs - - [ Sflphone Project ] - * [#1262] Updated changelogs for version 0.9.5-0ubuntu1 Snapshot 2009- - 04-27 - - [ Emmanuel Milou ] - * [#1212] restore changelogs - - [ Sflphone Project ] - * [#1262] Updated changelogs for version 0.9.5-0ubuntu1~beta - - [ Emmanuel Milou ] - * [#1212] restore changelogs - - [ Sflphone Project ] - - -- Sflphone Project <sflphone@mtl.savoirfairelinux.net> Mon, 27 Apr 2009 17:00:03 -0400 - -sflphone-client-kde (0.9.4-0ubuntu2) SYSTEM; urgency=low - - [ Alexandre Savard ] - * Restore speex and GSM detection - - [ Emmanuel Milou ] - * Fix bug #1090 - - -- Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> Wed, 8 Apr 2009 11:29:15 -0500 - -sflphone (0.9.4-0ubuntu1) SYSTEM; urgency=low - - [ Emmanuel Milou ] - * Integrate DBus-c++ and libiax2 in the main build system - * Clean up in the working repository - * Reorder hooks configuration panel - * Protect case when no codecs are active - * Fix some return values - * Add unitary tests for the hook manager (premisces) - - [Yun Liu] - * Update chinese translation - - [Sven Werlen] - * Update german translation - - [Hussein Abdallah] - * Update russian translation - - [Maxime Chambreuil] - * Update spanish translation - - -- Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> Fri, 3 Apr 2009 18:29:15 -0500 - - -sflphone (0.9.4-rc1) SYSTEM; urgency=low - - [ Emmanuel Milou ] - * Fix bug while trying to hold/unhold several simultaneous call - * Improve address book build system - * Implement SIP url popup on incoming call - * Improve GTK+ panel configuration - [ Julien Bonjean ] - * GTK+ client refactoring - * GTK+ clean up - * Address book improvment - - -- Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> Fri, 27 Mar 2009 18:29:15 -0500 - -sflphone (0.9.4-0beta1) SYSTEM; urgency=low - - [ Alexandre Savard ] - * Display codec used during conversation on the GUI - * Enable/disable STUN parameters at runtime - * Refactor search bar use - [ Emmanuel Milou ] - * Build system fixes - * Implement SIP re-invite - * Implement IP to IP call - [ Julien Bonjean ] - * Integrate GNOME address book based on evolution data server - - -- Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> Fri, 20 Mar 2009 18:29:15 -0500 - - -sflphone (0.9.3-0ubuntu3) SYSTEM; urgency=low - - [ Alexandre Savard ] - * Both playback and record streams in PA_STREAM_CORKED (pulseaudio) - * Use PLUGHW device for ALSA capture - * Functional IAX and SIP recording for voicemail - * Use the less CPU-consuming interpolator algorithm for resampling - * Display in GTK GUI the codec used in conversation - * GTK GUI use ASCII instread of utf-8 - * Add record menus in GTK GUI - * Put on hold when dialing a new number - * AccountID's are saved in the history - - [ Emmanuel Milou ] - * Integrate DBUS C++, libiax2 in the git repository - * Update website - * Use libspeexdsp only if available on the system - * Updated .gitignore file - - [Cyrille Béraud] - * Account assistant manager improvment - * Add an email request when creating a new account to receive voicemails - - -- Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> Sat, 14 Feb 2009 13:29:15 -0500 - -sflphone (0.9.3-0ubuntu2) SYSTEM; urgency=low - - [ Emmanuel Milou ] - * Add compilation note in README - * Use default ALSA plugin for capture - * Fix the ALSA capture problem one more time - * Clean up debug messages in dbus.c - * Add libspeexdsp dependency - * Remove implicit declaration compilation warnings - * Fix links in the website, add release note - * Change capture for the website front page - * Add alsa devel dependency in build-depends control file field - * Clean up, indentation, try to handle latency problems in iax/pulseaudio - * Remove pjsip generated files from the repo - * Use the previous declared curAlias function in accountwindow - * Fix bug in history call duration when the call fails - * Remove runtime warning in the GTK+ client - * Add librsvg2-common dependency to load SVG under KDE - * Refresh .gitignore - * Update locales files + french translation - * Add configuration panel for future noise reduction - * Add configuration panel for audio record module - * Daemon less verbose; accounts don't try to access STUn options anymore - * Fix typo in configwindow - * Add content in the official website - * use a GTK_STOCK icon for the record button - * Complete description text in the assistant manager - * Add libtool flags in client configure.ac - * Remove unuseful dependency (snd) - * Fix SIP transfer problems - * Remove previous version of PJSIP from the repo - * Upgrade PJSIP to version 1.0.1 - * Add the new website source in the repository - * Use libspeexdsp for silence detection only if available - - [ Loïc Faure-Lacroix ] - * Ajout du logo gpl3 - * Ajout des images - * Ajout de la section screenshot pour le site - * Ajout du favicon dans le header - * Modification des cartes - - [ Alexandre Savard ] - * Clean up <speex/libspeexdsp> - * Small cleanup - * Save Wave fixed - * Fix new call button when recording - * libspeexdsp added - * Recording: default home folder at startup - * Minor changes to config window - * IAX recording fixed - * Set / get recording path, still need some GTK for client - * AudioRecord file name format - * Now recording in HOME folder - - [ Cyrille Béraud ] - * Fix bug in reqaccount.c - - [ Maxime Chambreuil ] - * Update spanish translation - - [Yun Liu ] - * Update chinese translation - - [ Hussein Abdallah ] - * Update russian translation - - -- Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> Sat, 14 Feb 2009 13:29:15 -0500 - -sflphone (0.9.3-0ubuntu1) SYSTEM; urgency=low - - * Remove debug - * Join thread before leaving - * Fix implicit declaration in reqaccount - * Add REST code to build the request to server - * Fix GValue initialization warnings - * Update version number, fix implicit declaration, fix GTK markup - warnings - * Apply patch to create custom SIP account from our own server - - -- Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> Fri, 06 Feb 2009 19:17:32 -0500 - -sflphone (0.9.2-2ubuntu9) SYSTEM; urgency=low - - [ Alexandre Savard ] - * Speex audio codec preprocessing initialization - * peer hung up segmentation fault solved - * Stop recording when transfering - * Terminate only one call - * Add isRecording() function - * Fix call_icon GTK client - * Fix SIPCallClose() function, recorded file now close properly - * Function terminateSIPCall added in sipvoiplink and managerimpl - * Fix thread destructor - * setRecordingOption function implement in audiorecord - * Record now implemented in Call class - * Record interface complete (on hold erase previous recording) - * Added recButton in client - * Added: record button related icons - * Record button added - * Overload AudioRecord::recData to get mic and speaker data mixed - * Recording now in audiortp::run() method - * Audio recording working in AudioRTP: receiveSessionForSpeaker - * Open/close a wave file when pulse audio stream start/stop - - [ Emmanuel Milou ] - * Fix path for GTK+ icons; clean up - - -- Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> Thu, 05 Feb 2009 18:27:53 -0500 - -sflphone (0.9.2-2ubuntu8) SYSTEM; urgency=low - - [ Emmanuel Milou ] - * Update changelogs - * Fix bug in merge and in Makefile.am - * Terminate only one call - * Disable PJsip shutdown when changing STUN parameters - * Function terminateSIPCall added in sipvoiplink and managerimpl - * Add a timer to the alsa thread to not jam the CPU load - * Fix bug in sipvoiplink.cpp - * Clean shutdown of pulseaudio on quiting - * Fix DTMF at first start with Pulseaudio - * Remove zeroconf from the build system - * Add a library manager + exception handling - * Clean up in the working directory - * Better handling of capture XRUNs - * Restore mic adjust volume on ALSA layer - * Protect device ALSA operation if not opened - * Fix the switching layer bug - * Use dynamic_cast<> to use audiolayer-specific methods - * Open the audio devices only once at startup - * Refactoring of the ALSA part - * Functional plug-in manager - * Use a C++ thread to handle tones and DTMF in ALSA - * Restore IAXVoIPLink, restore Mutex - * Make the plugins registering against the plugin manager - * Migrate to 1->N relationship between voiplink and accounts - * API plugin for registration - * Use C++ thread in SIP, move everything in sipvoiplink - * Complete singleton pattern for the plugin manager - * Add -Wno-return-type compilation flag to remove warnings; Update - version number in configure.ac - * Add the dynamic loading for the plugin framework; integate unittest - - [ Yun Liu ] - * Update rpm spec file - * modify build package script and spec file for suse - - [ Alexandre Savard ] - * Add audiorecorder plugin and testaudiorecorder - * Add audio Recording class, edit global.h - - -- Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> Wed, 04 Feb 2009 14:00:30 -0500 - -sflphone (0.9.2-2ubuntu7) SYSTEM; urgency=low - - [ Emmanuel Milou ] - * Update changelog to 0.9.2-6 - * Fix some dbus-glib implementation details on the client side - * Init history after dbus initialization - * Add error checking in useragent; Clean sipvoiplink - * Prevent crash when trying to call an empty number - * Set the volume of the playback stream to PA_VOLUME_NORM at startup - * Fix GTK+ generic value double initialization - * Fix jaunty control file dependency problems - * Fix jaunty control file dependency problems - - [ Yun Liu ] - * Fix bug ticket # 137 - * Tolerant to gsm library of OpenSuse 11 - - [ Sven Werlen ] - * Update german translation - - -- Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> Fri, 23 Jan 2009 17:48:13 -0500 - -sflphone (0.9.2-2ubuntu6) SYSTEM; urgency=low - - [ Emmanuel Milou ] - * Migrate STUN configuration to the main config window - * Update french translation - * Other tiny memory leaks - * Fix memory leak in sampleconverter.cpp - * Generate packages from the release branch - * update the build package script - * modify the control files with architecture=any - * Remove valgring uninitialized value - * IAX and SIP use the same global variables to set account - configuration ; fix broken code - - [ Maxime Chambreuil ] - * Update spanish translation - - [ Hussein Abdallah ] - * Update russian translation - - [ Yun Liu ] - * Update translation files - * Fix the bug when user uncheck the account which fails in the - previous registration - * Add stun error status - * Fix bug ticket #143 - * Script for auto-install dependencies - * Fix bug ticket #140 - * Fix bug ticket 141 - * Fix the reregister process when user change the details of an - account - - -- Emmanuel Milou <manu@sulfur.inside.savoirfairelinux.net> Fri, 16 Jan 2009 18:19:05 -0500 - -sflphone (0.9.2-2ubuntu5) SYSTEM; urgency=low - - * Fix memory leak in the pulseaudio callback - * Update debian package generation script - * Warnings removal in GTK+ client - * Clean adjust volume method in alsalayer - * Plug the sflphone playback volume control to the pulseaudio volume - manager - * Display the date in history according to the current locale - * Generate the changelog according to the git commit messages - * Complete header in chinese translation file - * Use the right gpg key to sign the packages - * add debian jaunty jackalope support - - -- Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> Wed, 14 Jan 2009 21:17:20 -0500 - -sflphone (0.9.2-2ubuntu4) SYSTEM; urgency=low - - [ Emmanuel Milou ] - * add german translation - - [ Yun Liu ] - * Fix GUI crash in Ubuntu8.10 64bit system - - -- Yun Liu <yun.liu@savoirfairelinux.com> Thu, 08 Jan 2009 13:08:51 -0500 - -sflphone (0.9.2-2ubuntu3) SYSTEM; urgency=low - - [ Emmanuel Milou ] - * The main thread synchronizes the ringtone thread - * disable custom ringtone for the ALSA layer - * Fix the Makefile.am in man directory, add a SEE ALSO section - - [ Yun Liu ] - * Fix daemon crash caused by the previous patch ( for bug ticket #129) - - -- Yun Liu <yun.liu@savoirfairelinux.com> Tue, 06 Jan 2009 16:18:38 -0500 - -sflphone (0.9.2-2ubuntu2) SYSTEM; urgency=low - - * Fix bug ticket #129 - - -- Yun Liu <yun.liu@savoirfairelinux.com> Wed, 5 Jan 2009 15:54:53 -0500 - -sflphone (0.9.2-2ubuntu1) SYSTEM; urgency=low - - * Migrate from eXosip library to pjsip - * Add multiple SIP accounts support - * Fix ringtones problems - * Add a pulseaudio support - * Improve audio quality with ALSA - * Add chinese translation - * Improve spanish translation - * Migrate to a maintained C++ DBus bindings - * Clean and improve the build system - * Add build-dependency on Perl because we need pod2man to generate manpages - - -- Yun Liu <yun.liu@savoirfairelinux.com> Wed, 26 Nov 2008 09:47:53 -0500 - -sflphone (0.9.1) unstable; urgency=low - * Add a search tool in the history - * Migrate some gtk_entry_new to sexy_icon_entry_new - * Bug fix (Ticket #78): The voicemail password isn't displayed anymore in - the history tab - * Add the SIP registration expire value in the user file. - - -- Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> Thu, 22 May 2008 11:14:25 -0500 - -sflphone (0.9.0) unstable; urgency=low - * Add history features - * Call date - * Call duration - * Mouse events in the history tab - * Smooth switch from the history tab to the calls tab - * Remove most of GTK-Critical warnings - - -- Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> Wed, 13 May 2008 16:58:25 -0500 - -sflphone (0.9-2008-06-06) unstable; urgency=low - * Audio bug correction: capture stopped after a few minutes of conversation - with USB Plantronics sound card - - -- Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> Tue, 06 May 2008 16:58:25 -0500 - -sflphone (0.9-2008-05-06) unstable; urgency=low - * Bug correction: account creation with the assistant - * GTK+ warnings removal - * libnotify warnings removal - * Remove aliasing on the SFLphone logo - - -- Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> Mon, 05 May 2008 16:58:25 -0500 - -sflphone (0.9) unstable; urgency=low - * Clean dependencies ( removal of libboost ) - * Several GTK improvement and updates - -account window - -configuration window - * Migrate from GtkCheckMenuItem to GtkImageMenuItem - * ALSA standard I/O transfers: MMAP instead of R/W - * Fix speex audio quality - * IAX2 protocol - -Fix hold/unhold situation - -Add on hold music - * SIP protocol - -Ringtone on incoming call - -Fix transfer situation - * Add desktop notification ( libnotify ) - * Improve the system tray icon behaviour - * Improve registration error handling - * Register/unregister from the account window takes effect without starting back SFLphone - * Compilation warnings removal - * Call history - * Add an account configuration wizard - - -- Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> Wed, 30 Apr 2008 16:58:25 -0500 - -sflphone (0.8.2) unstable; urgency=low - * Internationalization of the GTK GUI - * English / French - * STUN support - * Slight modifications of the graphical interface ( tooltips, dialpad, ...) - - -- Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> Fri, 21 Mar 2008 11:37:53 -0500 diff --git a/tools/build-system/distributions/ubuntu/debian-sflphone-client-kde/compat b/tools/build-system/distributions/ubuntu/debian-sflphone-client-kde/compat deleted file mode 100644 index 7ed6ff82de..0000000000 --- a/tools/build-system/distributions/ubuntu/debian-sflphone-client-kde/compat +++ /dev/null @@ -1 +0,0 @@ -5 diff --git a/tools/build-system/distributions/ubuntu/debian-sflphone-client-kde/control.intrepid b/tools/build-system/distributions/ubuntu/debian-sflphone-client-kde/control.intrepid deleted file mode 100644 index 98d0dd6ce2..0000000000 --- a/tools/build-system/distributions/ubuntu/debian-sflphone-client-kde/control.intrepid +++ /dev/null @@ -1,20 +0,0 @@ -Source: sflphone-client-kde -Maintainer: SavoirFaireLinux Inc <jeremy.quentin@savoirfairelinux.com> -Section: kde -Priority: optional -Build-Depends: debhelper (>= 5), cmake (>=2.6), kdepimlibs5-dev (>=4.1.4), libcommoncpp2-dev (>=1.6.2), libqt4-dev (>=4.3) -Standards-Version: 3.7.3 - -Package: sflphone-client-kde -Priority: optional -Architecture: any -Depends: sflphone-common (=VERSION), libcommoncpp2-1.6-0, kdepimlibs5 (>=4.1.4), libqt4-dbus (>=4.4.3), libqt4-svg (>=4.4.3), libqtgui4 (>=4.4.3) -Replaces: sflphone -Conflicts: sflphone -Homepage: http://www.sflphone.org -Description: KDE client for SFLphone - Provide a KDE client for SFLphone. - SFLphone is meant to be a robust enterprise-class desktop phone. - SFLphone is released under the GNU General Public License. - SFLphone is being developed by the global community, and maintained by - Savoir-faire Linux, a Montreal, Quebec, Canada-based Linux consulting company. diff --git a/tools/build-system/distributions/ubuntu/debian-sflphone-client-kde/control.jaunty b/tools/build-system/distributions/ubuntu/debian-sflphone-client-kde/control.jaunty deleted file mode 100644 index 98d0dd6ce2..0000000000 --- a/tools/build-system/distributions/ubuntu/debian-sflphone-client-kde/control.jaunty +++ /dev/null @@ -1,20 +0,0 @@ -Source: sflphone-client-kde -Maintainer: SavoirFaireLinux Inc <jeremy.quentin@savoirfairelinux.com> -Section: kde -Priority: optional -Build-Depends: debhelper (>= 5), cmake (>=2.6), kdepimlibs5-dev (>=4.1.4), libcommoncpp2-dev (>=1.6.2), libqt4-dev (>=4.3) -Standards-Version: 3.7.3 - -Package: sflphone-client-kde -Priority: optional -Architecture: any -Depends: sflphone-common (=VERSION), libcommoncpp2-1.6-0, kdepimlibs5 (>=4.1.4), libqt4-dbus (>=4.4.3), libqt4-svg (>=4.4.3), libqtgui4 (>=4.4.3) -Replaces: sflphone -Conflicts: sflphone -Homepage: http://www.sflphone.org -Description: KDE client for SFLphone - Provide a KDE client for SFLphone. - SFLphone is meant to be a robust enterprise-class desktop phone. - SFLphone is released under the GNU General Public License. - SFLphone is being developed by the global community, and maintained by - Savoir-faire Linux, a Montreal, Quebec, Canada-based Linux consulting company. diff --git a/tools/build-system/distributions/ubuntu/debian-sflphone-client-kde/copyright b/tools/build-system/distributions/ubuntu/debian-sflphone-client-kde/copyright deleted file mode 100644 index fbde2314be..0000000000 --- a/tools/build-system/distributions/ubuntu/debian-sflphone-client-kde/copyright +++ /dev/null @@ -1,28 +0,0 @@ -This package was debianized by Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> on -Fri, 3 Apr 2009 09:47:53 -0500. - -It was downloaded from the git repository of SFLphone: git://sflphone.org/git/sflphone.git - -Upstream Author: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> - -Copyright: - -Savoir-Faire Linux Inc. - -License: - -This software is copyright (c) 2004-2009 Savoir-Faire Linux inc. - -You are free to distribute this software under the terms of -the GNU General Public License version 3. -On Debian systems, the complete text of the GNU General Public -License can be found in the file `/usr/share/common-licenses/GPL'. - -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., 51 Franklyn St, Fifth Floor, Boston, MA 02110-1301, USA. diff --git a/tools/build-system/distributions/ubuntu/debian-sflphone-client-kde/cron.d b/tools/build-system/distributions/ubuntu/debian-sflphone-client-kde/cron.d deleted file mode 100644 index d11e611777..0000000000 --- a/tools/build-system/distributions/ubuntu/debian-sflphone-client-kde/cron.d +++ /dev/null @@ -1,4 +0,0 @@ -# -# Regular cron jobs for the sflphone package -# -0 4 * * * root sflphone_maintenance diff --git a/tools/build-system/distributions/ubuntu/debian-sflphone-client-kde/dirs b/tools/build-system/distributions/ubuntu/debian-sflphone-client-kde/dirs deleted file mode 100644 index e2dc98dcb2..0000000000 --- a/tools/build-system/distributions/ubuntu/debian-sflphone-client-kde/dirs +++ /dev/null @@ -1,7 +0,0 @@ -usr/bin -usr/share/applications -usr/share/pixmaps -usr/share/sflphone -usr/share/locale -usr/share/doc -usr/share/man diff --git a/tools/build-system/distributions/ubuntu/debian-sflphone-client-kde/docs b/tools/build-system/distributions/ubuntu/debian-sflphone-client-kde/docs deleted file mode 100644 index 9830da213f..0000000000 --- a/tools/build-system/distributions/ubuntu/debian-sflphone-client-kde/docs +++ /dev/null @@ -1,5 +0,0 @@ -NEWS -README -ChangeLog -AUTHORS - diff --git a/tools/build-system/distributions/ubuntu/debian-sflphone-client-kde/manpages b/tools/build-system/distributions/ubuntu/debian-sflphone-client-kde/manpages deleted file mode 100644 index 919cf59a8e..0000000000 --- a/tools/build-system/distributions/ubuntu/debian-sflphone-client-kde/manpages +++ /dev/null @@ -1,2 +0,0 @@ -debian/sflphone-client-kde/usr/share/man/man1/sflphone.1 -debian/sflphone-client-kde/usr/share/man/man1/sflphone-client-kde.1 diff --git a/tools/build-system/distributions/ubuntu/debian-sflphone-client-kde/postinst b/tools/build-system/distributions/ubuntu/debian-sflphone-client-kde/postinst deleted file mode 100644 index 20a15b4f8f..0000000000 --- a/tools/build-system/distributions/ubuntu/debian-sflphone-client-kde/postinst +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/sh -e - -update-alternatives --install /usr/bin/sflphone sflphone /usr/bin/sflphone-client-kde 200 \ - --slave /usr/share/man/man1/sflphone.1.gz sflphone.1.gz \ - /usr/share/man/man1/sflphone-client-kde.1 - -update-alternatives --set sflphone /usr/bin/sflphone-client-kde - -exit 0 diff --git a/tools/build-system/distributions/ubuntu/debian-sflphone-client-kde/preinst b/tools/build-system/distributions/ubuntu/debian-sflphone-client-kde/preinst deleted file mode 100644 index fdaa8ab8ec..0000000000 --- a/tools/build-system/distributions/ubuntu/debian-sflphone-client-kde/preinst +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/sh -# postrm script for sflphone -# -# see: dh_installdeb(1) - -set -e - -package=sflphone-client-kde - -case "$1" in - install|upgrade) - ;; -esac - -exit 0 diff --git a/tools/build-system/distributions/ubuntu/debian-sflphone-client-kde/prerm b/tools/build-system/distributions/ubuntu/debian-sflphone-client-kde/prerm deleted file mode 100644 index 5e90217068..0000000000 --- a/tools/build-system/distributions/ubuntu/debian-sflphone-client-kde/prerm +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/sh -e - - -if [ "$1" = "remove" ]; then - # Remove alternatives symlink set in postinst - update-alternatives --remove sflphone /usr/bin/sflphone -fi diff --git a/tools/build-system/distributions/ubuntu/debian-sflphone-client-kde/rules b/tools/build-system/distributions/ubuntu/debian-sflphone-client-kde/rules deleted file mode 100755 index f1edaffc9d..0000000000 --- a/tools/build-system/distributions/ubuntu/debian-sflphone-client-kde/rules +++ /dev/null @@ -1,118 +0,0 @@ -#!/usr/bin/make -f -# -*- makefile -*- -# Sample debian/rules that uses debhelper. -# This file was originally written by Joey Hess and Craig Small. -# As a special exception, when this file is copied by dh-make into a -# dh-make output file, you may use that output file without restriction. -# This special exception was added by Craig Small in version 0.37 of dh-make. - -# Uncomment this to turn on verbose mode. -#export DH_VERBOSE=1 -export DH_OPTIONS - -package=sflphone-client-kde - -CXX = g++-4.0 -# CFLAGS = -Wall -g -# DEB_INSTALL_PAGES_sflphone_client_kde = sflphone.1 sflphone-client-kde.1 - -configure: configure-stamp -configure-stamp: - dh_testdir - # Add here commands to configure the package. - cmake . -DCMAKE_INSTALL_PREFIX=/usr - touch configure-stamp - - -#Architecture -build: build-arch build-indep - -build-arch: build-arch-stamp -build-arch-stamp: configure-stamp - - # Add here commands to compile the arch part of the package. - $(MAKE) - touch $@ - -build-indep: build-indep-stamp -build-indep-stamp: configure-stamp - - # Add here commands to compile the indep part of the package. - #$(MAKE) doc - touch $@ - -clean: - dh_testdir - dh_testroot - rm -f build-arch-stamp build-indep-stamp configure-stamp - # Add here commands to clean up after the build process. - [ ! -f Makefile ] || $(MAKE) distclean - -ifneq "$(wildcard /usr/share/misc/config.sub)" "" - cp -f /usr/share/misc/config.sub config.sub -endif -ifneq "$(wildcard /usr/share/misc/config.guess)" "" - cp -f /usr/share/misc/config.guess config.guess -endif - dh_clean - -install: install-indep install-arch -install-indep: - dh_testdir - dh_testroot - dh_clean -k -i - dh_installdirs -i - # Add here commands to install the package into debian/sflphone. - -install-arch: - dh_testdir - dh_testroot - dh_clean -k -s - dh_installdirs -s - # Add here commands to install the arch part of the package into - # debian/tmp. - $(MAKE) DESTDIR=$(CURDIR)/debian/$(package) install - dh_install -s -# Must not depend on anything. This is to be called by -# binary-arch/binary-indep -# in another 'make' thread. - -binary-common: - pwd - dh_testdir - dh_testroot - dh_installchangelogs ChangeLog - dh_installdocs - dh_installexamples -# dh_installmenu -# dh_installdebconf -# dh_installlogrotate -# dh_installemacsen -# dh_installpam -# dh_installmime -# dh_python -# dh_installinit -# dh_installcron -# dh_installinfo -# dh_installman - dh_link - dh_strip - dh_compress - dh_fixperms -# dh_perl - dh_makeshlibs - dh_installdeb -# dh_shlibdeps - dh_gencontrol - dh_md5sums - dh_builddeb -# Build architecture independant packages using the common target. -binary-indep: build-indep install-indep - $(MAKE) -f debian/rules DH_OPTIONS=-i binary-common - -# Build architecture dependant packages using the common target. -binary-arch: build-arch install-arch - $(MAKE) -f debian/rules DH_OPTIONS=-s binary-common - -binary: binary-arch binary-indep -.PHONY: build clean binary-indep binary-arch binary install install-indep install-arch configure diff --git a/tools/build-system/distributions/ubuntu/debian-sflphone-common/changelog b/tools/build-system/distributions/ubuntu/debian-sflphone-common/changelog deleted file mode 100644 index 3d95374e25..0000000000 --- a/tools/build-system/distributions/ubuntu/debian-sflphone-common/changelog +++ /dev/null @@ -1,1284 +0,0 @@ -sflphone-common (0.9.6-SYSVER) SYSTEM; urgency=low - - ** 0.9.6 ** - - * Documentation on echo test - * [redmine_down] codec names not displayed in total - * [redmine_down] crash when hanging up a dialing call because tries to - add it to history whereas no starttime - * [#1927] alternate every time screen changed to call history - * [#1886] clean code - * [#1886] debug messages when loading history removed - * [redmine_down] sflphone-kde icons - * [#1855] Update language files - * [#1502] Update version number - * [redmine_down] setHistory at close - * [#redmine_down] Handle PJ_DECLINE_SC as failure - * [#1923] Fix segmentation fault when adding a new account - * [#1923] Check on iterator before setting the config - * [#1904] Added mnemonic to tabs in sflphone-client-gnome. - * [#1905] The daemon was not sending the currentSelectedCodec signal - on dbus when answering a call. - * [#1922] Default values set to all account details - * [#1886] Spinbox reg expire enables apply, and address book is not - visible when disabled - * [#1905] Bug fix for segmentation fault caused by an empty string, - * [#1910] Warnings in test directory - * [#1919] Error fixed - * [#1855] Update russian translation - Hussein Abdallah - * [#1910] Remove files - * [#1919] fixed - * [#1777] Code indentation - * [#1918] fixed - * [#1917] fixed - * [#1910] Remove warnings compilation in src - * [#1886] removed AccountListModel in configskeleton - * [#1914] - * [#1911] check previous and new port - * [#1910] Remove compilation warnings in src/dbus and src/history - * [#1910] Remove compilation warnings in src/audio - * [1855] Update german translation - Sven Werlen - * [#1909] removed - * [#1906] Done - * [#1904] The registration expire value is now configurable from the - * Cleaned up debug messages. - * [#1886] separated initCallItem in two functions - * [#1886] reversed error in commit - * [#1886] clean debug - * [#1886] changed Name of classes and files - * [#1886] clean - * [#1870] In call_state_cb (dbus.c:126), _time_stop was overridden by - the actual time. - * [#1884] Added some new gpg flags to prevent tty warnings - * [#1886] Clean audio config dialog - * [#1886] No more compile warnings. + 1 comm - * [#1872] Check if the user input is smaller than PJ_MAX_HOSTNAME. - * [#1886] - * [#1785] Fixed build when no new commit - * [#1852] If chosen by the user, the hostname can now be solved and - used - * [#1871] * and # inverted back - * [#1869] Conditional compilation that checks if - * [#1309] removed test in main - * [#1425] Put actions in SFLPhone window class instead of ui view, - made a separate toolbar for screens. - - -- SFLphone Automatic Build System <team@sflphone.org> Mon, 27 Jul 2009 09:53:00 -0400 - -sflphone-common (0.9.6~rc2-SYSVER) SYSTEM; urgency=low - - ** 0.9.6~rc2 ** - - * [#1755] Remove generated file - * [#1753] restore ilbc ... - * [#1866] Methods getSipPort and setSipPort now have an effect on the - * [#1753] make pjsip compile without ilbc. Use ./autogen.sh --disable- - ilbc-codec - * [#1855] Fix error in russian translation - * [#1805] Remove the old flawed signal mechanism which was failing in - * [#1855] Refresh translation - * Spanish translation finished + po README files updated + echo's in - copy-in-clients - * [#1850] Yun made the chinese HK-CN translation - * [#1848] Fix transfer interface bug - * [#1862] At install, kde client installs only french translation file - * [#1841] A new fallback mechanism was added to the internal resolver - in PJSIP. - * Started AccountList model/view - * [#1855] Remove po subdir in Makefile.am - * [#1855] Fix typo error in sflphone-client-gnome - * [#1855] Do not generate Makefile in sflphone-common/po - * [#1855] Copy translation files into both clients dirs - * [#1855] Remove po dir from sflphone-common - * Comments added - * [#1860] mailbox->voicemail... - * make scripts executable - * [#1855] French translation - * [#1855] Chinese zh_HK partially filled... - * [#1859] An unnamed pipe monitored by poll() was added. When we want - to - * [#1855] Sven completed the first part of the german translation - * [#1855] Cantonese manually filled for already translated, almost - equal strings - * [#1855] Merge russian translation - * [#1855] Spanish manually filled for already translated, almost equal - strings - * [#1855] Update german translation in ./lang/de - * [#1858] This problem was fixed by removing a useless line in - * [#1855] merged existing translations in lang/ sflphone.po's - * [#1842] [#1843] An attempt at improving the expected behaviour that - can't - * [#1855] added po folder in gnome client and scripts for copying from - common lang folder to clients - * [#1853] Edit before call does nothing on call history - * Put most language entries possible in common. From 300 to 250 - entries. Stays underscores problem. Scripts for copy in clients. - * commit to merge master - * [#1825] Changed "Bad authentification" to "Authentication Failed". - * common po files - * [#1753] Remove ILBC from pjproject - - -- SFLphone Automatic Build System <team@sflphone.org> Fri, 17 Jul 2009 19:12:44 -0400 - -sflphone-common (0.9.6~rc1-SYSVER) SYSTEM; urgency=low - - ** 0.9.6~rc1 ** - - * Update some version number - * [#1792] Creates .sflphone directory with permission 600. Also, - "chmod 600" after - * [#1810] GUI is now notified that the call failed. Also, a segfault - was - * [#1816] Address book search disabled when disabled address book and - enabled it back plus button stays triggered - * codeclistmodel + asynchronous loading of address book + - enable/disable address book - * [#1810] Now checking SDP answer after 200 OK. Still need to - implement full - * [#1794] Can't use the interface during a call - * Updated translation files - * Russian translation integrated - * Codec list model/view started. - * [#1807] Add configure.ac in pjproject-1.0.3 - * [#1787] closeRtpSession added in some places where it should have - been - * Use Item class for contacts and accounts - * Comments + clean code - * [#1794] Improved debug messages - * [#1805] Replaced the old and unreliable mecanism that was was - waiting for - * [#1794] Can't use the interface during a call - * [#1787] For those cases where no registered SIP account is - configured - * [#1797] Make pjsip compile - * [#1787] Minor changes. Removed useless commented line. Changed order - of - * [#1777] Code indentation - * [#1797] Update package generation with new pjsip version - * [#1798] Does not hang up when the call is building up - * [#1797] Update .gitignore with new pjsip version - * [#1797] Remove generated files from repo - * [#1797] Main build system now uses pjproject-1.0.3 - * [#1797] Add pjproject-1.0.3 - * [#1797] Remove pjproject-1.0.2 - * [#1796] Computing time optimization (samplerate conversion) - * [#1787] _audiortp->start() moved away from offhold(), - SIPCallAnswered() - * [#1312] Added new states for calls initialized by other clients - * [#1795] Crashes when adding a new account, checking it and applying - * [#1782] Missing icons - * [#1793] KDE client compilation problem - * Fake ringtone files can no longer be set. - * indentation - * [#1312] Able to fetch to differentiate incoming/ringing call state - * [#1784] Use DESTDIR variable in po Makefile - fix language file - installation - * [#1785] Fixed typo - * [#1785] Fixed changelog update - * [#1759] ./autogen.sh --prefix=/usr --with-debug to use optimization - level 0 - * [#1773] Changed snapshot naming convention - * [#1773] Removed gpg agent use, added repository cache cleaning - * [#1759] Use optimization level 0 for repository, 2 for packages - * [#1777] Code indentation/formatting - * Translated new features in french - * [#1785] Added missing changelog entry - * [#1781] Window title is SFLPhone - * [#1777] Add code indentation/formatting in the buil system - * [#1774] Can't set voicemail number in KDE account creation wizard - * [#1775] Can't modify account information for account created with - the wizard - * [#1771] Add a "Default" button in context menu to disable chosen - prior account - * [#1705] - * [#1224] Remove generated file from the repo - * [#1224] Remove generated file from the repo - * [#1762] distclean target should remove kconfig generated files - (settings.h, settings.cpp). Rename them? - * [#1761] clear history button should really clear history - * Dialpad works. - * Implemented Dialpad widget instead of building it in main view. - * Removed last occurence of the old config dialog, that made the build - crash. - * [#1755] Do not consider G722 as a dynamic payload elsewhere than in - RTP layer - * [#1753] Remove ilbc Makefile generation - * [#1756] Implement a kde configuration dialog with kconfig xt and - kconfigdialog class - * [#1755] fix audiocodec folder parsing problem - * [#1450] Reinit timestamp comparison in RTP, create session in - newOutgoingCall - * [#1753] Remove milenage third party code from pjsip - * New Config Dialog integrated in GUI.(without codecs) - * [#1753] Remove ILBC codec - * kconfig started, tr2i18n -> i18n, icons folder, accountList changed - * [#1705] Fixed Audio RTP thread creation/start - * [#1714] Fix codec negociation result handling - * [#1678] Fix audiortp payload setting - * [#1678] Put bac putData method in rtp - * [#1669] gtk_file_chooser_get_filename() support UTF-8 by default - * [#1735] Add conditions to sdp update call if call declined - * [#1737] substr of recordings destination folder to remove "file://" - should be done in client rather than in daemon - * [#1731] Enlarge audio stream buffer size - * [#1714] Missing true - * [#1317] Fixed Mandriva timeout - * [#1317] Changed tag convention - * [#1317] Cleaned git-dch - - -- SFLphone Automatic Build System <team@sflphone.org> Fri, 10 Jul 2009 15:49:56 -0400 - -sflphone-common (0.9.6~beta-SYSVER) SYSTEM; urgency=low - - ** 0.9.6~beta ** - - * spec files for mandriva and opensuse updated with buildrequires - libqt4-dev >=4.3 - * [#1700] Cannot build on ubuntu 8.10 and a few other distribs - * [#1502] Update version number where applicable - * [#1642] Update client icons - * [#1450] Clean up useless debug and comments in sipvoiplink and - audiortp - * [#1450] Remove Semaphore object in AudioRtp thread deletion - * [#1450] Audio RTP init now synchronized with Sip/SDP - * [#1693] kde client crashes when changing codecs order/activation - * [#1450] Deep refactoring of audiortp - * [#1450] setRtpSessionRemoteIp - * [#1689] getCallList at start - * [#1224] Change path in package files - * [#1450] Audio RTP initialized only once, payload and remote ip set - at runtime - * [#1450] Add setRtpSessionMedia and setRtpSessionRemoteIp address - * [#1642] Make GNOME GUI fresher and younger ;) - * [#1686] Status bar displaying used account - * added sflphone-kde icon so that it compiles - * [#1659] Ending a call causes the daemon to crash - * corrected introspection XMLs, po files... - * [#1211] g722 media descriptor in codecDescriptor - * [#1310] Install sflphoned in $(prefix)/lib/sflphone - * [#1502] Do not install test binaries and dbus utilitaries - * [#1224] hack for pjsip build system! - * [#1224] Remove pjsip binaries from repo - * [#1224] Upgrade to pjsip 1.0.2 - * [#1658] About SFLphone (bugs) - * [#1658] About SFLphone - * [#1660] Displaying all dialed numbers in a call - * Tested status bar. - * [#790] Optimize pulse audio streams parameters - * [#1678] Some usefull debug messages for mutex/semaphore deadlock - problem - * [#1669] Add/remove some usefull/unusefull debug - * [#1665] Fix latency related to pulse audio stream openning/closing - * [#1457] Make the menus and panels accessible in french - * [#1457] Improve broken keyboard accessibility in menus and conf - panels - * [#961] Instanciate only once the searchbar icons - * [#961] Restore transfer fonction - * [#961] Filter on the history type OK - * [#961] Fix compilation problems on hardy/intrepid - * [#1157] Commit missing files - * [#790] Reduce number of start/stop streams call on pulse audio - * [#1639] kde client crashes when no account registered - * [#1620] Fix the searchbar - * [#1620] Get back caltree as it was during gtkcritical area - * [#1620] Add history filter reinit function - * [#1335] Add a missing label in address book preferences - * [#1561] Update russian translation - Hussein Abdallah - * [#1605] Fix edit menu french translation - * [#961] Enable to search in the history according to the call type - * [#1449] Searchbar does not work anymore - * [#961] Add popup menu on the entry primary icon for history - * [#1317] Fixed KDE client package dependency - * [#936] speex 32 khz integration completed - * [#936] Use 320 frame size - * [#936] Test using a frame size at 320 smpls - * [#1214] Enable / Disable history - * [#1607] Fix compilation problem for ubuntu 8.10 (libsexy) - * [#1313] Implement processDataEncode processDataDecode in audiortp - * [#1613] codec list order can't be set - * Better handling of localisation + added languages + corrected - warnings + begginning of new config dialog with kconfig + 14px - account leds - * [#1214] Save and load history according to the limit timestamp + - unit tests - * [1609] Fix call number copy/paste feature - * [1607] Restore clear action icon in searchbar - * [#936] Try to decode using 1280 samples - * [#936] Add some debug - * [#936] Add .cpp file - * [#936] Oops Forgot speex 32 khz - * [#1214] Add configuration panel for history + D-Bus calls - * [#1313] Test rtp thread function, frame size, nbbytes, resampling - * [#790] Flush audio data before closing audio streams - * [#1214] History displays local time - * [#1214] Skip empty field on display - * [#1214] Associate an account to an history entry - * [#1342] Get addressbook options sensitive/non-sensitive - * [#1211] Clean up and comments - * [#1211] Get back to 20 ms framesize - * [#1211] Use sendImmediate instead of putData in RTP - * [#1211] Fix nb byte available in RTP - * [#1211] Clear condition on maxNbSamples in RTP - * [#1211] Fix max byte available in RTP session - * [#1211] G722: Use 160 samples per frame instead of 320 - * [#1211] Test using a dynamic payload - * [#1211] Test using a dynamic payload type - * [#1211] Rename size variable (nb_samples, nb_bytes) - * [#1211] Test g722 ip-to-ip sending twice the data lenth - * [#1211] Test g722 ip-to-ip - * [#1214] Do not select an history item by default at startup - * [#1214] Remove some compilation warnings - * [#1214] Handle empty field - remove g_print - * [#1214] Add each history item only once - * [#1214] Handle call timestamps properlier - * [#1214] Do not need timestamp files anymore - * [#1214] Use the saved date for history entry - * Clean up - * [#1214] Client doesn't crash if the D-Bus call fails - * [#1214] Client is able to save its history - still some glitches - * [#1211] Forgot 16000 for g722 - * [#1211] G722 initialization - * [#1214] Save name/number, successfully load the history if no fields - are empty - * [#1499] Fixed destination directory bug - * [#1214] Restore all the functionalities; peer name/number way more - easy to handle !! - * [#1214] Add callable_object instead of call_t, refactoring - * [#1211] Test with polycom soundstation 16000 - * [#1211] Remove C like inline function in g722 codec - * [#1342] Finalize gnome client preference window formating - * [#1214] Retrieve the history when the gnome client startsup - * [#1306] Implement localization for KDE client - * [#1593] enable accounts apply button when account checked/unchecked - * [#1214] Implement the dbus calls on server side - * [#1214] Add serialized/unserialized functions to pass data on DBUS - * [#1342] Formating gnome client configuration windows - * [#1214] Save sucessfully a map of history items - * [#1499] Removed multiple jobs compilation for KDE client (2) - * [#1214] Load history from file into memory, add unit tests - * [#1534] Throws a length_error exception in case URL exceeds - std::string max_size - * [#1499] Removed multiple jobs compilation for KDE client - * [#1565] make account leds smaller - * [1430] Fix dbus debug - * [#1562] crashes when trying to change item of a call of state "OVER" - * [#1116] Fix compilation bug - * [#1317] Added mandriva and opensuse-11 64 bits - * [#1108] Add messges in main window concerning transfer success - failure - * [#1116] Fix compilation problems - * [#1211] g722 Makefile - * [#1108] Client side transferFailed/trasferSucceded signals handling - * [#1211] G722 mostly completed, - * [#1555] make bigger toolbar (24x24) - * [#1551] remove default mailbox number in wizard and disable mailbox - button when first account doesn't have mailbox number - * [#1342] Re-add sflphone manpages - * [#1116] Fix compilation on non-jaunty distros - * [#1317] Fixed opensuse startup sleep - * [#1108] Add a signal in the client to notify successful or failed - transfer - * [#1108] Dbus signals concerning call transfer success/failure - * [#1317] Added opensuse to automatic build system - * [#1223] Fix manpages bug - * [#1060] german translation glitch - * Clean up some gnome client warnings - * [#1547] replace ugly account leds by beautiful icons - * [#1548] add close button that hides windowand just hide on clicking - the cross - * [#1549] put introspec XMLs in the client's source - * [#1312] Implement getCallList D-BUS method - * [#1116] Clear text in history and contacts - * [#1499] KDE integration - * [#1469] Modify header linkers in dbus-c++'s Makefile.am's - * [#1469] Remove examples folder from dbus-c++ - * [#1214] History integration in build system; unit test squeleton - * [#1317] Cleaning - * [#1469] Remove configure stuff in dbus-c++ - * [#1469] Add unofficial mainline dbus-c++ - * [#1469] Remove dbus-c++ from freedesktop - * [#1430] Bring account changed signal/callback back to normal - * [#1060] Update german translation - Sven Werlen - * [#1430] Add marshaller one string define - * [#1430] Send account change signal broadcast using account id - * [#1430] Remove condition on setRegistrationState, cause stun to - crash - * [#1317] Centralized version handling - * [#1317] Fixed version number on sfl-git-dch - * [#1317] Refactoring for new distributions - * [#1215] Fix account order at startup if latency - * [#1088] Restore sip dns srv - * [#1214] Add squeleton for history manager - * [#1430] Add accout id to accout changed method - * [#1430] No connectionStatusNotification (account changed) if no - changes - * [#1538] Add COPYING file - * [#1430] Add audio rtp thread tests - * [#1317] Changed version detection - * [#1538] Document license in libs/stund - * [#1317] Added version files - * [#1538] Apply François patches - debian packages - * [#1317] Updated spec files - * add files - * [#1538] Apply François patches - debian packages - * [#1535] Change program file structure (directory src...) - * [#1317] Updated build system scripts - * [#1317] Cleaning - * [#1317] Copied introspect files to gnome client - * [#1317] Added opensuse to build-system : first-shot - * [#1317] Remove spec files from configure - * [#1317] Added missing prefix - * removed debug for daemon account fix - * [#1430] Add a connection reference which most likely belong to - libdbus - * [#1430] Use shared connection instead of private - * make daemon find the account, added userMatch - * Clean code, add comments... - * [#1317] Fixed packaging rules - * [#1317] Updated autogen - * Updated autogen.sh for pjsip - * [#1526] Set accounts order - * [#1317] Fixed pjsip lib dirs - * [#1317] Updated debian packaging for new pjsip configuration script - * [#1317] Switch to autogenerated guess and sub files - * [#1317] Updated pjsip inclusion in build system - * [#1317] Replaced pjsip guess and sub files - * [#1317] Fixed compilation issues on opensuse 11 - * [#1505] account list seem to crash the application when clicking - Apply very fast... - * [#1456] Add a flag to be replaced in the control files - * [#1456] Added version dependancy handling - * put account alias in AccountWidgetItem rather than in the item with - " " before. - * [#1034] The KDE client should start sflphoned if it is not started - * [#1500] Handle options for notifications and display on incoming - call. - * [#1443] Client should not crash when receive an unexpected - stateChanged signal - * [#1403] Do not stop the notification anymore - * [#1456] Added version dependancy handling - * [#1426] Daemon crashes when get alsa plugin - * [#1422] Improved error messages - * commit for merge - * [#1424] Change logo in tray icon and put a different one when - incoming call - * [#1425] first part done, window title... - * [#1413] add manpages creating and installing in build system - * [#1417] The client should start the account creation wizard if - started for the first time (if config file doesn't exist) - * [#1421] Make volume bars horizontal when dialpad is hidden. - * Changed main window title and fixed a mistake in sflphone_const.h - * [#1412] make debian package building work - * changelog changed. - * Changed addAccount method in gnome client. - * Debian and man folders added. - * [#1388] Change project name from sflphone_kde to sflphone-client-kde - * Better handle of kabc check. - * [#1351] Automatic generation of dbus interfaces in makefile - generated by cmake - * [#1307] Implement "edit before call" in history and address book. - * [#1344] change action_call label in call history from "call" to - "call back". - * [#1308] Implement Hook feature in kde client - * Improved build system. - * #1219 : Add address book configuration page - * Better handling of registration to the daemon. - * #1039 : Add tray icon in kde. - * Issue no 1216 : Double click on item in history or address book - causes call. - * display peer name in call list and call history when called from - address book. - * Address book functionnal with photo displayed. - * Help menu kde available but actions disappeared. All fonctions in - view. - * Address book functionnal but ugly and making its own sort in the - complete address book. - * Account choice on right click, clean out includes, page address - book, fixed bugs... - * Wizard, double click, context menu... - * Removed sflphone_kde.kdevelop.filelist - * Added account creation wizard and translated interface in english. - * Transfer functionnal but ugly. - * transfer not functionnal - * Bug fixed : unholding (UNHOLD_CURRENT, UNHOLD_RECORD) - * Commit functional for push. With install.sh - * Before merge. - * Problem with enable accounts. Account display increased. - * Functional with codec order working , playDTMF. - * Commit functional. - * sflphone_kde/build added in .gitignore. - * complete commit for checkout previous. - * Commit before checkout previous version to check the display - bug(little font everywhere...) - * Functionnal client. Rest : history icons, config icons and - functionalities - * commit before merge asavard for isRecording. - * Call and Automate fusion done and seems to work. - * Commiting before putting Automate class in Call class. - * Functionnal main window without recording, history, voicemail, kio - widgets. - * client kde avec kdevelop. - * Config Dialog almost finished. - * Base of QT client - - -- SFLphone Automatic Build System <team@sflphone.org> Tue, 23 Jun 2009 11:12:06 -0400 - -sflphone-common (0.9.5-SYSVER) SYSTEM; urgency=low - - ** 0.9.5 release ** - - * [#1060] FIx bug in chinese translation - * [#1313] git add rtpTest.cpp rtpTest.h - * [#1313] Add init/close rtp tests - * [#1313] Basic instanciation of the rtp layer - * [#1449] Gtk-Critical concerning history filters and new calls - * [#1400] Make the match with the hostname instead of username - * [#1324] Change status bar label for "Using %s (%s)" - * [#1403] Icon size: 60x60 px - * [#1403] Do not remove notification, improve icon quality - * [#1403] Add smaller icon for gnome notifications - * [#1403] Prevent crash when hangup && no notification - * [#1403] Remove all actions on notifications; code refactoring - * [#1451] Use stun.sflphone.org as default STUN server - * [#1060] New po files - need to be translated - * [#1060] Update french translation - Rebuild template file - * [#1456] Add a flag to be replaced in the control files - * [#1454] Make cppunit optional; remove from build deps in control - files - * [#1401] Add libexpat1-dev dependency in control files - * [#1448] Take off these ugly debug messages - * [#1448] fixed getTelephoneTone and getTelephoneFile() called - repeatedly - * [#1406] add liblog4c-dev in build-depends - * [#1409] Restore .desktop icon - - -- SFLphone Automatic Build System <team@sflphone.org> Mon, 25 May 2009 11:34:40 -0400 - -sflphone-common (0.9.5-SYSVER~rc2) SYSTEM; urgency=low - - ** 0.9.5 rc2 ** - - * [#1422] Improved error message - * [#1402] Fix pjsip build - * [#1404] Clear GTK-Critical Bug at client startup - * [#1422] Added automatic VM shutdown when building on more than one - VM - * [#1422] Fixed some issues with new changelog generation script - * [#1422] Moved distribution update to specific file - * [#1422] Dropped git-dch, replace by home made implementation - * [#1402] Fix pjsip build - * [#1404] Clear GTK-Critical Bug at client startup - * Changes for name based dbus connection - * Clean changelogs - * [#1343] Gnome: Implement a callback system to handle focus on - different widgets - * Debus Session - * Refactoring Python code, PEP8 - * [#1430] Get back dbus_g_proxy_new_for_name - * [#1430] Get back DBUS_BUS_SESSION type - * [#1430] Dbus fixed owner message binding - * Second test with DBUS owner - * [#1404] Gnome -> Preferences -> Hooks - * [#1404] Gnome -> Preferences -> Recordings - * [#1404] Call History - * [#1404] Gnome -> Preferences -> Address Book - * [#1404] IF the first notification option disable the second - notification - * Dbus with fixed owner does not automatically start the deamon - * Add codec debug tests in pysflphone - * [#1407] Some print info - * [#1407] Add a scenario to pick_up action - * Test client dbus connection to a fixed owner - * Add python dbus test suite - * [#1161] Modified version handling in build system - * [#1314] Test pulse audio and audio streams connect and disconnect - * [#1402] Add info message after configure - * [#1402] Build the daemon with the local pjsip library (vs the - installed one) - * [#1009] Fix Codec Sampling Rate set to zeros - * [#1314] Add mutex to pulse layer audio streams - * [#1314] Refactoring pulseaudio stream to test connect disconnect - * [#1314] Refactoring of pulselayer to test conect/disconnect - * Add debug messages in debus calls concerning account - * [#1314] Add some return values to audio init functions - * [#1406] add liblog4c-dev in build-depends - * [#1409] Restore .desktop icon - * Bug #1405: Fix strings as requested. - * Bug #1404: Fix strings in preferences panel. - - -- SFLphone Automatic Build System <team@sflphone.org> Tue, 19 May 2009 12:08:03 -0400 - -sflphone-common (0.9.5-0ubuntu1~rc1) SYSTEM; urgency=low - - [ SFLphone Project ] - * [#1262] Updated changelogs for version 0.9.5-0ubuntu1 Snapshot 2009- - 05-05 - - [ Emmanuel Milou ] - * Add some python CLI client code; not really functional - * [#1108] Fix peerHungup method for IP to IP call - - [ Alexandre Savard ] - * [#1108] Correct setting of SIP contact for direct IP call - * [#1108] SIP user agent handles incoming REFER - - [ Emmanuel Milou ] - * Remove website from repository - * Update translation - - [ Alexandre Savard ] - * Sflphone icon's tooltip changed for "configured" instead of - "registered" - - [ Emmanuel Milou ] - * Update translation - - [ Sflphone Project ] - - -- Sflphone Project <sflphone@mtl.savoirfairelinux.net> Tue, 05 May 2009 19:16:09 -0400 - -sflphone-common (0.9.5-0ubuntu1~beta) SYSTEM; urgency=low - - [ Julien Bonjean ] - * Updated Eclipse stuff - * Improved addressbook config window - * Added sflphone Eclipse stuff - * Implemented addressbook list server side - * Moved dbus stuff in dbus directory - * Updated addressbook configuration - - [ Emmanuel Milou ] - * Remove unuseful installation scripts. Use apt-get build-dep sflphone - instead - * fix bug #1090 - - [ Alexandre Savard ] - * defining speex 16khz - - [ Emmanuel Milou ] - * Remove unuseful file from build system - * Start dns srv resolver - - [ Alexandre Savard ] - * Basic ogg/vorbis initialization - - [ Emmanuel Milou ] - * Handle incoming IP-to-IP invite correctly - - [ Alexandre Savard ] - * speex wideband 16000 - - [ Emmanuel Milou ] - * Better handling of incoming IP to IP call - * DNS SRV resolution functional - * Implement IAX2 incoming URL - * Allow user to make IP call without any accounts configured - * Add a contextual menu to edit a number from the contacts tab - * Add comments, tooltip and new button to the contextual menu - * add delete event, migrate to GTK 2.16 for sexy icons - * Resolve ticket #1118 - * Update suse spec file - * Add phone number cleanup functions, unit tests and panel - configuration - * Add pertinent test that fails - * fix dependencies for suse package - * Add contextual edit menu in history - #1120 - - [ Alexandre Savard ] - * Temporary comit: make speex wideband (16 khz) - * Temporary: shared object for speex narrow band - * Temporary: speex narrowband and wideband coexist - - [ Julien Bonjean ] - * Fixed bug when no book selected - * Fixed addressbook related compilation warnings - * Fixed GTK client remaining compilation warnings - * Fixed segfault when book removed since last sflphone run - * Fixed bug when book is unreachable (ldap error) - - [ Alexandre Savard ] - * Fix codec list in audio config window - * Active/inactive speex codec by payload - - [ Julien Bonjean ] - * Updated gitignore - * Added some comments - - [ Emmanuel Milou ] - * Add callto: handler script for browsers and al. - * Integrate test compilation in the daemon build-system - - [ Julien Bonjean ] - * Fixed g_object_unref warning for pixbuf - * Cleaned too verbose output - * Fixed toolbar update warning - * Added support for asynchornous books open (first shot) - - [ Emmanuel Milou ] - * Add a DBus call to fetch the call details from a call ID - Ticket - #928 - - [ Julien Bonjean ] - * Improved async open books - * Fixed bug #1139 - - [ Emmanuel Milou ] - * Add a way to save account order - * commit missing files - - [ Julien Bonjean ] - * Introduced log4c (ticket #1162) - - [ Emmanuel Milou ] - * Load/save account order functionnal - ticket #813 - - [ Alexandre Savard ] - * Add CELT codec (#1143) - * Make celt frame size 256 (*1143) - - [ Julien Bonjean ] - * Switched everything to log4c (ticket #1162) - * Updated eclipse settings - - [ Emmanuel Milou ] - * Restore adding account - ticket #1172 - * Add liblog4c dependecy - ticket #1179 - - [ Alexandre Savard ] - * Double maxAvailByte for frame size in rtp (#1143) - - [ Emmanuel Milou ] - * Add User-Agent SIP header - Ticket #1173 - - [ Julien Bonjean ] - * Fixed autoresize issue (#708) - - [ Emmanuel Milou ] - * Remove libcppuint dependency for the debian packages - * Look for libsexy only if gtk version < 2.16 - Ticket #1116 - * Remove libsexy dependency for jaunty. ticket #1116 - - [ Julien Bonjean ] - * Introduced unit tests (#1146) - * Updated gitignore - * Fixed Makefile (#1146) - - [ Emmanuel Milou ] - * [TICKET #1112] Add a test on the voice buffer to send through iax - packets - * Remove doublon in dependencies - * Remove warnings from the client test framework - * Update version number to 0.9.5~beta - * Update build-package script - * Add check dependency in build-deps control file field - * Create debian files for the new sflphone-client-gnome - * [TICKET #1212] Add Replaces field in control files - * [TICKET #1212] Fix manpages installation path - * [TICKET #1212] Add maintainer scripts to create alternatives - * [#1212] Update the manpages generation - edit preinst maintainer - script - * [#1212] Fix reference error in manpage - * [#1212] Add missing files on the client side - * [#1212] Fix debian docs files - no TODO file - * [1212] Fix manpage creation problem - * [#1220] Generate client-side glue files and marshaller at - compilation time - * [#1220] Generate server-side glue files at compilation time - * [#1212] Change binary name to sflphone-client-gnome - * [#1212] Update .gitignore to fit the new working tree - * [#1220] Explicitly generate glue files before building the library - * [#1220] Compile dbus directory before audio - * [#1212] Create sflphone-common at the root of the repository - * [#1212] Re-add pjproject - * [#1212] Remove Makefile from repo - * [#1220] Fix Makefile.am - * [#1212] New working directory functional - * [#1212] Update .gitignore - * [#1212] Hack to make pjsip compile.. - * [#1220] Use non-installed binary for dbusxx-xml2cpp - * [#1212] Add descriptive files, remove unuseful scripts from tools/ - - [ Alexandre Savard ] - * Restore speex codecs - * add frame size for celt (#1143) - * add framesize to codec, independant from audiolayer (#1143) - * use codec frame size in rtp (#1143) - * compute fixed_codec_framesize (#1143) - * do not resample if not required (#1143) - * add condition on resampling for decoder (#1143) - * add a condition on bytesAvail == 0 from mic data - * no maximum in rtp decode (#1143) - * compute maximum for decoding (#1143) - - [ Emmanuel Milou ] - * [#1146] Implement unitary tests on the client-side - - [ Alexandre Savard ] - * use float instead of int to compute max nb of sample (#1143) - * add nbSampleMax for unresampled data (#1143) - * make thread sleep during 5 ms insead of 20 (#1143) - * use unix usleep (#1143) - * 50 usecond thread!!!!! (#1143) - * try with the smallest compression (#1143) - * use timer set at framesize (#1143) - - [ Emmanuel Milou ] - * [#1161] Restore changelog version - - [ Alexandre Savard ] - * Remove celt stuff - - [ Emmanuel Milou ] - * [#1161] Update changelog - * [#1220] Add Conflicts: sflphone in debian control files - * [#1179] Add liblog4c3 runtime dependency - * [#1212] FIx typo error in dependency list for itnrepid - * [#1212] FIx .desktop file to point on the right exec - * [#1212] Modify changelog replacing tag - - [ Sflphone Project ] - * "[#1262] Updated changelogs for version 0.9.5-0ubuntu1~beta" - - [ Emmanuel Milou ] - * [#1212] restore changelogs - - [ Sflphone Project ] - * [#1262] Updated changelogs for version 0.9.5-0ubuntu1 Snapshot 2009- - 04-27 - - [ Emmanuel Milou ] - * [#1212] restore changelogs - - [ Sflphone Project ] - * [#1262] Updated changelogs for version 0.9.5-0ubuntu1~beta - - [ Emmanuel Milou ] - * [#1212] restore changelogs - - [ Sflphone Project ] - - -- Sflphone Project <sflphone@mtl.savoirfairelinux.net> Mon, 27 Apr 2009 16:57:00 -0400 - -sflphone-common (0.9.4-0ubuntu2) SYSTEM; urgency=low - - [ Alexandre Savard ] - * Restore speex and GSM detection - - [ Emmanuel Milou ] - * Fix bug #1090 - - -- Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> Wed, 8 Apr 2009 11:29:15 -0500 - -sflphone (0.9.4-0ubuntu1) SYSTEM; urgency=low - - [ Emmanuel Milou ] - * Integrate DBus-c++ and libiax2 in the main build system - * Clean up in the working repository - * Reorder hooks configuration panel - * Protect case when no codecs are active - * Fix some return values - * Add unitary tests for the hook manager (premisces) - - [Yun Liu] - * Update chinese translation - - [Sven Werlen] - * Update german translation - - [Hussein Abdallah] - * Update russian translation - - [Maxime Chambreuil] - * Update spanish translation - - -- Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> Fri, 3 Apr 2009 18:29:15 -0500 - - -sflphone (0.9.4-rc1) SYSTEM; urgency=low - - [ Emmanuel Milou ] - * Fix bug while trying to hold/unhold several simultaneous call - * Improve address book build system - * Implement SIP url popup on incoming call - * Improve GTK+ panel configuration - [ Julien Bonjean ] - * GTK+ client refactoring - * GTK+ clean up - * Address book improvment - - -- Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> Fri, 27 Mar 2009 18:29:15 -0500 - -sflphone (0.9.4-0beta1) SYSTEM; urgency=low - - [ Alexandre Savard ] - * Display codec used during conversation on the GUI - * Enable/disable STUN parameters at runtime - * Refactor search bar use - [ Emmanuel Milou ] - * Build system fixes - * Implement SIP re-invite - * Implement IP to IP call - [ Julien Bonjean ] - * Integrate GNOME address book based on evolution data server - - -- Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> Fri, 20 Mar 2009 18:29:15 -0500 - - -sflphone (0.9.3-0ubuntu3) SYSTEM; urgency=low - - [ Alexandre Savard ] - * Both playback and record streams in PA_STREAM_CORKED (pulseaudio) - * Use PLUGHW device for ALSA capture - * Functional IAX and SIP recording for voicemail - * Use the less CPU-consuming interpolator algorithm for resampling - * Display in GTK GUI the codec used in conversation - * GTK GUI use ASCII instread of utf-8 - * Add record menus in GTK GUI - * Put on hold when dialing a new number - * AccountID's are saved in the history - - [ Emmanuel Milou ] - * Integrate DBUS C++, libiax2 in the git repository - * Update website - * Use libspeexdsp only if available on the system - * Updated .gitignore file - - [Cyrille Béraud] - * Account assistant manager improvment - * Add an email request when creating a new account to receive voicemails - - -- Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> Sat, 14 Feb 2009 13:29:15 -0500 - -sflphone (0.9.3-0ubuntu2) SYSTEM; urgency=low - - [ Emmanuel Milou ] - * Add compilation note in README - * Use default ALSA plugin for capture - * Fix the ALSA capture problem one more time - * Clean up debug messages in dbus.c - * Add libspeexdsp dependency - * Remove implicit declaration compilation warnings - * Fix links in the website, add release note - * Change capture for the website front page - * Add alsa devel dependency in build-depends control file field - * Clean up, indentation, try to handle latency problems in iax/pulseaudio - * Remove pjsip generated files from the repo - * Use the previous declared curAlias function in accountwindow - * Fix bug in history call duration when the call fails - * Remove runtime warning in the GTK+ client - * Add librsvg2-common dependency to load SVG under KDE - * Refresh .gitignore - * Update locales files + french translation - * Add configuration panel for future noise reduction - * Add configuration panel for audio record module - * Daemon less verbose; accounts don't try to access STUn options anymore - * Fix typo in configwindow - * Add content in the official website - * use a GTK_STOCK icon for the record button - * Complete description text in the assistant manager - * Add libtool flags in client configure.ac - * Remove unuseful dependency (snd) - * Fix SIP transfer problems - * Remove previous version of PJSIP from the repo - * Upgrade PJSIP to version 1.0.1 - * Add the new website source in the repository - * Use libspeexdsp for silence detection only if available - - [ Loïc Faure-Lacroix ] - * Ajout du logo gpl3 - * Ajout des images - * Ajout de la section screenshot pour le site - * Ajout du favicon dans le header - * Modification des cartes - - [ Alexandre Savard ] - * Clean up <speex/libspeexdsp> - * Small cleanup - * Save Wave fixed - * Fix new call button when recording - * libspeexdsp added - * Recording: default home folder at startup - * Minor changes to config window - * IAX recording fixed - * Set / get recording path, still need some GTK for client - * AudioRecord file name format - * Now recording in HOME folder - - [ Cyrille Béraud ] - * Fix bug in reqaccount.c - - [ Maxime Chambreuil ] - * Update spanish translation - - [Yun Liu ] - * Update chinese translation - - [ Hussein Abdallah ] - * Update russian translation - - -- Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> Sat, 14 Feb 2009 13:29:15 -0500 - -sflphone (0.9.3-0ubuntu1) SYSTEM; urgency=low - - * Remove debug - * Join thread before leaving - * Fix implicit declaration in reqaccount - * Add REST code to build the request to server - * Fix GValue initialization warnings - * Update version number, fix implicit declaration, fix GTK markup - warnings - * Apply patch to create custom SIP account from our own server - - -- Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> Fri, 06 Feb 2009 19:17:32 -0500 - -sflphone (0.9.2-2ubuntu9) SYSTEM; urgency=low - - [ Alexandre Savard ] - * Speex audio codec preprocessing initialization - * peer hung up segmentation fault solved - * Stop recording when transfering - * Terminate only one call - * Add isRecording() function - * Fix call_icon GTK client - * Fix SIPCallClose() function, recorded file now close properly - * Function terminateSIPCall added in sipvoiplink and managerimpl - * Fix thread destructor - * setRecordingOption function implement in audiorecord - * Record now implemented in Call class - * Record interface complete (on hold erase previous recording) - * Added recButton in client - * Added: record button related icons - * Record button added - * Overload AudioRecord::recData to get mic and speaker data mixed - * Recording now in audiortp::run() method - * Audio recording working in AudioRTP: receiveSessionForSpeaker - * Open/close a wave file when pulse audio stream start/stop - - [ Emmanuel Milou ] - * Fix path for GTK+ icons; clean up - - -- Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> Thu, 05 Feb 2009 18:27:53 -0500 - -sflphone (0.9.2-2ubuntu8) SYSTEM; urgency=low - - [ Emmanuel Milou ] - * Update changelogs - * Fix bug in merge and in Makefile.am - * Terminate only one call - * Disable PJsip shutdown when changing STUN parameters - * Function terminateSIPCall added in sipvoiplink and managerimpl - * Add a timer to the alsa thread to not jam the CPU load - * Fix bug in sipvoiplink.cpp - * Clean shutdown of pulseaudio on quiting - * Fix DTMF at first start with Pulseaudio - * Remove zeroconf from the build system - * Add a library manager + exception handling - * Clean up in the working directory - * Better handling of capture XRUNs - * Restore mic adjust volume on ALSA layer - * Protect device ALSA operation if not opened - * Fix the switching layer bug - * Use dynamic_cast<> to use audiolayer-specific methods - * Open the audio devices only once at startup - * Refactoring of the ALSA part - * Functional plug-in manager - * Use a C++ thread to handle tones and DTMF in ALSA - * Restore IAXVoIPLink, restore Mutex - * Make the plugins registering against the plugin manager - * Migrate to 1->N relationship between voiplink and accounts - * API plugin for registration - * Use C++ thread in SIP, move everything in sipvoiplink - * Complete singleton pattern for the plugin manager - * Add -Wno-return-type compilation flag to remove warnings; Update - version number in configure.ac - * Add the dynamic loading for the plugin framework; integate unittest - - [ Yun Liu ] - * Update rpm spec file - * modify build package script and spec file for suse - - [ Alexandre Savard ] - * Add audiorecorder plugin and testaudiorecorder - * Add audio Recording class, edit global.h - - -- Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> Wed, 04 Feb 2009 14:00:30 -0500 - -sflphone (0.9.2-2ubuntu7) SYSTEM; urgency=low - - [ Emmanuel Milou ] - * Update changelog to 0.9.2-6 - * Fix some dbus-glib implementation details on the client side - * Init history after dbus initialization - * Add error checking in useragent; Clean sipvoiplink - * Prevent crash when trying to call an empty number - * Set the volume of the playback stream to PA_VOLUME_NORM at startup - * Fix GTK+ generic value double initialization - * Fix jaunty control file dependency problems - * Fix jaunty control file dependency problems - - [ Yun Liu ] - * Fix bug ticket # 137 - * Tolerant to gsm library of OpenSuse 11 - - [ Sven Werlen ] - * Update german translation - - -- Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> Fri, 23 Jan 2009 17:48:13 -0500 - -sflphone (0.9.2-2ubuntu6) SYSTEM; urgency=low - - [ Emmanuel Milou ] - * Migrate STUN configuration to the main config window - * Update french translation - * Other tiny memory leaks - * Fix memory leak in sampleconverter.cpp - * Generate packages from the release branch - * update the build package script - * modify the control files with architecture=any - * Remove valgring uninitialized value - * IAX and SIP use the same global variables to set account - configuration ; fix broken code - - [ Maxime Chambreuil ] - * Update spanish translation - - [ Hussein Abdallah ] - * Update russian translation - - [ Yun Liu ] - * Update translation files - * Fix the bug when user uncheck the account which fails in the - previous registration - * Add stun error status - * Fix bug ticket #143 - * Script for auto-install dependencies - * Fix bug ticket #140 - * Fix bug ticket 141 - * Fix the reregister process when user change the details of an - account - - -- Emmanuel Milou <manu@sulfur.inside.savoirfairelinux.net> Fri, 16 Jan 2009 18:19:05 -0500 - -sflphone (0.9.2-2ubuntu5) SYSTEM; urgency=low - - * Fix memory leak in the pulseaudio callback - * Update debian package generation script - * Warnings removal in GTK+ client - * Clean adjust volume method in alsalayer - * Plug the sflphone playback volume control to the pulseaudio volume - manager - * Display the date in history according to the current locale - * Generate the changelog according to the git commit messages - * Complete header in chinese translation file - * Use the right gpg key to sign the packages - * add debian jaunty jackalope support - - -- Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> Wed, 14 Jan 2009 21:17:20 -0500 - -sflphone (0.9.2-2ubuntu4) SYSTEM; urgency=low - - [ Emmanuel Milou ] - * add german translation - - [ Yun Liu ] - * Fix GUI crash in Ubuntu8.10 64bit system - - -- Yun Liu <yun.liu@savoirfairelinux.com> Thu, 08 Jan 2009 13:08:51 -0500 - -sflphone (0.9.2-2ubuntu3) SYSTEM; urgency=low - - [ Emmanuel Milou ] - * The main thread synchronizes the ringtone thread - * disable custom ringtone for the ALSA layer - * Fix the Makefile.am in man directory, add a SEE ALSO section - - [ Yun Liu ] - * Fix daemon crash caused by the previous patch ( for bug ticket #129) - - -- Yun Liu <yun.liu@savoirfairelinux.com> Tue, 06 Jan 2009 16:18:38 -0500 - -sflphone (0.9.2-2ubuntu2) SYSTEM; urgency=low - - * Fix bug ticket #129 - - -- Yun Liu <yun.liu@savoirfairelinux.com> Wed, 5 Jan 2009 15:54:53 -0500 - -sflphone (0.9.2-2ubuntu1) SYSTEM; urgency=low - - * Migrate from eXosip library to pjsip - * Add multiple SIP accounts support - * Fix ringtones problems - * Add a pulseaudio support - * Improve audio quality with ALSA - * Add chinese translation - * Improve spanish translation - * Migrate to a maintained C++ DBus bindings - * Clean and improve the build system - * Add build-dependency on Perl because we need pod2man to generate manpages - - -- Yun Liu <yun.liu@savoirfairelinux.com> Wed, 26 Nov 2008 09:47:53 -0500 - -sflphone (0.9.1) unstable; urgency=low - * Add a search tool in the history - * Migrate some gtk_entry_new to sexy_icon_entry_new - * Bug fix (Ticket #78): The voicemail password isn't displayed anymore in - the history tab - * Add the SIP registration expire value in the user file. - - -- Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> Thu, 22 May 2008 11:14:25 -0500 - -sflphone (0.9.0) unstable; urgency=low - * Add history features - * Call date - * Call duration - * Mouse events in the history tab - * Smooth switch from the history tab to the calls tab - * Remove most of GTK-Critical warnings - - -- Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> Wed, 13 May 2008 16:58:25 -0500 - -sflphone (0.9-2008-06-06) unstable; urgency=low - * Audio bug correction: capture stopped after a few minutes of conversation - with USB Plantronics sound card - - -- Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> Tue, 06 May 2008 16:58:25 -0500 - -sflphone (0.9-2008-05-06) unstable; urgency=low - * Bug correction: account creation with the assistant - * GTK+ warnings removal - * libnotify warnings removal - * Remove aliasing on the SFLphone logo - - -- Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> Mon, 05 May 2008 16:58:25 -0500 - -sflphone (0.9) unstable; urgency=low - * Clean dependencies ( removal of libboost ) - * Several GTK improvement and updates - -account window - -configuration window - * Migrate from GtkCheckMenuItem to GtkImageMenuItem - * ALSA standard I/O transfers: MMAP instead of R/W - * Fix speex audio quality - * IAX2 protocol - -Fix hold/unhold situation - -Add on hold music - * SIP protocol - -Ringtone on incoming call - -Fix transfer situation - * Add desktop notification ( libnotify ) - * Improve the system tray icon behaviour - * Improve registration error handling - * Register/unregister from the account window takes effect without starting back SFLphone - * Compilation warnings removal - * Call history - * Add an account configuration wizard - - -- Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> Wed, 30 Apr 2008 16:58:25 -0500 - -sflphone (0.8.2) unstable; urgency=low - * Internationalization of the GTK GUI - * English / French - * STUN support - * Slight modifications of the graphical interface ( tooltips, dialpad, ...) - - -- Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> Fri, 21 Mar 2008 11:37:53 -0500 diff --git a/tools/build-system/distributions/ubuntu/debian-sflphone-common/compat b/tools/build-system/distributions/ubuntu/debian-sflphone-common/compat deleted file mode 100644 index 7ed6ff82de..0000000000 --- a/tools/build-system/distributions/ubuntu/debian-sflphone-common/compat +++ /dev/null @@ -1 +0,0 @@ -5 diff --git a/tools/build-system/distributions/ubuntu/debian-sflphone-common/control.hardy b/tools/build-system/distributions/ubuntu/debian-sflphone-common/control.hardy deleted file mode 100644 index e14674d170..0000000000 --- a/tools/build-system/distributions/ubuntu/debian-sflphone-common/control.hardy +++ /dev/null @@ -1,20 +0,0 @@ -Source: sflphone-common -Maintainer: SavoirFaireLinux Inc <emmanuel.milou@savoirfairelinux.com> -Section: gnome -Priority: optional -Build-Depends: debhelper (>= 5), libgcc1, autoconf, automake, libpulse-dev, libsamplerate0-dev, libcommoncpp2-dev, libccrtp-dev, libgsm1-dev, libspeex-dev, libtool, libdbus-1-dev, libasound2-dev, uuid-dev, libexpat1-dev -Standards-Version: 3.7.3 - -Package: sflphone-common -Priority: optional -Architecture: any -Depends: libsamplerate0 (>=0.1.2) , libdbus-glib-1-2 (>= 0.73), libexpat1, libc6 (>= 2.3.6-6) , libcommoncpp2-1.6-0 ,libgsm1 (>=1.0.10) , libspeex1 (>=1.1.12) , libdbus-1-3, libasound2 (>= 1.0), libpulse0 (>= 0.9.6), libccrtp1-1.6-0 -Replaces: sflphone -Conflicts: sflphone -Homepage: http://www.sflphone.org -Description: SIP and IAX2 compatible softphone - Core - This package provides SFLphone daemon, that is the core of the application. - SFLphone is meant to be a robust enterprise-class desktop phone. - SFLphone is released under the GNU General Public License. - SFLphone is being developed by the global community, and maintained by - Savoir-faire Linux, a Montreal, Quebec, Canada-based Linux consulting company. diff --git a/tools/build-system/distributions/ubuntu/debian-sflphone-common/control.intrepid b/tools/build-system/distributions/ubuntu/debian-sflphone-common/control.intrepid deleted file mode 100644 index 270e678112..0000000000 --- a/tools/build-system/distributions/ubuntu/debian-sflphone-common/control.intrepid +++ /dev/null @@ -1,20 +0,0 @@ -Source: sflphone-common -Maintainer: SavoirFaireLinux Inc <emmanuel.milou@savoirfairelinux.com> -Section: gnome -Priority: optional -Build-Depends: debhelper (>= 5), libgcc1 , autoconf, libpulse-dev, libsamplerate0-dev, libcommoncpp2-dev, libccrtp-dev, libgsm1-dev, libspeex-dev, libtool, libdbus-1-dev, libasound2-dev, libspeexdsp-dev, uuid-dev, libexpat1-dev -Standards-Version: 3.8.0 - -Package: sflphone-common -Priority: optional -Architecture: any -Depends: libsamplerate0 (>=0.1.2) , libexpat1 , libc6 (>= 2.3.6-6) , libcommoncpp2-1.6-0 , libgsm1 (>=1.0.10) , libspeex1 (>=1.1.12) , libdbus-1-3, libasound2 (>= 1.0), libpulse0 (>= 0.9.6), libccrtp1-1.6-1, libspeexdsp1 -Replaces: sflphone -Conflicts: sflphone -Homepage: http://www.sflphone.org -Description: SIP and IAX2 compatible softphone - Core - This package provides SFLphone daemon, that is the core of the application. - SFLphone is meant to be a robust enterprise-class desktop phone. - SFLphone is released under the GNU General Public License. - SFLphone is being developed by the global community, and maintained by - Savoir-faire Linux, a Montreal, Quebec, Canada-based Linux consulting company. diff --git a/tools/build-system/distributions/ubuntu/debian-sflphone-common/control.jaunty b/tools/build-system/distributions/ubuntu/debian-sflphone-common/control.jaunty deleted file mode 100644 index 8a99d63922..0000000000 --- a/tools/build-system/distributions/ubuntu/debian-sflphone-common/control.jaunty +++ /dev/null @@ -1,19 +0,0 @@ -Source: sflphone-common -Maintainer: SavoirFaireLinux Inc <emmanuel.milou@savoirfairelinux.com> -Section: gnome -Priority: optional -Build-Depends: debhelper (>= 5), libgcc1 , autoconf, automake, libpulse-dev, libsamplerate0-dev, libcommoncpp2-dev, libccrtp-dev, libgsm1-dev, libspeex-dev, libtool, libdbus-1-dev, libasound2-dev, libspeexdsp-dev, uuid-dev, libexpat1-dev, libzrtpcpp-dev, libssl-dev -Standards-Version: 3.7.3 - -Package: sflphone-common -Priority: optional -Architecture: any -Depends: libsamplerate0 (>=0.1.2) , libexpat1 , libc6 (>= 2.3.6-6) , libcommoncpp2-1.6-0 , libgsm1 (>=1.0.10) , libspeex1 (>=1.1.12) , libdbus-1-3, libasound2 (>= 1.0), libpulse0 (>= 0.9.6), libccrtp1-1.6-1, libspeexdsp1 -Replaces: sflphone -Conflicts: sflphone -Homepage: http://www.sflphone.org -Description: SIP and IAX2 compatible softphone - Core - SFLphone is meant to be a robust enterprise-class desktop phone. - SFLphone is released under the GNU General Public License. - SFLphone is being developed by the global community, and maintained by - Savoir-faire Linux, a Montreal, Quebec, Canada-based Linux consulting company. diff --git a/tools/build-system/distributions/ubuntu/debian-sflphone-common/copyright b/tools/build-system/distributions/ubuntu/debian-sflphone-common/copyright deleted file mode 100644 index fbde2314be..0000000000 --- a/tools/build-system/distributions/ubuntu/debian-sflphone-common/copyright +++ /dev/null @@ -1,28 +0,0 @@ -This package was debianized by Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> on -Fri, 3 Apr 2009 09:47:53 -0500. - -It was downloaded from the git repository of SFLphone: git://sflphone.org/git/sflphone.git - -Upstream Author: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> - -Copyright: - -Savoir-Faire Linux Inc. - -License: - -This software is copyright (c) 2004-2009 Savoir-Faire Linux inc. - -You are free to distribute this software under the terms of -the GNU General Public License version 3. -On Debian systems, the complete text of the GNU General Public -License can be found in the file `/usr/share/common-licenses/GPL'. - -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., 51 Franklyn St, Fifth Floor, Boston, MA 02110-1301, USA. diff --git a/tools/build-system/distributions/ubuntu/debian-sflphone-common/cron.d b/tools/build-system/distributions/ubuntu/debian-sflphone-common/cron.d deleted file mode 100644 index d11e611777..0000000000 --- a/tools/build-system/distributions/ubuntu/debian-sflphone-common/cron.d +++ /dev/null @@ -1,4 +0,0 @@ -# -# Regular cron jobs for the sflphone package -# -0 4 * * * root sflphone_maintenance diff --git a/tools/build-system/distributions/ubuntu/debian-sflphone-common/dirs b/tools/build-system/distributions/ubuntu/debian-sflphone-common/dirs deleted file mode 100644 index ab04d899ac..0000000000 --- a/tools/build-system/distributions/ubuntu/debian-sflphone-common/dirs +++ /dev/null @@ -1,8 +0,0 @@ -usr/bin -usr/lib -usr/share/applications -usr/share/dbus-1/services -usr/share/sflphone/ringtones -usr/share/locale -usr/share/doc -usr/share/man diff --git a/tools/build-system/distributions/ubuntu/debian-sflphone-common/docs b/tools/build-system/distributions/ubuntu/debian-sflphone-common/docs deleted file mode 100644 index f1dd08af02..0000000000 --- a/tools/build-system/distributions/ubuntu/debian-sflphone-common/docs +++ /dev/null @@ -1,6 +0,0 @@ -NEWS -README -TODO -ChangeLog -AUTHORS - diff --git a/tools/build-system/distributions/ubuntu/debian-sflphone-common/manpages b/tools/build-system/distributions/ubuntu/debian-sflphone-common/manpages deleted file mode 100644 index 18f8b41d08..0000000000 --- a/tools/build-system/distributions/ubuntu/debian-sflphone-common/manpages +++ /dev/null @@ -1 +0,0 @@ -debian/sflphone-common/usr/share/man/man1/sflphoned.1 diff --git a/tools/build-system/distributions/ubuntu/debian-sflphone-common/postinst b/tools/build-system/distributions/ubuntu/debian-sflphone-common/postinst deleted file mode 100644 index ff29eda333..0000000000 --- a/tools/build-system/distributions/ubuntu/debian-sflphone-common/postinst +++ /dev/null @@ -1,56 +0,0 @@ -#!/bin/bash -# postinst script for sflphone-common -# -# see: dh_installdeb(1) - -# Script to copy and move, if exists, configuration file sflphonedrc and history in the XDG directory -# Freedesktop specifications: http://standards.freedesktop.org/basedir-spec/latest/ - -set -e - -INST_CONFIG="$HOME/.sflphone/sflphonedrc"; -INST_DATA="$HOME/.sflphone/history"; -INST_CACHE="$HOME/.sflphone/sfl.pid"; - -NEW_INST_CONFIG= -NEW_INST_DATA= -NEW_INST_CACHE= - -# Set the XDG CONFIG directory to the default one or to the path set in the environment variable -if [ -z $XDG_CONFIG_HOME ]; then - NEW_INST_CONFIG=$HOME"/.config/sflphone/"; # This is the standard path -else - NEW_INST_CONFIG=$XDG_CONFIG_HOME; -fi; - -# Set the XDG DATA directory to the default one or to the path set in the environment variable -if [ -z $XDG_DATA_HOME ]; then - NEW_INST_DATA=$HOME"/.local/share/sflphone/"; # This is the standard path -else - NEW_INST_DATA=$XDG_DATA_HOME; -fi; - -# Move the configuration file -if [ -f $INST_CONFIG ] ; then - echo "Moving the configuration file into $NEW_INST_CONFIG directory"; - if [ ! -d $NEW_INST_CONFIG ]; then - mkdir $NEW_INST_CONFIG; - fi - mv $INST_CONFIG $NEW_INST_CONFIG; -fi - -# Move the history -if [ -f $INST_DATA ] ; then - echo "Moving the history file into $NEW_INST_DATA directory"; - if [ ! -d $NEW_INST_DATA ]; then - mkdir $NEW_INST_DATA; - fi - mv $INST_DATA $NEW_INST_DATA; -fi - -# Remove the directory -# rmdir $HOME"/.sflphone"; - -echo "You may remove the $HOME/.sflphone, the application won't use it anymore, but the XDG directories instead. Thank you."; - -exit 0 diff --git a/tools/build-system/distributions/ubuntu/debian-sflphone-common/postrm b/tools/build-system/distributions/ubuntu/debian-sflphone-common/postrm deleted file mode 100644 index 70be710bd1..0000000000 --- a/tools/build-system/distributions/ubuntu/debian-sflphone-common/postrm +++ /dev/null @@ -1,36 +0,0 @@ -#!/bin/sh -# postrm script for sflphone -# -# see: dh_installdeb(1) - -set -e - -# summary of how this script can be called: -# * <postrm> `remove' -# * <postrm> `purge' -# * <old-postrm> `upgrade' <new-version> -# * <new-postrm> `failed-upgrade' <old-version> -# * <new-postrm> `abort-install' -# * <new-postrm> `abort-install' <old-version> -# * <new-postrm> `abort-upgrade' <old-version> -# * <disappearer's-postrm> `disappear' <overwriter> -# <overwriter-version> -# for details, see http://www.debian.org/doc/debian-policy/ or -# the debian-policy package - -if [ "$1" = "purge" ] -then - - # remove the user config file - rm -f $HOME/.sflphone/sflphonedrc - -fi - -# dh_installdeb will replace this with shell code automatically -# generated by other debhelper scripts. - -#DEBHELPER# - -exit 0 - - diff --git a/tools/build-system/distributions/ubuntu/debian-sflphone-common/preinst b/tools/build-system/distributions/ubuntu/debian-sflphone-common/preinst deleted file mode 100644 index 6d04e97b45..0000000000 --- a/tools/build-system/distributions/ubuntu/debian-sflphone-common/preinst +++ /dev/null @@ -1,16 +0,0 @@ -#!/bin/sh -# postrm script for sflphone -# -# see: dh_installdeb(1) - -set -e - -package=sflphone - -case "$1" in - install|upgrade) - # Clear the old dbus-c++ and iax2 if presents - ;; -esac - -exit 0 diff --git a/tools/build-system/distributions/ubuntu/debian-sflphone-common/rules b/tools/build-system/distributions/ubuntu/debian-sflphone-common/rules deleted file mode 100755 index 5624b56e3e..0000000000 --- a/tools/build-system/distributions/ubuntu/debian-sflphone-common/rules +++ /dev/null @@ -1,120 +0,0 @@ -#!/usr/bin/make -f -# -*- makefile -*- -# Sample debian/rules that uses debhelper. -# This file was originally written by Joey Hess and Craig Small. -# As a special exception, when this file is copied by dh-make into a -# dh-make output file, you may use that output file without restriction. -# This special exception was added by Craig Small in version 0.37 of dh-make. - -# Uncomment this to turn on verbose mode. -#export DH_VERBOSE=1 -export DH_OPTIONS - -package=sflphone-common - -CXX = g++-4.0 -CFLAGS = -Wall -g -DEB_INSTALL_MANPAGES_sflphone_common = sflphoned.1 - -configure: configure-stamp -configure-stamp: - dh_testdir - # Add here commands to configure the package. - ./autogen.sh - ./configure --prefix=/usr - cd libs/pjproject; ./autogen.sh; ./configure --prefix=/usr - touch configure-stamp - -#Architecture -build: build-arch build-indep - -build-arch: build-arch-stamp -build-arch-stamp: configure-stamp - - # Add here commands to compile the arch part of the package. - cd libs/pjproject; $(MAKE) dep; $(MAKE) clean; $(MAKE) - cd -; $(MAKE) - touch $@ - -build-indep: build-indep-stamp -build-indep-stamp: configure-stamp - - # Add here commands to compile the indep part of the package. - #$(MAKE) doc - touch $@ -clean: - dh_testdir - dh_testroot - rm -f build-arch-stamp build-indep-stamp configure-stamp - # Add here commands to clean up after the build process. - [ ! -f Makefile ] || $(MAKE) distclean - -ifneq "$(wildcard /usr/share/misc/config.sub)" "" - cp -f /usr/share/misc/config.sub config.sub -endif -ifneq "$(wildcard /usr/share/misc/config.guess)" "" - cp -f /usr/share/misc/config.guess config.guess -endif - dh_clean - -install: install-indep install-arch -install-indep: - dh_testdir - dh_testroot - dh_clean -k -i - dh_installdirs -i - # Add here commands to install the package into debian/sflphone. - -install-arch: - dh_testdir - dh_testroot - dh_clean -k -s - dh_installdirs -s - # Add here commands to install the arch part of the package into - # debian/tmp. - $(MAKE) DESTDIR=$(CURDIR)/debian/$(package) install - cd libs/pjproject; $(MAKE) prefix=$(CURDIR)/debian/$(package)/usr install - rm -rf $(CURDIR)/debian/$(package)/usr/include - dh_install -s -# Must not depend on anything. This is to be called by -# binary-arch/binary-indep -# in another 'make' thread. - -binary-common: - dh_testdir - dh_testroot - dh_installchangelogs ChangeLog - dh_installdocs - dh_installexamples -# dh_installmenu -# dh_installdebconf -# dh_installlogrotate -# dh_installemacsen -# dh_installpam -# dh_installmime -# dh_python -# dh_installinit -# dh_installcron -# dh_installinfo - dh_installman - dh_link - dh_strip - dh_compress - dh_fixperms -# dh_perl - dh_makeshlibs - dh_installdeb -# dh_shlibdeps - dh_gencontrol - dh_md5sums - dh_builddeb -# Build architecture independant packages using the common target. -binary-indep: build-indep install-indep - $(MAKE) -f debian/rules DH_OPTIONS=-i binary-common - -# Build architecture dependant packages using the common target. -binary-arch: build-arch install-arch - $(MAKE) -f debian/rules DH_OPTIONS=-s binary-common - -binary: binary-arch binary-indep -.PHONY: build clean binary-indep binary-arch binary install install-indep install-arch configure diff --git a/tools/build-system/gpg/setup-gpg.sh b/tools/build-system/gpg/setup-gpg.sh deleted file mode 100755 index 1a12793003..0000000000 --- a/tools/build-system/gpg/setup-gpg.sh +++ /dev/null @@ -1,56 +0,0 @@ -#!/bin/bash -##################################################### -# File Name: setup-gpg.sh -# -# Purpose : -# -# Author: Julien Bonjean (julien@bonjean.info) -# -# Creation Date: 2009-04-20 -# Last Modified: -##################################################### - -# pkill gpg-agent - -export LANG=en_CA.UTF-8 -export LC_ALL=en_CA.UTF-8 - -echo "Check if GPG key is present" -gpg --list-secret-keys | grep "Savoir-Faire Linux Inc." >/dev/null - -if [ "$?" -ne "0" ]; then - echo "!! GPG private key is not present" - exit -1 -fi - -echo "Check GPG agent" -pgrep -u "sflphone-package-manager" gpg-agent > /dev/null -if [ "$?" -ne "0" ]; then - echo "Not running, launching it" - EVAL=`/usr/bin/gpg-agent --daemon --write-env-file $HOME/.gpg-agent-info --default-cache-ttl 2000000000 --max-cache-ttl 2000000000 --pinentry-program /usr/bin/pinentry` - eval ${EVAL} -fi - -if [ "$?" -ne "0" ]; then - echo "!! Error with GPG agent" - exit -1 -fi - -GPG_AGENT_INFO=`cat $HOME/.gpg-agent-info 2> /dev/null` -export ${GPG_AGENT_INFO} - -if [ "${GPG_AGENT_INFO}" == "" ]; then - echo "!! Cannot get GPG agent info" - exit -1 -fi - -GPG_TTY=`tty` -export GPG_TTY - -touch ./test-gpg -gpg -v --clearsign --use-agent ./test-gpg -rm -f ./test-gpg -rm -f ./test-gpg.asc - -exit 0 - diff --git a/tools/build-system/launch-build-machine.sh b/tools/build-system/launch-build-machine.sh deleted file mode 100755 index f4c0246049..0000000000 --- a/tools/build-system/launch-build-machine.sh +++ /dev/null @@ -1,431 +0,0 @@ -#!/bin/bash -##################################################### -# File Name: launch-build-machine.sh -# -# Purpose : -# -# Author: Julien Bonjean (julien@bonjean.info) -# -# Creation Date: 2009-04-20 -# Last Modified: 2009-08-07 17:01:32 -0400 -##################################################### - -# -# Not working with git 1.5.4.3 -# - -TAG=`date +%Y-%m-%d` - -# wait delay after startup and shutdown of VMs -STARTUP_WAIT=40 -SHUTDOWN_WAIT=30 - -# ssh stuff -SSH_OPTIONS="-o LogLevel=ERROR -o CheckHostIP=no -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null" -SSH_HOST="sflphone@127.0.0.1" -SSH_REPOSITORY_HOST="sflphone-package-manager@dev.savoirfairelinux.net" -SSH_BASE="ssh ${SSH_OPTIONS} -p 50001 ${SSH_HOST}" -SCP_BASE="scp ${SSH_OPTIONS} -r -P 50001" - -# home directory -ROOT_DIR="/home/projects/sflphone" - -# local hidden repository (only for changelog commit) -LOCAL_REPOSITORY=${ROOT_DIR}/.sflphone-repository - -# gpg passphrase file -GPG_FILE="${ROOT_DIR}/.gpg-sflphone" - -# vbox config directory -export VBOX_USER_HOME="${ROOT_DIR}/vbox" - -# remote home directory -REMOTE_ROOT_DIR="/home/sflphone" - -# scripts -SCRIPTS_DIR="${ROOT_DIR}/build-system" -PACKAGING_SCRIPTS_DIR="${SCRIPTS_DIR}/remote" -DISTRIBUTION_SCRIPTS_DIR="${SCRIPTS_DIR}/distributions" - -# directory that will be deployed to remote machine -TODEPLOY_DIR="${ROOT_DIR}/sflphone-packaging" -TODEPLOY_BUILD_DIR="${TODEPLOY_DIR}/build" - -# remote deployment dir -REMOTE_DEPLOY_DIR="/home/sflphone/sflphone-packaging" - -# cloned repository and archive -REPOSITORY_DIR="${TODEPLOY_BUILD_DIR}/sflphone" -REPOSITORY_ARCHIVE="`dirname ${REPOSITORY_DIR}`/sflphone.tar.gz" -REPOSITORY_SFLPHONE_COMMON_DIR="${REPOSITORY_DIR}/sflphone-common" -REPOSITORY_SFLPHONE_CLIENT_KDE_DIR="${REPOSITORY_DIR}/sflphone-client-kde" -REPOSITORY_SFLPHONE_CLIENT_GNOME_DIR="${REPOSITORY_DIR}/sflphone-client-gnome" - -# where results go -PACKAGING_RESULT_DIR=${ROOT_DIR}/packages-${TAG} - -USER="sflphone" - -RELEASE_MODE= - -SNAPSHOT_TAG=`date +%Y%m%d` - -DO_CLEAN=1 -DO_PREPARE=1 -DO_PUSH=1 -DO_MAIN_LOOP=1 -DO_SIGNATURES=1 -DO_UPLOAD=1 -DO_LOGGING=1 -DO_SEND_EMAIL=1 - -EDITOR=echo -export EDITOR - -NON_FATAL_ERRORS=0 - -MACHINES=( "ubuntu-8.04" "ubuntu-8.04-64" "ubuntu-8.10" "ubuntu-8.10-64" "ubuntu-9.04" "ubuntu-9.04-64" "opensuse-11" "opensuse-11-64" "mandriva-2009.1" ) - -######################### -# BEGIN -######################### - -echo -echo " /***********************\\" -echo " | SFLPhone build system |" -echo " \\***********************/" -echo - -for PARAMETER in $* -do - case ${PARAMETER} in - --help) - echo - echo "Options :" - echo " --skip-clean" - echo " --skip-prepare" - echo " --skip-push" - echo " --skip-main-loop" - echo " --skip-signatures" - echo " --skip-upload" - echo " --no-logging" - echo " --machine=MACHINE" - echo " --release-mode=[beta|rc|release]" - echo " --list-machines" - echo - exit 0;; - --skip-clean) - unset DO_CLEAN;; - --skip-prepare) - unset DO_PREPARE;; - --skip-push) - unset DO_PUSH;; - --skip-main-loop) - unset DO_MAIN_LOOP;; - --skip-signatures) - unset DO_SIGNATURES;; - --skip-upload) - unset DO_UPLOAD;; - --no-logging) - unset DO_LOGGING;; - --machine=*) - MACHINES=(${PARAMETER##*=});; - --release-mode=*) - RELEASE_MODE=(${PARAMETER##*=});; - --list-machines) - echo "Available machines :" - for MACHINE in ${MACHINES[@]}; do - echo " "${MACHINE} - done - exit 0;; - *) - echo "Unknown parameter : ${PARAMETER}" - exit -1;; - esac -done - -# if more than one VM will be launched, automatically stop running VMs -if [ "${#MACHINES[@]}" -gt "1" ]; then - VBoxManage list runningvms | tail -n +5 | awk '{print $1}' | xargs -i VBoxManage controlvm {} poweroff -fi - -# change to working directory -cd ${SCRIPTS_DIR} - -if [ "$?" -ne "0" ]; then - echo " !! Cannot cd to working directory" - exit -1 -fi - -WHO=`whoami` - -if [ "${WHO}" != "${USER}" ]; then - echo "!! Please use user ${USER} to run this script" - exit -1; -fi - -# logging -if [ ${DO_CLEAN} ]; then - rm -rf ${PACKAGING_RESULT_DIR} 2>/dev/null -fi -mkdir ${PACKAGING_RESULT_DIR} 2>/dev/null -if [ ${DO_LOGGING} ]; then - - # open file descriptor - rm -f ${PACKAGING_RESULT_DIR}/packaging.log - exec 3<> ${PACKAGING_RESULT_DIR}/packaging.log - - # redirect outputs (stdout & stderr) - exec 1>&3 - exec 2>&3 -fi - -# check release -if [ ${RELEASE_MODE} ]; then - case ${RELEASE_MODE} in - beta);; - rc[1-9]);; - release);; - *) - echo "Bad release mode" - exit -1;; - esac -fi - -# check machines list -if [ -z "${MACHINES}" ]; then - echo "Need at least a machine name to launch" - exit -1 -fi - -echo -echo "Launching build system with the following machines :" -for MACHINE in ${MACHINES[*]} -do - echo " "${MACHINE} -done -echo - -if [ ${RELEASE_MODE} ]; then - echo "Release mode : ${RELEASE_MODE}" -else - echo "Snapshot mode : ${SNAPSHOT_TAG}" -fi - -######################### -# COMMON PART -######################### - -if [ ${DO_PREPARE} ]; then - - echo - echo "Cleaning old deploy dir" - rm -rf ${TODEPLOY_DIR} - mkdir ${TODEPLOY_DIR} - mkdir ${TODEPLOY_BUILD_DIR} - - echo "Clone repository" - git clone ssh://repos-sflphone-git@git.sflphone.org/~/sflphone.git ${REPOSITORY_DIR} >/dev/null 2>&1 - - if [ "$?" -ne "0" ]; then - echo " !! Cannot clone repository" - exit -1 - fi - - VERSION=`cd ${REPOSITORY_DIR} && git describe --tag HEAD | cut -d "." -f1-3` - - if [ ${RELEASE_MODE} ]; then - if [ "${RELEASE_MODE}" != "release" ];then - VERSION="${VERSION}~${RELEASE_MODE}" - fi - else - VERSION="${VERSION}~snapshot${SNAPSHOT_TAG}" - fi - echo "Version is : ${VERSION}" - - # generate the changelog, according to the distribution and the git commit messages - echo "Update debian changelogs" - cd ${REPOSITORY_DIR} - ${SCRIPTS_DIR}/sfl-git-dch.sh ${VERSION} ${RELEASE_MODE} - - if [ "$?" -ne "0" ]; then - echo "!! Cannot update debian changelogs" - exit -1 - fi - - # if push is activated - if [[ ${DO_PUSH} && ${RELEASE_MODE} ]];then - - echo " Doing commit" - - cd ${LOCAL_REPOSITORY} - git commit -m "[#1262] Updated debian changelogs (${VERSION})" . - - echo " Pushing commit" - git push origin master - - cd - - fi - - # change current branch if needed - if [ ${RELEASE_MODE} ]; then - cd ${REPOSITORY_DIR} - git checkout origin/release -b release - else - echo "Using master branch" - fi - - echo "Write version numbers for following processes" - echo "${VERSION}" > ${REPOSITORY_DIR}/sflphone-common/VERSION - echo "${VERSION}" > ${REPOSITORY_DIR}/sflphone-client-gnome/VERSION - echo "${VERSION}" > ${REPOSITORY_DIR}/sflphone-client-kde/VERSION - echo "${VERSION}" > ${TODEPLOY_BUILD_DIR}/VERSION - - echo "Archiving repository" - tar czf ${REPOSITORY_ARCHIVE} --exclude .git -C `dirname ${REPOSITORY_DIR}` sflphone - - if [ "$?" -ne "0" ]; then - echo " !! Cannot archive repository" - exit -1 - fi - - echo "Removing repository" - rm -rf ${REPOSITORY_DIR} - - echo "Finish preparing deploy directory" - cp -r ${DISTRIBUTION_SCRIPTS_DIR}/* ${TODEPLOY_DIR} - - if [ "$?" -ne "0" ]; then - echo " !! Cannot prepare scripts for deployment" - exit -1 - fi -fi - -######################### -# MAIN LOOP -######################### - -if [ ${DO_MAIN_LOOP} ]; then - - echo - echo "Entering main loop" - echo - - rm -f ${PACKAGING_RESULT_DIR}/stats.log - for MACHINE in ${MACHINES[*]} - do - - echo "Launch machine ${MACHINE}" - VM_STATE=`VBoxManage showvminfo ${MACHINE} | grep State | awk '{print $2}'` - if [ "${VM_STATE}" = "running" ]; then - echo "Not needed, already running" - else - cd ${VBOX_USER_HOME} && VBoxHeadless -startvm "${MACHINE}" -p 50000 & - if [[ ${MACHINE} =~ "opensuse" || ${MACHINE} =~ "mandriva" ]]; then - STARTUP_WAIT=200 - fi - echo "Wait ${STARTUP_WAIT} s" - sleep ${STARTUP_WAIT} - fi - - echo "Clean remote directory" - ${SSH_BASE} "rm -rf ${REMOTE_DEPLOY_DIR} 2>/dev/null" - - echo "Deploy packaging system" - ${SCP_BASE} ${TODEPLOY_DIR} ${SSH_HOST}: - - if [ "$?" -ne "0" ]; then - echo " !! Cannot deploy packaging system" - echo "${MACHINE} : Cannot deploy packaging system" >> ${PACKAGING_RESULT_DIR}/stats.log - NON_FATAL_ERRORS=1 - else - - echo "Launch remote build" - ${SSH_BASE} "cd ${REMOTE_DEPLOY_DIR} && ./build-packages.sh ${RELEASE_MODE}" - - if [ "$?" -ne "0" ]; then - echo " !! Error during remote packaging process" - echo "${MACHINE} : Error during remote packaging process" >> ${PACKAGING_RESULT_DIR}/stats.log - NON_FATAL_ERRORS=1 - else - - echo "Retrieve dists files" - ${SCP_BASE} ${SSH_HOST}:${REMOTE_DEPLOY_DIR}/deb ${PACKAGING_RESULT_DIR}/ >/dev/null 2>&1 - ${SCP_BASE} ${SSH_HOST}:${REMOTE_DEPLOY_DIR}/rpm ${PACKAGING_RESULT_DIR}/ >/dev/null 2>&1 - - echo "${MACHINE} : OK" >> ${PACKAGING_RESULT_DIR}/stats.log - fi - - echo "Retrieve log files" - ${SCP_BASE} ${SSH_HOST}:${REMOTE_DEPLOY_DIR}"/*.log" ${PACKAGING_RESULT_DIR}/ - fi - - if [ "${VM_STATE}" = "running" ]; then - echo "Leave machine running" - else - echo "Shut down machine ${MACHINE}" - ${SSH_BASE} 'sudo /sbin/shutdown -h now' - echo "Wait ${SHUTDOWN_WAIT} s" - sleep ${SHUTDOWN_WAIT} - # hard shut down (just to be sure) - cd "${VBOX_USER_HOME}" && VBoxManage controlvm ${MACHINE} poweroff >/dev/null 2>&1 - fi - done -fi - -######################### -# SIGNATURES -######################### - -if [ ${DO_SIGNATURES} ]; then - - echo "Sign packages" - find ${PACKAGING_RESULT_DIR}/deb/dists -name "*.deb" -exec dpkg-sig -g '--yes --batch --no-tty -q --passphrase `cat '${GPG_FILE}'`' -k 'Savoir-Faire Linux Inc.' --sign builder --sign-changes full {} \; - find ${PACKAGING_RESULT_DIR}/deb/dists -name "*.changes" -exec gpg --yes --batch --no-tty --local-user 'Savoir-Faire Linux Inc.' --passphrase `cat ${GPG_FILE}` --clearsign --list-options no-show-policy-urls --armor --textmode --output {}.asc {} \; -fi - -######################### -# UPLOAD FILES -######################### - -if [ ${DO_UPLOAD} ]; then - - echo - echo "Upload packages" - echo - - echo "Prepare packages upload" - scp ${SSH_OPTIONS} ${PACKAGING_SCRIPTS_DIR}/update-repository.sh ${SSH_REPOSITORY_HOST}:debian/ - - if [ "$?" -ne "0" ]; then - echo " !! Cannot deploy repository scripts" - fi - - echo "Upload packages" - echo "Install dists files to repository" - scp -r ${SSH_OPTIONS} ${PACKAGING_RESULT_DIR}/rpm/* ${SSH_REPOSITORY_HOST}:rpm/ - scp -r ${SSH_OPTIONS} ${PACKAGING_RESULT_DIR}/deb/dists ${SSH_REPOSITORY_HOST}:debian/ - - if [ "$?" -ne "0" ]; then - echo " !! Cannot upload packages" - exit -1 - fi - - echo "Update repository" - ssh ${SSH_OPTIONS} ${SSH_REPOSITORY_HOST} "cd debian && ./update-repository.sh" - - if [ "$?" -ne "0" ]; then - echo " !! Cannot update repository" - exit -1 - fi -fi - -if [ "${NON_FATAL_ERRORS}" -eq "1" ]; then - exit -1 -fi - -# close file descriptor -exec 3>&- - -exit 0 - diff --git a/tools/build-system/packages/git-buildpackage_0.4.45_all.deb b/tools/build-system/packages/git-buildpackage_0.4.45_all.deb deleted file mode 100644 index cf62358c48f1a5ce054c997b8b87ef9dac677028..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 62098 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 S{K>cf&;CqKMv=jSg#iGC@DxD+ diff --git a/tools/build-system/remote/update-repository.sh b/tools/build-system/remote/update-repository.sh deleted file mode 100755 index a488a29745..0000000000 --- a/tools/build-system/remote/update-repository.sh +++ /dev/null @@ -1,68 +0,0 @@ -#!/bin/bash - -# Script to update the debian repository description files (Release, Packages, Sources) -# -# @author: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> -# @date: 2008 Jan 16 - -ROOT_DIR="/var/repos/sflphone/debian" - -# gpg passphrase file -GPG_FILE="${ROOT_DIR}/.gpg-sflphone" - -USER="sflphone-package-manager" - -export LANG=en_CA.UTF-8 -export LC_ALL=en_CA.UTF-8 - -WHO=`whoami` - -if [ "${WHO}" != "${USER}" ]; then - echo "!! Please use user ${USER} to run this script" - exit -1; -fi - -echo "Remove cache files" -rm -f packages-i386.db -rm -f packages-amd64.db - -apt-ftparchive generate conf/apt-ftparchive.conf - -echo "Generate the description file for each distribution" -apt-ftparchive -c conf/apt-hardy-release.conf release dists/hardy > dists/hardy/Release -apt-ftparchive -c conf/apt-hardy-testing.conf release dists/hardy-testing > dists/hardy-testing/Release -apt-ftparchive -c conf/apt-hardy-daily.conf release dists/hardy-daily > dists/hardy-daily/Release - -apt-ftparchive -c conf/apt-intrepid-release.conf release dists/intrepid > dists/intrepid/Release -apt-ftparchive -c conf/apt-intrepid-testing.conf release dists/intrepid-testing > dists/intrepid-testing/Release -apt-ftparchive -c conf/apt-intrepid-daily.conf release dists/intrepid-daily > dists/intrepid-daily/Release - -apt-ftparchive -c conf/apt-jaunty-release.conf release dists/jaunty > dists/jaunty/Release -apt-ftparchive -c conf/apt-jaunty-testing.conf release dists/jaunty-testing > dists/jaunty-testing/Release -apt-ftparchive -c conf/apt-jaunty-daily.conf release dists/jaunty-daily > dists/jaunty-daily/Release - -echo "Sign the Release files" - -rm -f dists/intrepid/Release.gpg -rm -f dists/intrepid-testing/Release.gpg -rm -f dists/intrepid-daily/Release.gpg -gpg --passphrase `cat ${GPG_FILE}` --no-tty -u C842D122 --output dists/intrepid/Release.gpg -ba dists/intrepid/Release -gpg --passphrase `cat ${GPG_FILE}` --no-tty -u C842D122 --output dists/intrepid-testing/Release.gpg -ba dists/intrepid-testing/Release -gpg --passphrase `cat ${GPG_FILE}` --no-tty -u C842D122 --output dists/intrepid-daily/Release.gpg -ba dists/intrepid-daily/Release - -rm -f dists/hardy/Release.gpg -rm -f dists/hardy-testing/Release.gpg -rm -f dists/hardy-daily/Release.gpg -gpg --passphrase `cat ${GPG_FILE}` --no-tty -u C842D122 --output dists/hardy/Release.gpg -ba dists/hardy/Release -gpg --passphrase `cat ${GPG_FILE}` --no-tty -u C842D122 --output dists/hardy-testing/Release.gpg -ba dists/hardy-testing/Release -gpg --passphrase `cat ${GPG_FILE}` --no-tty -u C842D122 --output dists/hardy-daily/Release.gpg -ba dists/hardy-daily/Release - -rm -f dists/jaunty/Release.gpg -rm -f dists/jaunty-testing/Release.gpg -rm -f dists/jaunty-daily/Release.gpg -gpg --passphrase `cat ${GPG_FILE}` --no-tty -u C842D122 --output dists/jaunty/Release.gpg -ba dists/jaunty/Release -gpg --passphrase `cat ${GPG_FILE}` --no-tty -u C842D122 --output dists/jaunty-testing/Release.gpg -ba dists/jaunty-testing/Release -gpg --passphrase `cat ${GPG_FILE}` --no-tty -u C842D122 --output dists/jaunty-daily/Release.gpg -ba dists/jaunty-daily/Release - -echo "All done" -exit 0 diff --git a/tools/build-system/send-emails.sh b/tools/build-system/send-emails.sh deleted file mode 100755 index 4b9c7d52bc..0000000000 --- a/tools/build-system/send-emails.sh +++ /dev/null @@ -1,41 +0,0 @@ -#!/bin/bash -##################################################### -# File Name: send-emails.sh -# -# Purpose : -# -# Author: Julien Bonjean (julien@bonjean.info) -# -# Creation Date: 2009-04-20 -# Last Modified: 2009-06-01 18:11:20 -0400 -##################################################### - -TAG=`date +%Y-%m-%d` -ROOT_DIR="/home/projects/sflphone" -PACKAGING_RESULT_DIR=${ROOT_DIR}/packages-${TAG} -STATUS="OK" - -if [ "$1" -ne 0 ]; then - STATUS="ERROR" -fi - -echo -echo "Send notification emails" -echo - -MAIL_SUBJECT="[ ${TAG} ] SFLphone Automatic Build System : ${STATUS}" - -if [ "$1" -eq 0 ]; then - echo | mail -s "${MAIL_SUBJECT}" -c emmanuel.milou@savoirfairelinux.com julien.bonjean@savoirfairelinux.com -else -# ( -# for i in ${PACKAGING_RESULT_DIR}/*.log -# do -# uuencode $i $(basename $i) -# done -# ) - cat ${PACKAGING_RESULT_DIR}/stats.log | mail -s "${MAIL_SUBJECT}" -c emmanuel.milou@savoirfairelinux.com julien.bonjean@savoirfairelinux.com -fi - -exit 0 - diff --git a/tools/build-system/sfl-git-dch.sh b/tools/build-system/sfl-git-dch.sh deleted file mode 100755 index 740cc448b6..0000000000 --- a/tools/build-system/sfl-git-dch.sh +++ /dev/null @@ -1,163 +0,0 @@ -#!/bin/bash -##################################################### -# File Name: sfl-git-dch.sh -# -# Purpose : -# -# Author: Julien Bonjean (julien@bonjean.info) -# -# Creation Date: 2009-05-13 -# Last Modified: 2009-07-20 23:03:24 -0400 -##################################################### - -# set -x - -VERSION=$1 -RELEASE_MODE=$2 - -ROOT_DIR="/home/projects/sflphone" -TODEPLOY_DIR="${ROOT_DIR}/sflphone-packaging" -TODEPLOY_BUILD_DIR="${TODEPLOY_DIR}/build" -REPOSITORY_DIR="${TODEPLOY_BUILD_DIR}/sflphone" -SCRIPTS_DIR="${ROOT_DIR}/build-system" -DEBIAN_DIR="${SCRIPTS_DIR}/distributions/ubuntu" -CHANGELOG_FILES=( "${DEBIAN_DIR}/debian-sflphone-common/changelog" "${DEBIAN_DIR}/debian-sflphone-client-gnome/changelog" "${DEBIAN_DIR}/debian-sflphone-client-kde/changelog") - -export DEBFULLNAME="SFLphone Automatic Build System" -export DEBEMAIL="team@sflphone.org" -export EDITOR="echo" - -cd ${REPOSITORY_DIR} - -if [ "$?" -ne "0" ]; then - echo " !! Cannot cd to working directory" - exit -1 -fi - -# get last release tag -LAST_RELEASE_TAG_NAME=`git tag -l "[0-9]\.[0-9]\.[0-9]\.*" | tail -n 1` - -if [ "$?" -ne "0" ]; then - echo " !! Error when retrieving last tag" - exit -1 -fi - -# get last release tag -PREVIOUS_RELEASE_TAG_NAME=`git tag -l "[0-9]\.[0-9]\.[0-9]\.*" | tail -n 2 | sed -n '1p;1q'` - -if [ "$?" -ne "0" ]; then - echo " !! Error when retrieving previous revision tag" - exit -1 -fi - -echo "Last release tag is : ${LAST_RELEASE_TAG_NAME}" - -# get last release commit hash -REF_COMMIT_HASH= -if [ ${RELEASE_MODE} ]; then - echo "Reference tag is : ${PREVIOUS_RELEASE_TAG_NAME}" - REF_COMMIT_HASH=`git show --pretty=format:"%H" -s ${PREVIOUS_RELEASE_TAG_NAME} | tail -n 1` -else - echo "Reference tag is : ${LAST_RELEASE_TAG_NAME}" - REF_COMMIT_HASH=`git show --pretty=format:"%H" -s ${LAST_RELEASE_TAG_NAME} | tail -n 1` -fi - -if [ "$?" -ne "0" ]; then - echo " !! Error when retrieving last release commit hash" - exit -1 -fi - -echo "Reference commit is : ${REF_COMMIT_HASH}" -echo - -# use git log to retrieve changelog content -CHANGELOG_CONTENT=`git log --no-merges --pretty=format:"%s" ${REF_COMMIT_HASH}.. | grep -v "\[\#1262\]"` - -if [ "$?" -eq "1" ]; then - echo " !! No new commit since last release" - CHANGELOG_CONTENT="No new commit" -fi - -if [ "$?" -ne "0" ]; then - echo " !! Error when retrieving changelog content" - exit -1 -fi - -# iterate throw changelog files -for CHANGELOG_FILE in ${CHANGELOG_FILES[@]} -do - echo "Changelog : ${CHANGELOG_FILE}" - echo - rm -f ${CHANGELOG_FILE}.dch >/dev/null 2>&1 - - # if previous entry is a snapshot, remove it - sed -n 's/ //g;3p;3q' ${CHANGELOG_FILE} | grep "**SNAPSHOT" >/dev/null 2>&1 - if [ $? -eq 0 ]; then - echo "Previous entry is a snapshot, removing it" - - # detect first section length - FIRST_SECTION_LENGTH=`tail -n +2 ${CHANGELOG_FILE} | nl -ba | grep -m 1 "sflphone-.* SYSTEM; urgency=.*" | awk '{print $1}'` - - if [ "$?" -ne "0" ] || [ ! ${FIRST_SECTION_LENGTH} ]; then - echo " !! Error when retrieving snapshot entry length" - exit -1 - fi - - # remove first section - sed -i "1,${FIRST_SECTION_LENGTH}d" ${CHANGELOG_FILE} - - if [ "$?" -ne "0" ]; then - echo " !! Error when removing snapshot section" - exit -1 - fi - fi - - echo -n "Generate changelog " - IS_FIRST=1 - echo "${CHANGELOG_CONTENT}" | while read line - do - - if [ ${IS_FIRST} ] - then - yes | dch --changelog ${CHANGELOG_FILE} -b --allow-lower-version --no-auto-nmu --distribution SYSTEM --newversion ${VERSION}-SYSVER "$line" >/dev/null 2>&1 - - if [ "$?" -ne "0" ]; then - echo - echo " !! Error with new version" - exit -1 - fi - - IS_FIRST= - else - dch --changelog ${CHANGELOG_FILE} --no-auto-nmu "$line" - if [ "$?" -ne "0" ]; then - echo - echo " !! Error when adding changelog entry" - exit -1 - fi - fi - echo -n . - done - - # add snapshot or release flag if needed - echo - if [ ${RELEASE_MODE} ]; then - sed -i "3i\ ** ${VERSION} **\n" ${CHANGELOG_FILE} - if [ "$?" -ne "0" ]; then - echo " !! Error when adding snapshot flag" - exit -1 - fi - else - sed -i "3i\ ** SNAPSHOT ${VERSION} **\n" ${CHANGELOG_FILE} - if [ "$?" -ne "0" ]; then - echo " !! Error when adding snapshot flag" - exit -1 - fi - fi - echo -done - -echo "All done !" - -exit 0 - -- GitLab From 9398e80dc5532d53dd15ab2867bc5c1e86b326bd Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Wed, 16 Dec 2009 11:37:16 -0500 Subject: [PATCH 095/188] [#2519] Synchronize account map and SIPVoIPLink loading --- sflphone-common/src/managerimpl.cpp | 36 ++++++++++---------- sflphone-common/src/sip/sipaccount.cpp | 32 +++++++++--------- sflphone-common/src/sip/sipvoiplink.cpp | 44 +++++++++---------------- 3 files changed, 50 insertions(+), 62 deletions(-) diff --git a/sflphone-common/src/managerimpl.cpp b/sflphone-common/src/managerimpl.cpp index c97310af27..a4144df327 100644 --- a/sflphone-common/src/managerimpl.cpp +++ b/sflphone-common/src/managerimpl.cpp @@ -120,6 +120,7 @@ ManagerImpl::~ManagerImpl (void) void ManagerImpl::init() { + // Load accounts, init map loadAccountMap(); @@ -4223,7 +4224,7 @@ short ManagerImpl::loadAccountMap() { - _debug ("ManagerImpl::loadAccountMap\n"); + _debug ("Loading account map\n"); short nbAccount = 0; TokenList sections = _config.getSections(); @@ -4242,16 +4243,26 @@ ManagerImpl::loadAccountMap() _directIpAccount = AccountCreator::createAccount (AccountCreator::SIP_DIRECT_IP_ACCOUNT, ""); if (_directIpAccount == NULL) { + _debug ("Failed to create direct ip calls \"account\"\n"); } else { - // Force the options to be loaded - // No registration in the sense of - // the REGISTER method is performed. + _debug ("Succeed to create direct ip calls \"account\"\n"); _accountMap[IP2IP_PROFILE] = _directIpAccount; - _directIpAccount->registerVoIPLink(); + + // Force IP2IP settings to be loaded to be loaded + // No registration in the sense of the REGISTER method is performed. + _directIpAccount->registerVoIPLink(); + + // SIPVoIPlink is used as a singleton, it is the first call to instance here + // The SIP library initialization is done in the SIPVoIPLink constructor + // We need the IP2IP settings to be loaded at this time as they are used + // for default sip transport + _directIpAccount->setVoIPLink(SIPVoIPLink::instance ("")); + } + // initialize other accounts while (iter != sections.end()) { // Check if it starts with "Account:" (SIP and IAX pour le moment) if ( (int) (iter->find ("Account:")) != 0) { @@ -4276,25 +4287,14 @@ ManagerImpl::loadAccountMap() if (tmpAccount != NULL) { _debug ("Loading account %s \n", iter->c_str()); _accountMap[iter->c_str() ] = tmpAccount; + tmpAccount->setVoIPLink(SIPVoIPLink::instance ("")); nbAccount++; } iter++; } - /* - if (_directIpAccount == NULL) { - _debug ("Failed to create direct ip calls \"account\"\n"); - } else { - // Force the options to be loaded - // No registration in the sense of - // the REGISTER method is performed. - _debug ("Succeed to create direct ip calls \"account\"\n"); - _directIpAccount->registerVoIPLink(); - _accountMap[IP2IP_PROFILE] = _directIpAccount; - } - */ - _debug ("nbAccount loaded %i \n", nbAccount); + _debug ("nb account loaded %i \n", nbAccount); return nbAccount; } diff --git a/sflphone-common/src/sip/sipaccount.cpp b/sflphone-common/src/sip/sipaccount.cpp index b8c509b29a..ae2da8374e 100644 --- a/sflphone-common/src/sip/sipaccount.cpp +++ b/sflphone-common/src/sip/sipaccount.cpp @@ -44,14 +44,13 @@ SIPAccount::SIPAccount (const AccountID& accountID) , _tlsSetting (NULL) , _displayName ("") { - /* SIPVoIPlink is used as a singleton, because we want to have only one link for all the SIP accounts created */ - /* So instead of creating a new instance, we just fetch the static instance, or create one if it is not yet */ - /* The SIP library initialization is done in the SIPVoIPLink constructor */ - /* The SIP voip link is now independant of the account ID as it can manage several SIP accounts */ - _link = SIPVoIPLink::instance (""); + + // IP2IP settings must be loaded before singleton instanciation, cannot call it here... + + // _link = SIPVoIPLink::instance (""); /* Represents the number of SIP accounts connected the same link */ - dynamic_cast<SIPVoIPLink*> (_link)->incrementClients(); + // dynamic_cast<SIPVoIPLink*> (_link)->incrementClients(); } @@ -65,6 +64,7 @@ SIPAccount::~SIPAccount() free (_tlsSetting); } + int SIPAccount::initCredential (void) { int credentialCount = 0; @@ -76,7 +76,7 @@ int SIPAccount::initCredential (void) md5HashingEnabled = Manager::instance().getConfigBool (PREFERENCES, CONFIG_MD5HASH); std::string digest; -// Create the credential array + // Create the credential array pjsip_cred_info * cred_info = (pjsip_cred_info *) malloc (sizeof (pjsip_cred_info) * (credentialCount)); if (cred_info == NULL) { @@ -86,7 +86,7 @@ int SIPAccount::initCredential (void) pj_bzero (cred_info, sizeof (pjsip_cred_info) *credentialCount); -// Use authentication username if provided + // Use authentication username if provided if (!_authenticationUsername.empty()) { cred_info[0].username = pj_str (strdup (_authenticationUsername.c_str())); @@ -94,15 +94,15 @@ int SIPAccount::initCredential (void) cred_info[0].username = pj_str (strdup (_username.c_str())); } -// Set password + // Set password cred_info[0].data = pj_str (strdup (_password.c_str())); -// Set realm for that credential. * by default. + // Set realm for that credential. * by default. cred_info[0].realm = pj_str (strdup (_realm.c_str())); -// We want to make sure that the password is really -// 32 characters long. Otherwise, pjsip will fail -// on an assertion. + // We want to make sure that the password is really + // 32 characters long. Otherwise, pjsip will fail + // on an assertion. if (md5HashingEnabled && _password.length() == 32) { dataType = PJSIP_CRED_DATA_DIGEST; _debug ("Setting digest \n"); @@ -110,10 +110,10 @@ int SIPAccount::initCredential (void) dataType = PJSIP_CRED_DATA_PLAIN_PASSWD; } -// Set the datatype + // Set the datatype cred_info[0].data_type = dataType; - -// Set the secheme + + // Set the secheme cred_info[0].scheme = pj_str ( (char*) "digest"); int i; diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp index c483beb7e1..065cdba48d 100644 --- a/sflphone-common/src/sip/sipvoiplink.cpp +++ b/sflphone-common/src/sip/sipvoiplink.cpp @@ -1479,25 +1479,25 @@ bool SIPVoIPLink::new_ip_to_ip_call (const CallID& id, const std::string& to) account = dynamic_cast<SIPAccount *> (Manager::instance().getAccount (IP2IP_PROFILE)); if (account == NULL) { - _debug ("Account is null. Returning\n"); + _debug ("Account %s is null. Returning\n", IP2IP_PROFILE); return !PJ_SUCCESS; } - // Set the local address - localAddress = account->getLocalAddress (); + // Set the local address + localAddress = account->getLocalAddress (); // Set SDP parameters - Set to local or published address - account->isStunEnabled () ? addrSdp = account->getPublishedAddress () : addrSdp = account->getLocalAddress (); + account->isStunEnabled () ? addrSdp = account->getPublishedAddress () : addrSdp = account->getLocalAddress (); _debug ("new_ip_to_ip_call localAddress: %s\n", localAddress.c_str()); if (localAddress == "0.0.0.0") { - _debug ("Here is the local address: %s\n", localAddress.c_str ()); + _debug ("Local address: %s\n", localAddress.c_str ()); loadSIPLocalIP (&localAddress); } - if (addrSdp == "0.0.0.0") { - addrSdp = localAddress; - } + if (addrSdp == "0.0.0.0") { + addrSdp = localAddress; + } setCallAudioLocal (call, localAddress); @@ -2110,26 +2110,25 @@ int SIPVoIPLink::createUDPServer (AccountID id) int listeningPort = _regPort; /* Use my local address as default value */ - if (!loadSIPLocalIP (&listeningAddress)) return !PJ_SUCCESS; - _debug ("SIPVoIPLink::createUDPServer\n"); + _debug ("Create UDP transport for account \"%s\"\n", id.c_str()); /* * Retrieve the account information */ SIPAccount * account = NULL; - account = dynamic_cast<SIPAccount *> (Manager::instance().getAccount (id)); // Set information to the local address and port - if (account == NULL) { _debug ("Account with id \"%s\" is null in createUDPServer.\n", id.c_str()); // account = Manager::instance()->getAccount(IP2IP_PROFILE); } else { // We are trying to initialize a UDP transport available for all local accounts and direct IP calls + _debug("Found account %s in map\n", account->getAccountID().c_str()); + if (account->getLocalAddress () != "0.0.0.0") { listeningAddress = account->getLocalAddress (); } @@ -2139,18 +2138,15 @@ int SIPVoIPLink::createUDPServer (AccountID id) // Init bound address to ANY pj_memset (&bound_addr, 0, sizeof (bound_addr)); - bound_addr.sin_addr.s_addr = pj_htonl (PJ_INADDR_ANY); - bound_addr.sin_port = pj_htons ( (pj_uint16_t) listeningPort); - bound_addr.sin_family = PJ_AF_INET; - pj_bzero (bound_addr.sin_zero, sizeof (bound_addr.sin_zero)); // Create UDP-Server (default port: 5060) // Use here either the local information or the published address if (account != NULL && !account->getPublishedSameasLocal ()) { + // Set the listening address to the published address listeningAddress = account->getPublishedAddress (); // Set the listening port to the published port @@ -2159,32 +2155,25 @@ int SIPVoIPLink::createUDPServer (AccountID id) } + //strcpy (tmpIP, listeningAddress.data()); /* Init published name */ pj_bzero (&a_name, sizeof (pjsip_host_port)); - pj_cstr (&a_name.host, listeningAddress.c_str()); - a_name.port = listeningPort; //pj_strdup2 (_pool, &a_name.host, tmpIP); - //a_name.port = (pj_uint16_t) listeningPort; status = pjsip_udp_transport_start (_endpt, &bound_addr, &a_name, 1, &transport); - // Get the transport manager associated with - // this endpoint - pjsip_tpmgr * tpmgr = NULL; - - tpmgr = pjsip_endpt_get_tpmgr (_endpt); - + // Print info from transport manager associated to endpoint + pjsip_tpmgr * tpmgr = pjsip_endpt_get_tpmgr (_endpt); pjsip_tpmgr_dump_transports (tpmgr); if (status != PJ_SUCCESS) { _debug ("UserAgent: (%d) Unable to start UDP transport on %s:%d\n", status, listeningAddress.data(), listeningPort); - // Try to acquire an existing one - // pjsip_tpmgr_acquire_transport () + return status; } else { _debug ("UserAgent: UDP server listening on port %d\n", listeningPort); @@ -2201,7 +2190,6 @@ int SIPVoIPLink::createUDPServer (AccountID id) _debug ("Transport initialized successfully on %s:%i\n", listeningAddress.c_str (), listeningPort); - return PJ_SUCCESS; } -- GitLab From 5779603edd28795216f31914085fee4299ed4efb Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Wed, 16 Dec 2009 13:25:58 -0500 Subject: [PATCH 096/188] [#2519] Fix pjsip shutdown when destroying accounts --- sflphone-common/src/account.h | 2 +- sflphone-common/src/iax/iaxaccount.cpp | 5 +++++ sflphone-common/src/iax/iaxaccount.h | 2 ++ sflphone-common/src/managerimpl.cpp | 9 ++++++--- sflphone-common/src/sip/sipaccount.cpp | 10 ++++++++++ sflphone-common/src/sip/sipaccount.h | 6 ++++++ sflphone-common/src/sip/sipvoiplink.cpp | 13 +++++++------ 7 files changed, 37 insertions(+), 10 deletions(-) diff --git a/sflphone-common/src/account.h b/sflphone-common/src/account.h index 3d6c36b8b2..c7c0424537 100644 --- a/sflphone-common/src/account.h +++ b/sflphone-common/src/account.h @@ -139,7 +139,7 @@ class Account{ */ inline VoIPLink* getVoIPLink() { return _link; } - inline void setVoIPLink (VoIPLink *link) { _link = link; } + virtual void setVoIPLink () = 0; /** * Register the underlying VoIPLink. Launch the event listener. diff --git a/sflphone-common/src/iax/iaxaccount.cpp b/sflphone-common/src/iax/iaxaccount.cpp index f68dfbef67..de210fda00 100644 --- a/sflphone-common/src/iax/iaxaccount.cpp +++ b/sflphone-common/src/iax/iaxaccount.cpp @@ -36,6 +36,11 @@ IAXAccount::~IAXAccount() _link = NULL; } +void IAXAccount::setVoIPLink() +{ + +} + int IAXAccount::registerVoIPLink() { _link->init(); diff --git a/sflphone-common/src/iax/iaxaccount.h b/sflphone-common/src/iax/iaxaccount.h index 9c40df1194..54e6094de7 100644 --- a/sflphone-common/src/iax/iaxaccount.h +++ b/sflphone-common/src/iax/iaxaccount.h @@ -33,6 +33,8 @@ class IAXAccount : public Account ~IAXAccount(); + void setVoIPLink (); + /** * Actually unuseful, since config loading is done in init() */ diff --git a/sflphone-common/src/managerimpl.cpp b/sflphone-common/src/managerimpl.cpp index a4144df327..a527cf120c 100644 --- a/sflphone-common/src/managerimpl.cpp +++ b/sflphone-common/src/managerimpl.cpp @@ -4258,7 +4258,9 @@ ManagerImpl::loadAccountMap() // The SIP library initialization is done in the SIPVoIPLink constructor // We need the IP2IP settings to be loaded at this time as they are used // for default sip transport - _directIpAccount->setVoIPLink(SIPVoIPLink::instance ("")); + + // _directIpAccount->setVoIPLink(SIPVoIPLink::instance ("")); + _directIpAccount->setVoIPLink(); } @@ -4287,7 +4289,8 @@ ManagerImpl::loadAccountMap() if (tmpAccount != NULL) { _debug ("Loading account %s \n", iter->c_str()); _accountMap[iter->c_str() ] = tmpAccount; - tmpAccount->setVoIPLink(SIPVoIPLink::instance ("")); + // tmpAccount->setVoIPLink(SIPVoIPLink::instance ("")); + tmpAccount->setVoIPLink(); nbAccount++; } @@ -4307,7 +4310,7 @@ ManagerImpl::unloadAccountMap() while (iter != _accountMap.end()) { - _debug ("-> Unloading account %s\n", iter->first.c_str()); + _debug ("Unloading account %s\n", iter->first.c_str()); delete iter->second; iter->second = 0; diff --git a/sflphone-common/src/sip/sipaccount.cpp b/sflphone-common/src/sip/sipaccount.cpp index ae2da8374e..01db69d8ac 100644 --- a/sflphone-common/src/sip/sipaccount.cpp +++ b/sflphone-common/src/sip/sipaccount.cpp @@ -58,6 +58,7 @@ SIPAccount::~SIPAccount() { /* One SIP account less connected to the sip voiplink */ dynamic_cast<SIPVoIPLink*> (_link)->decrementClients(); + /* Delete accounts-related information */ _regc = NULL; free (_cred); @@ -65,6 +66,15 @@ SIPAccount::~SIPAccount() } +// void SIPAccount::setVoIPLink(VoIPLink *link) { +void SIPAccount::setVoIPLink() { + + _link = SIPVoIPLink::instance (""); + dynamic_cast<SIPVoIPLink*> (_link)->incrementClients(); + +} + + int SIPAccount::initCredential (void) { int credentialCount = 0; diff --git a/sflphone-common/src/sip/sipaccount.h b/sflphone-common/src/sip/sipaccount.h index 97116b56ca..58c3d1dc24 100644 --- a/sflphone-common/src/sip/sipaccount.h +++ b/sflphone-common/src/sip/sipaccount.h @@ -58,6 +58,12 @@ class SIPAccount : public Account */ virtual ~SIPAccount(); + /** + * Special setVoIPLink which increment SipVoIPLink's number of client. + */ + // void setVoIPLink(VoIPLink *link); + void setVoIPLink(); + /** * Actually unuseful, since config loading is done in init() */ diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp index 065cdba48d..76be51e934 100644 --- a/sflphone-common/src/sip/sipvoiplink.cpp +++ b/sflphone-common/src/sip/sipvoiplink.cpp @@ -239,6 +239,8 @@ SIPVoIPLink::SIPVoIPLink (const AccountID& accountID) SIPVoIPLink::~SIPVoIPLink() { + _debug("SIPVoIPLink destructor called\n"); + terminate(); } @@ -258,6 +260,8 @@ void SIPVoIPLink::decrementClients (void) _clients--; if (_clients == 0) { + + _debug("No SIP account anymore, terminate SIPVoIPLink\n"); terminate(); SIPVoIPLink::_instance=NULL; } @@ -286,21 +290,18 @@ bool SIPVoIPLink::init() void SIPVoIPLink::terminate() { - _debug ("SIPVoIPLink::terminate"); - - + _debug ("Terminating SIPVoIPLink\n"); if (_evThread) { - _debug ("SIPVoIPLink:: delete eventThread"); + _debug ("Deleting sip eventThread\n"); delete _evThread; _evThread = NULL; } - /* Clean shutdown of pjsip library */ if (initDone()) { - _debug ("pjsip_shutdown\n"); + _debug ("Shuting down PJSIP\n"); pjsip_shutdown(); } -- GitLab From 9cc29b69b5fa7907d9eff4124f48fdd09dccd340 Mon Sep 17 00:00:00 2001 From: Julien Bonjean <julien@bonjean.info> Date: Wed, 16 Dec 2009 14:56:49 -0500 Subject: [PATCH 097/188] [#2181] Refactoring ... --- tools/build-system/launch-build-machine-2.sh | 16 +------ tools/build-system/make-telify-package.sh | 45 ++++++++++++++++++++ tools/build-system/setenv.sh | 27 ++++++++++++ 3 files changed, 74 insertions(+), 14 deletions(-) create mode 100644 tools/build-system/make-telify-package.sh create mode 100644 tools/build-system/setenv.sh diff --git a/tools/build-system/launch-build-machine-2.sh b/tools/build-system/launch-build-machine-2.sh index b6b7638195..12f8760e79 100755 --- a/tools/build-system/launch-build-machine-2.sh +++ b/tools/build-system/launch-build-machine-2.sh @@ -7,16 +7,12 @@ # Author: Julien Bonjean (julien@bonjean.info) # # Creation Date: 2009-10-20 -# Last Modified: 2009-10-21 18:18:07 -0400 +# Last Modified: 2009-12-15 18:16:50 -0500 ##################################################### #set -x -# home directory -ROOT_DIR=${HOME} - -# gpg passphrase file -GPG_FILE="${ROOT_DIR}/.gpg-sflphone" +. `dirname $0`/setenv.sh IS_RELEASE= VERSION_INDEX="1" @@ -25,14 +21,6 @@ DO_LOGGING=1 DO_UPLOAD=1 SNAPSHOT_TAG=`date +%Y%m%d` -EDITOR=echo -export EDITOR - -REFERENCE_REPOSITORY="${ROOT_DIR}/sflphone-source-repository" - -WORKING_DIR="${ROOT_DIR}/sflphone-build-repository/tools/build-system" -LAUNCHPAD_DIR="${WORKING_DIR}/launchpad" -LAUNCHPAD_DISTRIBUTIONS=( "jaunty" "karmic" ) LAUNCHPAD_PACKAGES=( "sflphone-client-gnome" "sflphone-common" ) echo diff --git a/tools/build-system/make-telify-package.sh b/tools/build-system/make-telify-package.sh new file mode 100644 index 0000000000..be3be86bd2 --- /dev/null +++ b/tools/build-system/make-telify-package.sh @@ -0,0 +1,45 @@ +#!/bin/bash +##################################################### +# File Name: make-telify-package.sh +# +# Purpose : +# +# Author: Julien Bonjean (julien@bonjean.info) +# +# Creation Date: 2009-12-15 +# Last Modified: 2009-12-15 18:16:47 -0500 +##################################################### + +#set -x + +. `dirname $0`/setenv.sh + +# change to working directory +cd ${LAUNCHPAD_DIR} + +if [ "$?" -ne "0" ]; then + echo " !! Cannot cd to launchpad directory" + exit -1 +fi + +cd ${REFERENCE_REPOSITORY} + +for LAUNCHPAD_DISTRIBUTION in ${LAUNCHPAD_DISTRIBUTIONS[*]} +do + LOCAL_VERSION="${SOFTWARE_VERSION}~ppa${VERSION_INDEX}~${LAUNCHPAD_DISTRIBUTION}" + + cp ${DEBIAN_DIR}/control.${LAUNCHPAD_DISTRIBUTION} ${DEBIAN_DIR}/control + cp ${DEBIAN_DIR}/changelog.generic ${DEBIAN_DIR}/changelog + + sed -i "s/SYSTEM/${LAUNCHPAD_DISTRIBUTION}/g" ${DEBIAN_DIR}/changelog + + cd ${LAUNCHPAD_DIR}/${LAUNCHPAD_PACKAGE} + ./autogen.sh + debuild -S -sa -kFDFE4451 + cd ${LAUNCHPAD_DIR} + + if [ ${DO_UPLOAD} ] ; then + dput -f -c ${LAUNCHPAD_DIR}/dput.conf ${LAUNCHPAD_CONF_PREFIX}-${LAUNCHPAD_DISTRIBUTION} ${LAUNCHPAD_PACKAGE}_${LOCAL_VERSION}_source.changes + fi +done + diff --git a/tools/build-system/setenv.sh b/tools/build-system/setenv.sh new file mode 100644 index 0000000000..ee6bbb068d --- /dev/null +++ b/tools/build-system/setenv.sh @@ -0,0 +1,27 @@ +#!/bin/bash +##################################################### +# File Name: setenv.sh +# +# Purpose : +# +# Author: Julien Bonjean (julien@bonjean.info) +# +# Creation Date: 2009-12-15 +# Last Modified: 2009-12-15 18:16:52 -0500 +##################################################### + +# home directory +export ROOT_DIR=${HOME} + +# gpg passphrase file +export GPG_FILE="${ROOT_DIR}/.gpg-sflphone" + +export EDITOR="echo" + +export REFERENCE_REPOSITORY="${ROOT_DIR}/sflphone-source-repository" + +export WORKING_DIR="${ROOT_DIR}/sflphone-build-repository/tools/build-system" +export LAUNCHPAD_DIR="${WORKING_DIR}/launchpad" +LAUNCHPAD_DISTRIBUTIONS=( "jaunty" "karmic" ) +export LAUNCHPAD_DISTRIBUTIONS + -- GitLab From 57f874593251a3d78144a6fb950304db512c063e Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Wed, 16 Dec 2009 15:07:37 -0500 Subject: [PATCH 098/188] [#2519] Store default transport (IP2IP) into map --- sflphone-common/src/sip/sipaccount.cpp | 7 +++- sflphone-common/src/sip/sipvoiplink.cpp | 44 +++++++++++++++---------- sflphone-common/src/sip/sipvoiplink.h | 3 ++ 3 files changed, 35 insertions(+), 19 deletions(-) diff --git a/sflphone-common/src/sip/sipaccount.cpp b/sflphone-common/src/sip/sipaccount.cpp index 01db69d8ac..7524541f4f 100644 --- a/sflphone-common/src/sip/sipaccount.cpp +++ b/sflphone-common/src/sip/sipaccount.cpp @@ -419,6 +419,7 @@ std::string SIPAccount::getLoginName (void) std::string SIPAccount::getTransportMapKey(void) { + /* std::string mapKey; std::stringstream out; @@ -436,8 +437,12 @@ std::string SIPAccount::getTransportMapKey(void) mapKey.append(localPort.c_str()); mapKey.append(publishedAddress.c_str()); mapKey.append(publishedPort.c_str()); + */ + std::stringstream out; + out << getLocalPort(); + std::string localPort = out.str(); - return mapKey; + return localPort; } diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp index 76be51e934..dd2895f336 100644 --- a/sflphone-common/src/sip/sipvoiplink.cpp +++ b/sflphone-common/src/sip/sipvoiplink.cpp @@ -1799,10 +1799,11 @@ bool SIPVoIPLink::pjsip_init() } } - // Bind the newly created transport to the ip to ip account - // setAccountTransport + if(account && (errPjsip == PJ_SUCCESS)) { + + addTransportToMap(account->getTransportMapKey(), account->getAccountTransport()); + } - _debug ("pjsip_init -- listening on port %d\n", port); // Create a TLS listener meant for Direct IP calls // if the user did enabled it. @@ -1983,7 +1984,7 @@ bool SIPVoIPLink::acquireTransport(const AccountID& accountID) { // Transport could not be created, account account already have one set. // Most likely this is the transport we tried to create. - _debug("Transport (%s) already set for account, use it\n", account->getTransportMapKey().c_str()); + _debug("Transport (%s) already set for this account, use it\n", account->getTransportMapKey().c_str()); return true; } @@ -2075,21 +2076,9 @@ bool SIPVoIPLink::createSipTransport(AccountID id) { // If Transport created succesfully, store it in the internal map if(status == PJ_SUCCESS) { - SipTransportMap::iterator iter_transport; - iter_transport = _transportMap.find(account->getTransportMapKey()); - - // old transport in transport map, erase it - if(iter_transport != _transportMap.end()){ - _transportMap.erase(iter_transport); - } - - std::string key = account->getTransportMapKey(); - pjsip_transport* transport = account->getAccountTransport(); - - _debug("Storing the newly created transport in transport map using key %s\n", key.c_str()); - _transportMap.insert(pair<std::string, pjsip_transport*>(key, transport)); + addTransportToMap(account->getTransportMapKey(), account->getAccountTransport()); - return true; + return true; } else { @@ -2099,6 +2088,25 @@ bool SIPVoIPLink::createSipTransport(AccountID id) { } +bool SIPVoIPLink::addTransportToMap(std::string key, pjsip_transport* transport) +{ + + SipTransportMap::iterator iter_transport; + iter_transport = _transportMap.find(key); + + // old transport in transport map, erase it + if(iter_transport != _transportMap.end()){ + _transportMap.erase(iter_transport); + } + + _debug("Storing the newly created transport in transport map using key %s\n", key.c_str()); + _transportMap.insert(pair<std::string, pjsip_transport*>(key, transport)); + + return true; + +} + + int SIPVoIPLink::createUDPServer (AccountID id) { diff --git a/sflphone-common/src/sip/sipvoiplink.h b/sflphone-common/src/sip/sipvoiplink.h index 5a010702e4..4a9b8e3437 100644 --- a/sflphone-common/src/sip/sipvoiplink.h +++ b/sflphone-common/src/sip/sipvoiplink.h @@ -376,6 +376,9 @@ class SIPVoIPLink : public VoIPLink */ bool createSipTransport(AccountID id); + + bool addTransportToMap(std::string key, pjsip_transport* transport); + /** Create SIP UDP Listener */ int createUDPServer (AccountID = ""); -- GitLab From b2a8a0a538861f03e01cd0478f5891c57ed7d5dc Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Wed, 16 Dec 2009 16:26:24 -0500 Subject: [PATCH 099/188] [#2519] Manage dynamic transport changes and network manager registration call --- sflphone-common/src/sip/sipvoiplink.cpp | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp index dd2895f336..be5ad54e86 100644 --- a/sflphone-common/src/sip/sipvoiplink.cpp +++ b/sflphone-common/src/sip/sipvoiplink.cpp @@ -452,6 +452,7 @@ int SIPVoIPLink::sendRegister (AccountID id) } } + // Create SIP transport or get existent SIP transport from internal map // according to account settings, if the transport could not be created but // one is already set in account, use this one (most likely this is the @@ -637,7 +638,7 @@ SIPVoIPLink::sendUnregister (AccountID id) account->getAccountTransport()->info, (int)pj_atomic_get(account->getAccountTransport()->ref_cnt)); - // shutdownSipTransport(account->getAccountID()); + // shutdownSipTransport(account->getAccountID()); } // This may occurs if account failed to register and is in state INVALID @@ -1975,11 +1976,21 @@ bool SIPVoIPLink::acquireTransport(const AccountID& accountID) { if(!account) return false; + // If an account is already bound to this account, decrease its reference + // as it is going to change. If the same transport is selected, reference + // counter will be increased + if(account->getAccountTransport()) { + + _debug("pjsip_transport_dec_ref in acquireTransport\n"); + pjsip_transport_dec_ref(account->getAccountTransport()); + } + // Try to create a new transport if(createSipTransport(accountID)) { return true; } + /* else if(account->getAccountTransport()) { // Transport could not be created, account account already have one set. @@ -1988,6 +1999,7 @@ bool SIPVoIPLink::acquireTransport(const AccountID& accountID) { return true; } + */ else { _debug("Searching transport (%s) in transport map\n", account->getTransportMapKey().c_str()); @@ -2038,7 +2050,7 @@ bool SIPVoIPLink::createSipTransport(AccountID id) { // if the user did choose it. if (account->isTlsEnabled()) { - _debug (" sendRegister: createTlsTransport\n"); + _debug ("Create TLS transport\n"); status = createTlsTransportRetryOnFailure (id); if (status != PJ_SUCCESS) { @@ -2049,7 +2061,7 @@ bool SIPVoIPLink::createSipTransport(AccountID id) { // Launch a new UDP listener/transport, using the published address if (account->isStunEnabled ()) { - _debug (" sendRegister: createAlternateUdpTransport\n"); + _debug ("Create Alternate UDP transport\n"); status = createAlternateUdpTransport (id); if (status != PJ_SUCCESS) { @@ -2057,6 +2069,7 @@ bool SIPVoIPLink::createSipTransport(AccountID id) { } } else { + _debug ("Create UDP transport\n"); status = createUDPServer (id); if (status != PJ_SUCCESS) { @@ -2074,7 +2087,8 @@ bool SIPVoIPLink::createSipTransport(AccountID id) { } // If Transport created succesfully, store it in the internal map - if(status == PJ_SUCCESS) { + // If stun is enabled, do not store it due to stun per account policy + if((status == PJ_SUCCESS) && !account->isStunEnabled()) { addTransportToMap(account->getTransportMapKey(), account->getAccountTransport()); -- GitLab From 228bf3a3d38507bb771efbd700a52c9a7558fb8f Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Wed, 16 Dec 2009 18:11:27 -0500 Subject: [PATCH 100/188] [#2519] Use IP2IP transport as the default transport --- sflphone-common/src/sip/sipvoiplink.cpp | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp index dae29a1ee8..dde7a25d67 100644 --- a/sflphone-common/src/sip/sipvoiplink.cpp +++ b/sflphone-common/src/sip/sipvoiplink.cpp @@ -1812,6 +1812,9 @@ bool SIPVoIPLink::pjsip_init() addTransportToMap(account->getTransportMapKey(), account->getAccountTransport()); + // if account is not NULL, use IP2IP trasport as default one + _localUDPTransport = account->getAccountTransport(); + } // Create a TLS listener meant for Direct IP calls @@ -2560,13 +2563,7 @@ pj_status_t SIPVoIPLink::createAlternateUdpTransport (AccountID id) pj_sockaddr_get_port((const pj_sockaddr*)&(transport->key.rem_addr))); } - pjsip_tpmgr * tpmgr = NULL; - - tpmgr = pjsip_endpt_get_tpmgr (_endpt); - - _debug ("Number of transport: %i\n", pjsip_tpmgr_get_transport_count (tpmgr)); - - // status = pjsip_transport_register( tpmgr, (pjsip_transport*)transport); + pjsip_tpmgr * tpmgr = pjsip_endpt_get_tpmgr (_endpt); pjsip_tpmgr_dump_transports (tpmgr); -- GitLab From 0cbaa83a46f00c5e1edadcfd25da17c089093a12 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Thu, 17 Dec 2009 10:27:22 -0500 Subject: [PATCH 101/188] [#2519] Do not store STUN or TLS transport in map --- sflphone-common/src/sip/sipvoiplink.cpp | 34 ++++++++++++------------- 1 file changed, 16 insertions(+), 18 deletions(-) diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp index dde7a25d67..de9edbb294 100644 --- a/sflphone-common/src/sip/sipvoiplink.cpp +++ b/sflphone-common/src/sip/sipvoiplink.cpp @@ -2066,9 +2066,11 @@ bool SIPVoIPLink::createSipTransport(AccountID id) { if (status != PJ_SUCCESS) { _debug ("Failed to initialize TLS transport for account %s\n", id.c_str()); + return false; } } else { + // Launch a new UDP listener/transport, using the published address if (account->isStunEnabled ()) { @@ -2077,7 +2079,9 @@ bool SIPVoIPLink::createSipTransport(AccountID id) { if (status != PJ_SUCCESS) { _debug ("Failed to initialize UDP transport with an extern published address for account %s\n", id.c_str()); + return false; } + } else { _debug ("Create UDP transport\n"); @@ -2085,32 +2089,26 @@ bool SIPVoIPLink::createSipTransport(AccountID id) { if (status != PJ_SUCCESS) { _debug ("Failed to initialize UDP transport for account %s\n", id.c_str()); + return false; } + else { - // We should not bind account to local udp transport here since we must - /* - if (status != PJ_SUCCESS) { - _debug ("Use the local UDP transport\n"); - account->setAccountTransport (_localUDPTransport); - } - */ - } - } + // If transport succesfully created, store it in the internal map. + // STUN aware transport are account specific and should not be stored in map. + // TLS transport is ephemeral and is managed by PJSIP, should not be stored either. + addTransportToMap(account->getTransportMapKey(), account->getAccountTransport()); + } - // If Transport created succesfully, store it in the internal map - // If stun is enabled, do not store it due to stun per account policy - if((status == PJ_SUCCESS) && !account->isStunEnabled()) { - addTransportToMap(account->getTransportMapKey(), account->getAccountTransport()); + } - return true; } - else { - return false; - } - + return true; + + } + bool SIPVoIPLink::addTransportToMap(std::string key, pjsip_transport* transport) -- GitLab From 4640d7604c30df2ea7f4411fc8ee32c1328c47af Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Thu, 17 Dec 2009 10:41:12 -0500 Subject: [PATCH 102/188] [#2519] Fix NULL pointer when TLS transport set to account --- sflphone-common/src/sip/sipvoiplink.cpp | 41 +++++++++++++++---------- 1 file changed, 24 insertions(+), 17 deletions(-) diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp index de9edbb294..4a78f873cf 100644 --- a/sflphone-common/src/sip/sipvoiplink.cpp +++ b/sflphone-common/src/sip/sipvoiplink.cpp @@ -458,10 +458,12 @@ int SIPVoIPLink::sendRegister (AccountID id) // transport we tried to create) acquireTransport(account->getAccountID()); - _debug("Acquire transport in account registration: %s %s (refcnt=%d)\n", - account->getAccountTransport()->obj_name, - account->getAccountTransport()->info, - (int)pj_atomic_get(account->getAccountTransport()->ref_cnt)); + if (account->getAccountTransport()) { + _debug("Acquire transport in account registration: %s %s (refcnt=%d)\n", + account->getAccountTransport()->obj_name, + account->getAccountTransport()->info, + (int)pj_atomic_get(account->getAccountTransport()->ref_cnt)); + } _mutexSIP.enterMutex(); @@ -574,15 +576,16 @@ int SIPVoIPLink::sendRegister (AccountID id) // pjsip_regc_set_transport increments transport ref count by one status = pjsip_regc_set_transport (regc, tp); - // decrease transport's ref count, counter icrementation is - // managed when acquiring transport - pjsip_transport_dec_ref(account->getAccountTransport ()); + if(account->getAccountTransport()) { + // decrease transport's ref count, counter icrementation is + // managed when acquiring transport + pjsip_transport_dec_ref(account->getAccountTransport ()); - _debug("After setting the transport in account registration using transport: %s %s (refcnt=%d)\n", + _debug("After setting the transport in account registration using transport: %s %s (refcnt=%d)\n", account->getAccountTransport()->obj_name, account->getAccountTransport()->info, (int)pj_atomic_get(account->getAccountTransport()->ref_cnt)); - + } if (status != PJ_SUCCESS) { _debug ("UserAgent: Unable to set transport."); @@ -594,10 +597,12 @@ int SIPVoIPLink::sendRegister (AccountID id) // pjsip_regc_send increment the transport ref count by one, status = pjsip_regc_send (regc, tdata); - // Decrease transport's ref count, since coresponding reference counter decrementation - // is performed in pjsip_regc_destroy. This function is never called in SFLphone as the - // regc data structure is permanently associated to the account at first registration. - pjsip_transport_dec_ref(account->getAccountTransport ()); + if(account->getAccountTransport()) { + // Decrease transport's ref count, since coresponding reference counter decrementation + // is performed in pjsip_regc_destroy. This function is never called in SFLphone as the + // regc data structure is permanently associated to the account at first registration. + pjsip_transport_dec_ref(account->getAccountTransport ()); + } if (status != PJ_SUCCESS) { _debug ("UserAgent: Unable to send regc request."); @@ -609,11 +614,13 @@ int SIPVoIPLink::sendRegister (AccountID id) account->setRegistrationInfo (regc); - _debug("Sent account registration using transport: %s %s (refcnt=%d)\n", - account->getAccountTransport()->obj_name, - account->getAccountTransport()->info, - (int)pj_atomic_get(account->getAccountTransport()->ref_cnt)); + if(account->getAccountTransport()) { + _debug("Sent account registration using transport: %s %s (refcnt=%d)\n", + account->getAccountTransport()->obj_name, + account->getAccountTransport()->info, + (int)pj_atomic_get(account->getAccountTransport()->ref_cnt)); + } return true; } -- GitLab From 418ed26139d5d02bbb2acfbfeecef5867419a1fb Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Thu, 17 Dec 2009 12:00:38 -0500 Subject: [PATCH 103/188] [#2519] Strip \n in debug messages --- sflphone-common/src/sip/sipvoiplink.cpp | 93 +++++++++++++------------ 1 file changed, 48 insertions(+), 45 deletions(-) diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp index 4a78f873cf..338ba18c5f 100644 --- a/sflphone-common/src/sip/sipvoiplink.cpp +++ b/sflphone-common/src/sip/sipvoiplink.cpp @@ -239,7 +239,7 @@ SIPVoIPLink::SIPVoIPLink (const AccountID& accountID) SIPVoIPLink::~SIPVoIPLink() { - _debug("SIPVoIPLink destructor called\n"); + _debug("SIPVoIPLink destructor called"); terminate(); } @@ -261,7 +261,7 @@ void SIPVoIPLink::decrementClients (void) if (_clients == 0) { - _debug("No SIP account anymore, terminate SIPVoIPLink\n"); + _debug("No SIP account anymore, terminate SIPVoIPLink"); terminate(); SIPVoIPLink::_instance=NULL; } @@ -290,10 +290,10 @@ bool SIPVoIPLink::init() void SIPVoIPLink::terminate() { - _debug ("Terminating SIPVoIPLink\n"); + _debug ("Terminating SIPVoIPLink"); if (_evThread) { - _debug ("Deleting sip eventThread\n"); + _debug ("Deleting sip eventThread"); delete _evThread; _evThread = NULL; } @@ -301,7 +301,7 @@ SIPVoIPLink::terminate() /* Clean shutdown of pjsip library */ if (initDone()) { - _debug ("Shuting down PJSIP\n"); + _debug ("Shuting down PJSIP"); pjsip_shutdown(); } @@ -459,7 +459,7 @@ int SIPVoIPLink::sendRegister (AccountID id) acquireTransport(account->getAccountID()); if (account->getAccountTransport()) { - _debug("Acquire transport in account registration: %s %s (refcnt=%d)\n", + _debug("Acquire transport in account registration: %s %s (refcnt=%d)", account->getAccountTransport()->obj_name, account->getAccountTransport()->info, (int)pj_atomic_get(account->getAccountTransport()->ref_cnt)); @@ -581,7 +581,7 @@ int SIPVoIPLink::sendRegister (AccountID id) // managed when acquiring transport pjsip_transport_dec_ref(account->getAccountTransport ()); - _debug("After setting the transport in account registration using transport: %s %s (refcnt=%d)\n", + _debug("After setting the transport in account registration using transport: %s %s (refcnt=%d)", account->getAccountTransport()->obj_name, account->getAccountTransport()->info, (int)pj_atomic_get(account->getAccountTransport()->ref_cnt)); @@ -616,7 +616,7 @@ int SIPVoIPLink::sendRegister (AccountID id) if(account->getAccountTransport()) { - _debug("Sent account registration using transport: %s %s (refcnt=%d)\n", + _debug("Sent account registration using transport: %s %s (refcnt=%d)", account->getAccountTransport()->obj_name, account->getAccountTransport()->info, (int)pj_atomic_get(account->getAccountTransport()->ref_cnt)); @@ -640,7 +640,7 @@ SIPVoIPLink::sendUnregister (AccountID id) // If an transport is attached to this account, detach it and decrease reference counter if(account->getAccountTransport()) { - _debug("Sent account unregistration using transport: %s %s (refcnt=%d)\n", + _debug("Sent account unregistration using transport: %s %s (refcnt=%d)", account->getAccountTransport()->obj_name, account->getAccountTransport()->info, (int)pj_atomic_get(account->getAccountTransport()->ref_cnt)); @@ -1373,7 +1373,7 @@ SIPVoIPLink::SIPStartCall (SIPCall* call, const std::string& subject UNUSED) return false; } - _debug("Sent invite request using transport: %s %s (refcnt=%d)\n", + _debug("Sent invite request using transport: %s %s (refcnt=%d)", account->getAccountTransport()->obj_name, account->getAccountTransport()->info, (int)pj_atomic_get(account->getAccountTransport()->ref_cnt)); @@ -1496,7 +1496,7 @@ bool SIPVoIPLink::new_ip_to_ip_call (const CallID& id, const std::string& to) if (account == NULL) { - _debug ("Account %s is null. Returning\n", IP2IP_PROFILE); + _debug ("Account %s is null. Returning", IP2IP_PROFILE); return !PJ_SUCCESS; } @@ -1508,7 +1508,7 @@ bool SIPVoIPLink::new_ip_to_ip_call (const CallID& id, const std::string& to) _debug ("new_ip_to_ip_call localAddress: %s", localAddress.c_str()); if (localAddress == "0.0.0.0") { - _debug ("Local address: %s\n", localAddress.c_str ()); + _debug ("Local address: %s", localAddress.c_str ()); loadSIPLocalIP (&localAddress); } @@ -1535,13 +1535,13 @@ bool SIPVoIPLink::new_ip_to_ip_call (const CallID& id, const std::string& to) // If no account already set, use the default one created at pjsip initialization if (account->getAccountTransport() == NULL) { - _debug ("No transport for this account, using the default one\n"); + _debug ("No transport for this account, using the default one"); account->setAccountTransport (_localUDPTransport); } - _debug ("IptoIP local port %i\n", account->getLocalPort()); + _debug ("IptoIP local port %i", account->getLocalPort()); - _debug ("IptoIP local address in sdp %s\n", account->getLocalAddress().c_str()); + _debug ("IptoIP local address in sdp %s", account->getLocalAddress().c_str()); // Create URI std::string fromUri; @@ -1694,7 +1694,7 @@ pj_status_t SIPVoIPLink::enable_dns_srv_resolver (pjsip_endpoint *endpt, pj_dns_ // Build the nameservers list needed by pjsip if ( (scount = dns_servers.size ()) <= 0) { - _debug ("No server detected while fetching DNS information, stop dns resolution\n"); + _debug ("No server detected while fetching DNS information, stop dns resolution"); return 0; } @@ -1739,7 +1739,7 @@ bool SIPVoIPLink::pjsip_init() name_mod = "sflphone"; - _debug ("pjsip_init\n"); + _debug ("pjsip_init"); // Init PJLIB: must be called before any call to the pjsip library status = pj_init(); @@ -1999,7 +1999,7 @@ bool SIPVoIPLink::acquireTransport(const AccountID& accountID) { // counter will be increased if(account->getAccountTransport()) { - _debug("pjsip_transport_dec_ref in acquireTransport\n"); + _debug("pjsip_transport_dec_ref in acquireTransport"); pjsip_transport_dec_ref(account->getAccountTransport()); } @@ -2020,7 +2020,7 @@ bool SIPVoIPLink::acquireTransport(const AccountID& accountID) { */ else { - _debug("Searching transport (%s) in transport map\n", account->getTransportMapKey().c_str()); + _debug("Searching transport (%s) in transport map", account->getTransportMapKey().c_str()); // Could not create new transport, this transport may already exists SipTransportMap::iterator transport; @@ -2029,7 +2029,7 @@ bool SIPVoIPLink::acquireTransport(const AccountID& accountID) { if(transport != _transportMap.end()) { // Transport already exist, use it for this account - _debug("Found transport (%s) in transport map\n", account->getTransportMapKey().c_str()); + _debug("Found transport (%s) in transport map", account->getTransportMapKey().c_str()); pjsip_transport* tr = transport->second; @@ -2045,7 +2045,7 @@ bool SIPVoIPLink::acquireTransport(const AccountID& accountID) { else { // Transport could not either be created, socket not available - _debug("Found transport (%s) in transport map\n", account->getTransportMapKey().c_str()); + _debug("Found transport (%s) in transport map", account->getTransportMapKey().c_str()); // Transport could not either be created or found in the map, socket not available return false; @@ -2068,11 +2068,11 @@ bool SIPVoIPLink::createSipTransport(AccountID id) { // if the user did choose it. if (account->isTlsEnabled()) { - _debug ("Create TLS transport\n"); + _debug ("Create TLS transport"); status = createTlsTransportRetryOnFailure (id); if (status != PJ_SUCCESS) { - _debug ("Failed to initialize TLS transport for account %s\n", id.c_str()); + _debug ("Failed to initialize TLS transport for account %s", id.c_str()); return false; } } @@ -2081,21 +2081,21 @@ bool SIPVoIPLink::createSipTransport(AccountID id) { // Launch a new UDP listener/transport, using the published address if (account->isStunEnabled ()) { - _debug ("Create Alternate UDP transport\n"); + _debug ("Create Alternate UDP transport"); status = createAlternateUdpTransport (id); if (status != PJ_SUCCESS) { - _debug ("Failed to initialize UDP transport with an extern published address for account %s\n", id.c_str()); + _debug ("Failed to initialize UDP transport with an extern published address for account %s", id.c_str()); return false; } } else { - _debug ("Create UDP transport\n"); + _debug ("Create UDP transport"); status = createUDPServer (id); if (status != PJ_SUCCESS) { - _debug ("Failed to initialize UDP transport for account %s\n", id.c_str()); + _debug ("Failed to initialize UDP transport for account %s", id.c_str()); return false; } else { @@ -2129,7 +2129,7 @@ bool SIPVoIPLink::addTransportToMap(std::string key, pjsip_transport* transport) _transportMap.erase(iter_transport); } - _debug("Storing the newly created transport in transport map using key %s\n", key.c_str()); + _debug("Storing the newly created transport in transport map using key %s", key.c_str()); _transportMap.insert(pair<std::string, pjsip_transport*>(key, transport)); return true; @@ -2152,7 +2152,7 @@ int SIPVoIPLink::createUDPServer (AccountID id) if (!loadSIPLocalIP (&listeningAddress)) return !PJ_SUCCESS; - _debug ("Create UDP transport for account \"%s\"\n", id.c_str()); + _debug ("Create UDP transport for account \"%s\"", id.c_str()); /* * Retrieve the account information @@ -2165,7 +2165,7 @@ int SIPVoIPLink::createUDPServer (AccountID id) _debug ("Account with id \"%s\" is null in createUDPServer.", id.c_str()); } else { // We are trying to initialize a UDP transport available for all local accounts and direct IP calls - _debug("Found account %s in map\n", account->getAccountID().c_str()); + _debug("Found account %s in map", account->getAccountID().c_str()); if (account->getLocalAddress () != "0.0.0.0") { listeningAddress = account->getLocalAddress (); @@ -2189,7 +2189,7 @@ int SIPVoIPLink::createUDPServer (AccountID id) listeningAddress = account->getPublishedAddress (); // Set the listening port to the published port listeningPort = account->getPublishedPort (); - _debug ("Creating UDP transport published %s:%i\n", listeningAddress.c_str (), listeningPort); + _debug ("Creating UDP transport published %s:%i", listeningAddress.c_str (), listeningPort); } @@ -2211,7 +2211,7 @@ int SIPVoIPLink::createUDPServer (AccountID id) if (status != PJ_SUCCESS) { - _debug ("UserAgent: (%d) Unable to start UDP transport on %s:%d\n", status, listeningAddress.data(), listeningPort); + _debug ("UserAgent: (%d) Unable to start UDP transport on %s:%d", status, listeningAddress.data(), listeningPort); return status; } else { @@ -2220,12 +2220,12 @@ int SIPVoIPLink::createUDPServer (AccountID id) if (account == NULL) { - _debug("Use transport as local UDP server\n"); + _debug("Use transport as local UDP server"); _localUDPTransport = transport; } else { - _debug("Bind transport to account %s\n", account->getAccountID().c_str()); + _debug("Bind transport to account %s", account->getAccountID().c_str()); account->setAccountTransport (transport); } } @@ -2269,6 +2269,7 @@ std::string SIPVoIPLink::findLocalAddressFromUri (const std::string& uri, pjsip_ if (PJSIP_URI_SCHEME_IS_SIPS (sip_uri)) { transportType = PJSIP_TRANSPORT_TLS; + } else { if (transport == NULL) { _debug ("transport is NULL in findLocalAddressFromUri. Try the local UDP transport"); @@ -2304,8 +2305,10 @@ std::string SIPVoIPLink::findLocalAddressFromUri (const std::string& uri, pjsip_ status = pjsip_tpmgr_find_local_addr (tpmgr, _pool, transportType, tp_sel, &localAddress, &port); else status = pjsip_tpmgr_find_local_addr (tpmgr, _pool, transportType, NULL, &localAddress, &port); - } else + } else { + status = pjsip_tpmgr_find_local_addr (tpmgr, _pool, transportType, NULL, &localAddress, &port); + } if (status != PJ_SUCCESS) { _debug ("Failed to find local address from transport"); @@ -2548,7 +2551,7 @@ pj_status_t SIPVoIPLink::createAlternateUdpTransport (AccountID id) if(transport) { - _debug("INITIAL REF COUNT: %s %s (refcnt=%i)\n", + _debug("INITIAL REF COUNT: %s %s (refcnt=%i)", transport->obj_name, transport->info, (int)pj_atomic_get(transport->ref_cnt)); @@ -2562,7 +2565,7 @@ pj_status_t SIPVoIPLink::createAlternateUdpTransport (AccountID id) str, sizeof(str)); - _debug("KEY: %s:%d\n", + _debug("KEY: %s:%d", // addr_string(account->getAccountTransport()->key.rem_addr), str, pj_sockaddr_get_port((const pj_sockaddr*)&(transport->key.rem_addr))); @@ -2654,7 +2657,7 @@ pj_status_t SIPVoIPLink::createTlsTransport (AccountID id) void SIPVoIPLink::shutdownSipTransport(const AccountID& accountID) { - _debug("Shutdown Sip Transport\n"); + _debug("Shutdown Sip Transport"); pj_status_t status = 0; @@ -2665,7 +2668,7 @@ void SIPVoIPLink::shutdownSipTransport(const AccountID& accountID) if(account->getAccountTransport()) { - _debug("Transport bound to account, decrease ref count\n"); + _debug("Transport bound to account, decrease ref count"); // decrease reference count added by pjsip_regc_send // PJSIP's IDLE timer is set if counter reach 0 @@ -2765,7 +2768,7 @@ bool SIPVoIPLink::pjsip_shutdown (void) /* Shutdown PJLIB */ pj_shutdown(); - _debug ("UserAgent: Shutted down succesfully\n"); + _debug ("UserAgent: Shutted down succesfully"); /* Done. */ return true; @@ -3125,7 +3128,7 @@ void call_on_tsx_changed (pjsip_inv_session *inv, pjsip_transaction *tsx, pjsip_ if (request.find (method_name) != (size_t)-1) { - _debug ("%s\n", pjsip_rx_data_get_info (r_data)); + _debug ("%s", pjsip_rx_data_get_info (r_data)); pjsip_dlg_create_response (inv->dlg, r_data, PJSIP_SC_OK, NULL, &t_data); @@ -3251,7 +3254,7 @@ mod_on_rx_request (pjsip_rx_data *rdata) // Handle the incoming call invite in this function _debug ("UserAgent: Callback on_rx_request is involved! "); - _debug("Receiving REQUEST using transport: %s %s (refcnt=%d)\n", + _debug("Receiving REQUEST using transport: %s %s (refcnt=%d)", rdata->tp_info.transport->obj_name, rdata->tp_info.transport->info, (int)pj_atomic_get(rdata->tp_info.transport->ref_cnt)); @@ -3388,7 +3391,7 @@ mod_on_rx_request (pjsip_rx_data *rdata) /************************************************************************************************/ - _debug ("create a new call\n"); + _debug ("create a new call"); // Generate a new call ID for the incoming call! id = Manager::instance().getNewCallID(); @@ -3420,7 +3423,7 @@ mod_on_rx_request (pjsip_rx_data *rdata) if(account->getAccountTransport()) { - _debug("Process INVITE request using transport: %s %s (refcnt=%i)\n", + _debug("Process INVITE request using transport: %s %s (refcnt=%i)", account->getAccountTransport()->obj_name, account->getAccountTransport()->info, (int)pj_atomic_get(account->getAccountTransport()->ref_cnt)); @@ -3447,7 +3450,7 @@ mod_on_rx_request (pjsip_rx_data *rdata) // Notify UI there is an incoming call - _debug ("Add call to account link\n"); + _debug ("Add call to account link"); if (Manager::instance().incomingCall (call, account_id)) { // Add this call to the callAccountMap in ManagerImpl -- GitLab From db38693550cf1ce3a1f934096f64e4d4d799f454 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Thu, 17 Dec 2009 12:49:21 -0500 Subject: [PATCH 104/188] [#2519] Store new localUDPTransport if changed in IP2IP settings --- sflphone-common/src/sip/sipvoiplink.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp index 338ba18c5f..d94fc1f426 100644 --- a/sflphone-common/src/sip/sipvoiplink.cpp +++ b/sflphone-common/src/sip/sipvoiplink.cpp @@ -2685,7 +2685,14 @@ void SIPVoIPLink::shutdownSipTransport(const AccountID& accountID) void SIPVoIPLink::updateAccountInfo (const AccountID& accountID) { - createUDPServer (accountID); + createSipTransport (accountID); + + if(accountID == IP2IP_PROFILE) { + + SIPAccount* account = dynamic_cast<SIPAccount *> (Manager::instance().getAccount (accountID)); + // Store new IP2IP UDP transport as default + _localUDPTransport = account->getAccountTransport(); + } } -- GitLab From 6375d8dd173271a844e56ffa21fd53ffb8b33b7d Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Thu, 17 Dec 2009 12:59:15 -0500 Subject: [PATCH 105/188] [#2519] Must use acquireTransport and not createSipTransport in updateAccountInfo --- sflphone-common/src/sip/sipvoiplink.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp index d94fc1f426..fb977d2608 100644 --- a/sflphone-common/src/sip/sipvoiplink.cpp +++ b/sflphone-common/src/sip/sipvoiplink.cpp @@ -2685,7 +2685,8 @@ void SIPVoIPLink::shutdownSipTransport(const AccountID& accountID) void SIPVoIPLink::updateAccountInfo (const AccountID& accountID) { - createSipTransport (accountID); + // createSipTransport (accountID); + acquireTransport(accountID); if(accountID == IP2IP_PROFILE) { -- GitLab From fe1a401eddd611efdcacb983d9d6b76efb4f4a58 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Thu, 17 Dec 2009 14:46:44 -0500 Subject: [PATCH 106/188] [#2592] Make sure the message buffer is large enought in Logger::log --- sflphone-common/src/logger.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sflphone-common/src/logger.cpp b/sflphone-common/src/logger.cpp index b7966beea5..16880b9ad7 100644 --- a/sflphone-common/src/logger.cpp +++ b/sflphone-common/src/logger.cpp @@ -37,7 +37,7 @@ void log(const int level, const char* format, ...) va_list ap; string prefix = "<> "; - char buffer[1024]; + char buffer[2048]; string message = ""; string color_prefix = ""; -- GitLab From aa3cfdacde10e9c0b7a0326cd926c4c5f111cfb7 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Thu, 17 Dec 2009 15:43:52 -0500 Subject: [PATCH 107/188] [#2594] Add a method to access audiolayer mutex lock --- sflphone-common/src/audio/audiolayer.h | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/sflphone-common/src/audio/audiolayer.h b/sflphone-common/src/audio/audiolayer.h index ab70ddfd07..580c064e51 100644 --- a/sflphone-common/src/audio/audiolayer.h +++ b/sflphone-common/src/audio/audiolayer.h @@ -213,6 +213,11 @@ class AudioLayer { */ inline Recordable* getRecorderInstance (void) {return _recorder;} + /** + * Get the mutex lock for the entire audio layer + */ + inline ost::Mutex* getMutexLock(void) { return &_mutex; } + protected: @@ -285,6 +290,9 @@ class AudioLayer { /** Contains the current error code */ int _errorMessage; + /** + * Lock for the entire audio layer + */ ost::Mutex _mutex; }; -- GitLab From 40efc879b2038ae398fc500eae027e8005579fae Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Thu, 17 Dec 2009 15:44:58 -0500 Subject: [PATCH 108/188] [#2592] Buffer length for log message should be longer --- sflphone-common/src/logger.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sflphone-common/src/logger.cpp b/sflphone-common/src/logger.cpp index 16880b9ad7..08ab98f208 100644 --- a/sflphone-common/src/logger.cpp +++ b/sflphone-common/src/logger.cpp @@ -37,7 +37,7 @@ void log(const int level, const char* format, ...) va_list ap; string prefix = "<> "; - char buffer[2048]; + char buffer[4096]; string message = ""; string color_prefix = ""; -- GitLab From e6ff28c3e212a35c52dd70cf4324606e4c7bc957 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Thu, 17 Dec 2009 17:14:22 -0500 Subject: [PATCH 109/188] [#2594] Get audiolayer from manager in RTP and add mutex --- .../src/audio/audiortp/AudioRtpSession.h | 34 +++++++++++++------ sflphone-common/src/managerimpl.cpp | 5 +++ sflphone-common/src/managerimpl.h | 4 +++ 3 files changed, 32 insertions(+), 11 deletions(-) diff --git a/sflphone-common/src/audio/audiortp/AudioRtpSession.h b/sflphone-common/src/audio/audiortp/AudioRtpSession.h index afe37aa21d..e1d8b536cb 100644 --- a/sflphone-common/src/audio/audiortp/AudioRtpSession.h +++ b/sflphone-common/src/audio/audiortp/AudioRtpSession.h @@ -202,7 +202,8 @@ namespace sfl { } _debug("Unbind audio RTP stream for call id %s\n", _ca->getCallId().c_str()); - _audiolayer->getMainBuffer()->unBindAll(_ca->getCallId()); + // _audiolayer->getMainBuffer()->unBindAll(_ca->getCallId()); + _manager->getAudioDriver()->getMainBuffer()->unBindAll(_ca->getCallId()); delete [] _micData; delete [] _micDataConverted; @@ -218,10 +219,12 @@ namespace sfl { void AudioRtpSession<D>::initBuffers() { // Set sampling rate, main buffer choose the highest one - _audiolayer->getMainBuffer()->setInternalSamplingRate(_codecSampleRate); + // _audiolayer->getMainBuffer()->setInternalSamplingRate(_codecSampleRate); + _manager->getAudioDriver()->getMainBuffer()->setInternalSamplingRate(_codecSampleRate); // may be different than one already setted - converterSamplingRate = _audiolayer->getMainBuffer()->getInternalSamplingRate(); + // converterSamplingRate = _audiolayer->getMainBuffer()->getInternalSamplingRate(); + converterSamplingRate = _manager->getAudioDriver()->getMainBuffer()->getInternalSamplingRate(); // initialize SampleRate converter using AudioLayer's sampling rate // (internal buffers initialized with maximal sampling rate and frame size) @@ -310,7 +313,8 @@ namespace sfl { assert(_audiocodec); assert(_audiolayer); - int _mainBufferSampleRate = _audiolayer->getMainBuffer()->getInternalSamplingRate(); + + int _mainBufferSampleRate = _manager->getAudioDriver()->getMainBuffer()->getInternalSamplingRate(); // compute codec framesize in ms float fixed_codec_framesize = computeCodecFrameSize (_audiocodec->getFrameSize(), _audiocodec->getClockRate()); @@ -319,7 +323,7 @@ namespace sfl { int maxBytesToGet = computeNbByteAudioLayer (fixed_codec_framesize); // available bytes inside ringbuffer - int availBytesFromMic = _audiolayer->getMainBuffer()->availForGet(_ca->getCallId()); + int availBytesFromMic = _manager->getAudioDriver()->getMainBuffer()->availForGet(_ca->getCallId()); // set available byte to maxByteToGet int bytesAvail = (availBytesFromMic < maxBytesToGet) ? availBytesFromMic : maxBytesToGet; @@ -328,7 +332,7 @@ namespace sfl { return 0; // Get bytes from micRingBuffer to data_from_mic - int nbSample = _audiolayer->getMainBuffer()->getData(_micData , bytesAvail, 100, _ca->getCallId()) / sizeof (SFLDataFormat); + int nbSample = _manager->getAudioDriver()->getMainBuffer()->getData(_micData , bytesAvail, 100, _ca->getCallId()) / sizeof (SFLDataFormat); // nb bytes to be sent over RTP int compSize = 0; @@ -361,7 +365,7 @@ namespace sfl { if (_audiocodec != NULL) { - int _mainBufferSampleRate = _audiolayer->getMainBuffer()->getInternalSamplingRate(); + int _mainBufferSampleRate = _manager->getAudioDriver()->getMainBuffer()->getInternalSamplingRate(); // Return the size of data in bytes int expandedSize = _audiocodec->codecDecode (_spkrDataDecoded , spkrData , size); @@ -381,7 +385,7 @@ namespace sfl { _nSamplesSpkr = nbSample; // put data in audio layer, size in byte - _audiolayer->getMainBuffer()->putData (_spkrDataConverted, nbSample * sizeof (SFLDataFormat), 100, _ca->getCallId()); + _manager->getAudioDriver()->getMainBuffer()->putData (_spkrDataConverted, nbSample * sizeof (SFLDataFormat), 100, _ca->getCallId()); } else { @@ -390,7 +394,7 @@ namespace sfl { // put data in audio layer, size in byte - _audiolayer->getMainBuffer()->putData (_spkrDataDecoded, expandedSize, 100, _ca->getCallId()); + _manager->getAudioDriver()->getMainBuffer()->putData (_spkrDataDecoded, expandedSize, 100, _ca->getCallId()); } // Notify (with a beep) an incoming call when there is already a call @@ -513,7 +517,7 @@ namespace sfl { _ca->setRecordingSmplRate(_audiocodec->getClockRate()); // Start audio stream (if not started) AND flush all buffers (main and urgent) - _audiolayer->startStream(); + _manager->getAudioDriver()->startStream(); static_cast<D*>(this)->startRunning(); // Already called in _audiolayer->startStream() @@ -524,7 +528,12 @@ namespace sfl { while (!testCancel()) { - converterSamplingRate = _audiolayer->getMainBuffer()->getInternalSamplingRate(); + // ost::MutexLock lock(*(_manager->getAudioLayerMutex())); + + _manager->getAudioLayerMutex()->enter(); + + // converterSamplingRate = _audiolayer->getMainBuffer()->getInternalSamplingRate(); + _manager->getAudioDriver()->getMainBuffer()->getInternalSamplingRate(); // Send session sessionWaiting = static_cast<D*>(this)->isWaiting(); @@ -544,6 +553,9 @@ namespace sfl { _ca->recAudio.recData (_micData,_nSamplesMic); } + // ost::MutexLock unlock(*(_manager->getAudioLayerMutex())); + _manager->getAudioLayerMutex()->leave(); + // Let's wait for the next transmit cycle Thread::sleep (TimerPort::getTimer()); diff --git a/sflphone-common/src/managerimpl.cpp b/sflphone-common/src/managerimpl.cpp index 31c3e247b8..06234906f6 100644 --- a/sflphone-common/src/managerimpl.cpp +++ b/sflphone-common/src/managerimpl.cpp @@ -3143,6 +3143,9 @@ void ManagerImpl::switchAudioManager (void) _debug ("Deleting current layer... "); + // ost::MutexLock lock (*getAudioLayerMutex()); + getAudioLayerMutex()->enter(); + // _audiodriver->closeLayer(); delete _audiodriver; @@ -3181,6 +3184,8 @@ void ManagerImpl::switchAudioManager (void) if (hasCurrentCall()) _audiodriver->startStream(); + // ost::MutexLock unlock (*getAudioLayerMutex()); + getAudioLayerMutex()->leave(); // need to stop audio streams if there is currently no call // if ( (type != PULSEAUDIO) && (!hasCurrentCall())) { diff --git a/sflphone-common/src/managerimpl.h b/sflphone-common/src/managerimpl.h index f173539d25..fe2ce8618d 100644 --- a/sflphone-common/src/managerimpl.h +++ b/sflphone-common/src/managerimpl.h @@ -1050,6 +1050,8 @@ class ManagerImpl { * Initialize audiodriver */ bool initAudioDriver(void); + + ost::Mutex* getAudioLayerMutex() { return &_audiolayer_mutex; } private: /* Transform digest to string. @@ -1155,6 +1157,8 @@ class ManagerImpl { /** Mutex to protect access to code section */ ost::Mutex _mutex; + ost::Mutex _audiolayer_mutex; + // Multithread variable (non protected) DBusManagerImpl * _dbus; -- GitLab From dd285eeadbb7a8e43fcceb67da571483c2993c7e Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Thu, 17 Dec 2009 17:32:45 -0500 Subject: [PATCH 110/188] [#2596] Close stream when hanging up call no yet sent --- sflphone-common/src/managerimpl.cpp | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/sflphone-common/src/managerimpl.cpp b/sflphone-common/src/managerimpl.cpp index 06234906f6..a409aa5a6d 100644 --- a/sflphone-common/src/managerimpl.cpp +++ b/sflphone-common/src/managerimpl.cpp @@ -413,7 +413,7 @@ ManagerImpl::hangupCall (const CallID& call_id) _debug ("ManagerImpl::hangupCall(%s)", call_id.c_str()); PulseLayer *pulselayer; AccountID account_id; - bool returnValue; + bool returnValue = true; // store the current call id CallID current_call_id = getCurrentCallId(); @@ -446,19 +446,20 @@ ManagerImpl::hangupCall (const CallID& call_id) if (getConfigFromCall (call_id) == Call::IPtoIP) { returnValue = SIPVoIPLink::instance (AccountNULL)->hangup (call_id); } - /* Classic call, attached to an account */ else { account_id = getAccountFromCall (call_id); if (account_id == AccountNULL) { + _debug ("! Manager Hangup Call: Call doesn't exists"); - return false; + returnValue = false; } + else { - returnValue = getAccountLink (account_id)->hangup (call_id); - - removeCallAccount (call_id); + returnValue = getAccountLink (account_id)->hangup (call_id); + removeCallAccount (call_id); + } } int nbCalls = getCallList().size(); -- GitLab From e1ef1577fbcab9f7fc839d157ab8b9a45f09c231 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Fri, 18 Dec 2009 10:03:35 -0500 Subject: [PATCH 111/188] [#2594] Lower prebuffering threshold in Pulseaudio to prevent stream to stop --- sflphone-common/src/audio/pulseaudio/audiostream.cpp | 2 +- sflphone-common/src/audio/pulseaudio/pulselayer.cpp | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/sflphone-common/src/audio/pulseaudio/audiostream.cpp b/sflphone-common/src/audio/pulseaudio/audiostream.cpp index d98251075a..55377b1739 100644 --- a/sflphone-common/src/audio/pulseaudio/audiostream.cpp +++ b/sflphone-common/src/audio/pulseaudio/audiostream.cpp @@ -203,7 +203,7 @@ AudioStream::createStream (pa_context* c) // 20 ms framesize TODO: take framesize value from config attributes->maxlength = (uint32_t) -1; attributes->tlength = pa_usec_to_bytes (50 * PA_USEC_PER_MSEC, &sample_spec); - attributes->prebuf = (uint32_t) -1; + attributes->prebuf = 0; attributes->minreq = (uint32_t) -1; attributes->fragsize = (uint32_t) -1; diff --git a/sflphone-common/src/audio/pulseaudio/pulselayer.cpp b/sflphone-common/src/audio/pulseaudio/pulselayer.cpp index 046d81cec1..773956df5b 100644 --- a/sflphone-common/src/audio/pulseaudio/pulselayer.cpp +++ b/sflphone-common/src/audio/pulseaudio/pulselayer.cpp @@ -587,6 +587,7 @@ void PulseLayer::writeToSpeaker (void) normalAvailBytes = getMainBuffer()->availForGet(); byteToGet = (normalAvailBytes < (int) (maxNbBytesToGet)) ? normalAvailBytes : maxNbBytesToGet; + // _debug("byteToGet: %i", byteToGet); if (byteToGet) { -- GitLab From d538725766723c3ffe27ce075266d20bac903074 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Fri, 18 Dec 2009 11:00:39 -0500 Subject: [PATCH 112/188] [#2597] Fix compilation warnings in tls and zrtp config windows --- sflphone-client-gnome/src/config/tlsadvanceddialog.h | 1 + sflphone-client-gnome/src/config/zrtpadvanceddialog.c | 2 +- sflphone-client-gnome/src/config/zrtpadvanceddialog.h | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/sflphone-client-gnome/src/config/tlsadvanceddialog.h b/sflphone-client-gnome/src/config/tlsadvanceddialog.h index 853d0ddd95..4b7702a232 100644 --- a/sflphone-client-gnome/src/config/tlsadvanceddialog.h +++ b/sflphone-client-gnome/src/config/tlsadvanceddialog.h @@ -24,6 +24,7 @@ */ #include <glib.h> +#include <mainwindow.h> /** * Display the advanced options window for zrtp diff --git a/sflphone-client-gnome/src/config/zrtpadvanceddialog.c b/sflphone-client-gnome/src/config/zrtpadvanceddialog.c index b055e0de41..02b634d559 100644 --- a/sflphone-client-gnome/src/config/zrtpadvanceddialog.c +++ b/sflphone-client-gnome/src/config/zrtpadvanceddialog.c @@ -47,7 +47,7 @@ void show_advanced_zrtp_options(GHashTable * properties) } securityDialog = GTK_DIALOG (gtk_dialog_new_with_buttons ( _("ZRTP Options"), - GTK_WINDOW (get_main_window()), + GTK_WINDOW (get_main_window()), GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, diff --git a/sflphone-client-gnome/src/config/zrtpadvanceddialog.h b/sflphone-client-gnome/src/config/zrtpadvanceddialog.h index fb84c6e7b7..df92bfb09b 100644 --- a/sflphone-client-gnome/src/config/zrtpadvanceddialog.h +++ b/sflphone-client-gnome/src/config/zrtpadvanceddialog.h @@ -24,7 +24,7 @@ */ #include <glib.h> - +#include <mainwindow.h> /** * Display the advanced options window for zrtp */ -- GitLab From 43f290878f6581206522442f639276a149263a5a Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Fri, 18 Dec 2009 13:34:51 -0500 Subject: [PATCH 113/188] [#2598] Enlarge requested latency when creating audio streams --- sflphone-common/src/audio/pulseaudio/audiostream.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sflphone-common/src/audio/pulseaudio/audiostream.cpp b/sflphone-common/src/audio/pulseaudio/audiostream.cpp index 55377b1739..dd11a28d57 100644 --- a/sflphone-common/src/audio/pulseaudio/audiostream.cpp +++ b/sflphone-common/src/audio/pulseaudio/audiostream.cpp @@ -202,7 +202,7 @@ AudioStream::createStream (pa_context* c) // 20 ms framesize TODO: take framesize value from config attributes->maxlength = (uint32_t) -1; - attributes->tlength = pa_usec_to_bytes (50 * PA_USEC_PER_MSEC, &sample_spec); + attributes->tlength = pa_usec_to_bytes (100 * PA_USEC_PER_MSEC, &sample_spec); attributes->prebuf = 0; attributes->minreq = (uint32_t) -1; attributes->fragsize = (uint32_t) -1; -- GitLab From f81ecebe12f16df63ac8237c2dc6a260329012de Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Fri, 18 Dec 2009 17:57:06 -0500 Subject: [PATCH 114/188] [#2601] Add sorting algorithm in history manager --- .../src/history/historymanager.cpp | 42 ++++++++++++++++++- sflphone-common/src/history/historymanager.h | 2 + 2 files changed, 43 insertions(+), 1 deletion(-) diff --git a/sflphone-common/src/history/historymanager.cpp b/sflphone-common/src/history/historymanager.cpp index 9ea8f933d3..1720e9018d 100644 --- a/sflphone-common/src/history/historymanager.cpp +++ b/sflphone-common/src/history/historymanager.cpp @@ -70,6 +70,7 @@ int HistoryManager::load_history_items_map (Conf::ConfigTree *history_list, int short nb_items = 0; Conf::TokenList sections; HistoryItem *item; + HistoryItemMap unsorted_map; Conf::TokenList::iterator iter; std::string number, name, accountID, timestamp_start, timestamp_stop; CallType type; @@ -97,16 +98,55 @@ int HistoryManager::load_history_items_map (Conf::ConfigTree *history_list, int if (atoi (timestamp_start.c_str ()) >= ( (int) current_timestamp - history_limit)) { item = new HistoryItem (timestamp_start, type, timestamp_stop, name, number, accountID); - add_new_history_entry (item); + // add_new_history_entry (item); + unsorted_map [item->get_timestamp ()] = item; nb_items ++; } iter ++; } + sort_and_fill_history_map(&unsorted_map); + return nb_items; } + +bool HistoryManager::sort_and_fill_history_map(HistoryItemMap *unsorted_map) +{ + int max_timestamp = 0; + int timestamp; + std::string key; + + while(unsorted_map->size() > 0) { + + HistoryItemMap::iterator iter_item = unsorted_map->begin(); + + // find highest timestamp + while(iter_item != unsorted_map->end()) { + + timestamp = atoi(iter_item->first.c_str()); + _debug("-------------------------------------------------- timestamp: %i\n", timestamp); + + // save items as maximum + if(timestamp > max_timestamp) { + max_timestamp = timestamp; + key = iter_item->first; + } + + iter_item++; + } + + iter_item = unsorted_map->find(key); + add_new_history_entry (iter_item->second); + unsorted_map->erase(iter_item); + } + + return true; + +} + + bool HistoryManager::save_history_to_file (Conf::ConfigTree *history_list) { _debug ("Saving history in XDG directory: %s", _history_path.data()); diff --git a/sflphone-common/src/history/historymanager.h b/sflphone-common/src/history/historymanager.h index b00b509c3c..ccb6615f2e 100644 --- a/sflphone-common/src/history/historymanager.h +++ b/sflphone-common/src/history/historymanager.h @@ -116,6 +116,8 @@ class HistoryManager { */ void add_new_history_entry (HistoryItem *new_item); + bool sort_and_fill_history_map(HistoryItemMap *unsorted_map); + /* * Map containing the history items */ -- GitLab From b3b7e1834e086bce923196e8247b9751b587a0b6 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Mon, 21 Dec 2009 11:10:05 -0500 Subject: [PATCH 115/188] [#2601] History entries must be sorted in client (hash table are not sorted) --- sflphone-client-gnome/src/actions.c | 60 +++++++++++++++---- .../src/history/historymanager.cpp | 41 +------------ sflphone-common/src/history/historymanager.h | 2 - 3 files changed, 49 insertions(+), 54 deletions(-) diff --git a/sflphone-client-gnome/src/actions.c b/sflphone-client-gnome/src/actions.c index 2166de5387..fe433aace6 100644 --- a/sflphone-client-gnome/src/actions.c +++ b/sflphone-client-gnome/src/actions.c @@ -1182,23 +1182,59 @@ void sflphone_fill_history (void) { GHashTable *entries; GHashTableIter iter; - gpointer key, value; + gpointer key, key_to_min, value; callable_obj_t *history_entry; + int timestamp, min_timestamp; + + gboolean is_first; + DEBUG ("Loading history ..."); entries = dbus_get_history (); - if (entries) - { - // Init the iterator - g_hash_table_iter_init (&iter, entries); - while (g_hash_table_iter_next (&iter, &key, &value)) - { - /* do something with key and value */ - create_history_entry_from_serialized_form ((gchar*)key, (gchar*)value, &history_entry); - // Add it and update the GUI - calllist_add (history, history_entry); - } + if (entries) { + + while(g_hash_table_size (entries)) { + + is_first = TRUE; + + // find lowest timestamp in map + g_hash_table_iter_init (&iter, entries); + while (g_hash_table_iter_next (&iter, &key, &value)) { + + timestamp = atoi((gchar*)key); + + if(is_first) { + + // first iteration of the loop, init search + min_timestamp = timestamp; + key_to_min = key; + + is_first = FALSE; + } + else { + + // if lower, replace + if(timestamp < min_timestamp) { + + min_timestamp = timestamp; + key_to_min = key; + } + } + } + + if(g_hash_table_lookup_extended(entries, key_to_min, &key, &value)) { + + // do something with key and value + create_history_entry_from_serialized_form ((gchar*)key, (gchar*)value, &history_entry); + DEBUG("HISTORY ENTRY: %i\n", history_entry->_time_start); + // Add it and update the GUI + calllist_add (history, history_entry); + + // remove entry from map + g_hash_table_remove(entries, key_to_min); + } + } } } diff --git a/sflphone-common/src/history/historymanager.cpp b/sflphone-common/src/history/historymanager.cpp index 1720e9018d..1fb5b99154 100644 --- a/sflphone-common/src/history/historymanager.cpp +++ b/sflphone-common/src/history/historymanager.cpp @@ -70,7 +70,6 @@ int HistoryManager::load_history_items_map (Conf::ConfigTree *history_list, int short nb_items = 0; Conf::TokenList sections; HistoryItem *item; - HistoryItemMap unsorted_map; Conf::TokenList::iterator iter; std::string number, name, accountID, timestamp_start, timestamp_stop; CallType type; @@ -98,55 +97,17 @@ int HistoryManager::load_history_items_map (Conf::ConfigTree *history_list, int if (atoi (timestamp_start.c_str ()) >= ( (int) current_timestamp - history_limit)) { item = new HistoryItem (timestamp_start, type, timestamp_stop, name, number, accountID); - // add_new_history_entry (item); - unsorted_map [item->get_timestamp ()] = item; + add_new_history_entry (item); nb_items ++; } iter ++; } - sort_and_fill_history_map(&unsorted_map); - return nb_items; } -bool HistoryManager::sort_and_fill_history_map(HistoryItemMap *unsorted_map) -{ - int max_timestamp = 0; - int timestamp; - std::string key; - - while(unsorted_map->size() > 0) { - - HistoryItemMap::iterator iter_item = unsorted_map->begin(); - - // find highest timestamp - while(iter_item != unsorted_map->end()) { - - timestamp = atoi(iter_item->first.c_str()); - _debug("-------------------------------------------------- timestamp: %i\n", timestamp); - - // save items as maximum - if(timestamp > max_timestamp) { - max_timestamp = timestamp; - key = iter_item->first; - } - - iter_item++; - } - - iter_item = unsorted_map->find(key); - add_new_history_entry (iter_item->second); - unsorted_map->erase(iter_item); - } - - return true; - -} - - bool HistoryManager::save_history_to_file (Conf::ConfigTree *history_list) { _debug ("Saving history in XDG directory: %s", _history_path.data()); diff --git a/sflphone-common/src/history/historymanager.h b/sflphone-common/src/history/historymanager.h index ccb6615f2e..b00b509c3c 100644 --- a/sflphone-common/src/history/historymanager.h +++ b/sflphone-common/src/history/historymanager.h @@ -116,8 +116,6 @@ class HistoryManager { */ void add_new_history_entry (HistoryItem *new_item); - bool sort_and_fill_history_map(HistoryItemMap *unsorted_map); - /* * Map containing the history items */ -- GitLab From 7be613566347ad2492686a7774700dabf7f7b436 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Mon, 21 Dec 2009 17:28:15 -0500 Subject: [PATCH 116/188] [#2486] Add primitive to handle local interface by name --- sflphone-common/src/sip/sipvoiplink.cpp | 85 +++++++++++++++++++++++++ sflphone-common/src/sip/sipvoiplink.h | 22 +++++++ 2 files changed, 107 insertions(+) diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp index fb977d2608..4dc4d6d491 100644 --- a/sflphone-common/src/sip/sipvoiplink.cpp +++ b/sflphone-common/src/sip/sipvoiplink.cpp @@ -43,6 +43,11 @@ #include <resolv.h> #include <istream> +#include <sys/types.h> +#include <sys/socket.h> +#include <sys/ioctl.h> +#include <linux/if.h> + #define CAN_REINVITE 1 static char * invitationStateMap[] = { @@ -367,6 +372,38 @@ void get_remote_sdp_from_offer (pjsip_rx_data *rdata, pjmedia_sdp_session** r_sd } +std::string getInterfaceAddrFromName(std::string ifaceName) { + + struct ifreq ifr; + int fd; + int rval = 0; + int err; + + struct sockaddr_in *saddr_in; + struct in_addr *addr_in; + + if((fd = socket (AF_INET, SOCK_DGRAM,0)) < 0) + _debug("getInterfaceAddrFromName error could not open socket\n"); + + memset (&ifr, 0, sizeof (struct ifreq)); + + strcpy (ifr.ifr_name, ifaceName.c_str()); + ifr.ifr_addr.sa_family = AF_INET; + + if((err = ioctl(fd, SIOCGIFADDR, &ifr)) < 0) + _debug("getInterfaceAddrFromName use default interface (0.0.0.0)\n"); + + // printf("Local address: %s\n", inet_ntos( ((struct sockaddr_in *) &ifr.ifr_ifru.ifru_addr)->sin_addr )); + + saddr_in = (struct sockaddr_in *)&ifr.ifr_addr; + addr_in = &(saddr_in->sin_addr); + + std::string addr(pj_inet_ntoa(*((pj_in_addr*)addr_in))); + + return addr; +} + + std::string SIPVoIPLink::get_useragent_name (void) { std::ostringstream useragent; @@ -4143,6 +4180,54 @@ std::vector<std::string> SIPVoIPLink::getAllIpInterface (void) } +int get_iface_list(struct ifconf *ifconf) +{ + int sock, rval; + + if((sock = socket(AF_INET,SOCK_STREAM,0)) < 0) + _debug("get_iface_list error could not open socket\n"); + + + if((rval = ioctl(sock, SIOCGIFCONF , (char*) ifconf )) < 0 ) + _debug("get_iface_list error ioctl(SIOGIFCONF)\n"); + + close(sock); + + return rval; +} + + +std::vector<std::string> SIPVoIPLink::getAllIpInterfaceByName(void) +{ + std::vector<std::string> ifaceList; + + static struct ifreq ifreqs[20]; + struct ifconf ifconf; + int nifaces; + + // add the default + ifaceList.push_back(std::string("default")); + + memset(&ifconf,0,sizeof(ifconf)); + ifconf.ifc_buf = (char*) (ifreqs); + ifconf.ifc_len = sizeof(ifreqs); + + if(get_iface_list(&ifconf) < 0) + _debug("getAllIpInterfaceByName error could not get interface list\n"); + + nifaces = ifconf.ifc_len/sizeof(struct ifreq); + + _debug("Interfaces (count = %d):\n", nifaces); + for(int i = 0; i < nifaces; i++) { + _debug(" %s ", ifreqs[i].ifr_name); + ifaceList.push_back(std::string (ifreqs[i].ifr_name)); + printf(" %s\n", getInterfaceAddrFromName(std::string (ifreqs[i].ifr_name)).c_str()); + } + + return ifaceList; +} + + pj_bool_t stun_sock_on_status (pj_stun_sock *stun_sock, pj_stun_sock_op op, pj_status_t status) { if (status == PJ_SUCCESS) diff --git a/sflphone-common/src/sip/sipvoiplink.h b/sflphone-common/src/sip/sipvoiplink.h index 4a9b8e3437..911cca0a96 100644 --- a/sflphone-common/src/sip/sipvoiplink.h +++ b/sflphone-common/src/sip/sipvoiplink.h @@ -292,6 +292,28 @@ class SIPVoIPLink : public VoIPLink std::vector<std::string> getAllIpInterface(void); + /** + * List all the interfaces on the system and return + * a vector list containing their name (eth0, eth0:1 ...). + * @param void + * @return std::vector<std::string> A std::string vector + * of interface name available on all of the interfaces on + * the system. + */ + std::vector<std::string> getAllIpInterfaceByName(void); + + + /** + * List all the interfaces on the system and return + * a vector list containing their name (eth0, eth0:1 ...). + * @param void + * @return std::vector<std::string> A std::string vector + * of interface name available on all of the interfaces on + * the system. + */ + // std::string getInterfaceAddrFromName(std::string ifaceName); + + /** * Initialize the transport selector * @param transport A transport associated with an account -- GitLab From cd3d3d8bed9d2a91d63fdc3566dd58e8a78320bb Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Tue, 22 Dec 2009 15:00:21 -0500 Subject: [PATCH 117/188] [#2606] Fix transport fallback mechanism --- sflphone-common/src/sip/sipvoiplink.cpp | 79 +++++++++++++++++-------- 1 file changed, 53 insertions(+), 26 deletions(-) diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp index 4dc4d6d491..a91f39e0eb 100644 --- a/sflphone-common/src/sip/sipvoiplink.cpp +++ b/sflphone-common/src/sip/sipvoiplink.cpp @@ -1410,10 +1410,13 @@ SIPVoIPLink::SIPStartCall (SIPCall* call, const std::string& subject UNUSED) return false; } + if(account->getAccountTransport()) { + _debug("Sent invite request using transport: %s %s (refcnt=%d)", account->getAccountTransport()->obj_name, account->getAccountTransport()->info, (int)pj_atomic_get(account->getAccountTransport()->ref_cnt)); + } return true; } @@ -1822,47 +1825,50 @@ bool SIPVoIPLink::pjsip_init() bool directIpCallsTlsEnabled = false; + // Use IP2IP_PROFILE to init default udp transport settings account = dynamic_cast<SIPAccount *> (Manager::instance().getAccount (IP2IP_PROFILE)); - if (account == NULL) { - _debug ("Account is null in pjsip init"); - port = _regPort; - } else { - directIpCallsTlsEnabled = account->isTlsEnabled(); - port = account->getLocalPort (); - } - - // Create a UDP listener meant for all accounts - // for which TLS was not enabled + // Create a UDP listener meant for all accounts for which TLS was not enabled + // Cannot acquireTransport since default UDP transport must be created regardless of TLS errPjsip = createUDPServer(IP2IP_PROFILE); + if(account && (errPjsip == PJ_SUCCESS)) { + + _debug("UserAgent: Initialized sip listener on port %d", account->getLocalPort ()); + addTransportToMap(account->getTransportMapKey(), account->getAccountTransport()); + + // if account is not NULL, use IP2IP trasport as default one + _localUDPTransport = account->getAccountTransport(); + + } // If the above UDP server // could not be created, then give it another try // on a random sip port - if (errPjsip != PJ_SUCCESS) { - _debug ("UserAgent: Could not initialize SIP listener on port %d", port); - port = RANDOM_SIP_PORT; + else if (errPjsip != PJ_SUCCESS) { + _debug ("UserAgent: Could not initialize SIP listener on port %d", _regPort); + _regPort = RANDOM_SIP_PORT; - _debug ("UserAgent: Trying to initialize SIP listener on port %d", port); + _debug ("UserAgent: Trying to initialize SIP listener on port %d", _regPort); + // If no AccountID specified, pointer to transport is stored in _localUDPTransport errPjsip = createUDPServer(); if (errPjsip != PJ_SUCCESS) { - _debug ("UserAgent: Fail to initialize SIP listener on port %d", port); + _debug ("UserAgent: Fail to initialize SIP listener on port %d", _regPort); return errPjsip; } } - if(account && (errPjsip == PJ_SUCCESS)) { - - addTransportToMap(account->getTransportMapKey(), account->getAccountTransport()); - - // if account is not NULL, use IP2IP trasport as default one - _localUDPTransport = account->getAccountTransport(); - - } + acquireTransport(IP2IP_PROFILE); + /* // Create a TLS listener meant for Direct IP calls // if the user did enabled it. + if (account != NULL) { + + directIpCallsTlsEnabled = account->isTlsEnabled(); + port = account->getLocalPort (); + + } if (directIpCallsTlsEnabled) { errPjsip = createTlsTransportRetryOnFailure (IP2IP_PROFILE); @@ -1871,6 +1877,7 @@ bool SIPVoIPLink::pjsip_init() if (errPjsip != PJ_SUCCESS) { _debug ("pj_init(): could not start TLS transport for Direct Calls"); } + */ // TODO: For TLS, retry on random port, just we already do above // for UDP transport. @@ -2082,7 +2089,16 @@ bool SIPVoIPLink::acquireTransport(const AccountID& accountID) { else { // Transport could not either be created, socket not available - _debug("Found transport (%s) in transport map", account->getTransportMapKey().c_str()); + _debug("Did not find transport (%s) in transport map", account->getTransportMapKey().c_str()); + _debug("Use default one instead"); + account->setAccountTransport(_localUDPTransport); + + std::string localHostName(_localUDPTransport->local_name.host.ptr, _localUDPTransport->local_name.host.slen); + + _debug("Use default one instead (%s:%i)", localHostName.c_str(), _localUDPTransport->local_name.port); + + account->setLocalAddress(localHostName); + account->setLocalPort(_localUDPTransport->local_name.port); // Transport could not either be created or found in the map, socket not available return false; @@ -2195,12 +2211,20 @@ int SIPVoIPLink::createUDPServer (AccountID id) * Retrieve the account information */ SIPAccount * account = NULL; - account = dynamic_cast<SIPAccount *> (Manager::instance().getAccount (id)); + + // if account id is not specified, init _localUDPTransport + if (id != "") { + + account = dynamic_cast<SIPAccount *> (Manager::instance().getAccount (id)); + } // Set information to the local address and port if (account == NULL) { + _debug ("Account with id \"%s\" is null in createUDPServer.", id.c_str()); + } else { + // We are trying to initialize a UDP transport available for all local accounts and direct IP calls _debug("Found account %s in map", account->getAccountID().c_str()); @@ -2267,7 +2291,10 @@ int SIPVoIPLink::createUDPServer (AccountID id) } } - _debug ("Transport initialized successfully on %s:%i", listeningAddress.c_str (), listeningPort); + if (status == PJ_SUCCESS) { + _debug ("Transport initialized successfully on %s:%i", listeningAddress.c_str (), listeningPort); + + } return PJ_SUCCESS; } -- GitLab From fdf1dfb840b27b81b2cc39d36ef069ce55bbed4f Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Tue, 22 Dec 2009 17:20:30 -0500 Subject: [PATCH 118/188] [#2606] Clean up redundant debug messages --- sflphone-common/src/sip/sipvoiplink.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp index a91f39e0eb..87d0d7b100 100644 --- a/sflphone-common/src/sip/sipvoiplink.cpp +++ b/sflphone-common/src/sip/sipvoiplink.cpp @@ -2090,7 +2090,7 @@ bool SIPVoIPLink::acquireTransport(const AccountID& accountID) { // Transport could not either be created, socket not available _debug("Did not find transport (%s) in transport map", account->getTransportMapKey().c_str()); - _debug("Use default one instead"); + account->setAccountTransport(_localUDPTransport); std::string localHostName(_localUDPTransport->local_name.host.ptr, _localUDPTransport->local_name.host.slen); -- GitLab From 52badabc743b925c7b981952d78cc20a837191a2 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Tue, 22 Dec 2009 18:00:57 -0500 Subject: [PATCH 119/188] [#2486] Add dbus methods to get interface by names --- .../src/config/accountconfigdialog.c | 1 + .../src/config/preferencesdialog.c | 1 + .../dbus/configurationmanager-introspec.xml | 5 ++++ sflphone-client-gnome/src/dbus/dbus.c | 24 +++++++++++++++++++ sflphone-client-gnome/src/dbus/dbus.h | 5 ++++ .../dbus/configurationmanager-introspec.xml | 5 ++++ .../src/dbus/configurationmanager.cpp | 15 ++++++++++++ .../src/dbus/configurationmanager.h | 1 + 8 files changed, 57 insertions(+) diff --git a/sflphone-client-gnome/src/config/accountconfigdialog.c b/sflphone-client-gnome/src/config/accountconfigdialog.c index 84e2150b94..0ac11ca5a1 100644 --- a/sflphone-client-gnome/src/config/accountconfigdialog.c +++ b/sflphone-client-gnome/src/config/accountconfigdialog.c @@ -834,6 +834,7 @@ GtkWidget * create_advanced_tab(account_t **a) GtkTreeIter current_local_address_iter = iter; gchar ** iface_list = NULL; iface_list = (gchar**) dbus_get_all_ip_interface(); + // iface_list = (gchar**) dbus_get_all_ip_interface_by_name(); gchar ** iface = NULL; // flag to determine if local_address is found diff --git a/sflphone-client-gnome/src/config/preferencesdialog.c b/sflphone-client-gnome/src/config/preferencesdialog.c index 93c1982f7d..ae34fb9549 100644 --- a/sflphone-client-gnome/src/config/preferencesdialog.c +++ b/sflphone-client-gnome/src/config/preferencesdialog.c @@ -253,6 +253,7 @@ GtkWidget* create_direct_ip_calls_tab() GtkTreeIter current_local_address_iter = iter; gchar ** iface_list = NULL; iface_list = (gchar**) dbus_get_all_ip_interface(); + // iface_list = (gchar**) dbus_get_all_ip_interface_by_name(); gchar ** iface; gboolean iface_found = FALSE; diff --git a/sflphone-client-gnome/src/dbus/configurationmanager-introspec.xml b/sflphone-client-gnome/src/dbus/configurationmanager-introspec.xml index 4a1e2c286f..4b77337df8 100644 --- a/sflphone-client-gnome/src/dbus/configurationmanager-introspec.xml +++ b/sflphone-client-gnome/src/dbus/configurationmanager-introspec.xml @@ -374,6 +374,11 @@ <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/> <arg type="as" name="list" direction="out"/> </method> + + <method name="getAllIpInterfaceByName"> + <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/> + <arg type="as" name="list" direction="out"/> + </method> </interface> </node> diff --git a/sflphone-client-gnome/src/dbus/dbus.c b/sflphone-client-gnome/src/dbus/dbus.c index a00c4134f1..2158cc1288 100644 --- a/sflphone-client-gnome/src/dbus/dbus.c +++ b/sflphone-client-gnome/src/dbus/dbus.c @@ -2382,3 +2382,27 @@ gchar ** dbus_get_all_ip_interface(void) } } +gchar ** dbus_get_all_ip_interface_by_name(void) +{ + GError *error = NULL; + gchar ** array; + + if(!org_sflphone_SFLphone_ConfigurationManager_get_all_ip_interface_by_name ( configurationManagerProxy, &array, &error)) + { + if(error->domain == DBUS_GERROR && error->code == DBUS_GERROR_REMOTE_EXCEPTION) + { + ERROR ("Caught remote method (get_all_ip_interface) exception %s: %s", dbus_g_error_get_name(error), error->message); + } + else + { + ERROR("Error while calling get_all_ip_interface: %s", error->message); + } + g_error_free (error); + return NULL; + } + else{ + DEBUG ("DBus called get_all_ip_interface() on ConfigurationManager"); + return array; + } +} + diff --git a/sflphone-client-gnome/src/dbus/dbus.h b/sflphone-client-gnome/src/dbus/dbus.h index bb6d57a3b6..f4dcc59da9 100644 --- a/sflphone-client-gnome/src/dbus/dbus.h +++ b/sflphone-client-gnome/src/dbus/dbus.h @@ -520,6 +520,11 @@ void dbus_set_addressbook_list (const gchar** list); */ gchar** dbus_get_all_ip_interface(void); +/** + * Query the daemon to return a list of network interface (described as there name) + */ +gchar** dbus_get_all_ip_interface_by_name(void); + /** * Encapsulate all the url hook-related configuration * Get the configuration diff --git a/sflphone-common/src/dbus/configurationmanager-introspec.xml b/sflphone-common/src/dbus/configurationmanager-introspec.xml index 4a1e2c286f..4b77337df8 100644 --- a/sflphone-common/src/dbus/configurationmanager-introspec.xml +++ b/sflphone-common/src/dbus/configurationmanager-introspec.xml @@ -374,6 +374,11 @@ <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/> <arg type="as" name="list" direction="out"/> </method> + + <method name="getAllIpInterfaceByName"> + <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/> + <arg type="as" name="list" direction="out"/> + </method> </interface> </node> diff --git a/sflphone-common/src/dbus/configurationmanager.cpp b/sflphone-common/src/dbus/configurationmanager.cpp index e381e6d13d..7b13da09a8 100644 --- a/sflphone-common/src/dbus/configurationmanager.cpp +++ b/sflphone-common/src/dbus/configurationmanager.cpp @@ -789,3 +789,18 @@ std::vector<std::string> ConfigurationManager::getAllIpInterface (void) return vector; } + +std::vector<std::string> ConfigurationManager::getAllIpInterfaceByName(void) +{ + _debug ("ConfigurationManager::getAllIpInterface received\n"); + + std::vector<std::string> vector; + SIPVoIPLink * sipLink = NULL; + sipLink = SIPVoIPLink::instance (""); + + if (sipLink != NULL) { + vector = sipLink->getAllIpInterfaceByName(); + } + + return vector; +} diff --git a/sflphone-common/src/dbus/configurationmanager.h b/sflphone-common/src/dbus/configurationmanager.h index 98a7441c62..4da05f8126 100644 --- a/sflphone-common/src/dbus/configurationmanager.h +++ b/sflphone-common/src/dbus/configurationmanager.h @@ -133,6 +133,7 @@ public: void setTlsSettings(const std::string& accountID, const std::map< std::string, std::string >& details); std::vector<std::string> getAllIpInterface(void); + std::vector<std::string> getAllIpInterfaceByName(void); }; -- GitLab From eaa5b37197f04ee749daeebad67ea2163f86c028 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Tue, 22 Dec 2009 18:25:57 -0500 Subject: [PATCH 120/188] [#2486] Bind transports to specific interfaces --- .../src/config/accountconfigdialog.c | 4 +-- .../src/config/preferencesdialog.c | 4 +-- sflphone-common/src/sip/sipvoiplink.cpp | 36 ++++++++++++------- 3 files changed, 28 insertions(+), 16 deletions(-) diff --git a/sflphone-client-gnome/src/config/accountconfigdialog.c b/sflphone-client-gnome/src/config/accountconfigdialog.c index 0ac11ca5a1..327f356ead 100644 --- a/sflphone-client-gnome/src/config/accountconfigdialog.c +++ b/sflphone-client-gnome/src/config/accountconfigdialog.c @@ -833,8 +833,8 @@ GtkWidget * create_advanced_tab(account_t **a) GtkTreeIter current_local_address_iter = iter; gchar ** iface_list = NULL; - iface_list = (gchar**) dbus_get_all_ip_interface(); - // iface_list = (gchar**) dbus_get_all_ip_interface_by_name(); + // iface_list = (gchar**) dbus_get_all_ip_interface(); + iface_list = (gchar**) dbus_get_all_ip_interface_by_name(); gchar ** iface = NULL; // flag to determine if local_address is found diff --git a/sflphone-client-gnome/src/config/preferencesdialog.c b/sflphone-client-gnome/src/config/preferencesdialog.c index ae34fb9549..fddc259eed 100644 --- a/sflphone-client-gnome/src/config/preferencesdialog.c +++ b/sflphone-client-gnome/src/config/preferencesdialog.c @@ -252,8 +252,8 @@ GtkWidget* create_direct_ip_calls_tab() GtkTreeIter current_local_address_iter = iter; gchar ** iface_list = NULL; - iface_list = (gchar**) dbus_get_all_ip_interface(); - // iface_list = (gchar**) dbus_get_all_ip_interface_by_name(); + // iface_list = (gchar**) dbus_get_all_ip_interface(); + iface_list = (gchar**) dbus_get_all_ip_interface_by_name(); gchar ** iface; gboolean iface_found = FALSE; diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp index 87d0d7b100..87e546317c 100644 --- a/sflphone-common/src/sip/sipvoiplink.cpp +++ b/sflphone-common/src/sip/sipvoiplink.cpp @@ -741,7 +741,7 @@ SIPVoIPLink::newOutgoingCall (const CallID& id, const std::string& toUrl) call->setPeerNumber (toUri); - localAddr = account->getLocalAddress (); + localAddr = getInterfaceAddrFromName(account->getLocalAddress ()); if (localAddr == "0.0.0.0") loadSIPLocalIP (&localAddr); @@ -749,7 +749,7 @@ SIPVoIPLink::newOutgoingCall (const CallID& id, const std::string& toUrl) setCallAudioLocal (call, localAddr); // May use the published address as well - account->isStunEnabled () ? addrSdp = account->getPublishedAddress () : addrSdp = account->getLocalAddress (); + account->isStunEnabled () ? addrSdp = account->getPublishedAddress () : addrSdp = getInterfaceAddrFromName(account->getLocalAddress ()); if (addrSdp == "0.0.0.0") loadSIPLocalIP (&addrSdp); @@ -1541,9 +1541,9 @@ bool SIPVoIPLink::new_ip_to_ip_call (const CallID& id, const std::string& to) } // Set the local address - localAddress = account->getLocalAddress (); + localAddress = getInterfaceAddrFromName(account->getLocalAddress ()); // Set SDP parameters - Set to local or published address - account->isStunEnabled () ? addrSdp = account->getPublishedAddress () : addrSdp = account->getLocalAddress (); + account->isStunEnabled () ? addrSdp = account->getPublishedAddress () : addrSdp = getInterfaceAddrFromName(account->getLocalAddress ()); _debug ("new_ip_to_ip_call localAddress: %s", localAddress.c_str()); @@ -2228,16 +2228,28 @@ int SIPVoIPLink::createUDPServer (AccountID id) // We are trying to initialize a UDP transport available for all local accounts and direct IP calls _debug("Found account %s in map", account->getAccountID().c_str()); - if (account->getLocalAddress () != "0.0.0.0") { - listeningAddress = account->getLocalAddress (); + if (account->getLocalAddress () != "default") { + listeningAddress = getInterfaceAddrFromName(account->getLocalAddress()); } listeningPort = account->getLocalPort (); } - // Init bound address to ANY pj_memset (&bound_addr, 0, sizeof (bound_addr)); - bound_addr.sin_addr.s_addr = pj_htonl (PJ_INADDR_ANY); + + pj_str_t temporary_address; + + // Init bound address to ANY + if (account && account->getLocalAddress () == "default") { + + bound_addr.sin_addr.s_addr = pj_htonl (PJ_INADDR_ANY); + } + else { + // bind this account to a specific interface + pj_strdup2(_pool, &temporary_address, listeningAddress.c_str()); + bound_addr.sin_addr = pj_inet_addr(&temporary_address); + } + bound_addr.sin_port = pj_htons ( (pj_uint16_t) listeningPort); bound_addr.sin_family = PJ_AF_INET; pj_bzero (bound_addr.sin_zero, sizeof (bound_addr.sin_zero)); @@ -2678,11 +2690,11 @@ pj_status_t SIPVoIPLink::createTlsTransport (AccountID id) local_addr.sin_port = pj_htons (localTlsPort); } - std::string localAddress = account->getLocalAddress(); + std::string localAddress = getInterfaceAddrFromName(account->getLocalAddress()); if (!localAddress.empty()) { pj_str_t pjAddress; - pj_cstr (&pjAddress, (account->getLocalAddress()).c_str()); + pj_cstr (&pjAddress, (getInterfaceAddrFromName(account->getLocalAddress())).c_str()); pj_status_t success; success = pj_sockaddr_in_set_str_addr (&local_addr, &pjAddress); @@ -3488,8 +3500,8 @@ mod_on_rx_request (pjsip_rx_data *rdata) // May use the published address as well - addrToUse = account->getLocalAddress (); - account->isStunEnabled () ? addrSdp = account->getPublishedAddress () : addrSdp = account->getLocalAddress (); + addrToUse = getInterfaceAddrFromName(account->getLocalAddress ()); + account->isStunEnabled () ? addrSdp = account->getPublishedAddress () : addrSdp = getInterfaceAddrFromName(account->getLocalAddress ()); // Set the appropriate transport to have the right VIA header link->init_transport_selector (account->getAccountTransport (), &tp); -- GitLab From 2cbd6788372ee8ee0dce36e79b1405cb98d8ce29 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Mon, 4 Jan 2010 11:22:58 -0500 Subject: [PATCH 121/188] [#2623] Add interface name in account --- sflphone-common/src/sip/sipaccount.h | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/sflphone-common/src/sip/sipaccount.h b/sflphone-common/src/sip/sipaccount.h index 58c3d1dc24..db4dbb17ff 100644 --- a/sflphone-common/src/sip/sipaccount.h +++ b/sflphone-common/src/sip/sipaccount.h @@ -196,6 +196,17 @@ class SIPAccount : public Account */ std::string getContactHeader(const std::string& address, const std::string& port); + /** + * Set the interface name on which this account is bound, "default" means + * that the account is bound to the ANY interafec (0.0.0.0). This method should be + * when binding the account to a new sip transport only. + */ + inline voidsetLocalInterface(const std::string interface&) {_interface = interface;} + + /** + * Get the local interface name on which this account is bound. + */ + inline std::string getLocalInterface(void) { return _interface; } /** * Get a flag which determine the usage in sip headers of either the local @@ -328,6 +339,9 @@ class SIPAccount : public Account // Network settings std::string _registrationExpire; + // interface name on which this account is bound + std::string _interface; + // Flag which determine if _localIpAddress or _publishedIpAddress is used in // sip headers bool _publishedSameasLocal; -- GitLab From db2b154978516e1905c790696ea9d7afca51bcec Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Mon, 4 Jan 2010 12:20:18 -0500 Subject: [PATCH 122/188] [#2623] Add local interface field in account configuration file --- sflphone-common/src/account.h | 1 + sflphone-common/src/managerimpl.cpp | 7 +++++++ sflphone-common/src/sip/sipaccount.cpp | 5 ++++- sflphone-common/src/sip/sipaccount.h | 2 +- 4 files changed, 13 insertions(+), 2 deletions(-) diff --git a/sflphone-common/src/account.h b/sflphone-common/src/account.h index c7c0424537..22dc6341b7 100644 --- a/sflphone-common/src/account.h +++ b/sflphone-common/src/account.h @@ -70,6 +70,7 @@ typedef enum RegistrationState { #define REALM "realm" #define DEFAULT_REALM "*" +#define LOCAL_INTERFACE "Account.localInterface" #define PUBLISHED_SAMEAS_LOCAL "Account.publishedSameAsLocal" #define LOCAL_PORT "Account.localPort" #define LOCAL_ADDRESS "Account.localAddress" diff --git a/sflphone-common/src/managerimpl.cpp b/sflphone-common/src/managerimpl.cpp index a409aa5a6d..29dcc62fd9 100644 --- a/sflphone-common/src/managerimpl.cpp +++ b/sflphone-common/src/managerimpl.cpp @@ -2266,6 +2266,7 @@ ManagerImpl::initConfigFile (bool load_user_value, std::string alternate) _config.addDefaultValue (std::pair<std::string, std::string> (TLS_REQUIRE_CLIENT_CERTIFICATE, TRUE_STR), IP2IP_PROFILE); _config.addDefaultValue (std::pair<std::string, std::string> (TLS_NEGOTIATION_TIMEOUT_SEC, "2"), IP2IP_PROFILE); _config.addDefaultValue (std::pair<std::string, std::string> (TLS_NEGOTIATION_TIMEOUT_MSEC, "0"), IP2IP_PROFILE); + _config.addDefaultValue (std::pair<std::string, std::string> (LOCAL_INTERFACE, "default"), IP2IP_PROFILE); _config.addDefaultValue (std::pair<std::string, std::string> (PUBLISHED_SAMEAS_LOCAL, TRUE_STR), IP2IP_PROFILE); _config.addDefaultValue (std::pair<std::string, std::string> (LOCAL_PORT, DEFAULT_SIP_PORT), IP2IP_PROFILE); _config.addDefaultValue (std::pair<std::string, std::string> (PUBLISHED_PORT, DEFAULT_SIP_PORT), IP2IP_PROFILE); @@ -3769,6 +3770,7 @@ void ManagerImpl::setAccountDetails (const std::string& accountID, const std::ma std::string hostname; std::string displayName; + std::string localInterface; std::string publishedSameasLocal; std::string localAddress; std::string publishedAddress; @@ -3805,6 +3807,10 @@ void ManagerImpl::setAccountDetails (const std::string& accountID, const std::ma displayName = iter->second; } + if ( (iter = map_cpy.find (LOCAL_INTERFACE)) != map_cpy.end()) { + localInterface = iter->second; + } + if ( (iter = map_cpy.find (PUBLISHED_SAMEAS_LOCAL)) != map_cpy.end()) { publishedSameasLocal = iter->second; } @@ -3935,6 +3941,7 @@ void ManagerImpl::setAccountDetails (const std::string& accountID, const std::ma setConfig (accountID, HOSTNAME, hostname); + setConfig (accountID, LOCAL_INTERFACE, localInterface); setConfig (accountID, PUBLISHED_SAMEAS_LOCAL, publishedSameasLocal); setConfig (accountID, LOCAL_ADDRESS, localAddress); setConfig (accountID, PUBLISHED_ADDRESS, publishedAddress); diff --git a/sflphone-common/src/sip/sipaccount.cpp b/sflphone-common/src/sip/sipaccount.cpp index 8c624d036b..60085f54af 100644 --- a/sflphone-common/src/sip/sipaccount.cpp +++ b/sflphone-common/src/sip/sipaccount.cpp @@ -341,8 +341,11 @@ void SIPAccount::loadConfig() // Load network settings // Local parameters - std::string localPort = Manager::instance().getConfigString (_accountID, LOCAL_PORT); + // Load local interface + setLocalInterface(Manager::instance().getConfigString (_accountID, LOCAL_INTERFACE)); + + std::string localPort = Manager::instance().getConfigString (_accountID, LOCAL_PORT); setLocalPort (atoi (localPort.c_str())); // Do not store or use IP address in config as this address may change diff --git a/sflphone-common/src/sip/sipaccount.h b/sflphone-common/src/sip/sipaccount.h index db4dbb17ff..855fbe39e4 100644 --- a/sflphone-common/src/sip/sipaccount.h +++ b/sflphone-common/src/sip/sipaccount.h @@ -201,7 +201,7 @@ class SIPAccount : public Account * that the account is bound to the ANY interafec (0.0.0.0). This method should be * when binding the account to a new sip transport only. */ - inline voidsetLocalInterface(const std::string interface&) {_interface = interface;} + inline void setLocalInterface(const std::string& interface) {_interface = interface;} /** * Get the local interface name on which this account is bound. -- GitLab From ef7f067d93c99610cba031a0f6a1666ef280dae1 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Mon, 4 Jan 2010 14:19:34 -0500 Subject: [PATCH 123/188] [#2623] Load local interface in account configuration dialog --- .../src/config/accountconfigdialog.c | 13 +++++++++++-- .../src/config/preferencesdialog.c | 9 ++++++--- sflphone-client-gnome/src/sflphone_const.h | 1 + sflphone-common/src/dbus/configurationmanager.cpp | 7 +++++++ sflphone-common/src/managerimpl.cpp | 1 + 5 files changed, 26 insertions(+), 5 deletions(-) diff --git a/sflphone-client-gnome/src/config/accountconfigdialog.c b/sflphone-client-gnome/src/config/accountconfigdialog.c index 327f356ead..02b19959f8 100644 --- a/sflphone-client-gnome/src/config/accountconfigdialog.c +++ b/sflphone-client-gnome/src/config/accountconfigdialog.c @@ -757,6 +757,7 @@ GtkWidget * create_advanced_tab(account_t **a) gchar * use_tls; gchar * published_address; gchar * published_port; + gchar * local_interface; gchar * local_address; gchar * local_port; gchar * stun_enable; @@ -772,6 +773,9 @@ GtkWidget * create_advanced_tab(account_t **a) published_sameas_local = g_hash_table_lookup(currentAccount->properties, PUBLISHED_SAMEAS_LOCAL); + local_interface = g_hash_table_lookup(currentAccount->properties, LOCAL_INTERFACE); + + local_port = g_hash_table_lookup(currentAccount->properties, LOCAL_PORT); local_address = g_hash_table_lookup(currentAccount->properties, LOCAL_ADDRESS); @@ -849,7 +853,7 @@ GtkWidget * create_advanced_tab(account_t **a) gtk_list_store_set(ipInterfaceListStore, &iter, 0, *iface, -1 ); // set the current local address - if (!iface_found && (g_strcmp0(*iface, local_address) == 0)) { + if (!iface_found && (g_strcmp0(*iface, local_interface) == 0)) { DEBUG("Setting active local address combo box"); current_local_address_iter = iter; iface_found = TRUE; @@ -1114,9 +1118,13 @@ show_account_window (account_t * a) g_hash_table_replace(currentAccount->properties, g_strdup(PUBLISHED_SAMEAS_LOCAL), g_strdup(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(sameAsLocalRadioButton)) ? "true":"false")); + g_hash_table_replace(currentAccount->properties, + g_strdup(LOCAL_INTERFACE), + g_strdup((gchar *)gtk_combo_box_get_active_text(GTK_COMBO_BOX(localAddressCombo)))); + g_hash_table_replace(currentAccount->properties, g_strdup(LOCAL_PORT), - g_strdup((gchar *)gtk_entry_get_text(GTK_ENTRY(localPortSpinBox)))); + g_strdup((gchar *)gtk_entry_get_text(GTK_ENTRY(localPortSpinBox)))); g_hash_table_replace(currentAccount->properties, g_strdup(LOCAL_ADDRESS), @@ -1136,6 +1144,7 @@ show_account_window (account_t * a) g_hash_table_replace(currentAccount->properties, g_strdup(PUBLISHED_PORT), g_strdup((gchar *)gtk_entry_get_text(GTK_ENTRY(localPortSpinBox)))); + g_hash_table_replace(currentAccount->properties, g_strdup(PUBLISHED_ADDRESS), diff --git a/sflphone-client-gnome/src/config/preferencesdialog.c b/sflphone-client-gnome/src/config/preferencesdialog.c index fddc259eed..13257f4c91 100644 --- a/sflphone-client-gnome/src/config/preferencesdialog.c +++ b/sflphone-client-gnome/src/config/preferencesdialog.c @@ -165,7 +165,7 @@ static void use_sip_tls_cb(GtkWidget *widget, gpointer data) static void ip2ip_local_address_changed_cb(GtkWidget *widget, gpointer data) { DEBUG("ip2ip_local_address_changed_cb\n"); - g_hash_table_replace(directIpCallsProperties, g_strdup(LOCAL_ADDRESS), g_strdup((gchar *)gtk_combo_box_get_active_text(GTK_COMBO_BOX(widget)))); + g_hash_table_replace(directIpCallsProperties, g_strdup(LOCAL_INTERFACE), g_strdup((gchar *)gtk_combo_box_get_active_text(GTK_COMBO_BOX(widget)))); } static void ip2ip_local_port_changed_cb(GtkWidget *widget, gpointer data) @@ -199,6 +199,7 @@ GtkWidget* create_direct_ip_calls_tab() gchar * curKeyExchange = "0"; gchar * description; + gchar * local_interface; gchar * local_address; gchar * local_port; @@ -207,8 +208,10 @@ GtkWidget* create_direct_ip_calls_tab() if(directIpCallsProperties != NULL) { DEBUG("got a directIpCallsProperties"); + local_interface = g_hash_table_lookup(directIpCallsProperties, LOCAL_INTERFACE); local_address = g_hash_table_lookup(directIpCallsProperties, LOCAL_ADDRESS); local_port = g_hash_table_lookup(directIpCallsProperties, LOCAL_PORT); + DEBUG(" local interface = %s", local_interface); DEBUG(" local address = %s", local_address); DEBUG(" local port = %s", local_port); curSRTPEnabled = g_hash_table_lookup(directIpCallsProperties, ACCOUNT_SRTP_ENABLED); @@ -264,7 +267,7 @@ GtkWidget* create_direct_ip_calls_tab() gtk_list_store_append(ipInterfaceListStore, &iter ); gtk_list_store_set(ipInterfaceListStore, &iter, 0, *iface, -1 ); - if (!iface_found && (g_strcmp0(*iface, local_address) == 0)) { + if (!iface_found && (g_strcmp0(*iface, local_interface) == 0)) { DEBUG("Setting active local address combo box"); current_local_address_iter = iter; iface_found = TRUE; @@ -292,7 +295,7 @@ GtkWidget* create_direct_ip_calls_tab() gtk_combo_box_set_active_iter(GTK_COMBO_BOX(localAddressCombo), ¤t_local_address_iter); g_signal_connect (G_OBJECT(GTK_COMBO_BOX(localAddressCombo)), "changed", G_CALLBACK (ip2ip_local_address_changed_cb), localAddressCombo); - g_hash_table_replace(directIpCallsProperties, g_strdup(LOCAL_ADDRESS), g_strdup((gchar *)gtk_combo_box_get_active_text(GTK_COMBO_BOX(localAddressCombo)))); + g_hash_table_replace(directIpCallsProperties, g_strdup(LOCAL_INTERFACE), g_strdup((gchar *)gtk_combo_box_get_active_text(GTK_COMBO_BOX(localAddressCombo)))); /** diff --git a/sflphone-client-gnome/src/sflphone_const.h b/sflphone-client-gnome/src/sflphone_const.h index b63a3e17e1..485e755dc0 100644 --- a/sflphone-client-gnome/src/sflphone_const.h +++ b/sflphone-client-gnome/src/sflphone_const.h @@ -88,6 +88,7 @@ #define TLS_NEGOTIATION_TIMEOUT_SEC "TLS.negotiationTimeoutSec" #define TLS_NEGOTIATION_TIMEOUT_MSEC "TLS.negotiationTimemoutMsec" +#define LOCAL_INTERFACE "Account.localInterface" #define PUBLISHED_SAMEAS_LOCAL "Account.publishedSameAsLocal" #define LOCAL_PORT "Account.localPort" #define LOCAL_ADDRESS "Account.localAddress" diff --git a/sflphone-common/src/dbus/configurationmanager.cpp b/sflphone-common/src/dbus/configurationmanager.cpp index 7b13da09a8..05fdc738f3 100644 --- a/sflphone-common/src/dbus/configurationmanager.cpp +++ b/sflphone-common/src/dbus/configurationmanager.cpp @@ -77,6 +77,7 @@ ConfigurationManager::getIp2IpDetails (void) ip2ipAccountDetails.insert (std::pair<std::string, std::string> (ZRTP_NOT_SUPP_WARNING, Manager::instance().getConfigString (IP2IP_PROFILE, ZRTP_NOT_SUPP_WARNING))); ip2ipAccountDetails.insert (std::pair<std::string, std::string> (ZRTP_DISPLAY_SAS_ONCE, Manager::instance().getConfigString (IP2IP_PROFILE, ZRTP_DISPLAY_SAS_ONCE))); + ip2ipAccountDetails.insert (std::pair<std::string, std::string> (LOCAL_INTERFACE, Manager::instance().getConfigString(IP2IP_PROFILE, LOCAL_INTERFACE))); ip2ipAccountDetails.insert (std::pair<std::string, std::string> (LOCAL_ADDRESS, Manager::instance().getConfigString (IP2IP_PROFILE, LOCAL_ADDRESS))); ip2ipAccountDetails.insert (std::pair<std::string, std::string> (LOCAL_PORT, Manager::instance().getConfigString (IP2IP_PROFILE, LOCAL_PORT))); @@ -94,6 +95,12 @@ ConfigurationManager::setIp2IpDetails (const std::map< std::string, std::string std::map<std::string, std::string> map_cpy = details; std::map<std::string, std::string>::iterator it; + it = map_cpy.find (LOCAL_INTERFACE); + + if (it != details.end()) { + Manager::instance().setConfig (IP2IP_PROFILE, LOCAL_INTERFACE, it->second); + } + it = map_cpy.find (LOCAL_ADDRESS); if (it != details.end()) { diff --git a/sflphone-common/src/managerimpl.cpp b/sflphone-common/src/managerimpl.cpp index 29dcc62fd9..d4cd94ab24 100644 --- a/sflphone-common/src/managerimpl.cpp +++ b/sflphone-common/src/managerimpl.cpp @@ -3536,6 +3536,7 @@ std::map< std::string, std::string > ManagerImpl::getAccountDetails (const Accou a.insert (std::pair<std::string, std::string> (AUTHENTICATION_USERNAME, getConfigString (accountID, AUTHENTICATION_USERNAME))); a.insert (std::pair<std::string, std::string> (CONFIG_ACCOUNT_MAILBOX, getConfigString (accountID, CONFIG_ACCOUNT_MAILBOX))); a.insert (std::pair<std::string, std::string> (CONFIG_ACCOUNT_REGISTRATION_EXPIRE, getConfigString (accountID, CONFIG_ACCOUNT_REGISTRATION_EXPIRE))); + a.insert (std::pair<std::string, std::string> (LOCAL_INTERFACE, getConfigString (accountID, LOCAL_INTERFACE))); a.insert (std::pair<std::string, std::string> (PUBLISHED_SAMEAS_LOCAL, getConfigString (accountID, PUBLISHED_SAMEAS_LOCAL))); a.insert (std::pair<std::string, std::string> (LOCAL_ADDRESS, getConfigString (accountID, LOCAL_ADDRESS))); a.insert (std::pair<std::string, std::string> (PUBLISHED_ADDRESS, getConfigString (accountID, PUBLISHED_ADDRESS))); -- GitLab From cb967d302072cef88b0689885a9f0c69cd41e850 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Mon, 4 Jan 2010 14:54:10 -0500 Subject: [PATCH 124/188] [#2623] Use interface instead of local address in CreateUDPServer --- sflphone-common/src/sip/sipvoiplink.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp index 87e546317c..92fb8973cc 100644 --- a/sflphone-common/src/sip/sipvoiplink.cpp +++ b/sflphone-common/src/sip/sipvoiplink.cpp @@ -2229,7 +2229,7 @@ int SIPVoIPLink::createUDPServer (AccountID id) _debug("Found account %s in map", account->getAccountID().c_str()); if (account->getLocalAddress () != "default") { - listeningAddress = getInterfaceAddrFromName(account->getLocalAddress()); + listeningAddress = getInterfaceAddrFromName(account->getLocalInterface()); } listeningPort = account->getLocalPort (); @@ -2239,13 +2239,14 @@ int SIPVoIPLink::createUDPServer (AccountID id) pj_str_t temporary_address; - // Init bound address to ANY - if (account && account->getLocalAddress () == "default") { + if (account && account->getLocalInterface () == "default") { + // Init bound address to ANY bound_addr.sin_addr.s_addr = pj_htonl (PJ_INADDR_ANY); } else { - // bind this account to a specific interface + + // bind this account to a specific interface pj_strdup2(_pool, &temporary_address, listeningAddress.c_str()); bound_addr.sin_addr = pj_inet_addr(&temporary_address); } -- GitLab From 24b36777de24908a0f1cfff729ef04b74a79f525 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Mon, 4 Jan 2010 15:36:30 -0500 Subject: [PATCH 125/188] [#2623] Add getInterfaceAddrFromName into SIPVoIPLink namespace --- sflphone-common/src/sip/sipvoiplink.cpp | 22 +++++++++++----------- sflphone-common/src/sip/sipvoiplink.h | 2 +- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp index 92fb8973cc..8e40585318 100644 --- a/sflphone-common/src/sip/sipvoiplink.cpp +++ b/sflphone-common/src/sip/sipvoiplink.cpp @@ -372,7 +372,7 @@ void get_remote_sdp_from_offer (pjsip_rx_data *rdata, pjmedia_sdp_session** r_sd } -std::string getInterfaceAddrFromName(std::string ifaceName) { +std::string SIPVoIPLink::getInterfaceAddrFromName(std::string ifaceName) { struct ifreq ifr; int fd; @@ -741,7 +741,7 @@ SIPVoIPLink::newOutgoingCall (const CallID& id, const std::string& toUrl) call->setPeerNumber (toUri); - localAddr = getInterfaceAddrFromName(account->getLocalAddress ()); + localAddr = getInterfaceAddrFromName(account->getLocalInterface ()); if (localAddr == "0.0.0.0") loadSIPLocalIP (&localAddr); @@ -749,7 +749,7 @@ SIPVoIPLink::newOutgoingCall (const CallID& id, const std::string& toUrl) setCallAudioLocal (call, localAddr); // May use the published address as well - account->isStunEnabled () ? addrSdp = account->getPublishedAddress () : addrSdp = getInterfaceAddrFromName(account->getLocalAddress ()); + account->isStunEnabled () ? addrSdp = account->getPublishedAddress () : addrSdp = getInterfaceAddrFromName(account->getLocalInterface ()); if (addrSdp == "0.0.0.0") loadSIPLocalIP (&addrSdp); @@ -1541,9 +1541,9 @@ bool SIPVoIPLink::new_ip_to_ip_call (const CallID& id, const std::string& to) } // Set the local address - localAddress = getInterfaceAddrFromName(account->getLocalAddress ()); + localAddress = getInterfaceAddrFromName(account->getLocalInterface ()); // Set SDP parameters - Set to local or published address - account->isStunEnabled () ? addrSdp = account->getPublishedAddress () : addrSdp = getInterfaceAddrFromName(account->getLocalAddress ()); + account->isStunEnabled () ? addrSdp = account->getPublishedAddress () : localAddress; _debug ("new_ip_to_ip_call localAddress: %s", localAddress.c_str()); @@ -1581,7 +1581,7 @@ bool SIPVoIPLink::new_ip_to_ip_call (const CallID& id, const std::string& to) _debug ("IptoIP local port %i", account->getLocalPort()); - _debug ("IptoIP local address in sdp %s", account->getLocalAddress().c_str()); + _debug ("IptoIP local address in sdp %s", localAddress.c_str()); // Create URI std::string fromUri; @@ -2228,7 +2228,7 @@ int SIPVoIPLink::createUDPServer (AccountID id) // We are trying to initialize a UDP transport available for all local accounts and direct IP calls _debug("Found account %s in map", account->getAccountID().c_str()); - if (account->getLocalAddress () != "default") { + if (account->getLocalInterface () != "default") { listeningAddress = getInterfaceAddrFromName(account->getLocalInterface()); } @@ -2691,11 +2691,11 @@ pj_status_t SIPVoIPLink::createTlsTransport (AccountID id) local_addr.sin_port = pj_htons (localTlsPort); } - std::string localAddress = getInterfaceAddrFromName(account->getLocalAddress()); + std::string localAddress = getInterfaceAddrFromName(account->getLocalInterface()); if (!localAddress.empty()) { pj_str_t pjAddress; - pj_cstr (&pjAddress, (getInterfaceAddrFromName(account->getLocalAddress())).c_str()); + pj_cstr (&pjAddress, (getInterfaceAddrFromName(account->getLocalInterface())).c_str()); pj_status_t success; success = pj_sockaddr_in_set_str_addr (&local_addr, &pjAddress); @@ -3501,8 +3501,8 @@ mod_on_rx_request (pjsip_rx_data *rdata) // May use the published address as well - addrToUse = getInterfaceAddrFromName(account->getLocalAddress ()); - account->isStunEnabled () ? addrSdp = account->getPublishedAddress () : addrSdp = getInterfaceAddrFromName(account->getLocalAddress ()); + addrToUse = SIPVoIPLink::instance("")->getInterfaceAddrFromName(account->getLocalInterface ()); + account->isStunEnabled () ? addrSdp = account->getPublishedAddress () : addrSdp = addrToUse; // Set the appropriate transport to have the right VIA header link->init_transport_selector (account->getAccountTransport (), &tp); diff --git a/sflphone-common/src/sip/sipvoiplink.h b/sflphone-common/src/sip/sipvoiplink.h index 911cca0a96..620dc9919e 100644 --- a/sflphone-common/src/sip/sipvoiplink.h +++ b/sflphone-common/src/sip/sipvoiplink.h @@ -311,7 +311,7 @@ class SIPVoIPLink : public VoIPLink * of interface name available on all of the interfaces on * the system. */ - // std::string getInterfaceAddrFromName(std::string ifaceName); + std::string getInterfaceAddrFromName(std::string ifaceName); /** -- GitLab From 0d425a7202f3736d2aab02e5d92c018721045ffe Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Mon, 4 Jan 2010 15:55:08 -0500 Subject: [PATCH 126/188] [#2623] add dbus method to resolve local ip address from interface name --- .../src/dbus/configurationmanager-introspec.xml | 7 ++++++- sflphone-client-gnome/src/dbus/dbus.c | 15 +++++++++++++++ .../src/dbus/configurationmanager-introspec.xml | 7 ++++++- sflphone-common/src/dbus/configurationmanager.cpp | 7 +++++++ sflphone-common/src/dbus/configurationmanager.h | 3 +++ 5 files changed, 37 insertions(+), 2 deletions(-) diff --git a/sflphone-client-gnome/src/dbus/configurationmanager-introspec.xml b/sflphone-client-gnome/src/dbus/configurationmanager-introspec.xml index 4b77337df8..3957e19693 100644 --- a/sflphone-client-gnome/src/dbus/configurationmanager-introspec.xml +++ b/sflphone-client-gnome/src/dbus/configurationmanager-introspec.xml @@ -369,7 +369,12 @@ <arg type="s" name="accountID" direction="in"/> <arg type="a{ss}" name="details" direction="in"/> </method> - + + <method name="getAddrFromInterfaceName"> + <arg type="s" name="interface" direction="in"/> + <arg type="s" name="address" direction="out"/> + </method> + <method name="getAllIpInterface"> <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/> <arg type="as" name="list" direction="out"/> diff --git a/sflphone-client-gnome/src/dbus/dbus.c b/sflphone-client-gnome/src/dbus/dbus.c index 2158cc1288..7640216f82 100644 --- a/sflphone-client-gnome/src/dbus/dbus.c +++ b/sflphone-client-gnome/src/dbus/dbus.c @@ -2358,6 +2358,21 @@ GHashTable* dbus_get_tls_settings_default(void) return results; } + +gchar * dbus_get_address_from_interface_name(gchar* interface) +{ + GError *error = NULL; + gchar * address; + + org_sflphone_SFLphone_ConfigurationManager_get_addr_from_interface_name ( configurationManagerProxy, interface, &address, &error); + if (error != NULL){ + ERROR ("Error calling org_sflphone_SFLphone_ConfigurationManager_get_addr_from_interface_name\n"); + g_error_free (error); + } + +} + + gchar ** dbus_get_all_ip_interface(void) { GError *error = NULL; diff --git a/sflphone-common/src/dbus/configurationmanager-introspec.xml b/sflphone-common/src/dbus/configurationmanager-introspec.xml index 4b77337df8..3957e19693 100644 --- a/sflphone-common/src/dbus/configurationmanager-introspec.xml +++ b/sflphone-common/src/dbus/configurationmanager-introspec.xml @@ -369,7 +369,12 @@ <arg type="s" name="accountID" direction="in"/> <arg type="a{ss}" name="details" direction="in"/> </method> - + + <method name="getAddrFromInterfaceName"> + <arg type="s" name="interface" direction="in"/> + <arg type="s" name="address" direction="out"/> + </method> + <method name="getAllIpInterface"> <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/> <arg type="as" name="list" direction="out"/> diff --git a/sflphone-common/src/dbus/configurationmanager.cpp b/sflphone-common/src/dbus/configurationmanager.cpp index 05fdc738f3..3654d1c1f8 100644 --- a/sflphone-common/src/dbus/configurationmanager.cpp +++ b/sflphone-common/src/dbus/configurationmanager.cpp @@ -721,6 +721,7 @@ ConfigurationManager::getMailNotify (void) return Manager::instance().getMailNotify(); } + int ConfigurationManager::getSipAddress (void) { @@ -782,6 +783,12 @@ void ConfigurationManager::setHistory (const std::map <std::string, std::string> Manager::instance().receive_history_from_client (entries); } +std::string +ConfigurationManager::getAddrFromInterfaceName(const std::string& interface) +{ + return SIPVoIPLink::instance("")->getInterfaceAddrFromName(interface); +} + std::vector<std::string> ConfigurationManager::getAllIpInterface (void) { _debug ("ConfigurationManager::getAllIpInterface received"); diff --git a/sflphone-common/src/dbus/configurationmanager.h b/sflphone-common/src/dbus/configurationmanager.h index 4da05f8126..92e2dbed7a 100644 --- a/sflphone-common/src/dbus/configurationmanager.h +++ b/sflphone-common/src/dbus/configurationmanager.h @@ -113,6 +113,7 @@ public: void setNotify( void ); int32_t getMailNotify( void ); void setMailNotify( void ); + int getSipAddress( void ); void setSipAddress( const std::string& address ); @@ -131,6 +132,8 @@ public: std::map<std::string, std::string> getTlsSettings(const std::string& accountID); void setTlsSettings(const std::string& accountID, const std::map< std::string, std::string >& details); + + std::string getAddrFromInterfaceName(const std::string& interface); std::vector<std::string> getAllIpInterface(void); std::vector<std::string> getAllIpInterfaceByName(void); -- GitLab From b4633195e57c8c3beacf2411e81477af4571be37 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Mon, 4 Jan 2010 17:42:03 -0500 Subject: [PATCH 127/188] [#2623] Robust published_address variable against configuration changes --- .../src/config/accountconfigdialog.c | 32 +++++++++++++++---- sflphone-client-gnome/src/dbus/dbus.c | 2 ++ sflphone-client-gnome/src/dbus/dbus.h | 4 +++ .../src/dbus/configurationmanager.cpp | 8 ++++- 4 files changed, 38 insertions(+), 8 deletions(-) diff --git a/sflphone-client-gnome/src/config/accountconfigdialog.c b/sflphone-client-gnome/src/config/accountconfigdialog.c index 02b19959f8..9bf4145e16 100644 --- a/sflphone-client-gnome/src/config/accountconfigdialog.c +++ b/sflphone-client-gnome/src/config/accountconfigdialog.c @@ -536,12 +536,18 @@ static use_stun_cb(GtkWidget * widget, gpointer data UNUSED) } + static same_as_local_cb(GtkWidget * widget, gpointer data UNUSED) { if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget))) { DEBUG("Same as local"); - gchar * ip_address = (gchar *) gtk_combo_box_get_active_text(GTK_COMBO_BOX(localAddressCombo)); - gtk_entry_set_text(GTK_ENTRY(publishedAddressEntry), ip_address); + gchar * local_interface; + gchar * local_address; + + local_interface = (gchar *) gtk_combo_box_get_active_text(GTK_COMBO_BOX(localAddressCombo)); + local_address = dbus_get_address_from_interface_name(local_interface); + + gtk_entry_set_text(GTK_ENTRY(publishedAddressEntry), local_address); gchar * local_port = (gchar *) gtk_entry_get_text(GTK_ENTRY(localPortSpinBox)); gtk_spin_button_set_value(GTK_SPIN_BUTTON(publishedPortSpinBox), g_ascii_strtod(local_port, NULL)); @@ -549,7 +555,6 @@ static same_as_local_cb(GtkWidget * widget, gpointer data UNUSED) } - GtkWidget * create_security_tab(account_t **a) { GtkWidget * frame; @@ -781,8 +786,9 @@ GtkWidget * create_advanced_tab(account_t **a) if (g_strcasecmp(published_sameas_local,"true") == 0) { - published_address = g_hash_table_lookup(currentAccount->properties, LOCAL_ADDRESS); + published_address = dbus_get_address_from_interface_name(local_interface); published_port = g_hash_table_lookup(currentAccount->properties, LOCAL_PORT); + } else { @@ -935,6 +941,7 @@ GtkWidget * create_advanced_tab(account_t **a) gtk_misc_set_alignment(GTK_MISC (publishedAddressLabel), 0, 0.5); publishedAddressEntry = gtk_entry_new(); gtk_label_set_mnemonic_widget (GTK_LABEL (publishedAddressLabel), publishedAddressEntry); + gtk_entry_set_text(GTK_ENTRY(publishedAddressEntry), published_address); gtk_table_attach_defaults( GTK_TABLE(table), publishedAddressEntry, 1, 2, 5, 6); @@ -951,7 +958,10 @@ GtkWidget * create_advanced_tab(account_t **a) // This will trigger a signal, and the above two // widgets need to be instanciated before that. - g_signal_connect(useStunCheckBox, "toggled", G_CALLBACK(use_stun_cb), useStunCheckBox); + // g_signal_connect(localAddressCombo, "changed", G_CALLBACK(use_stun_cb), useStunCheckBox); + + g_signal_connect(useStunCheckBox, "toggled", G_CALLBACK(use_stun_cb), useStunCheckBox); + g_signal_connect(sameAsLocalRadioButton, "toggled", G_CALLBACK(same_as_local_cb), sameAsLocalRadioButton); g_signal_connect(publishedAddrRadioButton, "toggled", G_CALLBACK(set_published_addr_manually_cb), publishedAddrRadioButton); @@ -1020,6 +1030,11 @@ show_account_window (account_t * a) gint response; account_t *currentAccount; + // In case the published address is same than local, + // we must resolve published address from interface name + gchar * local_interface; + gchar * published_address; + currentAccount = a; if (currentAccount == NULL) { @@ -1131,6 +1146,7 @@ show_account_window (account_t * a) g_strdup((gchar *)gtk_combo_box_get_active_text(GTK_COMBO_BOX(localAddressCombo)))); if(!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(sameAsLocalRadioButton))) { + g_hash_table_replace(currentAccount->properties, g_strdup(PUBLISHED_PORT), g_strdup((gchar *)gtk_entry_get_text(GTK_ENTRY(publishedPortSpinBox)))); @@ -1144,11 +1160,13 @@ show_account_window (account_t * a) g_hash_table_replace(currentAccount->properties, g_strdup(PUBLISHED_PORT), g_strdup((gchar *)gtk_entry_get_text(GTK_ENTRY(localPortSpinBox)))); - + local_interface = g_strdup((gchar *)gtk_combo_box_get_active_text(GTK_COMBO_BOX(localAddressCombo))); + + published_address = dbus_get_address_from_interface_name(local_interface); g_hash_table_replace(currentAccount->properties, g_strdup(PUBLISHED_ADDRESS), - g_strdup((gchar *)gtk_combo_box_get_active_text(GTK_COMBO_BOX(localAddressCombo)))); + published_address); } } diff --git a/sflphone-client-gnome/src/dbus/dbus.c b/sflphone-client-gnome/src/dbus/dbus.c index 7640216f82..c4aa52b7dc 100644 --- a/sflphone-client-gnome/src/dbus/dbus.c +++ b/sflphone-client-gnome/src/dbus/dbus.c @@ -2370,6 +2370,8 @@ gchar * dbus_get_address_from_interface_name(gchar* interface) g_error_free (error); } + return address; + } diff --git a/sflphone-client-gnome/src/dbus/dbus.h b/sflphone-client-gnome/src/dbus/dbus.h index f4dcc59da9..fb9662231f 100644 --- a/sflphone-client-gnome/src/dbus/dbus.h +++ b/sflphone-client-gnome/src/dbus/dbus.h @@ -514,6 +514,10 @@ gchar** dbus_get_addressbook_list (void); void dbus_set_addressbook_list (const gchar** list); +/** + * Resolve the local address given an interface name + */ +gchar * dbus_get_address_from_interface_name(gchar* interface); /** * Query the daemon to return a list of network interface (described as there IP address) diff --git a/sflphone-common/src/dbus/configurationmanager.cpp b/sflphone-common/src/dbus/configurationmanager.cpp index 3654d1c1f8..b17aa8b873 100644 --- a/sflphone-common/src/dbus/configurationmanager.cpp +++ b/sflphone-common/src/dbus/configurationmanager.cpp @@ -786,7 +786,13 @@ void ConfigurationManager::setHistory (const std::map <std::string, std::string> std::string ConfigurationManager::getAddrFromInterfaceName(const std::string& interface) { - return SIPVoIPLink::instance("")->getInterfaceAddrFromName(interface); + _debug ("ConfigurationManager::getAddrFromInterfaceName received"); + + std::string address = SIPVoIPLink::instance("")->getInterfaceAddrFromName(interface); + + _debug("address: %s", address.c_str()); + + return address; } std::vector<std::string> ConfigurationManager::getAllIpInterface (void) -- GitLab From ba38ebbca81df545b6535c1e9f59bbd79b494825 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Mon, 4 Jan 2010 18:29:58 -0500 Subject: [PATCH 128/188] [#2623] Make sure manual publishied address is sync with interface changes --- .../src/config/accountconfigdialog.c | 32 ++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/sflphone-client-gnome/src/config/accountconfigdialog.c b/sflphone-client-gnome/src/config/accountconfigdialog.c index 9bf4145e16..f3b8aa024b 100644 --- a/sflphone-client-gnome/src/config/accountconfigdialog.c +++ b/sflphone-client-gnome/src/config/accountconfigdialog.c @@ -489,6 +489,25 @@ static void use_sip_tls_cb(GtkWidget *widget, gpointer data) } } +static local_interface_changed_cb(GtkWidget * widget, gpointer data UNUSED) +{ + + if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(sameAsLocalRadioButton))) { + + gchar * local_interface; + gchar * local_address; + + local_interface = (gchar *) gtk_combo_box_get_active_text(GTK_COMBO_BOX(localAddressCombo)); + local_address = dbus_get_address_from_interface_name(local_interface); + + gtk_entry_set_text(GTK_ENTRY(publishedAddressEntry), local_address); + + // gchar * local_port = (gchar *) gtk_entry_get_text(GTK_ENTRY(localPortSpinBox)); + // gtk_spin_button_set_value(GTK_SPIN_BUTTON(publishedPortSpinBox), g_ascii_strtod(local_port, NULL)); + } + +} + static set_published_addr_manually_cb(GtkWidget * widget, gpointer data UNUSED) { DEBUG("set_published_addr_manually_cb"); @@ -510,6 +529,9 @@ static set_published_addr_manually_cb(GtkWidget * widget, gpointer data UNUSED) static use_stun_cb(GtkWidget * widget, gpointer data UNUSED) { + gchar * local_interface; + gchar * local_address; + if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget))) { DEBUG("Showing stun options, hiding Local/Published info"); gtk_widget_show(stunServerLabel); @@ -531,6 +553,14 @@ static use_stun_cb(GtkWidget * widget, gpointer data UNUSED) gtk_widget_show(publishedPortLabel); gtk_widget_show(publishedAddressEntry); gtk_widget_show(publishedPortSpinBox); + + // Since stun callback is called at initialization, we cannot reinit published address + // TODO: find a way so that if stun is unchecked, reinit published address entry + // in case local address changedd + + // local_interface = (gchar *) gtk_combo_box_get_active_text(GTK_COMBO_BOX(localAddressCombo)); + // local_address = dbus_get_address_from_interface_name(local_interface); + // gtk_entry_set_text(GTK_ENTRY(publishedAddressEntry), local_address); } } @@ -958,7 +988,7 @@ GtkWidget * create_advanced_tab(account_t **a) // This will trigger a signal, and the above two // widgets need to be instanciated before that. - // g_signal_connect(localAddressCombo, "changed", G_CALLBACK(use_stun_cb), useStunCheckBox); + g_signal_connect(localAddressCombo, "changed", G_CALLBACK(local_interface_changed_cb), localAddressCombo); g_signal_connect(useStunCheckBox, "toggled", G_CALLBACK(use_stun_cb), useStunCheckBox); -- GitLab From 475971cb15e2ae97f8e90ffa76c7d455103c4901 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Tue, 5 Jan 2010 11:30:00 -0500 Subject: [PATCH 129/188] [#2623] Fix published address for TLS transport if default interface selected --- sflphone-common/src/sip/sipvoiplink.cpp | 38 +++++++++++++++++++++++-- 1 file changed, 36 insertions(+), 2 deletions(-) diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp index 8e40585318..51b6beb62c 100644 --- a/sflphone-common/src/sip/sipvoiplink.cpp +++ b/sflphone-common/src/sip/sipvoiplink.cpp @@ -2691,11 +2691,25 @@ pj_status_t SIPVoIPLink::createTlsTransport (AccountID id) local_addr.sin_port = pj_htons (localTlsPort); } + /* + std::string localAddress; + if (account->getLocalInterface() == "default"){ + + // Current selected interface address is 0.0.0.0, resolve local address using + loadSIPLocalIP (&localAddress); + } + else { + + // Specific interface selected, reslove it + localAddress = getInterfaceAddrFromName(account->getLocalInterface()); + } + */ + std::string localAddress = getInterfaceAddrFromName(account->getLocalInterface()); if (!localAddress.empty()) { pj_str_t pjAddress; - pj_cstr (&pjAddress, (getInterfaceAddrFromName(account->getLocalInterface())).c_str()); + pj_cstr (&pjAddress, localAddress.c_str()); pj_status_t success; success = pj_sockaddr_in_set_str_addr (&local_addr, &pjAddress); @@ -2705,10 +2719,30 @@ pj_status_t SIPVoIPLink::createTlsTransport (AccountID id) } } + std::string publishedAddress; + if (account->getPublishedSameasLocal()) { + + // if "default" interface is selected, loadSIPLocalIP() is used to get local address + if (account->getLocalInterface() == "default"){ + + loadSIPLocalIP (&publishedAddress); + } + else { + + // Specific interface selected + publishedAddress = localAddress; + } + } + else { + + publishedAddress = account->getPublishedAddress(); + } + + /* Init published name */ pj_bzero (&a_name, sizeof (pjsip_host_port)); - pj_cstr (&a_name.host, (account->getPublishedAddress()).c_str()); + pj_cstr (&a_name.host, publishedAddress.c_str()); a_name.port = account->getPublishedPort(); -- GitLab From 5d4e55e6a7b9e77e81a3344fadd666fa4517e372 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Tue, 5 Jan 2010 13:30:00 -0500 Subject: [PATCH 130/188] [#2623] Clean up: LOCAL_ADDRESS configuration field no usefull anymore We now store interfaces by name --- .../src/config/accountconfigdialog.c | 7 +-- sflphone-client-gnome/src/config/assistant.c | 3 +- .../src/config/preferencesdialog.c | 20 +------- .../dbus/configurationmanager-introspec.xml | 7 --- sflphone-client-gnome/src/dbus/dbus.c | 5 ++ sflphone-client-gnome/src/sflphone_const.h | 1 - sflphone-common/src/account.h | 1 - .../dbus/configurationmanager-introspec.xml | 7 --- .../src/dbus/configurationmanager.cpp | 22 -------- .../src/dbus/configurationmanager.h | 3 -- sflphone-common/src/managerimpl.cpp | 50 +------------------ sflphone-common/src/managerimpl.h | 2 - .../src/managerimpl_registration.cpp | 5 +- sflphone-common/src/sip/sipaccount.cpp | 27 +--------- sflphone-common/src/sip/sipaccount.h | 14 ------ sflphone-common/src/sip/sipvoiplink.cpp | 2 +- 16 files changed, 14 insertions(+), 162 deletions(-) diff --git a/sflphone-client-gnome/src/config/accountconfigdialog.c b/sflphone-client-gnome/src/config/accountconfigdialog.c index f3b8aa024b..764ca6a06a 100644 --- a/sflphone-client-gnome/src/config/accountconfigdialog.c +++ b/sflphone-client-gnome/src/config/accountconfigdialog.c @@ -810,9 +810,7 @@ GtkWidget * create_advanced_tab(account_t **a) local_interface = g_hash_table_lookup(currentAccount->properties, LOCAL_INTERFACE); - local_port = g_hash_table_lookup(currentAccount->properties, LOCAL_PORT); - local_address = g_hash_table_lookup(currentAccount->properties, LOCAL_ADDRESS); if (g_strcasecmp(published_sameas_local,"true") == 0) { @@ -1170,10 +1168,7 @@ show_account_window (account_t * a) g_hash_table_replace(currentAccount->properties, g_strdup(LOCAL_PORT), g_strdup((gchar *)gtk_entry_get_text(GTK_ENTRY(localPortSpinBox)))); - - g_hash_table_replace(currentAccount->properties, - g_strdup(LOCAL_ADDRESS), - g_strdup((gchar *)gtk_combo_box_get_active_text(GTK_COMBO_BOX(localAddressCombo)))); + if(!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(sameAsLocalRadioButton))) { diff --git a/sflphone-client-gnome/src/config/assistant.c b/sflphone-client-gnome/src/config/assistant.c index c3be338bce..0319d1bd5e 100644 --- a/sflphone-client-gnome/src/config/assistant.c +++ b/sflphone-client-gnome/src/config/assistant.c @@ -164,7 +164,8 @@ static void sip_apply_callback( void ) { iface = iface_list; DEBUG("Selected interface %s", *iface); - g_hash_table_insert(current->properties, g_strdup(LOCAL_ADDRESS), g_strdup((gchar *)*iface)); + g_hash_table_insert(current->properties, g_strdup(LOCAL_INTERFACE), g_strdup((gchar *)*iface)); + g_hash_table_insert(current->properties, g_strdup(PUBLISHED_ADDRESS), g_strdup((gchar *)*iface)); dbus_add_account( current ); diff --git a/sflphone-client-gnome/src/config/preferencesdialog.c b/sflphone-client-gnome/src/config/preferencesdialog.c index 13257f4c91..d83e711183 100644 --- a/sflphone-client-gnome/src/config/preferencesdialog.c +++ b/sflphone-client-gnome/src/config/preferencesdialog.c @@ -58,22 +58,6 @@ static gboolean history_enabled = TRUE; GHashTable * directIpCallsProperties = NULL; - - -static void update_ip_address_port_cb ( GtkSpinButton *button UNUSED, void *ptr ) -{ - // dbus_set_sip_port(gtk_spin_button_get_value_as_int((GtkSpinButton *)(ptr))); - gchar* local_address = g_strdup((gchar *)gtk_combo_box_get_active_text(GTK_COMBO_BOX(localAddressCombo))); - gchar* local_port = g_strdup((gchar *)gtk_entry_get_text(GTK_ENTRY(localPortSpinBox))); - - gchar* ip_interface = g_strconcat(local_address, ":", local_port, NULL); - - DEBUG("update_ip_address_port_cb %s\n", ip_interface); - - dbus_set_sip_address(ip_interface); -} - - static void set_md5_hash_cb(GtkWidget *widget UNUSED, gpointer data UNUSED) { @@ -209,10 +193,8 @@ GtkWidget* create_direct_ip_calls_tab() if(directIpCallsProperties != NULL) { DEBUG("got a directIpCallsProperties"); local_interface = g_hash_table_lookup(directIpCallsProperties, LOCAL_INTERFACE); - local_address = g_hash_table_lookup(directIpCallsProperties, LOCAL_ADDRESS); local_port = g_hash_table_lookup(directIpCallsProperties, LOCAL_PORT); DEBUG(" local interface = %s", local_interface); - DEBUG(" local address = %s", local_address); DEBUG(" local port = %s", local_port); curSRTPEnabled = g_hash_table_lookup(directIpCallsProperties, ACCOUNT_SRTP_ENABLED); DEBUG(" curSRTPEnabled = %s", curSRTPEnabled); @@ -315,7 +297,7 @@ GtkWidget* create_direct_ip_calls_tab() GtkWidget *applyModificationButton = gtk_button_new_from_stock(GTK_STOCK_APPLY); - g_signal_connect( G_OBJECT(applyModificationButton) , "clicked" , G_CALLBACK( update_ip_address_port_cb ), localPortSpinBox); + // g_signal_connect( G_OBJECT(applyModificationButton) , "clicked" , G_CALLBACK( update_ip_address_port_cb ), localPortSpinBox); gtk_table_attach( GTK_TABLE(table), applyModificationButton, 2, 3, 1, 2, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 5); diff --git a/sflphone-client-gnome/src/dbus/configurationmanager-introspec.xml b/sflphone-client-gnome/src/dbus/configurationmanager-introspec.xml index 3957e19693..018917eaa4 100644 --- a/sflphone-client-gnome/src/dbus/configurationmanager-introspec.xml +++ b/sflphone-client-gnome/src/dbus/configurationmanager-introspec.xml @@ -290,13 +290,6 @@ <method name="switchPopupMode"> </method> - <method name="setSipAddress"> - <arg type="s" name="address" direction="in"/> - </method> - - <method name="getSipAddress"> - <arg type="i" name="address" direction="out"/> - </method> <!-- Addressbook configuration --> <method name="getAddressbookSettings"> diff --git a/sflphone-client-gnome/src/dbus/dbus.c b/sflphone-client-gnome/src/dbus/dbus.c index c4aa52b7dc..7d4fb6f4e7 100644 --- a/sflphone-client-gnome/src/dbus/dbus.c +++ b/sflphone-client-gnome/src/dbus/dbus.c @@ -2056,6 +2056,7 @@ dbus_get_audio_manager( void ) return api; } +/* void dbus_set_sip_address( const gchar* address ) { @@ -2069,6 +2070,9 @@ dbus_set_sip_address( const gchar* address ) g_error_free(error); } } +*/ + + /* gint dbus_get_sip_address( void ) @@ -2085,6 +2089,7 @@ dbus_get_sip_address( void ) } return address; } + */ GHashTable* dbus_get_addressbook_settings (void) { diff --git a/sflphone-client-gnome/src/sflphone_const.h b/sflphone-client-gnome/src/sflphone_const.h index 485e755dc0..d8e7870b9e 100644 --- a/sflphone-client-gnome/src/sflphone_const.h +++ b/sflphone-client-gnome/src/sflphone_const.h @@ -91,7 +91,6 @@ #define LOCAL_INTERFACE "Account.localInterface" #define PUBLISHED_SAMEAS_LOCAL "Account.publishedSameAsLocal" #define LOCAL_PORT "Account.localPort" -#define LOCAL_ADDRESS "Account.localAddress" #define PUBLISHED_PORT "Account.publishedPort" #define PUBLISHED_ADDRESS "Account.publishedAddress" diff --git a/sflphone-common/src/account.h b/sflphone-common/src/account.h index 22dc6341b7..2edddfe9bf 100644 --- a/sflphone-common/src/account.h +++ b/sflphone-common/src/account.h @@ -73,7 +73,6 @@ typedef enum RegistrationState { #define LOCAL_INTERFACE "Account.localInterface" #define PUBLISHED_SAMEAS_LOCAL "Account.publishedSameAsLocal" #define LOCAL_PORT "Account.localPort" -#define LOCAL_ADDRESS "Account.localAddress" #define PUBLISHED_PORT "Account.publishedPort" #define PUBLISHED_ADDRESS "Account.publishedAddress" diff --git a/sflphone-common/src/dbus/configurationmanager-introspec.xml b/sflphone-common/src/dbus/configurationmanager-introspec.xml index 3957e19693..018917eaa4 100644 --- a/sflphone-common/src/dbus/configurationmanager-introspec.xml +++ b/sflphone-common/src/dbus/configurationmanager-introspec.xml @@ -290,13 +290,6 @@ <method name="switchPopupMode"> </method> - <method name="setSipAddress"> - <arg type="s" name="address" direction="in"/> - </method> - - <method name="getSipAddress"> - <arg type="i" name="address" direction="out"/> - </method> <!-- Addressbook configuration --> <method name="getAddressbookSettings"> diff --git a/sflphone-common/src/dbus/configurationmanager.cpp b/sflphone-common/src/dbus/configurationmanager.cpp index b17aa8b873..82f7b6dda2 100644 --- a/sflphone-common/src/dbus/configurationmanager.cpp +++ b/sflphone-common/src/dbus/configurationmanager.cpp @@ -78,7 +78,6 @@ ConfigurationManager::getIp2IpDetails (void) ip2ipAccountDetails.insert (std::pair<std::string, std::string> (ZRTP_DISPLAY_SAS_ONCE, Manager::instance().getConfigString (IP2IP_PROFILE, ZRTP_DISPLAY_SAS_ONCE))); ip2ipAccountDetails.insert (std::pair<std::string, std::string> (LOCAL_INTERFACE, Manager::instance().getConfigString(IP2IP_PROFILE, LOCAL_INTERFACE))); - ip2ipAccountDetails.insert (std::pair<std::string, std::string> (LOCAL_ADDRESS, Manager::instance().getConfigString (IP2IP_PROFILE, LOCAL_ADDRESS))); ip2ipAccountDetails.insert (std::pair<std::string, std::string> (LOCAL_PORT, Manager::instance().getConfigString (IP2IP_PROFILE, LOCAL_PORT))); std::map<std::string, std::string> tlsSettings; @@ -101,12 +100,6 @@ ConfigurationManager::setIp2IpDetails (const std::map< std::string, std::string Manager::instance().setConfig (IP2IP_PROFILE, LOCAL_INTERFACE, it->second); } - it = map_cpy.find (LOCAL_ADDRESS); - - if (it != details.end()) { - Manager::instance().setConfig (IP2IP_PROFILE, LOCAL_ADDRESS, it->second); - } - it = map_cpy.find (LOCAL_PORT); if (it != details.end()) { @@ -722,21 +715,6 @@ ConfigurationManager::getMailNotify (void) } -int -ConfigurationManager::getSipAddress (void) -{ - return Manager::instance().getLocalIp2IpPort(); - - // return "ok"; -} - -void -ConfigurationManager::setSipAddress (const std::string& address) -{ - _debug ("Manager received setSipAddress: %s", address.c_str()); - Manager::instance().setLocalIp2IpInfo (address); -} - std::map<std::string, int32_t> ConfigurationManager::getAddressbookSettings (void) { return Manager::instance().getAddressbookSettings (); diff --git a/sflphone-common/src/dbus/configurationmanager.h b/sflphone-common/src/dbus/configurationmanager.h index 92e2dbed7a..61072e16b5 100644 --- a/sflphone-common/src/dbus/configurationmanager.h +++ b/sflphone-common/src/dbus/configurationmanager.h @@ -114,9 +114,6 @@ public: int32_t getMailNotify( void ); void setMailNotify( void ); - int getSipAddress( void ); - void setSipAddress( const std::string& address ); - std::map<std::string, int32_t> getAddressbookSettings (void); void setAddressbookSettings (const std::map<std::string, int32_t>& settings); std::vector< std::string > getAddressbookList ( void ); diff --git a/sflphone-common/src/managerimpl.cpp b/sflphone-common/src/managerimpl.cpp index d4cd94ab24..f8d3d551ba 100644 --- a/sflphone-common/src/managerimpl.cpp +++ b/sflphone-common/src/managerimpl.cpp @@ -2270,7 +2270,6 @@ ManagerImpl::initConfigFile (bool load_user_value, std::string alternate) _config.addDefaultValue (std::pair<std::string, std::string> (PUBLISHED_SAMEAS_LOCAL, TRUE_STR), IP2IP_PROFILE); _config.addDefaultValue (std::pair<std::string, std::string> (LOCAL_PORT, DEFAULT_SIP_PORT), IP2IP_PROFILE); _config.addDefaultValue (std::pair<std::string, std::string> (PUBLISHED_PORT, DEFAULT_SIP_PORT), IP2IP_PROFILE); - _config.addDefaultValue (std::pair<std::string, std::string> (LOCAL_ADDRESS, DEFAULT_ADDRESS), IP2IP_PROFILE); _config.addDefaultValue (std::pair<std::string, std::string> (PUBLISHED_ADDRESS, DEFAULT_ADDRESS), IP2IP_PROFILE); _config.addDefaultValue (std::pair<std::string, std::string> (STUN_ENABLE, DFT_STUN_ENABLE), IP2IP_PROFILE); _config.addDefaultValue (std::pair<std::string, std::string> (STUN_SERVER, DFT_STUN_SERVER), IP2IP_PROFILE); @@ -3235,49 +3234,10 @@ void ManagerImpl::setMicVolume (unsigned short mic_vol) - - -void ManagerImpl::setLocalIp2IpInfo (const std::string& address) -{ - std::string ip_address = std::string (address); - - int index = ip_address.find_first_of (":"); - - std::string local_address = ip_address.substr (0,index); - std::string local_port = ip_address.substr (index+1); - int newPort = atoi (local_port.c_str()); - - _debug ("Setting new address %s and port %s for default account (ip to ip calls)", local_address.c_str(), local_port.c_str()); - - int prevPort = getConfigInt (IP2IP_PROFILE, LOCAL_PORT); - std::string prevAddress = getConfigString (IP2IP_PROFILE, LOCAL_ADDRESS); - - if ( (prevPort != newPort) || (prevAddress.compare (local_address) != 0)) { - - - if (_directIpAccount) { - - SIPAccount* account = dynamic_cast<SIPAccount*> (_directIpAccount); - - account->setLocalPort (newPort); - account->setLocalAddress (local_address); - } - - setConfig (IP2IP_PROFILE, LOCAL_ADDRESS, local_address); - - setConfig (IP2IP_PROFILE, LOCAL_PORT, newPort); - - SIPVoIPLink* siplink = SIPVoIPLink::instance (""); - // if(siplink) - siplink->updateAccountInfo (_directIpAccount->getAccountID()); - // this->restartPJSIP (); - } -} - - + int ManagerImpl::getLocalIp2IpPort (void) { - /* The SIP port used for default account (IP to IP) calls */ + // The SIP port used for default account (IP to IP) calls _debug ("Default account port %i", getConfigInt (IP2IP_PROFILE, LOCAL_PORT)); return getConfigInt (IP2IP_PROFILE, LOCAL_PORT); @@ -3538,7 +3498,6 @@ std::map< std::string, std::string > ManagerImpl::getAccountDetails (const Accou a.insert (std::pair<std::string, std::string> (CONFIG_ACCOUNT_REGISTRATION_EXPIRE, getConfigString (accountID, CONFIG_ACCOUNT_REGISTRATION_EXPIRE))); a.insert (std::pair<std::string, std::string> (LOCAL_INTERFACE, getConfigString (accountID, LOCAL_INTERFACE))); a.insert (std::pair<std::string, std::string> (PUBLISHED_SAMEAS_LOCAL, getConfigString (accountID, PUBLISHED_SAMEAS_LOCAL))); - a.insert (std::pair<std::string, std::string> (LOCAL_ADDRESS, getConfigString (accountID, LOCAL_ADDRESS))); a.insert (std::pair<std::string, std::string> (PUBLISHED_ADDRESS, getConfigString (accountID, PUBLISHED_ADDRESS))); a.insert (std::pair<std::string, std::string> (LOCAL_PORT, getConfigString (accountID, LOCAL_PORT))); a.insert (std::pair<std::string, std::string> (PUBLISHED_PORT, getConfigString (accountID, PUBLISHED_PORT))); @@ -3816,10 +3775,6 @@ void ManagerImpl::setAccountDetails (const std::string& accountID, const std::ma publishedSameasLocal = iter->second; } - if ( (iter = map_cpy.find (LOCAL_ADDRESS)) != map_cpy.end()) { - localAddress = iter->second; - } - if ( (iter = map_cpy.find (PUBLISHED_ADDRESS)) != map_cpy.end()) { publishedAddress = iter->second; } @@ -3944,7 +3899,6 @@ void ManagerImpl::setAccountDetails (const std::string& accountID, const std::ma setConfig (accountID, LOCAL_INTERFACE, localInterface); setConfig (accountID, PUBLISHED_SAMEAS_LOCAL, publishedSameasLocal); - setConfig (accountID, LOCAL_ADDRESS, localAddress); setConfig (accountID, PUBLISHED_ADDRESS, publishedAddress); setConfig (accountID, LOCAL_PORT, localPort); setConfig (accountID, PUBLISHED_PORT, publishedPort); diff --git a/sflphone-common/src/managerimpl.h b/sflphone-common/src/managerimpl.h index fe2ce8618d..ca88a42939 100644 --- a/sflphone-common/src/managerimpl.h +++ b/sflphone-common/src/managerimpl.h @@ -1319,8 +1319,6 @@ class ManagerImpl { int getLocalIp2IpPort(); - void setLocalIp2IpInfo( const std::string& address ); - std::string getStunServer (void); void setStunServer (const std::string &server); diff --git a/sflphone-common/src/managerimpl_registration.cpp b/sflphone-common/src/managerimpl_registration.cpp index 004faf8f2e..241a8b4078 100644 --- a/sflphone-common/src/managerimpl_registration.cpp +++ b/sflphone-common/src/managerimpl_registration.cpp @@ -95,11 +95,8 @@ ManagerImpl::initRegisterAccounts() while (iter != _accountMap.end()) { if (iter->second) { iter->second->loadConfig(); - /* If the account is set as enabled, try to register */ - - // TODO: take off this protection by storing localIPAddress using interface name - setConfig (iter->second->getAccountID(), LOCAL_ADDRESS, "0.0.0.0"); + /* If the account is set as enabled, try to register */ if (iter->second->isEnabled()) { status = iter->second->registerVoIPLink(); diff --git a/sflphone-common/src/sip/sipaccount.cpp b/sflphone-common/src/sip/sipaccount.cpp index 60085f54af..29e1ace799 100644 --- a/sflphone-common/src/sip/sipaccount.cpp +++ b/sflphone-common/src/sip/sipaccount.cpp @@ -30,7 +30,6 @@ SIPAccount::SIPAccount (const AccountID& accountID) , _bRegister (false) , _registrationExpire ("") , _publishedSameasLocal (true) - , _localIpAddress ("") , _publishedIpAddress ("") , _localPort (atoi (DEFAULT_SIP_PORT)) , _publishedPort (atoi (DEFAULT_SIP_PORT)) @@ -348,12 +347,6 @@ void SIPAccount::loadConfig() std::string localPort = Manager::instance().getConfigString (_accountID, LOCAL_PORT); setLocalPort (atoi (localPort.c_str())); - // Do not store or use IP address in config as this address may change - // Use loadSIPLocalIP for now instead in register/unregister (UDP,STUN,TLS), newOutGoingCall, mod_on_rx_request - // TODO: if we realy have to bind to a specific interface, store interfaces by name instead - // setLocalAddress (std::string("0.0.0.0")); - setLocalAddress (Manager::instance().getConfigString (_accountID, LOCAL_ADDRESS)); - // Published parameters setPublishedSameasLocal (Manager::instance().getConfigString (_accountID, PUBLISHED_SAMEAS_LOCAL) == TRUE_STR ? true : false); @@ -422,25 +415,7 @@ std::string SIPAccount::getLoginName (void) std::string SIPAccount::getTransportMapKey(void) { - /* - std::string mapKey; - - std::stringstream out; - - out << getLocalPort(); - std::string localAddress = getLocalAddress(); - std::string localPort = out.str(); - - out.seekp (0); - out << getPublishedPort(); - std::string publishedAddress = getPublishedAddress(); - std::string publishedPort = out.str(); - - mapKey.append(localAddress.c_str()); - mapKey.append(localPort.c_str()); - mapKey.append(publishedAddress.c_str()); - mapKey.append(publishedPort.c_str()); - */ + std::stringstream out; out << getLocalPort(); std::string localPort = out.str(); diff --git a/sflphone-common/src/sip/sipaccount.h b/sflphone-common/src/sip/sipaccount.h index 855fbe39e4..ae454a5333 100644 --- a/sflphone-common/src/sip/sipaccount.h +++ b/sflphone-common/src/sip/sipaccount.h @@ -248,19 +248,6 @@ class SIPAccount : public Account * @pram port The port used by this account. */ inline void setPublishedPort(pj_uint16_t port) { _publishedPort = port; } - - /** - * Get the bound address set by the user. - * @return std::string The public IPV4 address formatted in the standard dot notation. - */ - inline std::string getLocalAddress(void) { return _localIpAddress; } - - /** - * Set the bound address chosen by the user. - * @param The public IPV4 address in the standard dot notation. - * @return void - */ - inline void setLocalAddress(const std::string& address) { _localIpAddress = address; } /** * Get the public IP address set by the user for this account. @@ -346,7 +333,6 @@ class SIPAccount : public Account // sip headers bool _publishedSameasLocal; - std::string _localIpAddress; std::string _publishedIpAddress; pj_uint16_t _localPort; diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp index 51b6beb62c..3064cbf013 100644 --- a/sflphone-common/src/sip/sipvoiplink.cpp +++ b/sflphone-common/src/sip/sipvoiplink.cpp @@ -2097,7 +2097,7 @@ bool SIPVoIPLink::acquireTransport(const AccountID& accountID) { _debug("Use default one instead (%s:%i)", localHostName.c_str(), _localUDPTransport->local_name.port); - account->setLocalAddress(localHostName); + // account->setLocalAddress(localHostName); account->setLocalPort(_localUDPTransport->local_name.port); // Transport could not either be created or found in the map, socket not available -- GitLab From 25332552e7e4df7921024b6c9be0de28a082e661 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Tue, 5 Jan 2010 15:07:09 -0500 Subject: [PATCH 131/188] [#2623] Fix outgoing ip to ip calls, sdp parameters set using local address --- sflphone-common/src/sip/sipvoiplink.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp index 3064cbf013..7231e20595 100644 --- a/sflphone-common/src/sip/sipvoiplink.cpp +++ b/sflphone-common/src/sip/sipvoiplink.cpp @@ -1542,8 +1542,8 @@ bool SIPVoIPLink::new_ip_to_ip_call (const CallID& id, const std::string& to) // Set the local address localAddress = getInterfaceAddrFromName(account->getLocalInterface ()); - // Set SDP parameters - Set to local or published address - account->isStunEnabled () ? addrSdp = account->getPublishedAddress () : localAddress; + // Set SDP parameters - Set to local + addrSdp = localAddress; _debug ("new_ip_to_ip_call localAddress: %s", localAddress.c_str()); -- GitLab From c0ae25bbc58b68d726207b9056e0e30f7b90f897 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Wed, 6 Jan 2010 12:59:09 -0500 Subject: [PATCH 132/188] [#2522] Add basic SRTP attribute in sdp --- sflphone-common/src/sip/sdp.cpp | 33 +++++++++++++++++++++++++++++++++ sflphone-common/src/sip/sdp.h | 8 ++++++++ 2 files changed, 41 insertions(+) diff --git a/sflphone-common/src/sip/sdp.cpp b/sflphone-common/src/sip/sdp.cpp index c9cf1b6e97..66abc5ca75 100644 --- a/sflphone-common/src/sip/sdp.cpp +++ b/sflphone-common/src/sip/sdp.cpp @@ -130,6 +130,8 @@ void Sdp::set_media_descriptor_line (sdpMedia *media, pjmedia_sdp_media** p_med) _debug ("No hash specified"); } + // sdp_add_srtp_attribute (med); + *p_med = med; } @@ -360,6 +362,37 @@ void Sdp::sdp_add_media_description() } } + +void Sdp::sdp_add_srtp_attribute (pjmedia_sdp_media* media) +{ + + char tempbuf[256]; + + std::string crypto_suite = "AES_CM_128_HMAC_SHA1_32"; + std::string application = "srtp"; + std::string key = "inline:16/14/NzB4d1BINUAvLEw6UzF3WSJ+PSdFcGdUJShpX1Zj/2^20/1:32"; + + pjmedia_sdp_attr *attribute = (pjmedia_sdp_attr*) pj_pool_zalloc(_pool, sizeof(pjmedia_sdp_attr)); + + attribute->name = pj_strdup3(_pool, "crypto"); + + int len = pj_ansi_snprintf(tempbuf, sizeof(tempbuf), + "%.*s %.*s %.*s", + (int)crypto_suite.size(), crypto_suite.c_str(), + (int)application.size(), application.c_str(), + (int)key.size(), key.c_str()); + + attribute->value.slen = len; + attribute->value.ptr = (char*) pj_pool_alloc (_pool, attribute->value.slen+1); + pj_memcpy (attribute->value.ptr, tempbuf, attribute->value.slen+1); + + if(pjmedia_sdp_media_add_attr(media, attribute) != PJ_SUCCESS) { + throw sdpException(); + } + +} + + void Sdp::sdp_add_zrtp_attribute (pjmedia_sdp_media* media, std::string hash) { pjmedia_sdp_attr *attribute; diff --git a/sflphone-common/src/sip/sdp.h b/sflphone-common/src/sip/sdp.h index 9500fa3185..a2af3cd247 100644 --- a/sflphone-common/src/sip/sdp.h +++ b/sflphone-common/src/sip/sdp.h @@ -336,6 +336,14 @@ class Sdp { void get_remote_sdp_media_from_offer (const pjmedia_sdp_session* r_sdp, pjmedia_sdp_media** r_media); + + /* + * Adds a srtp attribute to the given media section. + * + * @param media The media to add the srtp attribute to + */ + void sdp_add_srtp_attribute(pjmedia_sdp_media* media); + /* * Adds a zrtp-hash attribute to * the given media section. The hello hash is -- GitLab From d815147b34f94cc70ecbdb266c2bf2872ca0cc1c Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Wed, 6 Jan 2010 17:18:42 -0500 Subject: [PATCH 133/188] [#2522] Add simple crypto attribute parser in SDP --- .../src/audio/audiortp/AudioRtpFactory.cpp | 1 + sflphone-common/src/sip/sdp.cpp | 27 ++++++++++++++++--- sflphone-common/src/sip/sdp.h | 6 +++-- sflphone-common/src/sip/sipvoiplink.cpp | 3 +++ 4 files changed, 32 insertions(+), 5 deletions(-) diff --git a/sflphone-common/src/audio/audiortp/AudioRtpFactory.cpp b/sflphone-common/src/audio/audiortp/AudioRtpFactory.cpp index bf9a9bf6c8..318bf8c727 100644 --- a/sflphone-common/src/audio/audiortp/AudioRtpFactory.cpp +++ b/sflphone-common/src/audio/audiortp/AudioRtpFactory.cpp @@ -125,6 +125,7 @@ void AudioRtpFactory::start (void) switch (_rtpSessionType) { case Sdes: + break; case Symmetric: _debug ("Starting symmetric rtp thread"); diff --git a/sflphone-common/src/sip/sdp.cpp b/sflphone-common/src/sip/sdp.cpp index 66abc5ca75..32fb474e86 100644 --- a/sflphone-common/src/sip/sdp.cpp +++ b/sflphone-common/src/sip/sdp.cpp @@ -33,6 +33,7 @@ static const pj_str_t STR_SDP_NAME = { (char*) "sflphone", 8 }; static const pj_str_t STR_SENDRECV = { (char*) "sendrecv", 8 }; static const pj_str_t STR_RTPMAP = { (char*) "rtpmap", 6 }; + Sdp::Sdp (pj_pool_t *pool) : _local_media_cap() , _session_media (0) @@ -130,7 +131,7 @@ void Sdp::set_media_descriptor_line (sdpMedia *media, pjmedia_sdp_media** p_med) _debug ("No hash specified"); } - // sdp_add_srtp_attribute (med); + sdp_add_sdes_attribute (med); *p_med = med; } @@ -363,11 +364,12 @@ void Sdp::sdp_add_media_description() } -void Sdp::sdp_add_srtp_attribute (pjmedia_sdp_media* media) +void Sdp::sdp_add_sdes_attribute (pjmedia_sdp_media* media) { char tempbuf[256]; + std::string tag = "1"; std::string crypto_suite = "AES_CM_128_HMAC_SHA1_32"; std::string application = "srtp"; std::string key = "inline:16/14/NzB4d1BINUAvLEw6UzF3WSJ+PSdFcGdUJShpX1Zj/2^20/1:32"; @@ -378,8 +380,8 @@ void Sdp::sdp_add_srtp_attribute (pjmedia_sdp_media* media) int len = pj_ansi_snprintf(tempbuf, sizeof(tempbuf), "%.*s %.*s %.*s", + (int)tag.size(), tag.c_str(), (int)crypto_suite.size(), crypto_suite.c_str(), - (int)application.size(), application.c_str(), (int)key.size(), key.c_str()); attribute->value.slen = len; @@ -638,8 +640,12 @@ void Sdp::set_media_transport_info_from_remote_sdp (const pjmedia_sdp_session *r pjmedia_sdp_media *r_media; + pjmedia_sdp_attr *attribute; + this->get_remote_sdp_media_from_offer (remote_sdp, &r_media); + // this->get_remote_sdp_crypto_from_offer() + if (r_media==NULL) { _debug ("SDP Failure: no remote sdp media found in the remote offer"); return; @@ -665,3 +671,18 @@ void Sdp::get_remote_sdp_media_from_offer (const pjmedia_sdp_session* remote_sdp } } +void Sdp::get_remote_sdp_crypto_from_offer (const pjmedia_sdp_session* remote_sdp, pjmedia_sdp_media** r_crypto) +{ + int count, i; + + count = remote_sdp->media_count; + *r_crypto = NULL; + + for (i = 0; i < count; ++i) { + if (pj_stricmp2 (&remote_sdp->media[i]->desc.media, "crypto") == 0) { + *r_crypto = remote_sdp->media[i]; + return; + } + } +} + diff --git a/sflphone-common/src/sip/sdp.h b/sflphone-common/src/sip/sdp.h index a2af3cd247..9040dbb5f8 100644 --- a/sflphone-common/src/sip/sdp.h +++ b/sflphone-common/src/sip/sdp.h @@ -336,13 +336,15 @@ class Sdp { void get_remote_sdp_media_from_offer (const pjmedia_sdp_session* r_sdp, pjmedia_sdp_media** r_media); + void get_remote_sdp_crypto_from_offer (const pjmedia_sdp_session* remote_sdp, pjmedia_sdp_media** r_crypto); + /* - * Adds a srtp attribute to the given media section. + * Adds a sdes attribute to the given media section. * * @param media The media to add the srtp attribute to */ - void sdp_add_srtp_attribute(pjmedia_sdp_media* media); + void sdp_add_sdes_attribute(pjmedia_sdp_media* media); /* * Adds a zrtp-hash attribute to diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp index 7231e20595..bed479fc16 100644 --- a/sflphone-common/src/sip/sipvoiplink.cpp +++ b/sflphone-common/src/sip/sipvoiplink.cpp @@ -3419,6 +3419,9 @@ mod_on_rx_request (pjsip_rx_data *rdata) int end_displayName = temp.rfind ("\""); // _debug("The display name start at %i, end at %i", begin_displayName, end_displayName); displayName = temp.substr (begin_displayName, end_displayName - begin_displayName);//display_name); + if(displayName.size() > 25) { + displayName = std::string (""); + } } else { displayName = std::string (""); } -- GitLab From b7d8dd44d98da60f879d8267a0c8fcbdae20dc56 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Thu, 7 Jan 2010 10:06:56 -0500 Subject: [PATCH 134/188] [#2522] Add crypto attribute as session attribute, not media --- sflphone-common/src/sip/sdp.cpp | 39 +++++++++++++++++++++++---------- sflphone-common/src/sip/sdp.h | 4 ++-- 2 files changed, 29 insertions(+), 14 deletions(-) diff --git a/sflphone-common/src/sip/sdp.cpp b/sflphone-common/src/sip/sdp.cpp index 32fb474e86..22497d6189 100644 --- a/sflphone-common/src/sip/sdp.cpp +++ b/sflphone-common/src/sip/sdp.cpp @@ -32,6 +32,7 @@ static const pj_str_t STR_RTP_AVP = { (char*) "RTP/AVP", 7 }; static const pj_str_t STR_SDP_NAME = { (char*) "sflphone", 8 }; static const pj_str_t STR_SENDRECV = { (char*) "sendrecv", 8 }; static const pj_str_t STR_RTPMAP = { (char*) "rtpmap", 6 }; +static const pj_str_t STR_CRYPTO = { (char*) "crypto", 6 }; Sdp::Sdp (pj_pool_t *pool) @@ -131,8 +132,6 @@ void Sdp::set_media_descriptor_line (sdpMedia *media, pjmedia_sdp_media** p_med) _debug ("No hash specified"); } - sdp_add_sdes_attribute (med); - *p_med = med; } @@ -159,6 +158,8 @@ int Sdp::create_local_offer () //sdp_addAttributes( _pool ); sdp_add_media_description(); + sdp_add_sdes_attribute(); + //toString (); // Validate the sdp session @@ -364,7 +365,7 @@ void Sdp::sdp_add_media_description() } -void Sdp::sdp_add_sdes_attribute (pjmedia_sdp_media* media) +void Sdp::sdp_add_sdes_attribute () { char tempbuf[256]; @@ -383,12 +384,12 @@ void Sdp::sdp_add_sdes_attribute (pjmedia_sdp_media* media) (int)tag.size(), tag.c_str(), (int)crypto_suite.size(), crypto_suite.c_str(), (int)key.size(), key.c_str()); - + attribute->value.slen = len; attribute->value.ptr = (char*) pj_pool_alloc (_pool, attribute->value.slen+1); pj_memcpy (attribute->value.ptr, tempbuf, attribute->value.slen+1); - if(pjmedia_sdp_media_add_attr(media, attribute) != PJ_SUCCESS) { + if(pjmedia_sdp_attr_add(&(_local_offer->attr_count), _local_offer->attr, attribute) != PJ_SUCCESS){ throw sdpException(); } @@ -644,7 +645,7 @@ void Sdp::set_media_transport_info_from_remote_sdp (const pjmedia_sdp_session *r this->get_remote_sdp_media_from_offer (remote_sdp, &r_media); - // this->get_remote_sdp_crypto_from_offer() + this->get_remote_sdp_crypto_from_offer(remote_sdp, &attribute); if (r_media==NULL) { _debug ("SDP Failure: no remote sdp media found in the remote offer"); @@ -671,18 +672,32 @@ void Sdp::get_remote_sdp_media_from_offer (const pjmedia_sdp_session* remote_sdp } } -void Sdp::get_remote_sdp_crypto_from_offer (const pjmedia_sdp_session* remote_sdp, pjmedia_sdp_media** r_crypto) +void Sdp::get_remote_sdp_crypto_from_offer (const pjmedia_sdp_session* remote_sdp, pjmedia_sdp_attr** r_crypto) { - int count, i; - count = remote_sdp->media_count; + int i; + int attr_count; + // pjmedia_sdp_attr * attribute; *r_crypto = NULL; - for (i = 0; i < count; ++i) { - if (pj_stricmp2 (&remote_sdp->media[i]->desc.media, "crypto") == 0) { - *r_crypto = remote_sdp->media[i]; + attr_count = remote_sdp->attr_count; + + // *r_crypto= pjmedia_sdp_media_find_attr(attribute, &STR_CRYPTO, NULL); + + _debug("****************** Parse for Crypto %i ********************", attr_count); + _debug("****************** Parse for Media %i ********************", attr_count); + + for (i = 0; i < attr_count; ++i) { + + _debug("%.*s", (int)remote_sdp->attr[i]->name.slen, remote_sdp->attr[i]->name.ptr); + if (pj_stricmp2 (&remote_sdp->attr[i]->name, "crypto") == 0) { + _debug("****************** Found a Crypto ********************"); + *r_crypto = remote_sdp->attr[i]; return; } } + + _debug("****************** Did not Found any Crypto ********************"); + } diff --git a/sflphone-common/src/sip/sdp.h b/sflphone-common/src/sip/sdp.h index 9040dbb5f8..68eaa771d8 100644 --- a/sflphone-common/src/sip/sdp.h +++ b/sflphone-common/src/sip/sdp.h @@ -336,7 +336,7 @@ class Sdp { void get_remote_sdp_media_from_offer (const pjmedia_sdp_session* r_sdp, pjmedia_sdp_media** r_media); - void get_remote_sdp_crypto_from_offer (const pjmedia_sdp_session* remote_sdp, pjmedia_sdp_media** r_crypto); + void get_remote_sdp_crypto_from_offer (const pjmedia_sdp_session* remote_sdp, pjmedia_sdp_attr** r_crypto); /* @@ -344,7 +344,7 @@ class Sdp { * * @param media The media to add the srtp attribute to */ - void sdp_add_sdes_attribute(pjmedia_sdp_media* media); + void sdp_add_sdes_attribute(); /* * Adds a zrtp-hash attribute to -- GitLab From 78b33798868353bd4e2fbb2bad507a5b14007024 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Thu, 7 Jan 2010 13:12:35 -0500 Subject: [PATCH 135/188] [#1744] Added AudioSrtpSession class --- .../src/audio/audiortp/AudioRtpSession.h | 2 + .../src/audio/audiortp/AudioSrtpSession.cpp | 76 +++++++++++++++++++ .../src/audio/audiortp/AudioSrtpSession.h | 61 +++++++++++++++ .../src/audio/audiortp/Makefile.am | 6 +- sflphone-common/src/sip/sdp.cpp | 6 +- 5 files changed, 146 insertions(+), 5 deletions(-) create mode 100644 sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp create mode 100644 sflphone-common/src/audio/audiortp/AudioSrtpSession.h diff --git a/sflphone-common/src/audio/audiortp/AudioRtpSession.h b/sflphone-common/src/audio/audiortp/AudioRtpSession.h index e1d8b536cb..2859304734 100644 --- a/sflphone-common/src/audio/audiortp/AudioRtpSession.h +++ b/sflphone-common/src/audio/audiortp/AudioRtpSession.h @@ -187,6 +187,8 @@ namespace sfl { _layerFrameSize = _audiolayer->getFrameSize(); // in ms _layerSampleRate = _audiolayer->getSampleRate(); + // if(this->) + } template <typename D> diff --git a/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp b/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp new file mode 100644 index 0000000000..e8f23bb80e --- /dev/null +++ b/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp @@ -0,0 +1,76 @@ +/* + * Copyright (C) 2009 Savoir-Faire Linux inc. + * Author: Alexandre Savard <alexandre.savard@savoirfairelinux.com> + * Author: Pierre-Luc Bacon <pierre-luc.bacon@savoirfairelinux.com> + * + * 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 3 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., 675 Mass Ave, Cambridge, MA 02139, USA. + */ +#include "AudioSrtpSession.h" +#include "user_cfg.h" + +#include "sip/sipcall.h" + +#include <cstdio> +#include <cstring> +#include <cerrno> + +namespace sfl +{ + +AudioSrtpSession::AudioSrtpSession (ManagerImpl * manager, SIPCall * sipcall) : + ost::SymmetricRTPSession (ost::InetHostAddress (sipcall->getLocalIp().c_str()), sipcall->getLocalAudioPort()), + AudioRtpSession<AudioSrtpSession> (manager, sipcall) +{ + _debug ("AudioSrtpSession initialized"); + initializeMasterKey(); + initializeMasterSalt(); +} + +void AudioSrtpSession::initializeMasterKey(void) +{ + + _masterKey = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f }; + + return; +} + + +void AudioSrtpSession::initializeMasterSalt(void) +{ + _masterSalt = { 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d }; + + return; + +} + +void AudioSrtpSession::initializeCryptoContext(void) +{ + + txCryptoCtx = new ost::CryptoContext(0x12345678, + 0, // roc, + 0L, // keydr, + SrtpEncryptionAESCM, // encryption algo + SrtpAuthenticationSha1Hmac, // authtication algo + _masterKey, // Master Key + 128 / 8, // Master Key length + _masterSalt, // Master Salt + 112 / 8, // Master Salt length + 128 / 8, // encryption keyl + 160 / 8, // authentication key len + 112 / 8, // session salt len + 80 / 8); // authentication tag len +} +} diff --git a/sflphone-common/src/audio/audiortp/AudioSrtpSession.h b/sflphone-common/src/audio/audiortp/AudioSrtpSession.h new file mode 100644 index 0000000000..364faf08f8 --- /dev/null +++ b/sflphone-common/src/audio/audiortp/AudioSrtpSession.h @@ -0,0 +1,61 @@ +/* + * Copyright (C) 2009 Savoir-Faire Linux inc. + * Author: Alexandre Savard <alexandre.savard@savoirfairelinux.com> + * Author: Pierre-Luc Bacon <pierre-luc.bacon@savoirfairelinux.com> + * + * 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 3 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., 675 Mass Ave, Cambridge, MA 02139, USA. + */ +#ifndef __SFL_AUDIO_SRTP_SESSION_H__ +#define __SFL_AUDIO_SRTP_SESSION_H__ + +#include "AudioRtpSession.h" + +#include <ccrtp/CryptoContext.h> + +class ManagerImpl; +class SIPCall; + +namespace sfl { + + class SrtpException: public std::exception + { + virtual const char* what() const throw() + { + return "ZRTP ZID initialization failed."; + } + }; + + class AudioSrtpSession : public ost::SymmetricRTPSession, public AudioRtpSession<AudioSrtpSession> + { + public: + AudioSrtpSession(ManagerImpl * manager, SIPCall * sipcall); + + private: + + void initializeMasterKey(void); + + void initializeMasterSalt(void); + + void initializeCryptoContext(void); + + uint8 _masterKey[16]; + + uint8 _masterSalt[14]; + + ost::CryptoContext* txCryptoCtx; + }; + +} + +#endif // __AUDIO_SRTP_SESSION_H__ diff --git a/sflphone-common/src/audio/audiortp/Makefile.am b/sflphone-common/src/audio/audiortp/Makefile.am index 502a17b900..d2ab3aaec7 100644 --- a/sflphone-common/src/audio/audiortp/Makefile.am +++ b/sflphone-common/src/audio/audiortp/Makefile.am @@ -5,12 +5,14 @@ noinst_LTLIBRARIES = libaudiortp.la libaudiortp_la_SOURCES = \ AudioRtpFactory.cpp \ AudioZrtpSession.cpp \ - ZrtpSessionCallback.cpp + ZrtpSessionCallback.cpp \ + AudioSrtpSession.cpp noinst_HEADERS = \ AudioRtpFactory.h \ AudioRtpSession.h \ AudioSymmetricRtpSession.h \ AudioZrtpSession.h \ - ZrtpSessionCallback.h + ZrtpSessionCallback.h \ + AudioSrtpSession.h diff --git a/sflphone-common/src/sip/sdp.cpp b/sflphone-common/src/sip/sdp.cpp index 22497d6189..545601e96e 100644 --- a/sflphone-common/src/sip/sdp.cpp +++ b/sflphone-common/src/sip/sdp.cpp @@ -677,7 +677,7 @@ void Sdp::get_remote_sdp_crypto_from_offer (const pjmedia_sdp_session* remote_sd int i; int attr_count; - // pjmedia_sdp_attr * attribute; + pjmedia_sdp_attr * attribute; *r_crypto = NULL; attr_count = remote_sdp->attr_count; @@ -685,11 +685,11 @@ void Sdp::get_remote_sdp_crypto_from_offer (const pjmedia_sdp_session* remote_sd // *r_crypto= pjmedia_sdp_media_find_attr(attribute, &STR_CRYPTO, NULL); _debug("****************** Parse for Crypto %i ********************", attr_count); - _debug("****************** Parse for Media %i ********************", attr_count); for (i = 0; i < attr_count; ++i) { - _debug("%.*s", (int)remote_sdp->attr[i]->name.slen, remote_sdp->attr[i]->name.ptr); + _debug("%.*s", (int)remote_sdp->attr[i]->name.slen, remote_sdp->attr[i]->name.ptr); + _debug("%.*s", (int)remote_sdp->attr[i]->value.slen, remote_sdp->attr[i]->value.ptr); if (pj_stricmp2 (&remote_sdp->attr[i]->name, "crypto") == 0) { _debug("****************** Found a Crypto ********************"); *r_crypto = remote_sdp->attr[i]; -- GitLab From 81c11a60aa640668e071aa41a250974d6264aad6 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Thu, 7 Jan 2010 14:56:47 -0500 Subject: [PATCH 136/188] [#1722] Add SDES key exchange option in configuration panels (account, IP2IP) --- .../src/config/accountconfigdialog.c | 19 ++++++++++---- .../src/config/preferencesdialog.c | 26 +++++++++++++------ sflphone-client-gnome/src/sflphone_const.h | 8 +++--- .../src/audio/audiortp/AudioRtpFactory.cpp | 9 +++++++ .../src/audio/audiortp/AudioRtpFactory.h | 2 ++ 5 files changed, 47 insertions(+), 17 deletions(-) diff --git a/sflphone-client-gnome/src/config/accountconfigdialog.c b/sflphone-client-gnome/src/config/accountconfigdialog.c index 764ca6a06a..0c16fea5c3 100644 --- a/sflphone-client-gnome/src/config/accountconfigdialog.c +++ b/sflphone-client-gnome/src/config/accountconfigdialog.c @@ -730,7 +730,7 @@ GtkWidget * create_security_tab(account_t **a) keyExchangeCombo = gtk_combo_box_new_text(); gtk_label_set_mnemonic_widget (GTK_LABEL (label), keyExchangeCombo); gtk_combo_box_append_text(GTK_COMBO_BOX(keyExchangeCombo), "ZRTP"); - //gtk_combo_box_append_text(GTK_COMBO_BOX(keyExchangeCombo), "SDES"); + gtk_combo_box_append_text(GTK_COMBO_BOX(keyExchangeCombo), "SDES"); gtk_combo_box_append_text(GTK_COMBO_BOX(keyExchangeCombo), _("Disabled")); advancedZrtpButton = gtk_button_new_from_stock(GTK_STOCK_PREFERENCES); @@ -738,13 +738,17 @@ GtkWidget * create_security_tab(account_t **a) if (g_strcmp0(curSRTPEnabled, "false") == 0) { - gtk_combo_box_set_active(GTK_COMBO_BOX(keyExchangeCombo), 1); + gtk_combo_box_set_active(GTK_COMBO_BOX(keyExchangeCombo), 2); gtk_widget_set_sensitive(GTK_WIDGET(advancedZrtpButton), FALSE); } else { if (strcmp(curKeyExchange, ZRTP) == 0) { gtk_combo_box_set_active(GTK_COMBO_BOX(keyExchangeCombo),0); - } else { - gtk_combo_box_set_active(GTK_COMBO_BOX(keyExchangeCombo), 1); + } + else if (strcmp(curKeyExchange, SDES) == 0) { + gtk_combo_box_set_active(GTK_COMBO_BOX(keyExchangeCombo),1); + } + else { + gtk_combo_box_set_active(GTK_COMBO_BOX(keyExchangeCombo), 2); gtk_widget_set_sensitive(GTK_WIDGET(advancedZrtpButton), FALSE); } } @@ -1152,7 +1156,12 @@ show_account_window (account_t * a) if (g_strcasecmp(keyExchange, "ZRTP") == 0) { g_hash_table_replace(currentAccount->properties, g_strdup(ACCOUNT_SRTP_ENABLED), g_strdup("true")); g_hash_table_replace(currentAccount->properties, g_strdup(ACCOUNT_KEY_EXCHANGE), g_strdup(ZRTP)); - } else { + } + else if(g_strcasecmp(keyExchange, "SDES") == 0) { + g_hash_table_replace(currentAccount->properties, g_strdup(ACCOUNT_SRTP_ENABLED), g_strdup("true")); + g_hash_table_replace(currentAccount->properties, g_strdup(ACCOUNT_KEY_EXCHANGE), g_strdup(SDES)); + } + else { g_hash_table_replace(currentAccount->properties, g_strdup(ACCOUNT_SRTP_ENABLED), g_strdup("false")); } diff --git a/sflphone-client-gnome/src/config/preferencesdialog.c b/sflphone-client-gnome/src/config/preferencesdialog.c index d83e711183..4b7d9af6f2 100644 --- a/sflphone-client-gnome/src/config/preferencesdialog.c +++ b/sflphone-client-gnome/src/config/preferencesdialog.c @@ -120,10 +120,16 @@ static void key_exchange_changed_cb(GtkWidget *widget, gpointer data) { DEBUG("Key exchange changed"); if (g_strcasecmp(gtk_combo_box_get_active_text(GTK_COMBO_BOX(widget)), (gchar *) "ZRTP") == 0) { - gtk_widget_set_sensitive(GTK_WIDGET(data), TRUE); - g_hash_table_replace(directIpCallsProperties, g_strdup(ACCOUNT_SRTP_ENABLED), g_strdup("true")); - g_hash_table_replace(directIpCallsProperties, g_strdup(ACCOUNT_KEY_EXCHANGE), g_strdup(ZRTP)); - } else { + gtk_widget_set_sensitive(GTK_WIDGET(data), TRUE); + g_hash_table_replace(directIpCallsProperties, g_strdup(ACCOUNT_SRTP_ENABLED), g_strdup("true")); + g_hash_table_replace(directIpCallsProperties, g_strdup(ACCOUNT_KEY_EXCHANGE), g_strdup(ZRTP)); + } + else if (g_strcasecmp(gtk_combo_box_get_active_text(GTK_COMBO_BOX(widget)), (gchar *) "SDES") == 0) { + gtk_widget_set_sensitive(GTK_WIDGET(data), FALSE); + g_hash_table_replace(directIpCallsProperties, g_strdup(ACCOUNT_SRTP_ENABLED), g_strdup("true")); + g_hash_table_replace(directIpCallsProperties, g_strdup(ACCOUNT_KEY_EXCHANGE), g_strdup(SDES)); + } + else { gtk_widget_set_sensitive(GTK_WIDGET(data), FALSE); DEBUG("Setting key exchange %s to %s\n", ACCOUNT_KEY_EXCHANGE, KEY_EXCHANGE_NONE); g_hash_table_replace(directIpCallsProperties, g_strdup(ACCOUNT_SRTP_ENABLED), g_strdup("false")); @@ -326,16 +332,20 @@ GtkWidget* create_direct_ip_calls_tab() keyExchangeCombo = gtk_combo_box_new_text(); gtk_label_set_mnemonic_widget (GTK_LABEL (label), keyExchangeCombo); gtk_combo_box_append_text(GTK_COMBO_BOX(keyExchangeCombo), "ZRTP"); - //gtk_combo_box_append_text(GTK_COMBO_BOX(keyExchangeCombo), "SDES"); + gtk_combo_box_append_text(GTK_COMBO_BOX(keyExchangeCombo), "SDES"); gtk_combo_box_append_text(GTK_COMBO_BOX(keyExchangeCombo), _("Disabled")); advancedZrtpButton = gtk_button_new_from_stock(GTK_STOCK_PREFERENCES); g_signal_connect(G_OBJECT(advancedZrtpButton), "clicked", G_CALLBACK(show_advanced_zrtp_options_cb), directIpCallsProperties); if (g_strcasecmp(curKeyExchange, ZRTP) == 0) { - gtk_combo_box_set_active(GTK_COMBO_BOX(keyExchangeCombo),0); - } else { - gtk_combo_box_set_active(GTK_COMBO_BOX(keyExchangeCombo), 1); + gtk_combo_box_set_active(GTK_COMBO_BOX(keyExchangeCombo),0); + } + else if(g_strcasecmp(curKeyExchange, SDES) == 0) { + gtk_combo_box_set_active(GTK_COMBO_BOX(keyExchangeCombo),1); + } + else { + gtk_combo_box_set_active(GTK_COMBO_BOX(keyExchangeCombo), 2); gtk_widget_set_sensitive(GTK_WIDGET(advancedZrtpButton), FALSE); } diff --git a/sflphone-client-gnome/src/sflphone_const.h b/sflphone-client-gnome/src/sflphone_const.h index d8e7870b9e..52e786ade3 100644 --- a/sflphone-client-gnome/src/sflphone_const.h +++ b/sflphone-client-gnome/src/sflphone_const.h @@ -51,9 +51,9 @@ #define UNUSED __attribute__((__unused__)) #define ACCOUNT_TYPE "Account.type" -#define ACCOUNT_ALIAS "Account.alias" -#define ACCOUNT_ENABLED "Account.enable" -#define ACCOUNT_MAILBOX "Account.mailbox" +#define ACCOUNT_ALIAS "Account.alias" +#define ACCOUNT_ENABLED "Account.enable" +#define ACCOUNT_MAILBOX "Account.mailbox" #define ACCOUNT_RESOLVE_ONCE "Account.resolveOnce" #define ACCOUNT_REGISTRATION_EXPIRE "Account.expire" #define ACCOUNT_SIP_STUN_SERVER "STUN.server" @@ -71,7 +71,7 @@ #define ACCOUNT_DISPLAY_SAS_ONCE "ZRTP.displaySasOnce" #define KEY_EXCHANGE_NONE "0" #define ZRTP "1" -#define SDES_TLS "2" +#define SDES "2" #define TLS_ENABLE "TLS.enable" #define TLS_PORT "TLS.port" diff --git a/sflphone-common/src/audio/audiortp/AudioRtpFactory.cpp b/sflphone-common/src/audio/audiortp/AudioRtpFactory.cpp index 318bf8c727..69eeac0428 100644 --- a/sflphone-common/src/audio/audiortp/AudioRtpFactory.cpp +++ b/sflphone-common/src/audio/audiortp/AudioRtpFactory.cpp @@ -20,6 +20,7 @@ #include "AudioRtpFactory.h" #include "AudioZrtpSession.h" +#include "AudioSrtpSession.h" #include "AudioSymmetricRtpSession.h" #include "manager.h" @@ -106,6 +107,11 @@ void AudioRtpFactory::initAudioRtpSession (SIPCall * ca) case Sdes: + _rtpSession = new AudioSrtpSession (&Manager::instance(), ca); + _rtpSessionType = Sdes; + + break; + default: throw UnsupportedRtpSessionType(); } @@ -125,6 +131,9 @@ void AudioRtpFactory::start (void) switch (_rtpSessionType) { case Sdes: + if (static_cast<AudioSrtpSession *> (_rtpSession)->startRtpThread() != 0) { + throw AudioRtpFactoryException ("Failed to start AudioSRtpSession thread"); + } break; case Symmetric: diff --git a/sflphone-common/src/audio/audiortp/AudioRtpFactory.h b/sflphone-common/src/audio/audiortp/AudioRtpFactory.h index 0eefcbfc82..9d827a5d87 100644 --- a/sflphone-common/src/audio/audiortp/AudioRtpFactory.h +++ b/sflphone-common/src/audio/audiortp/AudioRtpFactory.h @@ -25,11 +25,13 @@ class SIPCall; namespace sfl { class AudioZrtpSession; + class AudioSrtpSession; } namespace sfl { class AudioZrtpSession; + class AudioSrtpSession; // Possible kind of rtp session typedef enum RtpMethod { -- GitLab From 81f3524da48718decd44d2dae619655ea3811eb3 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Thu, 7 Jan 2010 15:02:40 -0500 Subject: [PATCH 137/188] [#1722] Set crypto context in SRTP sessions --- sflphone-common/src/audio/audiortp/AudioRtpSession.h | 2 -- sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp | 5 +++++ 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/sflphone-common/src/audio/audiortp/AudioRtpSession.h b/sflphone-common/src/audio/audiortp/AudioRtpSession.h index 2859304734..e1d8b536cb 100644 --- a/sflphone-common/src/audio/audiortp/AudioRtpSession.h +++ b/sflphone-common/src/audio/audiortp/AudioRtpSession.h @@ -187,8 +187,6 @@ namespace sfl { _layerFrameSize = _audiolayer->getFrameSize(); // in ms _layerSampleRate = _audiolayer->getSampleRate(); - // if(this->) - } template <typename D> diff --git a/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp b/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp index e8f23bb80e..ac46ec940c 100644 --- a/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp +++ b/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp @@ -35,6 +35,11 @@ AudioSrtpSession::AudioSrtpSession (ManagerImpl * manager, SIPCall * sipcall) : _debug ("AudioSrtpSession initialized"); initializeMasterKey(); initializeMasterSalt(); + initializeCryptoContext(); + txCryptoCtx->deriveSrtpKeys(0); + + setInQueueCryptoContext(txCryptoCtx); + setOutQueueCryptoContext(txCryptoCtx); } void AudioSrtpSession::initializeMasterKey(void) -- GitLab From e2fc783e4323d5446a06329cb78d7fd8156ae6fe Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Thu, 7 Jan 2010 15:34:45 -0500 Subject: [PATCH 138/188] [#1722] Use differnt crypto context for input and output in SRTP session --- .../src/audio/audiortp/AudioSrtpSession.cpp | 45 ++++++++++++++----- .../src/audio/audiortp/AudioSrtpSession.h | 8 +++- 2 files changed, 41 insertions(+), 12 deletions(-) diff --git a/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp b/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp index ac46ec940c..28fe6764ff 100644 --- a/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp +++ b/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp @@ -25,6 +25,12 @@ #include <cstring> #include <cerrno> +static uint8 mk[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f }; + +static uint8 ms[] = { 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d }; + namespace sfl { @@ -35,18 +41,19 @@ AudioSrtpSession::AudioSrtpSession (ManagerImpl * manager, SIPCall * sipcall) : _debug ("AudioSrtpSession initialized"); initializeMasterKey(); initializeMasterSalt(); - initializeCryptoContext(); - txCryptoCtx->deriveSrtpKeys(0); + initializeInputCryptoContext(); + initializeOutputCryptoContext(); + outputCryptoCtx->deriveSrtpKeys(0); - setInQueueCryptoContext(txCryptoCtx); - setOutQueueCryptoContext(txCryptoCtx); + setInQueueCryptoContext(inputCryptoCtx); + setOutQueueCryptoContext(outputCryptoCtx); } void AudioSrtpSession::initializeMasterKey(void) { - _masterKey = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, - 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f }; + for(int i = 0; i < 16; i++) + _masterKey[i] = mk[i]; return; } @@ -54,17 +61,35 @@ void AudioSrtpSession::initializeMasterKey(void) void AudioSrtpSession::initializeMasterSalt(void) { - _masterSalt = { 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, - 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d }; + for(int i = 0; i < 16; i++) + _masterSalt[i] = ms[i]; return; } -void AudioSrtpSession::initializeCryptoContext(void) +void AudioSrtpSession::initializeInputCryptoContext(void) +{ + + inputCryptoCtx = new ost::CryptoContext(0x12345678, + 0, // roc, + 0L, // keydr, + SrtpEncryptionAESCM, // encryption algo + SrtpAuthenticationSha1Hmac, // authtication algo + _masterKey, // Master Key + 128 / 8, // Master Key length + _masterSalt, // Master Salt + 112 / 8, // Master Salt length + 128 / 8, // encryption keyl + 160 / 8, // authentication key len + 112 / 8, // session salt len + 80 / 8); // authentication tag len +} + +void AudioSrtpSession::initializeOutputCryptoContext(void) { - txCryptoCtx = new ost::CryptoContext(0x12345678, + outputCryptoCtx = new ost::CryptoContext(0x12345678, 0, // roc, 0L, // keydr, SrtpEncryptionAESCM, // encryption algo diff --git a/sflphone-common/src/audio/audiortp/AudioSrtpSession.h b/sflphone-common/src/audio/audiortp/AudioSrtpSession.h index 364faf08f8..c37a898a1f 100644 --- a/sflphone-common/src/audio/audiortp/AudioSrtpSession.h +++ b/sflphone-common/src/audio/audiortp/AudioSrtpSession.h @@ -47,13 +47,17 @@ namespace sfl { void initializeMasterSalt(void); - void initializeCryptoContext(void); + void initializeInputCryptoContext(void); + + void initializeOutputCryptoContext(void); uint8 _masterKey[16]; uint8 _masterSalt[14]; - ost::CryptoContext* txCryptoCtx; + ost::CryptoContext* inputCryptoCtx; + + ost::CryptoContext* outputCryptoCtx; }; } -- GitLab From d252ab34a4ff2d89562c51a95d5c4706fd605377 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Thu, 7 Jan 2010 16:17:59 -0500 Subject: [PATCH 139/188] [#1722] Use getLocalSSRCNetwork() to identify crypto context for in out RTP --- .../src/audio/audiortp/AudioSrtpSession.cpp | 53 ++++++++++--------- 1 file changed, 27 insertions(+), 26 deletions(-) diff --git a/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp b/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp index 28fe6764ff..d86251ca1d 100644 --- a/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp +++ b/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp @@ -43,6 +43,7 @@ AudioSrtpSession::AudioSrtpSession (ManagerImpl * manager, SIPCall * sipcall) : initializeMasterSalt(); initializeInputCryptoContext(); initializeOutputCryptoContext(); + outputCryptoCtx->deriveSrtpKeys(0); setInQueueCryptoContext(inputCryptoCtx); @@ -71,36 +72,36 @@ void AudioSrtpSession::initializeMasterSalt(void) void AudioSrtpSession::initializeInputCryptoContext(void) { - inputCryptoCtx = new ost::CryptoContext(0x12345678, - 0, // roc, - 0L, // keydr, - SrtpEncryptionAESCM, // encryption algo - SrtpAuthenticationSha1Hmac, // authtication algo - _masterKey, // Master Key - 128 / 8, // Master Key length - _masterSalt, // Master Salt - 112 / 8, // Master Salt length - 128 / 8, // encryption keyl - 160 / 8, // authentication key len - 112 / 8, // session salt len - 80 / 8); // authentication tag len + inputCryptoCtx = new ost::CryptoContext(getLocalSSRCNetwork(), + 0, // roc, + 0L, // keydr, + SrtpEncryptionAESCM, // encryption algo + SrtpAuthenticationSha1Hmac, // authtication algo + _masterKey, // Master Key + 128 / 8, // Master Key length + _masterSalt, // Master Salt + 112 / 8, // Master Salt length + 128 / 8, // encryption keyl + 160 / 8, // authentication key len + 112 / 8, // session salt len + 80 / 8); // authentication tag len } void AudioSrtpSession::initializeOutputCryptoContext(void) { - outputCryptoCtx = new ost::CryptoContext(0x12345678, - 0, // roc, - 0L, // keydr, - SrtpEncryptionAESCM, // encryption algo - SrtpAuthenticationSha1Hmac, // authtication algo - _masterKey, // Master Key - 128 / 8, // Master Key length - _masterSalt, // Master Salt - 112 / 8, // Master Salt length - 128 / 8, // encryption keyl - 160 / 8, // authentication key len - 112 / 8, // session salt len - 80 / 8); // authentication tag len + outputCryptoCtx = new ost::CryptoContext(getLocalSSRCNetwork(), + 0, // roc, + 0L, // keydr, + SrtpEncryptionAESCM, // encryption algo + SrtpAuthenticationSha1Hmac, // authtication algo + _masterKey, // Master Key + 128 / 8, // Master Key length + _masterSalt, // Master Salt + 112 / 8, // Master Salt length + 128 / 8, // encryption keyl + 160 / 8, // authentication key len + 112 / 8, // session salt len + 80 / 8); // authentication tag len } } -- GitLab From fb4704328f253537c3e67ffa869bb6bfded83a2a Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Thu, 7 Jan 2010 17:14:49 -0500 Subject: [PATCH 140/188] [#1722] Use getLocalSSRC instead in IncommingDataQueue and OutgoingDataQueue --- .../src/audio/audiortp/AudioSrtpSession.cpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp b/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp index d86251ca1d..e233870821 100644 --- a/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp +++ b/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp @@ -38,7 +38,7 @@ AudioSrtpSession::AudioSrtpSession (ManagerImpl * manager, SIPCall * sipcall) : ost::SymmetricRTPSession (ost::InetHostAddress (sipcall->getLocalIp().c_str()), sipcall->getLocalAudioPort()), AudioRtpSession<AudioSrtpSession> (manager, sipcall) { - _debug ("AudioSrtpSession initialized"); + _debug ("***************** AudioSrtpSession initialized *********************"); initializeMasterKey(); initializeMasterSalt(); initializeInputCryptoContext(); @@ -72,7 +72,7 @@ void AudioSrtpSession::initializeMasterSalt(void) void AudioSrtpSession::initializeInputCryptoContext(void) { - inputCryptoCtx = new ost::CryptoContext(getLocalSSRCNetwork(), + inputCryptoCtx = new ost::CryptoContext(IncomingDataQueue::getLocalSSRC(), 0, // roc, 0L, // keydr, SrtpEncryptionAESCM, // encryption algo @@ -85,12 +85,14 @@ void AudioSrtpSession::initializeInputCryptoContext(void) 160 / 8, // authentication key len 112 / 8, // session salt len 80 / 8); // authentication tag len + + _debug("********************* Crypto Context IN with SSRC %i ******************", IncomingDataQueue::getLocalSSRC()); } void AudioSrtpSession::initializeOutputCryptoContext(void) { - outputCryptoCtx = new ost::CryptoContext(getLocalSSRCNetwork(), + outputCryptoCtx = new ost::CryptoContext(OutgoingDataQueue::getLocalSSRC(), 0, // roc, 0L, // keydr, SrtpEncryptionAESCM, // encryption algo @@ -103,5 +105,7 @@ void AudioSrtpSession::initializeOutputCryptoContext(void) 160 / 8, // authentication key len 112 / 8, // session salt len 80 / 8); // authentication tag len + + _debug("********************* Crypto Context OUT with SSRC %i ******************", OutgoingDataQueue::getLocalSSRC()); } } -- GitLab From 9091c20f9fee11023bd794bc0b1628909caef5d2 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Fri, 8 Jan 2010 11:15:42 -0500 Subject: [PATCH 141/188] [#1722] Crypto context for incoming data must be init with SSRC 0x0 --- .../src/audio/audiortp/AudioSrtpSession.cpp | 34 +++++++++++-------- 1 file changed, 19 insertions(+), 15 deletions(-) diff --git a/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp b/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp index e233870821..d3d1d83cdb 100644 --- a/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp +++ b/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp @@ -72,26 +72,30 @@ void AudioSrtpSession::initializeMasterSalt(void) void AudioSrtpSession::initializeInputCryptoContext(void) { - inputCryptoCtx = new ost::CryptoContext(IncomingDataQueue::getLocalSSRC(), - 0, // roc, - 0L, // keydr, - SrtpEncryptionAESCM, // encryption algo - SrtpAuthenticationSha1Hmac, // authtication algo - _masterKey, // Master Key - 128 / 8, // Master Key length - _masterSalt, // Master Salt - 112 / 8, // Master Salt length - 128 / 8, // encryption keyl - 160 / 8, // authentication key len - 112 / 8, // session salt len - 80 / 8); // authentication tag len - - _debug("********************* Crypto Context IN with SSRC %i ******************", IncomingDataQueue::getLocalSSRC()); + // this one does not works + // inputCryptoCtx = new ost::CryptoContext(IncomingDataQueue::getLocalSSRCNetwork(), + inputCryptoCtx = new ost::CryptoContext(0x0, + 0, // roc, + 0L, // keydr, + SrtpEncryptionAESCM, // encryption algo + SrtpAuthenticationSha1Hmac, // authtication algo + _masterKey, // Master Key + 128 / 8, // Master Key length + _masterSalt, // Master Salt + 112 / 8, // Master Salt length + 128 / 8, // encryption keyl + 160 / 8, // authentication key len + 112 / 8, // session salt len + 80 / 8); // authentication tag len + + _debug("********************* Crypto Context IN with SSRC %i ******************", IncomingDataQueue::getLocalSSRCNetwork()); } void AudioSrtpSession::initializeOutputCryptoContext(void) { + // this one works + // outputCryptoCtx = new ost::CryptoContext(OutgoingDataQueue::getLocalSSRC(), outputCryptoCtx = new ost::CryptoContext(OutgoingDataQueue::getLocalSSRC(), 0, // roc, 0L, // keydr, -- GitLab From 97e0eadad2d76a4ce09397a25cd274f69150b07b Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Mon, 11 Jan 2010 09:47:25 -0500 Subject: [PATCH 142/188] [#1722] added base64 encode/decode methods for Srtp master key --- .../src/audio/audiortp/AudioRtpFactory.cpp | 2 + .../src/audio/audiortp/AudioSrtpSession.cpp | 61 ++++++++++++++++++- .../src/audio/audiortp/AudioSrtpSession.h | 13 +++- sflphone-common/src/sip/sdp.cpp | 3 + sflphone-common/src/sip/sdp.h | 9 ++- 5 files changed, 83 insertions(+), 5 deletions(-) diff --git a/sflphone-common/src/audio/audiortp/AudioRtpFactory.cpp b/sflphone-common/src/audio/audiortp/AudioRtpFactory.cpp index 69eeac0428..17e9242152 100644 --- a/sflphone-common/src/audio/audiortp/AudioRtpFactory.cpp +++ b/sflphone-common/src/audio/audiortp/AudioRtpFactory.cpp @@ -110,6 +110,8 @@ void AudioRtpFactory::initAudioRtpSession (SIPCall * ca) _rtpSession = new AudioSrtpSession (&Manager::instance(), ca); _rtpSessionType = Sdes; + // ca->getLocalSDP()->set_srtp_master_key (static_cast<AudioSrtpSession *> (_rtpSession)->getMasterKey()); + break; default: diff --git a/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp b/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp index d3d1d83cdb..67a07d1311 100644 --- a/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp +++ b/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp @@ -21,6 +21,10 @@ #include "sip/sipcall.h" +#include <openssl/bio.h> +#include <openssl/evp.h> + + #include <cstdio> #include <cstring> #include <cerrno> @@ -31,6 +35,13 @@ static uint8 mk[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, static uint8 ms[] = { 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d }; + +// static std::string crypto_suite = "AES_CM_128_HMAC_SHA1_32"; +// static std::string application = "srtp"; +// static std::string srtp_key = "inline:16/14/NzB4d1BINUAvLEw6UzF3WSJ+PSdFcGdUJShpX1Zj/2^20/1:32"; + + + namespace sfl { @@ -50,6 +61,14 @@ AudioSrtpSession::AudioSrtpSession (ManagerImpl * manager, SIPCall * sipcall) : setOutQueueCryptoContext(outputCryptoCtx); } + /* +std::string AudioSrtpSession::getCryptoInfo() { + + + return ; +} + */ + void AudioSrtpSession::initializeMasterKey(void) { @@ -88,7 +107,7 @@ void AudioSrtpSession::initializeInputCryptoContext(void) 112 / 8, // session salt len 80 / 8); // authentication tag len - _debug("********************* Crypto Context IN with SSRC %i ******************", IncomingDataQueue::getLocalSSRCNetwork()); + } void AudioSrtpSession::initializeOutputCryptoContext(void) @@ -110,6 +129,44 @@ void AudioSrtpSession::initializeOutputCryptoContext(void) 112 / 8, // session salt len 80 / 8); // authentication tag len - _debug("********************* Crypto Context OUT with SSRC %i ******************", OutgoingDataQueue::getLocalSSRC()); + +} + + +char* AudioSrtpSession::encodeBase64(unsigned char *input, int length) +{ + BIO *b64, *bmem; + + char *buffer = (char *)malloc(length); + memset(buffer, 0, length); + + b64 = BIO_new(BIO_f_base64()); + bmem = BIO_new_mem_buf(input, length); + bmem = BIO_push(bmem, b64); + + BIO_read(bmem, buffer, length); + + BIO_free_all(bmem); + + return buffer; +} + +char* AudioSrtpSession::decodeBase64(unsigned char *input, int length) +{ + BIO *b64, *bmem; + + char *buffer = (char *)malloc(length); + memset(buffer, 0, length); + + b64 = BIO_new(BIO_f_base64()); + bmem = BIO_new_mem_buf(input, length); + bmem = BIO_push(b64, bmem); + + BIO_read(bmem, buffer, length); + + BIO_free_all(bmem); + + return buffer; } + } diff --git a/sflphone-common/src/audio/audiortp/AudioSrtpSession.h b/sflphone-common/src/audio/audiortp/AudioSrtpSession.h index c37a898a1f..89bc2450ed 100644 --- a/sflphone-common/src/audio/audiortp/AudioSrtpSession.h +++ b/sflphone-common/src/audio/audiortp/AudioSrtpSession.h @@ -39,8 +39,13 @@ namespace sfl { class AudioSrtpSession : public ost::SymmetricRTPSession, public AudioRtpSession<AudioSrtpSession> { public: - AudioSrtpSession(ManagerImpl * manager, SIPCall * sipcall); - + + AudioSrtpSession(ManagerImpl * manager, SIPCall * sipcall); + + // std::string getCryptoInfo(void); + + uint8* getMasterKey(void){ return _masterKey; } + private: void initializeMasterKey(void); @@ -51,6 +56,10 @@ namespace sfl { void initializeOutputCryptoContext(void); + char* encodeBase64(unsigned char *input, int length); + + char* decodeBase64(unsigned char *input, int length); + uint8 _masterKey[16]; uint8 _masterSalt[14]; diff --git a/sflphone-common/src/sip/sdp.cpp b/sflphone-common/src/sip/sdp.cpp index 545601e96e..524d6f9fc1 100644 --- a/sflphone-common/src/sip/sdp.cpp +++ b/sflphone-common/src/sip/sdp.cpp @@ -158,7 +158,10 @@ int Sdp::create_local_offer () //sdp_addAttributes( _pool ); sdp_add_media_description(); + // if(!_srtp_master_key.empty()) { + sdp_add_sdes_attribute(); + // } //toString (); diff --git a/sflphone-common/src/sip/sdp.h b/sflphone-common/src/sip/sdp.h index 68eaa771d8..9f5fc9ea44 100644 --- a/sflphone-common/src/sip/sdp.h +++ b/sflphone-common/src/sip/sdp.h @@ -101,6 +101,11 @@ class Sdp { * @param hash The hello hash of a rtp session. (Only audio at the moment) */ inline void set_zrtp_hash(const std::string& hash) { _zrtp_hello_hash = hash; _debug("Zrtp hash set with %s\n", hash.c_str()); } + + /* Set the srtp _master_key + * @param mk The Master Key of a srtp session. + */ + inline void set_srtp_master_key(const std::string& mk) { _srtp_master_key = mk; } /* * On building an invite outside a dialog, build the local offer and create the @@ -246,7 +251,9 @@ class Sdp { /** Remote's audio port */ unsigned int _remote_audio_port; - std::string _zrtp_hello_hash; + std::string _zrtp_hello_hash; + + std::string _srtp_master_key; Sdp(const Sdp&); //No Copy Constructor Sdp& operator=(const Sdp&); //No Assignment Operator -- GitLab From 9f4c4b181fdf7ab9fccf3c38e821170101c14f4d Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Mon, 11 Jan 2010 09:50:43 -0500 Subject: [PATCH 143/188] [#1722] Forgot Sdes case for Stop rtp session method --- sflphone-common/src/audio/audiortp/AudioRtpFactory.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/sflphone-common/src/audio/audiortp/AudioRtpFactory.cpp b/sflphone-common/src/audio/audiortp/AudioRtpFactory.cpp index 17e9242152..a081f88dce 100644 --- a/sflphone-common/src/audio/audiortp/AudioRtpFactory.cpp +++ b/sflphone-common/src/audio/audiortp/AudioRtpFactory.cpp @@ -171,6 +171,8 @@ void AudioRtpFactory::stop (void) switch (_rtpSessionType) { case Sdes: + delete static_cast<AudioSrtpSession *> (_rtpSession); + break; case Symmetric: delete static_cast<AudioSymmetricRtpSession *> (_rtpSession); -- GitLab From 096978e60217e19b219b8c7359e7da0e43e0f7a5 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Mon, 11 Jan 2010 11:19:49 -0500 Subject: [PATCH 144/188] [#1722] Generate crypto info in AudioSrtpSession and pass it to sdp --- .../src/audio/audiortp/AudioRtpFactory.cpp | 3 +-- .../src/audio/audiortp/AudioSrtpSession.cpp | 27 ++++++++++++------- .../src/audio/audiortp/AudioSrtpSession.h | 4 +-- sflphone-common/src/sip/sdp.cpp | 16 ++++++----- sflphone-common/src/sip/sdp.h | 8 +++--- sflphone-common/src/sip/sipvoiplink.cpp | 12 +++++---- 6 files changed, 40 insertions(+), 30 deletions(-) diff --git a/sflphone-common/src/audio/audiortp/AudioRtpFactory.cpp b/sflphone-common/src/audio/audiortp/AudioRtpFactory.cpp index a081f88dce..e5fdf99b8c 100644 --- a/sflphone-common/src/audio/audiortp/AudioRtpFactory.cpp +++ b/sflphone-common/src/audio/audiortp/AudioRtpFactory.cpp @@ -110,8 +110,7 @@ void AudioRtpFactory::initAudioRtpSession (SIPCall * ca) _rtpSession = new AudioSrtpSession (&Manager::instance(), ca); _rtpSessionType = Sdes; - // ca->getLocalSDP()->set_srtp_master_key (static_cast<AudioSrtpSession *> (_rtpSession)->getMasterKey()); - + ca->getLocalSDP()->set_srtp_crypto(static_cast<AudioSrtpSession *> (_rtpSession)->getCryptoSdpInfo()); break; default: diff --git a/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp b/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp index 67a07d1311..d6fd2b273c 100644 --- a/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp +++ b/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp @@ -36,12 +36,6 @@ static uint8 ms[] = { 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d }; -// static std::string crypto_suite = "AES_CM_128_HMAC_SHA1_32"; -// static std::string application = "srtp"; -// static std::string srtp_key = "inline:16/14/NzB4d1BINUAvLEw6UzF3WSJ+PSdFcGdUJShpX1Zj/2^20/1:32"; - - - namespace sfl { @@ -61,13 +55,26 @@ AudioSrtpSession::AudioSrtpSession (ManagerImpl * manager, SIPCall * sipcall) : setOutQueueCryptoContext(outputCryptoCtx); } - /* -std::string AudioSrtpSession::getCryptoInfo() { + +std::string AudioSrtpSession::getCryptoSdpInfo() { + std::string tag = "1"; + std::string crypto_suite = "AES_CM_128_HMAC_SHA1_32"; + std::string application = "srtp"; + std::string srtp_key = "inline:16/14/NzB4d1BINUAvLEw6UzF3WSJ+PSdFcGdUJShpX1Zj/2^20/1:32"; - return ; + std::string crypto = tag; + + crypto.append(" "); + crypto.append(crypto_suite); + crypto.append(" "); + crypto.append(application); + crypto.append(" "); + crypto.append(srtp_key); + + return crypto; } - */ + void AudioSrtpSession::initializeMasterKey(void) { diff --git a/sflphone-common/src/audio/audiortp/AudioSrtpSession.h b/sflphone-common/src/audio/audiortp/AudioSrtpSession.h index 89bc2450ed..34adb9d505 100644 --- a/sflphone-common/src/audio/audiortp/AudioSrtpSession.h +++ b/sflphone-common/src/audio/audiortp/AudioSrtpSession.h @@ -42,9 +42,7 @@ namespace sfl { AudioSrtpSession(ManagerImpl * manager, SIPCall * sipcall); - // std::string getCryptoInfo(void); - - uint8* getMasterKey(void){ return _masterKey; } + std::string getCryptoSdpInfo(void); private: diff --git a/sflphone-common/src/sip/sdp.cpp b/sflphone-common/src/sip/sdp.cpp index 524d6f9fc1..e069369c61 100644 --- a/sflphone-common/src/sip/sdp.cpp +++ b/sflphone-common/src/sip/sdp.cpp @@ -158,10 +158,9 @@ int Sdp::create_local_offer () //sdp_addAttributes( _pool ); sdp_add_media_description(); - // if(!_srtp_master_key.empty()) { - - sdp_add_sdes_attribute(); - // } + if(!_srtp_crypto.empty()) { + sdp_add_sdes_attribute(_srtp_crypto); + } //toString (); @@ -368,7 +367,7 @@ void Sdp::sdp_add_media_description() } -void Sdp::sdp_add_sdes_attribute () +void Sdp::sdp_add_sdes_attribute (std::string crypto) { char tempbuf[256]; @@ -382,12 +381,17 @@ void Sdp::sdp_add_sdes_attribute () attribute->name = pj_strdup3(_pool, "crypto"); + /* int len = pj_ansi_snprintf(tempbuf, sizeof(tempbuf), "%.*s %.*s %.*s", (int)tag.size(), tag.c_str(), (int)crypto_suite.size(), crypto_suite.c_str(), (int)key.size(), key.c_str()); - + */ + + int len = pj_ansi_snprintf(tempbuf, sizeof(tempbuf), + "%.*s",(int)crypto.size(), crypto.c_str()); + attribute->value.slen = len; attribute->value.ptr = (char*) pj_pool_alloc (_pool, attribute->value.slen+1); pj_memcpy (attribute->value.ptr, tempbuf, attribute->value.slen+1); diff --git a/sflphone-common/src/sip/sdp.h b/sflphone-common/src/sip/sdp.h index 9f5fc9ea44..72ef3f434c 100644 --- a/sflphone-common/src/sip/sdp.h +++ b/sflphone-common/src/sip/sdp.h @@ -105,7 +105,7 @@ class Sdp { /* Set the srtp _master_key * @param mk The Master Key of a srtp session. */ - inline void set_srtp_master_key(const std::string& mk) { _srtp_master_key = mk; } + inline void set_srtp_crypto(const std::string& mk) { _srtp_crypto = mk; } /* * On building an invite outside a dialog, build the local offer and create the @@ -253,7 +253,8 @@ class Sdp { std::string _zrtp_hello_hash; - std::string _srtp_master_key; + /** "a=crypto" sdes attribute obtained from AudioSrtpSession */ + std::string _srtp_crypto; Sdp(const Sdp&); //No Copy Constructor Sdp& operator=(const Sdp&); //No Assignment Operator @@ -344,14 +345,13 @@ class Sdp { void get_remote_sdp_media_from_offer (const pjmedia_sdp_session* r_sdp, pjmedia_sdp_media** r_media); void get_remote_sdp_crypto_from_offer (const pjmedia_sdp_session* remote_sdp, pjmedia_sdp_attr** r_crypto); - /* * Adds a sdes attribute to the given media section. * * @param media The media to add the srtp attribute to */ - void sdp_add_sdes_attribute(); + void sdp_add_sdes_attribute(std::string crypto); /* * Adds a zrtp-hash attribute to diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp index bed479fc16..4c04313827 100644 --- a/sflphone-common/src/sip/sipvoiplink.cpp +++ b/sflphone-common/src/sip/sipvoiplink.cpp @@ -1559,20 +1559,22 @@ bool SIPVoIPLink::new_ip_to_ip_call (const CallID& id, const std::string& to) setCallAudioLocal (call, localAddress); _debug ("toUri received in new_ip_to_ip call %s", to.c_str()); - std::string toUri = account->getToUri (to); call->setPeerNumber (toUri); _debug ("toUri in new_ip_to_ip call %s", toUri.c_str()); - // Building the local SDP offer - call->getLocalSDP()->set_ip_address (addrSdp); - call->getLocalSDP()->create_initial_offer(); - try { + // Audio Rtp Session must be initialized before creating initial offer in SDP session + // since SDES require crypto attribute. + try { call->getAudioRtp()->initAudioRtpSession (call); } catch (...) { _debug ("! SIP Failure: Unable to create RTP Session in SIPVoIPLink::new_ip_to_ip_call (%s:%d)", __FILE__, __LINE__); } + // Building the local SDP offer + call->getLocalSDP()->set_ip_address (addrSdp); + call->getLocalSDP()->create_initial_offer(); + // If no account already set, use the default one created at pjsip initialization if (account->getAccountTransport() == NULL) { _debug ("No transport for this account, using the default one"); -- GitLab From acdb04e51613b2eb21c7b3a56b321bd5431ae986 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Mon, 11 Jan 2010 14:23:39 -0500 Subject: [PATCH 145/188] [#1722] Fix base64 decoding --- .../src/audio/audiortp/AudioSrtpSession.cpp | 63 +++++++++++++++---- .../src/audio/audiortp/AudioSrtpSession.h | 6 ++ 2 files changed, 57 insertions(+), 12 deletions(-) diff --git a/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp b/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp index d6fd2b273c..1b2a0b61f6 100644 --- a/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp +++ b/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp @@ -21,8 +21,11 @@ #include "sip/sipcall.h" -#include <openssl/bio.h> +#include <openssl/sha.h> +#include <openssl/hmac.h> #include <openssl/evp.h> +#include <openssl/bio.h> +#include <openssl/buffer.h> #include <cstdio> @@ -30,10 +33,10 @@ #include <cerrno> static uint8 mk[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, - 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f }; + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f }; static uint8 ms[] = { 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, - 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d }; + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d }; namespace sfl @@ -78,6 +81,7 @@ std::string AudioSrtpSession::getCryptoSdpInfo() { void AudioSrtpSession::initializeMasterKey(void) { + _masterKeyLength = 16; for(int i = 0; i < 16; i++) _masterKey[i] = mk[i]; @@ -88,13 +92,33 @@ void AudioSrtpSession::initializeMasterKey(void) void AudioSrtpSession::initializeMasterSalt(void) { - for(int i = 0; i < 16; i++) + _masterSaltLength = 14; + + for(int i = 0; i < 14; i++) _masterSalt[i] = ms[i]; return; } + +std::string AudioSrtpSession::getBase64ConcatenatedKeys() +{ + + uint8 concatenated[30]; + memcpy((void*)concatenated, (void*)_masterKey, 16); + memcpy((void*)(concatenated+16), (void*)_masterSalt, 14); + + char *output = encodeBase64((unsigned char*)concatenated, 30); + + std::string keys(output); + + free(output); + + return keys; +} + + void AudioSrtpSession::initializeInputCryptoContext(void) { @@ -143,19 +167,30 @@ void AudioSrtpSession::initializeOutputCryptoContext(void) char* AudioSrtpSession::encodeBase64(unsigned char *input, int length) { BIO *b64, *bmem; + BUF_MEM *bptr ; - char *buffer = (char *)malloc(length); - memset(buffer, 0, length); + char *buffer = (char *)malloc(2*length); + memset(buffer, 0, 2*length); + // init decoder and buffer b64 = BIO_new(BIO_f_base64()); - bmem = BIO_new_mem_buf(input, length); - bmem = BIO_push(bmem, b64); + bmem = BIO_new(BIO_s_mem()); - BIO_read(bmem, buffer, length); + // create decoder chain + b64 = BIO_push(b64, bmem); + + BIO_write(b64, input, length); + BIO_flush(b64); + + // get pointer to data + BIO_get_mem_ptr(b64, &bptr); + + // copy result in output buffer + strncpy(buffer, (char*)(bptr->data), bptr->length); BIO_free_all(bmem); - return buffer; + return buffer; } char* AudioSrtpSession::decodeBase64(unsigned char *input, int length) @@ -164,16 +199,20 @@ char* AudioSrtpSession::decodeBase64(unsigned char *input, int length) char *buffer = (char *)malloc(length); memset(buffer, 0, length); - + + // init decoder and read-only BIO buffer b64 = BIO_new(BIO_f_base64()); bmem = BIO_new_mem_buf(input, length); - bmem = BIO_push(b64, bmem); + + // create encoder chain + bmem = BIO_push(bmem, b64); BIO_read(bmem, buffer, length); BIO_free_all(bmem); return buffer; + } } diff --git a/sflphone-common/src/audio/audiortp/AudioSrtpSession.h b/sflphone-common/src/audio/audiortp/AudioSrtpSession.h index 34adb9d505..cf932f257d 100644 --- a/sflphone-common/src/audio/audiortp/AudioSrtpSession.h +++ b/sflphone-common/src/audio/audiortp/AudioSrtpSession.h @@ -54,14 +54,20 @@ namespace sfl { void initializeOutputCryptoContext(void); + std::string getBase64ConcatenatedKeys(); + char* encodeBase64(unsigned char *input, int length); char* decodeBase64(unsigned char *input, int length); uint8 _masterKey[16]; + int _masterKeyLength; + uint8 _masterSalt[14]; + int _masterSaltLength; + ost::CryptoContext* inputCryptoCtx; ost::CryptoContext* outputCryptoCtx; -- GitLab From a012e378f8a06176d7b37e36701ef08ed5f44111 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Mon, 11 Jan 2010 14:53:11 -0500 Subject: [PATCH 146/188] [#1722] Encode concatenated srtp keys --- .../src/audio/audiortp/AudioSrtpSession.cpp | 29 ++++++++++++------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp b/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp index 1b2a0b61f6..5471e4dd67 100644 --- a/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp +++ b/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp @@ -61,19 +61,26 @@ AudioSrtpSession::AudioSrtpSession (ManagerImpl * manager, SIPCall * sipcall) : std::string AudioSrtpSession::getCryptoSdpInfo() { + _debug("Get Cryptographic info from this rtp session"); + std::string tag = "1"; std::string crypto_suite = "AES_CM_128_HMAC_SHA1_32"; std::string application = "srtp"; - std::string srtp_key = "inline:16/14/NzB4d1BINUAvLEw6UzF3WSJ+PSdFcGdUJShpX1Zj/2^20/1:32"; + // std::string srtp_keys = "inline:16/14/NzB4d1BINUAvLEw6UzF3WSJ+PSdFcGdUJShpX1Zj/2^20/1:32"; + + // format srtp keys as the following + // inline:16/14/NzB4d1BINUAvLEw6UzF3WSJ+PSdFcGdUJShpX1Zj/2^20/1:32 + std::string srtp_keys = "inline:"; + srtp_keys.append("16/14/"); + srtp_keys += getBase64ConcatenatedKeys(); + srtp_keys.append("/2^20/1:32"); - std::string crypto = tag; + std::string crypto = tag.append(" "); + crypto += crypto_suite.append(" "); + crypto += application.append(" "); + crypto += srtp_keys; - crypto.append(" "); - crypto.append(crypto_suite); - crypto.append(" "); - crypto.append(application); - crypto.append(" "); - crypto.append(srtp_key); + _debug("%s", crypto.c_str()); return crypto; } @@ -105,10 +112,12 @@ void AudioSrtpSession::initializeMasterSalt(void) std::string AudioSrtpSession::getBase64ConcatenatedKeys() { + // concatenate master and salt uint8 concatenated[30]; memcpy((void*)concatenated, (void*)_masterKey, 16); memcpy((void*)(concatenated+16), (void*)_masterSalt, 14); + // encode concatenated keys in base64 char *output = encodeBase64((unsigned char*)concatenated, 30); std::string keys(output); @@ -185,8 +194,8 @@ char* AudioSrtpSession::encodeBase64(unsigned char *input, int length) // get pointer to data BIO_get_mem_ptr(b64, &bptr); - // copy result in output buffer - strncpy(buffer, (char*)(bptr->data), bptr->length); + // copy result in output buffer (-1 since we do not want the EOF character) + strncpy(buffer, (char*)(bptr->data), bptr->length-1); BIO_free_all(bmem); -- GitLab From 4f6803bb70bec7c6aece25312f3ce8ce1a496d64 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Mon, 11 Jan 2010 15:22:51 -0500 Subject: [PATCH 147/188] [#1722] Get remote crypto attribute in call_on_media_update --- sflphone-common/src/sip/sdp.cpp | 5 +---- sflphone-common/src/sip/sdp.h | 3 ++- sflphone-common/src/sip/sipvoiplink.cpp | 4 ++++ 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/sflphone-common/src/sip/sdp.cpp b/sflphone-common/src/sip/sdp.cpp index e069369c61..d17e3cf788 100644 --- a/sflphone-common/src/sip/sdp.cpp +++ b/sflphone-common/src/sip/sdp.cpp @@ -648,12 +648,8 @@ void Sdp::set_media_transport_info_from_remote_sdp (const pjmedia_sdp_session *r pjmedia_sdp_media *r_media; - pjmedia_sdp_attr *attribute; - this->get_remote_sdp_media_from_offer (remote_sdp, &r_media); - this->get_remote_sdp_crypto_from_offer(remote_sdp, &attribute); - if (r_media==NULL) { _debug ("SDP Failure: no remote sdp media found in the remote offer"); return; @@ -662,6 +658,7 @@ void Sdp::set_media_transport_info_from_remote_sdp (const pjmedia_sdp_session *r this->set_remote_audio_port_from_sdp (r_media); this->set_remote_ip_from_sdp (remote_sdp); + } void Sdp::get_remote_sdp_media_from_offer (const pjmedia_sdp_session* remote_sdp, pjmedia_sdp_media** r_media) diff --git a/sflphone-common/src/sip/sdp.h b/sflphone-common/src/sip/sdp.h index 72ef3f434c..fcea8997f2 100644 --- a/sflphone-common/src/sip/sdp.h +++ b/sflphone-common/src/sip/sdp.h @@ -218,6 +218,8 @@ class Sdp { std::vector<sdpMedia*> get_session_media_list (void) { return _session_media; } + void get_remote_sdp_crypto_from_offer (const pjmedia_sdp_session* remote_sdp, pjmedia_sdp_attr** r_crypto); + private: /** Codec Map */ std::vector<sdpMedia*> _local_media_cap; @@ -344,7 +346,6 @@ class Sdp { void get_remote_sdp_media_from_offer (const pjmedia_sdp_session* r_sdp, pjmedia_sdp_media** r_media); - void get_remote_sdp_crypto_from_offer (const pjmedia_sdp_session* remote_sdp, pjmedia_sdp_attr** r_crypto); /* * Adds a sdes attribute to the given media section. diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp index 4c04313827..45876d7ab8 100644 --- a/sflphone-common/src/sip/sipvoiplink.cpp +++ b/sflphone-common/src/sip/sipvoiplink.cpp @@ -3212,6 +3212,10 @@ void call_on_media_update (pjsip_inv_session *inv, pj_status_t status) // Set remote ip / port call->getLocalSDP()->set_media_transport_info_from_remote_sdp (remote_sdp); + // Get the crypto attribute containing srtp's cryptographic context (keys, cipher) + pjmedia_sdp_attr *attribute; + call->getLocalSDP()->get_remote_sdp_crypto_from_offer(remote_sdp, &attribute); + try { call->setAudioStart (true); call->getAudioRtp()->start(); -- GitLab From d6fe22d82b45dcc5d3f20503949793f52238a6ec Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Mon, 11 Jan 2010 17:27:01 -0500 Subject: [PATCH 148/188] [#1722] Add SdesNegociator in sipvoiplink --- sflphone-common/src/Makefile.am | 2 +- sflphone-common/src/sip/Makefile.am | 9 +- sflphone-common/src/{util => sip}/Pattern.cpp | 8 +- sflphone-common/src/sip/Pattern.h | 339 ++++++++++++++++++ sflphone-common/src/sip/SdesNegotiator.cpp | 36 +- sflphone-common/src/sip/sipvoiplink.cpp | 10 + sflphone-common/src/util/Pattern.h | 339 ------------------ 7 files changed, 377 insertions(+), 366 deletions(-) rename sflphone-common/src/{util => sip}/Pattern.cpp (97%) create mode 100644 sflphone-common/src/sip/Pattern.h delete mode 100644 sflphone-common/src/util/Pattern.h diff --git a/sflphone-common/src/Makefile.am b/sflphone-common/src/Makefile.am index 0d2b2da9cc..10d240d25e 100644 --- a/sflphone-common/src/Makefile.am +++ b/sflphone-common/src/Makefile.am @@ -62,7 +62,7 @@ noinst_LTLIBRARIES = libsflphone.la noinst_HEADERS = \ conference.h \ - voiplink.h \ + voiplink.h \ managerimpl.h \ manager.h \ global.h \ diff --git a/sflphone-common/src/sip/Makefile.am b/sflphone-common/src/sip/Makefile.am index 778494b0b6..da91f89950 100644 --- a/sflphone-common/src/sip/Makefile.am +++ b/sflphone-common/src/sip/Makefile.am @@ -3,17 +3,20 @@ include $(top_srcdir)/globals.mak noinst_LTLIBRARIES = libsiplink.la libsiplink_la_SOURCES = \ + Pattern.cpp \ + SdesNegotiator.cpp \ sdp.cpp \ sdpmedia.cpp \ sipaccount.cpp \ sipcall.cpp \ - sipvoiplink.cpp + sipvoiplink.cpp noinst_HEADERS = \ + Pattern.h \ + SdesNegotiator.h \ sdp.h \ sdpmedia.h \ sipaccount.h \ sipcall.h \ - sipvoiplink.h - + sipvoiplink.h \ No newline at end of file diff --git a/sflphone-common/src/util/Pattern.cpp b/sflphone-common/src/sip/Pattern.cpp similarity index 97% rename from sflphone-common/src/util/Pattern.cpp rename to sflphone-common/src/sip/Pattern.cpp index 95186c5d68..cc62a6871e 100644 --- a/sflphone-common/src/util/Pattern.cpp +++ b/sflphone-common/src/sip/Pattern.cpp @@ -23,8 +23,7 @@ namespace sfl { -namespace util { -Pattern::Pattern (const std::string& pattern, const std::string& options = "") : +Pattern::Pattern (const std::string& pattern, const std::string& options) : _pattern (pattern), _ovector (NULL), _ovectorSize (0), @@ -304,11 +303,10 @@ std::vector<std::string> Pattern::split (void) tokenEnd = end(); } - substringSplitted.push_back (_subject.substr (tokenEnd + 1, + substringSplitted.push_back (_subject.substr (tokenEnd + 1, tokenStart - tokenEnd - 1)); - tokenStart - tokenEnd - 1)); return substringSplitted; } } -} + diff --git a/sflphone-common/src/sip/Pattern.h b/sflphone-common/src/sip/Pattern.h new file mode 100644 index 0000000000..b07c92acdd --- /dev/null +++ b/sflphone-common/src/sip/Pattern.h @@ -0,0 +1,339 @@ +/* + * Copyright (C) 2009 Savoir-Faire Linux inc. + * Author: Pierre-Luc Bacon <pierre-luc.bacon@savoirfairelinux.com> + * + * 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 3 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., 675 Mass Ave, Cambridge, MA 02139, USA. + */ +#ifndef __SFL_PATTERN_H__ +#define __SFL_PATTERN_H__ + +#include <stdexcept> +#include <string> +#include <vector> +#include <pcre.h> + +namespace sfl { + + /** + * Exception object that is thrown when + * an error occured while compiling the + * regular expression. + */ + class compile_error : public std::invalid_argument + { + public: + explicit compile_error(const std::string& error) : + std::invalid_argument(error) {} + }; + + /** + * Exception object that is thrown when + * an error occured while mathing a + * pattern to an expression. + */ + class match_error : public std::invalid_argument + { + public: + match_error(const std::string& error) : + std::invalid_argument(error) {} + }; + + /** + * This class implements in its way + * some of the libpcre library. + */ + + class Pattern { + + public: + + /** + * Constructor for a regular expression + * pattern evaluator/matcher. + * + * @param pattern + * The regular expression to + * be used for this instance. + */ + + Pattern(const std::string& pattern, + const std::string& options = ""); + + /** + * Destructor. Pcre pattern gets freed + * here. + */ + ~Pattern(); + + /** + * Assignment operator overloading. + * Set the regular expression + * to be used on subject strings + * and compile the regular expression + * from that string. + * + * @param pattern The new pattern + */ + void operator=(const std::string& pattern) { + _pattern = pattern; + compile(); + } + + void operator=(const char * pattern) { + _pattern = pattern; + compile(); + } + + /** + * Compile the regular expression + * from the pattern that was set for + * this object. + */ + void compile(void); + + /** + * Get the currently set regular expression + * that is used on subject strings + * + * @return The currently set pattern + */ + inline std::string getPattern(void) { return _pattern; } + + /** + * << operator overload. Sets the the subject + * for latter use on the >> operator. + * + * @param subject + * The expression to be evaluated + * by the pattern. + * + */ + void operator<<(const std::string& subject) { + _subject = subject; + } + + /** + * Get the start position of the overall match. + * + * @return the start position of the overall match. + */ + size_t start(void) const; + + /** + * Get the start position of the specified match. + * + * @param groupNumber The capturing group number. + * + * @return the start position of the specified match. + */ + size_t start(unsigned int groupNumber) const; + + /** + * Get the start position of the specified match. + * + * @param groupName The capturing group name. + * + * @return the start position of the specified match. + */ + size_t start(const std::string& groupName) const; + + /** + * Get the end position of the overall match. + * + * @return the end position of the overall match. + */ + size_t end(void) const; + + /** + * Get the end position of the specified match. + * + * @param groupNumber The capturing group number. + * + * @return the end position of the specified match. + */ + size_t end(unsigned int groupNumber) const; + + /** + * Get the end position of the specified match. + * + * @param groupName The capturing group name. + * + * @return the end position of the specified match. + */ + size_t end(const std::string& groupName) const; + + /** + * Get the number of capturing groups in the + * compiled regex. + * + * @return The number of capture groups. + * + * @pre The regular expression should have been + * compiled prior to the execution of this method. + */ + unsigned int getCaptureGroupCount(void); + + /** + * Get the substring matched in a capturing + * group (named or unnamed). + * + * This methods only performs a basic lookup + * inside its internal substring table. Thus, + * matches() should have been called prior to + * this method in order to obtain the desired + * output. + * + * @param groupName The name of the group + * + * @return the substring matched by the + * regular expression designated + * the group name. + */ + std::string group(const std::string& groupName); + + /** + * Get the substring matched in a named group. + * + * This methods only performs a basic lookup + * inside its internal substring table. Thus, + * matches() should have been called prior to + * this method in order to obtain the desired + * output. + * + * @param groupNumber The number of the group. + * + * @return the substring matched by the + * regular expression designated + * the group number. + */ + std::string group(int groupNumber); + + /** + * Similar to python's MatchObject.groups. Get all + * the substrings matched by the capture groups defined + * in the pattern. The complete (implicit) capture group + * is not returned : ie only groups from 1 up to the number + * of groups in the pattern are returned. + * + * @return A vector of stings that were matched by some + * capturing group in the pattern. + * + * @pre The regular expression should have been + * compiled prior to the execution of this method. + */ + std::vector<std::string> groups(void); + + /** + * Try to match the compiled pattern with a + * subject. + * + * @param subject Subject to be matched + * by the pattern. + * + * @return true If the subject matches the pattern, + * false otherwise. + * + * @pre The regular expression should have been + * compiled prior to the execution of this method. + * + * @post The internal substring table will be updated + * with the new matches. Therefore, subsequent + * calls to group may return different results. + */ + bool matches(const std::string& subject) throw(match_error); + + /** + * Try to match the compiled pattern with the implicit + * subject. + * + * @return true If the subject matches the pattern, + * false otherwise. + * + * @pre The regular expression should have been + * compiled prior to the execution of this method. + * + * @post The internal substring table will be updated + * with the new matches. Therefore, subsequent + * calls to group may return different results. + */ + bool matches(void) throw(match_error); + + /** + * Split the subject into a list of substrings. + * + * @return A vector of substrings. + * + * @pre The regular expression should have been + * compiled prior to the execution of this method. + * + * @post The internal subject won't be affected by this + * by this operation. In other words: subject_before = + * subject_after. + */ + std::vector<std::string> split(void); // throw(match_error); + + private: + /** + * The regular expression that represents that pattern. + */ + std::string _pattern; + + /** + * The optional subject string. + */ + std::string _subject; + + /** + * PCRE struct that + * contains the compiled regular + * expression + */ + pcre * _re; + + /** + * The internal output vector used by PCRE. + */ + int * _ovector; + + /** + * The size of the _ovector + */ + int _ovectorSize; + + /** + * Current offset in the _ovector; + */ + + int _offset[2]; + + /** + * The number of substrings matched after calling + * pcre_exec. + */ + int _count; + + /** + * PCRE options for this pattern. + */ + int _options; + + /** + * String representation of the options. + */ + std::string _optionsDescription; + }; +} + + +#endif diff --git a/sflphone-common/src/sip/SdesNegotiator.cpp b/sflphone-common/src/sip/SdesNegotiator.cpp index 74442abafe..f0b837a453 100644 --- a/sflphone-common/src/sip/SdesNegotiator.cpp +++ b/sflphone-common/src/sip/SdesNegotiator.cpp @@ -18,14 +18,14 @@ #include "SdesNegotiator.h" -#include "util/Pattern.h" +#include "Pattern.h" #include <iostream> #include <sstream> #include <algorithm> #include <stdexcept> -using namespace sfl::util; +using namespace sfl; struct CryptoAttribute { std::string tag; @@ -81,7 +81,7 @@ void SdesNegotiator::parse (void) "UNENCRYPTED_SRTCP|" \ "UNAUTHENTICATED_SRTP|" \ "FEC_ORDER=(?P<fecOrder>FEC_SRTP|SRTP_FEC)|" \ - "FEC_KEY=(?P<fecKey>" + keyParamsPattern.getPattern() + ")|" \ + "FEC_KEY=(?P<fecKey>" + keyParamsPattern->getPattern() + ")|" \ "WSH=(?P<wsh>[0-9]{1,2})|" \ "(?<!\\-)[[:graph:]]+))*", "g"); // srtp-session-extension @@ -102,11 +102,11 @@ void SdesNegotiator::parse (void) // Split the line into its component // that we will analyze further down. - generalSyntaxPattern << (*iter); + *generalSyntaxPattern << (*iter); std::vector<std::string> sdesLine; try { - sdesLine = generalSyntaxPattern.split(); + sdesLine = generalSyntaxPattern->split(); if (sdesLine.size() < 3) { throw parse_error ("Missing components in SDES line"); @@ -117,10 +117,10 @@ void SdesNegotiator::parse (void) // Check if the attribute starts with a=crypto // and get the tag for this line - tagPattern << sdesLine.at (0); + *tagPattern << sdesLine.at (0); try { - std::string tag = tagPattern.group ("tag"); + std::string tag = tagPattern->group ("tag"); std::cout << "tag = " << tag << std::endl; } catch (match_error& exception) { throw parse_error ("Error while parsing the tag field"); @@ -128,39 +128,39 @@ void SdesNegotiator::parse (void) // Check if the crypto suite is valid and retreive // its value. - cryptoSuitePattern << sdesLine.at (1); + *cryptoSuitePattern << sdesLine.at (1); try { - std::string cryptoSuite - cryptoSuite = cryptoSuitePattern.group ("cryptoSuite"); + std::string cryptoSuite; + cryptoSuite = cryptoSuitePattern->group ("cryptoSuite"); std::cout << "crypto-suite = " << cryptoSuite << std::endl; } catch (match_error& exception) { throw parse_error ("Error while parsing the crypto-suite field"); } // Parse one or more key-params field. - keyParamsPattern << sdesLine.at (2); + *keyParamsPattern << sdesLine.at (2); try { - while (keyParamsPattern.matches()) { + while (keyParamsPattern->matches()) { std::string srtpKeyMethod; - srtpKeyMethod = keyParamsMatched.group ("srtpKeyMethod"); + srtpKeyMethod = keyParamsPattern->group ("srtpKeyMethod"); std::cout << "srtp-key-method = " << srtpKeyMethod << std::endl; std::string srtpKeyInfo; - srtpKeyInfo = keyParamsPattern.group ("srtpKeyInfo"); + srtpKeyInfo = keyParamsPattern->group ("srtpKeyInfo"); std::cout << "srtp-key-info = " << srtpKeyInfo << std::endl; std::string lifetime; - lifetime = keyParamsPattern.group ("lifetime"); + lifetime = keyParamsPattern->group ("lifetime"); std::cout << "lifetime = " << lifetime << std::endl; - std::string mkiValue - mkiValue = keyParamsPattern.group ("mkiValue"); + std::string mkiValue; + mkiValue = keyParamsPattern->group ("mkiValue"); std::cout << "mkiValue = " << mkiValue << std::endl; std::string mkiLength; - mkiLength = keyParamsPattern.group ("mkiLength"); + mkiLength = keyParamsPattern->group ("mkiLength"); std::cout << "mkiLength = " << mkiLength << std::endl; } } catch (match_error& exception) { diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp index 45876d7ab8..d4003365bc 100644 --- a/sflphone-common/src/sip/sipvoiplink.cpp +++ b/sflphone-common/src/sip/sipvoiplink.cpp @@ -28,6 +28,7 @@ #include "sipcall.h" #include "sipaccount.h" #include "eventthread.h" +#include "SdesNegotiator.h" #include "dbus/dbusmanager.h" #include "dbus/callmanager.h" @@ -3216,6 +3217,15 @@ void call_on_media_update (pjsip_inv_session *inv, pj_status_t status) pjmedia_sdp_attr *attribute; call->getLocalSDP()->get_remote_sdp_crypto_from_offer(remote_sdp, &attribute); + // create remote cryptografic offer + std::vector<std::string> remoteOffer; + + std::string attr(attribute->value.ptr, attribute->value.slen); + + remoteOffer.push_back(attr); + + // sfl::SdesNegotiator sdesnego(sfl::CryptoSuites, remoteOffer); + try { call->setAudioStart (true); call->getAudioRtp()->start(); diff --git a/sflphone-common/src/util/Pattern.h b/sflphone-common/src/util/Pattern.h deleted file mode 100644 index 676ecbd85e..0000000000 --- a/sflphone-common/src/util/Pattern.h +++ /dev/null @@ -1,339 +0,0 @@ -/* - * Copyright (C) 2009 Savoir-Faire Linux inc. - * Author: Pierre-Luc Bacon <pierre-luc.bacon@savoirfairelinux.com> - * - * 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 3 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., 675 Mass Ave, Cambridge, MA 02139, USA. - */ -#ifndef __SFL_PATTERN_H__ -#define __SFL_PATTERN_H__ - -#include <stdexcept> -#include <string> -#include <vector> -#include <pcre.h> - -namespace sfl { -namespace util { - /** - * Exception object that is thrown when - * an error occured while compiling the - * regular expression. - */ - class compile_error : public std::invalid_argument - { - public: - explicit compile_error(const std::string& error) : - std::invalid_argument(error) {} - }; - - /** - * Exception object that is thrown when - * an error occured while mathing a - * pattern to an expression. - */ - class match_error : public std::invalid_argument - { - public: - match_error(const std::string& error) : - std::invalid_argument(error) {} - }; - - /** - * This class implements in its way - * some of the libpcre library. - */ - - class Pattern { - - public: - - /** - * Constructor for a regular expression - * pattern evaluator/matcher. - * - * @param pattern - * The regular expression to - * be used for this instance. - */ - - Pattern(const std::string& pattern, - const std::string& options); - - /** - * Destructor. Pcre pattern gets freed - * here. - */ - ~Pattern(); - - /** - * Assignment operator overloading. - * Set the regular expression - * to be used on subject strings - * and compile the regular expression - * from that string. - * - * @param pattern The new pattern - */ - void operator=(const std::string& pattern) { - _pattern = pattern; - compile(); - } - - void operator=(const char * pattern) { - _pattern = pattern; - compile(); - } - - /** - * Compile the regular expression - * from the pattern that was set for - * this object. - */ - void compile(void); - - /** - * Get the currently set regular expression - * that is used on subject strings - * - * @return The currently set pattern - */ - inline std::string getPattern(void) { return _pattern; } - - /** - * << operator overload. Sets the the subject - * for latter use on the >> operator. - * - * @param subject - * The expression to be evaluated - * by the pattern. - * - */ - void operator<<(const std::string& subject) { - _subject = subject; - } - - /** - * Get the start position of the overall match. - * - * @return the start position of the overall match. - */ - size_t start(void) const; - - /** - * Get the start position of the specified match. - * - * @param groupNumber The capturing group number. - * - * @return the start position of the specified match. - */ - size_t start(unsigned int groupNumber) const; - - /** - * Get the start position of the specified match. - * - * @param groupName The capturing group name. - * - * @return the start position of the specified match. - */ - size_t start(const std::string& groupName) const; - - /** - * Get the end position of the overall match. - * - * @return the end position of the overall match. - */ - size_t end(void) const; - - /** - * Get the end position of the specified match. - * - * @param groupNumber The capturing group number. - * - * @return the end position of the specified match. - */ - size_t end(unsigned int groupNumber) const; - - /** - * Get the end position of the specified match. - * - * @param groupName The capturing group name. - * - * @return the end position of the specified match. - */ - size_t end(const std::string& groupName) const; - - /** - * Get the number of capturing groups in the - * compiled regex. - * - * @return The number of capture groups. - * - * @pre The regular expression should have been - * compiled prior to the execution of this method. - */ - unsigned int getCaptureGroupCount(void); - - /** - * Get the substring matched in a capturing - * group (named or unnamed). - * - * This methods only performs a basic lookup - * inside its internal substring table. Thus, - * matches() should have been called prior to - * this method in order to obtain the desired - * output. - * - * @param groupName The name of the group - * - * @return the substring matched by the - * regular expression designated - * the group name. - */ - std::string group(const std::string& groupName); - - /** - * Get the substring matched in a named group. - * - * This methods only performs a basic lookup - * inside its internal substring table. Thus, - * matches() should have been called prior to - * this method in order to obtain the desired - * output. - * - * @param groupNumber The number of the group. - * - * @return the substring matched by the - * regular expression designated - * the group number. - */ - std::string group(int groupNumber); - - /** - * Similar to python's MatchObject.groups. Get all - * the substrings matched by the capture groups defined - * in the pattern. The complete (implicit) capture group - * is not returned : ie only groups from 1 up to the number - * of groups in the pattern are returned. - * - * @return A vector of stings that were matched by some - * capturing group in the pattern. - * - * @pre The regular expression should have been - * compiled prior to the execution of this method. - */ - std::vector<std::string> groups(void); - - /** - * Try to match the compiled pattern with a - * subject. - * - * @param subject Subject to be matched - * by the pattern. - * - * @return true If the subject matches the pattern, - * false otherwise. - * - * @pre The regular expression should have been - * compiled prior to the execution of this method. - * - * @post The internal substring table will be updated - * with the new matches. Therefore, subsequent - * calls to group may return different results. - */ - bool matches(const std::string& subject) throw(match_error); - - /** - * Try to match the compiled pattern with the implicit - * subject. - * - * @return true If the subject matches the pattern, - * false otherwise. - * - * @pre The regular expression should have been - * compiled prior to the execution of this method. - * - * @post The internal substring table will be updated - * with the new matches. Therefore, subsequent - * calls to group may return different results. - */ - bool matches(void) throw(match_error); - - /** - * Split the subject into a list of substrings. - * - * @return A vector of substrings. - * - * @pre The regular expression should have been - * compiled prior to the execution of this method. - * - * @post The internal subject won't be affected by this - * by this operation. In other words: subject_before = - * subject_after. - */ - std::vector<std::string> split(void) throw(match_error); - - private: - /** - * The regular expression that represents that pattern. - */ - std::string _pattern; - - /** - * The optional subject string. - */ - std::string _subject; - - /** - * PCRE struct that - * contains the compiled regular - * expression - */ - pcre * _re; - - /** - * The internal output vector used by PCRE. - */ - int * _ovector; - - /** - * The size of the _ovector - */ - int _ovectorSize; - - /** - * Current offset in the _ovector; - */ - - int _offset[2]; - - /** - * The number of substrings matched after calling - * pcre_exec. - */ - int _count; - - /** - * PCRE options for this pattern. - */ - int _options; - - /** - * String representation of the options. - */ - std::string _optionsDescription; - }; -} -} - -#endif -- GitLab From b0fcdcbf552460595a3f0a3123639c0bea30ae8c Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Mon, 11 Jan 2010 18:22:08 -0500 Subject: [PATCH 149/188] [#1722] Make sure pcre is available --- sflphone-common/configure.ac | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/sflphone-common/configure.ac b/sflphone-common/configure.ac index 41bfe9221b..aacfcc7d68 100644 --- a/sflphone-common/configure.ac +++ b/sflphone-common/configure.ac @@ -214,6 +214,12 @@ AC_SUBST(libssl_LIBS) AC_SUBST(ZRTPCPP_LIBS) AC_SUBST(ZRTPCPP_CFLAGS) + dnl Check for libpcre +# LIBPCRE_MIN_VERSION=0.0.0 +# PKG_CHECK_MODULES(PCRE, libpcre >= ${LIBPCRE_MIN_VERSION}) +# AC_SUBST(PCRE_LIBS) +#AC_SUBST(PCRE_CFLAGS) + dnl DBus-C++ detection (used to be in library own build system) DBUS_REQUIRED_VERSION=0.60 @@ -295,6 +301,15 @@ AC_CHECK_LIB([pthread], pthread_create, AC_MSG_ERROR([You need the POSIX Thread library (pthreads)]) fi +AC_CHECK_LIB([pcre], pcre_free, + [AC_CHECK_HEADERS(pcre.h, have_pcre=true, have_pcre=false)], + have_pcre=false) + + if test "$have_pcre" = "false"; then +AC_MSG_ERROR([You need the Perl-Compatible Regular Expressions library (pcre)]) + fi + + # For the tools/, we need libdbus-c++ for the "build" architecture as well AM_CONDITIONAL(CROSS_COMPILING, test "$cross_compiling" = "yes") -- GitLab From d22fa079f226bd5336b6fba1cfb8e97191789036 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Tue, 12 Jan 2010 10:29:08 -0500 Subject: [PATCH 150/188] [#1722] Link to libpcre --- sflphone-common/configure.ac | 15 ++++++++------- sflphone-common/src/sip/Makefile.am | 5 ++++- sflphone-common/src/sip/sipvoiplink.cpp | 8 +++++++- 3 files changed, 19 insertions(+), 9 deletions(-) diff --git a/sflphone-common/configure.ac b/sflphone-common/configure.ac index aacfcc7d68..fe7cdfcc92 100644 --- a/sflphone-common/configure.ac +++ b/sflphone-common/configure.ac @@ -214,12 +214,6 @@ AC_SUBST(libssl_LIBS) AC_SUBST(ZRTPCPP_LIBS) AC_SUBST(ZRTPCPP_CFLAGS) - dnl Check for libpcre -# LIBPCRE_MIN_VERSION=0.0.0 -# PKG_CHECK_MODULES(PCRE, libpcre >= ${LIBPCRE_MIN_VERSION}) -# AC_SUBST(PCRE_LIBS) -#AC_SUBST(PCRE_CFLAGS) - dnl DBus-C++ detection (used to be in library own build system) DBUS_REQUIRED_VERSION=0.60 @@ -290,7 +284,7 @@ fi xml_CFLAGS= xml_LIBS=-lexpat - AC_SUBST(xml_CFLAGS) +AC_SUBST(xml_CFLAGS) AC_SUBST(xml_LIBS) AC_CHECK_LIB([pthread], pthread_create, @@ -301,6 +295,7 @@ AC_CHECK_LIB([pthread], pthread_create, AC_MSG_ERROR([You need the POSIX Thread library (pthreads)]) fi + AC_CHECK_LIB([pcre], pcre_free, [AC_CHECK_HEADERS(pcre.h, have_pcre=true, have_pcre=false)], have_pcre=false) @@ -309,6 +304,12 @@ AC_CHECK_LIB([pcre], pcre_free, AC_MSG_ERROR([You need the Perl-Compatible Regular Expressions library (pcre)]) fi +PCRE_LIBS=-lpcre +PCRE_CFLAGS= +AC_SUBST(PCRE_LIBS) +AC_SUBST(PCRE_CFLAGS) + + # For the tools/, we need libdbus-c++ for the "build" architecture as well diff --git a/sflphone-common/src/sip/Makefile.am b/sflphone-common/src/sip/Makefile.am index da91f89950..8cb4829edc 100644 --- a/sflphone-common/src/sip/Makefile.am +++ b/sflphone-common/src/sip/Makefile.am @@ -19,4 +19,7 @@ noinst_HEADERS = \ sdpmedia.h \ sipaccount.h \ sipcall.h \ - sipvoiplink.h \ No newline at end of file + sipvoiplink.h + +libsiplink_la_CXXFLAGS = \ + @PCRE_LIBS@ \ No newline at end of file diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp index d4003365bc..b28606f29d 100644 --- a/sflphone-common/src/sip/sipvoiplink.cpp +++ b/sflphone-common/src/sip/sipvoiplink.cpp @@ -3224,7 +3224,13 @@ void call_on_media_update (pjsip_inv_session *inv, pj_status_t status) remoteOffer.push_back(attr); - // sfl::SdesNegotiator sdesnego(sfl::CryptoSuites, remoteOffer); + std::vector<sfl::CryptoSuiteDefinition>localCapabilities; + for(int i = 0; i < 3; i++) { + localCapabilities.push_back(sfl::CryptoSuites[i]); + } + + sfl::SdesNegotiator sdesnego(localCapabilities, remoteOffer); + try { call->setAudioStart (true); -- GitLab From 57926096eff030454cefc0b40b6ce37c62a9259d Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Tue, 12 Jan 2010 11:41:59 -0500 Subject: [PATCH 151/188] [#2555] Fix test folder compilation, changed file object names --- sflphone-common/test/Makefile.am | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/sflphone-common/test/Makefile.am b/sflphone-common/test/Makefile.am index 87264309aa..3139145a4a 100644 --- a/sflphone-common/test/Makefile.am +++ b/sflphone-common/test/Makefile.am @@ -4,25 +4,28 @@ include ../globals.mak noinst_PROGRAMS = numbercleanerTester pluginmanagerTester hookmanagerTester audiolayerTester historyTester mainbufferTester #rtpTester OBJECT_FILES= \ + ../src/sflphoned-logger.o \ ../src/sflphoned-managerimpl.o \ + ../src/sflphoned-account.o\ ../src/sflphoned-accountcreator.o \ ../src/sflphoned-call.o \ - ../src/sip/sipcall.o \ - ../src/iax/libiaxlink_la-iaxcall.o \ + ../src/sflphoned-conference.o \ + ../src/sflphoned-eventthread.o \ + ../src/sflphoned-managerimpl_registration.o \ + ../src/sflphoned-numbercleaner.o \ + ../src/sflphoned-observer.o \ ../src/sflphoned-voiplink.o \ - ../src/sip/sipvoiplink.o \ + ../src/sip/libsiplink_la-sipcall.o \ + ../src/iax/libiaxlink_la-iaxcall.o \ + ../src/sip/libsiplink_la-sipvoiplink.o \ ../src/iax/libiaxlink_la-iaxvoiplink.o \ - ../src/sflphoned-account.o \ - ../src/sip/sipaccount.o \ + ../src/sip/libsiplink_la-sipaccount.o \ ../src/iax/libiaxlink_la-iaxaccount.o \ - ../src/sflphoned-eventthread.o \ - ../src/sflphoned-conference.o \ + ../src/sip/libsiplink_la-sdp.o \ + ../src/sip/libsiplink_la-sdpmedia.o \ ../src/plug-in/pluginmanager.o \ ../src/plug-in/audiorecorder/audiorecord.o \ ../src/audio/samplerateconverter.o \ - ../src/sip/sdp.o \ - ../src/sip/sdpmedia.o \ - ../src/sflphoned-numbercleaner.o \ ../src/history/historymanager.o ../ @@ -65,7 +68,7 @@ pluginmanagerTester_LDADD = \ @SAMPLERATE_LIBS@ \ $(PJSIP_LIBS) \ $(OBJECT_FILES) - + hookmanagerTester_SOURCES = \ hookmanagerTest.cpp \ TestMain.cpp -- GitLab From 671aae9d2fea28ad6fee2ec0f75eae6e9b069c34 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Tue, 12 Jan 2010 12:02:51 -0500 Subject: [PATCH 152/188] [#1722] Add SdesNegotiator unit test in test/ --- sflphone-common/test/Makefile.am | 22 ++++- sflphone-common/test/sdesnegotiatorTest.cpp | 59 +++++++++++++ sflphone-common/test/sdesnegotiatorTest.h | 92 +++++++++++++++++++++ 3 files changed, 172 insertions(+), 1 deletion(-) create mode 100644 sflphone-common/test/sdesnegotiatorTest.cpp create mode 100644 sflphone-common/test/sdesnegotiatorTest.h diff --git a/sflphone-common/test/Makefile.am b/sflphone-common/test/Makefile.am index 3139145a4a..e3679eb678 100644 --- a/sflphone-common/test/Makefile.am +++ b/sflphone-common/test/Makefile.am @@ -1,7 +1,7 @@ include ../globals.mak -noinst_PROGRAMS = numbercleanerTester pluginmanagerTester hookmanagerTester audiolayerTester historyTester mainbufferTester #rtpTester +noinst_PROGRAMS = numbercleanerTester pluginmanagerTester hookmanagerTester audiolayerTester historyTester mainbufferTester sdesnegotiatorTester #rtpTester OBJECT_FILES= \ ../src/sflphoned-logger.o \ @@ -148,3 +148,23 @@ mainbufferTester_LDADD = \ @SAMPLERATE_LIBS@ \ $(PJSIP_LIBS) \ $(OBJECT_FILES) + +sdesnegotiatorTester_SOURCES = \ + sdesnegotiatorTest.h \ + sdesnegotiatorTest.cpp \ + TestMain.cpp + +sdesnegotiatorTester_LDADD = \ + ../src/libsflphone.la \ + $(SFLPHONE_LIBS) $(ZEROCONFLIB) $(LIB_DNSSD) \ + @ALSA_LIBS@ \ + @PULSEAUDIO_LIBS@ \ + @CPPUNIT_LIBS@ \ + @CCEXT2_LIBS@ \ + @CCGNU2_LIBS@ \ + @CCRTP_LIBS@ \ + @ZRTPCPP_LIBS@ \ + @libssl_LIBS@ \ + @SAMPLERATE_LIBS@ \ + $(PJSIP_LIBS) \ + $(OBJECT_FILES) diff --git a/sflphone-common/test/sdesnegotiatorTest.cpp b/sflphone-common/test/sdesnegotiatorTest.cpp new file mode 100644 index 0000000000..cf21580649 --- /dev/null +++ b/sflphone-common/test/sdesnegotiatorTest.cpp @@ -0,0 +1,59 @@ +/* + * Copyright (C) 2009 Savoir-Faire Linux inc. + * Author: Alexandre Savard <alexandre.savard@savoirfairelinux.com> + * + * 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 3 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., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include <stdio.h> +#include <sstream> +#include <ccrtp/rtp.h> +#include <assert.h> +#include <string> +#include <cstring> +#include <math.h> +#include <dlfcn.h> +#include <iostream> +#include <sstream> + + +#include "sdesnegotiatorTest.h" + +#include <unistd.h> + + +using std::cout; +using std::endl; + + +void SdesNegotiatorTest::setUp() +{ + + +} + + +void SdesNegotiatorTest::tearDown() +{ + +} + +void SdesNegotiatorTest::testNegotiation() +{ + + +} + + diff --git a/sflphone-common/test/sdesnegotiatorTest.h b/sflphone-common/test/sdesnegotiatorTest.h new file mode 100644 index 0000000000..16c2dfb7f8 --- /dev/null +++ b/sflphone-common/test/sdesnegotiatorTest.h @@ -0,0 +1,92 @@ +/* + * Copyright (C) 2009 Savoir-Faire Linux inc. + * Author: Alexandre Savard <alexandre.savard@savoirfairelinux.com> + * + * 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 3 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., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +// Cppunit import +#include <cppunit/extensions/HelperMacros.h> +#include <cppunit/TestCaller.h> +#include <cppunit/TestCase.h> +#include <cppunit/TestSuite.h> + +#include <assert.h> + +#include <stdio.h> +#include <sstream> +#include <ccrtp/rtp.h> + + +// pjsip import +#include <pjsip.h> +#include <pjlib.h> +#include <pjsip_ua.h> +#include <pjlib-util.h> +#include <pjnath/stun_config.h> + +// Application import +#include "sip/SdesNegotiator.h" + +// #include "config/config.h" +// #include "user_cfg.h" + + + +/* + * @file sdesnegotiationTest.cpp + * @brief Regroups unitary tests related to the plugin manager. + */ + +#ifndef _SDESNEGOTIATOR_TEST_ +#define _SDESNEGOTIATOR_TEST_ + + + +class SdesNegotiatorTest : public CppUnit::TestCase { + + /* + * Use cppunit library macros to add unit test the factory + */ + CPPUNIT_TEST_SUITE( SdesNegotiatorTest ); + CPPUNIT_TEST( testNegotiation ); + CPPUNIT_TEST_SUITE_END(); + + public: + + SdesNegotiatorTest() : CppUnit::TestCase("Sdes Tests") {} + + /* + * Code factoring - Common resources can be initialized here. + * This method is called by unitcpp before each test + */ + void setUp(); + + /* + * Code factoring - Common resources can be released here. + * This method is called by unitcpp after each test + */ + inline void tearDown(); + + void testNegotiation(); + + private: + +}; + +/* Register our test module */ +CPPUNIT_TEST_SUITE_REGISTRATION( SdesNegotiatorTest ); + +#endif -- GitLab From 4c06ec3507bfc53051391e8c569aa49b4f5ad507 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Tue, 12 Jan 2010 15:40:27 -0500 Subject: [PATCH 153/188] [#1722] Not working SdesNegociator unit test --- sflphone-common/src/sip/Pattern.cpp | 25 ++++++++++++++++----- sflphone-common/src/sip/SdesNegotiator.cpp | 11 ++++++--- sflphone-common/test/sdesnegotiatorTest.cpp | 25 +++++++++++++++++++-- sflphone-common/test/sdesnegotiatorTest.h | 7 ++++++ 4 files changed, 58 insertions(+), 10 deletions(-) diff --git a/sflphone-common/src/sip/Pattern.cpp b/sflphone-common/src/sip/Pattern.cpp index cc62a6871e..2e7619fd76 100644 --- a/sflphone-common/src/sip/Pattern.cpp +++ b/sflphone-common/src/sip/Pattern.cpp @@ -31,6 +31,8 @@ Pattern::Pattern (const std::string& pattern, const std::string& options) : _count (0), _options (0) { + + printf("Pattern constructor called for %s!\n", pattern.c_str()); // Set offsets _offset[0] = _offset[1] = 0; @@ -137,6 +139,8 @@ std::string Pattern::group (int groupNumber) { const char * stringPtr; + printf("_subject.substr : %s\n", _subject.substr (_offset[0]).c_str()); + int rc = pcre_get_substring ( _subject.substr (_offset[0]).c_str(), _ovector, @@ -169,6 +173,10 @@ std::string Pattern::group (const std::string& groupName) { const char * stringPtr = NULL; + printf("Pattern::group %s\n", groupName.c_str()); + printf("_subject.substr : %s\n", _subject.substr (_offset[0]).c_str()); + printf("_count : %i\n", _count); + int rc = pcre_get_named_substring ( _re, _subject.substr (_offset[0]).c_str(), @@ -177,10 +185,13 @@ std::string Pattern::group (const std::string& groupName) groupName.c_str(), &stringPtr); + printf("stringPtr : %s\n", stringPtr); + if (rc < 0) { switch (rc) { case PCRE_ERROR_NOSUBSTRING: + printf("Pattern::PCRE_ERROR_NOSUBSTRING\n"); throw std::out_of_range ("Invalid group reference."); case PCRE_ERROR_NOMEMORY: @@ -245,8 +256,9 @@ bool Pattern::matches (void) throw (match_error) bool Pattern::matches (const std::string& subject) throw (match_error) { - //printf("Current offset: %d, old offset: %d", _offset[1], _offset[0]); - //printf("Trying <start>%s<end>", subject.substr(_offset[1]).c_str()); + printf("Pattern::matches\n"); + printf(" Current offset: %d, old offset: %d", _offset[1], _offset[0]); + printf(" Trying <start>%s<end>\n", subject.substr(_offset[1]).c_str()); // Try to find a match for this pattern int rc = pcre_exec ( @@ -263,7 +275,7 @@ bool Pattern::matches (const std::string& subject) throw (match_error) if (rc < 0) { _offset[0] = _offset[1] = 0; - //printf("Matching failed with %d", rc); + printf(" Matching failed with %d\n", rc); return false; } @@ -274,7 +286,7 @@ bool Pattern::matches (const std::string& subject) throw (match_error) _offset[1] = _ovector[1] + _offset[0]; } - //printf("Matching succeeded with %d to %d", (int) start(), (int) end()); + printf(" Matching succeeded with %d to %d\n", (int) start(), (int) end()); // Matching succeded but not enough space. if (rc == 0) { @@ -284,7 +296,8 @@ bool Pattern::matches (const std::string& subject) throw (match_error) // Matching succeeded. Keep the number of substrings for // subsequent calls to group(). - _count = rc; + printf("_count: %i = %i\n", _count, rc); + _count = rc; return true; } @@ -300,6 +313,8 @@ std::vector<std::string> Pattern::split (void) tokenStart = start(); substringSplitted.push_back (_subject.substr (tokenEnd + 1, tokenStart - tokenEnd - 1)); + printf("split: %s\n", _subject.substr (tokenEnd + 1, + tokenStart - tokenEnd - 1).c_str()); tokenEnd = end(); } diff --git a/sflphone-common/src/sip/SdesNegotiator.cpp b/sflphone-common/src/sip/SdesNegotiator.cpp index f0b837a453..8e95937832 100644 --- a/sflphone-common/src/sip/SdesNegotiator.cpp +++ b/sflphone-common/src/sip/SdesNegotiator.cpp @@ -20,6 +20,7 @@ #include "Pattern.h" +#include <cstdio> #include <iostream> #include <sstream> #include <algorithm> @@ -101,10 +102,11 @@ void SdesNegotiator::parse (void) // Split the line into its component // that we will analyze further down. - + std::vector<std::string> sdesLine; + *generalSyntaxPattern << (*iter); - std::vector<std::string> sdesLine; - + + try { sdesLine = generalSyntaxPattern->split(); @@ -114,11 +116,14 @@ void SdesNegotiator::parse (void) } catch (match_error& exception) { throw parse_error ("Error while analyzing the SDES line."); } + // Check if the attribute starts with a=crypto // and get the tag for this line *tagPattern << sdesLine.at (0); + printf("sdesLine.at (0).c_str() : %s\n", sdesLine.at (0).c_str()); + try { std::string tag = tagPattern->group ("tag"); std::cout << "tag = " << tag << std::endl; diff --git a/sflphone-common/test/sdesnegotiatorTest.cpp b/sflphone-common/test/sdesnegotiatorTest.cpp index cf21580649..749ef1b0a6 100644 --- a/sflphone-common/test/sdesnegotiatorTest.cpp +++ b/sflphone-common/test/sdesnegotiatorTest.cpp @@ -41,6 +41,19 @@ using std::endl; void SdesNegotiatorTest::setUp() { + // std::string attr("1 AES_CM_128_HMAC_SHA1_32 srtp inline:16/14/AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwd/2^20/1:32"); + + std::string attr("a=crypto:1 AES_CM_128_HMAC_SHA1_80 inline:d0RmdmcmVCspeEc3QGZiNWpVLFJhQX1cfHAwJSoj|2^20|1:32"); + + remoteOffer = new std::vector<std::string>(); + remoteOffer->push_back(attr); + + localCapabilities = new std::vector<sfl::CryptoSuiteDefinition>(); + for(int i = 0; i < 3; i++) { + localCapabilities->push_back(sfl::CryptoSuites[i]); + } + + sdesnego = new sfl::SdesNegotiator(*localCapabilities, *remoteOffer); } @@ -48,12 +61,20 @@ void SdesNegotiatorTest::setUp() void SdesNegotiatorTest::tearDown() { + delete remoteOffer; + remoteOffer = NULL; + + delete localCapabilities; + localCapabilities = NULL; + + delete sdesnego; + sdesnego = NULL; + } void SdesNegotiatorTest::testNegotiation() { - - + CPPUNIT_ASSERT(sdesnego->negotiate()); } diff --git a/sflphone-common/test/sdesnegotiatorTest.h b/sflphone-common/test/sdesnegotiatorTest.h index 16c2dfb7f8..119ba9a2c7 100644 --- a/sflphone-common/test/sdesnegotiatorTest.h +++ b/sflphone-common/test/sdesnegotiatorTest.h @@ -29,6 +29,7 @@ #include <sstream> #include <ccrtp/rtp.h> +#include <vector> // pjsip import #include <pjsip.h> @@ -84,6 +85,12 @@ class SdesNegotiatorTest : public CppUnit::TestCase { private: + sfl::SdesNegotiator *sdesnego; + + std::vector<std::string> *remoteOffer; + + std::vector<sfl::CryptoSuiteDefinition> *localCapabilities; + }; /* Register our test module */ -- GitLab From fbaf32a5e0be715bb670368aa6a87784352e0029 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Wed, 13 Jan 2010 10:58:57 -0500 Subject: [PATCH 154/188] [#1722] Working test suite for SdesNegociator --- sflphone-common/src/sip/Pattern.cpp | 35 +++++++------ sflphone-common/src/sip/SdesNegotiator.cpp | 13 ++++- sflphone-common/test/sdesnegotiatorTest.cpp | 56 +++++++++++++++++++++ sflphone-common/test/sdesnegotiatorTest.h | 15 +++++- 4 files changed, 97 insertions(+), 22 deletions(-) diff --git a/sflphone-common/src/sip/Pattern.cpp b/sflphone-common/src/sip/Pattern.cpp index 2e7619fd76..71e093d13c 100644 --- a/sflphone-common/src/sip/Pattern.cpp +++ b/sflphone-common/src/sip/Pattern.cpp @@ -32,7 +32,7 @@ Pattern::Pattern (const std::string& pattern, const std::string& options) : _options (0) { - printf("Pattern constructor called for %s!\n", pattern.c_str()); + // printf("Pattern constructor called for %s!\n", pattern.c_str()); // Set offsets _offset[0] = _offset[1] = 0; @@ -126,7 +126,7 @@ std::vector<std::string> Pattern::groups (void) while (stringList[i] != NULL) { matchedSubstrings.push_back (stringList[i]); - printf ("Substr: <start>%s<end>", stringList[i]); + // printf ("Substr: <start>%s<end>", stringList[i]); i++; } @@ -139,7 +139,7 @@ std::string Pattern::group (int groupNumber) { const char * stringPtr; - printf("_subject.substr : %s\n", _subject.substr (_offset[0]).c_str()); + // printf("_subject.substr : %s\n", _subject.substr (_offset[0]).c_str()); int rc = pcre_get_substring ( _subject.substr (_offset[0]).c_str(), @@ -173,10 +173,6 @@ std::string Pattern::group (const std::string& groupName) { const char * stringPtr = NULL; - printf("Pattern::group %s\n", groupName.c_str()); - printf("_subject.substr : %s\n", _subject.substr (_offset[0]).c_str()); - printf("_count : %i\n", _count); - int rc = pcre_get_named_substring ( _re, _subject.substr (_offset[0]).c_str(), @@ -185,19 +181,22 @@ std::string Pattern::group (const std::string& groupName) groupName.c_str(), &stringPtr); - printf("stringPtr : %s\n", stringPtr); + // printf(" _count : %i\n", _count); + // printf("stringPtr : %s\n", stringPtr); if (rc < 0) { switch (rc) { case PCRE_ERROR_NOSUBSTRING: - printf("Pattern::PCRE_ERROR_NOSUBSTRING\n"); + // printf("Pattern::PCRE_ERROR_NOSUBSTRING\n"); throw std::out_of_range ("Invalid group reference."); case PCRE_ERROR_NOMEMORY: + // printf("Pattern::PCRE_ERROR_NOMEMORY\n"); throw match_error ("Memory exhausted."); default: + // printf("Pattern::default match error\n"); throw match_error ("Failed to get named substring."); } } @@ -251,14 +250,14 @@ size_t Pattern::end (void) const bool Pattern::matches (void) throw (match_error) { - matches (_subject); + return matches (_subject); } bool Pattern::matches (const std::string& subject) throw (match_error) { - printf("Pattern::matches\n"); - printf(" Current offset: %d, old offset: %d", _offset[1], _offset[0]); - printf(" Trying <start>%s<end>\n", subject.substr(_offset[1]).c_str()); + // printf("Pattern::matches\n"); + // printf(" Current offset: %d, old offset: %d", _offset[1], _offset[0]); + // printf(" Trying <start>%s<end>\n", subject.substr(_offset[1]).c_str()); // Try to find a match for this pattern int rc = pcre_exec ( @@ -275,7 +274,7 @@ bool Pattern::matches (const std::string& subject) throw (match_error) if (rc < 0) { _offset[0] = _offset[1] = 0; - printf(" Matching failed with %d\n", rc); + // printf(" Matching failed with %d\n", rc); return false; } @@ -286,7 +285,7 @@ bool Pattern::matches (const std::string& subject) throw (match_error) _offset[1] = _ovector[1] + _offset[0]; } - printf(" Matching succeeded with %d to %d\n", (int) start(), (int) end()); + // printf(" Matching succeeded with %d to %d\n", (int) start(), (int) end()); // Matching succeded but not enough space. if (rc == 0) { @@ -296,7 +295,7 @@ bool Pattern::matches (const std::string& subject) throw (match_error) // Matching succeeded. Keep the number of substrings for // subsequent calls to group(). - printf("_count: %i = %i\n", _count, rc); + // printf("_count: %i = %i\n", _count, rc); _count = rc; return true; @@ -313,8 +312,8 @@ std::vector<std::string> Pattern::split (void) tokenStart = start(); substringSplitted.push_back (_subject.substr (tokenEnd + 1, tokenStart - tokenEnd - 1)); - printf("split: %s\n", _subject.substr (tokenEnd + 1, - tokenStart - tokenEnd - 1).c_str()); + // printf("split: %s\n", _subject.substr (tokenEnd + 1, + // tokenStart - tokenEnd - 1).c_str()); tokenEnd = end(); } diff --git a/sflphone-common/src/sip/SdesNegotiator.cpp b/sflphone-common/src/sip/SdesNegotiator.cpp index 8e95937832..40a736eeb2 100644 --- a/sflphone-common/src/sip/SdesNegotiator.cpp +++ b/sflphone-common/src/sip/SdesNegotiator.cpp @@ -59,9 +59,12 @@ void SdesNegotiator::parse (void) * sessionParamPattern; try { + + // used to match white space (which are used as separator) generalSyntaxPattern = new Pattern ("[\x20\x09]+", "g"); - tagPattern = new Pattern ("^a=crypto:(?P<tag>[0-9]{1,9})"); + tagPattern = new Pattern ("^a=crypto:(?P<tag>[0-9]{1,9})", "g"); + // tagPattern = new Pattern ("[0-9]"); cryptoSuitePattern = new Pattern ( "(?P<cryptoSuite>AES_CM_128_HMAC_SHA1_80|" \ @@ -90,10 +93,12 @@ void SdesNegotiator::parse (void) throw parse_error ("A compile exception occured on a pattern."); } + // Take each line from the vector // and parse its content + std::vector<std::string>::iterator iter; for (iter = _remoteAttribute.begin(); iter != _remoteAttribute.end(); iter++) { @@ -122,7 +127,7 @@ void SdesNegotiator::parse (void) // and get the tag for this line *tagPattern << sdesLine.at (0); - printf("sdesLine.at (0).c_str() : %s\n", sdesLine.at (0).c_str()); + tagPattern->matches(); try { std::string tag = tagPattern->group ("tag"); @@ -135,6 +140,8 @@ void SdesNegotiator::parse (void) // its value. *cryptoSuitePattern << sdesLine.at (1); + cryptoSuitePattern->matches(); + try { std::string cryptoSuite; cryptoSuite = cryptoSuitePattern->group ("cryptoSuite"); @@ -197,4 +204,6 @@ void SdesNegotiator::parse (void) bool SdesNegotiator::negotiate (void) { parse(); + + return true; } diff --git a/sflphone-common/test/sdesnegotiatorTest.cpp b/sflphone-common/test/sdesnegotiatorTest.cpp index 749ef1b0a6..bf5f442aa3 100644 --- a/sflphone-common/test/sdesnegotiatorTest.cpp +++ b/sflphone-common/test/sdesnegotiatorTest.cpp @@ -72,6 +72,62 @@ void SdesNegotiatorTest::tearDown() } +void SdesNegotiatorTest::testTagPattern() +{ + std::string subject = "a=crypto:4"; + + pattern = new sfl::Pattern("^a=crypto:(?P<tag>[0-9]{1,9})"); + *pattern << subject; + + CPPUNIT_ASSERT(pattern->matches()); + CPPUNIT_ASSERT(pattern->group("tag").compare("4") == 0); + + delete pattern; + pattern = NULL; +} + + +void SdesNegotiatorTest::testCryptoSuitePattern() +{ + std::string subject = "AES_CM_128_HMAC_SHA1_80"; + + pattern = new sfl::Pattern("(?P<cryptoSuite>AES_CM_128_HMAC_SHA1_80|" \ + "AES_CM_128_HMAC_SHA1_32|" \ + "F8_128_HMAC_SHA1_80|" \ + "[A-Za-z0-9_]+)"); + *pattern << subject; + + CPPUNIT_ASSERT(pattern->matches()); + CPPUNIT_ASSERT(pattern->group("cryptoSuite").compare("AES_CM_128_HMAC_SHA1_80") == 0); + + delete pattern; + pattern = NULL; +} + + +void SdesNegotiatorTest::testKeyParamsPattern() +{ + + std::string subject = "inline:d0RmdmcmVCspeEc3QGZiNWpVLFJhQX1cfHAwJSoj|2^20|1:32"; + + pattern = new sfl::Pattern("(?P<srtpKeyMethod>inline|[A-Za-z0-9_]+)\\:" \ + "(?P<srtpKeyInfo>[A-Za-z0-9\x2B\x2F\x3D]+)\\|" \ + "2\\^(?P<lifetime>[0-9]+)\\|" \ + "(?P<mkiValue>[0-9]+)\\:" \ + "(?P<mkiLength>[0-9]{1,3})\\;?"); + + *pattern << subject; + + CPPUNIT_ASSERT(pattern->matches()); + CPPUNIT_ASSERT(pattern->group("srtpKeyMethod").compare("inline:")); + // printf("srtpKeyInfo %s\n", pattern->group("srtpKeyInfo").c_str()); + // CPPUNIT_ASSERT(pattern->group("srtpKeyInfo").compare("d0RmdmcmVCspeEc3QGZiNWpVLFJhQX1cfHAwJSoj")); + + delete pattern; + pattern = NULL; +} + + void SdesNegotiatorTest::testNegotiation() { CPPUNIT_ASSERT(sdesnego->negotiate()); diff --git a/sflphone-common/test/sdesnegotiatorTest.h b/sflphone-common/test/sdesnegotiatorTest.h index 119ba9a2c7..4e97a9d6da 100644 --- a/sflphone-common/test/sdesnegotiatorTest.h +++ b/sflphone-common/test/sdesnegotiatorTest.h @@ -40,7 +40,7 @@ // Application import #include "sip/SdesNegotiator.h" - +#include "sip/Pattern.h" // #include "config/config.h" // #include "user_cfg.h" @@ -62,7 +62,10 @@ class SdesNegotiatorTest : public CppUnit::TestCase { * Use cppunit library macros to add unit test the factory */ CPPUNIT_TEST_SUITE( SdesNegotiatorTest ); - CPPUNIT_TEST( testNegotiation ); + CPPUNIT_TEST( testTagPattern ); + CPPUNIT_TEST( testCryptoSuitePattern ); + CPPUNIT_TEST( testKeyParamsPattern ); + CPPUNIT_TEST( testNegotiation ); CPPUNIT_TEST_SUITE_END(); public: @@ -81,10 +84,18 @@ class SdesNegotiatorTest : public CppUnit::TestCase { */ inline void tearDown(); + void testTagPattern(); + + void testCryptoSuitePattern(); + + void testKeyParamsPattern(); + void testNegotiation(); private: + sfl::Pattern *pattern; + sfl::SdesNegotiator *sdesnego; std::vector<std::string> *remoteOffer; -- GitLab From 01b091924b1651be697e231a33275068d061e43f Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Wed, 13 Jan 2010 11:27:23 -0500 Subject: [PATCH 155/188] [#1722] Add accessors in SdesNegotiator to get srtp info after negotiation --- sflphone-common/src/sip/SdesNegotiator.cpp | 31 +++++----- sflphone-common/src/sip/SdesNegotiator.h | 64 ++++++++++++++++++++- sflphone-common/test/sdesnegotiatorTest.cpp | 30 ++++++++-- 3 files changed, 100 insertions(+), 25 deletions(-) diff --git a/sflphone-common/src/sip/SdesNegotiator.cpp b/sflphone-common/src/sip/SdesNegotiator.cpp index 40a736eeb2..e8618e3ab8 100644 --- a/sflphone-common/src/sip/SdesNegotiator.cpp +++ b/sflphone-common/src/sip/SdesNegotiator.cpp @@ -143,9 +143,8 @@ void SdesNegotiator::parse (void) cryptoSuitePattern->matches(); try { - std::string cryptoSuite; - cryptoSuite = cryptoSuitePattern->group ("cryptoSuite"); - std::cout << "crypto-suite = " << cryptoSuite << std::endl; + _cryptoSuite = cryptoSuitePattern->group ("cryptoSuite"); + std::cout << "crypto-suite = " << _cryptoSuite << std::endl; } catch (match_error& exception) { throw parse_error ("Error while parsing the crypto-suite field"); } @@ -155,25 +154,21 @@ void SdesNegotiator::parse (void) try { while (keyParamsPattern->matches()) { - std::string srtpKeyMethod; - srtpKeyMethod = keyParamsPattern->group ("srtpKeyMethod"); - std::cout << "srtp-key-method = " << srtpKeyMethod << std::endl; + + _srtpKeyMethod = keyParamsPattern->group ("srtpKeyMethod"); + std::cout << "srtp-key-method = " << _srtpKeyMethod << std::endl; - std::string srtpKeyInfo; - srtpKeyInfo = keyParamsPattern->group ("srtpKeyInfo"); - std::cout << "srtp-key-info = " << srtpKeyInfo << std::endl; + _srtpKeyInfo = keyParamsPattern->group ("srtpKeyInfo"); + std::cout << "srtp-key-info = " << _srtpKeyInfo << std::endl; - std::string lifetime; - lifetime = keyParamsPattern->group ("lifetime"); - std::cout << "lifetime = " << lifetime << std::endl; + _lifetime = keyParamsPattern->group ("lifetime"); + std::cout << "lifetime = " << _lifetime << std::endl; - std::string mkiValue; - mkiValue = keyParamsPattern->group ("mkiValue"); - std::cout << "mkiValue = " << mkiValue << std::endl; + _mkiValue = keyParamsPattern->group ("mkiValue"); + std::cout << "mkiValue = " << _mkiValue << std::endl; - std::string mkiLength; - mkiLength = keyParamsPattern->group ("mkiLength"); - std::cout << "mkiLength = " << mkiLength << std::endl; + _mkiLength = keyParamsPattern->group ("mkiLength"); + std::cout << "mkiLength = " << _mkiLength << std::endl; } } catch (match_error& exception) { throw parse_error ("Error while parsing the key-params field"); diff --git a/sflphone-common/src/sip/SdesNegotiator.h b/sflphone-common/src/sip/SdesNegotiator.h index 2dded5b1a7..08e32090ef 100644 --- a/sflphone-common/src/sip/SdesNegotiator.h +++ b/sflphone-common/src/sip/SdesNegotiator.h @@ -97,9 +97,38 @@ namespace sfl { SdesNegotiator(const std::vector<CryptoSuiteDefinition>& localCapabilites, const std::vector<std::string>& remoteAttribute); ~SdesNegotiator() { }; - public: bool negotiate(void); + /** + * Return crypto suite after negotiation + */ + std::string getCryptoSuite(void) { return _cryptoSuite; } + + /** + * Return key method after negotiation (most likely inline:) + */ + std::string getKeyMethod(void) { return _srtpKeyMethod; } + + /** + * Return crypto suite after negotiation + */ + std::string getKeyInfo(void) { return _srtpKeyInfo; } + + /** + * Return key lifetime after negotiation + */ + std::string getLifeTime(void) { return _lifetime; } + + /** + * Return mki value after negotiation + */ + std::string getMkiValue(void) { return _mkiValue; } + + /** + * Return mki length after negotiation + */ + std::string getMkiLength(void) { return _mkiLength; } + private: /** * A vector list containing the remote attributes. @@ -107,12 +136,41 @@ namespace sfl { * prefered method is then chosen from that list. */ std::vector<std::string> _remoteAttribute; + std::vector<CryptoSuiteDefinition> _localCapabilities; - + /** + * Selected crypto suite after negotiation + */ + std::string _cryptoSuite; - private: + /** + * Selected key method after negotiation (most likely inline:) + */ + std::string _srtpKeyMethod; + + /** + * Selected crypto suite after negotiation + */ + std::string _srtpKeyInfo; + + /** + * Selected key lifetime after negotiation + */ + std::string _lifetime; + + /** + * Selected mki value after negotiation + */ + std::string _mkiValue; + + /** + * Selected mki length after negotiation + */ + std::string _mkiLength; + void parse(void); + CryptoAttribute * tokenize(const std::string& attributeLine); }; } diff --git a/sflphone-common/test/sdesnegotiatorTest.cpp b/sflphone-common/test/sdesnegotiatorTest.cpp index bf5f442aa3..ec20866452 100644 --- a/sflphone-common/test/sdesnegotiatorTest.cpp +++ b/sflphone-common/test/sdesnegotiatorTest.cpp @@ -114,14 +114,30 @@ void SdesNegotiatorTest::testKeyParamsPattern() "(?P<srtpKeyInfo>[A-Za-z0-9\x2B\x2F\x3D]+)\\|" \ "2\\^(?P<lifetime>[0-9]+)\\|" \ "(?P<mkiValue>[0-9]+)\\:" \ - "(?P<mkiLength>[0-9]{1,3})\\;?"); + "(?P<mkiLength>[0-9]{1,3})\\;?", "g"); *pattern << subject; - CPPUNIT_ASSERT(pattern->matches()); + pattern->matches(); + CPPUNIT_ASSERT(pattern->group("srtpKeyMethod").compare("inline:")); + + /* + while (pattern->matches()) { + + std::string _srtpKeyMethod = pattern->group ("srtpKeyMethod"); + std::string _srtpKeyInfo = pattern->group ("srtpKeyInfo"); + std::string _lifetime = pattern->group ("lifetime"); + std::string _mkiValue = pattern->group ("mkiValue"); + std::string _mkiLength = pattern->group ("mkiLength"); + } + + CPPUNIT_ASSERT(pattern->group("srtpKeyMethod").compare("inline:")); - // printf("srtpKeyInfo %s\n", pattern->group("srtpKeyInfo").c_str()); - // CPPUNIT_ASSERT(pattern->group("srtpKeyInfo").compare("d0RmdmcmVCspeEc3QGZiNWpVLFJhQX1cfHAwJSoj")); + CPPUNIT_ASSERT(pattern->group("srtpKeyInfo").compare("d0RmdmcmVCspeEc3QGZiNWpVLFJhQX1cfHAwJSoj")); + CPPUNIT_ASSERT(pattern->group("lifetime").compare("20")); + CPPUNIT_ASSERT(pattern->group("mkivalue").compare("1")); + CPPUNIT_ASSERT(pattern->group("mkilength").compare("32")); + */ delete pattern; pattern = NULL; @@ -131,6 +147,12 @@ void SdesNegotiatorTest::testKeyParamsPattern() void SdesNegotiatorTest::testNegotiation() { CPPUNIT_ASSERT(sdesnego->negotiate()); + CPPUNIT_ASSERT(sdesnego->getCryptoSuite().compare("AES_CM_128_HMAC_SHA1_80") == 0); + CPPUNIT_ASSERT(sdesnego->getKeyMethod().compare("inline") == 0); + CPPUNIT_ASSERT(sdesnego->getKeyInfo().compare("d0RmdmcmVCspeEc3QGZiNWpVLFJhQX1cfHAwJSoj") == 0); + CPPUNIT_ASSERT(sdesnego->getLifeTime().compare("20") == 0); + CPPUNIT_ASSERT(sdesnego->getMkiValue().compare("1") == 0); + CPPUNIT_ASSERT(sdesnego->getMkiLength().compare("32") == 0); } -- GitLab From fe4619f206a4b285320199b2473f90a8e37506ba Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Wed, 13 Jan 2010 12:02:40 -0500 Subject: [PATCH 156/188] [#1722] Added setRemoteCryptoInfo function in AudioSrtpSession/AudioRtpFactory --- .../src/audio/audiortp/AudioRtpFactory.cpp | 14 +++- .../src/audio/audiortp/AudioRtpFactory.h | 8 ++- .../src/audio/audiortp/AudioSrtpSession.cpp | 65 ++++++++++--------- .../src/audio/audiortp/AudioSrtpSession.h | 8 ++- sflphone-common/src/sip/sipvoiplink.cpp | 10 +++ 5 files changed, 71 insertions(+), 34 deletions(-) diff --git a/sflphone-common/src/audio/audiortp/AudioRtpFactory.cpp b/sflphone-common/src/audio/audiortp/AudioRtpFactory.cpp index e5fdf99b8c..921e4a908b 100644 --- a/sflphone-common/src/audio/audiortp/AudioRtpFactory.cpp +++ b/sflphone-common/src/audio/audiortp/AudioRtpFactory.cpp @@ -110,7 +110,7 @@ void AudioRtpFactory::initAudioRtpSession (SIPCall * ca) _rtpSession = new AudioSrtpSession (&Manager::instance(), ca); _rtpSessionType = Sdes; - ca->getLocalSDP()->set_srtp_crypto(static_cast<AudioSrtpSession *> (_rtpSession)->getCryptoSdpInfo()); + ca->getLocalSDP()->set_srtp_crypto(static_cast<AudioSrtpSession *> (_rtpSession)->getLocalCryptoInfo()); break; default: @@ -197,4 +197,16 @@ sfl::AudioZrtpSession * AudioRtpFactory::getAudioZrtpSession() throw AudioRtpFactoryException(); } } + +void AudioRtpFactory::setRemoteCryptoInfo() +{ + if ( (_rtpSessionType != NULL) && (_rtpSessionType != Sdes)) { + static_cast<AudioSrtpSession *> (_rtpSession)->setRemoteCryptoInfo(); + } + else { + throw AudioRtpFactoryException(); + } +} } + + diff --git a/sflphone-common/src/audio/audiortp/AudioRtpFactory.h b/sflphone-common/src/audio/audiortp/AudioRtpFactory.h index 9d827a5d87..4214980106 100644 --- a/sflphone-common/src/audio/audiortp/AudioRtpFactory.h +++ b/sflphone-common/src/audio/audiortp/AudioRtpFactory.h @@ -91,7 +91,13 @@ namespace sfl { * if the current rtp thread is null, or if it's not of the correct type. * @return The current AudioZrtpSession thread. */ - sfl::AudioZrtpSession * getAudioZrtpSession(); + sfl::AudioZrtpSession * getAudioZrtpSession(); + + /** + * Set remote cryptographic info. Should be called after negotiation in SDP + * offer/answer session. + */ + void setRemoteCryptoInfo(); private: void * _rtpSession; diff --git a/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp b/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp index 5471e4dd67..44e23dd9b2 100644 --- a/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp +++ b/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp @@ -52,14 +52,14 @@ AudioSrtpSession::AudioSrtpSession (ManagerImpl * manager, SIPCall * sipcall) : initializeInputCryptoContext(); initializeOutputCryptoContext(); - outputCryptoCtx->deriveSrtpKeys(0); + _outputCryptoCtx->deriveSrtpKeys(0); - setInQueueCryptoContext(inputCryptoCtx); - setOutQueueCryptoContext(outputCryptoCtx); + setInQueueCryptoContext(_inputCryptoCtx); + setOutQueueCryptoContext(_outputCryptoCtx); } -std::string AudioSrtpSession::getCryptoSdpInfo() { +std::string AudioSrtpSession::getLocalCryptoInfo() { _debug("Get Cryptographic info from this rtp session"); @@ -86,6 +86,13 @@ std::string AudioSrtpSession::getCryptoSdpInfo() { } +void AudioSrtpSession::setRemoteCryptoInfo() { + + _debug("Set remote Cryptographic info for this rtp session"); + +} + + void AudioSrtpSession::initializeMasterKey(void) { _masterKeyLength = 16; @@ -131,31 +138,9 @@ std::string AudioSrtpSession::getBase64ConcatenatedKeys() void AudioSrtpSession::initializeInputCryptoContext(void) { - // this one does not works - // inputCryptoCtx = new ost::CryptoContext(IncomingDataQueue::getLocalSSRCNetwork(), - inputCryptoCtx = new ost::CryptoContext(0x0, - 0, // roc, - 0L, // keydr, - SrtpEncryptionAESCM, // encryption algo - SrtpAuthenticationSha1Hmac, // authtication algo - _masterKey, // Master Key - 128 / 8, // Master Key length - _masterSalt, // Master Salt - 112 / 8, // Master Salt length - 128 / 8, // encryption keyl - 160 / 8, // authentication key len - 112 / 8, // session salt len - 80 / 8); // authentication tag len - - -} - -void AudioSrtpSession::initializeOutputCryptoContext(void) -{ - - // this one works - // outputCryptoCtx = new ost::CryptoContext(OutgoingDataQueue::getLocalSSRC(), - outputCryptoCtx = new ost::CryptoContext(OutgoingDataQueue::getLocalSSRC(), + // this one does not works + // inputCryptoCtx = new ost::CryptoContext(IncomingDataQueue::getLocalSSRCNetwork(), + _inputCryptoCtx = new ost::CryptoContext(0x0, 0, // roc, 0L, // keydr, SrtpEncryptionAESCM, // encryption algo @@ -169,6 +154,28 @@ void AudioSrtpSession::initializeOutputCryptoContext(void) 112 / 8, // session salt len 80 / 8); // authentication tag len + +} + +void AudioSrtpSession::initializeOutputCryptoContext(void) +{ + + // this one works + // outputCryptoCtx = new ost::CryptoContext(OutgoingDataQueue::getLocalSSRC(), + _outputCryptoCtx = new ost::CryptoContext(OutgoingDataQueue::getLocalSSRC(), + 0, // roc, + 0L, // keydr, + SrtpEncryptionAESCM, // encryption algo + SrtpAuthenticationSha1Hmac, // authtication algo + _masterKey, // Master Key + 128 / 8, // Master Key length + _masterSalt, // Master Salt + 112 / 8, // Master Salt length + 128 / 8, // encryption keyl + 160 / 8, // authentication key len + 112 / 8, // session salt len + 80 / 8); // authentication tag len + } diff --git a/sflphone-common/src/audio/audiortp/AudioSrtpSession.h b/sflphone-common/src/audio/audiortp/AudioSrtpSession.h index cf932f257d..a41a90361b 100644 --- a/sflphone-common/src/audio/audiortp/AudioSrtpSession.h +++ b/sflphone-common/src/audio/audiortp/AudioSrtpSession.h @@ -42,7 +42,9 @@ namespace sfl { AudioSrtpSession(ManagerImpl * manager, SIPCall * sipcall); - std::string getCryptoSdpInfo(void); + std::string getLocalCryptoInfo(void); + + void setRemoteCryptoInfo(void); private: @@ -68,9 +70,9 @@ namespace sfl { int _masterSaltLength; - ost::CryptoContext* inputCryptoCtx; + ost::CryptoContext* _inputCryptoCtx; - ost::CryptoContext* outputCryptoCtx; + ost::CryptoContext* _outputCryptoCtx; }; } diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp index b28606f29d..9c0fba7f7d 100644 --- a/sflphone-common/src/sip/sipvoiplink.cpp +++ b/sflphone-common/src/sip/sipvoiplink.cpp @@ -3217,6 +3217,8 @@ void call_on_media_update (pjsip_inv_session *inv, pj_status_t status) pjmedia_sdp_attr *attribute; call->getLocalSDP()->get_remote_sdp_crypto_from_offer(remote_sdp, &attribute); + + // create remote cryptografic offer std::vector<std::string> remoteOffer; @@ -3231,6 +3233,14 @@ void call_on_media_update (pjsip_inv_session *inv, pj_status_t status) sfl::SdesNegotiator sdesnego(localCapabilities, remoteOffer); + sdesnego.negotiate(); + + if(sdesnego.negotiate()) { + _debug("******************** Negociation Is Successfull *********************\n"); + + call->getAudioRtp()->setRemoteCryptoInfo(); + } + try { call->setAudioStart (true); -- GitLab From 11814fe48b293dd4e83708243f4845aa8458b4cb Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Wed, 13 Jan 2010 13:08:55 -0500 Subject: [PATCH 157/188] [#1722] Acquire remote keys from sdes session --- .../src/audio/audiortp/AudioRtpFactory.cpp | 7 +- .../src/audio/audiortp/AudioRtpFactory.h | 6 +- .../src/audio/audiortp/AudioSrtpSession.cpp | 76 +++++++++++++------ .../src/audio/audiortp/AudioSrtpSession.h | 34 ++++++--- sflphone-common/src/sip/sipvoiplink.cpp | 38 +++++----- 5 files changed, 104 insertions(+), 57 deletions(-) diff --git a/sflphone-common/src/audio/audiortp/AudioRtpFactory.cpp b/sflphone-common/src/audio/audiortp/AudioRtpFactory.cpp index 921e4a908b..1a2c14ff79 100644 --- a/sflphone-common/src/audio/audiortp/AudioRtpFactory.cpp +++ b/sflphone-common/src/audio/audiortp/AudioRtpFactory.cpp @@ -26,6 +26,7 @@ #include "manager.h" #include "account.h" #include "sip/sipcall.h" +#include "sip/SdesNegotiator.h" #include <assert.h> @@ -198,10 +199,10 @@ sfl::AudioZrtpSession * AudioRtpFactory::getAudioZrtpSession() } } -void AudioRtpFactory::setRemoteCryptoInfo() + void AudioRtpFactory::setRemoteCryptoInfo(sfl::SdesNegotiator& nego) { - if ( (_rtpSessionType != NULL) && (_rtpSessionType != Sdes)) { - static_cast<AudioSrtpSession *> (_rtpSession)->setRemoteCryptoInfo(); + if ( (_rtpSessionType != NULL) && (_rtpSessionType == Sdes)) { + static_cast<AudioSrtpSession *> (_rtpSession)->setRemoteCryptoInfo(nego); } else { throw AudioRtpFactoryException(); diff --git a/sflphone-common/src/audio/audiortp/AudioRtpFactory.h b/sflphone-common/src/audio/audiortp/AudioRtpFactory.h index 4214980106..5165cbffc1 100644 --- a/sflphone-common/src/audio/audiortp/AudioRtpFactory.h +++ b/sflphone-common/src/audio/audiortp/AudioRtpFactory.h @@ -22,7 +22,11 @@ #include <stdexcept> #include <cc++/thread.h> +#include "sip/SdesNegotiator.h" + +class SdesNegotiator; class SIPCall; + namespace sfl { class AudioZrtpSession; class AudioSrtpSession; @@ -97,7 +101,7 @@ namespace sfl { * Set remote cryptographic info. Should be called after negotiation in SDP * offer/answer session. */ - void setRemoteCryptoInfo(); + void setRemoteCryptoInfo(sfl::SdesNegotiator& nego); private: void * _rtpSession; diff --git a/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp b/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp index 44e23dd9b2..0c62c1a9d1 100644 --- a/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp +++ b/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp @@ -47,15 +47,15 @@ AudioSrtpSession::AudioSrtpSession (ManagerImpl * manager, SIPCall * sipcall) : AudioRtpSession<AudioSrtpSession> (manager, sipcall) { _debug ("***************** AudioSrtpSession initialized *********************"); - initializeMasterKey(); - initializeMasterSalt(); - initializeInputCryptoContext(); - initializeOutputCryptoContext(); + initializeLocalMasterKey(); + initializeLocalMasterSalt(); + // initializeRemoteCryptoContext(); + initializeLocalCryptoContext(); - _outputCryptoCtx->deriveSrtpKeys(0); + _localCryptoCtx->deriveSrtpKeys(0); - setInQueueCryptoContext(_inputCryptoCtx); - setOutQueueCryptoContext(_outputCryptoCtx); + // setInQueueCryptoContext(_remoteCryptoCtx); + setOutQueueCryptoContext(_localCryptoCtx); } @@ -71,7 +71,7 @@ std::string AudioSrtpSession::getLocalCryptoInfo() { // format srtp keys as the following // inline:16/14/NzB4d1BINUAvLEw6UzF3WSJ+PSdFcGdUJShpX1Zj/2^20/1:32 std::string srtp_keys = "inline:"; - srtp_keys.append("16/14/"); + // srtp_keys.append("16/14/"); srtp_keys += getBase64ConcatenatedKeys(); srtp_keys.append("/2^20/1:32"); @@ -86,30 +86,33 @@ std::string AudioSrtpSession::getLocalCryptoInfo() { } -void AudioSrtpSession::setRemoteCryptoInfo() { +void AudioSrtpSession::setRemoteCryptoInfo(sfl::SdesNegotiator& nego) { _debug("Set remote Cryptographic info for this rtp session"); + unBase64ConcatenatedKeys(nego.getKeyInfo()); + + initializeRemoteCryptoContext(); } -void AudioSrtpSession::initializeMasterKey(void) +void AudioSrtpSession::initializeLocalMasterKey(void) { - _masterKeyLength = 16; + _localMasterKeyLength = 16; for(int i = 0; i < 16; i++) - _masterKey[i] = mk[i]; + _localMasterKey[i] = mk[i]; return; } -void AudioSrtpSession::initializeMasterSalt(void) +void AudioSrtpSession::initializeLocalMasterSalt(void) { - _masterSaltLength = 14; + _localMasterSaltLength = 14; for(int i = 0; i < 14; i++) - _masterSalt[i] = ms[i]; + _localMasterSalt[i] = ms[i]; return; @@ -121,8 +124,8 @@ std::string AudioSrtpSession::getBase64ConcatenatedKeys() // concatenate master and salt uint8 concatenated[30]; - memcpy((void*)concatenated, (void*)_masterKey, 16); - memcpy((void*)(concatenated+16), (void*)_masterSalt, 14); + memcpy((void*)concatenated, (void*)_localMasterKey, 16); + memcpy((void*)(concatenated+16), (void*)_localMasterSalt, 14); // encode concatenated keys in base64 char *output = encodeBase64((unsigned char*)concatenated, 30); @@ -135,19 +138,42 @@ std::string AudioSrtpSession::getBase64ConcatenatedKeys() } -void AudioSrtpSession::initializeInputCryptoContext(void) + void AudioSrtpSession::unBase64ConcatenatedKeys(std::string base64keys) +{ + + char *output = decodeBase64((unsigned char*)base64keys.c_str(), base64keys.size()); + + uint8 finally[30]; + memcpy((void*)finally, (void*)output, 30); + + printf("Master: "); + for(int i = 0; i < 16; i++) { + printf("%i", finally[i]); + } + printf("\n"); + printf("Salt: "); + for(int i = 16; i < 30; i++) { + printf("%i", finally[i]); + } + printf("\n"); + + free(output); +} + + +void AudioSrtpSession::initializeRemoteCryptoContext(void) { // this one does not works // inputCryptoCtx = new ost::CryptoContext(IncomingDataQueue::getLocalSSRCNetwork(), - _inputCryptoCtx = new ost::CryptoContext(0x0, + _remoteCryptoCtx = new ost::CryptoContext(0x0, 0, // roc, 0L, // keydr, SrtpEncryptionAESCM, // encryption algo SrtpAuthenticationSha1Hmac, // authtication algo - _masterKey, // Master Key + _remoteMasterKey, // Master Key 128 / 8, // Master Key length - _masterSalt, // Master Salt + _remoteMasterSalt, // Master Salt 112 / 8, // Master Salt length 128 / 8, // encryption keyl 160 / 8, // authentication key len @@ -157,19 +183,19 @@ void AudioSrtpSession::initializeInputCryptoContext(void) } -void AudioSrtpSession::initializeOutputCryptoContext(void) +void AudioSrtpSession::initializeLocalCryptoContext(void) { // this one works // outputCryptoCtx = new ost::CryptoContext(OutgoingDataQueue::getLocalSSRC(), - _outputCryptoCtx = new ost::CryptoContext(OutgoingDataQueue::getLocalSSRC(), + _localCryptoCtx = new ost::CryptoContext(OutgoingDataQueue::getLocalSSRC(), 0, // roc, 0L, // keydr, SrtpEncryptionAESCM, // encryption algo SrtpAuthenticationSha1Hmac, // authtication algo - _masterKey, // Master Key + _localMasterKey, // Master Key 128 / 8, // Master Key length - _masterSalt, // Master Salt + _localMasterSalt, // Master Salt 112 / 8, // Master Salt length 128 / 8, // encryption keyl 160 / 8, // authentication key len diff --git a/sflphone-common/src/audio/audiortp/AudioSrtpSession.h b/sflphone-common/src/audio/audiortp/AudioSrtpSession.h index a41a90361b..9055d07c31 100644 --- a/sflphone-common/src/audio/audiortp/AudioSrtpSession.h +++ b/sflphone-common/src/audio/audiortp/AudioSrtpSession.h @@ -20,9 +20,11 @@ #define __SFL_AUDIO_SRTP_SESSION_H__ #include "AudioRtpSession.h" +#include "sip/SdesNegotiator.h" #include <ccrtp/CryptoContext.h> +class SdesNegotiator; class ManagerImpl; class SIPCall; @@ -44,35 +46,45 @@ namespace sfl { std::string getLocalCryptoInfo(void); - void setRemoteCryptoInfo(void); + void setRemoteCryptoInfo(sfl::SdesNegotiator& nego); private: - void initializeMasterKey(void); + void initializeLocalMasterKey(void); - void initializeMasterSalt(void); + void initializeLocalMasterSalt(void); - void initializeInputCryptoContext(void); + void initializeRemoteCryptoContext(void); - void initializeOutputCryptoContext(void); + void initializeLocalCryptoContext(void); std::string getBase64ConcatenatedKeys(); + void unBase64ConcatenatedKeys(std::string base64keys); + char* encodeBase64(unsigned char *input, int length); char* decodeBase64(unsigned char *input, int length); - uint8 _masterKey[16]; + uint8 _localMasterKey[16]; + + int _localMasterKeyLength; + + uint8 _localMasterSalt[14]; + + int _localMasterSaltLength; + + uint8 _remoteMasterKey[16]; - int _masterKeyLength; + int _remoteMasterKeyLength; - uint8 _masterSalt[14]; + uint8 _remoteMasterSalt[14]; - int _masterSaltLength; + int _remoteMasterSaltLength; - ost::CryptoContext* _inputCryptoCtx; + ost::CryptoContext* _remoteCryptoCtx; - ost::CryptoContext* _outputCryptoCtx; + ost::CryptoContext* _localCryptoCtx; }; } diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp index 9c0fba7f7d..e173e0bd18 100644 --- a/sflphone-common/src/sip/sipvoiplink.cpp +++ b/sflphone-common/src/sip/sipvoiplink.cpp @@ -3214,34 +3214,38 @@ void call_on_media_update (pjsip_inv_session *inv, pj_status_t status) call->getLocalSDP()->set_media_transport_info_from_remote_sdp (remote_sdp); // Get the crypto attribute containing srtp's cryptographic context (keys, cipher) - pjmedia_sdp_attr *attribute; + pjmedia_sdp_attr *attribute = NULL; call->getLocalSDP()->get_remote_sdp_crypto_from_offer(remote_sdp, &attribute); - - - // create remote cryptografic offer - std::vector<std::string> remoteOffer; + if(attribute) { - std::string attr(attribute->value.ptr, attribute->value.slen); + _debug("Crypto attribute in SDP: init Srtp session"); - remoteOffer.push_back(attr); + // create remote cryptografic offer + std::vector<std::string> remoteOffer; - std::vector<sfl::CryptoSuiteDefinition>localCapabilities; - for(int i = 0; i < 3; i++) { - localCapabilities.push_back(sfl::CryptoSuites[i]); - } + // @TODO parser expects attribute names to be present, should not + std::string attr(attribute->value.ptr, attribute->value.slen); + std::string full_attr = "a=crypto:"; + full_attr += attr; + + remoteOffer.push_back(full_attr); - sfl::SdesNegotiator sdesnego(localCapabilities, remoteOffer); + std::vector<sfl::CryptoSuiteDefinition>localCapabilities; + for(int i = 0; i < 3; i++) { + localCapabilities.push_back(sfl::CryptoSuites[i]); + } - sdesnego.negotiate(); + sfl::SdesNegotiator sdesnego(localCapabilities, remoteOffer); + + if(sdesnego.negotiate()) { + _debug("******************** Negociation Is Successfull *********************\n"); - if(sdesnego.negotiate()) { - _debug("******************** Negociation Is Successfull *********************\n"); + call->getAudioRtp()->setRemoteCryptoInfo(sdesnego); + } - call->getAudioRtp()->setRemoteCryptoInfo(); } - try { call->setAudioStart (true); call->getAudioRtp()->start(); -- GitLab From 724a0e6b70c3ba3bf0f17099beac93232a11cc9a Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Wed, 13 Jan 2010 14:27:13 -0500 Subject: [PATCH 158/188] [#1722] Remove application from crypto attribute --- .../src/audio/audiortp/AudioSrtpSession.cpp | 40 ++++++++++++++----- sflphone-common/src/sip/sipvoiplink.cpp | 1 + 2 files changed, 30 insertions(+), 11 deletions(-) diff --git a/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp b/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp index 0c62c1a9d1..e60546ee23 100644 --- a/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp +++ b/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp @@ -46,7 +46,7 @@ AudioSrtpSession::AudioSrtpSession (ManagerImpl * manager, SIPCall * sipcall) : ost::SymmetricRTPSession (ost::InetHostAddress (sipcall->getLocalIp().c_str()), sipcall->getLocalAudioPort()), AudioRtpSession<AudioSrtpSession> (manager, sipcall) { - _debug ("***************** AudioSrtpSession initialized *********************"); + _debug ("***************** Initialize AudioSrtpSession *********************"); initializeLocalMasterKey(); initializeLocalMasterSalt(); // initializeRemoteCryptoContext(); @@ -77,7 +77,7 @@ std::string AudioSrtpSession::getLocalCryptoInfo() { std::string crypto = tag.append(" "); crypto += crypto_suite.append(" "); - crypto += application.append(" "); + // crypto += application.append(" "); crypto += srtp_keys; _debug("%s", crypto.c_str()); @@ -90,18 +90,28 @@ void AudioSrtpSession::setRemoteCryptoInfo(sfl::SdesNegotiator& nego) { _debug("Set remote Cryptographic info for this rtp session"); + _debug("nego.getKeyInfo() : %s", nego.getKeyInfo().c_str()); + unBase64ConcatenatedKeys(nego.getKeyInfo()); initializeRemoteCryptoContext(); + setInQueueCryptoContext(_remoteCryptoCtx); } void AudioSrtpSession::initializeLocalMasterKey(void) { + _debug("initializeLocalMasterKey"); + _localMasterKeyLength = 16; - for(int i = 0; i < 16; i++) + printf("Local Master: "); + for(int i = 0; i < 16; i++) { _localMasterKey[i] = mk[i]; + printf("%i", _localMasterKey[i]); + } + printf("\n"); + return; } @@ -111,8 +121,12 @@ void AudioSrtpSession::initializeLocalMasterSalt(void) { _localMasterSaltLength = 14; - for(int i = 0; i < 14; i++) + printf("Remote Salt: "); + for(int i = 0; i < 14; i++) { _localMasterSalt[i] = ms[i]; + printf("%i", _localMasterSalt[i]); + } + printf("\n"); return; @@ -141,19 +155,23 @@ std::string AudioSrtpSession::getBase64ConcatenatedKeys() void AudioSrtpSession::unBase64ConcatenatedKeys(std::string base64keys) { + printf("unBase64ConcatenatedKeys : base64keys %s\n", base64keys.c_str()); + printf("unBase64ConcatenatedKeys : size %i\n", (int)base64keys.size()); char *output = decodeBase64((unsigned char*)base64keys.c_str(), base64keys.size()); - uint8 finally[30]; - memcpy((void*)finally, (void*)output, 30); + uint8 concatenated[30]; + memcpy((void*)concatenated, (void*)output, 30); - printf("Master: "); + printf("Remote Master: "); for(int i = 0; i < 16; i++) { - printf("%i", finally[i]); + _remoteMasterKey[i] = concatenated[i]; + printf("%i", concatenated[i]); } printf("\n"); - printf("Salt: "); - for(int i = 16; i < 30; i++) { - printf("%i", finally[i]); + printf("Remote Salt: "); + for(int i = 14; i < 30; i++) { + _remoteMasterSalt[i-14] = concatenated[i]; + printf("%i", concatenated[i]); } printf("\n"); diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp index e173e0bd18..5a5885add8 100644 --- a/sflphone-common/src/sip/sipvoiplink.cpp +++ b/sflphone-common/src/sip/sipvoiplink.cpp @@ -3241,6 +3241,7 @@ void call_on_media_update (pjsip_inv_session *inv, pj_status_t status) if(sdesnego.negotiate()) { _debug("******************** Negociation Is Successfull *********************\n"); + _debug("keys : %s", sdesnego.getKeyInfo().c_str()); call->getAudioRtp()->setRemoteCryptoInfo(sdesnego); } -- GitLab From 5cf2efbed424989bbebc0a01041ecc59fbf5f509 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Wed, 13 Jan 2010 15:10:28 -0500 Subject: [PATCH 159/188] [#1722] Fix mkiLifetime mkiKeyLength separator --- sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp | 2 +- sflphone-common/src/sip/SdesNegotiator.cpp | 2 +- sflphone-common/test/sdesnegotiatorTest.cpp | 6 +++--- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp b/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp index e60546ee23..b4a7213aac 100644 --- a/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp +++ b/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp @@ -73,7 +73,7 @@ std::string AudioSrtpSession::getLocalCryptoInfo() { std::string srtp_keys = "inline:"; // srtp_keys.append("16/14/"); srtp_keys += getBase64ConcatenatedKeys(); - srtp_keys.append("/2^20/1:32"); + srtp_keys.append("|2^20|1:32"); std::string crypto = tag.append(" "); crypto += crypto_suite.append(" "); diff --git a/sflphone-common/src/sip/SdesNegotiator.cpp b/sflphone-common/src/sip/SdesNegotiator.cpp index e8618e3ab8..6720df78d9 100644 --- a/sflphone-common/src/sip/SdesNegotiator.cpp +++ b/sflphone-common/src/sip/SdesNegotiator.cpp @@ -74,7 +74,7 @@ void SdesNegotiator::parse (void) keyParamsPattern = new Pattern ( "(?P<srtpKeyMethod>inline|[A-Za-z0-9_]+)\\:" \ - "(?P<srtpKeyInfo>[A-Za-z0-9\x2B\x2F\x3D]+)\\|" \ + "(?P<srtpKeyInfo>[A-Za-z0-9\x2B\x2F\x3D]+|[\w\x2B\x2F\x3D]+)\\|" \ "2\\^(?P<lifetime>[0-9]+)\\|" \ "(?P<mkiValue>[0-9]+)\\:" \ "(?P<mkiLength>[0-9]{1,3})\\;?", "g"); diff --git a/sflphone-common/test/sdesnegotiatorTest.cpp b/sflphone-common/test/sdesnegotiatorTest.cpp index ec20866452..71b429a5ea 100644 --- a/sflphone-common/test/sdesnegotiatorTest.cpp +++ b/sflphone-common/test/sdesnegotiatorTest.cpp @@ -41,9 +41,9 @@ using std::endl; void SdesNegotiatorTest::setUp() { - // std::string attr("1 AES_CM_128_HMAC_SHA1_32 srtp inline:16/14/AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwd/2^20/1:32"); + std::string attr("a=crypto:1 AES_CM_128_HMAC_SHA1_80 inline:AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwd|2^20|1:32"); - std::string attr("a=crypto:1 AES_CM_128_HMAC_SHA1_80 inline:d0RmdmcmVCspeEc3QGZiNWpVLFJhQX1cfHAwJSoj|2^20|1:32"); + // std::string attr("a=crypto:1 AES_CM_128_HMAC_SHA1_80 inline:d0RmdmcmVCspeEc3QGZiNWpVLFJhQX1cfHAwJSoj|2^20|1:32"); remoteOffer = new std::vector<std::string>(); remoteOffer->push_back(attr); @@ -149,7 +149,7 @@ void SdesNegotiatorTest::testNegotiation() CPPUNIT_ASSERT(sdesnego->negotiate()); CPPUNIT_ASSERT(sdesnego->getCryptoSuite().compare("AES_CM_128_HMAC_SHA1_80") == 0); CPPUNIT_ASSERT(sdesnego->getKeyMethod().compare("inline") == 0); - CPPUNIT_ASSERT(sdesnego->getKeyInfo().compare("d0RmdmcmVCspeEc3QGZiNWpVLFJhQX1cfHAwJSoj") == 0); + CPPUNIT_ASSERT(sdesnego->getKeyInfo().compare("AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwd") == 0); CPPUNIT_ASSERT(sdesnego->getLifeTime().compare("20") == 0); CPPUNIT_ASSERT(sdesnego->getMkiValue().compare("1") == 0); CPPUNIT_ASSERT(sdesnego->getMkiLength().compare("32") == 0); -- GitLab From 7e2e1f35f9bee2697f113887294dd1745b5031c3 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Wed, 13 Jan 2010 15:12:45 -0500 Subject: [PATCH 160/188] [#1722] Fix inline: format --- sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp | 2 +- sflphone-common/src/sip/SdesNegotiator.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp b/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp index b4a7213aac..e5d7fa4208 100644 --- a/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp +++ b/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp @@ -69,7 +69,7 @@ std::string AudioSrtpSession::getLocalCryptoInfo() { // std::string srtp_keys = "inline:16/14/NzB4d1BINUAvLEw6UzF3WSJ+PSdFcGdUJShpX1Zj/2^20/1:32"; // format srtp keys as the following - // inline:16/14/NzB4d1BINUAvLEw6UzF3WSJ+PSdFcGdUJShpX1Zj/2^20/1:32 + // inline:16/14/NzB4d1BINUAvLEw6UzF3WSJ+PSdFcGdUJShpX1Zj|2^20|1:32 std::string srtp_keys = "inline:"; // srtp_keys.append("16/14/"); srtp_keys += getBase64ConcatenatedKeys(); diff --git a/sflphone-common/src/sip/SdesNegotiator.cpp b/sflphone-common/src/sip/SdesNegotiator.cpp index 6720df78d9..e8618e3ab8 100644 --- a/sflphone-common/src/sip/SdesNegotiator.cpp +++ b/sflphone-common/src/sip/SdesNegotiator.cpp @@ -74,7 +74,7 @@ void SdesNegotiator::parse (void) keyParamsPattern = new Pattern ( "(?P<srtpKeyMethod>inline|[A-Za-z0-9_]+)\\:" \ - "(?P<srtpKeyInfo>[A-Za-z0-9\x2B\x2F\x3D]+|[\w\x2B\x2F\x3D]+)\\|" \ + "(?P<srtpKeyInfo>[A-Za-z0-9\x2B\x2F\x3D]+)\\|" \ "2\\^(?P<lifetime>[0-9]+)\\|" \ "(?P<mkiValue>[0-9]+)\\:" \ "(?P<mkiLength>[0-9]{1,3})\\;?", "g"); -- GitLab From 5143a3406eea3d755229517ca454ba94398e53b5 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Thu, 14 Jan 2010 09:49:46 -0500 Subject: [PATCH 161/188] [#1722] Use char* table as an input to decodeBase64 --- .../src/audio/audiortp/AudioSrtpSession.cpp | 55 ++++++++++--------- .../src/audio/audiortp/AudioSrtpSession.h | 2 +- 2 files changed, 29 insertions(+), 28 deletions(-) diff --git a/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp b/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp index e5d7fa4208..d54c38aee7 100644 --- a/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp +++ b/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp @@ -137,43 +137,43 @@ std::string AudioSrtpSession::getBase64ConcatenatedKeys() { // concatenate master and salt - uint8 concatenated[30]; - memcpy((void*)concatenated, (void*)_localMasterKey, 16); - memcpy((void*)(concatenated+16), (void*)_localMasterSalt, 14); + int concatLength = _localMasterKeyLength + _localMasterSaltLength; + uint8 concatKeys[concatLength]; + memcpy((void*)concatKeys, (void*)_localMasterKey, _localMasterKeyLength); + memcpy((void*)(concatKeys + _localMasterKeyLength), (void*)_localMasterSalt, _localMasterSaltLength); // encode concatenated keys in base64 - char *output = encodeBase64((unsigned char*)concatenated, 30); + char *output = encodeBase64((unsigned char*)concatKeys, concatLength); std::string keys(output); + printf("Base64ConcatenatedKeys : base64keys %s\n", keys.c_str()); + printf("Base64ConcatenatedKeys : size %d\n", (int)keys.size()); + free(output); return keys; } - void AudioSrtpSession::unBase64ConcatenatedKeys(std::string base64keys) +void AudioSrtpSession::unBase64ConcatenatedKeys(std::string base64keys) { + // base64keys.append("\0"); printf("unBase64ConcatenatedKeys : base64keys %s\n", base64keys.c_str()); - printf("unBase64ConcatenatedKeys : size %i\n", (int)base64keys.size()); - char *output = decodeBase64((unsigned char*)base64keys.c_str(), base64keys.size()); - - uint8 concatenated[30]; - memcpy((void*)concatenated, (void*)output, 30); - - printf("Remote Master: "); - for(int i = 0; i < 16; i++) { - _remoteMasterKey[i] = concatenated[i]; - printf("%i", concatenated[i]); - } - printf("\n"); - printf("Remote Salt: "); - for(int i = 14; i < 30; i++) { - _remoteMasterSalt[i-14] = concatenated[i]; - printf("%i", concatenated[i]); - } - printf("\n"); + printf("unBase64ConcatenatedKeys : size %d\n", (int)base64keys.size()); + + int length; + + char *dataptr = (char*)base64keys.data(); + + char *output = decodeBase64((unsigned char*)dataptr, strlen(dataptr), &length); + + printf("Master and Salt: "); + for (int i = 0; i<length; i++) { + printf("%x ", output[i]); + } + printf("\n"); free(output); } @@ -246,14 +246,14 @@ char* AudioSrtpSession::encodeBase64(unsigned char *input, int length) BIO_get_mem_ptr(b64, &bptr); // copy result in output buffer (-1 since we do not want the EOF character) - strncpy(buffer, (char*)(bptr->data), bptr->length-1); + strncpy(buffer, (char*)(bptr->data), bptr->length); BIO_free_all(bmem); return buffer; } -char* AudioSrtpSession::decodeBase64(unsigned char *input, int length) +char* AudioSrtpSession::decodeBase64(unsigned char *input, int length, int *length_out) { BIO *b64, *bmem; @@ -262,12 +262,13 @@ char* AudioSrtpSession::decodeBase64(unsigned char *input, int length) // init decoder and read-only BIO buffer b64 = BIO_new(BIO_f_base64()); + // BIO_set_flags(b64, BIO_FLAGS_BASE64_NO_NL); bmem = BIO_new_mem_buf(input, length); // create encoder chain - bmem = BIO_push(bmem, b64); + bmem = BIO_push(b64, bmem); - BIO_read(bmem, buffer, length); + *length_out = BIO_read(bmem, buffer, length); BIO_free_all(bmem); diff --git a/sflphone-common/src/audio/audiortp/AudioSrtpSession.h b/sflphone-common/src/audio/audiortp/AudioSrtpSession.h index 9055d07c31..6e90eb9573 100644 --- a/sflphone-common/src/audio/audiortp/AudioSrtpSession.h +++ b/sflphone-common/src/audio/audiortp/AudioSrtpSession.h @@ -64,7 +64,7 @@ namespace sfl { char* encodeBase64(unsigned char *input, int length); - char* decodeBase64(unsigned char *input, int length); + char* decodeBase64(unsigned char *input, int length, int *length_out); uint8 _localMasterKey[16]; -- GitLab From 2eec710b0353c09eb82659a49e71fb3ca1ba0fda Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Thu, 14 Jan 2010 10:10:18 -0500 Subject: [PATCH 162/188] [#1722] Use BIO_FLAGS_BASE64_NO_NL flag for base64 encoding/decoding --- sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp b/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp index d54c38aee7..f73a39d2ad 100644 --- a/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp +++ b/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp @@ -234,6 +234,7 @@ char* AudioSrtpSession::encodeBase64(unsigned char *input, int length) // init decoder and buffer b64 = BIO_new(BIO_f_base64()); + BIO_set_flags(b64, BIO_FLAGS_BASE64_NO_NL); bmem = BIO_new(BIO_s_mem()); // create decoder chain @@ -262,7 +263,7 @@ char* AudioSrtpSession::decodeBase64(unsigned char *input, int length, int *leng // init decoder and read-only BIO buffer b64 = BIO_new(BIO_f_base64()); - // BIO_set_flags(b64, BIO_FLAGS_BASE64_NO_NL); + BIO_set_flags(b64, BIO_FLAGS_BASE64_NO_NL); bmem = BIO_new_mem_buf(input, length); // create encoder chain -- GitLab From 5ae7d191c639840898ec82538961914fa8032de5 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Thu, 14 Jan 2010 10:18:22 -0500 Subject: [PATCH 163/188] [#1722] Init _remoteMasterKey/_remoteMasterSalt --- .../src/audio/audiortp/AudioSrtpSession.cpp | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp b/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp index f73a39d2ad..74def198f4 100644 --- a/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp +++ b/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp @@ -170,11 +170,21 @@ void AudioSrtpSession::unBase64ConcatenatedKeys(std::string base64keys) char *output = decodeBase64((unsigned char*)dataptr, strlen(dataptr), &length); printf("Master and Salt: "); - for (int i = 0; i<length; i++) { + for (int i = 0; i < length; i++) { printf("%x ", output[i]); } printf("\n"); + for (int i = 0; i < 16; i++) { + + _remoteMasterKey[i] = output[i]; + } + + for (int i = 0; i < 14; i++) { + + _remoteMasterSalt[i] = output[i+16]; + } + free(output); } -- GitLab From 00b7ee0cb804a3b1b972a4e7db820f9fa542ecf6 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Thu, 14 Jan 2010 11:47:15 -0500 Subject: [PATCH 164/188] [#1722] Clean up printf development messages --- .../src/audio/audiortp/AudioSrtpSession.cpp | 68 ++++++++----------- sflphone-common/src/sip/sipvoiplink.cpp | 3 +- 2 files changed, 28 insertions(+), 43 deletions(-) diff --git a/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp b/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp index 74def198f4..a6e8d918a8 100644 --- a/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp +++ b/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp @@ -63,21 +63,20 @@ std::string AudioSrtpSession::getLocalCryptoInfo() { _debug("Get Cryptographic info from this rtp session"); + // @TODO we should return a vector containing supported + // cryptographic context tagged 1, 2, 3... std::string tag = "1"; + std::string crypto_suite = "AES_CM_128_HMAC_SHA1_32"; - std::string application = "srtp"; - // std::string srtp_keys = "inline:16/14/NzB4d1BINUAvLEw6UzF3WSJ+PSdFcGdUJShpX1Zj/2^20/1:32"; - // format srtp keys as the following - // inline:16/14/NzB4d1BINUAvLEw6UzF3WSJ+PSdFcGdUJShpX1Zj|2^20|1:32 + // srtp keys formated as the following as the following + // inline:NzB4d1BINUAvLEw6UzF3WSJ+PSdFcGdUJShpX1Zj|2^20|1:32 std::string srtp_keys = "inline:"; - // srtp_keys.append("16/14/"); srtp_keys += getBase64ConcatenatedKeys(); srtp_keys.append("|2^20|1:32"); std::string crypto = tag.append(" "); crypto += crypto_suite.append(" "); - // crypto += application.append(" "); crypto += srtp_keys; _debug("%s", crypto.c_str()); @@ -88,12 +87,12 @@ std::string AudioSrtpSession::getLocalCryptoInfo() { void AudioSrtpSession::setRemoteCryptoInfo(sfl::SdesNegotiator& nego) { - _debug("Set remote Cryptographic info for this rtp session"); - - _debug("nego.getKeyInfo() : %s", nego.getKeyInfo().c_str()); + _debug("Set remote Cryptographic info for Srtp session"); + // decode keys unBase64ConcatenatedKeys(nego.getKeyInfo()); - + + // init crypto content int Srtp session initializeRemoteCryptoContext(); setInQueueCryptoContext(_remoteCryptoCtx); } @@ -101,14 +100,14 @@ void AudioSrtpSession::setRemoteCryptoInfo(sfl::SdesNegotiator& nego) { void AudioSrtpSession::initializeLocalMasterKey(void) { - _debug("initializeLocalMasterKey"); + // @TODO key shold be generated randomly _localMasterKeyLength = 16; printf("Local Master: "); for(int i = 0; i < 16; i++) { _localMasterKey[i] = mk[i]; - printf("%i", _localMasterKey[i]); + printf("%d", _localMasterKey[i]); } printf("\n"); @@ -119,12 +118,14 @@ void AudioSrtpSession::initializeLocalMasterKey(void) void AudioSrtpSession::initializeLocalMasterSalt(void) { + + // @TODO key shold be generated randomly _localMasterSaltLength = 14; - printf("Remote Salt: "); + printf("Local Salt: "); for(int i = 0; i < 14; i++) { _localMasterSalt[i] = ms[i]; - printf("%i", _localMasterSalt[i]); + printf("%d", _localMasterSalt[i]); } printf("\n"); @@ -145,11 +146,9 @@ std::string AudioSrtpSession::getBase64ConcatenatedKeys() // encode concatenated keys in base64 char *output = encodeBase64((unsigned char*)concatKeys, concatLength); + // init string containing encoded data std::string keys(output); - printf("Base64ConcatenatedKeys : base64keys %s\n", keys.c_str()); - printf("Base64ConcatenatedKeys : size %d\n", (int)keys.size()); - free(output); return keys; @@ -159,31 +158,18 @@ std::string AudioSrtpSession::getBase64ConcatenatedKeys() void AudioSrtpSession::unBase64ConcatenatedKeys(std::string base64keys) { - // base64keys.append("\0"); - printf("unBase64ConcatenatedKeys : base64keys %s\n", base64keys.c_str()); - printf("unBase64ConcatenatedKeys : size %d\n", (int)base64keys.size()); - + // length of decoded data data int length; + // pointer to binary data char *dataptr = (char*)base64keys.data(); + // decode concatenated binary keys char *output = decodeBase64((unsigned char*)dataptr, strlen(dataptr), &length); - printf("Master and Salt: "); - for (int i = 0; i < length; i++) { - printf("%x ", output[i]); - } - printf("\n"); - - for (int i = 0; i < 16; i++) { - - _remoteMasterKey[i] = output[i]; - } - - for (int i = 0; i < 14; i++) { - - _remoteMasterSalt[i] = output[i+16]; - } + // copy master and slt respectively + memcpy((void*)_remoteMasterKey, (void*)output, 16); + memcpy((void*)_remoteMasterSalt, (void*)(output + 16), 16); free(output); } @@ -192,8 +178,6 @@ void AudioSrtpSession::unBase64ConcatenatedKeys(std::string base64keys) void AudioSrtpSession::initializeRemoteCryptoContext(void) { - // this one does not works - // inputCryptoCtx = new ost::CryptoContext(IncomingDataQueue::getLocalSSRCNetwork(), _remoteCryptoCtx = new ost::CryptoContext(0x0, 0, // roc, 0L, // keydr, @@ -214,8 +198,6 @@ void AudioSrtpSession::initializeRemoteCryptoContext(void) void AudioSrtpSession::initializeLocalCryptoContext(void) { - // this one works - // outputCryptoCtx = new ost::CryptoContext(OutgoingDataQueue::getLocalSSRC(), _localCryptoCtx = new ost::CryptoContext(OutgoingDataQueue::getLocalSSRC(), 0, // roc, 0L, // keydr, @@ -242,9 +224,11 @@ char* AudioSrtpSession::encodeBase64(unsigned char *input, int length) char *buffer = (char *)malloc(2*length); memset(buffer, 0, 2*length); - // init decoder and buffer + // init decoder b64 = BIO_new(BIO_f_base64()); BIO_set_flags(b64, BIO_FLAGS_BASE64_NO_NL); + + // init internal buffer bmem = BIO_new(BIO_s_mem()); // create decoder chain @@ -274,6 +258,8 @@ char* AudioSrtpSession::decodeBase64(unsigned char *input, int length, int *leng // init decoder and read-only BIO buffer b64 = BIO_new(BIO_f_base64()); BIO_set_flags(b64, BIO_FLAGS_BASE64_NO_NL); + + // init internal buffer bmem = BIO_new_mem_buf(input, length); // create encoder chain diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp index 5a5885add8..b11eb627c3 100644 --- a/sflphone-common/src/sip/sipvoiplink.cpp +++ b/sflphone-common/src/sip/sipvoiplink.cpp @@ -3239,9 +3239,8 @@ void call_on_media_update (pjsip_inv_session *inv, pj_status_t status) sfl::SdesNegotiator sdesnego(localCapabilities, remoteOffer); if(sdesnego.negotiate()) { - _debug("******************** Negociation Is Successfull *********************\n"); + _debug("SDES negociation successfull \n"); - _debug("keys : %s", sdesnego.getKeyInfo().c_str()); call->getAudioRtp()->setRemoteCryptoInfo(sdesnego); } -- GitLab From 629ca0844c7fa569e49b4fedb8e3b672b9a9a71d Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Thu, 14 Jan 2010 13:04:07 -0500 Subject: [PATCH 165/188] [#2662] Call setVoIPLink() manually when adding a new SIP account --- sflphone-common/src/managerimpl.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/sflphone-common/src/managerimpl.cpp b/sflphone-common/src/managerimpl.cpp index f8d3d551ba..ca8ed41903 100644 --- a/sflphone-common/src/managerimpl.cpp +++ b/sflphone-common/src/managerimpl.cpp @@ -3979,6 +3979,7 @@ ManagerImpl::addAccount (const std::map< std::string, std::string >& details) if (accountType == "SIP") { newAccount = AccountCreator::createAccount (AccountCreator::SIP_ACCOUNT, newAccountID); + newAccount->setVoIPLink(); } else if (accountType == "IAX") { newAccount = AccountCreator::createAccount (AccountCreator::IAX_ACCOUNT, newAccountID); } else { -- GitLab From 308683a7037fed57202cfd594ffa8503b7c7d0c7 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Thu, 14 Jan 2010 13:07:24 -0500 Subject: [PATCH 166/188] [#1722] Generate random keys using OpenSSL's RAND_bytes function --- .../src/audio/audiortp/AudioSrtpSession.cpp | 32 ++++++++++--------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp b/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp index a6e8d918a8..bf10152a61 100644 --- a/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp +++ b/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp @@ -26,6 +26,7 @@ #include <openssl/evp.h> #include <openssl/bio.h> #include <openssl/buffer.h> +#include <openssl/rand.h> #include <cstdio> @@ -101,16 +102,16 @@ void AudioSrtpSession::setRemoteCryptoInfo(sfl::SdesNegotiator& nego) { void AudioSrtpSession::initializeLocalMasterKey(void) { - // @TODO key shold be generated randomly + // @TODO key may have different length depending on cipher suite _localMasterKeyLength = 16; - printf("Local Master: "); - for(int i = 0; i < 16; i++) { - _localMasterKey[i] = mk[i]; - printf("%d", _localMasterKey[i]); - } - printf("\n"); - + unsigned char *random_key = new unsigned char[_localMasterKeyLength]; + + int err; + if((err = RAND_bytes(random_key, _localMasterKeyLength)) != 1) + _debug("Error occured while generating cryptographically strong pseudo-random key"); + + memcpy(_localMasterKey, random_key, _localMasterKeyLength); return; } @@ -119,15 +120,16 @@ void AudioSrtpSession::initializeLocalMasterKey(void) void AudioSrtpSession::initializeLocalMasterSalt(void) { - // @TODO key shold be generated randomly + // @TODO key may have different length depending on cipher suite _localMasterSaltLength = 14; - printf("Local Salt: "); - for(int i = 0; i < 14; i++) { - _localMasterSalt[i] = ms[i]; - printf("%d", _localMasterSalt[i]); - } - printf("\n"); + unsigned char *random_key = new unsigned char[_localMasterSaltLength]; + + int err; + if((err = RAND_bytes(random_key, _localMasterSaltLength)) != 1) + _debug("Error occured while generating cryptographically strong pseudo-random key"); + + memcpy(_localMasterSalt, random_key, _localMasterSaltLength); return; -- GitLab From 050b0b1c37558ecc615f18c42ad56b6bf796e708 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Thu, 14 Jan 2010 13:34:58 -0500 Subject: [PATCH 167/188] [#1722] Test with static key --- sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp b/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp index bf10152a61..e7c740abc1 100644 --- a/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp +++ b/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp @@ -111,7 +111,7 @@ void AudioSrtpSession::initializeLocalMasterKey(void) if((err = RAND_bytes(random_key, _localMasterKeyLength)) != 1) _debug("Error occured while generating cryptographically strong pseudo-random key"); - memcpy(_localMasterKey, random_key, _localMasterKeyLength); + memcpy(_localMasterKey, mk, _localMasterKeyLength); return; } @@ -129,7 +129,7 @@ void AudioSrtpSession::initializeLocalMasterSalt(void) if((err = RAND_bytes(random_key, _localMasterSaltLength)) != 1) _debug("Error occured while generating cryptographically strong pseudo-random key"); - memcpy(_localMasterSalt, random_key, _localMasterSaltLength); + memcpy(_localMasterSalt, ms, _localMasterSaltLength); return; -- GitLab From 91b6a76dcb3b0a666c1d0d560ffd27695a9d8982 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Thu, 14 Jan 2010 13:43:12 -0500 Subject: [PATCH 168/188] [#1722] Use memcopy instead to copy PRN in keys --- .../src/audio/audiortp/AudioSrtpSession.cpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp b/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp index e7c740abc1..1efa1ab586 100644 --- a/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp +++ b/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp @@ -111,7 +111,11 @@ void AudioSrtpSession::initializeLocalMasterKey(void) if((err = RAND_bytes(random_key, _localMasterKeyLength)) != 1) _debug("Error occured while generating cryptographically strong pseudo-random key"); - memcpy(_localMasterKey, mk, _localMasterKeyLength); + // memcpy(_localMasterKey, mk, _localMasterKeyLength); + + for(int i = 0; i < _localMasterKeyLength; i++){ + _localMasterKey[i] = mk[i]; + } return; } @@ -129,7 +133,11 @@ void AudioSrtpSession::initializeLocalMasterSalt(void) if((err = RAND_bytes(random_key, _localMasterSaltLength)) != 1) _debug("Error occured while generating cryptographically strong pseudo-random key"); - memcpy(_localMasterSalt, ms, _localMasterSaltLength); + // memcpy(_localMasterSalt, ms, _localMasterSaltLength); + + for(int i = 0; i < _localMasterSaltLength; i++){ + _localMasterSalt[i] = ms[i]; + } return; -- GitLab From a1cb7546bc8ae1f329c8a01d2a6a76110205a592 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Thu, 14 Jan 2010 13:56:20 -0500 Subject: [PATCH 169/188] [#1722] Test static keys --- .../src/audio/audiortp/AudioSrtpSession.cpp | 31 +++++++++++++++---- 1 file changed, 25 insertions(+), 6 deletions(-) diff --git a/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp b/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp index 1efa1ab586..85a077ab33 100644 --- a/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp +++ b/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp @@ -111,11 +111,13 @@ void AudioSrtpSession::initializeLocalMasterKey(void) if((err = RAND_bytes(random_key, _localMasterKeyLength)) != 1) _debug("Error occured while generating cryptographically strong pseudo-random key"); - // memcpy(_localMasterKey, mk, _localMasterKeyLength); + memcpy(_localMasterKey, mk, _localMasterKeyLength); + printf("Local Master: "); for(int i = 0; i < _localMasterKeyLength; i++){ - _localMasterKey[i] = mk[i]; + printf("%d", _localMasterKey[i]); } + printf("\n"); return; } @@ -133,11 +135,13 @@ void AudioSrtpSession::initializeLocalMasterSalt(void) if((err = RAND_bytes(random_key, _localMasterSaltLength)) != 1) _debug("Error occured while generating cryptographically strong pseudo-random key"); - // memcpy(_localMasterSalt, ms, _localMasterSaltLength); + memcpy(_localMasterSalt, ms, _localMasterSaltLength); + printf("Local Salt: "); for(int i = 0; i < _localMasterSaltLength; i++){ - _localMasterSalt[i] = ms[i]; + printf("%d", _localMasterSalt[i]); } + printf("\n"); return; @@ -168,6 +172,9 @@ std::string AudioSrtpSession::getBase64ConcatenatedKeys() void AudioSrtpSession::unBase64ConcatenatedKeys(std::string base64keys) { + _remoteMasterKeyLength = 16; + _remoteMasterSaltLength = 14; + // length of decoded data data int length; @@ -178,8 +185,20 @@ void AudioSrtpSession::unBase64ConcatenatedKeys(std::string base64keys) char *output = decodeBase64((unsigned char*)dataptr, strlen(dataptr), &length); // copy master and slt respectively - memcpy((void*)_remoteMasterKey, (void*)output, 16); - memcpy((void*)_remoteMasterSalt, (void*)(output + 16), 16); + memcpy((void*)_remoteMasterKey, (void*)output, _remoteMasterKeyLength); + memcpy((void*)_remoteMasterSalt, (void*)(output + _remoteMasterKeyLength), _remoteMasterSaltLength); + + printf("Remote Master: "); + for(int i = 0; i < _remoteMasterKeyLength; i++){ + printf("%d", _remoteMasterKey[i]); + } + printf("\n"); + + printf("Remote Salt: "); + for(int i = 0; i < _remoteMasterSaltLength; i++){ + printf("%d", _remoteMasterSalt[i]); + } + printf("\n"); free(output); } -- GitLab From 238fdb78feefde39776830a93646b186a53bde91 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Thu, 14 Jan 2010 14:16:52 -0500 Subject: [PATCH 170/188] [#1722] Use randomly generated keys --- sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp b/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp index 85a077ab33..6411b39531 100644 --- a/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp +++ b/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp @@ -111,7 +111,7 @@ void AudioSrtpSession::initializeLocalMasterKey(void) if((err = RAND_bytes(random_key, _localMasterKeyLength)) != 1) _debug("Error occured while generating cryptographically strong pseudo-random key"); - memcpy(_localMasterKey, mk, _localMasterKeyLength); + memcpy(_localMasterKey, random_key, _localMasterKeyLength); printf("Local Master: "); for(int i = 0; i < _localMasterKeyLength; i++){ @@ -135,7 +135,7 @@ void AudioSrtpSession::initializeLocalMasterSalt(void) if((err = RAND_bytes(random_key, _localMasterSaltLength)) != 1) _debug("Error occured while generating cryptographically strong pseudo-random key"); - memcpy(_localMasterSalt, ms, _localMasterSaltLength); + memcpy(_localMasterSalt, random_key, _localMasterSaltLength); printf("Local Salt: "); for(int i = 0; i < _localMasterSaltLength; i++){ -- GitLab From 121f15db1b8f02e2ef0c5617a9c2bf5e049b4b84 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Thu, 14 Jan 2010 15:07:16 -0500 Subject: [PATCH 171/188] [#1722] Chage AudioRtpInit from answer to mod_on_rx_request --- sflphone-common/src/audio/audiortp/AudioRtpFactory.h | 9 +++++++++ sflphone-common/src/sip/sipvoiplink.cpp | 8 ++++++++ 2 files changed, 17 insertions(+) diff --git a/sflphone-common/src/audio/audiortp/AudioRtpFactory.h b/sflphone-common/src/audio/audiortp/AudioRtpFactory.h index 5165cbffc1..401087fbfb 100644 --- a/sflphone-common/src/audio/audiortp/AudioRtpFactory.h +++ b/sflphone-common/src/audio/audiortp/AudioRtpFactory.h @@ -89,6 +89,15 @@ namespace sfl { * file. initAudioRtpSession must have been called prior to that. */ inline void * getAudioRtpSession(void) { return _rtpSession; } + + /** + * @param None + * @return The internal audio rtp session type + * Symmetric = 0 + * Zrtp = 1 + * Sdes = 2 + */ + inline RtpMethod getAudioRtpType(void) { return _rtpSessionType; } /** * Get the current AudioZrtpSession. Throws an AudioRtpFactoryException diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp index b11eb627c3..30a67bca8e 100644 --- a/sflphone-common/src/sip/sipvoiplink.cpp +++ b/sflphone-common/src/sip/sipvoiplink.cpp @@ -809,11 +809,13 @@ SIPVoIPLink::answer (const CallID& id) local_sdp = call->getLocalSDP(); + /* try { call->getAudioRtp()->initAudioRtpSession (call); } catch (...) { _debug ("Failed to create rtp thread from answer"); } + */ inv_session = call->getInvSession(); @@ -3628,6 +3630,12 @@ mod_on_rx_request (pjsip_rx_data *rdata) // We retrieve the remote sdp offer in the rdata struct to begin the negociation call->getLocalSDP()->set_ip_address (addrSdp); + try { + call->getAudioRtp()->initAudioRtpSession (call); + } catch (...) { + _debug ("Failed to create rtp thread from answer"); + } + get_remote_sdp_from_offer (rdata, &r_sdp); status = call->getLocalSDP()->receiving_initial_offer (r_sdp); -- GitLab From 56ff740f701f7c676ba7a3eb438e20a83986ee1b Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Fri, 15 Jan 2010 10:58:53 -0500 Subject: [PATCH 172/188] [#1722] Add updateDestinationIpAddress in AudioRtpSession --- .../src/audio/audiortp/AudioRtpFactory.cpp | 23 +++++++++++ .../src/audio/audiortp/AudioRtpFactory.h | 6 +++ .../src/audio/audiortp/AudioRtpSession.h | 41 ++++++++++++++++--- .../src/audio/audiortp/AudioSrtpSession.cpp | 34 ++++++--------- 4 files changed, 77 insertions(+), 27 deletions(-) diff --git a/sflphone-common/src/audio/audiortp/AudioRtpFactory.cpp b/sflphone-common/src/audio/audiortp/AudioRtpFactory.cpp index 1a2c14ff79..d9f88f1b55 100644 --- a/sflphone-common/src/audio/audiortp/AudioRtpFactory.cpp +++ b/sflphone-common/src/audio/audiortp/AudioRtpFactory.cpp @@ -190,6 +190,29 @@ void AudioRtpFactory::stop (void) } } +void AudioRtpFactory::updateDestinationIpAddress (void) +{ + _debug ("Updating IP address"); + if (_rtpSession == NULL) { + throw AudioRtpFactoryException ("_rtpSession was null when trying to update IP address"); + } + + switch (_rtpSessionType) { + + case Sdes: + static_cast<AudioSrtpSession *> (_rtpSession)->updateDestinationIpAddress(); + break; + + case Symmetric: + static_cast<AudioSymmetricRtpSession *> (_rtpSession)->updateDestinationIpAddress(); + break; + + case Zrtp: + static_cast<AudioZrtpSession *> (_rtpSession)->updateDestinationIpAddress(); + break; + } +} + sfl::AudioZrtpSession * AudioRtpFactory::getAudioZrtpSession() { if ( (_rtpSessionType == Zrtp) && (_rtpSessionType != NULL)) { diff --git a/sflphone-common/src/audio/audiortp/AudioRtpFactory.h b/sflphone-common/src/audio/audiortp/AudioRtpFactory.h index 401087fbfb..664bf3ae2c 100644 --- a/sflphone-common/src/audio/audiortp/AudioRtpFactory.h +++ b/sflphone-common/src/audio/audiortp/AudioRtpFactory.h @@ -82,6 +82,12 @@ namespace sfl { * @param None */ void stop(); + + /** + * Update current RTP destination address with one stored in call + * @param None + */ + void updateDestinationIpAddress (void); /** * @param None diff --git a/sflphone-common/src/audio/audiortp/AudioRtpSession.h b/sflphone-common/src/audio/audiortp/AudioRtpSession.h index e1d8b536cb..d168cb8d75 100644 --- a/sflphone-common/src/audio/audiortp/AudioRtpSession.h +++ b/sflphone-common/src/audio/audiortp/AudioRtpSession.h @@ -66,7 +66,12 @@ namespace sfl { virtual void run (); int startRtpThread(); - + + /** + * Used mostly when receiving a reinvite + */ + void updateDestinationIpAddress(void); + private: void initBuffers(void); @@ -98,6 +103,16 @@ namespace sfl { // it amounts to the same as doing // start() with no semaphore at all. ost::Semaphore * _mainloopSemaphore; + + // Main destination address for this rtp session. + // Stored in case or reINVITE, which may require to forget + // this destination and update a new one. + ost::InetHostAddress _remote_ip; + + // Main destination port for this rtp session. + // Stored in case reINVITE, which may require to forget + // this destination and update a new one + unsigned short _remote_port; AudioCodec * _audiocodec; @@ -292,20 +307,36 @@ namespace sfl { } _debug ("Setting IP address for the RTP session\n"); - - ost::InetHostAddress remote_ip (_ca->getLocalSDP()->get_remote_ip().c_str()); + + // Store remote ip in case we would need to forget current destination + _remote_ip = ost::InetHostAddress(_ca->getLocalSDP()->get_remote_ip().c_str()); _debug ("Init audio RTP session: remote ip %s\n", _ca->getLocalSDP()->get_remote_ip().data()); - if (!remote_ip) { + if (!_remote_ip) { _debug ("Target IP address [%s] is not correct!\n", _ca->getLocalSDP()->get_remote_ip().data()); return; } - if (! static_cast<D*>(this)->addDestination (remote_ip, (unsigned short) _ca->getLocalSDP()->get_remote_audio_port())) { + // Store remote port in case we would need to forget current destination + _remote_port = (unsigned short) _ca->getLocalSDP()->get_remote_audio_port(); + + if (! static_cast<D*>(this)->addDestination (_remote_ip, _remote_port)) { _debug ("Can't add destination to session!\n"); return; } } + + template <typename D> + void AudioRtpSession<D>::updateDestinationIpAddress(void) + { + // Destination address are stored in a list in ccrtp + // This method clear off this entry + static_cast<D*>(this)->forgetDestination(_remote_ip, _remote_port); + + // new destination is stored in call + // we just need to recall this method + setDestinationIpAddress(); + } template <typename D> int AudioRtpSession<D>::processDataEncode(void) diff --git a/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp b/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp index 6411b39531..e1579e7f31 100644 --- a/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp +++ b/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp @@ -47,15 +47,15 @@ AudioSrtpSession::AudioSrtpSession (ManagerImpl * manager, SIPCall * sipcall) : ost::SymmetricRTPSession (ost::InetHostAddress (sipcall->getLocalIp().c_str()), sipcall->getLocalAudioPort()), AudioRtpSession<AudioSrtpSession> (manager, sipcall) { - _debug ("***************** Initialize AudioSrtpSession *********************"); + + // Initialize local Crypto context initializeLocalMasterKey(); initializeLocalMasterSalt(); - // initializeRemoteCryptoContext(); initializeLocalCryptoContext(); + // Set local crypto context in ccrtp _localCryptoCtx->deriveSrtpKeys(0); - // setInQueueCryptoContext(_remoteCryptoCtx); setOutQueueCryptoContext(_localCryptoCtx); } @@ -76,6 +76,7 @@ std::string AudioSrtpSession::getLocalCryptoInfo() { srtp_keys += getBase64ConcatenatedKeys(); srtp_keys.append("|2^20|1:32"); + // generate crypto attribute std::string crypto = tag.append(" "); crypto += crypto_suite.append(" "); crypto += srtp_keys; @@ -105,8 +106,10 @@ void AudioSrtpSession::initializeLocalMasterKey(void) // @TODO key may have different length depending on cipher suite _localMasterKeyLength = 16; + // Allocate memory for key unsigned char *random_key = new unsigned char[_localMasterKeyLength]; + // Generate ryptographically strong pseudo-random bytes int err; if((err = RAND_bytes(random_key, _localMasterKeyLength)) != 1) _debug("Error occured while generating cryptographically strong pseudo-random key"); @@ -129,20 +132,16 @@ void AudioSrtpSession::initializeLocalMasterSalt(void) // @TODO key may have different length depending on cipher suite _localMasterSaltLength = 14; + // Allocate memory for key unsigned char *random_key = new unsigned char[_localMasterSaltLength]; + // Generate ryptographically strong pseudo-random bytes int err; if((err = RAND_bytes(random_key, _localMasterSaltLength)) != 1) _debug("Error occured while generating cryptographically strong pseudo-random key"); memcpy(_localMasterSalt, random_key, _localMasterSaltLength); - printf("Local Salt: "); - for(int i = 0; i < _localMasterSaltLength; i++){ - printf("%d", _localMasterSalt[i]); - } - printf("\n"); - return; } @@ -151,9 +150,12 @@ void AudioSrtpSession::initializeLocalMasterSalt(void) std::string AudioSrtpSession::getBase64ConcatenatedKeys() { - // concatenate master and salt + // compute concatenated master and salt length int concatLength = _localMasterKeyLength + _localMasterSaltLength; + uint8 concatKeys[concatLength]; + + // concatenate keys memcpy((void*)concatKeys, (void*)_localMasterKey, _localMasterKeyLength); memcpy((void*)(concatKeys + _localMasterKeyLength), (void*)_localMasterSalt, _localMasterSaltLength); @@ -188,18 +190,6 @@ void AudioSrtpSession::unBase64ConcatenatedKeys(std::string base64keys) memcpy((void*)_remoteMasterKey, (void*)output, _remoteMasterKeyLength); memcpy((void*)_remoteMasterSalt, (void*)(output + _remoteMasterKeyLength), _remoteMasterSaltLength); - printf("Remote Master: "); - for(int i = 0; i < _remoteMasterKeyLength; i++){ - printf("%d", _remoteMasterKey[i]); - } - printf("\n"); - - printf("Remote Salt: "); - for(int i = 0; i < _remoteMasterSaltLength; i++){ - printf("%d", _remoteMasterSalt[i]); - } - printf("\n"); - free(output); } -- GitLab From 32e42d0ad59c13631178070541f10bc13c8bf9e2 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Fri, 15 Jan 2010 10:59:57 -0500 Subject: [PATCH 173/188] [#1722] update destination address in handle reINVITE (no RTP session stop) --- sflphone-common/src/sip/sipvoiplink.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp index 30a67bca8e..e739611316 100644 --- a/sflphone-common/src/sip/sipvoiplink.cpp +++ b/sflphone-common/src/sip/sipvoiplink.cpp @@ -2953,6 +2953,7 @@ void set_voicemail_info (AccountID account, pjsip_msg_body *body) void SIPVoIPLink::handle_reinvite (SIPCall *call) { + /* // Close the previous RTP session call->getAudioRtp()->stop (); call->setAudioStart (false); @@ -2964,6 +2965,12 @@ void SIPVoIPLink::handle_reinvite (SIPCall *call) } catch (...) { _debug ("! SIP Failure: Unable to create RTP Session (%s:%d)", __FILE__, __LINE__); } + */ + _debug("******************************************"); + _debug("* handle_reinvite *"); + _debug("******************************************"); + + call->getAudioRtp()->updateDestinationIpAddress(); } // This callback is called when the invite session state has changed -- GitLab From 66e9c374ebc14a770cf481ddd38be09531fd77e1 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Fri, 15 Jan 2010 11:37:49 -0500 Subject: [PATCH 174/188] [#1722] Make possible to acquire several crypto attribute from SDP session --- sflphone-common/src/sip/sdp.cpp | 45 +++++++++++++------------ sflphone-common/src/sip/sdp.h | 5 ++- sflphone-common/src/sip/sipvoiplink.cpp | 19 +++-------- 3 files changed, 33 insertions(+), 36 deletions(-) diff --git a/sflphone-common/src/sip/sdp.cpp b/sflphone-common/src/sip/sdp.cpp index d17e3cf788..3d0d25e56b 100644 --- a/sflphone-common/src/sip/sdp.cpp +++ b/sflphone-common/src/sip/sdp.cpp @@ -158,7 +158,7 @@ int Sdp::create_local_offer () //sdp_addAttributes( _pool ); sdp_add_media_description(); - if(!_srtp_crypto.empty()) { + if(!_srtp_crypto.empty()) { sdp_add_sdes_attribute(_srtp_crypto); } @@ -211,8 +211,6 @@ int Sdp::receiving_initial_offer (pjmedia_sdp_session* remote) pj_status_t status; - _debug ("Receiving initial offer"); - // Create the SDP negociator instance by calling // pjmedia_sdp_neg_create_w_remote_offer with the remote offer, and by providing the local offer ( optional ) @@ -370,32 +368,25 @@ void Sdp::sdp_add_media_description() void Sdp::sdp_add_sdes_attribute (std::string crypto) { + // temporary buffer used to store crypto attribute char tempbuf[256]; - std::string tag = "1"; - std::string crypto_suite = "AES_CM_128_HMAC_SHA1_32"; - std::string application = "srtp"; - std::string key = "inline:16/14/NzB4d1BINUAvLEw6UzF3WSJ+PSdFcGdUJShpX1Zj/2^20/1:32"; - + // the attribute to add to sdp pjmedia_sdp_attr *attribute = (pjmedia_sdp_attr*) pj_pool_zalloc(_pool, sizeof(pjmedia_sdp_attr)); attribute->name = pj_strdup3(_pool, "crypto"); - /* - int len = pj_ansi_snprintf(tempbuf, sizeof(tempbuf), - "%.*s %.*s %.*s", - (int)tag.size(), tag.c_str(), - (int)crypto_suite.size(), crypto_suite.c_str(), - (int)key.size(), key.c_str()); - */ + // _debug("crypto from sdp: %s", crypto.c_str()); + int len = pj_ansi_snprintf(tempbuf, sizeof(tempbuf), "%.*s",(int)crypto.size(), crypto.c_str()); - + attribute->value.slen = len; attribute->value.ptr = (char*) pj_pool_alloc (_pool, attribute->value.slen+1); pj_memcpy (attribute->value.ptr, tempbuf, attribute->value.slen+1); + // add crypto attribute to sdp session if(pjmedia_sdp_attr_add(&(_local_offer->attr_count), _local_offer->attr, attribute) != PJ_SUCCESS){ throw sdpException(); } @@ -676,28 +667,40 @@ void Sdp::get_remote_sdp_media_from_offer (const pjmedia_sdp_session* remote_sdp } } -void Sdp::get_remote_sdp_crypto_from_offer (const pjmedia_sdp_session* remote_sdp, pjmedia_sdp_attr** r_crypto) +void Sdp::get_remote_sdp_crypto_from_offer (const pjmedia_sdp_session* remote_sdp, CryptoOffer& crypto_offer) { int i; int attr_count; - pjmedia_sdp_attr * attribute; - *r_crypto = NULL; + pjmedia_sdp_attr *attribute; + // get the number of attribute for this sdp session attr_count = remote_sdp->attr_count; // *r_crypto= pjmedia_sdp_media_find_attr(attribute, &STR_CRYPTO, NULL); _debug("****************** Parse for Crypto %i ********************", attr_count); + CryptoOffer remoteOffer; + + // iterate over all atribute for (i = 0; i < attr_count; ++i) { _debug("%.*s", (int)remote_sdp->attr[i]->name.slen, remote_sdp->attr[i]->name.ptr); _debug("%.*s", (int)remote_sdp->attr[i]->value.slen, remote_sdp->attr[i]->value.ptr); + + // test if this attribute is a crypto if (pj_stricmp2 (&remote_sdp->attr[i]->name, "crypto") == 0) { + + attribute = remote_sdp->attr[i]; + _debug("****************** Found a Crypto ********************"); - *r_crypto = remote_sdp->attr[i]; - return; + std::string attr(attribute->value.ptr, attribute->value.slen); + // @TODO our parser require the "acrypto:" to be present + std::string full_attr = "a=crypto:"; + full_attr += attr; + + crypto_offer.push_back(full_attr); } } diff --git a/sflphone-common/src/sip/sdp.h b/sflphone-common/src/sip/sdp.h index fcea8997f2..d32ceeaa90 100644 --- a/sflphone-common/src/sip/sdp.h +++ b/sflphone-common/src/sip/sdp.h @@ -29,6 +29,7 @@ #include <pjmedia/errno.h> #include <pj/pool.h> #include <pj/assert.h> +#include <vector> #include "audio/codecs/codecDescriptor.h" #include "sdpmedia.h" @@ -43,6 +44,8 @@ class sdpException: public std::exception } }; +typedef std::vector<std::string> CryptoOffer; + class Sdp { public: @@ -218,7 +221,7 @@ class Sdp { std::vector<sdpMedia*> get_session_media_list (void) { return _session_media; } - void get_remote_sdp_crypto_from_offer (const pjmedia_sdp_session* remote_sdp, pjmedia_sdp_attr** r_crypto); + void get_remote_sdp_crypto_from_offer (const pjmedia_sdp_session* remote_sdp, CryptoOffer& crypto_offer); private: /** Codec Map */ diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp index e739611316..8bbd1a64db 100644 --- a/sflphone-common/src/sip/sipvoiplink.cpp +++ b/sflphone-common/src/sip/sipvoiplink.cpp @@ -3223,29 +3223,20 @@ void call_on_media_update (pjsip_inv_session *inv, pj_status_t status) call->getLocalSDP()->set_media_transport_info_from_remote_sdp (remote_sdp); // Get the crypto attribute containing srtp's cryptographic context (keys, cipher) - pjmedia_sdp_attr *attribute = NULL; - call->getLocalSDP()->get_remote_sdp_crypto_from_offer(remote_sdp, &attribute); + CryptoOffer crypto_offer; + call->getLocalSDP()->get_remote_sdp_crypto_from_offer(remote_sdp, crypto_offer); - if(attribute) { + if(!crypto_offer.empty()) { _debug("Crypto attribute in SDP: init Srtp session"); - // create remote cryptografic offer - std::vector<std::string> remoteOffer; - - // @TODO parser expects attribute names to be present, should not - std::string attr(attribute->value.ptr, attribute->value.slen); - std::string full_attr = "a=crypto:"; - full_attr += attr; - - remoteOffer.push_back(full_attr); - + // init local cryptografic capabilities for negotiation std::vector<sfl::CryptoSuiteDefinition>localCapabilities; for(int i = 0; i < 3; i++) { localCapabilities.push_back(sfl::CryptoSuites[i]); } - sfl::SdesNegotiator sdesnego(localCapabilities, remoteOffer); + sfl::SdesNegotiator sdesnego(localCapabilities, crypto_offer); if(sdesnego.negotiate()) { _debug("SDES negociation successfull \n"); -- GitLab From dba4b4a0687a347a8ddb48042a17f289e2329769 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Fri, 15 Jan 2010 12:55:27 -0500 Subject: [PATCH 175/188] [#1722] use sfl::CryptoSuites to init crypto context --- .../src/audio/audiortp/AudioSrtpSession.cpp | 21 +++++++----- .../src/audio/audiortp/AudioSrtpSession.h | 34 +++++++++++++++++++ 2 files changed, 46 insertions(+), 9 deletions(-) diff --git a/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp b/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp index e1579e7f31..4715587ff0 100644 --- a/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp +++ b/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp @@ -45,6 +45,8 @@ namespace sfl AudioSrtpSession::AudioSrtpSession (ManagerImpl * manager, SIPCall * sipcall) : ost::SymmetricRTPSession (ost::InetHostAddress (sipcall->getLocalIp().c_str()), sipcall->getLocalAudioPort()), + _localCryptoSuite(0), + _remoteCryptoSuite(0), AudioRtpSession<AudioSrtpSession> (manager, sipcall) { @@ -68,7 +70,7 @@ std::string AudioSrtpSession::getLocalCryptoInfo() { // cryptographic context tagged 1, 2, 3... std::string tag = "1"; - std::string crypto_suite = "AES_CM_128_HMAC_SHA1_32"; + std::string crypto_suite = sfl::CryptoSuites[_localCryptoSuite].name; // srtp keys formated as the following as the following // inline:NzB4d1BINUAvLEw6UzF3WSJ+PSdFcGdUJShpX1Zj|2^20|1:32 @@ -104,7 +106,7 @@ void AudioSrtpSession::initializeLocalMasterKey(void) { // @TODO key may have different length depending on cipher suite - _localMasterKeyLength = 16; + _localMasterKeyLength = sfl::CryptoSuites[_localCryptoSuite].masterKeyLength / 8; // Allocate memory for key unsigned char *random_key = new unsigned char[_localMasterKeyLength]; @@ -130,7 +132,7 @@ void AudioSrtpSession::initializeLocalMasterSalt(void) { // @TODO key may have different length depending on cipher suite - _localMasterSaltLength = 14; + _localMasterSaltLength = sfl::CryptoSuites[_localCryptoSuite].masterSaltLength / 8; // Allocate memory for key unsigned char *random_key = new unsigned char[_localMasterSaltLength]; @@ -174,8 +176,9 @@ std::string AudioSrtpSession::getBase64ConcatenatedKeys() void AudioSrtpSession::unBase64ConcatenatedKeys(std::string base64keys) { - _remoteMasterKeyLength = 16; - _remoteMasterSaltLength = 14; + + _remoteMasterKeyLength = sfl::CryptoSuites[1].masterKeyLength / 8; + _remoteMasterSaltLength = sfl::CryptoSuites[1].masterSaltLength / 8; // length of decoded data data int length; @@ -203,9 +206,9 @@ void AudioSrtpSession::initializeRemoteCryptoContext(void) SrtpEncryptionAESCM, // encryption algo SrtpAuthenticationSha1Hmac, // authtication algo _remoteMasterKey, // Master Key - 128 / 8, // Master Key length + _remoteMasterKeyLength, // Master Key length _remoteMasterSalt, // Master Salt - 112 / 8, // Master Salt length + _remoteMasterSaltLength, // Master Salt length 128 / 8, // encryption keyl 160 / 8, // authentication key len 112 / 8, // session salt len @@ -223,9 +226,9 @@ void AudioSrtpSession::initializeLocalCryptoContext(void) SrtpEncryptionAESCM, // encryption algo SrtpAuthenticationSha1Hmac, // authtication algo _localMasterKey, // Master Key - 128 / 8, // Master Key length + _localMasterKeyLength, // Master Key length _localMasterSalt, // Master Salt - 112 / 8, // Master Salt length + _localMasterSaltLength, // Master Salt length 128 / 8, // encryption keyl 160 / 8, // authentication key len 112 / 8, // session salt len diff --git a/sflphone-common/src/audio/audiortp/AudioSrtpSession.h b/sflphone-common/src/audio/audiortp/AudioSrtpSession.h index 6e90eb9573..7e94a62bae 100644 --- a/sflphone-common/src/audio/audiortp/AudioSrtpSession.h +++ b/sflphone-common/src/audio/audiortp/AudioSrtpSession.h @@ -28,6 +28,30 @@ class SdesNegotiator; class ManagerImpl; class SIPCall; +/* + Table from RFC 4568 6.2. Crypto-Suites, which define key parameters for supported + cipher suite + + +---------------------+-------------+--------------+---------------+ + | |AES_CM_128_ | AES_CM_128_ | F8_128_ | + | |HMAC_SHA1_80 | HMAC_SHA1_32 | HMAC_SHA1_80 | + +---------------------+-------------+--------------+---------------+ + | Master key length | 128 bits | 128 bits | 128 bits | + | Master salt length | 112 bits | 112 bits | 112 bits | + | SRTP lifetime | 2^48 packets| 2^48 packets | 2^48 packets | + | SRTCP lifetime | 2^31 packets| 2^31 packets | 2^31 packets | + | Cipher | AES Counter | AES Counter | AES F8 Mode | + | | Mode | Mode | | + | Encryption key | 128 bits | 128 bits | 128 bits | + | MAC | HMAC-SHA1 | HMAC-SHA1 | HMAC-SHA1 | + | SRTP auth. tag | 80 bits | 32 bits | 80 bits | + | SRTCP auth. tag | 80 bits | 80 bits | 80 bits | + | SRTP auth. key len. | 160 bits | 160 bits | 160 bits | + | SRTCP auth. key len.| 160 bits | 160 bits | 160 bits | + +---------------------+-------------+--------------+---------------+ +*/ + + namespace sfl { class SrtpException: public std::exception @@ -66,20 +90,30 @@ namespace sfl { char* decodeBase64(unsigned char *input, int length, int *length_out); + /** Default local crypto suite is AES_CM_128_HMAC_SHA1_80*/ + int _localCryptoSuite; + + /** Remote crypto suite is initialized at AES_CM_128_HMAC_SHA1_80*/ + int _remoteCryptoSuite; + uint8 _localMasterKey[16]; + /** local master key length in byte */ int _localMasterKeyLength; uint8 _localMasterSalt[14]; + /** local master salt length in byte */ int _localMasterSaltLength; uint8 _remoteMasterKey[16]; + /** remote master key length in byte */ int _remoteMasterKeyLength; uint8 _remoteMasterSalt[14]; + /** remote master salt length in byte */ int _remoteMasterSaltLength; ost::CryptoContext* _remoteCryptoCtx; -- GitLab From 44e98d2e3b3510e3adaddedefff6bb0f279db6de Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Fri, 15 Jan 2010 13:51:56 -0500 Subject: [PATCH 176/188] [#1722] Forgot one file to commit --- sflphone-common/src/sip/sdp.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/sflphone-common/src/sip/sdp.cpp b/sflphone-common/src/sip/sdp.cpp index 3d0d25e56b..e81b598978 100644 --- a/sflphone-common/src/sip/sdp.cpp +++ b/sflphone-common/src/sip/sdp.cpp @@ -696,6 +696,7 @@ void Sdp::get_remote_sdp_crypto_from_offer (const pjmedia_sdp_session* remote_sd _debug("****************** Found a Crypto ********************"); std::string attr(attribute->value.ptr, attribute->value.slen); + // @TODO our parser require the "acrypto:" to be present std::string full_attr = "a=crypto:"; full_attr += attr; -- GitLab From 631833fe7ef9308ea6375d86f1ad5caed499d1b6 Mon Sep 17 00:00:00 2001 From: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> Date: Fri, 15 Jan 2010 15:40:53 -0500 Subject: [PATCH 177/188] [#2659] Make URL hook handle multiple $_GET arguments --- sflphone-common/src/hooks/urlhook.cpp | 27 +++++++++++++++++++++++- sflphone-common/test/hookmanagerTest.cpp | 2 +- 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/sflphone-common/src/hooks/urlhook.cpp b/sflphone-common/src/hooks/urlhook.cpp index b50aa1febb..3538602fb7 100644 --- a/sflphone-common/src/hooks/urlhook.cpp +++ b/sflphone-common/src/hooks/urlhook.cpp @@ -19,6 +19,7 @@ #include "urlhook.h" #include <iostream> +#include <vector> UrlHook::UrlHook () { } @@ -28,9 +29,33 @@ int UrlHook::addAction (std::string field_value, std::string command) { std::string command_bg; + std::string temp; + std::vector <std::string> args; + size_t pos; + unsigned int i; + + /* Escape the '&' char to not discard $_GET parameters in the URL - #2659 */ + while ( (pos = field_value.find ("&", 0)) != std::string::npos) { + temp = field_value.substr (0, pos); + field_value.erase (0, pos + 1); + args.push_back (temp); + std::cout << temp << " " << std::endl; + } + + command_bg = command + " "; + + pos = args.size (); + for (i=0; i<pos; i++) { + // Escape the "&" + command_bg += args[i] + "\\&"; + } + + // Retrieve the last argument + command_bg += field_value; /* Execute the command in the background to not block the application */ - command_bg = command + " " + field_value + "&" ; + command_bg += "&"; + /* Execute a system call */ return RUN_COMMAND (command_bg.c_str()); diff --git a/sflphone-common/test/hookmanagerTest.cpp b/sflphone-common/test/hookmanagerTest.cpp index d5b8cb6a80..817533a927 100644 --- a/sflphone-common/test/hookmanagerTest.cpp +++ b/sflphone-common/test/hookmanagerTest.cpp @@ -38,7 +38,7 @@ void HookManagerTest::testAddAction () int status; - status = urlhook->addAction ("www.google.ca", "x-www-browser"); + status = urlhook->addAction ("http://www.google.ca/?arg1=arg1&arg2=nvls&x=2&y=45&z=1", "x-www-browser"); CPPUNIT_ASSERT (status == 0); } -- GitLab From 8c718173266eca322377769f9c156b8ec46f65de Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Fri, 15 Jan 2010 16:22:41 -0500 Subject: [PATCH 178/188] [#1722] Add RTP fallback for SRTP --- .../src/audio/audiortp/AudioRtpFactory.h | 5 ++++ sflphone-common/src/sip/sipvoiplink.cpp | 30 ++++++++++++++++++- 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/sflphone-common/src/audio/audiortp/AudioRtpFactory.h b/sflphone-common/src/audio/audiortp/AudioRtpFactory.h index 664bf3ae2c..dab313e1a9 100644 --- a/sflphone-common/src/audio/audiortp/AudioRtpFactory.h +++ b/sflphone-common/src/audio/audiortp/AudioRtpFactory.h @@ -104,6 +104,11 @@ namespace sfl { * Sdes = 2 */ inline RtpMethod getAudioRtpType(void) { return _rtpSessionType; } + + /** + * @param Set internal audio rtp session type (Symmetric, Zrtp, Sdes) + */ + inline RtpMethod getAudioRtpType(RtpMethod type) { return _rtpSessionType = type; } /** * Get the current AudioZrtpSession. Throws an AudioRtpFactoryException diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp index 8bbd1a64db..e6f77b2f2c 100644 --- a/sflphone-common/src/sip/sipvoiplink.cpp +++ b/sflphone-common/src/sip/sipvoiplink.cpp @@ -3226,6 +3226,7 @@ void call_on_media_update (pjsip_inv_session *inv, pj_status_t status) CryptoOffer crypto_offer; call->getLocalSDP()->get_remote_sdp_crypto_from_offer(remote_sdp, crypto_offer); + bool nego_success = false; if(!crypto_offer.empty()) { _debug("Crypto attribute in SDP: init Srtp session"); @@ -3240,10 +3241,37 @@ void call_on_media_update (pjsip_inv_session *inv, pj_status_t status) if(sdesnego.negotiate()) { _debug("SDES negociation successfull \n"); - + nego_success = true; call->getAudioRtp()->setRemoteCryptoInfo(sdesnego); } + else { + + //@TODO Handle fallback mechanism here + // - Call may Failed if SrtpOnly + // - Call fallback to RTP (make sure PBX support it, if not ...) + // - Ask (display a pop-up message) + + call->getAudioRtp()->getAudioRtpType(); + + } + } + + // We did not found any crypto context for this media + if(!nego_success && call->getAudioRtp()->getAudioRtpType() == sfl::Sdes) { + + // We did not found any crypto context for this media + // @TODO if SRTPONLY, CallFail + + // if RTPFALLBACK, change RTP session + call->getAudioRtp()->stop(); + call->getAudioRtp()->getAudioRtpType(sfl::Symmetric); + call->getAudioRtp()->initAudioRtpSession(call); + } + if(nego_success && call->getAudioRtp()->getAudioRtpType() != sfl::Sdes) { + + // We found a crypto context for this media bt Sdes is not + // enabled for this call, make a try using RTP only } try { -- GitLab From a08a3acba4d35dd977cc6a62d14ceaf718045793 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Fri, 15 Jan 2010 17:05:22 -0500 Subject: [PATCH 179/188] [#1722] Fix Receiving crypto when not enabling SDES --- sflphone-common/src/audio/audiortp/AudioRtpFactory.cpp | 7 ++++--- sflphone-common/src/sip/sipvoiplink.cpp | 10 +++++++--- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/sflphone-common/src/audio/audiortp/AudioRtpFactory.cpp b/sflphone-common/src/audio/audiortp/AudioRtpFactory.cpp index d9f88f1b55..48b3c3abfd 100644 --- a/sflphone-common/src/audio/audiortp/AudioRtpFactory.cpp +++ b/sflphone-common/src/audio/audiortp/AudioRtpFactory.cpp @@ -115,6 +115,7 @@ void AudioRtpFactory::initAudioRtpSession (SIPCall * ca) break; default: + _debug("Unsupported Rtp Session Exception Type!"); throw UnsupportedRtpSessionType(); } } else { @@ -186,7 +187,7 @@ void AudioRtpFactory::stop (void) _rtpSession = NULL; } catch (...) { _debugException ("Exception caught when stopping the audio rtp session"); - throw AudioRtpFactoryException(); + throw AudioRtpFactoryException("caught exception in AudioRtpFactory::stop"); } } @@ -218,7 +219,7 @@ sfl::AudioZrtpSession * AudioRtpFactory::getAudioZrtpSession() if ( (_rtpSessionType == Zrtp) && (_rtpSessionType != NULL)) { return static_cast<AudioZrtpSession *> (_rtpSession); } else { - throw AudioRtpFactoryException(); + throw AudioRtpFactoryException("_rtpSession is NULL in getAudioZrtpSession"); } } @@ -228,7 +229,7 @@ sfl::AudioZrtpSession * AudioRtpFactory::getAudioZrtpSession() static_cast<AudioSrtpSession *> (_rtpSession)->setRemoteCryptoInfo(nego); } else { - throw AudioRtpFactoryException(); + throw AudioRtpFactoryException("_rtpSession is NULL in setRemoteCryptoInfo"); } } } diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp index e6f77b2f2c..e6fc242312 100644 --- a/sflphone-common/src/sip/sipvoiplink.cpp +++ b/sflphone-common/src/sip/sipvoiplink.cpp @@ -3226,6 +3226,7 @@ void call_on_media_update (pjsip_inv_session *inv, pj_status_t status) CryptoOffer crypto_offer; call->getLocalSDP()->get_remote_sdp_crypto_from_offer(remote_sdp, crypto_offer); + bool nego_success = false; if(!crypto_offer.empty()) { @@ -3242,7 +3243,9 @@ void call_on_media_update (pjsip_inv_session *inv, pj_status_t status) if(sdesnego.negotiate()) { _debug("SDES negociation successfull \n"); nego_success = true; - call->getAudioRtp()->setRemoteCryptoInfo(sdesnego); + + if(call->getAudioRtp()->getAudioRtpType() == sfl::Sdes) + call->getAudioRtp()->setRemoteCryptoInfo(sdesnego); } else { @@ -3270,8 +3273,9 @@ void call_on_media_update (pjsip_inv_session *inv, pj_status_t status) if(nego_success && call->getAudioRtp()->getAudioRtpType() != sfl::Sdes) { - // We found a crypto context for this media bt Sdes is not - // enabled for this call, make a try using RTP only + // We found a crypto context for this media but Sdes is not + // enabled for this call, make a try using RTP only... + _debug("Sdes not initialized for this call\n"); } try { -- GitLab From 9c574cc3235e350e35292d3ed3dec5c4eaaaed72 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Fri, 15 Jan 2010 17:11:51 -0500 Subject: [PATCH 180/188] [#1722] Fix Switch to Srtp to Rtp in call_on_media update --- sflphone-common/src/audio/audiortp/AudioRtpFactory.h | 2 +- sflphone-common/src/sip/sipvoiplink.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/sflphone-common/src/audio/audiortp/AudioRtpFactory.h b/sflphone-common/src/audio/audiortp/AudioRtpFactory.h index dab313e1a9..d965e53f47 100644 --- a/sflphone-common/src/audio/audiortp/AudioRtpFactory.h +++ b/sflphone-common/src/audio/audiortp/AudioRtpFactory.h @@ -108,7 +108,7 @@ namespace sfl { /** * @param Set internal audio rtp session type (Symmetric, Zrtp, Sdes) */ - inline RtpMethod getAudioRtpType(RtpMethod type) { return _rtpSessionType = type; } + inline RtpMethod setAudioRtpType(RtpMethod type) { _rtpSessionType = type; } /** * Get the current AudioZrtpSession. Throws an AudioRtpFactoryException diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp index e6fc242312..2fac4d186e 100644 --- a/sflphone-common/src/sip/sipvoiplink.cpp +++ b/sflphone-common/src/sip/sipvoiplink.cpp @@ -3267,7 +3267,7 @@ void call_on_media_update (pjsip_inv_session *inv, pj_status_t status) // if RTPFALLBACK, change RTP session call->getAudioRtp()->stop(); - call->getAudioRtp()->getAudioRtpType(sfl::Symmetric); + call->getAudioRtp()->setAudioRtpType(sfl::Symmetric); call->getAudioRtp()->initAudioRtpSession(call); } -- GitLab From 359944665b28a70c0e547ffe93f47dd9b6443f64 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Fri, 15 Jan 2010 18:06:48 -0500 Subject: [PATCH 181/188] [#1722] Uncoupled initAudioRtpConfig from initAudioRtpSession --- .../src/audio/audiortp/AudioRtpFactory.cpp | 37 +++++++++---------- .../src/audio/audiortp/AudioRtpFactory.h | 31 +++++++++++++++- sflphone-common/src/sip/sipvoiplink.cpp | 9 ++++- 3 files changed, 54 insertions(+), 23 deletions(-) diff --git a/sflphone-common/src/audio/audiortp/AudioRtpFactory.cpp b/sflphone-common/src/audio/audiortp/AudioRtpFactory.cpp index 48b3c3abfd..3cf0fd3583 100644 --- a/sflphone-common/src/audio/audiortp/AudioRtpFactory.cpp +++ b/sflphone-common/src/audio/audiortp/AudioRtpFactory.cpp @@ -54,10 +54,8 @@ AudioRtpFactory::~AudioRtpFactory() stop(); } -void AudioRtpFactory::initAudioRtpSession (SIPCall * ca) +void AudioRtpFactory::initAudioRtpConfig(SIPCall *ca) { - ost::MutexLock m (_audioRtpThreadMutex); - assert (ca); if (_rtpSession != NULL) { @@ -68,36 +66,35 @@ void AudioRtpFactory::initAudioRtpSession (SIPCall * ca) AccountID accountId = Manager::instance().getAccountFromCall (ca->getCallId()); - bool srtpEnabled = false; - int keyExchangeProtocol = 1; - bool helloHashEnabled = true; - // Check if it is an IP-to-IP call - if (accountId == AccountNULL) { - srtpEnabled = Manager::instance().getConfigBool (IP2IP_PROFILE, SRTP_ENABLE); - keyExchangeProtocol = Manager::instance().getConfigInt (IP2IP_PROFILE, SRTP_KEY_EXCHANGE); - _debug ("Ip-to-ip profile selected with key exchange protocol number %d", keyExchangeProtocol); - helloHashEnabled = Manager::instance().getConfigBool (IP2IP_PROFILE, ZRTP_HELLO_HASH); + _srtpEnabled = Manager::instance().getConfigBool (IP2IP_PROFILE, SRTP_ENABLE); + _keyExchangeProtocol = Manager::instance().getConfigInt (IP2IP_PROFILE, SRTP_KEY_EXCHANGE); + _debug ("Ip-to-ip profile selected with key exchange protocol number %d", _keyExchangeProtocol); + _helloHashEnabled = Manager::instance().getConfigBool (IP2IP_PROFILE, ZRTP_HELLO_HASH); } else { - srtpEnabled = Manager::instance().getConfigBool (accountId, SRTP_ENABLE); - keyExchangeProtocol = Manager::instance().getConfigInt (accountId, SRTP_KEY_EXCHANGE); - _debug ("Registered account %s profile selected with key exchange protocol number %d", accountId.c_str(), keyExchangeProtocol); - helloHashEnabled = Manager::instance().getConfigBool (accountId, ZRTP_HELLO_HASH); + _srtpEnabled = Manager::instance().getConfigBool (accountId, SRTP_ENABLE); + _keyExchangeProtocol = Manager::instance().getConfigInt (accountId, SRTP_KEY_EXCHANGE); + _debug ("Registered account %s profile selected with key exchange protocol number %d", accountId.c_str(), _keyExchangeProtocol); + _helloHashEnabled = Manager::instance().getConfigBool (accountId, ZRTP_HELLO_HASH); } +} - _debug ("Srtp enable: %d ", srtpEnabled); +void AudioRtpFactory::initAudioRtpSession (SIPCall * ca) +{ + ost::MutexLock m (_audioRtpThreadMutex); - if (srtpEnabled) { + _debug ("Srtp enable: %d ", _srtpEnabled); + if (_srtpEnabled) { std::string zidFilename (Manager::instance().getConfigString (SIGNALISATION, ZRTP_ZIDFILE)); - switch (keyExchangeProtocol) { + switch (_keyExchangeProtocol) { case Zrtp: _rtpSession = new AudioZrtpSession (&Manager::instance(), ca, zidFilename); _rtpSessionType = Zrtp; - if (helloHashEnabled) { + if (_helloHashEnabled) { // TODO: be careful with that. The hello hash is computed asynchronously. Maybe it's // not even available at that point. ca->getLocalSDP()->set_zrtp_hash (static_cast<AudioZrtpSession *> (_rtpSession)->getHelloHash()); diff --git a/sflphone-common/src/audio/audiortp/AudioRtpFactory.h b/sflphone-common/src/audio/audiortp/AudioRtpFactory.h index d965e53f47..cfa14165f1 100644 --- a/sflphone-common/src/audio/audiortp/AudioRtpFactory.h +++ b/sflphone-common/src/audio/audiortp/AudioRtpFactory.h @@ -61,6 +61,8 @@ namespace sfl { AudioRtpFactory(SIPCall * ca); ~AudioRtpFactory(); + void initAudioRtpConfig(SIPCall *ca); + /** * Lazy instantiation method. Create a new RTP session of a given * type according to the content of the configuration file. @@ -108,7 +110,22 @@ namespace sfl { /** * @param Set internal audio rtp session type (Symmetric, Zrtp, Sdes) */ - inline RtpMethod setAudioRtpType(RtpMethod type) { _rtpSessionType = type; } + inline void setAudioRtpType(RtpMethod type) { _rtpSessionType = type; } + + /** + * Manually set the srtpEnable option (usefull for RTP fallback) + */ + void setSrtpEnabled(bool enable){ _srtpEnabled = enable; } + + /** + * Manually set the keyExchangeProtocol parameter (usefull for RTP fallback) + */ + void setKeyExchangeProtocol(int proto){ _keyExchangeProtocol = proto; } + + /** + * Manually set the setHelloHashEnabled parameter (usefull for RTP fallback) + */ + void setHelloHashEnabled(bool enable){ _helloHashEnabled = enable; } /** * Get the current AudioZrtpSession. Throws an AudioRtpFactoryException @@ -127,6 +144,18 @@ namespace sfl { void * _rtpSession; RtpMethod _rtpSessionType; ost::Mutex _audioRtpThreadMutex; + + // Field used when initializinga udio rtp session + // May be set manually or from config using initAudioRtpConfig + bool _srtpEnabled; + + // Field used when initializinga udio rtp session + // May be set manually or from config using initAudioRtpConfig + int _keyExchangeProtocol; + + // Field used when initializinga udio rtp session + // May be set manually or from config using initAudioRtpConfig + bool _helloHashEnabled; }; } #endif // __AUDIO_RTP_FACTORY_H__ diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp index 2fac4d186e..ed81c182f9 100644 --- a/sflphone-common/src/sip/sipvoiplink.cpp +++ b/sflphone-common/src/sip/sipvoiplink.cpp @@ -757,6 +757,7 @@ SIPVoIPLink::newOutgoingCall (const CallID& id, const std::string& toUrl) try { _debug ("Creating new rtp session in newOutgoingCall"); + call->getAudioRtp()->initAudioRtpConfig (call); call->getAudioRtp()->initAudioRtpSession (call); } catch (...) { _debug ("Failed to create rtp thread from newOutGoingCall"); @@ -1060,6 +1061,7 @@ SIPVoIPLink::offhold (const CallID& id) } try { + call->getAudioRtp()->initAudioRtpConfig (call); call->getAudioRtp()->initAudioRtpSession (call); } catch (...) { _debug ("! SIP Failure: Unable to create RTP Session (%s:%d)", __FILE__, __LINE__); @@ -1569,6 +1571,7 @@ bool SIPVoIPLink::new_ip_to_ip_call (const CallID& id, const std::string& to) // Audio Rtp Session must be initialized before creating initial offer in SDP session // since SDES require crypto attribute. try { + call->getAudioRtp()->initAudioRtpConfig (call); call->getAudioRtp()->initAudioRtpSession (call); } catch (...) { _debug ("! SIP Failure: Unable to create RTP Session in SIPVoIPLink::new_ip_to_ip_call (%s:%d)", __FILE__, __LINE__); @@ -3265,9 +3268,10 @@ void call_on_media_update (pjsip_inv_session *inv, pj_status_t status) // We did not found any crypto context for this media // @TODO if SRTPONLY, CallFail - // if RTPFALLBACK, change RTP session + // if RTPFALLBACK, change RTP session + _debug("Did not found any crypto or negociation failed but Sdes enabled"); call->getAudioRtp()->stop(); - call->getAudioRtp()->setAudioRtpType(sfl::Symmetric); + call->getAudioRtp()->setSrtpEnabled(false); call->getAudioRtp()->initAudioRtpSession(call); } @@ -3661,6 +3665,7 @@ mod_on_rx_request (pjsip_rx_data *rdata) call->getLocalSDP()->set_ip_address (addrSdp); try { + call->getAudioRtp()->initAudioRtpConfig (call); call->getAudioRtp()->initAudioRtpSession (call); } catch (...) { _debug ("Failed to create rtp thread from answer"); -- GitLab From fa296d6d48f063ae36e6215fbd6e244c7db28b18 Mon Sep 17 00:00:00 2001 From: pierre-luc <pierre-luc.bacon@savoirfairelinux.com> Date: Fri, 15 Jan 2010 20:10:54 -0500 Subject: [PATCH 182/188] [#1722] Fixed problem where multiple crypto lines could not be processed sequentially. --- sflphone-common/src/sip/Pattern.cpp | 14 -- sflphone-common/src/sip/SdesNegotiator.cpp | 122 +++++++++------- sflphone-common/src/sip/SdesNegotiator.h | 154 ++++++++++++-------- sflphone-common/test/sdesnegotiatorTest.cpp | 65 ++++----- sflphone-common/test/sdesnegotiatorTest.h | 18 ++- 5 files changed, 202 insertions(+), 171 deletions(-) diff --git a/sflphone-common/src/sip/Pattern.cpp b/sflphone-common/src/sip/Pattern.cpp index 71e093d13c..290c9f7a79 100644 --- a/sflphone-common/src/sip/Pattern.cpp +++ b/sflphone-common/src/sip/Pattern.cpp @@ -180,23 +180,17 @@ std::string Pattern::group (const std::string& groupName) _count, groupName.c_str(), &stringPtr); - - // printf(" _count : %i\n", _count); - // printf("stringPtr : %s\n", stringPtr); if (rc < 0) { switch (rc) { case PCRE_ERROR_NOSUBSTRING: - // printf("Pattern::PCRE_ERROR_NOSUBSTRING\n"); throw std::out_of_range ("Invalid group reference."); case PCRE_ERROR_NOMEMORY: - // printf("Pattern::PCRE_ERROR_NOMEMORY\n"); throw match_error ("Memory exhausted."); default: - // printf("Pattern::default match error\n"); throw match_error ("Failed to get named substring."); } } @@ -255,10 +249,6 @@ bool Pattern::matches (void) throw (match_error) bool Pattern::matches (const std::string& subject) throw (match_error) { - // printf("Pattern::matches\n"); - // printf(" Current offset: %d, old offset: %d", _offset[1], _offset[0]); - // printf(" Trying <start>%s<end>\n", subject.substr(_offset[1]).c_str()); - // Try to find a match for this pattern int rc = pcre_exec ( _re, @@ -271,7 +261,6 @@ bool Pattern::matches (const std::string& subject) throw (match_error) _ovectorSize); // Matching failed. - if (rc < 0) { _offset[0] = _offset[1] = 0; // printf(" Matching failed with %d\n", rc); @@ -285,8 +274,6 @@ bool Pattern::matches (const std::string& subject) throw (match_error) _offset[1] = _ovector[1] + _offset[0]; } - // printf(" Matching succeeded with %d to %d\n", (int) start(), (int) end()); - // Matching succeded but not enough space. if (rc == 0) { throw match_error ("No space to store all substrings."); @@ -295,7 +282,6 @@ bool Pattern::matches (const std::string& subject) throw (match_error) // Matching succeeded. Keep the number of substrings for // subsequent calls to group(). - // printf("_count: %i = %i\n", _count, rc); _count = rc; return true; diff --git a/sflphone-common/src/sip/SdesNegotiator.cpp b/sflphone-common/src/sip/SdesNegotiator.cpp index e8618e3ab8..f9411df3d9 100644 --- a/sflphone-common/src/sip/SdesNegotiator.cpp +++ b/sflphone-common/src/sip/SdesNegotiator.cpp @@ -28,13 +28,6 @@ using namespace sfl; -struct CryptoAttribute { - std::string tag; - std::string cryptoSuite; - std::string keyParams; - std::string sessionParams; -}; - SdesNegotiator::SdesNegotiator (const std::vector<CryptoSuiteDefinition>& localCapabilites, const std::vector<std::string>& remoteAttribute) : _remoteAttribute (remoteAttribute), @@ -43,7 +36,7 @@ SdesNegotiator::SdesNegotiator (const std::vector<CryptoSuiteDefinition>& localC } -void SdesNegotiator::parse (void) +std::vector<CryptoAttribute *> SdesNegotiator::parse (void) { // The patterns below try to follow // the ABNF grammar rules described in @@ -63,8 +56,7 @@ void SdesNegotiator::parse (void) // used to match white space (which are used as separator) generalSyntaxPattern = new Pattern ("[\x20\x09]+", "g"); - tagPattern = new Pattern ("^a=crypto:(?P<tag>[0-9]{1,9})", "g"); - // tagPattern = new Pattern ("[0-9]"); + tagPattern = new Pattern ("^a=crypto:(?P<tag>[0-9]{1,9})"); cryptoSuitePattern = new Pattern ( "(?P<cryptoSuite>AES_CM_128_HMAC_SHA1_80|" \ @@ -91,7 +83,6 @@ void SdesNegotiator::parse (void) } catch (compile_error& exception) { throw parse_error ("A compile exception occured on a pattern."); - } @@ -100,18 +91,15 @@ void SdesNegotiator::parse (void) std::vector<std::string>::iterator iter; - + std::vector<CryptoAttribute *> cryptoAttributeVector; + for (iter = _remoteAttribute.begin(); iter != _remoteAttribute.end(); iter++) { - - std::cout << (*iter) << std::endl; - // Split the line into its component // that we will analyze further down. - std::vector<std::string> sdesLine; + std::vector<std::string> sdesLine; *generalSyntaxPattern << (*iter); - try { sdesLine = generalSyntaxPattern->split(); @@ -126,49 +114,50 @@ void SdesNegotiator::parse (void) // Check if the attribute starts with a=crypto // and get the tag for this line *tagPattern << sdesLine.at (0); - - tagPattern->matches(); - - try { - std::string tag = tagPattern->group ("tag"); - std::cout << "tag = " << tag << std::endl; - } catch (match_error& exception) { - throw parse_error ("Error while parsing the tag field"); - } + + std::string tag; + if (tagPattern->matches()) { + try { + tag = tagPattern->group ("tag"); + } catch (match_error& exception) { + throw parse_error ("Error while parsing the tag field"); + } + } else { + return cryptoAttributeVector; + } // Check if the crypto suite is valid and retreive // its value. *cryptoSuitePattern << sdesLine.at (1); - cryptoSuitePattern->matches(); - - try { - _cryptoSuite = cryptoSuitePattern->group ("cryptoSuite"); - std::cout << "crypto-suite = " << _cryptoSuite << std::endl; - } catch (match_error& exception) { - throw parse_error ("Error while parsing the crypto-suite field"); - } - + std::string cryptoSuite; + + if (cryptoSuitePattern->matches()) { + try { + cryptoSuite = cryptoSuitePattern->group ("cryptoSuite"); + } catch (match_error& exception) { + throw parse_error ("Error while parsing the crypto-suite field"); + } + } else { + return cryptoAttributeVector; + } + // Parse one or more key-params field. *keyParamsPattern << sdesLine.at (2); + std::string srtpKeyInfo; + std::string srtpKeyMethod; + std::string lifetime; + std::string mkiLength; + std::string mkiValue; + try { while (keyParamsPattern->matches()) { - - _srtpKeyMethod = keyParamsPattern->group ("srtpKeyMethod"); - std::cout << "srtp-key-method = " << _srtpKeyMethod << std::endl; - - _srtpKeyInfo = keyParamsPattern->group ("srtpKeyInfo"); - std::cout << "srtp-key-info = " << _srtpKeyInfo << std::endl; - - _lifetime = keyParamsPattern->group ("lifetime"); - std::cout << "lifetime = " << _lifetime << std::endl; - - _mkiValue = keyParamsPattern->group ("mkiValue"); - std::cout << "mkiValue = " << _mkiValue << std::endl; - - _mkiLength = keyParamsPattern->group ("mkiLength"); - std::cout << "mkiLength = " << _mkiLength << std::endl; + srtpKeyMethod = keyParamsPattern->group ("srtpKeyMethod"); + srtpKeyInfo = keyParamsPattern->group ("srtpKeyInfo"); + lifetime = keyParamsPattern->group ("lifetime"); + mkiValue = keyParamsPattern->group ("mkiValue"); + mkiLength = keyParamsPattern->group ("mkiLength"); } } catch (match_error& exception) { throw parse_error ("Error while parsing the key-params field"); @@ -176,7 +165,7 @@ void SdesNegotiator::parse (void) /** * Parse the optional session-param fields - * @todo Implement this ! + * @TODO Implement this ! */ /* if (sdesLine.size() == 3) continue; @@ -191,14 +180,39 @@ void SdesNegotiator::parse (void) } } } */ + + // Add the new CryptoAttribute to the vector + std::cout << (*iter) << std::endl; + CryptoAttribute * cryptoAttribute = new CryptoAttribute(tag, cryptoSuite, srtpKeyMethod, srtpKeyInfo, lifetime, mkiValue, mkiLength); + cryptoAttributeVector.push_back(cryptoAttribute); } - + return cryptoAttributeVector; } bool SdesNegotiator::negotiate (void) { - parse(); - + try { + std::vector<CryptoAttribute *> cryptoAttributeVector = parse(); + + std::vector<CryptoAttribute *>::iterator iter; + for (iter = cryptoAttributeVector.begin(); iter != cryptoAttributeVector.end(); iter++) { + std::cout << "Negotiate tag: " + (*iter)->getTag() << std::endl; + std::cout << "Crypto Suite: " + (*iter)->getCryptoSuite() << std::endl; + std::cout << "SRTP Key Method: " + (*iter)->getSrtpKeyMethod() << std::endl; + std::cout << "SRTP Key Info: " + (*iter)->getSrtpKeyInfo() << std::endl; + std::cout << "Lifetime: " + (*iter)->getLifetime() << std::endl; + std::cout << "MKI Value: " + (*iter)->getMkiValue() << std::endl; + std::cout << "MKI Length: " + (*iter)->getMkiLength() << std::endl; + + delete (*iter); + } + + } catch (parse_error& exception) { + return false; + } catch (match_error& exception) { + return false; + } + return true; } diff --git a/sflphone-common/src/sip/SdesNegotiator.h b/sflphone-common/src/sip/SdesNegotiator.h index 08e32090ef..d8a568421e 100644 --- a/sflphone-common/src/sip/SdesNegotiator.h +++ b/sflphone-common/src/sip/SdesNegotiator.h @@ -74,11 +74,43 @@ namespace sfl { {"AES_CM_128_HMAC_SHA1_32", 128, 112, 48, 31, AESCounterMode, 128, HMACSHA1, 32, 80, 160, 160 }, {"F8_128_HMAC_SHA1_80", 128, 112, 48, 31, AESF8Mode, 128, HMACSHA1, 80, 80, 160, 160 } }; - /** - * Internal structure - * used during parsing. - */ - struct CryptoAttribute; + + class CryptoAttribute { + + public: + CryptoAttribute(std::string tag, + std::string cryptoSuite, + std::string srtpKeyMethod, + std::string srtpKeyInfo, + std::string lifetime, + std::string mkiValue, + std::string mkiLength) : + tag(tag), + cryptoSuite(cryptoSuite), + srtpKeyMethod(srtpKeyMethod), + srtpKeyInfo(srtpKeyInfo), + lifetime(lifetime), + mkiValue(mkiValue), + mkiLength(mkiLength) {}; + + + inline std::string getTag() { return tag; }; + inline std::string getCryptoSuite() { return cryptoSuite; }; + inline std::string getSrtpKeyMethod() { return srtpKeyMethod; }; + inline std::string getSrtpKeyInfo() { return srtpKeyInfo; }; + inline std::string getLifetime() { return lifetime; }; + inline std::string getMkiValue() { return mkiValue; }; + inline std::string getMkiLength() { return mkiLength; }; + + private: + std::string tag; + std::string cryptoSuite; + std::string srtpKeyMethod; + std::string srtpKeyInfo; + std::string lifetime; + std::string mkiValue; + std::string mkiLength; + }; class SdesNegotiator { @@ -99,35 +131,35 @@ namespace sfl { bool negotiate(void); - /** - * Return crypto suite after negotiation - */ - std::string getCryptoSuite(void) { return _cryptoSuite; } + /** + * Return crypto suite after negotiation + */ + std::string getCryptoSuite(void) { return _cryptoSuite; } - /** - * Return key method after negotiation (most likely inline:) - */ - std::string getKeyMethod(void) { return _srtpKeyMethod; } + /** + * Return key method after negotiation (most likely inline:) + */ + std::string getKeyMethod(void) { return _srtpKeyMethod; } - /** - * Return crypto suite after negotiation - */ - std::string getKeyInfo(void) { return _srtpKeyInfo; } + /** + * Return crypto suite after negotiation + */ + std::string getKeyInfo(void) { return _srtpKeyInfo; } - /** - * Return key lifetime after negotiation - */ - std::string getLifeTime(void) { return _lifetime; } + /** + * Return key lifetime after negotiation + */ + std::string getLifeTime(void) { return _lifetime; } - /** - * Return mki value after negotiation - */ - std::string getMkiValue(void) { return _mkiValue; } + /** + * Return mki value after negotiation + */ + std::string getMkiValue(void) { return _mkiValue; } - /** - * Return mki length after negotiation - */ - std::string getMkiLength(void) { return _mkiLength; } + /** + * Return mki length after negotiation + */ + std::string getMkiLength(void) { return _mkiLength; } private: /** @@ -139,39 +171,37 @@ namespace sfl { std::vector<CryptoSuiteDefinition> _localCapabilities; - /** - * Selected crypto suite after negotiation - */ - std::string _cryptoSuite; - - /** - * Selected key method after negotiation (most likely inline:) - */ - std::string _srtpKeyMethod; - - /** - * Selected crypto suite after negotiation - */ - std::string _srtpKeyInfo; - - /** - * Selected key lifetime after negotiation - */ - std::string _lifetime; - - /** - * Selected mki value after negotiation - */ - std::string _mkiValue; - - /** - * Selected mki length after negotiation - */ - std::string _mkiLength; - - void parse(void); - - CryptoAttribute * tokenize(const std::string& attributeLine); + /** + * Selected crypto suite after negotiation + */ + std::string _cryptoSuite; + + /** + * Selected key method after negotiation (most likely inline:) + */ + std::string _srtpKeyMethod; + + /** + * Selected crypto suite after negotiation + */ + std::string _srtpKeyInfo; + + /** + * Selected key lifetime after negotiation + */ + std::string _lifetime; + + /** + * Selected mki value after negotiation + */ + std::string _mkiValue; + + /** + * Selected mki length after negotiation + */ + std::string _mkiLength; + + std::vector<CryptoAttribute *> parse(void); }; } #endif diff --git a/sflphone-common/test/sdesnegotiatorTest.cpp b/sflphone-common/test/sdesnegotiatorTest.cpp index 71b429a5ea..ebe70c8bac 100644 --- a/sflphone-common/test/sdesnegotiatorTest.cpp +++ b/sflphone-common/test/sdesnegotiatorTest.cpp @@ -40,21 +40,18 @@ using std::endl; void SdesNegotiatorTest::setUp() { - - std::string attr("a=crypto:1 AES_CM_128_HMAC_SHA1_80 inline:AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwd|2^20|1:32"); - - // std::string attr("a=crypto:1 AES_CM_128_HMAC_SHA1_80 inline:d0RmdmcmVCspeEc3QGZiNWpVLFJhQX1cfHAwJSoj|2^20|1:32"); - + // Add a new SDES crypto line to be processed. remoteOffer = new std::vector<std::string>(); - remoteOffer->push_back(attr); - + remoteOffer->push_back(std::string("a=crypto:1 AES_CM_128_HMAC_SHA1_80 inline:AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwd|2^20|1:32")); + remoteOffer->push_back(std::string("a=crypto:2 AES_CM_128_HMAC_SHA1_32 inline:NzB4d1BINUAvLEw6UzF3WSJ+PSdFcGdUJShpX1Zj|2^20|1:32")); + + // Register the local capabilities. localCapabilities = new std::vector<sfl::CryptoSuiteDefinition>(); for(int i = 0; i < 3; i++) { localCapabilities->push_back(sfl::CryptoSuites[i]); } sdesnego = new sfl::SdesNegotiator(*localCapabilities, *remoteOffer); - } @@ -121,38 +118,40 @@ void SdesNegotiatorTest::testKeyParamsPattern() pattern->matches(); CPPUNIT_ASSERT(pattern->group("srtpKeyMethod").compare("inline:")); - /* - while (pattern->matches()) { - - std::string _srtpKeyMethod = pattern->group ("srtpKeyMethod"); - std::string _srtpKeyInfo = pattern->group ("srtpKeyInfo"); - std::string _lifetime = pattern->group ("lifetime"); - std::string _mkiValue = pattern->group ("mkiValue"); - std::string _mkiLength = pattern->group ("mkiLength"); - } - - - CPPUNIT_ASSERT(pattern->group("srtpKeyMethod").compare("inline:")); - CPPUNIT_ASSERT(pattern->group("srtpKeyInfo").compare("d0RmdmcmVCspeEc3QGZiNWpVLFJhQX1cfHAwJSoj")); - CPPUNIT_ASSERT(pattern->group("lifetime").compare("20")); - CPPUNIT_ASSERT(pattern->group("mkivalue").compare("1")); - CPPUNIT_ASSERT(pattern->group("mkilength").compare("32")); - */ - delete pattern; pattern = NULL; } - +/** + * Make sure that all the fields can be extracted + * properly from the syntax. + */ void SdesNegotiatorTest::testNegotiation() { CPPUNIT_ASSERT(sdesnego->negotiate()); - CPPUNIT_ASSERT(sdesnego->getCryptoSuite().compare("AES_CM_128_HMAC_SHA1_80") == 0); - CPPUNIT_ASSERT(sdesnego->getKeyMethod().compare("inline") == 0); - CPPUNIT_ASSERT(sdesnego->getKeyInfo().compare("AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwd") == 0); - CPPUNIT_ASSERT(sdesnego->getLifeTime().compare("20") == 0); - CPPUNIT_ASSERT(sdesnego->getMkiValue().compare("1") == 0); - CPPUNIT_ASSERT(sdesnego->getMkiLength().compare("32") == 0); +} + +/** + * Make sure that unproperly formatted crypto lines are rejected. + */ +void SdesNegotiatorTest::testComponent() +{ + // Register the local capabilities. + std::vector<sfl::CryptoSuiteDefinition> * capabilities = new std::vector<sfl::CryptoSuiteDefinition>(); + + //Support all the CryptoSuites + for(int i = 0; i < 3; i++) { + capabilities->push_back(sfl::CryptoSuites[i]); + } + + // Make sure that if a component is missing, negotiate will fail + std::string cryptoLine("a=crypto:1 AES_CM_128_HMAC_SHA1_80 inline:|2^20|1:32"); + std::vector<std::string> * cryptoOffer = new std::vector<std::string>(); + cryptoOffer->push_back(cryptoLine); + + sfl::SdesNegotiator * negotiator = new sfl::SdesNegotiator(*capabilities, *cryptoOffer); + + CPPUNIT_ASSERT(negotiator->negotiate() == false); } diff --git a/sflphone-common/test/sdesnegotiatorTest.h b/sflphone-common/test/sdesnegotiatorTest.h index 4e97a9d6da..2a7b552222 100644 --- a/sflphone-common/test/sdesnegotiatorTest.h +++ b/sflphone-common/test/sdesnegotiatorTest.h @@ -66,6 +66,7 @@ class SdesNegotiatorTest : public CppUnit::TestCase { CPPUNIT_TEST( testCryptoSuitePattern ); CPPUNIT_TEST( testKeyParamsPattern ); CPPUNIT_TEST( testNegotiation ); + // CPPUNIT_TEST( testComponent ); CPPUNIT_TEST_SUITE_END(); public: @@ -84,24 +85,25 @@ class SdesNegotiatorTest : public CppUnit::TestCase { */ inline void tearDown(); - void testTagPattern(); + void testTagPattern(); - void testCryptoSuitePattern(); + void testCryptoSuitePattern(); - void testKeyParamsPattern(); + void testKeyParamsPattern(); void testNegotiation(); + + void testComponent(); private: - sfl::Pattern *pattern; + sfl::Pattern *pattern; - sfl::SdesNegotiator *sdesnego; + sfl::SdesNegotiator *sdesnego; - std::vector<std::string> *remoteOffer; - - std::vector<sfl::CryptoSuiteDefinition> *localCapabilities; + std::vector<std::string> *remoteOffer; + std::vector<sfl::CryptoSuiteDefinition> *localCapabilities; }; /* Register our test module */ -- GitLab From f0f7027a309fc4a48cd75325af744d348a45eac4 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Mon, 18 Jan 2010 12:30:10 -0500 Subject: [PATCH 183/188] [#1722] Put crypto attribute in media field --- sflphone-common/src/sip/sdp.cpp | 65 +++++++++++++-------- sflphone-common/test/sdesnegotiatorTest.cpp | 18 +++--- 2 files changed, 50 insertions(+), 33 deletions(-) diff --git a/sflphone-common/src/sip/sdp.cpp b/sflphone-common/src/sip/sdp.cpp index e81b598978..06c3540a88 100644 --- a/sflphone-common/src/sip/sdp.cpp +++ b/sflphone-common/src/sip/sdp.cpp @@ -364,7 +364,7 @@ void Sdp::sdp_add_media_description() } } - +// @TODO should be a vector void Sdp::sdp_add_sdes_attribute (std::string crypto) { @@ -386,9 +386,16 @@ void Sdp::sdp_add_sdes_attribute (std::string crypto) attribute->value.ptr = (char*) pj_pool_alloc (_pool, attribute->value.slen+1); pj_memcpy (attribute->value.ptr, tempbuf, attribute->value.slen+1); - // add crypto attribute to sdp session - if(pjmedia_sdp_attr_add(&(_local_offer->attr_count), _local_offer->attr, attribute) != PJ_SUCCESS){ - throw sdpException(); + // get number of media for this SDP + int media_count = _local_offer->media_count; + + // add crypto attribute to media + for(int i = 0; i < media_count; i++) { + + if(pjmedia_sdp_media_add_attr(_local_offer->media[i], attribute) != PJ_SUCCESS) { + // if(pjmedia_sdp_attr_add(&(_local_offer->attr_count), _local_offer->attr, attribute) != PJ_SUCCESS){ + throw sdpException(); + } } } @@ -670,42 +677,52 @@ void Sdp::get_remote_sdp_media_from_offer (const pjmedia_sdp_session* remote_sdp void Sdp::get_remote_sdp_crypto_from_offer (const pjmedia_sdp_session* remote_sdp, CryptoOffer& crypto_offer) { - int i; - int attr_count; + int i, j; + int attr_count, media_count; pjmedia_sdp_attr *attribute; + pjmedia_sdp_media *media; - // get the number of attribute for this sdp session - attr_count = remote_sdp->attr_count; + // get the number of media for this sdp session + media_count = remote_sdp->media_count; - // *r_crypto= pjmedia_sdp_media_find_attr(attribute, &STR_CRYPTO, NULL); + // *r_crypto = pjmedia_sdp_media_find_attr(attribute, &STR_CRYPTO, NULL); - _debug("****************** Parse for Crypto %i ********************", attr_count); + _debug("****************** Parse for Crypto ********************"); CryptoOffer remoteOffer; - // iterate over all atribute - for (i = 0; i < attr_count; ++i) { + // iterate over all media + for (i = 0; i < media_count; ++i) { _debug("%.*s", (int)remote_sdp->attr[i]->name.slen, remote_sdp->attr[i]->name.ptr); _debug("%.*s", (int)remote_sdp->attr[i]->value.slen, remote_sdp->attr[i]->value.ptr); - // test if this attribute is a crypto - if (pj_stricmp2 (&remote_sdp->attr[i]->name, "crypto") == 0) { + // get media + media = remote_sdp->media[i]; - attribute = remote_sdp->attr[i]; + // get number of attribute for this memdia + attr_count = media->attr_count; - _debug("****************** Found a Crypto ********************"); - std::string attr(attribute->value.ptr, attribute->value.slen); + // iterate over all attribute for this media + for(j = 0; j < attr_count; j++) { - // @TODO our parser require the "acrypto:" to be present - std::string full_attr = "a=crypto:"; - full_attr += attr; + attribute = media->attr[i]; - crypto_offer.push_back(full_attr); - } - } + // test if this attribute is a crypto + if (pj_stricmp2 (&attribute->name, "crypto") == 0) { + + _debug("****************** Found a Crypto ********************"); + std::string attr(attribute->value.ptr, attribute->value.slen); + + // @TODO our parser require the "a=crypto:" to be present + std::string full_attr = "a=crypto:"; + full_attr += attr; - _debug("****************** Did not Found any Crypto ********************"); + crypto_offer.push_back(full_attr); + } + + } + } } diff --git a/sflphone-common/test/sdesnegotiatorTest.cpp b/sflphone-common/test/sdesnegotiatorTest.cpp index ebe70c8bac..2db3fdff7b 100644 --- a/sflphone-common/test/sdesnegotiatorTest.cpp +++ b/sflphone-common/test/sdesnegotiatorTest.cpp @@ -40,12 +40,12 @@ using std::endl; void SdesNegotiatorTest::setUp() { - // Add a new SDES crypto line to be processed. + // Add a new SDES crypto line to be processed. remoteOffer = new std::vector<std::string>(); remoteOffer->push_back(std::string("a=crypto:1 AES_CM_128_HMAC_SHA1_80 inline:AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwd|2^20|1:32")); - remoteOffer->push_back(std::string("a=crypto:2 AES_CM_128_HMAC_SHA1_32 inline:NzB4d1BINUAvLEw6UzF3WSJ+PSdFcGdUJShpX1Zj|2^20|1:32")); + remoteOffer->push_back(std::string("a=crypto:2 AES_CM_128_HMAC_SHA1_32 inline:NzB4d1BINUAvLEw6UzF3WSJ+PSdFcGdUJShpX1Zj|2^20|1:32")); - // Register the local capabilities. + // Register the local capabilities. localCapabilities = new std::vector<sfl::CryptoSuiteDefinition>(); for(int i = 0; i < 3; i++) { localCapabilities->push_back(sfl::CryptoSuites[i]); @@ -136,22 +136,22 @@ void SdesNegotiatorTest::testNegotiation() */ void SdesNegotiatorTest::testComponent() { - // Register the local capabilities. + // Register the local capabilities. std::vector<sfl::CryptoSuiteDefinition> * capabilities = new std::vector<sfl::CryptoSuiteDefinition>(); - //Support all the CryptoSuites + //Support all the CryptoSuites for(int i = 0; i < 3; i++) { capabilities->push_back(sfl::CryptoSuites[i]); } - // Make sure that if a component is missing, negotiate will fail - std::string cryptoLine("a=crypto:1 AES_CM_128_HMAC_SHA1_80 inline:|2^20|1:32"); - std::vector<std::string> * cryptoOffer = new std::vector<std::string>(); + // Make sure that if a component is missing, negotiate will fail + std::string cryptoLine("a=crypto:1 AES_CM_128_HMAC_SHA1_80 inline:|2^20|1:32"); + std::vector<std::string> * cryptoOffer = new std::vector<std::string>(); cryptoOffer->push_back(cryptoLine); sfl::SdesNegotiator * negotiator = new sfl::SdesNegotiator(*capabilities, *cryptoOffer); - CPPUNIT_ASSERT(negotiator->negotiate() == false); + CPPUNIT_ASSERT(negotiator->negotiate() == false); } -- GitLab From 386cb23a7fe80d9e9d87c8b7eef095ee79853a75 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Mon, 18 Jan 2010 12:36:05 -0500 Subject: [PATCH 184/188] [#1722] Fix segfault in debugs --- sflphone-common/src/sip/sdp.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sflphone-common/src/sip/sdp.cpp b/sflphone-common/src/sip/sdp.cpp index 06c3540a88..cf7749a523 100644 --- a/sflphone-common/src/sip/sdp.cpp +++ b/sflphone-common/src/sip/sdp.cpp @@ -364,7 +364,7 @@ void Sdp::sdp_add_media_description() } } -// @TODO should be a vector +// @TODO crypto should be a vector of string void Sdp::sdp_add_sdes_attribute (std::string crypto) { @@ -694,8 +694,8 @@ void Sdp::get_remote_sdp_crypto_from_offer (const pjmedia_sdp_session* remote_sd // iterate over all media for (i = 0; i < media_count; ++i) { - _debug("%.*s", (int)remote_sdp->attr[i]->name.slen, remote_sdp->attr[i]->name.ptr); - _debug("%.*s", (int)remote_sdp->attr[i]->value.slen, remote_sdp->attr[i]->value.ptr); + // _debug("%.*s", (int)remote_sdp->attr[i]->name.slen, remote_sdp->attr[i]->name.ptr); + // _debug("%.*s", (int)remote_sdp->attr[i]->value.slen, remote_sdp->attr[i]->value.ptr); // get media media = remote_sdp->media[i]; -- GitLab From 30f31c937dbf2aa535ecf7262348dad95cd0daa9 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Mon, 18 Jan 2010 12:44:18 -0500 Subject: [PATCH 185/188] [#1722] Fix iteration over all attribute field for media --- sflphone-common/src/sip/sdp.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sflphone-common/src/sip/sdp.cpp b/sflphone-common/src/sip/sdp.cpp index cf7749a523..9e9aed149c 100644 --- a/sflphone-common/src/sip/sdp.cpp +++ b/sflphone-common/src/sip/sdp.cpp @@ -706,7 +706,7 @@ void Sdp::get_remote_sdp_crypto_from_offer (const pjmedia_sdp_session* remote_sd // iterate over all attribute for this media for(j = 0; j < attr_count; j++) { - attribute = media->attr[i]; + attribute = media->attr[j]; // test if this attribute is a crypto if (pj_stricmp2 (&attribute->name, "crypto") == 0) { -- GitLab From 26131ec2d59e130d7a681738f3fd9d8b92f9c3cd Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Mon, 18 Jan 2010 13:10:21 -0500 Subject: [PATCH 186/188] [#1722] Use a vector<string> instead of a simgle string when init crypto attribute --- .../src/audio/audiortp/AudioSrtpSession.cpp | 16 ++++--- .../src/audio/audiortp/AudioSrtpSession.h | 3 +- sflphone-common/src/sip/sdp.cpp | 43 +++++++++++-------- sflphone-common/src/sip/sdp.h | 8 ++-- 4 files changed, 41 insertions(+), 29 deletions(-) diff --git a/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp b/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp index 4715587ff0..7099b807bd 100644 --- a/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp +++ b/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp @@ -62,10 +62,12 @@ AudioSrtpSession::AudioSrtpSession (ManagerImpl * manager, SIPCall * sipcall) : } -std::string AudioSrtpSession::getLocalCryptoInfo() { +std::vector<std::string> AudioSrtpSession::getLocalCryptoInfo() { _debug("Get Cryptographic info from this rtp session"); + std::vector<std::string> crypto_vector; + // @TODO we should return a vector containing supported // cryptographic context tagged 1, 2, 3... std::string tag = "1"; @@ -79,13 +81,15 @@ std::string AudioSrtpSession::getLocalCryptoInfo() { srtp_keys.append("|2^20|1:32"); // generate crypto attribute - std::string crypto = tag.append(" "); - crypto += crypto_suite.append(" "); - crypto += srtp_keys; + std::string crypto_attr = tag.append(" "); + crypto_attr += crypto_suite.append(" "); + crypto_attr += srtp_keys; + + _debug("%s", crypto_attr.c_str()); - _debug("%s", crypto.c_str()); + crypto_vector.push_back(crypto_attr); - return crypto; + return crypto_vector; } diff --git a/sflphone-common/src/audio/audiortp/AudioSrtpSession.h b/sflphone-common/src/audio/audiortp/AudioSrtpSession.h index 7e94a62bae..d3b8c3dbfd 100644 --- a/sflphone-common/src/audio/audiortp/AudioSrtpSession.h +++ b/sflphone-common/src/audio/audiortp/AudioSrtpSession.h @@ -23,6 +23,7 @@ #include "sip/SdesNegotiator.h" #include <ccrtp/CryptoContext.h> +#include <vector> class SdesNegotiator; class ManagerImpl; @@ -68,7 +69,7 @@ namespace sfl { AudioSrtpSession(ManagerImpl * manager, SIPCall * sipcall); - std::string getLocalCryptoInfo(void); + std::vector<std::string> getLocalCryptoInfo(void); void setRemoteCryptoInfo(sfl::SdesNegotiator& nego); diff --git a/sflphone-common/src/sip/sdp.cpp b/sflphone-common/src/sip/sdp.cpp index 9e9aed149c..69ab580cc4 100644 --- a/sflphone-common/src/sip/sdp.cpp +++ b/sflphone-common/src/sip/sdp.cpp @@ -365,39 +365,46 @@ void Sdp::sdp_add_media_description() } // @TODO crypto should be a vector of string -void Sdp::sdp_add_sdes_attribute (std::string crypto) +void Sdp::sdp_add_sdes_attribute (std::vector<std::string>& crypto) { // temporary buffer used to store crypto attribute char tempbuf[256]; - // the attribute to add to sdp - pjmedia_sdp_attr *attribute = (pjmedia_sdp_attr*) pj_pool_zalloc(_pool, sizeof(pjmedia_sdp_attr)); + std::vector<std::string>::iterator iter = crypto.begin(); - attribute->name = pj_strdup3(_pool, "crypto"); + while(iter != crypto.end()) { - // _debug("crypto from sdp: %s", crypto.c_str()); + // the attribute to add to sdp + pjmedia_sdp_attr *attribute = (pjmedia_sdp_attr*) pj_pool_zalloc(_pool, sizeof(pjmedia_sdp_attr)); + + attribute->name = pj_strdup3(_pool, "crypto"); + + // _debug("crypto from sdp: %s", crypto.c_str()); - int len = pj_ansi_snprintf(tempbuf, sizeof(tempbuf), - "%.*s",(int)crypto.size(), crypto.c_str()); + int len = pj_ansi_snprintf(tempbuf, sizeof(tempbuf), + "%.*s",(int)(*iter).size(), (*iter).c_str()); - attribute->value.slen = len; - attribute->value.ptr = (char*) pj_pool_alloc (_pool, attribute->value.slen+1); - pj_memcpy (attribute->value.ptr, tempbuf, attribute->value.slen+1); + attribute->value.slen = len; + attribute->value.ptr = (char*) pj_pool_alloc (_pool, attribute->value.slen+1); + pj_memcpy (attribute->value.ptr, tempbuf, attribute->value.slen+1); - // get number of media for this SDP - int media_count = _local_offer->media_count; + // get number of media for this SDP + int media_count = _local_offer->media_count; - // add crypto attribute to media - for(int i = 0; i < media_count; i++) { + // add crypto attribute to media + for(int i = 0; i < media_count; i++) { - if(pjmedia_sdp_media_add_attr(_local_offer->media[i], attribute) != PJ_SUCCESS) { - // if(pjmedia_sdp_attr_add(&(_local_offer->attr_count), _local_offer->attr, attribute) != PJ_SUCCESS){ - throw sdpException(); + if(pjmedia_sdp_media_add_attr(_local_offer->media[i], attribute) != PJ_SUCCESS) { + // if(pjmedia_sdp_attr_add(&(_local_offer->attr_count), _local_offer->attr, attribute) != PJ_SUCCESS){ + throw sdpException(); + } } - } + + iter++; + } } diff --git a/sflphone-common/src/sip/sdp.h b/sflphone-common/src/sip/sdp.h index d32ceeaa90..afba2e67d4 100644 --- a/sflphone-common/src/sip/sdp.h +++ b/sflphone-common/src/sip/sdp.h @@ -108,7 +108,7 @@ class Sdp { /* Set the srtp _master_key * @param mk The Master Key of a srtp session. */ - inline void set_srtp_crypto(const std::string& mk) { _srtp_crypto = mk; } + inline void set_srtp_crypto(const std::vector<std::string> lc) { _srtp_crypto = lc; } /* * On building an invite outside a dialog, build the local offer and create the @@ -258,8 +258,8 @@ class Sdp { std::string _zrtp_hello_hash; - /** "a=crypto" sdes attribute obtained from AudioSrtpSession */ - std::string _srtp_crypto; + /** "a=crypto" sdes local attributes obtained from AudioSrtpSession */ + std::vector<std::string> _srtp_crypto; Sdp(const Sdp&); //No Copy Constructor Sdp& operator=(const Sdp&); //No Assignment Operator @@ -355,7 +355,7 @@ class Sdp { * * @param media The media to add the srtp attribute to */ - void sdp_add_sdes_attribute(std::string crypto); + void sdp_add_sdes_attribute(std::vector<std::string>& crypto); /* * Adds a zrtp-hash attribute to -- GitLab From 80204bfdf7c9d330788937e24400b56d6f21e01e Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Mon, 18 Jan 2010 15:14:51 -0500 Subject: [PATCH 187/188] [#1722] Add negociation to SdesNegotiator --- sflphone-common/src/sip/SdesNegotiator.cpp | 137 +++++++++------ sflphone-common/src/sip/SdesNegotiator.h | 185 +++++++++++---------- sflphone-common/src/sip/sdp.cpp | 1 + sflphone-common/src/sip/sipvoiplink.cpp | 5 +- sflphone-common/src/sip/sipvoiplink.h | 1 + 5 files changed, 183 insertions(+), 146 deletions(-) diff --git a/sflphone-common/src/sip/SdesNegotiator.cpp b/sflphone-common/src/sip/SdesNegotiator.cpp index f9411df3d9..b2d1aafd3e 100644 --- a/sflphone-common/src/sip/SdesNegotiator.cpp +++ b/sflphone-common/src/sip/SdesNegotiator.cpp @@ -1,6 +1,7 @@ /* * Copyright (C) 2009 Savoir-Faire Linux inc. * Author: Pierre-Luc Bacon <pierre-luc.bacon@savoirfairelinux.com> + * Author: Alexandre Savard <alexandre.savard@savoirfairelinux.com> * * 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 @@ -91,14 +92,15 @@ std::vector<CryptoAttribute *> SdesNegotiator::parse (void) std::vector<std::string>::iterator iter; - std::vector<CryptoAttribute *> cryptoAttributeVector; + std::vector<CryptoAttribute *> cryptoAttributeVector; for (iter = _remoteAttribute.begin(); iter != _remoteAttribute.end(); iter++) { + // Split the line into its component // that we will analyze further down. - std::vector<std::string> sdesLine; + std::vector<std::string> sdesLine; - *generalSyntaxPattern << (*iter); + *generalSyntaxPattern << (*iter); try { sdesLine = generalSyntaxPattern->split(); @@ -115,42 +117,42 @@ std::vector<CryptoAttribute *> SdesNegotiator::parse (void) // and get the tag for this line *tagPattern << sdesLine.at (0); - std::string tag; - if (tagPattern->matches()) { - try { - tag = tagPattern->group ("tag"); - } catch (match_error& exception) { - throw parse_error ("Error while parsing the tag field"); - } - } else { - return cryptoAttributeVector; - } + std::string tag; + if (tagPattern->matches()) { + try { + tag = tagPattern->group ("tag"); + } catch (match_error& exception) { + throw parse_error ("Error while parsing the tag field"); + } + } else { + return cryptoAttributeVector; + } // Check if the crypto suite is valid and retreive // its value. *cryptoSuitePattern << sdesLine.at (1); - std::string cryptoSuite; + std::string cryptoSuite; - if (cryptoSuitePattern->matches()) { - try { - cryptoSuite = cryptoSuitePattern->group ("cryptoSuite"); - } catch (match_error& exception) { - throw parse_error ("Error while parsing the crypto-suite field"); - } - } else { - return cryptoAttributeVector; - } + if (cryptoSuitePattern->matches()) { + try { + cryptoSuite = cryptoSuitePattern->group ("cryptoSuite"); + } catch (match_error& exception) { + throw parse_error ("Error while parsing the crypto-suite field"); + } + } else { + return cryptoAttributeVector; + } // Parse one or more key-params field. *keyParamsPattern << sdesLine.at (2); - std::string srtpKeyInfo; - std::string srtpKeyMethod; - std::string lifetime; - std::string mkiLength; - std::string mkiValue; - + std::string srtpKeyInfo; + std::string srtpKeyMethod; + std::string lifetime; + std::string mkiLength; + std::string mkiValue; + try { while (keyParamsPattern->matches()) { srtpKeyMethod = keyParamsPattern->group ("srtpKeyMethod"); @@ -181,38 +183,67 @@ std::vector<CryptoAttribute *> SdesNegotiator::parse (void) } } */ - // Add the new CryptoAttribute to the vector - std::cout << (*iter) << std::endl; - CryptoAttribute * cryptoAttribute = new CryptoAttribute(tag, cryptoSuite, srtpKeyMethod, srtpKeyInfo, lifetime, mkiValue, mkiLength); - cryptoAttributeVector.push_back(cryptoAttribute); + // Add the new CryptoAttribute to the vector + std::cout << (*iter) << std::endl; + CryptoAttribute * cryptoAttribute = new CryptoAttribute(tag, cryptoSuite, srtpKeyMethod, srtpKeyInfo, lifetime, mkiValue, mkiLength); + cryptoAttributeVector.push_back(cryptoAttribute); } - return cryptoAttributeVector; + return cryptoAttributeVector; } bool SdesNegotiator::negotiate (void) { - try { - std::vector<CryptoAttribute *> cryptoAttributeVector = parse(); + std::vector<CryptoAttribute *> cryptoAttributeVector = parse(); + std::vector<CryptoAttribute *>::iterator iter_offer = cryptoAttributeVector.begin(); + + std::vector<CryptoSuiteDefinition>::iterator iter_local = _localCapabilities.begin(); + + bool negotiationSuccess = false; + + try { - std::vector<CryptoAttribute *>::iterator iter; - for (iter = cryptoAttributeVector.begin(); iter != cryptoAttributeVector.end(); iter++) { - std::cout << "Negotiate tag: " + (*iter)->getTag() << std::endl; - std::cout << "Crypto Suite: " + (*iter)->getCryptoSuite() << std::endl; - std::cout << "SRTP Key Method: " + (*iter)->getSrtpKeyMethod() << std::endl; - std::cout << "SRTP Key Info: " + (*iter)->getSrtpKeyInfo() << std::endl; - std::cout << "Lifetime: " + (*iter)->getLifetime() << std::endl; - std::cout << "MKI Value: " + (*iter)->getMkiValue() << std::endl; - std::cout << "MKI Length: " + (*iter)->getMkiLength() << std::endl; - - delete (*iter); + while (!negotiationSuccess && (iter_offer != cryptoAttributeVector.end())) { + + /* + std::cout << "Negotiate tag: " + (*iter_offer)->getTag() << std::endl; + std::cout << "Crypto Suite: " + (*iter_offer)->getCryptoSuite() << std::endl; + std::cout << "SRTP Key Method: " + (*iter_offer)->getSrtpKeyMethod() << std::endl; + std::cout << "SRTP Key Info: " + (*iter_offer)->getSrtpKeyInfo() << std::endl; + std::cout << "Lifetime: " + (*iter_offer)->getLifetime() << std::endl; + std::cout << "MKI Value: " + (*iter_offer)->getMkiValue() << std::endl; + std::cout << "MKI Length: " + (*iter_offer)->getMkiLength() << std::endl; + */ + + iter_local = _localCapabilities.begin(); + + while(!negotiationSuccess && (iter_local != _localCapabilities.end())) { + + if((*iter_offer)->getCryptoSuite().compare((*iter_local).name)){ + + negotiationSuccess = true; + + _cryptoSuite = (*iter_offer)->getCryptoSuite(); + _srtpKeyMethod = (*iter_offer)->getSrtpKeyMethod(); + _srtpKeyInfo = (*iter_offer)->getSrtpKeyInfo(); + _lifetime = (*iter_offer)->getLifetime(); + _mkiValue = (*iter_offer)->getMkiValue(); + _mkiLength = (*iter_offer)->getMkiLength(); } - - } catch (parse_error& exception) { - return false; - } catch (match_error& exception) { - return false; + + iter_local++; + } + + delete (*iter_offer); + + iter_offer++; } - return true; + } catch (parse_error& exception) { + return false; + } catch (match_error& exception) { + return false; + } + + return negotiationSuccess; } diff --git a/sflphone-common/src/sip/SdesNegotiator.h b/sflphone-common/src/sip/SdesNegotiator.h index d8a568421e..f038d012ba 100644 --- a/sflphone-common/src/sip/SdesNegotiator.h +++ b/sflphone-common/src/sip/SdesNegotiator.h @@ -1,6 +1,7 @@ /* * Copyright (C) 2009 Savoir-Faire Linux inc. * Author: Pierre-Luc Bacon <pierre-luc.bacon@savoirfairelinux.com> + * Author: Alexandre Savard <alexandre.savard@savoirfairelinux.com> * * 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 @@ -75,42 +76,42 @@ namespace sfl { {"F8_128_HMAC_SHA1_80", 128, 112, 48, 31, AESF8Mode, 128, HMACSHA1, 80, 80, 160, 160 } }; - class CryptoAttribute { + class CryptoAttribute { - public: - CryptoAttribute(std::string tag, - std::string cryptoSuite, - std::string srtpKeyMethod, - std::string srtpKeyInfo, - std::string lifetime, - std::string mkiValue, - std::string mkiLength) : - tag(tag), - cryptoSuite(cryptoSuite), - srtpKeyMethod(srtpKeyMethod), - srtpKeyInfo(srtpKeyInfo), - lifetime(lifetime), - mkiValue(mkiValue), - mkiLength(mkiLength) {}; - + public: + CryptoAttribute(std::string tag, + std::string cryptoSuite, + std::string srtpKeyMethod, + std::string srtpKeyInfo, + std::string lifetime, + std::string mkiValue, + std::string mkiLength) : + tag(tag), + cryptoSuite(cryptoSuite), + srtpKeyMethod(srtpKeyMethod), + srtpKeyInfo(srtpKeyInfo), + lifetime(lifetime), + mkiValue(mkiValue), + mkiLength(mkiLength) {}; + - inline std::string getTag() { return tag; }; - inline std::string getCryptoSuite() { return cryptoSuite; }; - inline std::string getSrtpKeyMethod() { return srtpKeyMethod; }; - inline std::string getSrtpKeyInfo() { return srtpKeyInfo; }; - inline std::string getLifetime() { return lifetime; }; - inline std::string getMkiValue() { return mkiValue; }; - inline std::string getMkiLength() { return mkiLength; }; + inline std::string getTag() { return tag; }; + inline std::string getCryptoSuite() { return cryptoSuite; }; + inline std::string getSrtpKeyMethod() { return srtpKeyMethod; }; + inline std::string getSrtpKeyInfo() { return srtpKeyInfo; }; + inline std::string getLifetime() { return lifetime; }; + inline std::string getMkiValue() { return mkiValue; }; + inline std::string getMkiLength() { return mkiLength; }; private: - std::string tag; - std::string cryptoSuite; - std::string srtpKeyMethod; - std::string srtpKeyInfo; - std::string lifetime; - std::string mkiValue; - std::string mkiLength; - }; + std::string tag; + std::string cryptoSuite; + std::string srtpKeyMethod; + std::string srtpKeyInfo; + std::string lifetime; + std::string mkiValue; + std::string mkiLength; + }; class SdesNegotiator { @@ -131,35 +132,35 @@ namespace sfl { bool negotiate(void); - /** - * Return crypto suite after negotiation - */ - std::string getCryptoSuite(void) { return _cryptoSuite; } - - /** - * Return key method after negotiation (most likely inline:) - */ - std::string getKeyMethod(void) { return _srtpKeyMethod; } - - /** - * Return crypto suite after negotiation - */ - std::string getKeyInfo(void) { return _srtpKeyInfo; } - - /** - * Return key lifetime after negotiation - */ - std::string getLifeTime(void) { return _lifetime; } - - /** - * Return mki value after negotiation - */ - std::string getMkiValue(void) { return _mkiValue; } - - /** - * Return mki length after negotiation - */ - std::string getMkiLength(void) { return _mkiLength; } + /** + * Return crypto suite after negotiation + */ + std::string getCryptoSuite(void) { return _cryptoSuite; } + + /** + * Return key method after negotiation (most likely inline:) + */ + std::string getKeyMethod(void) { return _srtpKeyMethod; } + + /** + * Return crypto suite after negotiation + */ + std::string getKeyInfo(void) { return _srtpKeyInfo; } + + /** + * Return key lifetime after negotiation + */ + std::string getLifeTime(void) { return _lifetime; } + + /** + * Return mki value after negotiation + */ + std::string getMkiValue(void) { return _mkiValue; } + + /** + * Return mki length after negotiation + */ + std::string getMkiLength(void) { return _mkiLength; } private: /** @@ -171,37 +172,37 @@ namespace sfl { std::vector<CryptoSuiteDefinition> _localCapabilities; - /** - * Selected crypto suite after negotiation - */ - std::string _cryptoSuite; - - /** - * Selected key method after negotiation (most likely inline:) - */ - std::string _srtpKeyMethod; - - /** - * Selected crypto suite after negotiation - */ - std::string _srtpKeyInfo; - - /** - * Selected key lifetime after negotiation - */ - std::string _lifetime; - - /** - * Selected mki value after negotiation - */ - std::string _mkiValue; - - /** - * Selected mki length after negotiation - */ - std::string _mkiLength; - - std::vector<CryptoAttribute *> parse(void); + /** + * Selected crypto suite after negotiation + */ + std::string _cryptoSuite; + + /** + * Selected key method after negotiation (most likely inline:) + */ + std::string _srtpKeyMethod; + + /** + * Selected crypto suite after negotiation + */ + std::string _srtpKeyInfo; + + /** + * Selected key lifetime after negotiation + */ + std::string _lifetime; + + /** + * Selected mki value after negotiation + */ + std::string _mkiValue; + + /** + * Selected mki length after negotiation + */ + std::string _mkiLength; + + std::vector<CryptoAttribute *> parse(void); }; } #endif diff --git a/sflphone-common/src/sip/sdp.cpp b/sflphone-common/src/sip/sdp.cpp index 69ab580cc4..45efccf15b 100644 --- a/sflphone-common/src/sip/sdp.cpp +++ b/sflphone-common/src/sip/sdp.cpp @@ -2,6 +2,7 @@ * Copyright (C) 2009 Savoir-Faire Linux inc. * * Author: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> + * Author: Alexandre Savard <alexandre.savard@savoirfairelinux.com> * * 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 diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp index ed81c182f9..8d597bc252 100644 --- a/sflphone-common/src/sip/sipvoiplink.cpp +++ b/sflphone-common/src/sip/sipvoiplink.cpp @@ -4,6 +4,7 @@ * Author: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> * Author: Yun Liu <yun.liu@savoirfairelinux.com> * Author: Pierre-Luc Bacon <pierre-luc.bacon@savoirfairelinux.com> + * Author: Alexandre Savard <alexandre.savard@savoirfairelinux.com> * * 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 @@ -3247,8 +3248,10 @@ void call_on_media_update (pjsip_inv_session *inv, pj_status_t status) _debug("SDES negociation successfull \n"); nego_success = true; - if(call->getAudioRtp()->getAudioRtpType() == sfl::Sdes) + if(call->getAudioRtp()->getAudioRtpType() == sfl::Sdes) { + _debug("Set remote cryptographic context\n"); call->getAudioRtp()->setRemoteCryptoInfo(sdesnego); + } } else { diff --git a/sflphone-common/src/sip/sipvoiplink.h b/sflphone-common/src/sip/sipvoiplink.h index 620dc9919e..94b08bdc89 100644 --- a/sflphone-common/src/sip/sipvoiplink.h +++ b/sflphone-common/src/sip/sipvoiplink.h @@ -4,6 +4,7 @@ * Author: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> * Author: Yun Liu <yun.liu@savoirfairelinux.com> * Author: Pierre-Luc Bacon <pierre-luc.bacon@savoirfairelinux.com> + * Author: Alexandre Savard <alexandre.savard@savoirfairelinux.com> * * 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 -- GitLab From c8e739f1e2574fd69b3c50beca9a8d12719d9917 Mon Sep 17 00:00:00 2001 From: Julien Bonjean <julien@bonjean.info> Date: Thu, 21 Jan 2010 09:29:34 -0500 Subject: [PATCH 188/188] [#1722] Added pcre lib to debian control files --- .../launchpad/sflphone-common/debian/control.jaunty | 4 ++-- .../launchpad/sflphone-common/debian/control.karmic | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/tools/build-system/launchpad/sflphone-common/debian/control.jaunty b/tools/build-system/launchpad/sflphone-common/debian/control.jaunty index ba94b329a2..8700719c00 100644 --- a/tools/build-system/launchpad/sflphone-common/debian/control.jaunty +++ b/tools/build-system/launchpad/sflphone-common/debian/control.jaunty @@ -2,13 +2,13 @@ Source: sflphone-common Maintainer: SavoirFaireLinux Inc <julien.bonjean@savoirfairelinux.com> Section: gnome Priority: optional -Build-Depends: debhelper, libgcc1 , autoconf, automake, libpulse-dev, libsamplerate0-dev, libcommoncpp2-dev, libccrtp-dev, libgsm1-dev, libspeex-dev, libtool, libdbus-1-dev, libasound2-dev, libspeexdsp-dev, uuid-dev, libexpat1-dev, libzrtpcpp-dev, libssl-dev +Build-Depends: debhelper, libgcc1 , autoconf, automake, libpulse-dev, libsamplerate0-dev, libcommoncpp2-dev, libccrtp-dev, libgsm1-dev, libspeex-dev, libtool, libdbus-1-dev, libasound2-dev, libspeexdsp-dev, uuid-dev, libexpat1-dev, libzrtpcpp-dev, libssl-dev, libpcre3-dev Standards-Version: 3.7.3 Package: sflphone-common Priority: optional Architecture: any -Depends: libsamplerate0, libexpat1 , libc6, libcommoncpp2-1.6-0, libgsm1, libspeex1, libdbus-1-3, libasound2, libpulse0, libccrtp1-1.6-1, libspeexdsp1, libzrtpcpp-1.3-0, libssl0.9.8 +Depends: libsamplerate0, libexpat1 , libc6, libcommoncpp2-1.6-0, libgsm1, libspeex1, libdbus-1-3, libasound2, libpulse0, libccrtp1-1.6-1, libspeexdsp1, libzrtpcpp-1.3-0, libssl0.9.8, libpcre3 Replaces: sflphone Conflicts: sflphone Homepage: http://www.sflphone.org diff --git a/tools/build-system/launchpad/sflphone-common/debian/control.karmic b/tools/build-system/launchpad/sflphone-common/debian/control.karmic index 47e571b4f2..177306ed35 100644 --- a/tools/build-system/launchpad/sflphone-common/debian/control.karmic +++ b/tools/build-system/launchpad/sflphone-common/debian/control.karmic @@ -2,13 +2,13 @@ Source: sflphone-common Maintainer: SavoirFaireLinux Inc <julien.bonjean@savoirfairelinux.com> Section: gnome Priority: optional -Build-Depends: debhelper, libgcc1 , autoconf, automake, libpulse-dev, libsamplerate0-dev, libcommoncpp2-dev, libccrtp-dev, libgsm1-dev, libspeex-dev, libtool, libdbus-1-dev, libasound2-dev, libspeexdsp-dev, uuid-dev, libexpat1-dev, libzrtpcpp-dev, libssl-dev +Build-Depends: debhelper, libgcc1 , autoconf, automake, libpulse-dev, libsamplerate0-dev, libcommoncpp2-dev, libccrtp-dev, libgsm1-dev, libspeex-dev, libtool, libdbus-1-dev, libasound2-dev, libspeexdsp-dev, uuid-dev, libexpat1-dev, libzrtpcpp-dev, libssl-dev, libpcre3-dev Standards-Version: 3.7.3 Package: sflphone-common Priority: optional Architecture: any -Depends: libsamplerate0, libexpat1 , libc6, libccgnu2-1.7-0, libgsm1, libspeex1, libdbus-1-3, libasound2, libpulse0, libccrtp1-1.7-0, libspeexdsp1, libzrtpcpp-1.4-0, libssl0.9.8 +Depends: libsamplerate0, libexpat1 , libc6, libccgnu2-1.7-0, libgsm1, libspeex1, libdbus-1-3, libasound2, libpulse0, libccrtp1-1.7-0, libspeexdsp1, libzrtpcpp-1.4-0, libssl0.9.8, libpcre3 Replaces: sflphone Conflicts: sflphone Homepage: http://www.sflphone.org -- GitLab