00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef RTSP_HEADER_H
00020 #define RTSP_HEADER_H
00021
00022
00023
00024
00025
00026
00027 #include "rtsp.h"
00028 #include "apt_header_field.h"
00029
00030 APT_BEGIN_EXTERN_C
00031
00032
00033 typedef enum{
00034 RTSP_TRANSPORT_RTP,
00035
00036 RTSP_TRANSPORT_COUNT,
00037 RTSP_TRANSPORT_NONE = RTSP_TRANSPORT_COUNT
00038 } rtsp_transport_e;
00039
00040
00041 typedef enum{
00042 RTSP_PROFILE_AVP,
00043 RTSP_PROFILE_SAVP,
00044
00045 RTSP_PROFILE_COUNT,
00046 RTSP_PROFILE_NONE = RTSP_PROFILE_COUNT
00047 } rtsp_profile_e;
00048
00049
00050 typedef enum{
00051 RTSP_LOWER_TRANSPORT_UDP,
00052 RTSP_LOWER_TRANSPORT_TCP,
00053
00054 RTSP_LOWER_TRANSPORT_COUNT,
00055 RTSP_LOWER_TRANSPORT_NONE = RTSP_LOWER_TRANSPORT_COUNT
00056 } rtsp_lower_transport_e;
00057
00058
00059 typedef enum{
00060 RTSP_TRANSPORT_ATTRIB_CLIENT_PORT,
00061 RTSP_TRANSPORT_ATTRIB_SERVER_PORT,
00062 RTSP_TRANSPORT_ATTRIB_SOURCE,
00063 RTSP_TRANSPORT_ATTRIB_DESTINATION,
00064 RTSP_TRANSPORT_ATTRIB_UNICAST,
00065 RTSP_TRANSPORT_ATTRIB_MULTICAST,
00066 RTSP_TRANSPORT_ATTRIB_MODE,
00067
00068 RTSP_TRANSPORT_ATTRIB_COUNT,
00069 RTSP_TRANSPORT_ATTRIB_NONE = RTSP_TRANSPORT_ATTRIB_COUNT
00070 } rtsp_transport_attrib_e;
00071
00072
00073 typedef enum{
00074 RTSP_DELIVERY_UNICAST,
00075 RTSP_DELIVERY_MULTICAST,
00076
00077 RTSP_DELIVERY_COUNT,
00078 RTSP_DELIVERY_NONE = RTSP_DELIVERY_COUNT
00079 } rtsp_delivery_e;
00080
00081
00082 typedef enum{
00083 RTSP_HEADER_FIELD_CSEQ,
00084 RTSP_HEADER_FIELD_TRANSPORT,
00085 RTSP_HEADER_FIELD_SESSION_ID,
00086 RTSP_HEADER_FIELD_RTP_INFO,
00087 RTSP_HEADER_FIELD_CONTENT_TYPE,
00088 RTSP_HEADER_FIELD_CONTENT_LENGTH,
00089
00090 RTSP_HEADER_FIELD_COUNT,
00091 RTSP_HEADER_FIELD_UNKNOWN = RTSP_HEADER_FIELD_COUNT
00092 } rtsp_header_field_id;
00093
00094
00095 typedef enum {
00096 RTSP_CONTENT_TYPE_SDP,
00097 RTSP_CONTENT_TYPE_MRCP,
00098
00099 RTSP_CONTENT_TYPE_COUNT,
00100 RTSP_CONTENT_TYPE_NONE = RTSP_CONTENT_TYPE_COUNT
00101 } rtsp_content_type_e;
00102
00103
00104
00105
00106 typedef struct rtsp_port_range_t rtsp_port_range_t;
00107
00108 typedef struct rtsp_transport_t rtsp_transport_t;
00109
00110 typedef struct rtsp_header_t rtsp_header_t;
00111
00112
00113 struct rtsp_port_range_t {
00114
00115 apr_port_t min;
00116
00117 apr_port_t max;
00118 };
00119
00120
00121 struct rtsp_transport_t {
00122
00123 rtsp_transport_e protocol;
00124
00125 rtsp_profile_e profile;
00126
00127 rtsp_lower_transport_e lower_protocol;
00128
00129 rtsp_delivery_e delivery;
00130
00131 rtsp_port_range_t client_port_range;
00132
00133 rtsp_port_range_t server_port_range;
00134
00135 apt_str_t source;
00136
00137 apt_str_t destination;
00138
00139 apt_str_t mode;
00140 };
00141
00142
00143 struct rtsp_header_t {
00144
00145 apr_size_t cseq;
00146
00147 rtsp_transport_t transport;
00148
00149 apt_str_t session_id;
00150
00151 apt_str_t rtp_info;
00152
00153
00154 rtsp_content_type_e content_type;
00155
00156 apr_size_t content_length;
00157
00158
00159 apt_header_section_t header_section;
00160 };
00161
00162
00163
00164 static APR_INLINE void rtsp_port_range_init(rtsp_port_range_t *port_range)
00165 {
00166 port_range->min = 0;
00167 port_range->max = 0;
00168 }
00169
00170
00171 static APR_INLINE apt_bool_t rtsp_port_range_is_valid(const rtsp_port_range_t *port_range)
00172 {
00173 return (port_range->min == 0 && port_range->max == 0) == FALSE;
00174 }
00175
00176
00177 static APR_INLINE void rtsp_transport_init(rtsp_transport_t *transport)
00178 {
00179 transport->protocol = RTSP_TRANSPORT_RTP;
00180 transport->profile = RTSP_PROFILE_NONE;
00181 transport->lower_protocol = RTSP_LOWER_TRANSPORT_NONE;
00182 rtsp_port_range_init(&transport->client_port_range);
00183 rtsp_port_range_init(&transport->server_port_range);
00184 apt_string_reset(&transport->source);
00185 apt_string_reset(&transport->destination);
00186 apt_string_reset(&transport->mode);
00187 }
00188
00189
00190 static APR_INLINE void rtsp_header_init(rtsp_header_t *header, apr_pool_t *pool)
00191 {
00192 header->cseq = 0;
00193 rtsp_transport_init(&header->transport);
00194 apt_string_reset(&header->session_id);
00195 apt_string_reset(&header->rtp_info);
00196 header->content_type = RTSP_CONTENT_TYPE_NONE;
00197 header->content_length = 0;
00198
00199 apt_header_section_init(&header->header_section);
00200 apt_header_section_array_alloc(&header->header_section,RTSP_HEADER_FIELD_COUNT,pool);
00201 }
00202
00203
00204
00205 RTSP_DECLARE(apt_bool_t) rtsp_header_field_add(rtsp_header_t *header, apt_header_field_t *header_field, apr_pool_t *pool);
00206
00207
00208 RTSP_DECLARE(apt_bool_t) rtsp_header_fields_parse(rtsp_header_t *header, apr_pool_t *pool);
00209
00210
00211 RTSP_DECLARE(apt_bool_t) rtsp_header_property_add(rtsp_header_t *header, rtsp_header_field_id id, apr_pool_t *pool);
00212
00213
00214 static APR_INLINE apt_bool_t rtsp_header_property_remove(rtsp_header_t *header, rtsp_header_field_id id)
00215 {
00216 apt_header_field_t *header_field = apt_header_section_field_get(&header->header_section,id);
00217 if(header_field) {
00218 return apt_header_section_field_remove(&header->header_section,header_field);
00219 }
00220 return FALSE;
00221 }
00222
00223
00224 static APR_INLINE apt_bool_t rtsp_header_property_check(const rtsp_header_t *header, rtsp_header_field_id id)
00225 {
00226 return apt_header_section_field_check(&header->header_section,id);
00227 }
00228
00229
00230 APT_END_EXTERN_C
00231
00232 #endif