正在显示
10 个修改的文件
包含
244 行增加
和
9 行删除
@@ -285,7 +285,7 @@ fi | @@ -285,7 +285,7 @@ fi | ||
285 | ##################################################################################### | 285 | ##################################################################################### |
286 | function write_nginx_html5() | 286 | function write_nginx_html5() |
287 | { | 287 | { |
288 | - cat<<END >> ${html_file} | 288 | + cat<<END > ${html_file} |
289 | <video width="640" height="360" | 289 | <video width="640" height="360" |
290 | autoplay controls autobuffer | 290 | autoplay controls autobuffer |
291 | src="${hls_stream}" | 291 | src="${hls_stream}" |
@@ -398,7 +398,7 @@ if [ $__SRS_BUILD_NGINX = YES ]; then | @@ -398,7 +398,7 @@ if [ $__SRS_BUILD_NGINX = YES ]; then | ||
398 | ln -sf `pwd`/research/players/nginx_index.html ${SRS_OBJS}/nginx/html/index.html | 398 | ln -sf `pwd`/research/players/nginx_index.html ${SRS_OBJS}/nginx/html/index.html |
399 | else | 399 | else |
400 | rm -f ${SRS_OBJS}/nginx/html/index.html && | 400 | rm -f ${SRS_OBJS}/nginx/html/index.html && |
401 | - cat<<END >> ${SRS_OBJS}/nginx/html/index.html | 401 | + cat<<END > ${SRS_OBJS}/nginx/html/index.html |
402 | <!DOCTYPE html> | 402 | <!DOCTYPE html> |
403 | <html> | 403 | <html> |
404 | <head> | 404 | <head> |
@@ -32,10 +32,100 @@ using namespace std; | @@ -32,10 +32,100 @@ using namespace std; | ||
32 | #include <srs_kernel_error.hpp> | 32 | #include <srs_kernel_error.hpp> |
33 | #include <srs_kernel_log.hpp> | 33 | #include <srs_kernel_log.hpp> |
34 | #include <srs_app_socket.hpp> | 34 | #include <srs_app_socket.hpp> |
35 | +#include <srs_app_http_api.hpp> | ||
36 | +#include <srs_app_http_conn.hpp> | ||
35 | 37 | ||
36 | #define SRS_DEFAULT_HTTP_PORT 80 | 38 | #define SRS_DEFAULT_HTTP_PORT 80 |
37 | 39 | ||
38 | -#define SRS_HTTP_HEADER_BUFFER 1024 | 40 | +#define SRS_HTTP_HEADER_BUFFER 1024 |
41 | + | ||
42 | +SrsHttpHandler::SrsHttpHandler() | ||
43 | +{ | ||
44 | +} | ||
45 | + | ||
46 | +SrsHttpHandler::~SrsHttpHandler() | ||
47 | +{ | ||
48 | + std::vector<SrsHttpHandler*>::iterator it; | ||
49 | + for (it = handlers.begin(); it != handlers.end(); ++it) { | ||
50 | + SrsHttpHandler* handler = *it; | ||
51 | + srs_freep(handler); | ||
52 | + } | ||
53 | + handlers.clear(); | ||
54 | +} | ||
55 | + | ||
56 | +int SrsHttpHandler::initialize() | ||
57 | +{ | ||
58 | + int ret = ERROR_SUCCESS; | ||
59 | + return ret; | ||
60 | +} | ||
61 | + | ||
62 | +bool SrsHttpHandler::can_handle(const char* /*path*/, int /*length*/) | ||
63 | +{ | ||
64 | + return false; | ||
65 | +} | ||
66 | + | ||
67 | +int SrsHttpHandler::process_request(SrsSocket* /*skt*/, SrsHttpMessage* /*req*/, const char* /*path*/, int /*length*/) | ||
68 | +{ | ||
69 | + int ret = ERROR_SUCCESS; | ||
70 | + return ret; | ||
71 | +} | ||
72 | + | ||
73 | +int SrsHttpHandler::best_match(const char* path, int length, SrsHttpHandler** phandler, const char** pstart, int* plength) | ||
74 | +{ | ||
75 | + int ret = ERROR_SUCCESS; | ||
76 | + | ||
77 | + for (;;) { | ||
78 | + // ensure cur is not NULL. | ||
79 | + // ensure p not NULL and has bytes to parse. | ||
80 | + if (!path || length <= 0) { | ||
81 | + break; | ||
82 | + } | ||
83 | + | ||
84 | + const char* p = NULL; | ||
85 | + for (p = path + 1; p - path < length && *p != __PATH_SEP; p++) { | ||
86 | + } | ||
87 | + | ||
88 | + // whether the handler can handler the node. | ||
89 | + int node_size = p - path; | ||
90 | + if (!can_handle(path, node_size)) { | ||
91 | + break; | ||
92 | + } | ||
93 | + | ||
94 | + *phandler = this; | ||
95 | + *pstart = path; | ||
96 | + *plength = node_size; | ||
97 | + | ||
98 | + std::vector<SrsHttpHandler*>::iterator it; | ||
99 | + for (it = handlers.begin(); it != handlers.end(); ++it) { | ||
100 | + SrsHttpHandler* handler = *it; | ||
101 | + // matched, donot search. | ||
102 | + if (handler->best_match(p, length - node_size, phandler, pstart, plength) == ERROR_SUCCESS) { | ||
103 | + break; | ||
104 | + } | ||
105 | + } | ||
106 | + | ||
107 | + // whatever, donot loop. | ||
108 | + break; | ||
109 | + } | ||
110 | + | ||
111 | + if (*phandler == NULL) { | ||
112 | + ret = ERROR_HTTP_HANDLER_MATCH_URL; | ||
113 | + return ret; | ||
114 | + } | ||
115 | + | ||
116 | + return ret; | ||
117 | +} | ||
118 | + | ||
119 | +SrsHttpHandler* SrsHttpHandler::create_http_api() | ||
120 | +{ | ||
121 | + return new SrsApiRoot(); | ||
122 | +} | ||
123 | + | ||
124 | +SrsHttpHandler* SrsHttpHandler::create_http_stream() | ||
125 | +{ | ||
126 | + // TODO: FIXME: use http stream handler instead. | ||
127 | + return new SrsHttpHandler(); | ||
128 | +} | ||
39 | 129 | ||
40 | SrsHttpMessage::SrsHttpMessage() | 130 | SrsHttpMessage::SrsHttpMessage() |
41 | { | 131 | { |
@@ -32,6 +32,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | @@ -32,6 +32,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
32 | #ifdef SRS_HTTP_PARSER | 32 | #ifdef SRS_HTTP_PARSER |
33 | 33 | ||
34 | #include <string> | 34 | #include <string> |
35 | +#include <vector> | ||
35 | 36 | ||
36 | #include <http_parser.h> | 37 | #include <http_parser.h> |
37 | 38 | ||
@@ -40,6 +41,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | @@ -40,6 +41,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
40 | class SrsBuffer; | 41 | class SrsBuffer; |
41 | class SrsRequest; | 42 | class SrsRequest; |
42 | class SrsSocket; | 43 | class SrsSocket; |
44 | +class SrsHttpMessage; | ||
43 | 45 | ||
44 | // http specification | 46 | // http specification |
45 | // CR = <US-ASCII CR, carriage return (13)> | 47 | // CR = <US-ASCII CR, carriage return (13)> |
@@ -57,6 +59,10 @@ class SrsSocket; | @@ -57,6 +59,10 @@ class SrsSocket; | ||
57 | #define __CRLF "\r\n" // 0x0D0A | 59 | #define __CRLF "\r\n" // 0x0D0A |
58 | #define __CRLFCRLF "\r\n\r\n" // 0x0D0A0D0A | 60 | #define __CRLFCRLF "\r\n\r\n" // 0x0D0A0D0A |
59 | 61 | ||
62 | +// linux path seprator | ||
63 | +#define __PATH_SEP '/' | ||
64 | + | ||
65 | +// state of message | ||
60 | enum SrsHttpParseState { | 66 | enum SrsHttpParseState { |
61 | SrsHttpParseStateInit = 0, | 67 | SrsHttpParseStateInit = 0, |
62 | SrsHttpParseStateStart, | 68 | SrsHttpParseStateStart, |
@@ -64,6 +70,48 @@ enum SrsHttpParseState { | @@ -64,6 +70,48 @@ enum SrsHttpParseState { | ||
64 | }; | 70 | }; |
65 | 71 | ||
66 | /** | 72 | /** |
73 | +* resource handler for HTTP RESTful api. | ||
74 | +*/ | ||
75 | +class SrsHttpHandler | ||
76 | +{ | ||
77 | +protected: | ||
78 | + /** | ||
79 | + * we use handler chain to process request. | ||
80 | + */ | ||
81 | + std::vector<SrsHttpHandler*> handlers; | ||
82 | +public: | ||
83 | + SrsHttpHandler(); | ||
84 | + virtual ~SrsHttpHandler(); | ||
85 | +public: | ||
86 | + /** | ||
87 | + * initialize the handler. | ||
88 | + */ | ||
89 | + virtual int initialize(); | ||
90 | + /** | ||
91 | + * whether current handler can handle the specified path. | ||
92 | + */ | ||
93 | + virtual bool can_handle(const char* path, int length); | ||
94 | + /** | ||
95 | + * use the handler to process the request. | ||
96 | + */ | ||
97 | + virtual int process_request(SrsSocket* skt, SrsHttpMessage* req, const char* path, int length); | ||
98 | +public: | ||
99 | + /** | ||
100 | + * find the best matched handler | ||
101 | + */ | ||
102 | + virtual int best_match(const char* path, int length, SrsHttpHandler** phandler, const char** pstart, int* plength); | ||
103 | +public: | ||
104 | + /** | ||
105 | + * create http api resource handler. | ||
106 | + */ | ||
107 | + static SrsHttpHandler* create_http_api(); | ||
108 | + /** | ||
109 | + * create http stream resource handler. | ||
110 | + */ | ||
111 | + static SrsHttpHandler* create_http_stream(); | ||
112 | +}; | ||
113 | + | ||
114 | +/** | ||
67 | * the http message, request or response. | 115 | * the http message, request or response. |
68 | */ | 116 | */ |
69 | class SrsHttpMessage | 117 | class SrsHttpMessage |
@@ -34,10 +34,30 @@ using namespace std; | @@ -34,10 +34,30 @@ using namespace std; | ||
34 | #include <srs_app_socket.hpp> | 34 | #include <srs_app_socket.hpp> |
35 | #include <srs_core_autofree.hpp> | 35 | #include <srs_core_autofree.hpp> |
36 | 36 | ||
37 | -SrsHttpApi::SrsHttpApi(SrsServer* srs_server, st_netfd_t client_stfd) | 37 | +SrsApiRoot::SrsApiRoot() |
38 | +{ | ||
39 | +} | ||
40 | + | ||
41 | +SrsApiRoot::~SrsApiRoot() | ||
42 | +{ | ||
43 | +} | ||
44 | + | ||
45 | +bool SrsApiRoot::can_handle(const char* /*path*/, int /*length*/) | ||
46 | +{ | ||
47 | + return true; | ||
48 | +} | ||
49 | + | ||
50 | +int SrsApiRoot::process_request(SrsSocket* /*skt*/, SrsHttpMessage* /*req*/, const char* /*path*/, int /*length*/) | ||
51 | +{ | ||
52 | + int ret = ERROR_SUCCESS; | ||
53 | + return ret; | ||
54 | +} | ||
55 | + | ||
56 | +SrsHttpApi::SrsHttpApi(SrsServer* srs_server, st_netfd_t client_stfd, SrsHttpHandler* _handler) | ||
38 | : SrsConnection(srs_server, client_stfd) | 57 | : SrsConnection(srs_server, client_stfd) |
39 | { | 58 | { |
40 | parser = new SrsHttpParser(); | 59 | parser = new SrsHttpParser(); |
60 | + handler = _handler; | ||
41 | } | 61 | } |
42 | 62 | ||
43 | SrsHttpApi::~SrsHttpApi() | 63 | SrsHttpApi::~SrsHttpApi() |
@@ -93,6 +113,28 @@ int SrsHttpApi::process_request(SrsSocket* skt, SrsHttpMessage* req) | @@ -93,6 +113,28 @@ int SrsHttpApi::process_request(SrsSocket* skt, SrsHttpMessage* req) | ||
93 | { | 113 | { |
94 | int ret = ERROR_SUCCESS; | 114 | int ret = ERROR_SUCCESS; |
95 | 115 | ||
116 | + // TODO: maybe need to parse the url. | ||
117 | + std::string uri = req->url(); | ||
118 | + | ||
119 | + int length = 0; | ||
120 | + const char* start = NULL; | ||
121 | + SrsHttpHandler* p = NULL; | ||
122 | + if ((ret = handler->best_match(uri.data(), uri.length(), &p, &start, &length)) != ERROR_SUCCESS) { | ||
123 | + srs_warn("failed to find the best match handler for url. ret=%d", ret); | ||
124 | + return ret; | ||
125 | + } | ||
126 | + | ||
127 | + // if success, p and pstart should be valid. | ||
128 | + srs_assert(p); | ||
129 | + srs_assert(start); | ||
130 | + srs_assert(length <= (int)uri.length()); | ||
131 | + | ||
132 | + // use handler to process request. | ||
133 | + if ((ret = p->process_request(skt, req, start, length)) != ERROR_SUCCESS) { | ||
134 | + srs_warn("handler failed to process http request. ret=%d", ret); | ||
135 | + return ret; | ||
136 | + } | ||
137 | + | ||
96 | if (req->method() == HTTP_OPTIONS) { | 138 | if (req->method() == HTTP_OPTIONS) { |
97 | char data[] = "HTTP/1.1 200 OK" __CRLF | 139 | char data[] = "HTTP/1.1 200 OK" __CRLF |
98 | "Content-Length: 0"__CRLF | 140 | "Content-Length: 0"__CRLF |
@@ -35,16 +35,30 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | @@ -35,16 +35,30 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
35 | class SrsSocket; | 35 | class SrsSocket; |
36 | class SrsHttpMessage; | 36 | class SrsHttpMessage; |
37 | class SrsHttpParser; | 37 | class SrsHttpParser; |
38 | +class SrsHttpHandler; | ||
38 | 39 | ||
39 | #include <srs_app_st.hpp> | 40 | #include <srs_app_st.hpp> |
40 | #include <srs_app_conn.hpp> | 41 | #include <srs_app_conn.hpp> |
42 | +#include <srs_app_http.hpp> | ||
43 | + | ||
44 | +// for http root. | ||
45 | +class SrsApiRoot : public SrsHttpHandler | ||
46 | +{ | ||
47 | +public: | ||
48 | + SrsApiRoot(); | ||
49 | + virtual ~SrsApiRoot(); | ||
50 | +public: | ||
51 | + virtual bool can_handle(const char* path, int length); | ||
52 | + virtual int process_request(SrsSocket* skt, SrsHttpMessage* req, const char* path, int length); | ||
53 | +}; | ||
41 | 54 | ||
42 | class SrsHttpApi : public SrsConnection | 55 | class SrsHttpApi : public SrsConnection |
43 | { | 56 | { |
44 | private: | 57 | private: |
45 | SrsHttpParser* parser; | 58 | SrsHttpParser* parser; |
59 | + SrsHttpHandler* handler; | ||
46 | public: | 60 | public: |
47 | - SrsHttpApi(SrsServer* srs_server, st_netfd_t client_stfd); | 61 | + SrsHttpApi(SrsServer* srs_server, st_netfd_t client_stfd, SrsHttpHandler* _handler); |
48 | virtual ~SrsHttpApi(); | 62 | virtual ~SrsHttpApi(); |
49 | protected: | 63 | protected: |
50 | virtual int do_cycle(); | 64 | virtual int do_cycle(); |
@@ -37,10 +37,11 @@ using namespace std; | @@ -37,10 +37,11 @@ using namespace std; | ||
37 | 37 | ||
38 | #define SRS_HTTP_HEADER_BUFFER 1024 | 38 | #define SRS_HTTP_HEADER_BUFFER 1024 |
39 | 39 | ||
40 | -SrsHttpConn::SrsHttpConn(SrsServer* srs_server, st_netfd_t client_stfd) | 40 | +SrsHttpConn::SrsHttpConn(SrsServer* srs_server, st_netfd_t client_stfd, SrsHttpHandler* _handler) |
41 | : SrsConnection(srs_server, client_stfd) | 41 | : SrsConnection(srs_server, client_stfd) |
42 | { | 42 | { |
43 | parser = new SrsHttpParser(); | 43 | parser = new SrsHttpParser(); |
44 | + handler = _handler; | ||
44 | } | 45 | } |
45 | 46 | ||
46 | SrsHttpConn::~SrsHttpConn() | 47 | SrsHttpConn::~SrsHttpConn() |
@@ -40,13 +40,15 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | @@ -40,13 +40,15 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
40 | class SrsSocket; | 40 | class SrsSocket; |
41 | class SrsHttpParser; | 41 | class SrsHttpParser; |
42 | class SrsHttpMessage; | 42 | class SrsHttpMessage; |
43 | +class SrsHttpHandler; | ||
43 | 44 | ||
44 | class SrsHttpConn : public SrsConnection | 45 | class SrsHttpConn : public SrsConnection |
45 | { | 46 | { |
46 | private: | 47 | private: |
47 | SrsHttpParser* parser; | 48 | SrsHttpParser* parser; |
49 | + SrsHttpHandler* handler; | ||
48 | public: | 50 | public: |
49 | - SrsHttpConn(SrsServer* srs_server, st_netfd_t client_stfd); | 51 | + SrsHttpConn(SrsServer* srs_server, st_netfd_t client_stfd, SrsHttpHandler* _handler); |
50 | virtual ~SrsHttpConn(); | 52 | virtual ~SrsHttpConn(); |
51 | protected: | 53 | protected: |
52 | virtual int do_cycle(); | 54 | virtual int do_cycle(); |
@@ -40,6 +40,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | @@ -40,6 +40,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
40 | #include <srs_kernel_utility.hpp> | 40 | #include <srs_kernel_utility.hpp> |
41 | #include <srs_app_http_api.hpp> | 41 | #include <srs_app_http_api.hpp> |
42 | #include <srs_app_http_conn.hpp> | 42 | #include <srs_app_http_conn.hpp> |
43 | +#include <srs_app_http.hpp> | ||
43 | 44 | ||
44 | #define SERVER_LISTEN_BACKLOG 512 | 45 | #define SERVER_LISTEN_BACKLOG 512 |
45 | #define SRS_TIME_RESOLUTION_MS 500 | 46 | #define SRS_TIME_RESOLUTION_MS 500 |
@@ -160,6 +161,13 @@ SrsServer::SrsServer() | @@ -160,6 +161,13 @@ SrsServer::SrsServer() | ||
160 | 161 | ||
161 | srs_assert(_srs_config); | 162 | srs_assert(_srs_config); |
162 | _srs_config->subscribe(this); | 163 | _srs_config->subscribe(this); |
164 | + | ||
165 | +#ifdef SRS_HTTP_API | ||
166 | + http_api_handler = SrsHttpHandler::create_http_api(); | ||
167 | +#endif | ||
168 | +#ifdef SRS_HTTP_SERVER | ||
169 | + http_stream_handler = SrsHttpHandler::create_http_stream(); | ||
170 | +#endif | ||
163 | } | 171 | } |
164 | 172 | ||
165 | SrsServer::~SrsServer() | 173 | SrsServer::~SrsServer() |
@@ -176,11 +184,32 @@ SrsServer::~SrsServer() | @@ -176,11 +184,32 @@ SrsServer::~SrsServer() | ||
176 | } | 184 | } |
177 | 185 | ||
178 | close_listeners(); | 186 | close_listeners(); |
187 | + | ||
188 | +#ifdef SRS_HTTP_API | ||
189 | + srs_freep(http_api_handler); | ||
190 | +#endif | ||
191 | + | ||
192 | +#ifdef SRS_HTTP_SERVER | ||
193 | + srs_freep(http_stream_handler); | ||
194 | +#endif | ||
179 | } | 195 | } |
180 | 196 | ||
181 | int SrsServer::initialize() | 197 | int SrsServer::initialize() |
182 | { | 198 | { |
183 | int ret = ERROR_SUCCESS; | 199 | int ret = ERROR_SUCCESS; |
200 | + | ||
201 | +#ifdef SRS_HTTP_API | ||
202 | + if ((ret = http_api_handler->initialize()) != ERROR_SUCCESS) { | ||
203 | + return ret; | ||
204 | + } | ||
205 | +#endif | ||
206 | + | ||
207 | +#ifdef SRS_HTTP_SERVER | ||
208 | + if ((ret = http_stream_handler->initialize()) != ERROR_SUCCESS) { | ||
209 | + return ret; | ||
210 | + } | ||
211 | +#endif | ||
212 | + | ||
184 | return ret; | 213 | return ret; |
185 | } | 214 | } |
186 | 215 | ||
@@ -443,7 +472,7 @@ int SrsServer::accept_client(SrsListenerType type, st_netfd_t client_stfd) | @@ -443,7 +472,7 @@ int SrsServer::accept_client(SrsListenerType type, st_netfd_t client_stfd) | ||
443 | conn = new SrsRtmpConn(this, client_stfd); | 472 | conn = new SrsRtmpConn(this, client_stfd); |
444 | } else if (type == SrsListenerHttpApi) { | 473 | } else if (type == SrsListenerHttpApi) { |
445 | #ifdef SRS_HTTP_API | 474 | #ifdef SRS_HTTP_API |
446 | - conn = new SrsHttpApi(this, client_stfd); | 475 | + conn = new SrsHttpApi(this, client_stfd, http_api_handler); |
447 | #else | 476 | #else |
448 | srs_warn("close http client for server not support http-api"); | 477 | srs_warn("close http client for server not support http-api"); |
449 | srs_close_stfd(client_stfd); | 478 | srs_close_stfd(client_stfd); |
@@ -451,7 +480,7 @@ int SrsServer::accept_client(SrsListenerType type, st_netfd_t client_stfd) | @@ -451,7 +480,7 @@ int SrsServer::accept_client(SrsListenerType type, st_netfd_t client_stfd) | ||
451 | #endif | 480 | #endif |
452 | } else if (type == SrsListenerHttpStream) { | 481 | } else if (type == SrsListenerHttpStream) { |
453 | #ifdef SRS_HTTP_SERVER | 482 | #ifdef SRS_HTTP_SERVER |
454 | - conn = new SrsHttpConn(this, client_stfd); | 483 | + conn = new SrsHttpConn(this, client_stfd, http_stream_handler); |
455 | #else | 484 | #else |
456 | srs_warn("close http client for server not support http-server"); | 485 | srs_warn("close http client for server not support http-server"); |
457 | srs_close_stfd(client_stfd); | 486 | srs_close_stfd(client_stfd); |
@@ -38,6 +38,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | @@ -38,6 +38,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
38 | 38 | ||
39 | class SrsServer; | 39 | class SrsServer; |
40 | class SrsConnection; | 40 | class SrsConnection; |
41 | +class SrsHttpHandler; | ||
41 | 42 | ||
42 | // listener type for server to identify the connection, | 43 | // listener type for server to identify the connection, |
43 | // that is, use different type to process the connection. | 44 | // that is, use different type to process the connection. |
@@ -76,6 +77,13 @@ class SrsServer : public ISrsReloadHandler | @@ -76,6 +77,13 @@ class SrsServer : public ISrsReloadHandler | ||
76 | { | 77 | { |
77 | friend class SrsListener; | 78 | friend class SrsListener; |
78 | private: | 79 | private: |
80 | +#ifdef SRS_HTTP_API | ||
81 | + SrsHttpHandler* http_api_handler; | ||
82 | +#endif | ||
83 | +#ifdef SRS_HTTP_SERVER | ||
84 | + SrsHttpHandler* http_stream_handler; | ||
85 | +#endif | ||
86 | +private: | ||
79 | std::vector<SrsConnection*> conns; | 87 | std::vector<SrsConnection*> conns; |
80 | std::vector<SrsListener*> listeners; | 88 | std::vector<SrsListener*> listeners; |
81 | bool signal_reload; | 89 | bool signal_reload; |
@@ -157,6 +157,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | @@ -157,6 +157,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
157 | #define ERROR_HTTP_PARSE_URI 800 | 157 | #define ERROR_HTTP_PARSE_URI 800 |
158 | #define ERROR_HTTP_DATA_INVLIAD 801 | 158 | #define ERROR_HTTP_DATA_INVLIAD 801 |
159 | #define ERROR_HTTP_PARSE_HEADER 802 | 159 | #define ERROR_HTTP_PARSE_HEADER 802 |
160 | +#define ERROR_HTTP_HANDLER_MATCH_URL 803 | ||
160 | 161 | ||
161 | // system control message, | 162 | // system control message, |
162 | // not an error, but special control logic. | 163 | // not an error, but special control logic. |
-
请 注册 或 登录 后发表评论