summaryrefslogtreecommitdiffstats
path: root/stream/freesdp/common.h
diff options
context:
space:
mode:
Diffstat (limited to 'stream/freesdp/common.h')
-rw-r--r--stream/freesdp/common.h352
1 files changed, 352 insertions, 0 deletions
diff --git a/stream/freesdp/common.h b/stream/freesdp/common.h
new file mode 100644
index 0000000000..ae59406049
--- /dev/null
+++ b/stream/freesdp/common.h
@@ -0,0 +1,352 @@
+/*
+ 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
+*/
+
+/**
+ * @file common.h
+ * @ingroup common
+ * @short Public header common for both parsing and formatting modules.
+ **/
+
+#ifndef FSDP_COMMON_H
+#define FSDP_COMMON_H
+
+/* Macros to avoid name mangling when compiling with a C++ compiler */
+#ifdef __cplusplus
+# define BEGIN_C_DECLS extern "C" {
+# define END_C_DECLS }
+#else /* !__cplusplus */
+# define BEGIN_C_DECLS
+# define END_C_DECLS
+#endif /* __cplusplus */
+
+#include <sys/time.h>
+#include <time.h>
+
+BEGIN_C_DECLS
+/**
+ * @defgroup common FreeSDP Common Facilities
+ *
+ * Data types and routines common for both parsing and formatting
+ * modules.
+ **/
+/** @addtogroup common */
+/*@{*/
+/**
+ * @enum fsdp_error_t freesdp/common.h
+ * @short Error codes in the FreeSDP library.
+ *
+ * There is a FSDPE_MISSING_XXXX for each mandatory line, as
+ * FSDPE_MISSING_OWNER. This kind of error is reported when a
+ * mandatory description line, such as the owner line, is not found
+ * where it should be in the SDP description. There are also several
+ * error codes like FSDPE_INVALID_XXXX. These are returned when there
+ * is a recognized line in the parsed description that violates the
+ * SDP syntax or gives wrong parameters, for instance "c=foo bar",
+ * which would cause a FSDPE_INVALID_CONNECTION error code to be
+ * returned.
+ **/
+typedef enum
+{
+ FSDPE_OK = 0,
+ FSDPE_ILLEGAL_CHARACTER, /**< Misplaced '\r', '\n' or '\0' */
+ FSDPE_MISSING_VERSION, /**< The first line is not like
+ v=... */
+ FSDPE_INVALID_VERSION, /**< Parse error in version line,
+ perhaps, the version specified in
+ v=... is not valid for FreeSDP */
+ FSDPE_MISSING_OWNER, /**< No owner line found in its
+ place */
+ FSDPE_INVALID_OWNER, /**< Parse error in owner line */
+ FSDPE_MISSING_NAME, /**< No session name found in its
+ place */
+ FSDPE_EMPTY_NAME, /**< Empty session name line */
+
+ FSDPE_INVALID_CONNECTION, /**< Syntax error in connection
+ line */
+
+ FSDPE_INVALID_CONNECTION_ADDRTYPE, /**< Unrecognized address type in
+ connection line */
+ FSDPE_INVALID_CONNECTION_NETTYPE, /**< Unrecognized network type in
+ connection line */
+ FSDPE_INVALID_BANDWIDTH, /**< Parse error in bandwidth
+ line */
+ FSDPE_MISSING_TIME, /**< No time period has been given
+ for the session */
+ FSDPE_INVALID_TIME, /**< Parse error in time line */
+ FSDPE_INVALID_REPEAT, /**< Parse error in repeat time
+ line */
+ FSDPE_INVALID_TIMEZONE, /**< Parse error in timezone line */
+ FSDPE_INVALID_ENCRYPTION_METHOD, /**< Unknown encryption method */
+ FSDPE_INVALID_ATTRIBUTE, /**< Syntax error in an attribute
+ line */
+
+ FSDPE_INVALID_ATTRIBUTE_RTPMAP,/**< Parse error in a=rtpmap:... line */
+ FSDPE_INVALID_SESSION_TYPE, /**< An unknown session type has been
+ specified in a `type:'
+ session-level attribute */
+
+ FSDPE_INVALID_MEDIA, /**< Parse error in media line */
+ FSDPE_UNKNOWN_MEDIA_TYPE, /**< Unknown media type in media
+ line */
+
+ FSDPE_UNKNOWN_MEDIA_TRANSPORT, /**< A media transport has been
+ specified that is unknown */
+
+ FSDPE_OVERFILLED, /**< extra unknown lines are at the
+ end of the description */
+ FSDPE_INVALID_LINE, /**< a line unknown to FreeSDP has been
+ found */
+ FSDPE_MISSING_CONNECTION_INFO, /**< No connection information has
+ been provided for the whole
+ session nor one or more media */
+ FSDPE_INVALID_INDEX,
+ /* FSDPE_MAXSIZE, description does not fit requested maximun size */
+ FSDPE_INTERNAL_ERROR,
+
+ FSDPE_INVALID_PARAMETER, /**< Some parameter of the called
+ FreeSDP routine has been given an
+ invalid value. This includes
+ cases such as NULL pointers. */
+ FSDPE_BUFFER_OVERFLOW
+} fsdp_error_t;
+
+/**
+ * @short Type of network
+ *
+ * Initially, SDP defines "Internet". New network types may be
+ * registered with IANA. However, the number of types is expected to
+ * be small and rarely extended. In addition, every new network type
+ * requires at least one new address type.
+ **/
+typedef enum
+{
+ FSDP_NETWORK_TYPE_UNDEFINED, /**< Not provided */
+ FSDP_NETWORK_TYPE_INET /**< Internet */
+} fsdp_network_type_t;
+
+/**
+ * @short Type of address
+ *
+ * Initially, IPv4 and IPv6 are defined for the network type
+ * Internet. New address types may be registered with IANA.
+ **/
+typedef enum
+{
+ FSDP_ADDRESS_TYPE_UNDEFINED, /**< Not provided */
+ FSDP_ADDRESS_TYPE_IPV4, /**< IP version 4 */
+ FSDP_ADDRESS_TYPE_IPV6 /**< IP version 6 */
+} fsdp_address_type_t;
+
+/**
+ * @short Type of bandwith modifiers
+ *
+ * Bandwidth modifiers specify the meaning of the bandwidth
+ * value. Initially "Conference Total" and "Application Specific" are
+ * defined. Both use kilobits as bandwidth unit. "Conference Total"
+ * specifies that the bandwidth value is a proposed upper limit to the
+ * session bandwidth. "Application Specific" specifies thath the
+ * bandwidth value is the application concept of maximum bandwidth.
+ **/
+typedef enum
+{
+ FSDP_BW_MOD_TYPE_UNDEFINED, /**< Not provided */
+ FSDP_BW_MOD_TYPE_UNKNOWN, /**< Unknown bandwidth
+ modifier (FreeSDP
+ ignores it) */
+ FSDP_BW_MOD_TYPE_CONFERENCE_TOTAL, /**< "CT - Conference Total" */
+ FSDP_BW_MOD_TYPE_APPLICATION_SPECIFIC, /**< "AS - Application specific" */
+ FSDP_BW_MOD_TYPE_RTCP_SENDERS, /**< "RS - RTCP bandwidth for
+ senders */
+ FSDP_BW_MOD_TYPE_RTCP_RECEIVERS, /**< "RR - RTCP bandwidth for
+ receivers */
+} fsdp_bw_modifier_type_t;
+
+/**
+ * @short encryption method
+ *
+ * The encryption method specifies the way to get the encryption key.
+ **/
+typedef enum
+{
+ FSDP_ENCRYPTION_METHOD_UNDEFINED, /**< Not provided */
+ FSDP_ENCRYPTION_METHOD_CLEAR, /**< The key field is the
+ untransformed key */
+ FSDP_ENCRYPTION_METHOD_BASE64, /**< The key is base64
+ encoded */
+ FSDP_ENCRYPTION_METHOD_URI, /**< The key value provided is
+ a URI pointing to the actual
+ key */
+ FSDP_ENCRYPTION_METHOD_PROMPT /**< The key is not provided
+ but should be got prompting
+ the user */
+} fsdp_encryption_method_t;
+
+/**
+ * @short Advised reception/transmission mode
+ *
+ * Depending on wheter sendrecv, recvonly, sendonly or inactive
+ * attribute is given, the tools used to participate in the session
+ * should be started in the corresponding transmission
+ * mode. FSDP_SENDRECV_SENDRECV is the default for sessions which are
+ * not of the conference type broadcast or H332.
+ **/
+typedef enum
+{
+ FSDP_SENDRECV_UNDEFINED, /**< Not specified */
+ FSDP_SENDRECV_SENDRECV, /**< Send and receive */
+ FSDP_SENDRECV_RECVONLY, /**< Receive only */
+ FSDP_SENDRECV_SENDONLY, /**< Send only */
+ FSDP_SENDRECV_INACTIVE /**< Do not send nor receive */
+} fsdp_sendrecv_mode_t;
+
+/**
+ * @short Values for `orient' media attribute.
+ *
+ * Normally used with whiteboard media, this attribute specifies the
+ * orientation of the whiteboard.
+ **/
+typedef enum
+{
+ FSDP_ORIENT_UNDEFINED, /**< Not specified */
+ FSDP_ORIENT_PORTRAIT, /**< Portrait */
+ FSDP_ORIENT_LANDSCAPE, /**< Landscape */
+ FSDP_ORIENT_SEASCAPE /**< Upside down landscape */
+} fsdp_orient_t;
+
+/**
+ * @short Type of the conference
+ *
+ * The following types are initially defined: broadcast, meeting,
+ * moderated, test and H332.
+ **/
+typedef enum
+{
+ FSDP_SESSION_TYPE_UNDEFINED, /**< Not specified */
+ FSDP_SESSION_TYPE_BROADCAST, /**< Broadcast session */
+ FSDP_SESSION_TYPE_MEETING, /**< Meeting session */
+ FSDP_SESSION_TYPE_MODERATED, /**< Moderated session */
+ FSDP_SESSION_TYPE_TEST, /**< Test (do not display) */
+ FSDP_SESSION_TYPE_H332 /**< H332 session */
+} fsdp_session_type_t;
+
+/**
+ * @short Media type
+ *
+ * The following types are defined initially: audio, video,
+ * application, data and control.
+ **/
+typedef enum
+{
+ FSDP_MEDIA_UNDEFINED, /**< Not specified */
+ FSDP_MEDIA_VIDEO, /**< Video */
+ FSDP_MEDIA_AUDIO, /**< Audio */
+ FSDP_MEDIA_APPLICATION, /**< Application, such as whiteboard */
+ FSDP_MEDIA_DATA, /**< bulk data */
+ FSDP_MEDIA_CONTROL /**< Control channel */
+} fsdp_media_t;
+
+/**
+ * @short Transport protocol
+ *
+ * The transport protocol used depends on the address type. Initially,
+ * RTP over UDP Audio/Video Profile, and UDP are defined.
+ *
+ **/
+typedef enum
+{
+ FSDP_TP_UNDEFINED, /**< Not specified */
+ FSDP_TP_RTP_AVP, /**< RTP Audio/Video Profile */
+ FSDP_TP_UDP, /**< UDP */
+ FSDP_TP_TCP, /**< TCP */
+ FSDP_TP_UDPTL, /**< ITU-T T.38*/
+ FSDP_TP_VAT, /**< old vat protocol (historic)*/
+ FSDP_TP_OLD_RTP, /**< old rtp protocols (historic)*/
+ FSDP_TP_H320 /**< TODO: add to the parser */
+} fsdp_transport_protocol_t;
+
+/**
+ * Session-level attributes whose value is specified as a character
+ * string in FreeSDP. These values are usually given to
+ * fsdp_get_strn_att() in order to get the corresponding value.
+ *
+ **/
+typedef enum
+{
+ FSDP_SESSION_STR_ATT_CATEGORY,
+ FSDP_SESSION_STR_ATT_KEYWORDS,
+ FSDP_SESSION_STR_ATT_TOOL,
+ FSDP_SESSION_STR_ATT_CHARSET,
+} fsdp_session_str_att_t;
+
+/**
+ * @short FreeSDP SDP description media object.
+ *
+ * Object for media specific information in SDP descriptions. Each SDP
+ * description may include any number of media section. A
+ * fsdp_media_description_t object encapsulates the information in a
+ * media section, such as video, audio or whiteboard.
+ **/
+typedef struct fsdp_media_description_t_s fsdp_media_description_t;
+
+/**
+ * @short FreeSDP SDP session description object.
+ *
+ * Contains all the information extracted from a textual SDP
+ * description, including all the media announcements.
+ **/
+typedef struct fsdp_description_t_s fsdp_description_t;
+
+/**
+ * Allocates memory and initializes values for a new
+ * fsdp_description_t object. If you call this routine, do not forget
+ * about <code>fsdp_description_delete()</code>
+ *
+ * @return new fsdp_description_t object
+ **/
+fsdp_description_t *fsdp_description_new (void);
+
+/**
+ * Destroys a fsdp_description_t object.
+ *
+ * @param dsc pointer to the fsdp_description_t object to delete.
+ **/
+void fsdp_description_delete (fsdp_description_t * dsc);
+
+/**
+ * Calling this function over a description is equivalent to calling
+ * fsdp_description_delete and then fsdp_description_delete. This
+ * function is however more suitable and efficient for description
+ * processing loops.
+ *
+ * @param dsc pointer to the fsdp_description_t object to
+ * renew/recycle.
+ **/
+void fsdp_description_recycle (fsdp_description_t * dsc);
+
+/**
+ * * Returns a string correspondent to the error number.
+ * *
+ * * @param err_no error number.
+ * **/
+const char *fsdp_strerror (fsdp_error_t err_no);
+
+ /*@}*//* closes addtogroup common */
+
+END_C_DECLS
+#endif /* FSDP_COMMON_H */