瀏覽代碼

Add get_var to Lua

bel 11 年之前
父節點
當前提交
67b4283fce
共有 2 個文件被更改,包括 44 次插入2 次删除
  1. 32 0
      src/mod_lua.inl
  2. 12 2
      test/page3.lua

+ 32 - 0
src/mod_lua.inl

@@ -342,6 +342,37 @@ static int lsp_send_file(lua_State *L)
     return 0;
 }
 
+/* mg.get_var */
+static int lsp_get_var(lua_State *L)
+{
+    struct mg_connection *conn = lua_touserdata(L, lua_upvalueindex(1));
+    int params = lua_gettop(L);
+    const char *data, *var_name;
+    size_t data_len, occurrence;
+    int ret;
+    char dst[512];
+
+    data = lua_tolstring(L, 1, &data_len);
+    var_name = lua_tostring(L, 2);
+    occurrence = (params>2) ? (long)lua_tonumber(L, 3) : 0;
+
+    ret = mg_get_var2(data, data_len, var_name, dst, sizeof(dst), occurrence);
+    if (ret>=0) {
+        lua_pushstring(L, dst);
+    } else {
+        lua_pushnil(L);
+    }
+    return 1;
+}
+
+/* TODO: Other functions in civetweb.h that should be available to Lua too:
+mg_get_cookie
+mg_get_builtin_mime_type
+mg_url_decode
+mg_url_encode
+mg_md5
+*/
+
 /* mg.write for websockets */
 static int lwebsock_write(lua_State *L)
 {
@@ -452,6 +483,7 @@ static void prepare_lua_environment(struct mg_connection *conn, lua_State *L, co
     }
 
     reg_function(L, "send_file", lsp_send_file, conn);
+    reg_function(L, "get_var", lsp_get_var, conn);
 
     reg_string(L, "version", CIVETWEB_VERSION);
     reg_string(L, "document_root", conn->ctx->config[DOCUMENT_ROOT]);

+ 12 - 2
test/page3.lua

@@ -17,6 +17,16 @@ elseif mg.request_info.query_string:match("/") or mg.request_info.query_string:m
     mg.write("<html><head><title>Civetweb Lua script test page 3</title></head>\r\n")
     mg.write("<body>No access!</body></html>\r\n")
 else
-    filename = mg.document_root .. "/" .. mg.request_info.query_string
-    mg.send_file(filename)
+    file = mg.get_var(mg.request_info.query_string, "file");
+    if not file then
+        mg.write("HTTP/1.0 400 Bad Request\r\n")
+        mg.write("Connection: close\r\n")
+        mg.write("Content-Type: text/html; charset=utf-8\r\n")
+        mg.write("\r\n")
+        mg.write("<html><head><title>Civetweb Lua script test page 3</title></head>\r\n")
+        mg.write("<body>Query string does not contain a 'file' variable.<br>Try 'file=page3.lua&somevar=something'</body></html>\r\n")
+    else
+        filename = mg.document_root .. "/" .. file
+        mg.send_file(filename)
+    end
 end