Sfoglia il codice sorgente

Added MG_INIT_LUA event

Sergey Lyubka 12 anni fa
parent
commit
b437d56736
3 ha cambiato i file con 26 aggiunte e 19 eliminazioni
  1. 2 0
      bindings/python/mongoose.py
  2. 4 4
      mongoose.c
  3. 20 15
      mongoose.h

+ 2 - 0
bindings/python/mongoose.py

@@ -49,6 +49,8 @@ WEBSOCKET_CONNECT = 5
 WEBSOCKET_READY   = 6
 WEBSOCKET_READY   = 6
 WEBSOCKET_MESSAGE = 7
 WEBSOCKET_MESSAGE = 7
 WEBSOCKET_CLOSE   = 8
 WEBSOCKET_CLOSE   = 8
+OPEN_FILE         = 9
+INIT_LUA          = 10
 
 
 
 
 class mg_header(ctypes.Structure):
 class mg_header(ctypes.Structure):

+ 4 - 4
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,
 static void handle_lsp_request(struct mg_connection *conn, const char *path,
                                struct file *filep) {
                                struct file *filep) {
   void *p = NULL;
   void *p = NULL;
-  FILE *fp = NULL;
   lua_State *L = NULL;
   lua_State *L = NULL;
 
 
   if (!mg_fopen(conn, path, "r", filep)) {
   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"
     mg_printf(conn, "%s", "HTTP/1.1 200 OK\r\n"
               "Content-Type: text/html\r\nConnection: close\r\n\r\n");
               "Content-Type: text/html\r\nConnection: close\r\n\r\n");
     prepare_lua_environment(conn, L);
     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);
     lsp(conn, filep->membuf == NULL ? p : filep->membuf, filep->size, L);
   }
   }
 
 
   if (L) lua_close(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
 #endif // USE_LUA
 
 

+ 20 - 15
mongoose.h

@@ -82,21 +82,6 @@ enum mg_event {
   //   SSL_CTX *ssl_context = request_info->ev_data;
   //   SSL_CTX *ssl_context = request_info->ev_data;
   MG_INIT_SSL,
   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.
   // Sent on HTTP connect, before websocket handshake.
   // If user callback returns NULL, then mongoose proceeds
   // If user callback returns NULL, then mongoose proceeds
   // with handshake, otherwise it closes the connection.
   // with handshake, otherwise it closes the connection.
@@ -117,6 +102,26 @@ enum mg_event {
   // Callback's return value is ignored.
   // Callback's return value is ignored.
   // ev_data contains NULL.
   // ev_data contains NULL.
   MG_WEBSOCKET_CLOSE,
   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,
 };
 };