mirror of
https://github.com/ossrs/srs.git
synced 2025-03-09 15:49:59 +00:00
For #1657, fix the jsonp bug
This commit is contained in:
parent
fc21b31714
commit
d67b050935
8 changed files with 60 additions and 53 deletions
|
@ -1691,7 +1691,13 @@ SrsHttpApi::~SrsHttpApi()
|
|||
|
||||
srs_error_t SrsHttpApi::on_start()
|
||||
{
|
||||
return srs_success;
|
||||
srs_error_t err = srs_success;
|
||||
|
||||
if ((err = conn->set_jsonp(true)) != srs_success) {
|
||||
return srs_error_wrap(err, "set jsonp");
|
||||
}
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
srs_error_t SrsHttpApi::on_http_message(ISrsHttpMessage* req)
|
||||
|
@ -1742,10 +1748,6 @@ srs_error_t SrsHttpApi::start()
|
|||
return srs_error_wrap(err, "set cors=%d", v);
|
||||
}
|
||||
|
||||
if ((err = conn->set_jsonp(true)) != srs_success) {
|
||||
return srs_error_wrap(err, "set jsonp");
|
||||
}
|
||||
|
||||
return conn->start();
|
||||
}
|
||||
|
||||
|
|
|
@ -160,11 +160,6 @@ srs_error_t SrsHttpConn::do_cycle()
|
|||
{
|
||||
srs_error_t err = srs_success;
|
||||
|
||||
// Notify the handler that we are starting to process the connection.
|
||||
if ((err = handler_->on_start()) != srs_success) {
|
||||
return srs_error_wrap(err, "start");
|
||||
}
|
||||
|
||||
// set the recv timeout, for some clients never disconnect the connection.
|
||||
// @see https://github.com/ossrs/srs/issues/398
|
||||
skt->set_recv_timeout(SRS_HTTP_RECV_TIMEOUT);
|
||||
|
@ -172,6 +167,16 @@ srs_error_t SrsHttpConn::do_cycle()
|
|||
SrsRequest* last_req = NULL;
|
||||
SrsAutoFree(SrsRequest, last_req);
|
||||
|
||||
// initialize parser
|
||||
if ((err = parser->initialize(HTTP_REQUEST)) != srs_success) {
|
||||
return srs_error_wrap(err, "init parser for %s", ip.c_str());
|
||||
}
|
||||
|
||||
// Notify the handler that we are starting to process the connection.
|
||||
if ((err = handler_->on_start()) != srs_success) {
|
||||
return srs_error_wrap(err, "start");
|
||||
}
|
||||
|
||||
// process http messages.
|
||||
for (int req_id = 0; (err = trd->pull()) == srs_success; req_id++) {
|
||||
// Try to receive a message from http.
|
||||
|
@ -268,14 +273,8 @@ srs_error_t SrsHttpConn::set_crossdomain_enabled(bool v)
|
|||
|
||||
srs_error_t SrsHttpConn::set_jsonp(bool v)
|
||||
{
|
||||
srs_error_t err = srs_success;
|
||||
|
||||
// initialize parser
|
||||
if ((err = parser->initialize(HTTP_REQUEST, v)) != srs_success) {
|
||||
return srs_error_wrap(err, "init parser for %s", ip.c_str());
|
||||
}
|
||||
|
||||
return err;
|
||||
parser->set_jsonp(v);
|
||||
return srs_success;
|
||||
}
|
||||
|
||||
srs_error_t SrsHttpConn::set_tcp_nodelay(bool v)
|
||||
|
|
|
@ -281,7 +281,7 @@ srs_error_t SrsHttpClient::initialize(string schema, string h, int p, srs_utime_
|
|||
srs_freep(parser);
|
||||
parser = new SrsHttpParser();
|
||||
|
||||
if ((err = parser->initialize(HTTP_RESPONSE, false)) != srs_success) {
|
||||
if ((err = parser->initialize(HTTP_RESPONSE)) != srs_success) {
|
||||
return srs_error_wrap(err, "http: init parser");
|
||||
}
|
||||
|
||||
|
|
|
@ -52,11 +52,11 @@ SrsHttpParser::~SrsHttpParser()
|
|||
srs_freep(header);
|
||||
}
|
||||
|
||||
srs_error_t SrsHttpParser::initialize(enum http_parser_type type, bool allow_jsonp)
|
||||
srs_error_t SrsHttpParser::initialize(enum http_parser_type type)
|
||||
{
|
||||
srs_error_t err = srs_success;
|
||||
|
||||
jsonp = allow_jsonp;
|
||||
jsonp = false;
|
||||
type_ = type;
|
||||
|
||||
// Initialize the parser, however it's not necessary.
|
||||
|
@ -75,6 +75,11 @@ srs_error_t SrsHttpParser::initialize(enum http_parser_type type, bool allow_jso
|
|||
return err;
|
||||
}
|
||||
|
||||
void SrsHttpParser::set_jsonp(bool allow_jsonp)
|
||||
{
|
||||
jsonp = allow_jsonp;
|
||||
}
|
||||
|
||||
srs_error_t SrsHttpParser::parse_message(ISrsReader* reader, ISrsHttpMessage** ppmsg)
|
||||
{
|
||||
srs_error_t err = srs_success;
|
||||
|
|
|
@ -67,8 +67,9 @@ public:
|
|||
public:
|
||||
// initialize the http parser with specified type,
|
||||
// one parser can only parse request or response messages.
|
||||
// @param allow_jsonp whether allow jsonp parser, which indicates the method in query string.
|
||||
virtual srs_error_t initialize(enum http_parser_type type, bool allow_jsonp = false);
|
||||
virtual srs_error_t initialize(enum http_parser_type type);
|
||||
// Whether allow jsonp parser, which indicates the method in query string.
|
||||
virtual void set_jsonp(bool allow_jsonp);
|
||||
// always parse a http message,
|
||||
// that is, the *ppmsg always NOT-NULL when return success.
|
||||
// or error and *ppmsg must be NULL.
|
||||
|
|
File diff suppressed because one or more lines are too long
|
@ -6006,7 +6006,7 @@ VOID TEST(ProtocolHTTPTest, ParseHTTPMessage)
|
|||
SrsHttpParser hp;
|
||||
|
||||
bio.append("GET /gslb/v1/versions HTTP/1.1\r\nContent-Length: 5\r\n\r\nHello");
|
||||
HELPER_ASSERT_SUCCESS(hp.initialize(HTTP_REQUEST, false));
|
||||
HELPER_ASSERT_SUCCESS(hp.initialize(HTTP_REQUEST));
|
||||
|
||||
ISrsHttpMessage* req = NULL;
|
||||
HELPER_ASSERT_SUCCESS(hp.parse_message(&bio, &req));
|
||||
|
@ -6030,7 +6030,7 @@ VOID TEST(ProtocolHTTPTest, ParseHTTPMessage)
|
|||
SrsHttpParser hp;
|
||||
|
||||
bio.append("GET");
|
||||
HELPER_ASSERT_SUCCESS(hp.initialize(HTTP_REQUEST, false));
|
||||
HELPER_ASSERT_SUCCESS(hp.initialize(HTTP_REQUEST));
|
||||
|
||||
// Should fail if not completed message.
|
||||
ISrsHttpMessage* req = NULL;
|
||||
|
@ -6043,7 +6043,7 @@ VOID TEST(ProtocolHTTPTest, ParseHTTPMessage)
|
|||
SrsHttpParser hp;
|
||||
|
||||
bio.append("GET /gslb/v1/versions HTTP/1.1\r\nContent-Length: 5\r\n\r\nHello");
|
||||
HELPER_ASSERT_SUCCESS(hp.initialize(HTTP_REQUEST, false));
|
||||
HELPER_ASSERT_SUCCESS(hp.initialize(HTTP_REQUEST));
|
||||
|
||||
ISrsHttpMessage* req = NULL;
|
||||
SrsAutoFree(ISrsHttpMessage, req);
|
||||
|
@ -6061,7 +6061,7 @@ VOID TEST(ProtocolHTTPTest, ParseHTTPMessage)
|
|||
SrsHttpParser hp;
|
||||
|
||||
bio.append("GET /gslb/v1/versions HTTP/1.1\r\nContent-Length: 0\r\n\r\n");
|
||||
HELPER_ASSERT_SUCCESS(hp.initialize(HTTP_REQUEST, false));
|
||||
HELPER_ASSERT_SUCCESS(hp.initialize(HTTP_REQUEST));
|
||||
|
||||
ISrsHttpMessage* req = NULL;
|
||||
SrsAutoFree(ISrsHttpMessage, req);
|
||||
|
@ -6073,7 +6073,7 @@ VOID TEST(ProtocolHTTPTest, ParseHTTPMessage)
|
|||
SrsHttpParser hp;
|
||||
|
||||
bio.append("GET /gslb/v1/versions HTTP/1.1\r\n\r\n");
|
||||
HELPER_ASSERT_SUCCESS(hp.initialize(HTTP_REQUEST, false));
|
||||
HELPER_ASSERT_SUCCESS(hp.initialize(HTTP_REQUEST));
|
||||
|
||||
ISrsHttpMessage* req = NULL;
|
||||
SrsAutoFree(ISrsHttpMessage, req);
|
||||
|
@ -6085,7 +6085,7 @@ VOID TEST(ProtocolHTTPTest, ParseHTTPMessage)
|
|||
SrsHttpParser hp;
|
||||
|
||||
bio.append("GET /gslb/v1/versions HTTP/1.1\r\n\r\n");
|
||||
HELPER_ASSERT_SUCCESS(hp.initialize(HTTP_REQUEST, false));
|
||||
HELPER_ASSERT_SUCCESS(hp.initialize(HTTP_REQUEST));
|
||||
|
||||
ISrsHttpMessage* req = NULL;
|
||||
SrsAutoFree(ISrsHttpMessage, req);
|
||||
|
|
|
@ -633,7 +633,7 @@ VOID TEST(HTTPServerTest, ContentLength)
|
|||
MockBufferIO io;
|
||||
io.append("HTTP/1.1 200 OK\r\nContent-Length: 11\r\n\r\n");
|
||||
|
||||
SrsHttpParser hp; HELPER_ASSERT_SUCCESS(hp.initialize(HTTP_RESPONSE, false));
|
||||
SrsHttpParser hp; HELPER_ASSERT_SUCCESS(hp.initialize(HTTP_RESPONSE));
|
||||
ISrsHttpMessage* msg = NULL; HELPER_ASSERT_SUCCESS(hp.parse_message(&io, &msg));
|
||||
|
||||
char buf[32]; ssize_t nread = 0;
|
||||
|
@ -661,7 +661,7 @@ VOID TEST(HTTPServerTest, HTTPChunked)
|
|||
MockBufferIO io;
|
||||
io.append("HTTP/1.1 200 OK\r\nTransfer-Encoding: chunked\r\n\r\n");
|
||||
|
||||
SrsHttpParser hp; HELPER_ASSERT_SUCCESS(hp.initialize(HTTP_RESPONSE, false));
|
||||
SrsHttpParser hp; HELPER_ASSERT_SUCCESS(hp.initialize(HTTP_RESPONSE));
|
||||
ISrsHttpMessage* msg = NULL; HELPER_ASSERT_SUCCESS(hp.parse_message(&io, &msg));
|
||||
|
||||
char buf[32]; ssize_t nread = 0;
|
||||
|
@ -690,7 +690,7 @@ VOID TEST(HTTPServerTest, InfiniteChunked)
|
|||
MockBufferIO io;
|
||||
io.append("HTTP/1.1 200 OK\r\n\r\n");
|
||||
|
||||
SrsHttpParser hp; HELPER_ASSERT_SUCCESS(hp.initialize(HTTP_RESPONSE, false));
|
||||
SrsHttpParser hp; HELPER_ASSERT_SUCCESS(hp.initialize(HTTP_RESPONSE));
|
||||
ISrsHttpMessage* msg = NULL; HELPER_ASSERT_SUCCESS(hp.parse_message(&io, &msg));
|
||||
SrsAutoFree(ISrsHttpMessage, msg);
|
||||
|
||||
|
@ -717,7 +717,7 @@ VOID TEST(HTTPServerTest, InfiniteChunked)
|
|||
MockBufferIO io;
|
||||
io.append("HTTP/1.1 200 OK\r\n\r\n");
|
||||
|
||||
SrsHttpParser hp; HELPER_ASSERT_SUCCESS(hp.initialize(HTTP_RESPONSE, false));
|
||||
SrsHttpParser hp; HELPER_ASSERT_SUCCESS(hp.initialize(HTTP_RESPONSE));
|
||||
ISrsHttpMessage* msg = NULL; HELPER_ASSERT_SUCCESS(hp.parse_message(&io, &msg));
|
||||
|
||||
char buf[32]; ssize_t nread = 0;
|
||||
|
@ -745,7 +745,7 @@ VOID TEST(HTTPServerTest, OPTIONSRead)
|
|||
MockBufferIO io;
|
||||
io.append("OPTIONS /rtc/v1/play HTTP/1.1\r\n\r\n");
|
||||
|
||||
SrsHttpParser hp; HELPER_ASSERT_SUCCESS(hp.initialize(HTTP_REQUEST, false));
|
||||
SrsHttpParser hp; HELPER_ASSERT_SUCCESS(hp.initialize(HTTP_REQUEST));
|
||||
ISrsHttpMessage* req = NULL; HELPER_ASSERT_SUCCESS(hp.parse_message(&io, &req));
|
||||
SrsAutoFree(ISrsHttpMessage, req);
|
||||
|
||||
|
@ -758,7 +758,7 @@ VOID TEST(HTTPServerTest, OPTIONSRead)
|
|||
MockBufferIO io;
|
||||
io.append("HTTP/1.1 200 OK\r\n\r\n");
|
||||
|
||||
SrsHttpParser hp; HELPER_ASSERT_SUCCESS(hp.initialize(HTTP_RESPONSE, false));
|
||||
SrsHttpParser hp; HELPER_ASSERT_SUCCESS(hp.initialize(HTTP_RESPONSE));
|
||||
ISrsHttpMessage* req = NULL; HELPER_ASSERT_SUCCESS(hp.parse_message(&io, &req));
|
||||
SrsAutoFree(ISrsHttpMessage, req);
|
||||
|
||||
|
@ -771,7 +771,7 @@ VOID TEST(HTTPServerTest, OPTIONSRead)
|
|||
MockBufferIO io;
|
||||
io.append("OPTIONS /rtc/v1/play HTTP/1.1\r\nContent-Length: 5\r\n\r\nHello");
|
||||
|
||||
SrsHttpParser hp; HELPER_ASSERT_SUCCESS(hp.initialize(HTTP_REQUEST, false));
|
||||
SrsHttpParser hp; HELPER_ASSERT_SUCCESS(hp.initialize(HTTP_REQUEST));
|
||||
ISrsHttpMessage* req = NULL; HELPER_ASSERT_SUCCESS(hp.parse_message(&io, &req));
|
||||
SrsAutoFree(ISrsHttpMessage, req);
|
||||
|
||||
|
@ -793,7 +793,7 @@ VOID TEST(HTTPServerTest, OPTIONSRead)
|
|||
MockBufferIO io;
|
||||
io.append("OPTIONS /rtc/v1/play HTTP/1.1\r\n\r\n");
|
||||
|
||||
SrsHttpParser hp; HELPER_ASSERT_SUCCESS(hp.initialize(HTTP_REQUEST, false));
|
||||
SrsHttpParser hp; HELPER_ASSERT_SUCCESS(hp.initialize(HTTP_REQUEST));
|
||||
ISrsHttpMessage* req = NULL; HELPER_ASSERT_SUCCESS(hp.parse_message(&io, &req));
|
||||
SrsAutoFree(ISrsHttpMessage, req);
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue