正在显示
4 个修改的文件
包含
50 行增加
和
12 行删除
@@ -106,29 +106,25 @@ int srs_api_response_json_code(ISrsHttpResponseWriter* w, int code) | @@ -106,29 +106,25 @@ int srs_api_response_json_code(ISrsHttpResponseWriter* w, int code) | ||
106 | 106 | ||
107 | int srs_api_response(ISrsHttpResponseWriter* w, ISrsHttpMessage* r, std::string json) | 107 | int srs_api_response(ISrsHttpResponseWriter* w, ISrsHttpMessage* r, std::string json) |
108 | { | 108 | { |
109 | - string callback = r->query_get("callback"); | ||
110 | - bool jsonp = !callback.empty(); | ||
111 | - | ||
112 | // no jsonp, directly response. | 109 | // no jsonp, directly response. |
113 | - if (!jsonp) { | 110 | + if (!r->is_jsonp()) { |
114 | return srs_api_response_json(w, json); | 111 | return srs_api_response_json(w, json); |
115 | } | 112 | } |
116 | 113 | ||
117 | // jsonp, get function name from query("callback") | 114 | // jsonp, get function name from query("callback") |
115 | + string callback = r->query_get("callback"); | ||
118 | return srs_api_response_jsonp(w, callback, json); | 116 | return srs_api_response_jsonp(w, callback, json); |
119 | } | 117 | } |
120 | 118 | ||
121 | int srs_api_response_code(ISrsHttpResponseWriter* w, ISrsHttpMessage* r, int code) | 119 | int srs_api_response_code(ISrsHttpResponseWriter* w, ISrsHttpMessage* r, int code) |
122 | { | 120 | { |
123 | - string callback = r->query_get("callback"); | ||
124 | - bool jsonp = !callback.empty(); | ||
125 | - | ||
126 | // no jsonp, directly response. | 121 | // no jsonp, directly response. |
127 | - if (!jsonp) { | 122 | + if (!r->is_jsonp()) { |
128 | return srs_api_response_json_code(w, code); | 123 | return srs_api_response_json_code(w, code); |
129 | } | 124 | } |
130 | 125 | ||
131 | // jsonp, get function name from query("callback") | 126 | // jsonp, get function name from query("callback") |
127 | + string callback = r->query_get("callback"); | ||
132 | return srs_api_response_jsonp_code(w, callback, code); | 128 | return srs_api_response_jsonp_code(w, callback, code); |
133 | } | 129 | } |
134 | 130 |
@@ -494,6 +494,7 @@ SrsHttpMessage::SrsHttpMessage(SrsStSocket* io, SrsConnection* c) : ISrsHttpMess | @@ -494,6 +494,7 @@ SrsHttpMessage::SrsHttpMessage(SrsStSocket* io, SrsConnection* c) : ISrsHttpMess | ||
494 | _uri = new SrsHttpUri(); | 494 | _uri = new SrsHttpUri(); |
495 | _body = new SrsHttpResponseReader(this, io); | 495 | _body = new SrsHttpResponseReader(this, io); |
496 | _http_ts_send_buffer = new char[SRS_HTTP_TS_SEND_BUFFER_SIZE]; | 496 | _http_ts_send_buffer = new char[SRS_HTTP_TS_SEND_BUFFER_SIZE]; |
497 | + jsonp = false; | ||
497 | } | 498 | } |
498 | 499 | ||
499 | SrsHttpMessage::~SrsHttpMessage() | 500 | SrsHttpMessage::~SrsHttpMessage() |
@@ -570,6 +571,14 @@ int SrsHttpMessage::update(string url, http_parser* header, SrsFastBuffer* body, | @@ -570,6 +571,14 @@ int SrsHttpMessage::update(string url, http_parser* header, SrsFastBuffer* body, | ||
570 | _ext = ""; | 571 | _ext = ""; |
571 | } | 572 | } |
572 | 573 | ||
574 | + // parse jsonp request message. | ||
575 | + if (!query_get("callback").empty()) { | ||
576 | + jsonp = true; | ||
577 | + } | ||
578 | + if (jsonp) { | ||
579 | + jsonp_method = query_get("method"); | ||
580 | + } | ||
581 | + | ||
573 | return ret; | 582 | return ret; |
574 | } | 583 | } |
575 | 584 | ||
@@ -580,6 +589,18 @@ SrsConnection* SrsHttpMessage::connection() | @@ -580,6 +589,18 @@ SrsConnection* SrsHttpMessage::connection() | ||
580 | 589 | ||
581 | u_int8_t SrsHttpMessage::method() | 590 | u_int8_t SrsHttpMessage::method() |
582 | { | 591 | { |
592 | + if (jsonp && !jsonp_method.empty()) { | ||
593 | + if (jsonp_method == "GET") { | ||
594 | + return SRS_CONSTS_HTTP_GET; | ||
595 | + } else if (jsonp_method == "PUT") { | ||
596 | + return SRS_CONSTS_HTTP_PUT; | ||
597 | + } else if (jsonp_method == "POST") { | ||
598 | + return SRS_CONSTS_HTTP_POST; | ||
599 | + } else if (jsonp_method == "DELETE") { | ||
600 | + return SRS_CONSTS_HTTP_DELETE; | ||
601 | + } | ||
602 | + } | ||
603 | + | ||
583 | return (u_int8_t)_header.method; | 604 | return (u_int8_t)_header.method; |
584 | } | 605 | } |
585 | 606 | ||
@@ -590,6 +611,10 @@ u_int16_t SrsHttpMessage::status_code() | @@ -590,6 +611,10 @@ u_int16_t SrsHttpMessage::status_code() | ||
590 | 611 | ||
591 | string SrsHttpMessage::method_str() | 612 | string SrsHttpMessage::method_str() |
592 | { | 613 | { |
614 | + if (jsonp && !jsonp_method.empty()) { | ||
615 | + return jsonp_method; | ||
616 | + } | ||
617 | + | ||
593 | if (is_http_get()) { | 618 | if (is_http_get()) { |
594 | return "GET"; | 619 | return "GET"; |
595 | } | 620 | } |
@@ -611,22 +636,22 @@ string SrsHttpMessage::method_str() | @@ -611,22 +636,22 @@ string SrsHttpMessage::method_str() | ||
611 | 636 | ||
612 | bool SrsHttpMessage::is_http_get() | 637 | bool SrsHttpMessage::is_http_get() |
613 | { | 638 | { |
614 | - return _header.method == SRS_CONSTS_HTTP_GET; | 639 | + return method() == SRS_CONSTS_HTTP_GET; |
615 | } | 640 | } |
616 | 641 | ||
617 | bool SrsHttpMessage::is_http_put() | 642 | bool SrsHttpMessage::is_http_put() |
618 | { | 643 | { |
619 | - return _header.method == SRS_CONSTS_HTTP_PUT; | 644 | + return method() == SRS_CONSTS_HTTP_PUT; |
620 | } | 645 | } |
621 | 646 | ||
622 | bool SrsHttpMessage::is_http_post() | 647 | bool SrsHttpMessage::is_http_post() |
623 | { | 648 | { |
624 | - return _header.method == SRS_CONSTS_HTTP_POST; | 649 | + return method() == SRS_CONSTS_HTTP_POST; |
625 | } | 650 | } |
626 | 651 | ||
627 | bool SrsHttpMessage::is_http_delete() | 652 | bool SrsHttpMessage::is_http_delete() |
628 | { | 653 | { |
629 | - return _header.method == SRS_CONSTS_HTTP_DELETE; | 654 | + return method() == SRS_CONSTS_HTTP_DELETE; |
630 | } | 655 | } |
631 | 656 | ||
632 | bool SrsHttpMessage::is_http_options() | 657 | bool SrsHttpMessage::is_http_options() |
@@ -803,6 +828,11 @@ SrsRequest* SrsHttpMessage::to_request(string vhost) | @@ -803,6 +828,11 @@ SrsRequest* SrsHttpMessage::to_request(string vhost) | ||
803 | return req; | 828 | return req; |
804 | } | 829 | } |
805 | 830 | ||
831 | +bool SrsHttpMessage::is_jsonp() | ||
832 | +{ | ||
833 | + return jsonp; | ||
834 | +} | ||
835 | + | ||
806 | SrsHttpParser::SrsHttpParser() | 836 | SrsHttpParser::SrsHttpParser() |
807 | { | 837 | { |
808 | buffer = new SrsFastBuffer(); | 838 | buffer = new SrsFastBuffer(); |
@@ -203,6 +203,10 @@ private: | @@ -203,6 +203,10 @@ private: | ||
203 | std::map<std::string, std::string> _query; | 203 | std::map<std::string, std::string> _query; |
204 | // the transport connection, can be NULL. | 204 | // the transport connection, can be NULL. |
205 | SrsConnection* conn; | 205 | SrsConnection* conn; |
206 | + // whether request is jsonp. | ||
207 | + bool jsonp; | ||
208 | + // the method in QueryString will override the HTTP method. | ||
209 | + std::string jsonp_method; | ||
206 | public: | 210 | public: |
207 | SrsHttpMessage(SrsStSocket* io, SrsConnection* c); | 211 | SrsHttpMessage(SrsStSocket* io, SrsConnection* c); |
208 | virtual ~SrsHttpMessage(); | 212 | virtual ~SrsHttpMessage(); |
@@ -285,6 +289,8 @@ public: | @@ -285,6 +289,8 @@ public: | ||
285 | * @remark user must free the return request. | 289 | * @remark user must free the return request. |
286 | */ | 290 | */ |
287 | virtual SrsRequest* to_request(std::string vhost); | 291 | virtual SrsRequest* to_request(std::string vhost); |
292 | +public: | ||
293 | + virtual bool is_jsonp(); | ||
288 | }; | 294 | }; |
289 | 295 | ||
290 | /** | 296 | /** |
@@ -527,6 +527,12 @@ public: | @@ -527,6 +527,12 @@ public: | ||
527 | virtual int request_header_count() = 0; | 527 | virtual int request_header_count() = 0; |
528 | virtual std::string request_header_key_at(int index) = 0; | 528 | virtual std::string request_header_key_at(int index) = 0; |
529 | virtual std::string request_header_value_at(int index) = 0; | 529 | virtual std::string request_header_value_at(int index) = 0; |
530 | +public: | ||
531 | + /** | ||
532 | + * whether the current request is JSONP, | ||
533 | + * which has a "callback=xxx" in QueryString. | ||
534 | + */ | ||
535 | + virtual bool is_jsonp() = 0; | ||
530 | }; | 536 | }; |
531 | 537 | ||
532 | #endif | 538 | #endif |
-
请 注册 或 登录 后发表评论