diff --git a/nodemcu/http/wifi_settings.lua b/nodemcu/http/wifi_settings.lua
new file mode 100644
index 0000000..03806e2
--- /dev/null
+++ b/nodemcu/http/wifi_settings.lua
@@ -0,0 +1,37 @@
+return function (connection, req, args)
+ local staConfig = {ssid="", pwd=""}
+
+ connection:send("HTTP/1.0 200 OK\r\nContent-Type: text/html\r\nCache-Control: private, no-store\r\n\r\n")
+ connection:send('
Wifi SettingsWifi settings
')
+
+ connection:send("SSID: "..staConfig.ssid)
+ connection:send("\nPassword: "..staConfig.pwd)
+
+ connection:send('
')
+
+ local form = [===[
+
+ ]===]
+
+ if req.method == "GET" then
+ connection:send(form)
+ elseif req.method == "POST" then
+ local rd = req.getRequestData()
+ -- connection:send(cjson.encode(rd))
+ connection:send('Received the following values:
')
+ connection:send("\n")
+ for name, value in pairs(rd) do
+ connection:send('- ' .. name .. ': ' .. tostring(value) .. "
\n")
+ end
+
+ connection:send("
\n")
+ else
+ connection:send("NOT IMPLEMENTED")
+ end
+
+ connection:send('')
+end
diff --git a/nodemcu/httpserver-connection.lua b/nodemcu/httpserver-connection.lua
new file mode 100644
index 0000000..329e603
--- /dev/null
+++ b/nodemcu/httpserver-connection.lua
@@ -0,0 +1,67 @@
+-- httpserver-connection
+-- Part of nodemcu-httpserver, provides a buffered connection object that can handle multiple
+-- consecutive send() calls, and buffers small payloads to send once they get big.
+-- For this to work, it must be used from a coroutine and owner is responsible for the final
+-- flush() and for closing the connection.
+-- Author: Philip Gladstone, Marcos Kirsch
+
+BufferedConnection = {}
+
+-- parameter is the nodemcu-firmware connection
+function BufferedConnection:new(connection)
+ local newInstance = {}
+ newInstance.connection = connection
+ newInstance.size = 0
+ newInstance.data = {}
+
+ function newInstance:flush()
+ if self.size > 0 then
+ self.connection:send(table.concat(self.data, ""))
+ self.data = {}
+ self.size = 0
+ return true
+ end
+ return false
+ end
+
+ function newInstance:send(payload)
+ local flushthreshold = 1400
+
+ local newsize = self.size + payload:len()
+ while newsize > flushthreshold do
+ --STEP1: cut out piece from payload to complete threshold bytes in table
+ local piecesize = flushthreshold - self.size
+ local piece = payload:sub(1, piecesize)
+ payload = payload:sub(piecesize + 1, -1)
+ --STEP2: insert piece into table
+ table.insert(self.data, piece)
+ self.size = self.size + piecesize --size should be same as flushthreshold
+ --STEP3: flush entire table
+ if self:flush() then
+ coroutine.yield()
+ end
+ --at this point, size should be 0, because the table was just flushed
+ newsize = self.size + payload:len()
+ end
+
+ --at this point, whatever is left in payload should be <= flushthreshold
+ local plen = payload:len()
+ if plen == flushthreshold then
+ --case 1: what is left in payload is exactly flushthreshold bytes (boundary case), so flush it
+ table.insert(self.data, payload)
+ self.size = self.size + plen
+ if self:flush() then
+ coroutine.yield()
+ end
+ elseif payload:len() then
+ --case 2: what is left in payload is less than flushthreshold, so just leave it in the table
+ table.insert(self.data, payload)
+ self.size = self.size + plen
+ --else, case 3: nothing left in payload, so do nothing
+ end
+ end
+
+ return newInstance
+end
+
+return BufferedConnection
diff --git a/nodemcu/init.lua b/nodemcu/init.lua
index c9f6825..7204f97 100644
--- a/nodemcu/init.lua
+++ b/nodemcu/init.lua
@@ -39,7 +39,7 @@ local compileAndRemoveIfNeeded = function(f)
end
end
-local serverFiles = {'httpserver.lua', 'httpserver-basicauth.lua', 'httpserver-conf.lua', 'httpserver-b64decode.lua', 'httpserver-request.lua', 'httpserver-static.lua', 'httpserver-header.lua', 'httpserver-error.lua'}
+local serverFiles = {'httpserver.lua', 'httpserver-basicauth.lua', 'httpserver-conf.lua', 'httpserver-b64decode.lua', 'httpserver-request.lua', 'httpserver-static.lua', 'httpserver-header.lua', 'httpserver-error.lua', 'httpserver-connection.lua'}
for i, f in ipairs(serverFiles) do compileAndRemoveIfNeeded(f) end
compileAndRemoveIfNeeded = nil