1 /*
2  * RTSP definitions
3  * copyright (c) 2002 Fabrice Bellard
4  * copyright (c) 2014 Samsung Electronics. All rights reserved.
5  *     @Author: Reynaldo H. Verdejo Pinochet <r.verdejo@sisa.samsung.com>
6  *
7  * This file is part of FFmpeg.
8  *
9  * FFmpeg is free software; you can redistribute it and/or
10  * modify it under the terms of the GNU Lesser General Public
11  * License as published by the Free Software Foundation; either
12  * version 2.1 of the License, or (at your option) any later version.
13  *
14  * FFmpeg is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
17  * Lesser General Public License for more details.
18  *
19  * You should have received a copy of the GNU Lesser General Public
20  * License along with FFmpeg; if not, write to the Free Software
21  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
22  */
23 
24 #ifndef AVFORMAT_RTSPCODES_H
25 #define AVFORMAT_RTSPCODES_H
26 
27 #include "libavutil/common.h"
28 #include "libavformat/http.h"
29 
30 /** RTSP handling */
31 enum RTSPStatusCode {
32 RTSP_STATUS_CONTINUE             =100,
33 RTSP_STATUS_OK                   =200,
34 RTSP_STATUS_CREATED              =201,
35 RTSP_STATUS_LOW_ON_STORAGE_SPACE =250,
36 RTSP_STATUS_MULTIPLE_CHOICES     =300,
37 RTSP_STATUS_MOVED_PERMANENTLY    =301,
38 RTSP_STATUS_MOVED_TEMPORARILY    =302,
39 RTSP_STATUS_SEE_OTHER            =303,
40 RTSP_STATUS_NOT_MODIFIED         =304,
41 RTSP_STATUS_USE_PROXY            =305,
42 RTSP_STATUS_BAD_REQUEST          =400,
43 RTSP_STATUS_UNAUTHORIZED         =401,
44 RTSP_STATUS_PAYMENT_REQUIRED     =402,
45 RTSP_STATUS_FORBIDDEN            =403,
46 RTSP_STATUS_NOT_FOUND            =404,
47 RTSP_STATUS_METHOD               =405,
48 RTSP_STATUS_NOT_ACCEPTABLE       =406,
49 RTSP_STATUS_PROXY_AUTH_REQUIRED  =407,
50 RTSP_STATUS_REQ_TIME_OUT         =408,
51 RTSP_STATUS_GONE                 =410,
52 RTSP_STATUS_LENGTH_REQUIRED      =411,
53 RTSP_STATUS_PRECONDITION_FAILED  =412,
54 RTSP_STATUS_REQ_ENTITY_2LARGE    =413,
55 RTSP_STATUS_REQ_URI_2LARGE       =414,
56 RTSP_STATUS_UNSUPPORTED_MTYPE    =415,
57 RTSP_STATUS_PARAM_NOT_UNDERSTOOD =451,
58 RTSP_STATUS_CONFERENCE_NOT_FOUND =452,
59 RTSP_STATUS_BANDWIDTH            =453,
60 RTSP_STATUS_SESSION              =454,
61 RTSP_STATUS_STATE                =455,
62 RTSP_STATUS_INVALID_HEADER_FIELD =456,
63 RTSP_STATUS_INVALID_RANGE        =457,
64 RTSP_STATUS_RONLY_PARAMETER      =458,
65 RTSP_STATUS_AGGREGATE            =459,
66 RTSP_STATUS_ONLY_AGGREGATE       =460,
67 RTSP_STATUS_TRANSPORT            =461,
68 RTSP_STATUS_UNREACHABLE          =462,
69 RTSP_STATUS_INTERNAL             =500,
70 RTSP_STATUS_NOT_IMPLEMENTED      =501,
71 RTSP_STATUS_BAD_GATEWAY          =502,
72 RTSP_STATUS_SERVICE              =503,
73 RTSP_STATUS_GATEWAY_TIME_OUT     =504,
74 RTSP_STATUS_VERSION              =505,
75 RTSP_STATUS_UNSUPPORTED_OPTION   =551,
76 };
77 
78 static const av_unused char * const rtsp_status_strings[] = {
79 [RTSP_STATUS_CONTINUE]               ="Continue",
80 [RTSP_STATUS_OK]                     ="OK",
81 [RTSP_STATUS_CREATED]                ="Created",
82 [RTSP_STATUS_LOW_ON_STORAGE_SPACE]   ="Low on Storage Space",
83 [RTSP_STATUS_MULTIPLE_CHOICES]       ="Multiple Choices",
84 [RTSP_STATUS_MOVED_PERMANENTLY]      ="Moved Permanently",
85 [RTSP_STATUS_MOVED_TEMPORARILY]      ="Moved Temporarily",
86 [RTSP_STATUS_SEE_OTHER]              ="See Other",
87 [RTSP_STATUS_NOT_MODIFIED]           ="Not Modified",
88 [RTSP_STATUS_USE_PROXY]              ="Use Proxy",
89 [RTSP_STATUS_BAD_REQUEST]            ="Bad Request",
90 [RTSP_STATUS_UNAUTHORIZED]           ="Unauthorized",
91 [RTSP_STATUS_PAYMENT_REQUIRED]       ="Payment Required",
92 [RTSP_STATUS_FORBIDDEN]              ="Forbidden",
93 [RTSP_STATUS_NOT_FOUND]              ="Not Found",
94 [RTSP_STATUS_METHOD]                 ="Method Not Allowed",
95 [RTSP_STATUS_NOT_ACCEPTABLE]         ="Not Acceptable",
96 [RTSP_STATUS_PROXY_AUTH_REQUIRED]    ="Proxy Authentication Required",
97 [RTSP_STATUS_REQ_TIME_OUT]           ="Request Time-out",
98 [RTSP_STATUS_GONE]                   ="Gone",
99 [RTSP_STATUS_LENGTH_REQUIRED]        ="Length Required",
100 [RTSP_STATUS_PRECONDITION_FAILED]    ="Precondition Failed",
101 [RTSP_STATUS_REQ_ENTITY_2LARGE]      ="Request Entity Too Large",
102 [RTSP_STATUS_REQ_URI_2LARGE]         ="Request URI Too Large",
103 [RTSP_STATUS_UNSUPPORTED_MTYPE]      ="Unsupported Media Type",
104 [RTSP_STATUS_PARAM_NOT_UNDERSTOOD]   ="Parameter Not Understood",
105 [RTSP_STATUS_CONFERENCE_NOT_FOUND]   ="Conference Not Found",
106 [RTSP_STATUS_BANDWIDTH]              ="Not Enough Bandwidth",
107 [RTSP_STATUS_SESSION]                ="Session Not Found",
108 [RTSP_STATUS_STATE]                  ="Method Not Valid in This State",
109 [RTSP_STATUS_INVALID_HEADER_FIELD]   ="Header Field Not Valid for Resource",
110 [RTSP_STATUS_INVALID_RANGE]          ="Invalid Range",
111 [RTSP_STATUS_RONLY_PARAMETER]        ="Parameter Is Read-Only",
112 [RTSP_STATUS_AGGREGATE]              ="Aggregate Operation no Allowed",
113 [RTSP_STATUS_ONLY_AGGREGATE]         ="Only Aggregate Operation Allowed",
114 [RTSP_STATUS_TRANSPORT]              ="Unsupported Transport",
115 [RTSP_STATUS_UNREACHABLE]            ="Destination Unreachable",
116 [RTSP_STATUS_INTERNAL]               ="Internal Server Error",
117 [RTSP_STATUS_NOT_IMPLEMENTED]        ="Not Implemented",
118 [RTSP_STATUS_BAD_GATEWAY]            ="Bad Gateway",
119 [RTSP_STATUS_SERVICE]                ="Service Unavailable",
120 [RTSP_STATUS_GATEWAY_TIME_OUT]       ="Gateway Time-out",
121 [RTSP_STATUS_VERSION]                ="RTSP Version not Supported",
122 [RTSP_STATUS_UNSUPPORTED_OPTION]     ="Option not supported",
123 };
124 
125 #define RTSP_STATUS_CODE2STRING(x) (\
126 x >= 100 && x < FF_ARRAY_ELEMS(rtsp_status_strings) && rtsp_status_strings[x] \
127 )? rtsp_status_strings[x] : NULL
128 
129 enum RTSPMethod {
130     DESCRIBE,
131     ANNOUNCE,
132     OPTIONS,
133     SETUP,
134     PLAY,
135     PAUSE,
136     TEARDOWN,
137     GET_PARAMETER,
138     SET_PARAMETER,
139     REDIRECT,
140     RECORD,
141     UNKNOWN = -1,
142 };
143 
ff_rtsp_averror(enum RTSPStatusCode status_code,int default_averror)144 static inline int ff_rtsp_averror(enum RTSPStatusCode status_code, int default_averror)
145 {
146     return ff_http_averror(status_code, default_averror);
147 }
148 
149 #endif /* AVFORMAT_RTSPCODES_H */
150