HTTP: Rename HTTP hijack to dynamic match for better clarity. v7.0.71 (#4462)
This PR refactors the HTTP routing system by renaming "hijack" terminology to "dynamic match" for improved code clarity and better semantic meaning. Interface and Class Renaming * ISrsHttpMatchHijacker → ISrsHttpDynamicMatcher * hijack() method → dynamic_match() method * hijackers member variables → dynamic_matchers_ Method Renaming * SrsHttpServeMux::hijack() → SrsHttpServeMux::add_dynamic_matcher() * SrsHttpServeMux::unhijack() → SrsHttpServeMux::remove_dynamic_matcher() The new "dynamic match" terminology better reflects that this is a legitimate routing mechanism, not a security bypass or interception.
This commit is contained in:
parent
728828e1dd
commit
0d6d36d1fb
|
|
@ -7,6 +7,7 @@ The changelog for SRS.
|
|||
<a name="v7-changes"></a>
|
||||
|
||||
## SRS 7.0 Changelog
|
||||
* v7.0, 2025-09-01, Merge [#4462](https://github.com/ossrs/srs/pull/4462): HTTP: Rename HTTP hijack to dynamic match for better clarity. v7.0.71 (#4462)
|
||||
* v7.0, 2025-08-31, Merge [#4461](https://github.com/ossrs/srs/pull/4461): AI: Extract shared components and improve SRS server architecture. v7.0.70 (#4461)
|
||||
* v7.0, 2025-08-31, Merge [#4460](https://github.com/ossrs/srs/pull/4460): AI: Always enable SRT protocol. v7.0.69 (#4460)
|
||||
* v7.0, 2025-08-31, Merge [#4459](https://github.com/ossrs/srs/pull/4459): AI: Merge SRT and RTC servers into unified SrsServer. v7.0.68 (#4459)
|
||||
|
|
|
|||
|
|
@ -1020,13 +1020,13 @@ SrsHttpStreamServer::SrsHttpStreamServer(SrsServer *svr)
|
|||
server = svr;
|
||||
async_ = new SrsAsyncCallWorker();
|
||||
|
||||
mux.hijack(this);
|
||||
mux.add_dynamic_matcher(this);
|
||||
_srs_config->subscribe(this);
|
||||
}
|
||||
|
||||
SrsHttpStreamServer::~SrsHttpStreamServer()
|
||||
{
|
||||
mux.unhijack(this);
|
||||
mux.remove_dynamic_matcher(this);
|
||||
_srs_config->unsubscribe(this);
|
||||
|
||||
async_->stop();
|
||||
|
|
@ -1168,7 +1168,7 @@ void SrsHttpStreamServer::http_unmount(ISrsRequest *r)
|
|||
}
|
||||
}
|
||||
|
||||
srs_error_t SrsHttpStreamServer::hijack(ISrsHttpMessage *request, ISrsHttpHandler **ph)
|
||||
srs_error_t SrsHttpStreamServer::dynamic_match(ISrsHttpMessage *request, ISrsHttpHandler **ph)
|
||||
{
|
||||
srs_error_t err = srs_success;
|
||||
|
||||
|
|
@ -1178,7 +1178,7 @@ srs_error_t SrsHttpStreamServer::hijack(ISrsHttpMessage *request, ISrsHttpHandle
|
|||
return err;
|
||||
}
|
||||
|
||||
// only hijack for http streaming, http-flv/ts/mp3/aac.
|
||||
// only match for http streaming, http-flv/ts/mp3/aac.
|
||||
std::string ext = request->ext();
|
||||
if (ext.empty()) {
|
||||
return err;
|
||||
|
|
@ -1203,7 +1203,7 @@ srs_error_t SrsHttpStreamServer::hijack(ISrsHttpMessage *request, ISrsHttpHandle
|
|||
// for origin, the http stream will be mount already when publish,
|
||||
// so it must never enter this line for stream already mounted.
|
||||
// for edge, the http stream is trigger by hstrs and mount by it,
|
||||
// so we only hijack when only edge and hstrs is on.
|
||||
// so we only match when only edge and hstrs is on.
|
||||
entry = it->second;
|
||||
|
||||
// check entry and request extension.
|
||||
|
|
@ -1244,7 +1244,7 @@ srs_error_t SrsHttpStreamServer::hijack(ISrsHttpMessage *request, ISrsHttpHandle
|
|||
SrsHttpMessage *hreq = dynamic_cast<SrsHttpMessage *>(request);
|
||||
srs_assert(hreq);
|
||||
|
||||
// hijack for entry.
|
||||
// match for entry.
|
||||
SrsUniquePtr<ISrsRequest> r(hreq->to_request(vhost->arg0()));
|
||||
|
||||
std::string sid = r->get_stream_url();
|
||||
|
|
@ -1254,10 +1254,10 @@ srs_error_t SrsHttpStreamServer::hijack(ISrsHttpMessage *request, ISrsHttpHandle
|
|||
SrsLiveEntry *s_entry = streamHandlers[sid];
|
||||
if (!s_entry->stream->entry->enabled) {
|
||||
// only when the http entry is disabled, check the config whether http flv disable,
|
||||
// for the http flv edge use hijack to trigger the edge ingester, we always mount it
|
||||
// for the http flv edge use match to trigger the edge ingester, we always mount it
|
||||
// eventhough the origin does not exists the specified stream.
|
||||
if (!_srs_config->get_vhost_http_remux_enabled(r->vhost)) {
|
||||
return srs_error_new(ERROR_HTTP_HIJACK, "stream disabled");
|
||||
return srs_error_new(ERROR_HTTP_DYNAMIC_MATCH, "stream disabled");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1273,7 +1273,7 @@ srs_error_t SrsHttpStreamServer::hijack(ISrsHttpMessage *request, ISrsHttpHandle
|
|||
*ph = entry->stream;
|
||||
}
|
||||
|
||||
srs_trace("flv: hijack %s ok", upath.c_str());
|
||||
srs_trace("flv: dynamic match %s ok", upath.c_str());
|
||||
|
||||
return err;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -276,7 +276,7 @@ public:
|
|||
|
||||
// The HTTP Live Streaming Server, to serve FLV/TS/MP3/AAC stream.
|
||||
// TODO: Support multiple stream.
|
||||
class SrsHttpStreamServer : public ISrsReloadHandler, public ISrsHttpMatchHijacker
|
||||
class SrsHttpStreamServer : public ISrsReloadHandler, public ISrsHttpDynamicMatcher
|
||||
{
|
||||
private:
|
||||
SrsServer *server;
|
||||
|
|
@ -300,9 +300,10 @@ public:
|
|||
// HTTP flv/ts/mp3/aac stream
|
||||
virtual srs_error_t http_mount(ISrsRequest *r);
|
||||
virtual void http_unmount(ISrsRequest *r);
|
||||
// Interface ISrsHttpMatchHijacker
|
||||
|
||||
// Interface ISrsHttpDynamicMatcher
|
||||
public:
|
||||
virtual srs_error_t hijack(ISrsHttpMessage *request, ISrsHttpHandler **ph);
|
||||
virtual srs_error_t dynamic_match(ISrsHttpMessage *request, ISrsHttpHandler **ph);
|
||||
|
||||
private:
|
||||
virtual srs_error_t initialize_flv_streaming();
|
||||
|
|
|
|||
|
|
@ -9,6 +9,6 @@
|
|||
|
||||
#define VERSION_MAJOR 7
|
||||
#define VERSION_MINOR 0
|
||||
#define VERSION_REVISION 70
|
||||
#define VERSION_REVISION 71
|
||||
|
||||
#endif
|
||||
|
|
@ -161,7 +161,7 @@
|
|||
XX(ERROR_RTMP_CLIENT_NOT_FOUND, 2049, "ClientNotFound", "Request client is not found") \
|
||||
XX(ERROR_OpenSslCreateHMAC, 2050, "SslCreateHmac", "Failed to create HMAC for SSL") \
|
||||
XX(ERROR_RTMP_STREAM_NAME_EMPTY, 2051, "StreamNameEmpty", "Invalid stream for name is empty") \
|
||||
XX(ERROR_HTTP_HIJACK, 2052, "HttpHijack", "Failed to hijack HTTP handler") \
|
||||
XX(ERROR_HTTP_DYNAMIC_MATCH, 2052, "HttpDynamicMatch", "Failed to dynamic match HTTP handler") \
|
||||
XX(ERROR_RTMP_MESSAGE_CREATE, 2053, "MessageCreate", "Failed to create shared pointer message") \
|
||||
XX(ERROR_RTMP_PROXY_EXCEED, 2054, "RtmpProxy", "Failed to decode message of RTMP proxy") \
|
||||
XX(ERROR_RTMP_CREATE_STREAM_DEPTH, 2055, "RtmpIdentify", "Failed to identify RTMP client") \
|
||||
|
|
|
|||
|
|
@ -785,11 +785,11 @@ SrsHttpMuxEntry::~SrsHttpMuxEntry()
|
|||
srs_freep(handler);
|
||||
}
|
||||
|
||||
ISrsHttpMatchHijacker::ISrsHttpMatchHijacker()
|
||||
ISrsHttpDynamicMatcher::ISrsHttpDynamicMatcher()
|
||||
{
|
||||
}
|
||||
|
||||
ISrsHttpMatchHijacker::~ISrsHttpMatchHijacker()
|
||||
ISrsHttpDynamicMatcher::~ISrsHttpDynamicMatcher()
|
||||
{
|
||||
}
|
||||
|
||||
|
|
@ -808,14 +808,14 @@ SrsHttpServeMux::SrsHttpServeMux()
|
|||
SrsHttpServeMux::~SrsHttpServeMux()
|
||||
{
|
||||
std::map<std::string, SrsHttpMuxEntry *>::iterator it;
|
||||
for (it = entries.begin(); it != entries.end(); ++it) {
|
||||
for (it = static_matchers_.begin(); it != static_matchers_.end(); ++it) {
|
||||
SrsHttpMuxEntry *entry = it->second;
|
||||
srs_freep(entry);
|
||||
}
|
||||
entries.clear();
|
||||
static_matchers_.clear();
|
||||
|
||||
vhosts.clear();
|
||||
hijackers.clear();
|
||||
vhosts_.clear();
|
||||
dynamic_matchers_.clear();
|
||||
}
|
||||
|
||||
srs_error_t SrsHttpServeMux::initialize()
|
||||
|
|
@ -827,22 +827,24 @@ srs_error_t SrsHttpServeMux::initialize()
|
|||
return err;
|
||||
}
|
||||
|
||||
void SrsHttpServeMux::hijack(ISrsHttpMatchHijacker *h)
|
||||
void SrsHttpServeMux::add_dynamic_matcher(ISrsHttpDynamicMatcher *h)
|
||||
{
|
||||
std::vector<ISrsHttpMatchHijacker *>::iterator it = std::find(hijackers.begin(), hijackers.end(), h);
|
||||
if (it != hijackers.end()) {
|
||||
std::vector<ISrsHttpDynamicMatcher *>::iterator it;
|
||||
it = std::find(dynamic_matchers_.begin(), dynamic_matchers_.end(), h);
|
||||
if (it != dynamic_matchers_.end()) {
|
||||
return;
|
||||
}
|
||||
hijackers.push_back(h);
|
||||
dynamic_matchers_.push_back(h);
|
||||
}
|
||||
|
||||
void SrsHttpServeMux::unhijack(ISrsHttpMatchHijacker *h)
|
||||
void SrsHttpServeMux::remove_dynamic_matcher(ISrsHttpDynamicMatcher *h)
|
||||
{
|
||||
std::vector<ISrsHttpMatchHijacker *>::iterator it = std::find(hijackers.begin(), hijackers.end(), h);
|
||||
if (it == hijackers.end()) {
|
||||
std::vector<ISrsHttpDynamicMatcher *>::iterator it;
|
||||
it = std::find(dynamic_matchers_.begin(), dynamic_matchers_.end(), h);
|
||||
if (it == dynamic_matchers_.end()) {
|
||||
return;
|
||||
}
|
||||
it = hijackers.erase(it);
|
||||
it = dynamic_matchers_.erase(it);
|
||||
}
|
||||
|
||||
srs_error_t SrsHttpServeMux::handle(std::string pattern, ISrsHttpHandler *handler)
|
||||
|
|
@ -853,8 +855,8 @@ srs_error_t SrsHttpServeMux::handle(std::string pattern, ISrsHttpHandler *handle
|
|||
return srs_error_new(ERROR_HTTP_PATTERN_EMPTY, "empty pattern");
|
||||
}
|
||||
|
||||
if (entries.find(pattern) != entries.end()) {
|
||||
SrsHttpMuxEntry *exists = entries[pattern];
|
||||
if (static_matchers_.find(pattern) != static_matchers_.end()) {
|
||||
SrsHttpMuxEntry *exists = static_matchers_[pattern];
|
||||
if (exists->explicit_match) {
|
||||
return srs_error_new(ERROR_HTTP_PATTERN_DUPLICATED, "pattern=%s exists", pattern.c_str());
|
||||
}
|
||||
|
|
@ -865,7 +867,7 @@ srs_error_t SrsHttpServeMux::handle(std::string pattern, ISrsHttpHandler *handle
|
|||
if (pattern.find("/") != string::npos) {
|
||||
vhost = pattern.substr(0, pattern.find("/"));
|
||||
}
|
||||
vhosts[vhost] = handler;
|
||||
vhosts_[vhost] = handler;
|
||||
}
|
||||
|
||||
if (true) {
|
||||
|
|
@ -875,11 +877,11 @@ srs_error_t SrsHttpServeMux::handle(std::string pattern, ISrsHttpHandler *handle
|
|||
entry->pattern = pattern;
|
||||
entry->handler->entry = entry;
|
||||
|
||||
if (entries.find(pattern) != entries.end()) {
|
||||
SrsHttpMuxEntry *exists = entries[pattern];
|
||||
if (static_matchers_.find(pattern) != static_matchers_.end()) {
|
||||
SrsHttpMuxEntry *exists = static_matchers_[pattern];
|
||||
srs_freep(exists);
|
||||
}
|
||||
entries[pattern] = entry;
|
||||
static_matchers_[pattern] = entry;
|
||||
}
|
||||
|
||||
// Helpful behavior:
|
||||
|
|
@ -890,8 +892,8 @@ srs_error_t SrsHttpServeMux::handle(std::string pattern, ISrsHttpHandler *handle
|
|||
SrsHttpMuxEntry *entry = NULL;
|
||||
|
||||
// free the exists implicit entry
|
||||
if (entries.find(rpattern) != entries.end()) {
|
||||
entry = entries[rpattern];
|
||||
if (static_matchers_.find(rpattern) != static_matchers_.end()) {
|
||||
entry = static_matchers_[rpattern];
|
||||
}
|
||||
|
||||
// create implicit redirect.
|
||||
|
|
@ -904,7 +906,7 @@ srs_error_t SrsHttpServeMux::handle(std::string pattern, ISrsHttpHandler *handle
|
|||
entry->pattern = pattern;
|
||||
entry->handler->entry = entry;
|
||||
|
||||
entries[rpattern] = entry;
|
||||
static_matchers_[rpattern] = entry;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -914,10 +916,10 @@ srs_error_t SrsHttpServeMux::handle(std::string pattern, ISrsHttpHandler *handle
|
|||
void SrsHttpServeMux::unhandle(std::string pattern, ISrsHttpHandler *handler)
|
||||
{
|
||||
if (true) {
|
||||
std::map<std::string, SrsHttpMuxEntry *>::iterator it = entries.find(pattern);
|
||||
if (it != entries.end()) {
|
||||
std::map<std::string, SrsHttpMuxEntry *>::iterator it = static_matchers_.find(pattern);
|
||||
if (it != static_matchers_.end()) {
|
||||
SrsHttpMuxEntry *entry = it->second;
|
||||
entries.erase(it);
|
||||
static_matchers_.erase(it);
|
||||
|
||||
// We don't free the handler, because user should free it.
|
||||
if (entry->handler == handler) {
|
||||
|
|
@ -935,9 +937,9 @@ void SrsHttpServeMux::unhandle(std::string pattern, ISrsHttpHandler *handler)
|
|||
vhost = pattern.substr(0, pattern.find("/"));
|
||||
}
|
||||
|
||||
std::map<std::string, ISrsHttpHandler *>::iterator it = vhosts.find(vhost);
|
||||
if (it != vhosts.end())
|
||||
vhosts.erase(it);
|
||||
std::map<std::string, ISrsHttpHandler *>::iterator it = vhosts_.find(vhost);
|
||||
if (it != vhosts_.end())
|
||||
vhosts_.erase(it);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -971,14 +973,14 @@ srs_error_t SrsHttpServeMux::find_handler(ISrsHttpMessage *r, ISrsHttpHandler **
|
|||
return srs_error_wrap(err, "http match");
|
||||
}
|
||||
|
||||
// always hijack.
|
||||
if (!hijackers.empty()) {
|
||||
// notify all hijackers unless matching failed.
|
||||
std::vector<ISrsHttpMatchHijacker *>::iterator it;
|
||||
for (it = hijackers.begin(); it != hijackers.end(); ++it) {
|
||||
ISrsHttpMatchHijacker *hijacker = *it;
|
||||
if ((err = hijacker->hijack(r, ph)) != srs_success) {
|
||||
return srs_error_wrap(err, "http hijack");
|
||||
// always try to handle by dynamic matchers.
|
||||
if (!dynamic_matchers_.empty()) {
|
||||
// notify all dynamic matchers unless matching failed.
|
||||
std::vector<ISrsHttpDynamicMatcher *>::iterator it;
|
||||
for (it = dynamic_matchers_.begin(); it != dynamic_matchers_.end(); ++it) {
|
||||
ISrsHttpDynamicMatcher *matcher = *it;
|
||||
if ((err = matcher->dynamic_match(r, ph)) != srs_success) {
|
||||
return srs_error_wrap(err, "http dynamic match");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -996,7 +998,7 @@ srs_error_t SrsHttpServeMux::match(ISrsHttpMessage *r, ISrsHttpHandler **ph)
|
|||
std::string path = r->path();
|
||||
|
||||
// Host-specific pattern takes precedence over generic ones
|
||||
if (!vhosts.empty() && vhosts.find(r->host()) != vhosts.end()) {
|
||||
if (!vhosts_.empty() && vhosts_.find(r->host()) != vhosts_.end()) {
|
||||
path = r->host() + path;
|
||||
}
|
||||
|
||||
|
|
@ -1004,7 +1006,7 @@ srs_error_t SrsHttpServeMux::match(ISrsHttpMessage *r, ISrsHttpHandler **ph)
|
|||
ISrsHttpHandler *h = NULL;
|
||||
|
||||
std::map<std::string, SrsHttpMuxEntry *>::iterator it;
|
||||
for (it = entries.begin(); it != entries.end(); ++it) {
|
||||
for (it = static_matchers_.begin(); it != static_matchers_.end(); ++it) {
|
||||
std::string pattern = it->first;
|
||||
SrsHttpMuxEntry *entry = it->second;
|
||||
|
||||
|
|
|
|||
|
|
@ -409,18 +409,18 @@ public:
|
|||
virtual ~SrsHttpMuxEntry();
|
||||
};
|
||||
|
||||
// The hijacker for http pattern match.
|
||||
class ISrsHttpMatchHijacker
|
||||
// The dynamic matcher for http pattern match.
|
||||
class ISrsHttpDynamicMatcher
|
||||
{
|
||||
public:
|
||||
ISrsHttpMatchHijacker();
|
||||
virtual ~ISrsHttpMatchHijacker();
|
||||
ISrsHttpDynamicMatcher();
|
||||
virtual ~ISrsHttpDynamicMatcher();
|
||||
|
||||
public:
|
||||
// When match the request failed, no handler to process request.
|
||||
// @param request the http request message to match the handler.
|
||||
// @param ph the already matched handler, hijack can rewrite it.
|
||||
virtual srs_error_t hijack(ISrsHttpMessage *request, ISrsHttpHandler **ph) = 0;
|
||||
// @param ph the already matched handler, dynamic matcher can rewrite it.
|
||||
virtual srs_error_t dynamic_match(ISrsHttpMessage *request, ISrsHttpHandler **ph) = 0;
|
||||
};
|
||||
|
||||
// The server mux, all http server should implements it.
|
||||
|
|
@ -466,17 +466,19 @@ class SrsHttpServeMux : public ISrsHttpServeMux
|
|||
{
|
||||
private:
|
||||
// The pattern handler, to handle the http request.
|
||||
std::map<std::string, SrsHttpMuxEntry *> entries;
|
||||
std::map<std::string, SrsHttpMuxEntry *> static_matchers_;
|
||||
// The vhost handler.
|
||||
// When find the handler to process the request,
|
||||
// append the matched vhost when pattern not starts with /,
|
||||
// For example, for pattern /live/livestream.flv of vhost ossrs.net,
|
||||
// The path will rewrite to ossrs.net/live/livestream.flv
|
||||
std::map<std::string, ISrsHttpHandler *> vhosts;
|
||||
// all hijackers for http match.
|
||||
std::map<std::string, ISrsHttpHandler *> vhosts_;
|
||||
|
||||
private:
|
||||
// all dynamic matcher for http match.
|
||||
// For example, the hstrs(http stream trigger rtmp source)
|
||||
// can hijack and install handler when request incoming and no handler.
|
||||
std::vector<ISrsHttpMatchHijacker *> hijackers;
|
||||
// can dynamic match and install handler when request incoming and no handler.
|
||||
std::vector<ISrsHttpDynamicMatcher *> dynamic_matchers_;
|
||||
|
||||
public:
|
||||
SrsHttpServeMux();
|
||||
|
|
@ -485,9 +487,11 @@ public:
|
|||
public:
|
||||
// Initialize the http serve mux.
|
||||
virtual srs_error_t initialize();
|
||||
// hijack the http match.
|
||||
virtual void hijack(ISrsHttpMatchHijacker *h);
|
||||
virtual void unhijack(ISrsHttpMatchHijacker *h);
|
||||
|
||||
public:
|
||||
// Add a dynamic matcher for the http match.
|
||||
virtual void add_dynamic_matcher(ISrsHttpDynamicMatcher *h);
|
||||
virtual void remove_dynamic_matcher(ISrsHttpDynamicMatcher *h);
|
||||
|
||||
public:
|
||||
// Handle registers the handler for the given pattern.
|
||||
|
|
|
|||
|
|
@ -178,7 +178,7 @@ public:
|
|||
}
|
||||
};
|
||||
|
||||
class MockHttpHandler : public ISrsHttpHandler, public ISrsHttpMatchHijacker
|
||||
class MockHttpHandler : public ISrsHttpHandler, public ISrsHttpDynamicMatcher
|
||||
{
|
||||
public:
|
||||
string bytes;
|
||||
|
|
@ -193,7 +193,7 @@ public:
|
|||
{
|
||||
return w->write((char *)bytes.data(), (int)bytes.length());
|
||||
}
|
||||
virtual srs_error_t hijack(ISrsHttpMessage * /*r*/, ISrsHttpHandler **ph)
|
||||
virtual srs_error_t dynamic_match(ISrsHttpMessage * /*r*/, ISrsHttpHandler **ph)
|
||||
{
|
||||
if (ph) {
|
||||
*ph = this;
|
||||
|
|
@ -840,10 +840,10 @@ VOID TEST(ProtocolHTTPTest, HTTPServerMuxerHijack)
|
|||
HELPER_ASSERT_SUCCESS(s.initialize());
|
||||
|
||||
MockHttpHandler h1("Done");
|
||||
s.hijack(&h1);
|
||||
s.add_dynamic_matcher(&h1);
|
||||
|
||||
MockHttpHandler h0("Hello, world!");
|
||||
s.hijack(&h0);
|
||||
s.add_dynamic_matcher(&h0);
|
||||
|
||||
MockResponseWriter w;
|
||||
SrsHttpMessage r(NULL, NULL);
|
||||
|
|
@ -859,10 +859,10 @@ VOID TEST(ProtocolHTTPTest, HTTPServerMuxerHijack)
|
|||
HELPER_ASSERT_SUCCESS(s.initialize());
|
||||
|
||||
MockHttpHandler h0("Hello, world!");
|
||||
s.hijack(&h0);
|
||||
s.add_dynamic_matcher(&h0);
|
||||
|
||||
MockHttpHandler h1("Done");
|
||||
s.hijack(&h1);
|
||||
s.add_dynamic_matcher(&h1);
|
||||
|
||||
MockResponseWriter w;
|
||||
SrsHttpMessage r(NULL, NULL);
|
||||
|
|
@ -877,8 +877,8 @@ VOID TEST(ProtocolHTTPTest, HTTPServerMuxerHijack)
|
|||
HELPER_ASSERT_SUCCESS(s.initialize());
|
||||
|
||||
MockHttpHandler hroot("Hello, world!");
|
||||
s.hijack(&hroot);
|
||||
s.unhijack(&hroot);
|
||||
s.add_dynamic_matcher(&hroot);
|
||||
s.remove_dynamic_matcher(&hroot);
|
||||
|
||||
MockResponseWriter w;
|
||||
SrsHttpMessage r(NULL, NULL);
|
||||
|
|
@ -893,7 +893,7 @@ VOID TEST(ProtocolHTTPTest, HTTPServerMuxerHijack)
|
|||
HELPER_ASSERT_SUCCESS(s.initialize());
|
||||
|
||||
MockHttpHandler hroot("Hello, world!");
|
||||
s.hijack(&hroot);
|
||||
s.add_dynamic_matcher(&hroot);
|
||||
|
||||
MockResponseWriter w;
|
||||
SrsHttpMessage r(NULL, NULL);
|
||||
|
|
|
|||
|
|
@ -26,9 +26,9 @@ VOID TEST(StTest, StUtimeInMicroseconds)
|
|||
EXPECT_GT(st_time_1, 0);
|
||||
EXPECT_GT(st_time_2, 0);
|
||||
EXPECT_GE(st_time_2, st_time_1);
|
||||
// st_time_2 - st_time_1 should be in range of [1, 150] microseconds
|
||||
// st_time_2 - st_time_1 should be in range of [1, 300] microseconds
|
||||
EXPECT_GE(st_time_2 - st_time_1, 0);
|
||||
EXPECT_LE(st_time_2 - st_time_1, 150);
|
||||
EXPECT_LE(st_time_2 - st_time_1, 300);
|
||||
}
|
||||
|
||||
static inline st_utime_t time_gettimeofday()
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user