[#1744] Add GUI security icons for sdes

This commit is contained in:
Alexandre Savard
2010-02-05 12:45:25 -05:00
parent 1f8656d694
commit 1447a8ad69
9 changed files with 166 additions and 58 deletions

View File

@ -1276,7 +1276,28 @@ void sflphone_save_history (void)
}
void
sflphone_srtp_on( callable_obj_t * c)
sflphone_srtp_sdes_on(callable_obj_t * c)
{
DEBUG("*************** Srtp SDES ON *************");
c->_srtp_state = SRTP_STATE_SDES_SUCCESS;
calltree_update_call(current_calls, c, NULL);
update_actions();
}
void
sflphone_srtp_sdes_off(callable_obj_t * c)
{
c->_srtp_state = SRTP_STATE_UNLOCKED;
calltree_update_call(current_calls, c, NULL);
update_actions();
}
void
sflphone_srtp_zrtp_on( callable_obj_t * c)
{
c->_srtp_state = SRTP_STATE_ZRTP_SAS_UNCONFIRMED;
@ -1285,7 +1306,7 @@ sflphone_srtp_on( callable_obj_t * c)
}
void
sflphone_srtp_off( callable_obj_t * c )
sflphone_srtp_zrtp_off( callable_obj_t * c )
{
c->_srtp_state = SRTP_STATE_UNLOCKED;
calltree_update_call(current_calls, c, NULL);
@ -1293,7 +1314,7 @@ sflphone_srtp_off( callable_obj_t * c )
}
void
sflphone_srtp_show_sas( callable_obj_t * c, const gchar* sas, const gboolean verified)
sflphone_srtp_zrtp_show_sas( callable_obj_t * c, const gchar* sas, const gboolean verified)
{
if(c == NULL) {
DEBUG("Panic callable obj is NULL in %s at %d", __FILE__, __LINE__);
@ -1309,7 +1330,7 @@ sflphone_srtp_show_sas( callable_obj_t * c, const gchar* sas, const gboolean ver
}
void
sflphone_zrtp_not_supported( callable_obj_t * c )
sflphone_srtp_zrtp_not_supported( callable_obj_t * c )
{
DEBUG("ZRTP not supported");
main_window_zrtp_not_supported(c);

View File

@ -179,6 +179,7 @@ void sflphone_set_current_account();
*/
void sflphone_fill_codec_list();
void sflphone_add_participant();
void sflphone_record (callable_obj_t *c);
@ -191,50 +192,82 @@ void sflphone_fill_history (void);
void sflphone_save_history (void);
/**
* Action called when two single call are dragged on together to create a new conference
*/
void sflphone_join_participant(const gchar* sel_callID, const gchar* drag_callID);
/**
* Action called when a new participant is dragged in
*/
void sflphone_add_participant(const gchar* callID, const gchar* confID);
/**
* Action called when a conference participant is draged out
*/
void sflphone_detach_participant(const gchar* callID);
/**
* Action called when two conference are merged together
*/
void sflphone_join_conference(const gchar* sel_confID, const gchar* drag_confID);
/** Nofity that the communication is
* now secured.
/**
* Nofity that the communication is
* now secured using SRTP/SDES.
* @param c* The current call
*/
void sflphone_srtp_on( callable_obj_t * c);
void sflphone_srtp_sdes_on(callable_obj_t * c);
/** Called when the RTP session goes
/**
* Notify that the SRTP/SDES session
* is not secured
*/
/**
* Nofity that the communication is
* now secured using ZRTP.
* @param c* The current call
*/
void sflphone_srtp_zrtp_on( callable_obj_t * c);
/**
* Called when the ZRTP session goes
* unsecured.
* @param c* The current call
*/
void sflphone_srtp_off( callable_obj_t * c );
void sflphone_srtp_zrtp_off( callable_obj_t * c );
/** Called when the sas has been computed
/**
* Called when the sas has been computed
* and is ready to be displayed.
* @param c* The current call
* @param sas* The Short Authentication String
* @param verified* Weather the SAS was confirmed or not.
*/
void sflphone_srtp_show_sas( callable_obj_t * c, const gchar* sas, const gboolean verified);
void sflphone_srtp_zrtp_show_sas( callable_obj_t * c, const gchar* sas, const gboolean verified);
/** Called when the remote peer does not support ZRTP
/**
* Called when the remote peer does not support ZRTP
* @param c* The current call
*/
void sflphone_zrtp_not_supported( callable_obj_t * c );
void sflphone_srtp_zrtp_not_supported( callable_obj_t * c );
/** Called when user wants to confirm go clear request.
/**
* Called when user wants to confirm go clear request.
* @param c* The call to confirm the go clear request.
*/
void sflphone_set_confirm_go_clear( callable_obj_t * c );
/** Called when user wants to confirm go clear request.
/**
* Called when user wants to confirm go clear request.
* @param c* The call to confirm the go clear request.
*/
void sflphone_confirm_go_clear( callable_obj_t * c );
/** Called when user wants to clear.
/**
* Called when user wants to clear.
* @param c* The call on which to go clear
*/
void sflphone_request_go_clear(void);
@ -247,7 +280,6 @@ void sflphone_request_go_clear(void);
* @param description A textual description of the code
* @param code The status code as in SIP or IAX
*/
void sflphone_call_state_changed(callable_obj_t * c, const gchar * description, const guint code);

View File

@ -62,8 +62,7 @@ typedef enum
/** @enum call_state_t
* This enum have all the states a call can take.
*/
typedef enum
{
typedef enum {
CALL_STATE_INVALID = 0,
CALL_STATE_INCOMING,
CALL_STATE_RINGING,
@ -73,17 +72,18 @@ typedef enum
CALL_STATE_FAILURE,
CALL_STATE_BUSY,
CALL_STATE_TRANSFERT,
CALL_STATE_RECORD
CALL_STATE_RECORD,
} call_state_t;
typedef enum
{
SRTP_STATE_UNLOCKED = 0,
SRTP_STATE_ZRTP_SAS_CONFIRMED,
SRTP_STATE_ZRTP_SAS_UNCONFIRMED,
SRTP_STATE_ZRTP_SAS_SIGNED,
typedef enum {
SRTP_STATE_UNLOCKED = 0,
SRTP_STATE_SDES_SUCCESS,
SRTP_STATE_ZRTP_SAS_CONFIRMED,
SRTP_STATE_ZRTP_SAS_UNCONFIRMED,
SRTP_STATE_ZRTP_SAS_SIGNED,
} srtp_state_t;
/** @struct callable_obj_t
* @brief Call information.
* This struct holds information about a call.
@ -105,7 +105,7 @@ typedef struct {
gchar* _sas; // The Short Authentication String that should be displayed
gboolean _zrtp_confirmed; // Override real state. Used for hold/unhold
// since rtp session is killed each time and
// libzrtpcpp does not remember state (yet?).
// libzrtpcpp does not remember state (yet?)
/**
* The information about the person we are talking
*/

View File

@ -707,6 +707,7 @@ calltree_update_call (calltab_t* tab, callable_obj_t * c, GtkTreeIter *parent)
gchar* srtp_enabled = "";
gboolean display_sas = TRUE;
gboolean sdes_success = TRUE;
account_t* account_details=NULL;
gchar *audio_codec = "";
@ -723,6 +724,7 @@ calltree_update_call (calltab_t* tab, callable_obj_t * c, GtkTreeIter *parent)
GHashTable * properties = NULL;
sflphone_get_ip2ip_properties (&properties);
if(properties != NULL) {
srtp_enabled = g_hash_table_lookup(properties, ACCOUNT_SRTP_ENABLED);
if(g_strcasecmp(g_hash_table_lookup(properties, ACCOUNT_ZRTP_DISPLAY_SAS),"false") == 0)
{ display_sas = FALSE; }
}
@ -786,7 +788,7 @@ calltree_update_call (calltab_t* tab, callable_obj_t * c, GtkTreeIter *parent)
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);
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);
@ -805,6 +807,10 @@ calltree_update_call (calltab_t* tab, callable_obj_t * c, GtkTreeIter *parent)
}
switch(c->_srtp_state) {
case SRTP_STATE_SDES_SUCCESS:
DEBUG("SDES negotiation succes");
pixbuf_security = gdk_pixbuf_new_from_file(ICONS_DIR "/lock_confirmed.svg", NULL);
break;
case SRTP_STATE_ZRTP_SAS_UNCONFIRMED:
DEBUG("Secure is ON");
pixbuf_security = gdk_pixbuf_new_from_file(ICONS_DIR "/lock_unconfirmed.svg", NULL);

View File

@ -202,13 +202,21 @@
<method name="requestGoClear">
<arg type="s" name="callID" direction="in"/>
</method>
<signal name="secureOn">
<signal name="secureSdesOn">
<arg type="s" name="callID" direction="out" />
</signal>
<signal name="secureSdesOff">
<arg type="s" name="callID" direction="out" />
</signal>
<signal name="secureZrtpOn">
<arg type="s" name="callID" direction="out" />
<arg type="s" name="cipher" direction="out" />
</signal>
<signal name="secureOff">
<signal name="secureZrtpOff">
<arg type="s" name="callID" direction="out" />
</signal>

View File

@ -347,36 +347,65 @@ transfer_failed_cb (DBusGProxy *proxy UNUSED,
sflphone_display_transfer_status("Transfer failed");
}
static void
secure_sdes_on_cb(DBusGProxy *proxy UNUSED,
const gchar *callID,
void *foo UNUSED)
{
DEBUG("SRTP using SDES is on");
callable_obj_t *c = calllist_get(current_calls, callID);
if(c) {
sflphone_srtp_sdes_on(c);
notify_secure_on(c);
}
}
static void
secure_sdes_off_cb(DBusGProxy *proxy UNUSED,
const gchar *callID,
void *foo UNUSED)
{
DEBUG("SRTP using SDES is off");
callable_obj_t *c = calllist_get(current_calls, callID);
if(c) {
sflphone_srtp_sdes_off(c);
notify_secure_off(c);
}
}
static void
secure_on_cb (DBusGProxy *proxy UNUSED,
secure_zrtp_on_cb (DBusGProxy *proxy UNUSED,
const gchar* callID,
const gchar* cipher,
void * foo UNUSED )
{
DEBUG ("SRTP is ON secure_on_cb");
DEBUG ("SRTP using ZRTP is ON secure_on_cb");
callable_obj_t * c = calllist_get(current_calls, callID);
if(c) {
c->_srtp_cipher = g_strdup(cipher);
sflphone_srtp_on (c);
sflphone_srtp_zrtp_on (c);
notify_secure_on(c);
}
}
static void
secure_off_cb (DBusGProxy *proxy UNUSED,
secure_zrtp_off_cb (DBusGProxy *proxy UNUSED,
const gchar* callID,
void * foo UNUSED )
{
DEBUG ("SRTP is OFF");
DEBUG ("SRTP using ZRTP is OFF");
callable_obj_t * c = calllist_get(current_calls, callID);
if(c) {
sflphone_srtp_off (c);
sflphone_srtp_zrtp_off (c);
notify_secure_off (c);
}
}
static void
show_sas_cb (DBusGProxy *proxy UNUSED,
show_zrtp_sas_cb (DBusGProxy *proxy UNUSED,
const gchar* callID,
const gchar* sas,
const gboolean verified,
@ -385,7 +414,7 @@ show_sas_cb (DBusGProxy *proxy UNUSED,
DEBUG ("Showing SAS");
callable_obj_t * c = calllist_get(current_calls, callID);
if(c) {
sflphone_srtp_show_sas (c, sas, verified);
sflphone_srtp_zrtp_show_sas (c, sas, verified);
}
}
@ -409,7 +438,7 @@ zrtp_not_supported_cb (DBusGProxy *proxy UNUSED,
DEBUG ("ZRTP not supported on the other end");
callable_obj_t * c = calllist_get(current_calls, callID);
if(c) {
sflphone_zrtp_not_supported (c);
sflphone_srtp_zrtp_not_supported (c);
notify_zrtp_not_supported(c);
}
}
@ -582,6 +611,16 @@ dbus_connect ()
"conferenceRemoved", G_CALLBACK(conference_removed_cb), NULL, NULL);
/* Security related callbacks */
dbus_g_proxy_add_signal (callManagerProxy,
"secureSdesOn", G_TYPE_STRING, G_TYPE_INVALID);
dbus_g_proxy_connect_signal (callManagerProxy,
"secureSdesOn", G_CALLBACK(secure_sdes_on_cb), NULL, NULL);
dbus_g_proxy_add_signal (callManagerProxy,
"secureSdesOff", G_TYPE_STRING, G_TYPE_INVALID);
dbus_g_proxy_connect_signal (callManagerProxy,
"secureSdesOff", G_CALLBACK(secure_sdes_off_cb), NULL, NULL);
/* Register a marshaller for STRING,STRING,BOOL */
dbus_g_object_register_marshaller(g_cclosure_user_marshal_VOID__STRING_STRING_BOOL,
@ -589,21 +628,21 @@ dbus_connect ()
dbus_g_proxy_add_signal (callManagerProxy,
"showSAS", G_TYPE_STRING, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_INVALID);
dbus_g_proxy_connect_signal (callManagerProxy,
"showSAS", G_CALLBACK(show_sas_cb), NULL, NULL);
"showSAS", G_CALLBACK(show_zrtp_sas_cb), NULL, NULL);
dbus_g_proxy_add_signal (callManagerProxy,
"secureOn", G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INVALID);
"secureZrtpOn", G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INVALID);
dbus_g_proxy_connect_signal (callManagerProxy,
"secureOn", G_CALLBACK(secure_on_cb), NULL, NULL);
"secureZrtpOn", G_CALLBACK(secure_zrtp_on_cb), NULL, NULL);
/* Register a marshaller for STRING*/
dbus_g_object_register_marshaller(g_cclosure_user_marshal_VOID__STRING,
G_TYPE_NONE, G_TYPE_STRING, G_TYPE_INVALID);
dbus_g_proxy_add_signal (callManagerProxy,
"secureOff", G_TYPE_STRING, G_TYPE_INVALID);
"secureZrtpOff", G_TYPE_STRING, G_TYPE_INVALID);
dbus_g_proxy_connect_signal (callManagerProxy,
"secureOff", G_CALLBACK(secure_off_cb), NULL, NULL);
"secureZrtpOff", G_CALLBACK(secure_zrtp_off_cb), NULL, NULL);
dbus_g_proxy_add_signal (callManagerProxy,
"zrtpNotSuppOther", G_TYPE_STRING, G_TYPE_INVALID);
dbus_g_proxy_connect_signal (callManagerProxy,

View File

@ -115,14 +115,14 @@ void
ZrtpSessionCallback::secureOn (std::string cipher)
{
_debug ("Secure mode is on with cipher %s", cipher.c_str());
DBusManager::instance().getCallManager()->secureOn (_sipcall->getCallId(), cipher);
DBusManager::instance().getCallManager()->secureZrtpOn (_sipcall->getCallId(), cipher);
}
void
ZrtpSessionCallback::secureOff (void)
{
_debug ("Secure mode is off");
DBusManager::instance().getCallManager()->secureOff (_sipcall->getCallId());
DBusManager::instance().getCallManager()->secureZrtpOff (_sipcall->getCallId());
}
void

View File

@ -191,14 +191,22 @@
<signal name="transferFailed">
</signal>
<signal name="secureSdesOn">
<arg type="s" name="callID" direction="out" />
</signal>
<signal name="secureSdesOff">
<arg type="s" name="callID" direction="out" />
</signal>
<!-- ZRTP Methods and Signals -->
<signal name="secureOn">
<signal name="secureZrtpOn">
<arg type="s" name="callID" direction="out" />
<arg type="s" name="cipher" direction="out" />
</signal>
<signal name="secureOff">
<signal name="secureZrtpOff">
<arg type="s" name="callID" direction="out" />
</signal>

View File

@ -3208,17 +3208,11 @@ void call_on_media_update (pjsip_inv_session *inv, pj_status_t status)
call->getAudioRtp()->setRemoteCryptoInfo(sdesnego);
}
catch(...) {}
DBusManager::instance().getCallManager()->secureSdesOn (call->getCallId());
}
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();
DBusManager::instance().getCallManager()->secureSdesOff (call->getCallId());
}
}