For #1657, fix the jsonp bug

pull/2023/head
winlin 4 years ago
parent fc21b31714
commit d67b050935

@ -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();
}

@ -159,11 +159,6 @@ srs_error_t SrsHttpConn::cycle()
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
@ -171,6 +166,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++) {
@ -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…
Cancel
Save