| 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