diff --git a/bindings/python/mongoose.py b/bindings/python/mongoose.py index e0ba105a..7e8dbcc2 100644 --- a/bindings/python/mongoose.py +++ b/bindings/python/mongoose.py @@ -49,6 +49,8 @@ WEBSOCKET_CONNECT = 5 WEBSOCKET_READY = 6 WEBSOCKET_MESSAGE = 7 WEBSOCKET_CLOSE = 8 +OPEN_FILE = 9 +INIT_LUA = 10 class mg_header(ctypes.Structure): diff --git a/mongoose.c b/mongoose.c index 5caae4ab..156c598d 100644 --- a/mongoose.c +++ b/mongoose.c @@ -4005,7 +4005,6 @@ static void prepare_lua_environment(struct mg_connection *conn, lua_State *L) { static void handle_lsp_request(struct mg_connection *conn, const char *path, struct file *filep) { void *p = NULL; - FILE *fp = NULL; lua_State *L = NULL; if (!mg_fopen(conn, path, "r", filep)) { @@ -4020,13 +4019,14 @@ static void handle_lsp_request(struct mg_connection *conn, const char *path, mg_printf(conn, "%s", "HTTP/1.1 200 OK\r\n" "Content-Type: text/html\r\nConnection: close\r\n\r\n"); prepare_lua_environment(conn, L); + conn->request_info.ev_data = L; + call_user(conn, MG_INIT_LUA); lsp(conn, filep->membuf == NULL ? p : filep->membuf, filep->size, L); } if (L) lua_close(L); - if (p) munmap(p, st->size); - if (fp) fclose(fp); - + if (p) munmap(p, filep->size); + mg_fclose(filep); } #endif // USE_LUA diff --git a/mongoose.h b/mongoose.h index 7c409afa..5cfcc675 100644 --- a/mongoose.h +++ b/mongoose.h @@ -82,21 +82,6 @@ enum mg_event { // SSL_CTX *ssl_context = request_info->ev_data; MG_INIT_SSL, - // Mongoose tries to open file. - // If callback returns non-NULL, Mongoose will not try to open it, but - // will use the returned value as a pointer to the file data. This allows - // for example to serve files from memory. - // ev_data contains file path, including document root path. - // Upon return, ev_data should return file size, which should be a long int. - // - // const char *file_name = request_info->ev_data; - // if (strcmp(file_name, "foo.txt") == 0) { - // request_info->ev_data = (void *) (long) 4; - // return "data"; - // } - // return NULL; - MG_OPEN_FILE, - // Sent on HTTP connect, before websocket handshake. // If user callback returns NULL, then mongoose proceeds // with handshake, otherwise it closes the connection. @@ -117,6 +102,26 @@ enum mg_event { // Callback's return value is ignored. // ev_data contains NULL. MG_WEBSOCKET_CLOSE, + + // Mongoose tries to open file. + // If callback returns non-NULL, Mongoose will not try to open it, but + // will use the returned value as a pointer to the file data. This allows + // for example to serve files from memory. + // ev_data contains file path, including document root path. + // Upon return, ev_data should return file size, which should be a long int. + // + // const char *file_name = request_info->ev_data; + // if (strcmp(file_name, "foo.txt") == 0) { + // request_info->ev_data = (void *) (long) 4; + // return "data"; + // } + // return NULL; + MG_OPEN_FILE, + + // Mongoose initializes Lua server page. Sent only if Lua support is enabled. + // Callback's return value is ignored. + // ev_data contains lua_State pointer. + MG_INIT_LUA, };