mirror of
https://git.jami.net/savoirfairelinux/jami-daemon.git
synced 2025-08-07 22:02:12 +08:00
[#1744] Add GUI security icons for sdes
This commit is contained in:
@ -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);
|
||||
|
@ -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);
|
||||
|
||||
|
||||
|
@ -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
|
||||
*/
|
||||
|
@ -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);
|
||||
|
@ -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>
|
||||
|
||||
|
@ -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,
|
||||
|
@ -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
|
||||
|
@ -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>
|
||||
|
||||
|
@ -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());
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user