#coding: utf-8

require "socket"
require "thread"
require "openssl"
require "erb"
require "zlib"

scgid=Socket.new(Socket::AF_INET,Socket::SOCK_STREAM,0)
scgid.bind(Socket.pack_sockaddr_in(9000,"127.0.0.1"))
scgid.listen(1)

loop{
  scgi=scgid.accept[0]
  Thread.new{
    begin
      header_size   =""
      header_pairs  =""
      
      header_size=(scgi.recv 10,Socket::MSG_PEEK).to_i
      
      while header_pairs.size<(header_size+header_size.to_s.size.to_i+2)
        header_pairs+=scgi.sysread header_size+header_size.to_s.size.to_i+2-header_pairs.size
      end
      
      env=Hash[*(header_pairs[header_size.to_s.size+1..-2]).split("\0")]
      
      i=0
      loop{
        break if i==env["CONTENT_LENGTH"].to_i
        buf=scgi.sysread 4096
        p i+=buf.size
        sleep 0.001
      }
      
      #scgi.syswrite "Status: 200 OK\r\nContent-Length: "+env.to_s.size.to_s+"\r\nContent-Type: text/html\r\n\r\n"
      scgi.syswrite "Status: 200 OK\r\nContent-Length: "+env.to_s.size.to_s+"\r\nContent-Type: text/plain\r\n\r\n"
      
      scgi.syswrite env.to_s
        
      scgi.close
    rescue=>err
      p err
    end
  }
}