diff options
author | Ankit Vani <a@nevitus.org> | 2015-04-10 11:36:40 +0530 |
---|---|---|
committer | Ankit Vani <a@nevitus.org> | 2015-04-10 11:36:40 +0530 |
commit | 6408fbf8b7deb5ff1a9014e6a6d3b45de246e6d3 (patch) | |
tree | f4e57cc7777d5008253d9bb23d9b48b0b0851469 /libpurple/media.c | |
parent | 1c1f688ae706dad9edf34439e7998fc45eb258d5 (diff) | |
parent | 725084a448ab12c9ec7dfbfc4f16eae8277607d1 (diff) | |
download | pidgin-6408fbf8b7deb5ff1a9014e6a6d3b45de246e6d3.tar.gz |
Merge default branch (yet to add media_send_dtmf)
Diffstat (limited to 'libpurple/media.c')
-rw-r--r-- | libpurple/media.c | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/libpurple/media.c b/libpurple/media.c index 42ac0276cb..fffc8c5bae 100644 --- a/libpurple/media.c +++ b/libpurple/media.c @@ -119,6 +119,7 @@ enum { NEW_CANDIDATE, STATE_CHANGED, STREAM_INFO, + CANDIDATE_PAIR_ESTABLISHED, LAST_SIGNAL }; static guint purple_media_signals[LAST_SIGNAL] = {0}; @@ -255,6 +256,11 @@ purple_media_class_init (PurpleMediaClass *klass) purple_smarshal_VOID__ENUM_STRING_STRING_BOOLEAN, G_TYPE_NONE, 4, PURPLE_MEDIA_TYPE_INFO_TYPE, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_BOOLEAN); + purple_media_signals[CANDIDATE_PAIR_ESTABLISHED] = g_signal_new("candidate-pair-established", G_TYPE_FROM_CLASS(klass), + G_SIGNAL_RUN_LAST, 0, NULL, NULL, + purple_smarshal_VOID__POINTER_POINTER_OBJECT_OBJECT, + G_TYPE_NONE, 4, G_TYPE_POINTER, G_TYPE_POINTER, + PURPLE_TYPE_MEDIA_CANDIDATE, PURPLE_TYPE_MEDIA_CANDIDATE); g_type_class_add_private(klass, sizeof(PurpleMediaPrivate)); } @@ -1029,6 +1035,8 @@ purple_media_candidate_pair_established_cb(PurpleMediaBackend *backend, purple_media_candidate_copy( remote_candidate)); + g_signal_emit(media, purple_media_signals[CANDIDATE_PAIR_ESTABLISHED], + 0, sess_id, name, local_candidate, remote_candidate); purple_debug_info("media", "candidate pair established\n"); } @@ -1257,6 +1265,34 @@ purple_media_set_send_codec(PurpleMedia *media, const gchar *sess_id, PurpleMedi } gboolean +purple_media_set_encryption_parameters(PurpleMedia *media, const gchar *sess_id, + const gchar *cipher, const gchar *auth, + const gchar *key, gsize key_len) +{ +#ifdef USE_VV + g_return_val_if_fail(PURPLE_IS_MEDIA(media), FALSE); + return purple_media_backend_set_encryption_parameters(media->priv->backend, + sess_id, cipher, auth, key, key_len); +#else + return FALSE; +#endif +} + +gboolean +purple_media_set_decryption_parameters(PurpleMedia *media, const gchar *sess_id, + const gchar *participant, const gchar *cipher, + const gchar *auth, const gchar *key, gsize key_len) +{ +#ifdef USE_VV + g_return_val_if_fail(PURPLE_IS_MEDIA(media), FALSE); + return purple_media_backend_set_decryption_parameters(media->priv->backend, + sess_id, participant, cipher, auth, key, key_len); +#else + return FALSE; +#endif +} + +gboolean purple_media_codecs_ready(PurpleMedia *media, const gchar *sess_id) { #ifdef USE_VV @@ -1270,6 +1306,20 @@ purple_media_codecs_ready(PurpleMedia *media, const gchar *sess_id) } gboolean +purple_media_set_send_rtcp_mux(PurpleMedia *media, const gchar *sess_id, + const gchar *participant, gboolean send_rtcp_mux) +{ +#ifdef USE_VV + g_return_val_if_fail(PURPLE_IS_MEDIA(media), FALSE); + + return purple_media_backend_set_send_rtcp_mux(media->priv->backend, + sess_id, participant, send_rtcp_mux); +#else + return FALSE; +#endif +} + +gboolean purple_media_is_initiator(PurpleMedia *media, const gchar *sess_id, const gchar *participant) { @@ -1420,3 +1470,50 @@ purple_media_get_tee(PurpleMedia *media, } #endif /* USE_GSTREAMER */ +gboolean +purple_media_send_dtmf(PurpleMedia *media, const gchar *session_id, + gchar dtmf, guint8 volume, guint16 duration) +{ +#ifdef USE_VV + PurpleAccount *account = NULL; + PurpleConnection *gc = NULL; + PurplePlugin *prpl = NULL; + PurplePluginProtocolInfo *prpl_info = NULL; + PurpleMediaBackendIface *backend_iface = NULL; + + if (media) + { + account = purple_media_get_account(media); + backend_iface = PURPLE_MEDIA_BACKEND_GET_INTERFACE(media->priv->backend); + } + if (account) + gc = purple_account_get_connection(account); + if (gc) + prpl = purple_connection_get_prpl(gc); + if (prpl) + prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(prpl); + + if (dtmf == 'a') + dtmf = 'A'; + else if (dtmf == 'b') + dtmf = 'B'; + else if (dtmf == 'c') + dtmf = 'C'; + else if (dtmf == 'd') + dtmf = 'D'; + + g_return_val_if_fail(strchr("0123456789ABCD#*", dtmf), FALSE); + + if (prpl_info && PURPLE_PROTOCOL_PLUGIN_HAS_FUNC(prpl_info, media_send_dtmf) + && prpl_info->media_send_dtmf(media, dtmf, volume, duration)) + { + return TRUE; + } else if (backend_iface && backend_iface->send_dtmf + && backend_iface->send_dtmf(media->priv->backend, + session_id, dtmf, volume, duration)) + { + return TRUE; + } +#endif + return FALSE; +} |