Skip to content

Commit

Permalink
parse fragment of uri
Browse files Browse the repository at this point in the history
  • Loading branch information
duiniuluantanqin committed Dec 6, 2022
1 parent 7ac1475 commit 94e3405
Show file tree
Hide file tree
Showing 4 changed files with 22 additions and 1 deletion.
8 changes: 7 additions & 1 deletion trunk/src/protocol/srs_protocol_http_stack.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -931,7 +931,7 @@ SrsHttpUri::~SrsHttpUri()

srs_error_t SrsHttpUri::initialize(string url)
{
schema = host = path = query = "";
schema = host = path = query = fragment_ = "";
url_ = url;

// Replace the default vhost to a domain like string, or parse failed.
Expand Down Expand Up @@ -979,6 +979,7 @@ srs_error_t SrsHttpUri::initialize(string url)

path = get_uri_field(parsing_url, &hp_u, UF_PATH);
query = get_uri_field(parsing_url, &hp_u, UF_QUERY);
fragment_ = get_uri_field(parsing_url, &hp_u, UF_FRAGMENT);

username_ = get_uri_field(parsing_url, &hp_u, UF_USERINFO);
size_t pos = username_.find(":");
Expand Down Expand Up @@ -1040,6 +1041,11 @@ string SrsHttpUri::get_query_by_key(std::string key)
return it->second;
}

std::string SrsHttpUri::get_fragment()
{
return fragment_;
}

std::string SrsHttpUri::username()
{
return username_;
Expand Down
2 changes: 2 additions & 0 deletions trunk/src/protocol/srs_protocol_http_stack.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -580,6 +580,7 @@ class SrsHttpUri
int port;
std::string path;
std::string query;
std::string fragment_;
std::string username_;
std::string password_;
std::map<std::string, std::string> query_values_;
Expand All @@ -599,6 +600,7 @@ class SrsHttpUri
virtual std::string get_path();
virtual std::string get_query();
virtual std::string get_query_by_key(std::string key);
virtual std::string get_fragment();
virtual std::string username();
virtual std::string password();
private:
Expand Down
1 change: 1 addition & 0 deletions trunk/src/protocol/srs_protocol_utility.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,7 @@ void srs_discovery_tc_url(string tcUrl, string& schema, string& host, string& vh
port = uri.get_port();
stream = srs_path_basename(uri.get_path());
param = uri.get_query().empty() ? "" : "?" + uri.get_query();
param += uri.get_fragment().empty() ? "" : "#" + uri.get_fragment();

// Parse app without the prefix slash.
app = srs_path_dirname(uri.get_path());
Expand Down
12 changes: 12 additions & 0 deletions trunk/src/utest/srs_utest_protocol.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3560,6 +3560,18 @@ VOID TEST(ProtocolRTMPTest, RTMPRequest)
req.update_auth(&req1);
EXPECT_TRUE(NULL != req.args);
EXPECT_TRUE(req1.args != req.args);

srs_discovery_tc_url("rtmp://std.ossrs.net/live?a=1#b=2",
req.schema, req.host, req.vhost, req.app, req.stream, req.port, param);
EXPECT_STREQ("?a=1#b=2", param.c_str());

srs_discovery_tc_url("rtmp://std.ossrs.net/live?a=1&c=3#b=2",
req.schema, req.host, req.vhost, req.app, req.stream, req.port, param);
EXPECT_STREQ("?a=1&c=3#b=2", param.c_str());

srs_discovery_tc_url("rtmp://std.ossrs.net/live?a=1&c=3#b=2#d=4",
req.schema, req.host, req.vhost, req.app, req.stream, req.port, param);
EXPECT_STREQ("?a=1&c=3#b=2#d=4", param.c_str());
}

VOID TEST(ProtocolRTMPTest, RTMPHandshakeBytes)
Expand Down

0 comments on commit 94e3405

Please sign in to comment.