00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef RTSP_START_LINE_H
00020 #define RTSP_START_LINE_H
00021
00022
00023
00024
00025
00026
00027 #include "rtsp.h"
00028 #include "apt_text_stream.h"
00029
00030 APT_BEGIN_EXTERN_C
00031
00032
00033 typedef enum {
00034
00035 RTSP_VERSION_UNKNOWN = 0,
00036
00037 RTSP_VERSION_1 = 1,
00038 } rtsp_version_e;
00039
00040
00041 typedef enum {
00042 RTSP_MESSAGE_TYPE_UNKNOWN,
00043 RTSP_MESSAGE_TYPE_REQUEST,
00044 RTSP_MESSAGE_TYPE_RESPONSE
00045 } rtsp_message_type_e;
00046
00047
00048 typedef enum{
00049 RTSP_METHOD_SETUP,
00050 RTSP_METHOD_ANNOUNCE,
00051 RTSP_METHOD_TEARDOWN,
00052 RTSP_METHOD_DESCRIBE,
00053
00054 RTSP_METHOD_COUNT,
00055 RTSP_METHOD_UNKNOWN = RTSP_METHOD_COUNT
00056 } rtsp_method_id;
00057
00058
00059 typedef enum {
00060 RTSP_STATUS_CODE_UNKNOWN = 0,
00061
00062 RTSP_STATUS_CODE_OK = 200,
00063 RTSP_STATUS_CODE_CREATED = 201,
00064
00065 RTSP_STATUS_CODE_BAD_REQUEST = 400,
00066 RTSP_STATUS_CODE_UNAUTHORIZED = 401,
00067 RTSP_STATUS_CODE_NOT_FOUND = 404,
00068 RTSP_STATUS_CODE_METHOD_NOT_ALLOWED = 405,
00069 RTSP_STATUS_CODE_NOT_ACCEPTABLE = 406,
00070 RTSP_STATUS_CODE_PROXY_AUTH_REQUIRED = 407,
00071 RTSP_STATUS_CODE_REQUEST_TIMEOUT = 408,
00072 RTSP_STATUS_CODE_SESSION_NOT_FOUND = 454,
00073
00074 RTSP_STATUS_CODE_INTERNAL_SERVER_ERROR = 500,
00075 RTSP_STATUS_CODE_NOT_IMPLEMENTED = 501,
00076 } rtsp_status_code_e;
00077
00078
00079 typedef enum {
00080 RTSP_REASON_PHRASE_OK,
00081 RTSP_REASON_PHRASE_CREATED,
00082 RTSP_REASON_PHRASE_BAD_REQUEST,
00083 RTSP_REASON_PHRASE_UNAUTHORIZED,
00084 RTSP_REASON_PHRASE_NOT_FOUND,
00085 RTSP_REASON_PHRASE_METHOD_NOT_ALLOWED,
00086 RTSP_REASON_PHRASE_NOT_ACCEPTABLE,
00087 RTSP_REASON_PHRASE_PROXY_AUTH_REQUIRED,
00088 RTSP_REASON_PHRASE_REQUEST_TIMEOUT,
00089 RTSP_REASON_PHRASE_SESSION_NOT_FOUND,
00090 RTSP_REASON_PHRASE_INTERNAL_SERVER_ERROR,
00091 RTSP_REASON_PHRASE_NOT_IMPLEMENTED,
00092 RTSP_REASON_PHRASE_COUNT,
00093
00094
00095 RTSP_REASON_PHRASE_UNKNOWN = RTSP_REASON_PHRASE_COUNT
00096 } rtsp_reason_phrase_e;
00097
00098
00099
00100 typedef struct rtsp_request_line_t rtsp_request_line_t;
00101
00102 typedef struct rtsp_status_line_t rtsp_status_line_t;
00103
00104 typedef struct rtsp_start_line_t rtsp_start_line_t;
00105
00106
00107 struct rtsp_request_line_t {
00108
00109 apt_str_t method_name;
00110
00111 rtsp_method_id method_id;
00112
00113 apt_str_t url;
00114
00115 const char *resource_name;
00116
00117 rtsp_version_e version;
00118 };
00119
00120
00121 struct rtsp_status_line_t {
00122
00123 rtsp_version_e version;
00124
00125 rtsp_status_code_e status_code;
00126
00127 apt_str_t reason;
00128 };
00129
00130
00131 struct rtsp_start_line_t {
00132
00133 rtsp_message_type_e message_type;
00134
00135 union {
00136 rtsp_request_line_t request_line;
00137 rtsp_status_line_t status_line;
00138 } common;
00139 };
00140
00141
00142 static APR_INLINE void rtsp_request_line_init(rtsp_request_line_t *request_line)
00143 {
00144 apt_string_reset(&request_line->method_name);
00145 request_line->method_id = RTSP_METHOD_UNKNOWN;
00146 apt_string_reset(&request_line->url);
00147 request_line->resource_name = NULL;
00148 request_line->version = RTSP_VERSION_1;
00149 }
00150
00151 static APR_INLINE void rtsp_status_line_init(rtsp_status_line_t *status_line)
00152 {
00153 status_line->version = RTSP_VERSION_1;
00154 status_line->status_code = RTSP_STATUS_CODE_OK;
00155 apt_string_reset(&status_line->reason);
00156 }
00157
00158
00159 static APR_INLINE void rtsp_start_line_init(rtsp_start_line_t *start_line, rtsp_message_type_e message_type)
00160 {
00161 start_line->message_type = message_type;
00162 if(message_type == RTSP_MESSAGE_TYPE_REQUEST) {
00163 rtsp_request_line_init(&start_line->common.request_line);
00164 }
00165 else if(message_type == RTSP_MESSAGE_TYPE_RESPONSE) {
00166 rtsp_status_line_init(&start_line->common.status_line);
00167 }
00168 }
00169
00170
00171 RTSP_DECLARE(apt_bool_t) rtsp_start_line_parse(rtsp_start_line_t *start_line, apt_str_t *str, apr_pool_t *pool);
00172
00173
00174 RTSP_DECLARE(apt_bool_t) rtsp_start_line_generate(rtsp_start_line_t *start_line, apt_text_stream_t *text_stream);
00175
00176
00177 RTSP_DECLARE(const apt_str_t*) rtsp_reason_phrase_get(rtsp_reason_phrase_e reason);
00178
00179 APT_END_EXTERN_C
00180
00181 #endif