|
David Woodhouse |
6087050 |
|
|
David Woodhouse |
6087050 |
# HG changeset patch
|
|
David Woodhouse |
6087050 |
# User Jakub Adam <jakub.adam@ktknet.cz>
|
|
David Woodhouse |
6087050 |
# Date 1426122329 0
|
|
David Woodhouse |
6087050 |
# Node ID a0906e7a6bae86f1251d8369b30ba82a9daf1836
|
|
David Woodhouse |
6087050 |
# Parent fcecf7f838e266dc2c3bfd306df58ade3fc3ac93
|
|
David Woodhouse |
6087050 |
Implement media encryption
|
|
David Woodhouse |
6087050 |
|
|
David Woodhouse |
6087050 |
diff --git a/libpurple/media.c b/libpurple/media.c
|
|
David Woodhouse |
6087050 |
--- a/libpurple/media.c
|
|
David Woodhouse |
6087050 |
+++ b/libpurple/media.c
|
|
David Woodhouse |
6087050 |
@@ -1276,6 +1276,34 @@
|
|
David Woodhouse |
6087050 |
}
|
|
David Woodhouse |
6087050 |
|
|
David Woodhouse |
6087050 |
gboolean
|
|
David Woodhouse |
6087050 |
+purple_media_set_encryption_parameters(PurpleMedia *media, const gchar *sess_id,
|
|
David Woodhouse |
6087050 |
+ const gchar *cipher, const gchar *auth,
|
|
David Woodhouse |
6087050 |
+ const gchar *key, gsize key_len)
|
|
David Woodhouse |
6087050 |
+{
|
|
David Woodhouse |
6087050 |
+#ifdef USE_VV
|
|
David Woodhouse |
6087050 |
+ g_return_val_if_fail(PURPLE_IS_MEDIA(media), FALSE);
|
|
David Woodhouse |
6087050 |
+ return purple_media_backend_set_encryption_parameters(media->priv->backend,
|
|
David Woodhouse |
6087050 |
+ sess_id, cipher, auth, key, key_len);
|
|
David Woodhouse |
6087050 |
+#else
|
|
David Woodhouse |
6087050 |
+ return FALSE;
|
|
David Woodhouse |
6087050 |
+#endif
|
|
David Woodhouse |
6087050 |
+}
|
|
David Woodhouse |
6087050 |
+
|
|
David Woodhouse |
6087050 |
+gboolean
|
|
David Woodhouse |
6087050 |
+purple_media_set_decryption_parameters(PurpleMedia *media, const gchar *sess_id,
|
|
David Woodhouse |
6087050 |
+ const gchar *participant, const gchar *cipher,
|
|
David Woodhouse |
6087050 |
+ const gchar *auth, const gchar *key, gsize key_len)
|
|
David Woodhouse |
6087050 |
+{
|
|
David Woodhouse |
6087050 |
+#ifdef USE_VV
|
|
David Woodhouse |
6087050 |
+ g_return_val_if_fail(PURPLE_IS_MEDIA(media), FALSE);
|
|
David Woodhouse |
6087050 |
+ return purple_media_backend_set_decryption_parameters(media->priv->backend,
|
|
David Woodhouse |
6087050 |
+ sess_id, participant, cipher, auth, key, key_len);
|
|
David Woodhouse |
6087050 |
+#else
|
|
David Woodhouse |
6087050 |
+ return FALSE;
|
|
David Woodhouse |
6087050 |
+#endif
|
|
David Woodhouse |
6087050 |
+}
|
|
David Woodhouse |
6087050 |
+
|
|
David Woodhouse |
6087050 |
+gboolean
|
|
David Woodhouse |
6087050 |
purple_media_codecs_ready(PurpleMedia *media, const gchar *sess_id)
|
|
David Woodhouse |
6087050 |
{
|
|
David Woodhouse |
6087050 |
#ifdef USE_VV
|
|
David Woodhouse |
6087050 |
diff --git a/libpurple/media.h b/libpurple/media.h
|
|
David Woodhouse |
6087050 |
--- a/libpurple/media.h
|
|
David Woodhouse |
6087050 |
+++ b/libpurple/media.h
|
|
David Woodhouse |
6087050 |
@@ -349,6 +349,43 @@
|
|
David Woodhouse |
6087050 |
gboolean purple_media_set_send_codec(PurpleMedia *media, const gchar *sess_id, PurpleMediaCodec *codec);
|
|
David Woodhouse |
6087050 |
|
|
David Woodhouse |
6087050 |
/**
|
|
David Woodhouse |
6087050 |
+ * Sets the encryption parameters of our media in the session.
|
|
David Woodhouse |
6087050 |
+ *
|
|
David Woodhouse |
6087050 |
+ * @param media The media object to find the session in.
|
|
David Woodhouse |
6087050 |
+ * @param sess_id The session id of the session to set parameters of.
|
|
David Woodhouse |
6087050 |
+ * @param cipher The cipher to use to encrypt our media in the session.
|
|
David Woodhouse |
6087050 |
+ * @param auth The algorithm to use to compute authentication codes for our
|
|
David Woodhouse |
6087050 |
+ * media frames.
|
|
David Woodhouse |
6087050 |
+ * @param key The encryption key.
|
|
David Woodhouse |
6087050 |
+ * @param key_len Byte length of the encryption key.
|
|
David Woodhouse |
6087050 |
+ *
|
|
David Woodhouse |
6087050 |
+ * @since 2.11.0
|
|
David Woodhouse |
6087050 |
+ */
|
|
David Woodhouse |
6087050 |
+gboolean purple_media_set_encryption_parameters(PurpleMedia *media,
|
|
David Woodhouse |
6087050 |
+ const gchar *sess_id, const gchar *cipher,
|
|
David Woodhouse |
6087050 |
+ const gchar *auth, const gchar *key, gsize key_len);
|
|
David Woodhouse |
6087050 |
+
|
|
David Woodhouse |
6087050 |
+/**
|
|
David Woodhouse |
6087050 |
+ * Sets the decryption parameters for a session participant's media.
|
|
David Woodhouse |
6087050 |
+ *
|
|
David Woodhouse |
6087050 |
+ * @param media The media object to find the session in.
|
|
David Woodhouse |
6087050 |
+ * @param sess_id The session id of the session to set parameters of.
|
|
David Woodhouse |
6087050 |
+ * @param participant The participant of the session to set parameters of.
|
|
David Woodhouse |
6087050 |
+ * @param cipher The cipher to use to decrypt media coming from this session's
|
|
David Woodhouse |
6087050 |
+ * participant.
|
|
David Woodhouse |
6087050 |
+ * @param auth The algorithm to use for authentication of the media coming
|
|
David Woodhouse |
6087050 |
+ * from the session's participant.
|
|
David Woodhouse |
6087050 |
+ * @param key The decryption key.
|
|
David Woodhouse |
6087050 |
+ * @param key_len Byte length of the decryption key.
|
|
David Woodhouse |
6087050 |
+ *
|
|
David Woodhouse |
6087050 |
+ * @since 2.11.0
|
|
David Woodhouse |
6087050 |
+ */
|
|
David Woodhouse |
6087050 |
+gboolean purple_media_set_decryption_parameters(PurpleMedia *media,
|
|
David Woodhouse |
6087050 |
+ const gchar *sess_id, const gchar *participant,
|
|
David Woodhouse |
6087050 |
+ const gchar *cipher, const gchar *auth,
|
|
David Woodhouse |
6087050 |
+ const gchar *key, gsize key_len);
|
|
David Woodhouse |
6087050 |
+
|
|
David Woodhouse |
6087050 |
+/**
|
|
David Woodhouse |
6087050 |
* Gets whether a session's codecs are ready to be used.
|
|
David Woodhouse |
6087050 |
*
|
|
David Woodhouse |
6087050 |
* @param media The media object to find the session in.
|
|
David Woodhouse |
6087050 |
diff --git a/libpurple/media/backend-fs2.c b/libpurple/media/backend-fs2.c
|
|
David Woodhouse |
6087050 |
--- a/libpurple/media/backend-fs2.c
|
|
David Woodhouse |
6087050 |
+++ b/libpurple/media/backend-fs2.c
|
|
David Woodhouse |
6087050 |
@@ -85,6 +85,15 @@
|
|
David Woodhouse |
6087050 |
static GList *purple_media_backend_fs2_get_local_candidates(
|
|
David Woodhouse |
6087050 |
PurpleMediaBackend *self,
|
|
David Woodhouse |
6087050 |
const gchar *sess_id, const gchar *participant);
|
|
David Woodhouse |
6087050 |
+#if GST_CHECK_VERSION(1,0,0)
|
|
David Woodhouse |
6087050 |
+static gboolean purple_media_backend_fs2_set_encryption_parameters (
|
|
David Woodhouse |
6087050 |
+ PurpleMediaBackend *self, const gchar *sess_id, const gchar *cipher,
|
|
David Woodhouse |
6087050 |
+ const gchar *auth, const gchar *key, gsize key_len);
|
|
David Woodhouse |
6087050 |
+static gboolean purple_media_backend_fs2_set_decryption_parameters(
|
|
David Woodhouse |
6087050 |
+ PurpleMediaBackend *self, const gchar *sess_id,
|
|
David Woodhouse |
6087050 |
+ const gchar *participant, const gchar *cipher,
|
|
David Woodhouse |
6087050 |
+ const gchar *auth, const gchar *key, gsize key_len);
|
|
David Woodhouse |
6087050 |
+#endif
|
|
David Woodhouse |
6087050 |
static gboolean purple_media_backend_fs2_set_remote_codecs(
|
|
David Woodhouse |
6087050 |
PurpleMediaBackend *self,
|
|
David Woodhouse |
6087050 |
const gchar *sess_id, const gchar *participant,
|
|
David Woodhouse |
6087050 |
@@ -545,6 +554,12 @@
|
|
David Woodhouse |
6087050 |
purple_media_backend_fs2_get_local_candidates;
|
|
David Woodhouse |
6087050 |
iface->set_remote_codecs = purple_media_backend_fs2_set_remote_codecs;
|
|
David Woodhouse |
6087050 |
iface->set_send_codec = purple_media_backend_fs2_set_send_codec;
|
|
David Woodhouse |
6087050 |
+#if GST_CHECK_VERSION(1,0,0)
|
|
David Woodhouse |
6087050 |
+ iface->set_encryption_parameters =
|
|
David Woodhouse |
6087050 |
+ purple_media_backend_fs2_set_encryption_parameters;
|
|
David Woodhouse |
6087050 |
+ iface->set_decryption_parameters =
|
|
David Woodhouse |
6087050 |
+ purple_media_backend_fs2_set_decryption_parameters;
|
|
David Woodhouse |
6087050 |
+#endif
|
|
David Woodhouse |
6087050 |
iface->set_params = purple_media_backend_fs2_set_params;
|
|
David Woodhouse |
6087050 |
iface->get_available_params = purple_media_backend_fs2_get_available_params;
|
|
David Woodhouse |
6087050 |
iface->send_dtmf = purple_media_backend_fs2_send_dtmf;
|
|
David Woodhouse |
6087050 |
@@ -2471,6 +2486,97 @@
|
|
David Woodhouse |
6087050 |
return TRUE;
|
|
David Woodhouse |
6087050 |
}
|
|
David Woodhouse |
6087050 |
|
|
David Woodhouse |
6087050 |
+#if GST_CHECK_VERSION(1,0,0)
|
|
David Woodhouse |
6087050 |
+static GstStructure *
|
|
David Woodhouse |
6087050 |
+create_fs2_srtp_structure(const gchar *cipher, const gchar *auth,
|
|
David Woodhouse |
6087050 |
+ const gchar *key, gsize key_len)
|
|
David Woodhouse |
6087050 |
+{
|
|
David Woodhouse |
6087050 |
+ GstStructure *result;
|
|
David Woodhouse |
6087050 |
+ GstBuffer *buffer;
|
|
David Woodhouse |
6087050 |
+ GstMapInfo info;
|
|
David Woodhouse |
6087050 |
+
|
|
David Woodhouse |
6087050 |
+ buffer = gst_buffer_new_allocate(NULL, key_len, NULL);
|
|
David Woodhouse |
6087050 |
+ gst_buffer_map(buffer, &info, GST_MAP_WRITE);
|
|
David Woodhouse |
6087050 |
+ memcpy(info.data, key, key_len);
|
|
David Woodhouse |
6087050 |
+ gst_buffer_unmap(buffer, &info;;
|
|
David Woodhouse |
6087050 |
+
|
|
David Woodhouse |
6087050 |
+ result = gst_structure_new("FarstreamSRTP",
|
|
David Woodhouse |
6087050 |
+ "cipher", G_TYPE_STRING, cipher,
|
|
David Woodhouse |
6087050 |
+ "auth", G_TYPE_STRING, auth,
|
|
David Woodhouse |
6087050 |
+ "key", GST_TYPE_BUFFER, buffer,
|
|
David Woodhouse |
6087050 |
+ NULL);
|
|
David Woodhouse |
6087050 |
+ gst_buffer_unref(buffer);
|
|
David Woodhouse |
6087050 |
+
|
|
David Woodhouse |
6087050 |
+ return result;
|
|
David Woodhouse |
6087050 |
+}
|
|
David Woodhouse |
6087050 |
+
|
|
David Woodhouse |
6087050 |
+static gboolean
|
|
David Woodhouse |
6087050 |
+purple_media_backend_fs2_set_encryption_parameters (PurpleMediaBackend *self,
|
|
David Woodhouse |
6087050 |
+ const gchar *sess_id, const gchar *cipher, const gchar *auth,
|
|
David Woodhouse |
6087050 |
+ const gchar *key, gsize key_len)
|
|
David Woodhouse |
6087050 |
+{
|
|
David Woodhouse |
6087050 |
+ PurpleMediaBackendFs2Session *session;
|
|
David Woodhouse |
6087050 |
+ GstStructure *srtp;
|
|
David Woodhouse |
6087050 |
+ GError *err = NULL;
|
|
David Woodhouse |
6087050 |
+ gboolean result;
|
|
David Woodhouse |
6087050 |
+
|
|
David Woodhouse |
6087050 |
+ g_return_val_if_fail(PURPLE_IS_MEDIA_BACKEND_FS2(self), FALSE);
|
|
David Woodhouse |
6087050 |
+
|
|
David Woodhouse |
6087050 |
+ session = get_session(PURPLE_MEDIA_BACKEND_FS2(self), sess_id);
|
|
David Woodhouse |
6087050 |
+ if (!session)
|
|
David Woodhouse |
6087050 |
+ return FALSE;
|
|
David Woodhouse |
6087050 |
+
|
|
David Woodhouse |
6087050 |
+ srtp = create_fs2_srtp_structure(cipher, auth, key, key_len);
|
|
David Woodhouse |
6087050 |
+ if (!srtp)
|
|
David Woodhouse |
6087050 |
+ return FALSE;
|
|
David Woodhouse |
6087050 |
+
|
|
David Woodhouse |
6087050 |
+ result = fs_session_set_encryption_parameters(session->session, srtp,
|
|
David Woodhouse |
6087050 |
+ &err;;
|
|
David Woodhouse |
6087050 |
+ if (!result) {
|
|
David Woodhouse |
6087050 |
+ purple_debug_error("backend-fs2",
|
|
David Woodhouse |
6087050 |
+ "Error setting encryption parameters: %s\n", err->message);
|
|
David Woodhouse |
6087050 |
+ g_error_free(err);
|
|
David Woodhouse |
6087050 |
+ }
|
|
David Woodhouse |
6087050 |
+
|
|
David Woodhouse |
6087050 |
+ gst_structure_free(srtp);
|
|
David Woodhouse |
6087050 |
+ return result;
|
|
David Woodhouse |
6087050 |
+}
|
|
David Woodhouse |
6087050 |
+
|
|
David Woodhouse |
6087050 |
+static gboolean
|
|
David Woodhouse |
6087050 |
+purple_media_backend_fs2_set_decryption_parameters (PurpleMediaBackend *self,
|
|
David Woodhouse |
6087050 |
+ const gchar *sess_id, const gchar *participant,
|
|
David Woodhouse |
6087050 |
+ const gchar *cipher, const gchar *auth,
|
|
David Woodhouse |
6087050 |
+ const gchar *key, gsize key_len)
|
|
David Woodhouse |
6087050 |
+{
|
|
David Woodhouse |
6087050 |
+ PurpleMediaBackendFs2Stream *stream;
|
|
David Woodhouse |
6087050 |
+ GstStructure *srtp;
|
|
David Woodhouse |
6087050 |
+ GError *err = NULL;
|
|
David Woodhouse |
6087050 |
+ gboolean result;
|
|
David Woodhouse |
6087050 |
+
|
|
David Woodhouse |
6087050 |
+ g_return_val_if_fail(PURPLE_IS_MEDIA_BACKEND_FS2(self), FALSE);
|
|
David Woodhouse |
6087050 |
+
|
|
David Woodhouse |
6087050 |
+ stream = get_stream(PURPLE_MEDIA_BACKEND_FS2(self), sess_id,
|
|
David Woodhouse |
6087050 |
+ participant);
|
|
David Woodhouse |
6087050 |
+ if (!stream)
|
|
David Woodhouse |
6087050 |
+ return FALSE;
|
|
David Woodhouse |
6087050 |
+
|
|
David Woodhouse |
6087050 |
+ srtp = create_fs2_srtp_structure(cipher, auth, key, key_len);
|
|
David Woodhouse |
6087050 |
+ if (!srtp)
|
|
David Woodhouse |
6087050 |
+ return FALSE;
|
|
David Woodhouse |
6087050 |
+
|
|
David Woodhouse |
6087050 |
+ result = fs_stream_set_decryption_parameters(stream->stream, srtp,
|
|
David Woodhouse |
6087050 |
+ &err;;
|
|
David Woodhouse |
6087050 |
+ if (!result) {
|
|
David Woodhouse |
6087050 |
+ purple_debug_error("backend-fs2",
|
|
David Woodhouse |
6087050 |
+ "Error setting decryption parameters: %s\n", err->message);
|
|
David Woodhouse |
6087050 |
+ g_error_free(err);
|
|
David Woodhouse |
6087050 |
+ }
|
|
David Woodhouse |
6087050 |
+
|
|
David Woodhouse |
6087050 |
+ gst_structure_free(srtp);
|
|
David Woodhouse |
6087050 |
+ return result;
|
|
David Woodhouse |
6087050 |
+}
|
|
David Woodhouse |
6087050 |
+#endif /* GST 1.0+ */
|
|
David Woodhouse |
6087050 |
+
|
|
David Woodhouse |
6087050 |
static gboolean
|
|
David Woodhouse |
6087050 |
purple_media_backend_fs2_set_send_codec(PurpleMediaBackend *self,
|
|
David Woodhouse |
6087050 |
const gchar *sess_id, PurpleMediaCodec *codec)
|
|
David Woodhouse |
6087050 |
diff --git a/libpurple/media/backend-iface.c b/libpurple/media/backend-iface.c
|
|
David Woodhouse |
6087050 |
--- a/libpurple/media/backend-iface.c
|
|
David Woodhouse |
6087050 |
+++ b/libpurple/media/backend-iface.c
|
|
David Woodhouse |
6087050 |
@@ -193,6 +193,35 @@
|
|
David Woodhouse |
6087050 |
sess_id, codec);
|
|
David Woodhouse |
6087050 |
}
|
|
David Woodhouse |
6087050 |
|
|
David Woodhouse |
6087050 |
+gboolean
|
|
David Woodhouse |
6087050 |
+purple_media_backend_set_encryption_parameters(PurpleMediaBackend *self,
|
|
David Woodhouse |
6087050 |
+ const gchar *sess_id, const gchar *cipher,
|
|
David Woodhouse |
6087050 |
+ const gchar *auth, const gchar *key, gsize key_len)
|
|
David Woodhouse |
6087050 |
+{
|
|
David Woodhouse |
6087050 |
+ PurpleMediaBackendIface *backend_iface;
|
|
David Woodhouse |
6087050 |
+
|
|
David Woodhouse |
6087050 |
+ g_return_val_if_fail(PURPLE_IS_MEDIA_BACKEND(self), FALSE);
|
|
David Woodhouse |
6087050 |
+ backend_iface = PURPLE_MEDIA_BACKEND_GET_INTERFACE(self);
|
|
David Woodhouse |
6087050 |
+ g_return_val_if_fail(backend_iface->set_encryption_parameters, FALSE);
|
|
David Woodhouse |
6087050 |
+ return backend_iface->set_encryption_parameters(self,
|
|
David Woodhouse |
6087050 |
+ sess_id, cipher, auth, key, key_len);
|
|
David Woodhouse |
6087050 |
+}
|
|
David Woodhouse |
6087050 |
+
|
|
David Woodhouse |
6087050 |
+gboolean
|
|
David Woodhouse |
6087050 |
+purple_media_backend_set_decryption_parameters(PurpleMediaBackend *self,
|
|
David Woodhouse |
6087050 |
+ const gchar *sess_id, const gchar *participant,
|
|
David Woodhouse |
6087050 |
+ const gchar *cipher, const gchar *auth,
|
|
David Woodhouse |
6087050 |
+ const gchar *key, gsize key_len)
|
|
David Woodhouse |
6087050 |
+{
|
|
David Woodhouse |
6087050 |
+ PurpleMediaBackendIface *backend_iface;
|
|
David Woodhouse |
6087050 |
+
|
|
David Woodhouse |
6087050 |
+ g_return_val_if_fail(PURPLE_IS_MEDIA_BACKEND(self), FALSE);
|
|
David Woodhouse |
6087050 |
+ backend_iface = PURPLE_MEDIA_BACKEND_GET_INTERFACE(self);
|
|
David Woodhouse |
6087050 |
+ g_return_val_if_fail(backend_iface->set_decryption_parameters, FALSE);
|
|
David Woodhouse |
6087050 |
+ return backend_iface->set_decryption_parameters(self,
|
|
David Woodhouse |
6087050 |
+ sess_id, participant, cipher, auth, key, key_len);
|
|
David Woodhouse |
6087050 |
+}
|
|
David Woodhouse |
6087050 |
+
|
|
David Woodhouse |
6087050 |
void
|
|
David Woodhouse |
6087050 |
purple_media_backend_set_params(PurpleMediaBackend *self,
|
|
David Woodhouse |
6087050 |
guint num_params, GParameter *params)
|
|
David Woodhouse |
6087050 |
diff --git a/libpurple/media/backend-iface.h b/libpurple/media/backend-iface.h
|
|
David Woodhouse |
6087050 |
--- a/libpurple/media/backend-iface.h
|
|
David Woodhouse |
6087050 |
+++ b/libpurple/media/backend-iface.h
|
|
David Woodhouse |
6087050 |
@@ -68,6 +68,13 @@
|
|
David Woodhouse |
6087050 |
GList *codecs);
|
|
David Woodhouse |
6087050 |
gboolean (*set_send_codec) (PurpleMediaBackend *self,
|
|
David Woodhouse |
6087050 |
const gchar *sess_id, PurpleMediaCodec *codec);
|
|
David Woodhouse |
6087050 |
+ gboolean (*set_encryption_parameters) (PurpleMediaBackend *self,
|
|
David Woodhouse |
6087050 |
+ const gchar *sess_id, const gchar *cipher,
|
|
David Woodhouse |
6087050 |
+ const gchar *auth, const gchar *key, gsize key_len);
|
|
David Woodhouse |
6087050 |
+ gboolean (*set_decryption_parameters) (PurpleMediaBackend *self,
|
|
David Woodhouse |
6087050 |
+ const gchar *sess_id, const gchar *participant,
|
|
David Woodhouse |
6087050 |
+ const gchar *cipher, const gchar *auth,
|
|
David Woodhouse |
6087050 |
+ const gchar *key, gsize key_len);
|
|
David Woodhouse |
6087050 |
void (*set_params) (PurpleMediaBackend *self,
|
|
David Woodhouse |
6087050 |
guint num_params, GParameter *params);
|
|
David Woodhouse |
6087050 |
const gchar **(*get_available_params) (void);
|
|
David Woodhouse |
6087050 |
@@ -198,6 +205,43 @@
|
|
David Woodhouse |
6087050 |
const gchar *sess_id, PurpleMediaCodec *codec);
|
|
David Woodhouse |
6087050 |
|
|
David Woodhouse |
6087050 |
/**
|
|
David Woodhouse |
6087050 |
+ * Sets the encryption parameters of our media in the session.
|
|
David Woodhouse |
6087050 |
+ *
|
|
David Woodhouse |
6087050 |
+ * @param self The media backend the session is in.
|
|
David Woodhouse |
6087050 |
+ * @param sess_id The session id of the session to set parameters of.
|
|
David Woodhouse |
6087050 |
+ * @param cipher The cipher to use to encrypt our media in the session.
|
|
David Woodhouse |
6087050 |
+ * @param auth The algorithm to use to compute authentication codes for our
|
|
David Woodhouse |
6087050 |
+ * media frames.
|
|
David Woodhouse |
6087050 |
+ * @param key The encryption key.
|
|
David Woodhouse |
6087050 |
+ * @param key_len Byte length of the encryption key.
|
|
David Woodhouse |
6087050 |
+ *
|
|
David Woodhouse |
6087050 |
+ * @since 2.11.0
|
|
David Woodhouse |
6087050 |
+ */
|
|
David Woodhouse |
6087050 |
+gboolean purple_media_backend_set_encryption_parameters(PurpleMediaBackend *self,
|
|
David Woodhouse |
6087050 |
+ const gchar *sess_id, const gchar *cipher,
|
|
David Woodhouse |
6087050 |
+ const gchar *auth, const gchar *key, gsize key_len);
|
|
David Woodhouse |
6087050 |
+
|
|
David Woodhouse |
6087050 |
+/**
|
|
David Woodhouse |
6087050 |
+ * Sets the decryption parameters for a session participant's media.
|
|
David Woodhouse |
6087050 |
+ *
|
|
David Woodhouse |
6087050 |
+ * @param self The media backend the session is in.
|
|
David Woodhouse |
6087050 |
+ * @param sess_id The session id of the session to set parameters of.
|
|
David Woodhouse |
6087050 |
+ * @param participant The participant of the session to set parameters of.
|
|
David Woodhouse |
6087050 |
+ * @param cipher The cipher to use to decrypt media coming from this session's
|
|
David Woodhouse |
6087050 |
+ * participant.
|
|
David Woodhouse |
6087050 |
+ * @param auth The algorithm to use for authentication of the media coming
|
|
David Woodhouse |
6087050 |
+ * from the session's participant.
|
|
David Woodhouse |
6087050 |
+ * @param key The decryption key.
|
|
David Woodhouse |
6087050 |
+ * @param key_len Byte length of the decryption key.
|
|
David Woodhouse |
6087050 |
+ *
|
|
David Woodhouse |
6087050 |
+ * @since 2.11.0
|
|
David Woodhouse |
6087050 |
+ */
|
|
David Woodhouse |
6087050 |
+gboolean purple_media_backend_set_decryption_parameters(PurpleMediaBackend *self,
|
|
David Woodhouse |
6087050 |
+ const gchar *sess_id, const gchar *participant,
|
|
David Woodhouse |
6087050 |
+ const gchar *cipher, const gchar *auth,
|
|
David Woodhouse |
6087050 |
+ const gchar *key, gsize key_len);
|
|
David Woodhouse |
6087050 |
+
|
|
David Woodhouse |
6087050 |
+/**
|
|
David Woodhouse |
6087050 |
* Sets various optional parameters of the media backend.
|
|
David Woodhouse |
6087050 |
*
|
|
David Woodhouse |
6087050 |
* @param self The media backend to set the parameters on.
|
|
David Woodhouse |
6087050 |
diff --git a/libpurple/media/enum-types.c b/libpurple/media/enum-types.c
|
|
David Woodhouse |
6087050 |
--- a/libpurple/media/enum-types.c
|
|
David Woodhouse |
6087050 |
+++ b/libpurple/media/enum-types.c
|
|
David Woodhouse |
6087050 |
@@ -217,3 +217,44 @@
|
|
David Woodhouse |
6087050 |
return type;
|
|
David Woodhouse |
6087050 |
}
|
|
David Woodhouse |
6087050 |
|
|
David Woodhouse |
6087050 |
+/*
|
|
David Woodhouse |
6087050 |
+ * PurpleMediaCipher
|
|
David Woodhouse |
6087050 |
+ */
|
|
David Woodhouse |
6087050 |
+
|
|
David Woodhouse |
6087050 |
+GType
|
|
David Woodhouse |
6087050 |
+purple_media_cipher_get_type()
|
|
David Woodhouse |
6087050 |
+{
|
|
David Woodhouse |
6087050 |
+ static GType type = 0;
|
|
David Woodhouse |
6087050 |
+ if (type == 0) {
|
|
David Woodhouse |
6087050 |
+ static const GEnumValue values[] = {
|
|
David Woodhouse |
6087050 |
+ { PURPLE_MEDIA_CIPHER_NULL,
|
|
David Woodhouse |
6087050 |
+ "PURPLE_MEDIA_CIPHER_NULL", "null" },
|
|
David Woodhouse |
6087050 |
+ { PURPLE_MEDIA_CIPHER_AES_128_ICM,
|
|
David Woodhouse |
6087050 |
+ "PURPLE_MEDIA_CIPHER_AES_128_ICM", "AES-128-ICM" },
|
|
David Woodhouse |
6087050 |
+ { PURPLE_MEDIA_CIPHER_AES_256_ICM,
|
|
David Woodhouse |
6087050 |
+ "PURPLE_MEDIA_CIPHER_AES_256_ICM", "AES-256-ICM" },
|
|
David Woodhouse |
6087050 |
+ { 0, NULL, NULL }
|
|
David Woodhouse |
6087050 |
+ };
|
|
David Woodhouse |
6087050 |
+ type = g_enum_register_static("PurpleMediaCipher", values);
|
|
David Woodhouse |
6087050 |
+ }
|
|
David Woodhouse |
6087050 |
+ return type;
|
|
David Woodhouse |
6087050 |
+}
|
|
David Woodhouse |
6087050 |
+
|
|
David Woodhouse |
6087050 |
+GType
|
|
David Woodhouse |
6087050 |
+purple_media_authentication_get_type(void)
|
|
David Woodhouse |
6087050 |
+{
|
|
David Woodhouse |
6087050 |
+ static GType type = 0;
|
|
David Woodhouse |
6087050 |
+ if (type == 0) {
|
|
David Woodhouse |
6087050 |
+ static const GEnumValue values[] = {
|
|
David Woodhouse |
6087050 |
+ { PURPLE_MEDIA_AUTHENTICATION_NULL,
|
|
David Woodhouse |
6087050 |
+ "PURPLE_MEDIA_AUTHENTICATION_NULL", "null" },
|
|
David Woodhouse |
6087050 |
+ { PURPLE_MEDIA_AUTHENTICATION_HMAC_SHA1_32,
|
|
David Woodhouse |
6087050 |
+ "PURPLE_MEDIA_AUTHENTICATION_HMAC_SHA1_32", "HMAC_SHA1_32" },
|
|
David Woodhouse |
6087050 |
+ { PURPLE_MEDIA_AUTHENTICATION_HMAC_SHA1_80,
|
|
David Woodhouse |
6087050 |
+ "PURPLE_MEDIA_AUTHENTICATION_HMAC_SHA1_80", "HMAC_SHA1_80" },
|
|
David Woodhouse |
6087050 |
+ { 0, NULL, NULL }
|
|
David Woodhouse |
6087050 |
+ };
|
|
David Woodhouse |
6087050 |
+ type = g_enum_register_static("PurpleMediaAuthentication", values);
|
|
David Woodhouse |
6087050 |
+ }
|
|
David Woodhouse |
6087050 |
+ return type;
|
|
David Woodhouse |
6087050 |
+}
|
|
David Woodhouse |
6087050 |
diff --git a/libpurple/media/enum-types.h b/libpurple/media/enum-types.h
|
|
David Woodhouse |
6087050 |
--- a/libpurple/media/enum-types.h
|
|
David Woodhouse |
6087050 |
+++ b/libpurple/media/enum-types.h
|
|
David Woodhouse |
6087050 |
@@ -106,6 +106,28 @@
|
|
David Woodhouse |
6087050 |
} PurpleMediaState;
|
|
David Woodhouse |
6087050 |
|
|
David Woodhouse |
6087050 |
/**
|
|
David Woodhouse |
6087050 |
+ * PurpleMediaCipher:
|
|
David Woodhouse |
6087050 |
+ *
|
|
David Woodhouse |
6087050 |
+ * Media ciphers
|
|
David Woodhouse |
6087050 |
+ */
|
|
David Woodhouse |
6087050 |
+typedef enum {
|
|
David Woodhouse |
6087050 |
+ PURPLE_MEDIA_CIPHER_NULL,
|
|
David Woodhouse |
6087050 |
+ PURPLE_MEDIA_CIPHER_AES_128_ICM,
|
|
David Woodhouse |
6087050 |
+ PURPLE_MEDIA_CIPHER_AES_256_ICM
|
|
David Woodhouse |
6087050 |
+} PurpleMediaCipher;
|
|
David Woodhouse |
6087050 |
+
|
|
David Woodhouse |
6087050 |
+/**
|
|
David Woodhouse |
6087050 |
+ * PurpleMediaAuthentication:
|
|
David Woodhouse |
6087050 |
+ *
|
|
David Woodhouse |
6087050 |
+ * Media message authentication algorithms
|
|
David Woodhouse |
6087050 |
+ */
|
|
David Woodhouse |
6087050 |
+typedef enum {
|
|
David Woodhouse |
6087050 |
+ PURPLE_MEDIA_AUTHENTICATION_NULL,
|
|
David Woodhouse |
6087050 |
+ PURPLE_MEDIA_AUTHENTICATION_HMAC_SHA1_32,
|
|
David Woodhouse |
6087050 |
+ PURPLE_MEDIA_AUTHENTICATION_HMAC_SHA1_80
|
|
David Woodhouse |
6087050 |
+} PurpleMediaAuthentication;
|
|
David Woodhouse |
6087050 |
+
|
|
David Woodhouse |
6087050 |
+/**
|
|
David Woodhouse |
6087050 |
* Gets the media candidate type's GType
|
|
David Woodhouse |
6087050 |
*
|
|
David Woodhouse |
6087050 |
* @return The media candidate type's GType.
|
|
David Woodhouse |
6087050 |
@@ -159,6 +181,24 @@
|
|
David Woodhouse |
6087050 |
*/
|
|
David Woodhouse |
6087050 |
GType purple_media_state_changed_get_type(void);
|
|
David Woodhouse |
6087050 |
|
|
David Woodhouse |
6087050 |
+/**
|
|
David Woodhouse |
6087050 |
+ * purple_media_cipher_get_type:
|
|
David Woodhouse |
6087050 |
+ *
|
|
David Woodhouse |
6087050 |
+ * Gets the type of the cipher enum
|
|
David Woodhouse |
6087050 |
+ *
|
|
David Woodhouse |
6087050 |
+ * Returns: The cipher enum's GType
|
|
David Woodhouse |
6087050 |
+ */
|
|
David Woodhouse |
6087050 |
+GType purple_media_cipher_get_type(void);
|
|
David Woodhouse |
6087050 |
+
|
|
David Woodhouse |
6087050 |
+/**
|
|
David Woodhouse |
6087050 |
+ * purple_media_authentication_get_type:
|
|
David Woodhouse |
6087050 |
+ *
|
|
David Woodhouse |
6087050 |
+ * Gets the type of the authentication enum
|
|
David Woodhouse |
6087050 |
+ *
|
|
David Woodhouse |
6087050 |
+ * Returns: The authentication enum's GType
|
|
David Woodhouse |
6087050 |
+ */
|
|
David Woodhouse |
6087050 |
+GType purple_media_authentication_get_type(void);
|
|
David Woodhouse |
6087050 |
+
|
|
David Woodhouse |
6087050 |
G_END_DECLS
|
|
David Woodhouse |
6087050 |
|
|
David Woodhouse |
6087050 |
#endif /* _PURPLE_MEDIA_ENUM_TYPES_ */
|
|
David Woodhouse |
6087050 |
|