Class | WEBrick::CGI::Socket |
In: |
lib/webrick/cgi.rb
|
Parent: | Object |
# File lib/webrick/cgi.rb, line 126 126: def initialize(config, env, stdin, stdout) 127: @config = config 128: @env = env 129: @header_part = StringIO.new 130: @body_part = stdin 131: @out_port = stdout 132: @out_port.binmode 133: 134: @server_addr = @env["SERVER_ADDR"] || "0.0.0.0" 135: @server_name = @env["SERVER_NAME"] 136: @server_port = @env["SERVER_PORT"] 137: @remote_addr = @env["REMOTE_ADDR"] 138: @remote_host = @env["REMOTE_HOST"] || @remote_addr 139: @remote_port = @env["REMOTE_PORT"] || 0 140: 141: begin 142: @header_part << request_line << CRLF 143: setup_header 144: @header_part << CRLF 145: @header_part.rewind 146: rescue Exception => ex 147: raise CGIError, "invalid CGI environment" 148: end 149: end
# File lib/webrick/cgi.rb, line 196 196: def addr 197: [nil, @server_port, @server_name, @server_addr] 198: end
# File lib/webrick/cgi.rb, line 216 216: def cert 217: return nil unless defined?(OpenSSL) 218: if pem = @env["SSL_SERVER_CERT"] 219: OpenSSL::X509::Certificate.new(pem) unless pem.empty? 220: end 221: end
# File lib/webrick/cgi.rb, line 245 245: def cipher 246: return nil unless defined?(OpenSSL) 247: if cipher = @env["SSL_CIPHER"] 248: ret = [ cipher ] 249: ret << @env["SSL_PROTOCOL"] 250: ret << @env["SSL_CIPHER_USEKEYSIZE"] 251: ret << @env["SSL_CIPHER_ALGKEYSIZE"] 252: ret 253: end 254: end
# File lib/webrick/cgi.rb, line 223 223: def peer_cert 224: return nil unless defined?(OpenSSL) 225: if pem = @env["SSL_CLIENT_CERT"] 226: OpenSSL::X509::Certificate.new(pem) unless pem.empty? 227: end 228: end
# File lib/webrick/cgi.rb, line 230 230: def peer_cert_chain 231: return nil unless defined?(OpenSSL) 232: if @env["SSL_CLIENT_CERT_CHAIN_0"] 233: keys = @env.keys 234: certs = keys.sort.collect{|k| 235: if /^SSL_CLIENT_CERT_CHAIN_\d+$/ =~ k 236: if pem = @env[k] 237: OpenSSL::X509::Certificate.new(pem) unless pem.empty? 238: end 239: end 240: } 241: certs.compact 242: end 243: end
# File lib/webrick/cgi.rb, line 192 192: def peeraddr 193: [nil, @remote_port, @remote_host, @remote_addr] 194: end
# File lib/webrick/cgi.rb, line 178 178: def add_header(envname, hdrname) 179: if value = @env[envname] 180: unless value.empty? 181: @header_part << hdrname << ": " << value << CRLF 182: end 183: end 184: end
# File lib/webrick/cgi.rb, line 186 186: def input 187: @header_part.eof? ? @body_part : @header_part 188: end
# File lib/webrick/cgi.rb, line 151 151: def request_line 152: meth = @env["REQUEST_METHOD"] || "GET" 153: unless url = @env["REQUEST_URI"] 154: url = (@env["SCRIPT_NAME"] || File.expand_path($0)).dup 155: url << @env["PATH_INFO"].to_s 156: url = WEBrick::HTTPUtils.escape_path(url) 157: if query_string = @env["QUERY_STRING"] 158: unless query_string.empty? 159: url << "?" << query_string 160: end 161: end 162: end 163: # we cannot get real HTTP version of client ;) 164: httpv = @config[:HTTPVersion] 165: return "#{meth} #{url} HTTP/#{httpv}" 166: end