More nixio fixes, initial httpclient
[project/luci.git] / libs / nixio / lua / nixio / util.lua
index 34800b4541b4c20b9563feef620cb42e0d80384d..cb9fcf56f90ee2cd76de8f41c9524d309ec9ea88 100644 (file)
@@ -77,11 +77,12 @@ function socket.linesource(self, limit)
                if flush then
                        line = buffer:sub(bpos + 1)
                        buffer = ""
+                       bpos = 0
                        return line
                end
 
                while not line do
-                       _, endp, line = buffer:find("^(.-)\r?\n", bpos + 1)
+                       _, endp, line = buffer:find("(.-)\r?\n", bpos + 1)
                        if line then
                                bpos = endp
                                return line
@@ -89,6 +90,8 @@ function socket.linesource(self, limit)
                                local newblock, code = self:recv(limit + bpos - #buffer)
                                if not newblock then
                                        return nil, code
+                               elseif #newblock == 0 then
+                                       return nil
                                end
                                buffer = buffer:sub(bpos + 1) .. newblock
                                bpos = 0
@@ -97,4 +100,32 @@ function socket.linesource(self, limit)
                        end
                end
        end
+end
+
+function socket.blocksource(self, bs, limit)
+       bs = bs or BUFFERSIZE
+       return function()
+               local toread = bs
+               if limit then
+                       if limit < 1 then
+                               return nil
+                       elseif limit < toread then
+                               toread = limit
+                       end
+               end
+
+               local block, code, msg = self:recv(toread)
+
+               if not block then
+                       return nil, code
+               elseif #block == 0 then
+                       return nil
+               else
+                       if limit then
+                               limit = limit - #block
+                       end
+
+                       return block
+               end
+       end
 end
\ No newline at end of file