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

Fix the http implicit handler bug

This commit is contained in:
winlin 2019-12-17 21:24:24 +08:00
parent b247c9759a
commit 216a23f709
2 changed files with 22 additions and 6 deletions

View file

@ -667,16 +667,13 @@ srs_error_t SrsHttpServeMux::handle(std::string pattern, ISrsHttpHandler* handle
std::string rpattern = pattern.substr(0, pattern.length() - 1); std::string rpattern = pattern.substr(0, pattern.length() - 1);
SrsHttpMuxEntry* entry = NULL; SrsHttpMuxEntry* entry = NULL;
// free the exists not explicit entry // free the exists implicit entry
if (entries.find(rpattern) != entries.end()) { if (entries.find(rpattern) != entries.end()) {
SrsHttpMuxEntry* exists = entries[rpattern]; entry = entries[rpattern];
if (!exists->explicit_match) {
entry = exists;
}
} }
// create implicit redirect. // create implicit redirect.
if (!entry || entry->explicit_match) { if (!entry || !entry->explicit_match) {
srs_freep(entry); srs_freep(entry);
entry = new SrsHttpMuxEntry(); entry = new SrsHttpMuxEntry();

View file

@ -381,6 +381,25 @@ VOID TEST(ProtocolHTTPTest, HTTPServerMuxerImplicitHandler)
{ {
srs_error_t err; srs_error_t err;
// Implicit handler.
if (true) {
SrsHttpServeMux s;
HELPER_ASSERT_SUCCESS(s.initialize());
MockHttpHandler* h1 = new MockHttpHandler("Done");
HELPER_ASSERT_SUCCESS(s.handle("/api", h1));
MockHttpHandler* h0 = new MockHttpHandler("Hello, world!");
HELPER_ASSERT_SUCCESS(s.handle("/api/", h0));
MockResponseWriter w;
SrsHttpMessage r(NULL, NULL);
HELPER_ASSERT_SUCCESS(r.set_url("/api", false));
HELPER_ASSERT_SUCCESS(s.serve_http(&w, &r));
__MOCK_HTTP_EXPECT_STREQ(200, "Done", w);
}
// Fail if explicit handler exists. // Fail if explicit handler exists.
if (true) { if (true) {
SrsHttpServeMux s; SrsHttpServeMux s;