summaryrefslogtreecommitdiff
path: root/ext/sctp/sctpassociation.h
diff options
context:
space:
mode:
Diffstat (limited to 'ext/sctp/sctpassociation.h')
-rw-r--r--ext/sctp/sctpassociation.h123
1 files changed, 123 insertions, 0 deletions
diff --git a/ext/sctp/sctpassociation.h b/ext/sctp/sctpassociation.h
new file mode 100644
index 000000000..4510ba70f
--- /dev/null
+++ b/ext/sctp/sctpassociation.h
@@ -0,0 +1,123 @@
+/*
+ * Copyright (c) 2015, Collabora Ltd.
+ *
+ * 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 __GST_SCTP_ASSOCIATION_H__
+#define __GST_SCTP_ASSOCIATION_H__
+
+#include <glib-object.h>
+#define INET
+#define INET6
+#include <usrsctp.h>
+
+G_BEGIN_DECLS
+
+#define GST_SCTP_TYPE_ASSOCIATION (gst_sctp_association_get_type ())
+#define GST_SCTP_ASSOCIATION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_SCTP_TYPE_ASSOCIATION, GstSctpAssociation))
+#define GST_SCTP_IS_ASSOCIATION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_SCTP_TYPE_ASSOCIATION))
+#define GST_SCTP_ASSOCIATION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GST_SCTP_TYPE_ASSOCIATION, GstSctpAssociationClass))
+#define GST_SCTP_IS_ASSOCIATION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_SCTP_TYPE_ASSOCIATION))
+#define GST_SCTP_ASSOCIATION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_SCTP_TYPE_ASSOCIATION, GstSctpAssociationClass))
+
+typedef struct _GstSctpAssociation GstSctpAssociation;
+typedef struct _GstSctpAssociationClass GstSctpAssociationClass;
+
+typedef enum
+{
+ GST_SCTP_ASSOCIATION_STATE_NEW,
+ GST_SCTP_ASSOCIATION_STATE_READY,
+ GST_SCTP_ASSOCIATION_STATE_CONNECTING,
+ GST_SCTP_ASSOCIATION_STATE_CONNECTED,
+ GST_SCTP_ASSOCIATION_STATE_DISCONNECTING,
+ GST_SCTP_ASSOCIATION_STATE_DISCONNECTED,
+ GST_SCTP_ASSOCIATION_STATE_ERROR
+} GstSctpAssociationState;
+
+typedef enum
+{
+ GST_SCTP_ASSOCIATION_PARTIAL_RELIABILITY_NONE = 0x0000,
+ GST_SCTP_ASSOCIATION_PARTIAL_RELIABILITY_TTL = 0x0001,
+ GST_SCTP_ASSOCIATION_PARTIAL_RELIABILITY_BUF = 0x0002,
+ GST_SCTP_ASSOCIATION_PARTIAL_RELIABILITY_RTX = 0x0003
+} GstSctpAssociationPartialReliability;
+
+typedef void (*GstSctpAssociationPacketReceivedCb) (GstSctpAssociation *
+ sctp_association, guint8 * data, gsize length, guint16 stream_id,
+ guint ppid, gpointer user_data);
+typedef void (*GstSctpAssociationPacketOutCb) (GstSctpAssociation *
+ sctp_association, const guint8 * data, gsize length, gpointer user_data);
+
+struct _GstSctpAssociation
+{
+ GObject parent_instance;
+
+ guint32 association_id;
+ guint16 local_port;
+ guint16 remote_port;
+ gboolean use_sock_stream;
+ struct socket *sctp_ass_sock;
+
+ GMutex association_mutex;
+
+ GstSctpAssociationState state;
+
+ GThread *connection_thread;
+
+ GstSctpAssociationPacketReceivedCb packet_received_cb;
+ gpointer packet_received_user_data;
+
+ GstSctpAssociationPacketOutCb packet_out_cb;
+ gpointer packet_out_user_data;
+};
+
+struct _GstSctpAssociationClass
+{
+ GObjectClass parent_class;
+
+ void (*on_sctp_stream_reset) (GstSctpAssociation * sctp_association,
+ guint16 stream_id);
+};
+
+GType gst_sctp_association_get_type (void);
+
+GstSctpAssociation *gst_sctp_association_get (guint32 association_id);
+
+gboolean gst_sctp_association_start (GstSctpAssociation * self);
+void gst_sctp_association_set_on_packet_out (GstSctpAssociation * self,
+ GstSctpAssociationPacketOutCb packet_out_cb, gpointer user_data);
+void gst_sctp_association_set_on_packet_received (GstSctpAssociation * self,
+ GstSctpAssociationPacketReceivedCb packet_received_cb, gpointer user_data);
+void gst_sctp_association_incoming_packet (GstSctpAssociation * self,
+ guint8 * buf, guint32 length);
+gboolean gst_sctp_association_send_data (GstSctpAssociation * self,
+ guint8 * buf, guint32 length, guint16 stream_id, guint32 ppid,
+ gboolean ordered, GstSctpAssociationPartialReliability pr,
+ guint32 reliability_param);
+void gst_sctp_association_reset_stream (GstSctpAssociation * self,
+ guint16 stream_id);
+void gst_sctp_association_force_close (GstSctpAssociation * self);
+
+G_END_DECLS
+
+#endif /* __GST_SCTP_ASSOCIATION_H__ */