diff options
author | Sebastian Dröge <sebastian@centricular.com> | 2015-03-16 17:33:03 +0100 |
---|---|---|
committer | Sebastian Dröge <sebastian@centricular.com> | 2015-03-16 18:23:27 +0100 |
commit | 1e0ed9af11b70a6e743d9d394d2e22b12f569d58 (patch) | |
tree | 541b568425bec672ca0390f1d7007dce6be31a50 /ext/dtls/gstdtlsconnection.h | |
parent | d5ca311a0db7bffc63c2e579a196b626a257a750 (diff) | |
download | gstreamer-plugins-bad-1e0ed9af11b70a6e743d9d394d2e22b12f569d58.tar.gz |
dtls: Add new DTLS plugin
This is a copy of the Ericsson DTLS plugin from
https://github.com/EricssonResearch/openwebrtc-gst-plugins/tree/master/ext/erdtls/src
https://bugzilla.gnome.org/show_bug.cgi?id=744582
Diffstat (limited to 'ext/dtls/gstdtlsconnection.h')
-rw-r--r-- | ext/dtls/gstdtlsconnection.h | 123 |
1 files changed, 123 insertions, 0 deletions
diff --git a/ext/dtls/gstdtlsconnection.h b/ext/dtls/gstdtlsconnection.h new file mode 100644 index 000000000..916d8ad9f --- /dev/null +++ b/ext/dtls/gstdtlsconnection.h @@ -0,0 +1,123 @@ +/* + * Copyright (c) 2014, Ericsson AB. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or other + * materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + */ + +#ifndef gstdtlsconnection_h +#define gstdtlsconnection_h + +#include <glib-object.h> + +G_BEGIN_DECLS + +#define ER_TYPE_DTLS_CONNECTION (er_dtls_connection_get_type()) +#define ER_DTLS_CONNECTION(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), ER_TYPE_DTLS_CONNECTION, ErDtlsConnection)) +#define ER_DTLS_CONNECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), ER_TYPE_DTLS_CONNECTION, ErDtlsConnectionClass)) +#define ER_IS_DTLS_CONNECTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), ER_TYPE_DTLS_CONNECTION)) +#define ER_IS_DTLS_CONNECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), ER_TYPE_DTLS_CONNECTION)) +#define ER_DTLS_CONNECTION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), ER_TYPE_DTLS_CONNECTION, ErDtlsConnectionClass)) + +typedef struct _ErDtlsConnection ErDtlsConnection; +typedef struct _ErDtlsConnectionClass ErDtlsConnectionClass; +typedef struct _ErDtlsConnectionPrivate ErDtlsConnectionPrivate; + +/** + * ErDtlsSrtpCipher: + * @ER_DTLS_SRTP_CIPHER_AES_128_ICM: aes-128-icm + * + * SRTP Cipher selected by the DTLS handshake, should match the enums in gstsrtp + */ +typedef enum { + ER_DTLS_SRTP_CIPHER_AES_128_ICM = 1 +} ErDtlsSrtpCipher; + +/** + * ErDtlsSrtpAuth: + * @ER_DTLS_SRTP_AUTH_HMAC_SHA1_32: hmac-sha1-32 + * @ER_DTLS_SRTP_AUTH_HMAC_SHA1_80: hmac-sha1-80 + * + * SRTP Auth selected by the DTLS handshake, should match the enums in gstsrtp + */ +typedef enum { + ER_DTLS_SRTP_AUTH_HMAC_SHA1_32 = 1, + ER_DTLS_SRTP_AUTH_HMAC_SHA1_80 = 2 +} ErDtlsSrtpAuth; + +#define ER_DTLS_SRTP_MASTER_KEY_LENGTH 30 + +/* + * ErDtlsConnection: + * + * A class that handles a single DTLS connection. + * Any connection needs to be created with the agent property set. + * Once the DTLS handshake is completed, on-encoder-key and on-decoder-key will be signalled. + */ +struct _ErDtlsConnection { + GObject parent_instance; + + ErDtlsConnectionPrivate *priv; +}; + +struct _ErDtlsConnectionClass { + GObjectClass parent_class; +}; + +GType er_dtls_connection_get_type(void) G_GNUC_CONST; + +void er_dtls_connection_start(ErDtlsConnection *, gboolean is_client); +void er_dtls_connection_start_timeout(ErDtlsConnection *); + +/* + * Stops the connections, it is not required to call this function. + */ +void er_dtls_connection_stop(ErDtlsConnection *); + +/* + * Closes the connection, the function will block until the connection has been stopped. + * If stop is called some time before, close will return instantly. + */ +void er_dtls_connection_close(ErDtlsConnection *); + +/* + * Sets the closure that will be called whenever data needs to be sent. + * + * The closure will get called with the following arguments: + * void cb(ErDtlsConnection *, gpointer data, gint length, gpointer user_data) + */ +void er_dtls_connection_set_send_callback(ErDtlsConnection *, GClosure *); + +/* + * Processes data that has been recevied, the transformation is done in-place. + * Returns the length of the plaintext data that was decoded, if no data is available, 0<= will be returned. + */ +gint er_dtls_connection_process(ErDtlsConnection *, gpointer ptr, gint len); + +/* + * If the DTLS handshake is completed this function will encode the given data. + * Returns the length of the data sent, or 0 if the DTLS handshake is not completed. + */ +gint er_dtls_connection_send(ErDtlsConnection *, gpointer ptr, gint len); + +G_END_DECLS + +#endif /* gstdtlsconnection_h */ |