Fix the http implicit handler bug

min
winlin 5 years ago
parent b247c9759a
commit 216a23f709

@ -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();

@ -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;

Loading…
Cancel
Save