1
0
Fork 0
mirror of https://github.com/ossrs/srs.git synced 2025-03-09 15:49:59 +00:00

private the srs_vhost_resolve

This commit is contained in:
winlin 2015-12-07 10:15:08 +08:00
parent 17bb31cab1
commit fba1122835
3 changed files with 40 additions and 77 deletions

View file

@ -41,6 +41,46 @@ using namespace std;
#include <srs_rtmp_stack.hpp>
#include <srs_protocol_io.hpp>
/**
* resolve the vhost in query string
* @pram vhost, update the vhost if query contains the vhost.
* @param app, may contains the vhost in query string format:
* app?vhost=request_vhost
* app...vhost...request_vhost
* @param param, the query, for example, ?vhost=xxx
*/
void srs_vhost_resolve(string& vhost, string& app, string& param)
{
// get original param
size_t pos = 0;
if ((pos = app.find("?")) != std::string::npos) {
param = app.substr(pos);
}
// filter tcUrl
app = srs_string_replace(app, ",", "?");
app = srs_string_replace(app, "...", "?");
app = srs_string_replace(app, "&&", "?");
app = srs_string_replace(app, "=", "?");
if ((pos = app.find("?")) != std::string::npos) {
std::string query = app.substr(pos + 1);
app = app.substr(0, pos);
if ((pos = query.find("vhost?")) != std::string::npos) {
query = query.substr(pos + 6);
if (!query.empty()) {
vhost = query;
}
if ((pos = vhost.find("?")) != std::string::npos) {
vhost = vhost.substr(0, pos);
}
}
}
/* others */
}
void srs_discovery_tc_url(
string tcUrl,
string& schema, string& host, string& vhost,
@ -77,38 +117,6 @@ void srs_discovery_tc_url(
srs_vhost_resolve(vhost, app, param);
}
void srs_vhost_resolve(string& vhost, string& app, string& param)
{
// get original param
size_t pos = 0;
if ((pos = app.find("?")) != std::string::npos) {
param = app.substr(pos);
}
// filter tcUrl
app = srs_string_replace(app, ",", "?");
app = srs_string_replace(app, "...", "?");
app = srs_string_replace(app, "&&", "?");
app = srs_string_replace(app, "=", "?");
if ((pos = app.find("?")) != std::string::npos) {
std::string query = app.substr(pos + 1);
app = app.substr(0, pos);
if ((pos = query.find("vhost?")) != std::string::npos) {
query = query.substr(pos + 6);
if (!query.empty()) {
vhost = query;
}
if ((pos = vhost.find("?")) != std::string::npos) {
vhost = vhost.substr(0, pos);
}
}
}
/* others */
}
void srs_random_generate(char* bytes, int size)
{
static bool _random_initialized = false;

View file

@ -62,18 +62,6 @@ extern void srs_discovery_tc_url(
std::string& app, int& port, std::string& param
);
/**
* resolve the vhost in query string
* @pram vhost, update the vhost if query contains the vhost.
* @param app, may contains the vhost in query string format:
* app?vhost=request_vhost
* app...vhost...request_vhost
* @param param, the query, for example, ?vhost=xxx
*/
extern void srs_vhost_resolve(
std::string& vhost, std::string& app, std::string& param
);
/**
* generate ramdom data for handshake.
*/

View file

@ -423,39 +423,6 @@ VOID TEST(ProtocolHandshakeTest, BytesEqual)
EXPECT_FALSE(srs_bytes_equals(a1, b2, 1));
}
/**
* resolve vhost from tcUrl.
*/
VOID TEST(ProtocolUtilityTest, VhostResolve)
{
std::string vhost = "vhost";
std::string app = "app";
std::string param;
srs_vhost_resolve(vhost, app, param);
EXPECT_STREQ("vhost", vhost.c_str());
EXPECT_STREQ("app", app.c_str());
app = "app?vhost=changed";
srs_vhost_resolve(vhost, app, param);
EXPECT_STREQ("changed", vhost.c_str());
EXPECT_STREQ("app", app.c_str());
app = "app?vhost=changed1&&query=true";
srs_vhost_resolve(vhost, app, param);
EXPECT_STREQ("changed1", vhost.c_str());
EXPECT_STREQ("app", app.c_str());
app = "app?other=true&&vhost=changed2&&query=true";
srs_vhost_resolve(vhost, app, param);
EXPECT_STREQ("changed2", vhost.c_str());
EXPECT_STREQ("app", app.c_str());
app = "app...other...true...vhost...changed3...query...true";
srs_vhost_resolve(vhost, app, param);
EXPECT_STREQ("changed3", vhost.c_str());
EXPECT_STREQ("app", app.c_str());
}
/**
* discovery tcUrl to schema/vhost/host/port/app
*/