Changeset 09fef40cac145611c80b1048abd0fbcbd2a6cd70

Show
Ignore:
Timestamp:
10/31/11 18:02:41 (3 years ago)
Author:
Ryan Phillips <ryan.phillips@rackspace.com>
git-committer:
Ryan Phillips <ryan.phillips@rackspace.com> 1320084161 -0500
git-parent:

[f5982323e614fec6b6ca1900cedb708f89020355]

git-author:
Ryan Phillips <ryan.phillips@rackspace.com> 1319738416 -0500
Message:

add support for check config option read_limit

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • src/modules-lua/noit/HttpClient.lua

    rf598232 r09fef40  
    130130end 
    131131 
    132 function te_length(self, content_enc_func
     132function te_length(self, content_enc_func, read_limit
    133133    local len = tonumber(self.headers["content-length"]) 
    134     len = len > 102400 and 102400 or len 
     134    if read_limit > 0 and len > read_limit then 
     135      len = read_limit 
     136    end 
    135137    repeat 
    136138        local str = self.e:read(len) 
     
    145147end 
    146148 
    147 function te_chunked(self, content_enc_func
     149function te_chunked(self, content_enc_func, read_limit
    148150    while true do 
    149151        local str = self.e:read("\n") 
     
    162164        self.content_bytes = self.content_bytes + string.len(decoded) 
    163165        if self.hooks.consume ~= nil then self.hooks.consume(decoded) end 
     166        if read_limit > 0 then 
     167          if string.len(self.content_bytes) > read_limit then 
     168            return 
     169          end 
     170        end 
    164171        -- each chunk ('cept a 0 size one) is followed by a \r\n 
    165172        str = self.e:read("\n") 
    166173        if str ~= "\r\n" and str ~= "\n" then error("short chunked boundary read") end 
    167         if string.len(self.content_bytes) > 102400 then 
    168           break 
    169         end 
    170174    end 
    171175    -- read trailers 
     
    177181end 
    178182 
    179 function HttpClient:get_body(
     183function HttpClient:get_body(read_limit
    180184    local cefunc = ce_passthru 
    181185    local ce = self.headers["content-encoding"] 
     
    192196    local cl = self.headers["content-length"] 
    193197    if te ~= nil and te == "chunked" then 
    194         return te_chunked(self, cefunc
     198        return te_chunked(self, cefunc, read_limit
    195199    elseif cl ~= nil and tonumber(cl) ~= nil then 
    196         return te_length(self, cefunc
     200        return te_length(self, cefunc, read_limit
    197201    end 
    198202    return te_close(self, cefunc) 
    199203end 
    200204 
    201 function HttpClient:get_response(
     205function HttpClient:get_response(read_limit
    202206    self:get_headers() 
    203     return self:get_body(
     207    return self:get_body(read_limit
    204208end 
    205209 
  • src/modules-lua/noit/module/http.lua

    ra24b166 r09fef40  
    9292               default="10000" 
    9393               allowed="\d+">This sets the PCRE internal match limit (see pcreapi documentation).</parameter> 
     94    <parameter name="read_limit" 
     95               required="optional" 
     96               default="102400" 
     97               allowed="\d+">Sets the limit on the data read.</parameter> 
    9498  </checkconfig> 
    9599  <examples> 
     
    270274    local pcre_match_limit = check.config.pcre_match_limit or 10000 
    271275    local redirects = check.config.redirects or 0 
     276    local read_limit = check.config.read_limit or 10 
    272277 
    273278    -- expect the worst 
     
    354359        end 
    355360        client:do_request(method, uri, headers_firstpass) 
    356         client:get_response(
     361        client:get_response(read_limit
    357362        if client.code ~= 401 or 
    358363           client.headers["www-authenticate"] == nil then 
     
    397402        end 
    398403        optclient:do_request(method, uri, headers, payload) 
    399         optclient:get_response(
     404        optclient:get_response(read_limit
    400405 
    401406        redirects = redirects - 1