diff --git a/cmd/main.c b/cmd/main.c index d830444..62707cf 100644 --- a/cmd/main.c +++ b/cmd/main.c @@ -10,22 +10,16 @@ #include http_method_t http_methods[] = { - { "GET / ", http_index }, - { "GET /snapshot ", http_snapshot }, { "GET /snapshot?", http_snapshot }, - { "GET /stream ", http_stream }, { "GET /stream?", http_stream }, - { "GET /?action=snapshot ", http_snapshot }, - { "GET /?action=snapshot?", http_snapshot }, - { "GET /?action=stream ", http_stream }, - { "GET /?action=stream?", http_stream }, - { "GET /video ", http_video_html }, + { "GET /?action=snapshot", http_snapshot }, + { "GET /?action=stream", http_stream }, { "GET /video?", http_video_html }, - { "GET /video.h264 ", http_video }, - { "GET /video.h264?", http_video }, - { "GET /jmuxer.min.js ", http_jmuxer_js }, + { "GET /video.h264?", http_h264_video }, + { "GET /video.mkv?", http_mkv_video }, { "GET /jmuxer.min.js?", http_jmuxer_js }, - { NULL, NULL } + { "GET /?", http_index }, + { } }; camera_options_t camera_options = { diff --git a/http/http.c b/http/http.c index 06226de..daabe28 100644 --- a/http/http.c +++ b/http/http.c @@ -67,7 +67,14 @@ static void http_process(http_worker_t *worker, FILE *stream) } for (int i = 0; worker->methods[i].name; i++) { - if (strstr(worker->client_method, worker->methods[i].name)) { + const char *name = worker->methods[i].name; + int nlen = strlen(worker->methods[i].name); + + if (strncmp(worker->client_method, name, nlen-1)) + continue; + + // allow last character to match `?` or ` ` + if (worker->client_method[nlen-1] == name[nlen-1] || name[nlen-1] == '?' && worker->client_method[nlen-1] == ' ') { worker->methods[i].func(worker, stream); return; }