Pass opts structure to mg_http_serve_dir()

This commit is contained in:
cpq
2021-01-02 12:30:09 +00:00
parent 1b0636c2d2
commit 86824795a0
5 changed files with 26 additions and 11 deletions
+3 -3
View File
@@ -1009,11 +1009,11 @@ static void listdir(struct mg_connection *c, struct mg_http_message *hm,
#endif
void mg_http_serve_dir(struct mg_connection *c, struct mg_http_message *hm,
const char *dir) {
const struct mg_http_serve_opts *opts) {
char path[PATH_MAX + 2], root[sizeof(path) - 2], real[sizeof(path) - 2];
path[0] = root[0] = real[0] = '\0';
if (realpath(dir, root) == NULL)
LOG(LL_DEBUG, ("realpath(%s): %d", dir, errno));
if (realpath(opts->root_dir, root) == NULL)
LOG(LL_DEBUG, ("realpath(%s): %d", opts->root_dir, errno));
if (!mg_is_dir(root)) {
mg_http_reply(c, 400, "", "Bad web root [%s]\n", root);
} else {
+7 -1
View File
@@ -665,6 +665,12 @@ struct mg_http_message {
struct mg_str message; // Request line + headers + body
};
// Parameter for mg_http_serve_dir()
struct mg_http_serve_opts {
const char *root_dir;
const char *ssi_pattern;
};
int mg_http_parse(const char *s, size_t len, struct mg_http_message *);
int mg_http_get_request_len(const unsigned char *buf, size_t buf_len);
void mg_http_printf_chunk(struct mg_connection *cnn, const char *fmt, ...);
@@ -674,7 +680,7 @@ struct mg_connection *mg_http_listen(struct mg_mgr *, const char *url,
struct mg_connection *mg_http_connect(struct mg_mgr *, const char *url,
mg_event_handler_t fn, void *fn_data);
void mg_http_serve_dir(struct mg_connection *, struct mg_http_message *hm,
const char *path);
const struct mg_http_serve_opts *);
void mg_http_serve_file(struct mg_connection *, struct mg_http_message *,
const char *, const char *mime);
void mg_http_reply(struct mg_connection *, int status_code, const char *headers,
+3 -3
View File
@@ -595,11 +595,11 @@ static void listdir(struct mg_connection *c, struct mg_http_message *hm,
#endif
void mg_http_serve_dir(struct mg_connection *c, struct mg_http_message *hm,
const char *dir) {
const struct mg_http_serve_opts *opts) {
char path[PATH_MAX + 2], root[sizeof(path) - 2], real[sizeof(path) - 2];
path[0] = root[0] = real[0] = '\0';
if (realpath(dir, root) == NULL)
LOG(LL_DEBUG, ("realpath(%s): %d", dir, errno));
if (realpath(opts->root_dir, root) == NULL)
LOG(LL_DEBUG, ("realpath(%s): %d", opts->root_dir, errno));
if (!mg_is_dir(root)) {
mg_http_reply(c, 400, "", "Bad web root [%s]\n", root);
} else {
+7 -1
View File
@@ -19,6 +19,12 @@ struct mg_http_message {
struct mg_str message; // Request line + headers + body
};
// Parameter for mg_http_serve_dir()
struct mg_http_serve_opts {
const char *root_dir;
const char *ssi_pattern;
};
int mg_http_parse(const char *s, size_t len, struct mg_http_message *);
int mg_http_get_request_len(const unsigned char *buf, size_t buf_len);
void mg_http_printf_chunk(struct mg_connection *cnn, const char *fmt, ...);
@@ -28,7 +34,7 @@ struct mg_connection *mg_http_listen(struct mg_mgr *, const char *url,
struct mg_connection *mg_http_connect(struct mg_mgr *, const char *url,
mg_event_handler_t fn, void *fn_data);
void mg_http_serve_dir(struct mg_connection *, struct mg_http_message *hm,
const char *path);
const struct mg_http_serve_opts *);
void mg_http_serve_file(struct mg_connection *, struct mg_http_message *,
const char *, const char *mime);
void mg_http_reply(struct mg_connection *, int status_code, const char *headers,
+6 -3
View File
@@ -337,7 +337,8 @@ static void eh1(struct mg_connection *c, int ev, void *ev_data, void *fn_data) {
} else if (mg_http_match_uri(hm, "/bar")) {
mg_http_reply(c, 404, "", "not found");
} else if (mg_http_match_uri(hm, "/badroot")) {
mg_http_serve_dir(c, hm, "/BAAADDD!");
struct mg_http_serve_opts opts = {"/BAAADDD!", NULL};
mg_http_serve_dir(c, hm, &opts);
} else if (mg_http_match_uri(hm, "/creds")) {
char user[100], pass[100];
mg_http_creds(hm, user, sizeof(user), pass, sizeof(pass));
@@ -345,9 +346,11 @@ static void eh1(struct mg_connection *c, int ev, void *ev_data, void *fn_data) {
} else if (mg_http_match_uri(hm, "/upload")) {
mg_http_upload(c, hm, ".");
} else if (mg_http_match_uri(hm, "/test/")) {
mg_http_serve_dir(c, hm, ".");
struct mg_http_serve_opts opts = {".", NULL};
mg_http_serve_dir(c, hm, &opts);
} else {
mg_http_serve_dir(c, hm, "./test/data");
struct mg_http_serve_opts opts = {"./test/data", NULL};
mg_http_serve_dir(c, hm, &opts);
}
} else if (ev == MG_EV_WS_MSG) {
struct mg_ws_message *wm = (struct mg_ws_message *) ev_data;