diff options
author | Jari Vetoniemi <jari.vetoniemi@indooratlas.com> | 2020-03-16 18:49:26 +0900 |
---|---|---|
committer | Jari Vetoniemi <jari.vetoniemi@indooratlas.com> | 2020-03-30 00:39:06 +0900 |
commit | fcbf63e62c627deae76c1b8cb8c0876c536ed811 (patch) | |
tree | 64cb17de3f41a2b6fef2368028fbd00349946994 /jni/ruby/sample/webrick |
Fresh start
Diffstat (limited to 'jni/ruby/sample/webrick')
-rw-r--r-- | jni/ruby/sample/webrick/demo-app.rb | 66 | ||||
-rw-r--r-- | jni/ruby/sample/webrick/demo-multipart.cgi | 12 | ||||
-rw-r--r-- | jni/ruby/sample/webrick/demo-servlet.rb | 6 | ||||
-rw-r--r-- | jni/ruby/sample/webrick/demo-urlencoded.cgi | 12 | ||||
-rw-r--r-- | jni/ruby/sample/webrick/hello.cgi | 11 | ||||
-rw-r--r-- | jni/ruby/sample/webrick/hello.rb | 8 | ||||
-rw-r--r-- | jni/ruby/sample/webrick/httpd.rb | 23 | ||||
-rw-r--r-- | jni/ruby/sample/webrick/httpproxy.rb | 25 | ||||
-rw-r--r-- | jni/ruby/sample/webrick/httpsd.rb | 33 |
9 files changed, 196 insertions, 0 deletions
diff --git a/jni/ruby/sample/webrick/demo-app.rb b/jni/ruby/sample/webrick/demo-app.rb new file mode 100644 index 0000000..c7a2a0a --- /dev/null +++ b/jni/ruby/sample/webrick/demo-app.rb @@ -0,0 +1,66 @@ +require "pp" + +module DemoApplication + def initialize(config, enctype) + super + @enctype = enctype + end + + def do_GET(req, res) + if req.path_info != "/" + res.set_redirect(WEBrick::HTTPStatus::Found, req.script_name + "/") + end + res.body =<<-_end_of_html_ + <HTML> + <FORM method="POST" enctype=#{@enctype}> + text: <INPUT type="text" name="text"><BR> + file: <INPUT type="file" name="file"><BR> + check: + <INPUT type="checkbox" name="check" value="a">a, + <INPUT type="checkbox" name="check" value="b">b, + <INPUT type="checkbox" name="check" value="c">c, + <BR> + <INPUT type="submit"> + </FORM> + </HTML> + _end_of_html_ + res['content-type'] = 'text/html; charset=iso-8859-1' + end + + def do_POST(req, res) + if req["content-length"].to_i > 1024*10 + raise WEBrick::HTTPStatus::Forbidden, "file size too large" + end + res.body =<<-_end_of_html_ + <HTML> + <H2>Query Parameters</H2> + #{display_query(req.query)} + <A href="#{req.path}">return</A> + <H2>Request</H2> + <PRE>#{WEBrick::HTMLUtils::escape(PP::pp(req, "", 80))}</PRE> + <H2>Response</H2> + <PRE>#{WEBrick::HTMLUtils::escape(PP::pp(res, "", 80))}</PRE> + </HTML> + _end_of_html_ + res['content-type'] = 'text/html; charset=iso-8859-1' + end + + private + + def display_query(q) + ret = "" + q.each{|key, val| + ret << "<H3>#{WEBrick::HTMLUtils::escape(key)}</H3>" + ret << "<TABLE border=1>" + ret << make_tr("val", val.inspect) + ret << make_tr("val.to_a", val.to_a.inspect) + ret << make_tr("val.to_ary", val.to_ary.inspect) + ret << "</TABLE>" + } + ret + end + + def make_tr(arg0, arg1) + "<TR><TD>#{arg0}</TD><TD>#{WEBrick::HTMLUtils::escape(arg1)}</TD></TR>" + end +end diff --git a/jni/ruby/sample/webrick/demo-multipart.cgi b/jni/ruby/sample/webrick/demo-multipart.cgi new file mode 100644 index 0000000..0893fad --- /dev/null +++ b/jni/ruby/sample/webrick/demo-multipart.cgi @@ -0,0 +1,12 @@ +#!/usr/bin/env ruby +require "webrick/cgi" +require "webrick/https" # should load if it runs on HTTPS server +require "./demo-app" + +class DemoCGI < WEBrick::CGI + include DemoApplication +end + +config = { :NPH => false } +cgi = DemoCGI.new(config, "multipart/form-data") +cgi.start diff --git a/jni/ruby/sample/webrick/demo-servlet.rb b/jni/ruby/sample/webrick/demo-servlet.rb new file mode 100644 index 0000000..9c18cc6 --- /dev/null +++ b/jni/ruby/sample/webrick/demo-servlet.rb @@ -0,0 +1,6 @@ +require "webrick" +require "./demo-app" + +class DemoServlet < WEBrick::HTTPServlet::AbstractServlet + include DemoApplication +end diff --git a/jni/ruby/sample/webrick/demo-urlencoded.cgi b/jni/ruby/sample/webrick/demo-urlencoded.cgi new file mode 100644 index 0000000..e4706f8 --- /dev/null +++ b/jni/ruby/sample/webrick/demo-urlencoded.cgi @@ -0,0 +1,12 @@ +#!/usr/bin/env ruby +require "webrick/cgi" +require "webrick/https" # should load if it runs on HTTPS server +require "./demo-app" + +class DemoCGI < WEBrick::CGI + include DemoApplication +end + +config = { :NPH => false } +cgi = DemoCGI.new(config, "application/x-www-form-urlencoded") +cgi.start diff --git a/jni/ruby/sample/webrick/hello.cgi b/jni/ruby/sample/webrick/hello.cgi new file mode 100644 index 0000000..35d2240 --- /dev/null +++ b/jni/ruby/sample/webrick/hello.cgi @@ -0,0 +1,11 @@ +#!/usr/bin/env ruby +require "webrick/cgi" + +class HelloCGI < WEBrick::CGI + def do_GET(req, res) + res["content-type"] = "text/plain" + res.body = "Hello, world.\n" + end +end + +HelloCGI.new.start diff --git a/jni/ruby/sample/webrick/hello.rb b/jni/ruby/sample/webrick/hello.rb new file mode 100644 index 0000000..4d02676 --- /dev/null +++ b/jni/ruby/sample/webrick/hello.rb @@ -0,0 +1,8 @@ +require "webrick" + +class HelloServlet < WEBrick::HTTPServlet::AbstractServlet + def do_GET(req, res) + res["content-type"] = "text/plain" + res.body = "Hello, world.\n" + end +end diff --git a/jni/ruby/sample/webrick/httpd.rb b/jni/ruby/sample/webrick/httpd.rb new file mode 100644 index 0000000..b0edf47 --- /dev/null +++ b/jni/ruby/sample/webrick/httpd.rb @@ -0,0 +1,23 @@ +require "webrick" + +httpd = WEBrick::HTTPServer.new( + :DocumentRoot => File::dirname(__FILE__), + :Port => 10080, + :Logger => WEBrick::Log.new($stderr, WEBrick::Log::DEBUG), + :AccessLog => [ + [ $stderr, WEBrick::AccessLog::COMMON_LOG_FORMAT ], + [ $stderr, WEBrick::AccessLog::REFERER_LOG_FORMAT ], + [ $stderr, WEBrick::AccessLog::AGENT_LOG_FORMAT ], + ], + :CGIPathEnv => ENV["PATH"] # PATH environment variable for CGI. +) + +require "./hello" +httpd.mount("/hello", HelloServlet) + +require "./demo-servlet" +httpd.mount("/urlencoded", DemoServlet, "application/x-www-form-urlencoded") +httpd.mount("/multipart", DemoServlet, "multipart/form-data") + +trap(:INT){ httpd.shutdown } +httpd.start diff --git a/jni/ruby/sample/webrick/httpproxy.rb b/jni/ruby/sample/webrick/httpproxy.rb new file mode 100644 index 0000000..c84457e --- /dev/null +++ b/jni/ruby/sample/webrick/httpproxy.rb @@ -0,0 +1,25 @@ +require "webrick" +require "webrick/httpproxy" + +# The :ProxyContentHandler proc will be invoked before sending a response to +# the User-Agent. You can inspect the pair of request and response messages +# (or edit the response message if necessary). + +pch = Proc.new{|req, res| + p [ req.request_line, res.status_line ] +} + +def upstream_proxy + if prx = ENV["http_proxy"] + return URI.parse(prx) + end + return nil +end + +httpd = WEBrick::HTTPProxyServer.new( + :Port => 10080, + :ProxyContentHandler => pch, + :ProxyURI => upstream_proxy +) +Signal.trap(:INT){ httpd.shutdown } +httpd.start diff --git a/jni/ruby/sample/webrick/httpsd.rb b/jni/ruby/sample/webrick/httpsd.rb new file mode 100644 index 0000000..a120782 --- /dev/null +++ b/jni/ruby/sample/webrick/httpsd.rb @@ -0,0 +1,33 @@ +require "webrick" +require "webrick/https" + +hostname = WEBrick::Utils::getservername +subject = [["O", "ruby-lang.org"], ["OU", "sample"], ["CN", hostname]] +comment = "Comment for self-signed certificate" + +httpd = WEBrick::HTTPServer.new( + :DocumentRoot => File::dirname(__FILE__), + :Port => 10443, + :SSLEnable => true, + + # Specify key pair and server certificate. + # :SSLPrivateKey => OpenSSL::PKey::RSA.new(File.read("server.key")), + # :SSLCertificate => OpenSSL::X509::Certificate.new(File.read("server.crt")), + + # specify the following SSL options if you want to use auto + # generated self-signed certificate. + :SSLCertName => subject, + :SSLComment => comment, + + :CGIPathEnv => ENV["PATH"] # PATH environment variable for CGI. +) + +require "./hello" +httpd.mount("/hello", HelloServlet) + +require "./demo-servlet" +httpd.mount("/urlencoded", DemoServlet, "application/x-www-form-urlencoded") +httpd.mount("/multipart", DemoServlet, "multipart/form-data") + +trap(:INT){ httpd.shutdown } +httpd.start |