Commit e643c827 authored by Julien Bonjean's avatar Julien Bonjean

Merge branch 'master' into mozilla-extension

parents d4344aa0 8a990e68
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
#!/bin/bash
# Merge sflphone template into the existing po files
for fichier in `find . -name *.po`
do
msgmerge --update $fichier sflphone.pot
done
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
#!/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
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
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
SUBDIRS = src pixmaps tests man po
SUBDIRS = src pixmaps tests man po doc
ACLOCAL_AMFLAGS = -I m4
......
<?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>
......@@ -117,7 +118,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>
......@@ -159,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>
......@@ -181,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">
......@@ -205,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>
......@@ -236,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">
......@@ -270,21 +272,37 @@
</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">
<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 ==== -->
......@@ -554,8 +572,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">
......@@ -607,10 +625,113 @@
</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>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 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 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>
<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 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 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 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>
<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>
ALSA and Pulseaudio native interfaces are available.
ALSA and PulseAudio native interfaces are available.
</para>
<sect2 label="Pulseaudio">
......@@ -626,13 +747,13 @@
<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>
<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>
......@@ -653,7 +774,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.
......@@ -791,7 +912,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>
......
......@@ -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
DOC_LINGUAS = fr de es it zh_TW zh_HK zh_CN ko pl pt_BR pt ru
figures/conference_attached.png \
figures/srtp_enabled.png \
figures/zrtp_options.png
DOC_LINGUAS = fr es
This diff is collapsed.
This diff is collapsed.
......@@ -18,5 +18,6 @@ AM_CPPFLAGS = $(DEPS_CFLAGS) \
-DSYSCONFDIR=\""$(sysconfdir)"\" \
-DDATADIR=\""$(datadir)"\" \
-DLIBDIR=\""$(libdir)"\" \
-DLOCALEDIR=\""$(localedir)"\" \
-DSFLPHONE_UIDIR=\""$(datadir)/sflphone/ui"\"
......@@ -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
......@@ -36,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); \
......@@ -56,4 +58,4 @@ uninstall-local:
done
clean-local:
rm -rf *.mo
rm -f $(MOFILES)
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
......@@ -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();
......@@ -1102,7 +1104,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);
......
......@@ -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)
......
......@@ -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);
......
......@@ -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);