--- /dev/null
+function send_ok()\r
+ mg.write("HTTP/1.0 200 OK\r\n")\r
+ mg.write("Connection: close\r\n")\r
+ mg.write("Date: " .. os.date("%a, %d %b %Y %H:%M:%S GMT") .. "\r\n")\r
+end\r
+\r
+\r
+function send_not_found()\r
+ mg.write("HTTP/1.0 404 Not Found\r\n")\r
+ mg.write("Connection: close\r\n")\r
+ mg.write("Date: " .. os.date("%a, %d %b %Y %H:%M:%S GMT") .. "\r\n")\r
+end\r
+\r
+\r
+handler = "filehandler.lua"\r
+sub_uri = mg.request_info.uri:sub(#handler+2)\r
+filename = "D:\\civetweb\\civetweb" .. sub_uri\r
+attr = lfs.attributes(filename)\r
+\r
+--[[\r
+if not attr then\r
+ send_not_found()\r
+ mg.write("\r\n")\r
+ mg.write("File " .. sub_uri .. " not available")\r
+ return\r
+end\r
+]]\r
+\r
+if mg.request_info.request_method == "GET" then\r
+ -- send_file will handle 404 internally\r
+ mg.send_file(filename)\r
+ return\r
+\r
+elseif mg.request_info.request_method == "HEAD" then\r
+ -- send_file can handle "GET" and "HEAD"\r
+ mg.send_file(filename)\r
+ return\r
+\r
+elseif mg.request_info.request_method == "PUT" then\r
+ local f = io.open(filename, "w")\r
+ if (not f) then\r
+ mg.write("HTTP/1.0 500 Internal Server Error\r\n")\r
+ mg.write("Connection: close\r\n")\r
+ mg.write("Date: " .. os.date("%a, %d %b %Y %H:%M:%S GMT") .. "\r\n")\r
+ mg.write("\r\n")\r
+ return\r
+ end\r
+\r
+ mg.write("HTTP/1.0 201 Created\r\n")\r
+ mg.write("Connection: close\r\n")\r
+ mg.write("Date: " .. os.date("%a, %d %b %Y %H:%M:%S GMT") .. "\r\n")\r
+ mg.write("\r\n")\r
+ repeat\r
+ local buf = mg.read();\r
+ if (buf) then\r
+ f:write(buf)\r
+ end\r
+ until (not buf);\r
+ f:close()\r
+\r
+ mg.write("HTTP/1.0 201 Created\r\n")\r
+ mg.write("Connection: close\r\n")\r
+ mg.write("Date: " .. os.date("%a, %d %b %Y %H:%M:%S GMT") .. "\r\n")\r
+ mg.write("\r\n")\r
+ return\r
+\r
+elseif mg.request_info.request_method == "DELETE" then\r
+ if not attr then\r
+ send_not_found()\r
+ mg.write("\r\n")\r
+ mg.write("File " .. sub_uri .. " not available")\r
+ return\r
+ end\r
+ os.remove(filename)\r
+ mg.write("HTTP/1.0 204 No Content\r\n")\r
+ mg.write("Connection: close\r\n")\r
+ mg.write("Date: " .. os.date("%a, %d %b %Y %H:%M:%S GMT") .. "\r\n")\r
+ mg.write("\r\n")\r
+ return\r
+\r
+elseif mg.request_info.request_method == "OPTIONS" then\r
+ send_ok()\r
+ mg.write("Allow: GET, HEAD, PUT, DELETE, OPTIONS\r\n")\r
+ mg.write("\r\n")\r
+ return\r
+\r
+else\r
+ mg.write("HTTP/1.0 405 Method Not Allowed\r\n")\r
+ mg.write("Connection: close\r\n")\r
+ mg.write("Date: " .. os.date("%a, %d %b %Y %H:%M:%S GMT") .. "\r\n")\r
+ mg.write("\r\n")\r
+ return\r
+end\r