Class WEBrick::CGI::Socket
In: lib/webrick/cgi.rb
Parent: Object

Methods

<<   add_header   addr   cert   cipher   each   gets   input   new   peer_cert   peer_cert_chain   peeraddr   read   request_line   setup_header  

Included Modules

Enumerable

Public Class methods

[Source]

     # 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

Public Instance methods

[Source]

     # File lib/webrick/cgi.rb, line 212
212:       def <<(data)
213:         @out_port << data
214:       end

[Source]

     # File lib/webrick/cgi.rb, line 196
196:       def addr
197:         [nil, @server_port, @server_name, @server_addr]
198:       end

[Source]

     # 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

[Source]

     # 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

[Source]

     # File lib/webrick/cgi.rb, line 208
208:       def each
209:         input.each{|line| yield(line) }
210:       end

[Source]

     # File lib/webrick/cgi.rb, line 200
200:       def gets(eol=LF)
201:         input.gets(eol)
202:       end

[Source]

     # 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

[Source]

     # 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

[Source]

     # File lib/webrick/cgi.rb, line 192
192:       def peeraddr
193:         [nil, @remote_port, @remote_host, @remote_addr]
194:       end

[Source]

     # File lib/webrick/cgi.rb, line 204
204:       def read(size=nil)
205:         input.read(size)
206:       end

Private Instance methods

[Source]

     # 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

[Source]

     # File lib/webrick/cgi.rb, line 186
186:       def input
187:         @header_part.eof? ? @body_part : @header_part
188:       end

[Source]

     # 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

[Source]

     # File lib/webrick/cgi.rb, line 168
168:       def setup_header
169:         add_header("CONTENT_TYPE", "Content-Type")
170:         add_header("CONTENT_LENGTH", "Content-length")
171:         @env.each_key{|name|
172:           if /^HTTP_(.*)/ =~ name
173:             add_header(name, $1.gsub(/_/, "-"))
174:           end
175:         }
176:       end

[Validate]