in lib/puma/server.rb [903:949]
def read_body(env, client, body, cl)
content_length = cl.to_i
remain = content_length - body.bytesize
return StringIO.new(body) if remain <= 0
if remain > MAX_BODY
stream = Tempfile.new(Const::PUMA_TMP_BASE)
stream.binmode
else
stream = StringIO.new body[0,0]
end
stream.write body
chunk = client.readpartial(remain % CHUNK_SIZE)
unless chunk
stream.close
return nil
end
remain -= stream.write(chunk)
while remain > 0
chunk = client.readpartial(CHUNK_SIZE)
unless chunk
stream.close
return nil
end
remain -= stream.write(chunk)
end
stream.rewind
return stream
end