Skip to content

Commit

Permalink
For #913, Service support complex error.
Browse files Browse the repository at this point in the history
  • Loading branch information
winlinvip committed Jan 1, 2018
1 parent 15aea68 commit aebbbad
Show file tree
Hide file tree
Showing 7 changed files with 151 additions and 208 deletions.
24 changes: 6 additions & 18 deletions trunk/src/protocol/srs_http_stack.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3028,22 +3028,19 @@ SrsHttpUri::~SrsHttpUri()
{
}

int SrsHttpUri::initialize(string _url)
srs_error_t SrsHttpUri::initialize(string _url)
{
int ret = ERROR_SUCCESS;
srs_error_t err = srs_success;

schema = host = path = query = "";

url = _url;
const char* purl = url.c_str();

http_parser_url hp_u;
if((ret = http_parser_parse_url(purl, url.length(), 0, &hp_u)) != 0){
int code = ret;
ret = ERROR_HTTP_PARSE_URI;

srs_error("parse url %s failed, code=%d, ret=%d", purl, code, ret);
return ret;
int r0;
if((r0 = http_parser_parse_url(purl, url.length(), 0, &hp_u)) != 0){
return srs_error_new(ERROR_HTTP_PARSE_URI, "parse url %s failed, code=%d", purl, r0);
}

std::string field = get_uri_field(url, &hp_u, UF_SCHEMA);
Expand All @@ -3062,12 +3059,9 @@ int SrsHttpUri::initialize(string _url)
}

path = get_uri_field(url, &hp_u, UF_PATH);
srs_info("parse url %s success", purl);

query = get_uri_field(url, &hp_u, UF_QUERY);
srs_info("parse query %s success", query.c_str());

return ret;
return err;
}

string SrsHttpUri::get_url()
Expand Down Expand Up @@ -3106,12 +3100,6 @@ string SrsHttpUri::get_uri_field(string uri, http_parser_url* hp_u, http_parser_
return "";
}

srs_verbose("uri field matched, off=%d, len=%d, value=%.*s",
hp_u->field_data[field].off,
hp_u->field_data[field].len,
hp_u->field_data[field].len,
uri.c_str() + hp_u->field_data[field].off);

int offset = hp_u->field_data[field].off;
int len = hp_u->field_data[field].len;

Expand Down
2 changes: 1 addition & 1 deletion trunk/src/protocol/srs_http_stack.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -900,7 +900,7 @@ class SrsHttpUri
/**
* initialize the http uri.
*/
virtual int initialize(std::string _url);
virtual srs_error_t initialize(std::string _url);
public:
virtual std::string get_url();
virtual std::string get_schema();
Expand Down
26 changes: 10 additions & 16 deletions trunk/src/service/srs_service_http_client.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -55,14 +55,13 @@ SrsHttpClient::~SrsHttpClient()
// TODO: FIXME: use ms for timeout.
srs_error_t SrsHttpClient::initialize(string h, int p, int64_t tm)
{
int ret = ERROR_SUCCESS;
srs_error_t err = srs_success;

srs_freep(parser);
parser = new SrsHttpParser();

if ((ret = parser->initialize(HTTP_RESPONSE, false)) != ERROR_SUCCESS) {
return srs_error_new(ret, "http: init parser");
if ((err = parser->initialize(HTTP_RESPONSE, false)) != srs_success) {
return srs_error_wrap(err, "http: init parser");
}

// Always disconnect the transport.
Expand Down Expand Up @@ -97,7 +96,6 @@ srs_error_t SrsHttpClient::post(string path, string req, ISrsHttpMessage** ppmsg
{
*ppmsg = NULL;

int ret = ERROR_SUCCESS;
srs_error_t err = srs_success;

// always set the content length.
Expand All @@ -119,15 +117,15 @@ srs_error_t SrsHttpClient::post(string path, string req, ISrsHttpMessage** ppmsg
ss << SRS_HTTP_CRLF << req;

std::string data = ss.str();
if ((ret = transport->write((void*)data.c_str(), data.length(), NULL)) != ERROR_SUCCESS) {
if ((err = transport->write((void*)data.c_str(), data.length(), NULL)) != srs_success) {
// Disconnect the transport when channel error, reconnect for next operation.
disconnect();
return srs_error_new(ret, "http: write");
return srs_error_wrap(err, "http: write");
}

ISrsHttpMessage* msg = NULL;
if ((ret = parser->parse_message(transport, NULL, &msg)) != ERROR_SUCCESS) {
return srs_error_new(ret, "http: parse response");
if ((err = parser->parse_message(transport, NULL, &msg)) != srs_success) {
return srs_error_wrap(err, "http: parse response");
}
srs_assert(msg);

Expand All @@ -136,7 +134,6 @@ srs_error_t SrsHttpClient::post(string path, string req, ISrsHttpMessage** ppmsg
} else {
srs_freep(msg);
}
srs_info("parse http post response success.");

return err;
}
Expand All @@ -145,7 +142,6 @@ srs_error_t SrsHttpClient::get(string path, string req, ISrsHttpMessage** ppmsg)
{
*ppmsg = NULL;

int ret = ERROR_SUCCESS;
srs_error_t err = srs_success;

// always set the content length.
Expand All @@ -167,15 +163,15 @@ srs_error_t SrsHttpClient::get(string path, string req, ISrsHttpMessage** ppmsg)
ss << SRS_HTTP_CRLF << req;

std::string data = ss.str();
if ((ret = transport->write((void*)data.c_str(), data.length(), NULL)) != ERROR_SUCCESS) {
if ((err = transport->write((void*)data.c_str(), data.length(), NULL)) != srs_success) {
// Disconnect the transport when channel error, reconnect for next operation.
disconnect();
return srs_error_new(ret, "http: write");
return srs_error_wrap(err, "http: write");
}

ISrsHttpMessage* msg = NULL;
if ((ret = parser->parse_message(transport, NULL, &msg)) != ERROR_SUCCESS) {
return srs_error_new(ret, "http: parse response");
if ((err = parser->parse_message(transport, NULL, &msg)) != srs_success) {
return srs_error_wrap(err, "http: parse response");
}
srs_assert(msg);

Expand All @@ -184,7 +180,6 @@ srs_error_t SrsHttpClient::get(string path, string req, ISrsHttpMessage** ppmsg)
} else {
srs_freep(msg);
}
srs_info("parse http get response success.");

return err;
}
Expand Down Expand Up @@ -228,7 +223,6 @@ srs_error_t SrsHttpClient::connect()
disconnect();
return srs_error_wrap(err, "http: tcp connect %s:%d to=%d", host.c_str(), port, (int)timeout);
}
srs_info("connect to server success. server=%s, port=%d", host.c_str(), port);

// Set the recv/send timeout in ms.
transport->set_recv_timeout(timeout);
Expand Down
Loading

0 comments on commit aebbbad

Please sign in to comment.