summaryrefslogtreecommitdiffstats
path: root/stream/freesdp/priv.h
diff options
context:
space:
mode:
Diffstat (limited to 'stream/freesdp/priv.h')
-rw-r--r--stream/freesdp/priv.h274
1 files changed, 274 insertions, 0 deletions
diff --git a/stream/freesdp/priv.h b/stream/freesdp/priv.h
new file mode 100644
index 0000000000..c39a493c5f
--- /dev/null
+++ b/stream/freesdp/priv.h
@@ -0,0 +1,274 @@
+/*
+ This file is part of FreeSDP
+ Copyright (C) 2001,2002,2003 Federico Montesino Pouzols <fedemp@altern.org>
+
+ FreeSDP is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+ Benjamin Zores, (C) 2006
+ added support in parser for the a=control: lines.
+ added support in parser for the a=range: lines.
+*/
+
+/**
+ * @file priv.h
+ *
+ * @short Common private header for both formatting and parsing modules.
+ **/
+
+#ifndef FSDP_PRIV_H
+#define FSDP_PRIV_H
+
+#define _GNU_SOURCE
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "common.h"
+
+#define NTP_EPOCH_OFFSET 2208988800UL
+
+#define FSDP_MAX_LENGTH 2000
+
+/* Tags for doxygen documentation */
+
+/**
+ * @mainpage FreeSDP Library Reference Manual
+ * @section overview Overview (README)
+ * @verbinclude ../../README
+ *
+ **/
+
+/**
+ * @example formatdemo.c
+ *
+ * A basic SDP descriptions formatter based on FreeSDP.
+ **/
+
+/**
+ * @example parsedemo.c
+ *
+ * A basic SDP descriptions parser based on FreeSDP.
+ **/
+
+/* Private routines declarations */
+
+BEGIN_C_DECLS
+/**
+ * @short bandwidth modifier
+ *
+ * Holds type of modifier and value. Also holds the literal bandwidth
+ * modifier if unknown.
+ **/
+ typedef struct
+{
+ fsdp_bw_modifier_type_t b_mod_type;
+ unsigned long int b_value;
+ char *b_unknown_bw_modt;
+} fsdp_bw_modifier_t;
+
+/**
+ * @short a=rtpmap: attribute
+ *
+ * Holds payload type, enconding name, RTP clock rate, and encofing
+ * parameters.
+ **/
+typedef struct
+{
+ char *pt;
+ char *encoding_name;
+ unsigned int clock_rate;
+ char *parameters;
+} fsdp_rtpmap_t;
+
+/**
+ * @short Connection address specification
+ *
+ * Holds address (unicast or multicast) as well as TTL and number of
+ * ports, when it is an IP4 multicast address.
+ **/
+typedef struct fsdp_connection_address_t_s
+{
+ char *address;
+ unsigned int address_ttl;
+ unsigned int address_count;
+} fsdp_connection_address_t;
+
+/**
+ * @short Struct for each media in a session description.
+ **/
+struct fsdp_media_description_t_s
+{
+ /* from `m=<media> <port> <transport> <fmt list>' line */
+ fsdp_media_t media_type;
+ unsigned int port;
+ unsigned int port_count;
+ fsdp_transport_protocol_t transport;
+ char **formats;
+ unsigned int formats_count;
+ /* from i=<media title> */
+ char *i_title;
+ /* from `c=<network type> <address type> <connection address>' line
+ (optional) */
+ fsdp_network_type_t c_network_type;
+ fsdp_address_type_t c_address_type;
+ fsdp_connection_address_t c_address;
+ /* from `b=<modifier>:<bandwidth-value>' lines (optional) */
+ fsdp_bw_modifier_t *bw_modifiers;
+ unsigned int bw_modifiers_count;
+ /* from `k=<method>' or `k=<method>:<encryption key>' line
+ (optional) */
+ fsdp_encryption_method_t k_encryption_method;
+ char *k_encryption_content;
+ /* from `a=<attribute>' or `a=<attribute>:<value>' lines (opt) */
+ unsigned long int a_ptime;
+ unsigned long int a_maxptime;
+ /* rtpmap */
+ fsdp_rtpmap_t **a_rtpmaps;
+ unsigned int a_rtpmaps_count;
+ fsdp_orient_t a_orient;
+ fsdp_sendrecv_mode_t a_sendrecv_mode;
+
+ char **a_sdplangs;
+ unsigned int a_sdplangs_count;
+ char **a_langs;
+ unsigned int a_langs_count;
+
+ char **a_controls;
+ unsigned int a_controls_count;
+
+ char *a_range;
+
+ float a_framerate;
+ unsigned int a_quality;
+ char **a_fmtps;
+ unsigned int a_fmtps_count;
+ /* rtcp attribute */
+ unsigned int a_rtcp_port;
+ fsdp_network_type_t a_rtcp_network_type;
+ fsdp_address_type_t a_rtcp_address_type;
+ char *a_rtcp_address;
+ /* media attributes that are not directly supported */
+ char **unidentified_attributes;
+ unsigned int unidentified_attributes_count;
+};
+
+typedef struct fsdp_media_description_t_s fsdp_media_announcement_t;
+
+/**
+ * @short Information for a repeat (struct for r= lines)
+ **/
+typedef struct
+{
+ /* times in seconds */
+ unsigned long int interval;
+ unsigned long int duration;
+ unsigned long int *offsets;
+ unsigned int offsets_count;
+} fsdp_repeat_t;
+
+/**
+ * @short Information about a time period
+ *
+ * The start and stop times as well as the information from the r=
+ * lines for a t= line are stored in this structures.
+ **/
+typedef struct
+{
+ time_t start;
+ time_t stop;
+ fsdp_repeat_t **repeats;
+ unsigned int repeats_count;
+} fsdp_time_period_t;
+
+/**
+ * @short Struct for session descriptions.
+ **/
+struct fsdp_description_t_s
+{
+ /* from v=... line */
+ unsigned int version;
+ /* from o=... line */
+ char *o_username;
+ char *o_session_id;
+ char *o_announcement_version;
+ fsdp_network_type_t o_network_type;
+ fsdp_address_type_t o_address_type;
+ char *o_address;
+ /* from s=... line */
+ char *s_name;
+ /* from i=... line (opt) */
+ char *i_information;
+ /* from u=... line (opt) */
+ char *u_uri;
+ /* from e=... lines (0 or more) */
+ const char **emails;
+ unsigned int emails_count;
+ /* from p=... lines (0 or more) */
+ const char **phones;
+ unsigned int phones_count;
+ /* from `c=<network type> <address type> <connection address>' line */
+ fsdp_network_type_t c_network_type;
+ fsdp_address_type_t c_address_type;
+ fsdp_connection_address_t c_address;
+ /* from `b=<modifier>:<bandwidth-value>' lines (optional) */
+ fsdp_bw_modifier_t *bw_modifiers;
+ unsigned int bw_modifiers_count;
+ /* from `t=<start time> <stop time>' lines (1 or more) */
+ /* from `r=<repeat interval> <active duration> <list of offsets from
+ start-time>' */
+ fsdp_time_period_t **time_periods;
+ unsigned int time_periods_count;
+ /* from `z=<adjustment time> <offset> <adjustment time> <offset>
+ ....' lines */
+ char *timezone_adj;
+ /* from `k=<method>' or `k=<method>:<encryption key>' line (opt) */
+ fsdp_encryption_method_t k_encryption_method;
+ char *k_encryption_content;
+ /* from `a=<attribute>' or `a=<attribute>:<value>' lines (opt) */
+ char *a_category;
+ char *a_keywords;
+ char *a_tool;
+ char *a_range;
+ /* rtpmap */
+ fsdp_rtpmap_t **a_rtpmaps;
+ unsigned int a_rtpmaps_count;
+ fsdp_sendrecv_mode_t a_sendrecv_mode;
+ fsdp_session_type_t a_type;
+ char *a_charset;
+
+ char **a_sdplangs;
+ unsigned int a_sdplangs_count;
+ char **a_langs;
+ unsigned int a_langs_count;
+
+ char **a_controls;
+ unsigned int a_controls_count;
+ /* from `m=<media> <port>/<number of ports> <transport> <fmt list>'
+ lines [one or more] */
+ fsdp_media_announcement_t **media_announcements;
+ unsigned int media_announcements_count;
+ /* session attributes that are not directly supported */
+ char **unidentified_attributes;
+ unsigned int unidentified_attributes_count;
+};
+
+#define MEDIA_RTPMAPS_MAX_COUNT 5
+#define SDPLANGS_MAX_COUNT 5
+#define SDPCONTROLS_MAX_COUNT 10
+#define UNIDENTIFIED_ATTRIBUTES_MAX_COUNT 5
+
+END_C_DECLS
+#endif /* FSDP_PRIV_H */