ruby_on_ruby 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +18 -0
- data/.rvmrc +1 -0
- data/Gemfile +6 -0
- data/LICENSE +22 -0
- data/README.md +66 -0
- data/Rakefile +1 -0
- data/lib/ruby_on_ruby.rb +5 -0
- data/lib/ruby_on_ruby/console.rb +7 -0
- data/lib/ruby_on_ruby/context.rb +33 -0
- data/lib/ruby_on_ruby/file_loader.rb +31 -0
- data/lib/ruby_on_ruby/ruby_stream.rb +27 -0
- data/lib/ruby_on_ruby/version.rb +3 -0
- data/lib/rubyonruby.rb +1 -0
- data/ruby_in_ruby.gemspec +19 -0
- data/vendor/javascripts/emscripted-ruby/lib/.document +106 -0
- data/vendor/javascripts/emscripted-ruby/lib/English.rb +155 -0
- data/vendor/javascripts/emscripted-ruby/lib/Env.rb +18 -0
- data/vendor/javascripts/emscripted-ruby/lib/README +96 -0
- data/vendor/javascripts/emscripted-ruby/lib/abbrev.rb +103 -0
- data/vendor/javascripts/emscripted-ruby/lib/base64.rb +133 -0
- data/vendor/javascripts/emscripted-ruby/lib/benchmark.rb +572 -0
- data/vendor/javascripts/emscripted-ruby/lib/cgi-lib.rb +272 -0
- data/vendor/javascripts/emscripted-ruby/lib/cgi.rb +2308 -0
- data/vendor/javascripts/emscripted-ruby/lib/cgi/.document +2 -0
- data/vendor/javascripts/emscripted-ruby/lib/cgi/session.rb +498 -0
- data/vendor/javascripts/emscripted-ruby/lib/cgi/session/pstore.rb +111 -0
- data/vendor/javascripts/emscripted-ruby/lib/complex.rb +663 -0
- data/vendor/javascripts/emscripted-ruby/lib/csv.rb +992 -0
- data/vendor/javascripts/emscripted-ruby/lib/date.rb +1767 -0
- data/vendor/javascripts/emscripted-ruby/lib/date/format.rb +1190 -0
- data/vendor/javascripts/emscripted-ruby/lib/date2.rb +5 -0
- data/vendor/javascripts/emscripted-ruby/lib/debug.rb +947 -0
- data/vendor/javascripts/emscripted-ruby/lib/delegate.rb +337 -0
- data/vendor/javascripts/emscripted-ruby/lib/drb.rb +2 -0
- data/vendor/javascripts/emscripted-ruby/lib/drb/acl.rb +146 -0
- data/vendor/javascripts/emscripted-ruby/lib/drb/drb.rb +1782 -0
- data/vendor/javascripts/emscripted-ruby/lib/drb/eq.rb +16 -0
- data/vendor/javascripts/emscripted-ruby/lib/drb/extserv.rb +64 -0
- data/vendor/javascripts/emscripted-ruby/lib/drb/extservm.rb +89 -0
- data/vendor/javascripts/emscripted-ruby/lib/drb/gw.rb +122 -0
- data/vendor/javascripts/emscripted-ruby/lib/drb/invokemethod.rb +36 -0
- data/vendor/javascripts/emscripted-ruby/lib/drb/observer.rb +22 -0
- data/vendor/javascripts/emscripted-ruby/lib/drb/ssl.rb +190 -0
- data/vendor/javascripts/emscripted-ruby/lib/drb/timeridconv.rb +91 -0
- data/vendor/javascripts/emscripted-ruby/lib/drb/unix.rb +108 -0
- data/vendor/javascripts/emscripted-ruby/lib/e2mmap.rb +195 -0
- data/vendor/javascripts/emscripted-ruby/lib/erb.rb +880 -0
- data/vendor/javascripts/emscripted-ruby/lib/eregex.rb +37 -0
- data/vendor/javascripts/emscripted-ruby/lib/fileutils.rb +1591 -0
- data/vendor/javascripts/emscripted-ruby/lib/finalize.rb +193 -0
- data/vendor/javascripts/emscripted-ruby/lib/find.rb +79 -0
- data/vendor/javascripts/emscripted-ruby/lib/forwardable.rb +218 -0
- data/vendor/javascripts/emscripted-ruby/lib/ftools.rb +261 -0
- data/vendor/javascripts/emscripted-ruby/lib/generator.rb +418 -0
- data/vendor/javascripts/emscripted-ruby/lib/getoptlong.rb +621 -0
- data/vendor/javascripts/emscripted-ruby/lib/getopts.rb +127 -0
- data/vendor/javascripts/emscripted-ruby/lib/gserver.rb +253 -0
- data/vendor/javascripts/emscripted-ruby/lib/importenv.rb +33 -0
- data/vendor/javascripts/emscripted-ruby/lib/ipaddr.rb +814 -0
- data/vendor/javascripts/emscripted-ruby/lib/irb.rb +346 -0
- data/vendor/javascripts/emscripted-ruby/lib/irb/cmd/chws.rb +33 -0
- data/vendor/javascripts/emscripted-ruby/lib/irb/cmd/fork.rb +39 -0
- data/vendor/javascripts/emscripted-ruby/lib/irb/cmd/help.rb +34 -0
- data/vendor/javascripts/emscripted-ruby/lib/irb/cmd/load.rb +67 -0
- data/vendor/javascripts/emscripted-ruby/lib/irb/cmd/nop.rb +39 -0
- data/vendor/javascripts/emscripted-ruby/lib/irb/cmd/pushws.rb +39 -0
- data/vendor/javascripts/emscripted-ruby/lib/irb/cmd/subirb.rb +43 -0
- data/vendor/javascripts/emscripted-ruby/lib/irb/completion.rb +205 -0
- data/vendor/javascripts/emscripted-ruby/lib/irb/context.rb +255 -0
- data/vendor/javascripts/emscripted-ruby/lib/irb/ext/change-ws.rb +62 -0
- data/vendor/javascripts/emscripted-ruby/lib/irb/ext/history.rb +110 -0
- data/vendor/javascripts/emscripted-ruby/lib/irb/ext/loader.rb +120 -0
- data/vendor/javascripts/emscripted-ruby/lib/irb/ext/math-mode.rb +37 -0
- data/vendor/javascripts/emscripted-ruby/lib/irb/ext/multi-irb.rb +241 -0
- data/vendor/javascripts/emscripted-ruby/lib/irb/ext/save-history.rb +85 -0
- data/vendor/javascripts/emscripted-ruby/lib/irb/ext/tracer.rb +61 -0
- data/vendor/javascripts/emscripted-ruby/lib/irb/ext/use-loader.rb +65 -0
- data/vendor/javascripts/emscripted-ruby/lib/irb/ext/workspaces.rb +56 -0
- data/vendor/javascripts/emscripted-ruby/lib/irb/extend-command.rb +264 -0
- data/vendor/javascripts/emscripted-ruby/lib/irb/frame.rb +67 -0
- data/vendor/javascripts/emscripted-ruby/lib/irb/help.rb +33 -0
- data/vendor/javascripts/emscripted-ruby/lib/irb/init.rb +259 -0
- data/vendor/javascripts/emscripted-ruby/lib/irb/input-method.rb +120 -0
- data/vendor/javascripts/emscripted-ruby/lib/irb/lc/error.rb +30 -0
- data/vendor/javascripts/emscripted-ruby/lib/irb/lc/help-message +35 -0
- data/vendor/javascripts/emscripted-ruby/lib/irb/lc/ja/error.rb +27 -0
- data/vendor/javascripts/emscripted-ruby/lib/irb/lc/ja/help-message +36 -0
- data/vendor/javascripts/emscripted-ruby/lib/irb/locale.rb +184 -0
- data/vendor/javascripts/emscripted-ruby/lib/irb/notifier.rb +145 -0
- data/vendor/javascripts/emscripted-ruby/lib/irb/output-method.rb +85 -0
- data/vendor/javascripts/emscripted-ruby/lib/irb/ruby-lex.rb +1149 -0
- data/vendor/javascripts/emscripted-ruby/lib/irb/ruby-token.rb +273 -0
- data/vendor/javascripts/emscripted-ruby/lib/irb/slex.rb +285 -0
- data/vendor/javascripts/emscripted-ruby/lib/irb/version.rb +16 -0
- data/vendor/javascripts/emscripted-ruby/lib/irb/workspace.rb +107 -0
- data/vendor/javascripts/emscripted-ruby/lib/irb/ws-for-case-2.rb +15 -0
- data/vendor/javascripts/emscripted-ruby/lib/irb/xmp.rb +86 -0
- data/vendor/javascripts/emscripted-ruby/lib/jcode.rb +220 -0
- data/vendor/javascripts/emscripted-ruby/lib/logger.rb +703 -0
- data/vendor/javascripts/emscripted-ruby/lib/mailread.rb +62 -0
- data/vendor/javascripts/emscripted-ruby/lib/mathn.rb +308 -0
- data/vendor/javascripts/emscripted-ruby/lib/matrix.rb +1278 -0
- data/vendor/javascripts/emscripted-ruby/lib/mkmf.rb +1811 -0
- data/vendor/javascripts/emscripted-ruby/lib/monitor.rb +352 -0
- data/vendor/javascripts/emscripted-ruby/lib/mutex_m.rb +122 -0
- data/vendor/javascripts/emscripted-ruby/lib/net/ftp.rb +927 -0
- data/vendor/javascripts/emscripted-ruby/lib/net/http.rb +2277 -0
- data/vendor/javascripts/emscripted-ruby/lib/net/https.rb +173 -0
- data/vendor/javascripts/emscripted-ruby/lib/net/imap.rb +3371 -0
- data/vendor/javascripts/emscripted-ruby/lib/net/pop.rb +999 -0
- data/vendor/javascripts/emscripted-ruby/lib/net/protocol.rb +392 -0
- data/vendor/javascripts/emscripted-ruby/lib/net/smtp.rb +1014 -0
- data/vendor/javascripts/emscripted-ruby/lib/net/telnet.rb +756 -0
- data/vendor/javascripts/emscripted-ruby/lib/observer.rb +192 -0
- data/vendor/javascripts/emscripted-ruby/lib/open-uri.rb +678 -0
- data/vendor/javascripts/emscripted-ruby/lib/open3.rb +101 -0
- data/vendor/javascripts/emscripted-ruby/lib/optparse.rb +1790 -0
- data/vendor/javascripts/emscripted-ruby/lib/optparse/date.rb +17 -0
- data/vendor/javascripts/emscripted-ruby/lib/optparse/shellwords.rb +6 -0
- data/vendor/javascripts/emscripted-ruby/lib/optparse/time.rb +10 -0
- data/vendor/javascripts/emscripted-ruby/lib/optparse/uri.rb +6 -0
- data/vendor/javascripts/emscripted-ruby/lib/optparse/version.rb +70 -0
- data/vendor/javascripts/emscripted-ruby/lib/ostruct.rb +146 -0
- data/vendor/javascripts/emscripted-ruby/lib/parsearg.rb +87 -0
- data/vendor/javascripts/emscripted-ruby/lib/parsedate.rb +53 -0
- data/vendor/javascripts/emscripted-ruby/lib/pathname.rb +1062 -0
- data/vendor/javascripts/emscripted-ruby/lib/ping.rb +64 -0
- data/vendor/javascripts/emscripted-ruby/lib/pp.rb +654 -0
- data/vendor/javascripts/emscripted-ruby/lib/prettyprint.rb +896 -0
- data/vendor/javascripts/emscripted-ruby/lib/profile.rb +6 -0
- data/vendor/javascripts/emscripted-ruby/lib/profiler.rb +59 -0
- data/vendor/javascripts/emscripted-ruby/lib/pstore.rb +395 -0
- data/vendor/javascripts/emscripted-ruby/lib/racc/parser.rb +442 -0
- data/vendor/javascripts/emscripted-ruby/lib/rational.rb +564 -0
- data/vendor/javascripts/emscripted-ruby/lib/readbytes.rb +41 -0
- data/vendor/javascripts/emscripted-ruby/lib/resolv-replace.rb +62 -0
- data/vendor/javascripts/emscripted-ruby/lib/resolv.rb +2210 -0
- data/vendor/javascripts/emscripted-ruby/lib/rexml/attlistdecl.rb +62 -0
- data/vendor/javascripts/emscripted-ruby/lib/rexml/attribute.rb +185 -0
- data/vendor/javascripts/emscripted-ruby/lib/rexml/cdata.rb +67 -0
- data/vendor/javascripts/emscripted-ruby/lib/rexml/child.rb +96 -0
- data/vendor/javascripts/emscripted-ruby/lib/rexml/comment.rb +80 -0
- data/vendor/javascripts/emscripted-ruby/lib/rexml/doctype.rb +271 -0
- data/vendor/javascripts/emscripted-ruby/lib/rexml/document.rb +208 -0
- data/vendor/javascripts/emscripted-ruby/lib/rexml/dtd/attlistdecl.rb +10 -0
- data/vendor/javascripts/emscripted-ruby/lib/rexml/dtd/dtd.rb +51 -0
- data/vendor/javascripts/emscripted-ruby/lib/rexml/dtd/elementdecl.rb +17 -0
- data/vendor/javascripts/emscripted-ruby/lib/rexml/dtd/entitydecl.rb +56 -0
- data/vendor/javascripts/emscripted-ruby/lib/rexml/dtd/notationdecl.rb +39 -0
- data/vendor/javascripts/emscripted-ruby/lib/rexml/element.rb +1227 -0
- data/vendor/javascripts/emscripted-ruby/lib/rexml/encoding.rb +71 -0
- data/vendor/javascripts/emscripted-ruby/lib/rexml/encodings/CP-1252.rb +103 -0
- data/vendor/javascripts/emscripted-ruby/lib/rexml/encodings/EUC-JP.rb +35 -0
- data/vendor/javascripts/emscripted-ruby/lib/rexml/encodings/ICONV.rb +22 -0
- data/vendor/javascripts/emscripted-ruby/lib/rexml/encodings/ISO-8859-1.rb +7 -0
- data/vendor/javascripts/emscripted-ruby/lib/rexml/encodings/ISO-8859-15.rb +72 -0
- data/vendor/javascripts/emscripted-ruby/lib/rexml/encodings/SHIFT-JIS.rb +37 -0
- data/vendor/javascripts/emscripted-ruby/lib/rexml/encodings/SHIFT_JIS.rb +1 -0
- data/vendor/javascripts/emscripted-ruby/lib/rexml/encodings/UNILE.rb +34 -0
- data/vendor/javascripts/emscripted-ruby/lib/rexml/encodings/US-ASCII.rb +30 -0
- data/vendor/javascripts/emscripted-ruby/lib/rexml/encodings/UTF-16.rb +35 -0
- data/vendor/javascripts/emscripted-ruby/lib/rexml/encodings/UTF-8.rb +18 -0
- data/vendor/javascripts/emscripted-ruby/lib/rexml/entity.rb +165 -0
- data/vendor/javascripts/emscripted-ruby/lib/rexml/formatters/default.rb +109 -0
- data/vendor/javascripts/emscripted-ruby/lib/rexml/formatters/pretty.rb +137 -0
- data/vendor/javascripts/emscripted-ruby/lib/rexml/formatters/transitive.rb +56 -0
- data/vendor/javascripts/emscripted-ruby/lib/rexml/functions.rb +382 -0
- data/vendor/javascripts/emscripted-ruby/lib/rexml/instruction.rb +70 -0
- data/vendor/javascripts/emscripted-ruby/lib/rexml/light/node.rb +196 -0
- data/vendor/javascripts/emscripted-ruby/lib/rexml/namespace.rb +47 -0
- data/vendor/javascripts/emscripted-ruby/lib/rexml/node.rb +75 -0
- data/vendor/javascripts/emscripted-ruby/lib/rexml/output.rb +24 -0
- data/vendor/javascripts/emscripted-ruby/lib/rexml/parent.rb +166 -0
- data/vendor/javascripts/emscripted-ruby/lib/rexml/parseexception.rb +51 -0
- data/vendor/javascripts/emscripted-ruby/lib/rexml/parsers/baseparser.rb +503 -0
- data/vendor/javascripts/emscripted-ruby/lib/rexml/parsers/lightparser.rb +60 -0
- data/vendor/javascripts/emscripted-ruby/lib/rexml/parsers/pullparser.rb +196 -0
- data/vendor/javascripts/emscripted-ruby/lib/rexml/parsers/sax2parser.rb +238 -0
- data/vendor/javascripts/emscripted-ruby/lib/rexml/parsers/streamparser.rb +46 -0
- data/vendor/javascripts/emscripted-ruby/lib/rexml/parsers/treeparser.rb +97 -0
- data/vendor/javascripts/emscripted-ruby/lib/rexml/parsers/ultralightparser.rb +56 -0
- data/vendor/javascripts/emscripted-ruby/lib/rexml/parsers/xpathparser.rb +698 -0
- data/vendor/javascripts/emscripted-ruby/lib/rexml/quickpath.rb +266 -0
- data/vendor/javascripts/emscripted-ruby/lib/rexml/rexml.rb +32 -0
- data/vendor/javascripts/emscripted-ruby/lib/rexml/sax2listener.rb +97 -0
- data/vendor/javascripts/emscripted-ruby/lib/rexml/source.rb +251 -0
- data/vendor/javascripts/emscripted-ruby/lib/rexml/streamlistener.rb +92 -0
- data/vendor/javascripts/emscripted-ruby/lib/rexml/syncenumerator.rb +33 -0
- data/vendor/javascripts/emscripted-ruby/lib/rexml/text.rb +344 -0
- data/vendor/javascripts/emscripted-ruby/lib/rexml/undefinednamespaceexception.rb +8 -0
- data/vendor/javascripts/emscripted-ruby/lib/rexml/validation/relaxng.rb +559 -0
- data/vendor/javascripts/emscripted-ruby/lib/rexml/validation/validation.rb +155 -0
- data/vendor/javascripts/emscripted-ruby/lib/rexml/validation/validationexception.rb +9 -0
- data/vendor/javascripts/emscripted-ruby/lib/rexml/xmldecl.rb +119 -0
- data/vendor/javascripts/emscripted-ruby/lib/rexml/xmltokens.rb +18 -0
- data/vendor/javascripts/emscripted-ruby/lib/rexml/xpath.rb +66 -0
- data/vendor/javascripts/emscripted-ruby/lib/rexml/xpath_parser.rb +792 -0
- data/vendor/javascripts/emscripted-ruby/lib/rinda/rinda.rb +283 -0
- data/vendor/javascripts/emscripted-ruby/lib/rinda/ring.rb +271 -0
- data/vendor/javascripts/emscripted-ruby/lib/rinda/tuplespace.rb +642 -0
- data/vendor/javascripts/emscripted-ruby/lib/rss.rb +19 -0
- data/vendor/javascripts/emscripted-ruby/lib/rss/0.9.rb +428 -0
- data/vendor/javascripts/emscripted-ruby/lib/rss/1.0.rb +452 -0
- data/vendor/javascripts/emscripted-ruby/lib/rss/2.0.rb +111 -0
- data/vendor/javascripts/emscripted-ruby/lib/rss/atom.rb +749 -0
- data/vendor/javascripts/emscripted-ruby/lib/rss/content.rb +31 -0
- data/vendor/javascripts/emscripted-ruby/lib/rss/content/1.0.rb +10 -0
- data/vendor/javascripts/emscripted-ruby/lib/rss/content/2.0.rb +12 -0
- data/vendor/javascripts/emscripted-ruby/lib/rss/converter.rb +162 -0
- data/vendor/javascripts/emscripted-ruby/lib/rss/dublincore.rb +161 -0
- data/vendor/javascripts/emscripted-ruby/lib/rss/dublincore/1.0.rb +13 -0
- data/vendor/javascripts/emscripted-ruby/lib/rss/dublincore/2.0.rb +13 -0
- data/vendor/javascripts/emscripted-ruby/lib/rss/dublincore/atom.rb +17 -0
- data/vendor/javascripts/emscripted-ruby/lib/rss/image.rb +193 -0
- data/vendor/javascripts/emscripted-ruby/lib/rss/itunes.rb +410 -0
- data/vendor/javascripts/emscripted-ruby/lib/rss/maker.rb +44 -0
- data/vendor/javascripts/emscripted-ruby/lib/rss/maker/0.9.rb +467 -0
- data/vendor/javascripts/emscripted-ruby/lib/rss/maker/1.0.rb +434 -0
- data/vendor/javascripts/emscripted-ruby/lib/rss/maker/2.0.rb +223 -0
- data/vendor/javascripts/emscripted-ruby/lib/rss/maker/atom.rb +172 -0
- data/vendor/javascripts/emscripted-ruby/lib/rss/maker/base.rb +868 -0
- data/vendor/javascripts/emscripted-ruby/lib/rss/maker/content.rb +21 -0
- data/vendor/javascripts/emscripted-ruby/lib/rss/maker/dublincore.rb +124 -0
- data/vendor/javascripts/emscripted-ruby/lib/rss/maker/entry.rb +163 -0
- data/vendor/javascripts/emscripted-ruby/lib/rss/maker/feed.rb +429 -0
- data/vendor/javascripts/emscripted-ruby/lib/rss/maker/image.rb +111 -0
- data/vendor/javascripts/emscripted-ruby/lib/rss/maker/itunes.rb +242 -0
- data/vendor/javascripts/emscripted-ruby/lib/rss/maker/slash.rb +33 -0
- data/vendor/javascripts/emscripted-ruby/lib/rss/maker/syndication.rb +18 -0
- data/vendor/javascripts/emscripted-ruby/lib/rss/maker/taxonomy.rb +118 -0
- data/vendor/javascripts/emscripted-ruby/lib/rss/maker/trackback.rb +61 -0
- data/vendor/javascripts/emscripted-ruby/lib/rss/parser.rb +541 -0
- data/vendor/javascripts/emscripted-ruby/lib/rss/rexmlparser.rb +54 -0
- data/vendor/javascripts/emscripted-ruby/lib/rss/rss.rb +1312 -0
- data/vendor/javascripts/emscripted-ruby/lib/rss/slash.rb +49 -0
- data/vendor/javascripts/emscripted-ruby/lib/rss/syndication.rb +67 -0
- data/vendor/javascripts/emscripted-ruby/lib/rss/taxonomy.rb +145 -0
- data/vendor/javascripts/emscripted-ruby/lib/rss/trackback.rb +288 -0
- data/vendor/javascripts/emscripted-ruby/lib/rss/utils.rb +111 -0
- data/vendor/javascripts/emscripted-ruby/lib/rss/xml-stylesheet.rb +105 -0
- data/vendor/javascripts/emscripted-ruby/lib/rss/xml.rb +71 -0
- data/vendor/javascripts/emscripted-ruby/lib/rss/xmlparser.rb +93 -0
- data/vendor/javascripts/emscripted-ruby/lib/rss/xmlscanner.rb +121 -0
- data/vendor/javascripts/emscripted-ruby/lib/rubyunit.rb +6 -0
- data/vendor/javascripts/emscripted-ruby/lib/runit/assert.rb +73 -0
- data/vendor/javascripts/emscripted-ruby/lib/runit/cui/testrunner.rb +51 -0
- data/vendor/javascripts/emscripted-ruby/lib/runit/error.rb +9 -0
- data/vendor/javascripts/emscripted-ruby/lib/runit/testcase.rb +45 -0
- data/vendor/javascripts/emscripted-ruby/lib/runit/testresult.rb +44 -0
- data/vendor/javascripts/emscripted-ruby/lib/runit/testsuite.rb +26 -0
- data/vendor/javascripts/emscripted-ruby/lib/runit/topublic.rb +8 -0
- data/vendor/javascripts/emscripted-ruby/lib/scanf.rb +702 -0
- data/vendor/javascripts/emscripted-ruby/lib/securerandom.rb +137 -0
- data/vendor/javascripts/emscripted-ruby/lib/set.rb +1233 -0
- data/vendor/javascripts/emscripted-ruby/lib/shell.rb +269 -0
- data/vendor/javascripts/emscripted-ruby/lib/shell/builtin-command.rb +154 -0
- data/vendor/javascripts/emscripted-ruby/lib/shell/command-processor.rb +592 -0
- data/vendor/javascripts/emscripted-ruby/lib/shell/error.rb +26 -0
- data/vendor/javascripts/emscripted-ruby/lib/shell/filter.rb +110 -0
- data/vendor/javascripts/emscripted-ruby/lib/shell/process-controller.rb +260 -0
- data/vendor/javascripts/emscripted-ruby/lib/shell/system-command.rb +168 -0
- data/vendor/javascripts/emscripted-ruby/lib/shell/version.rb +16 -0
- data/vendor/javascripts/emscripted-ruby/lib/shellwords.rb +172 -0
- data/vendor/javascripts/emscripted-ruby/lib/singleton.rb +360 -0
- data/vendor/javascripts/emscripted-ruby/lib/soap/attachment.rb +107 -0
- data/vendor/javascripts/emscripted-ruby/lib/soap/baseData.rb +942 -0
- data/vendor/javascripts/emscripted-ruby/lib/soap/element.rb +258 -0
- data/vendor/javascripts/emscripted-ruby/lib/soap/encodingstyle/aspDotNetHandler.rb +213 -0
- data/vendor/javascripts/emscripted-ruby/lib/soap/encodingstyle/handler.rb +100 -0
- data/vendor/javascripts/emscripted-ruby/lib/soap/encodingstyle/literalHandler.rb +226 -0
- data/vendor/javascripts/emscripted-ruby/lib/soap/encodingstyle/soapHandler.rb +582 -0
- data/vendor/javascripts/emscripted-ruby/lib/soap/generator.rb +268 -0
- data/vendor/javascripts/emscripted-ruby/lib/soap/header/handler.rb +57 -0
- data/vendor/javascripts/emscripted-ruby/lib/soap/header/handlerset.rb +70 -0
- data/vendor/javascripts/emscripted-ruby/lib/soap/header/simplehandler.rb +44 -0
- data/vendor/javascripts/emscripted-ruby/lib/soap/httpconfigloader.rb +119 -0
- data/vendor/javascripts/emscripted-ruby/lib/soap/mapping.rb +10 -0
- data/vendor/javascripts/emscripted-ruby/lib/soap/mapping/factory.rb +355 -0
- data/vendor/javascripts/emscripted-ruby/lib/soap/mapping/mapping.rb +381 -0
- data/vendor/javascripts/emscripted-ruby/lib/soap/mapping/registry.rb +541 -0
- data/vendor/javascripts/emscripted-ruby/lib/soap/mapping/rubytypeFactory.rb +475 -0
- data/vendor/javascripts/emscripted-ruby/lib/soap/mapping/typeMap.rb +50 -0
- data/vendor/javascripts/emscripted-ruby/lib/soap/mapping/wsdlencodedregistry.rb +280 -0
- data/vendor/javascripts/emscripted-ruby/lib/soap/mapping/wsdlliteralregistry.rb +418 -0
- data/vendor/javascripts/emscripted-ruby/lib/soap/marshal.rb +59 -0
- data/vendor/javascripts/emscripted-ruby/lib/soap/mimemessage.rb +240 -0
- data/vendor/javascripts/emscripted-ruby/lib/soap/netHttpClient.rb +190 -0
- data/vendor/javascripts/emscripted-ruby/lib/soap/parser.rb +251 -0
- data/vendor/javascripts/emscripted-ruby/lib/soap/processor.rb +66 -0
- data/vendor/javascripts/emscripted-ruby/lib/soap/property.rb +333 -0
- data/vendor/javascripts/emscripted-ruby/lib/soap/rpc/cgistub.rb +206 -0
- data/vendor/javascripts/emscripted-ruby/lib/soap/rpc/driver.rb +254 -0
- data/vendor/javascripts/emscripted-ruby/lib/soap/rpc/element.rb +325 -0
- data/vendor/javascripts/emscripted-ruby/lib/soap/rpc/httpserver.rb +129 -0
- data/vendor/javascripts/emscripted-ruby/lib/soap/rpc/proxy.rb +497 -0
- data/vendor/javascripts/emscripted-ruby/lib/soap/rpc/router.rb +594 -0
- data/vendor/javascripts/emscripted-ruby/lib/soap/rpc/rpc.rb +25 -0
- data/vendor/javascripts/emscripted-ruby/lib/soap/rpc/soaplet.rb +162 -0
- data/vendor/javascripts/emscripted-ruby/lib/soap/rpc/standaloneServer.rb +43 -0
- data/vendor/javascripts/emscripted-ruby/lib/soap/soap.rb +140 -0
- data/vendor/javascripts/emscripted-ruby/lib/soap/streamHandler.rb +229 -0
- data/vendor/javascripts/emscripted-ruby/lib/soap/wsdlDriver.rb +575 -0
- data/vendor/javascripts/emscripted-ruby/lib/sync.rb +311 -0
- data/vendor/javascripts/emscripted-ruby/lib/tempfile.rb +209 -0
- data/vendor/javascripts/emscripted-ruby/lib/test/unit.rb +280 -0
- data/vendor/javascripts/emscripted-ruby/lib/test/unit/assertionfailederror.rb +14 -0
- data/vendor/javascripts/emscripted-ruby/lib/test/unit/assertions.rb +622 -0
- data/vendor/javascripts/emscripted-ruby/lib/test/unit/autorunner.rb +220 -0
- data/vendor/javascripts/emscripted-ruby/lib/test/unit/collector.rb +43 -0
- data/vendor/javascripts/emscripted-ruby/lib/test/unit/collector/dir.rb +107 -0
- data/vendor/javascripts/emscripted-ruby/lib/test/unit/collector/objectspace.rb +34 -0
- data/vendor/javascripts/emscripted-ruby/lib/test/unit/error.rb +56 -0
- data/vendor/javascripts/emscripted-ruby/lib/test/unit/failure.rb +51 -0
- data/vendor/javascripts/emscripted-ruby/lib/test/unit/testcase.rb +160 -0
- data/vendor/javascripts/emscripted-ruby/lib/test/unit/testresult.rb +80 -0
- data/vendor/javascripts/emscripted-ruby/lib/test/unit/testsuite.rb +76 -0
- data/vendor/javascripts/emscripted-ruby/lib/test/unit/ui/console/testrunner.rb +127 -0
- data/vendor/javascripts/emscripted-ruby/lib/test/unit/ui/fox/testrunner.rb +268 -0
- data/vendor/javascripts/emscripted-ruby/lib/test/unit/ui/gtk/testrunner.rb +416 -0
- data/vendor/javascripts/emscripted-ruby/lib/test/unit/ui/gtk2/testrunner.rb +465 -0
- data/vendor/javascripts/emscripted-ruby/lib/test/unit/ui/testrunnermediator.rb +68 -0
- data/vendor/javascripts/emscripted-ruby/lib/test/unit/ui/testrunnerutilities.rb +46 -0
- data/vendor/javascripts/emscripted-ruby/lib/test/unit/ui/tk/testrunner.rb +260 -0
- data/vendor/javascripts/emscripted-ruby/lib/test/unit/util/backtracefilter.rb +40 -0
- data/vendor/javascripts/emscripted-ruby/lib/test/unit/util/observable.rb +90 -0
- data/vendor/javascripts/emscripted-ruby/lib/test/unit/util/procwrapper.rb +48 -0
- data/vendor/javascripts/emscripted-ruby/lib/thread.rb +479 -0
- data/vendor/javascripts/emscripted-ruby/lib/thwait.rb +169 -0
- data/vendor/javascripts/emscripted-ruby/lib/time.rb +797 -0
- data/vendor/javascripts/emscripted-ruby/lib/timeout.rb +122 -0
- data/vendor/javascripts/emscripted-ruby/lib/tmpdir.rb +130 -0
- data/vendor/javascripts/emscripted-ruby/lib/tracer.rb +167 -0
- data/vendor/javascripts/emscripted-ruby/lib/tsort.rb +290 -0
- data/vendor/javascripts/emscripted-ruby/lib/un.rb +235 -0
- data/vendor/javascripts/emscripted-ruby/lib/uri.rb +29 -0
- data/vendor/javascripts/emscripted-ruby/lib/uri/common.rb +611 -0
- data/vendor/javascripts/emscripted-ruby/lib/uri/ftp.rb +198 -0
- data/vendor/javascripts/emscripted-ruby/lib/uri/generic.rb +1122 -0
- data/vendor/javascripts/emscripted-ruby/lib/uri/http.rb +100 -0
- data/vendor/javascripts/emscripted-ruby/lib/uri/https.rb +20 -0
- data/vendor/javascripts/emscripted-ruby/lib/uri/ldap.rb +190 -0
- data/vendor/javascripts/emscripted-ruby/lib/uri/ldaps.rb +12 -0
- data/vendor/javascripts/emscripted-ruby/lib/uri/mailto.rb +266 -0
- data/vendor/javascripts/emscripted-ruby/lib/weakref.rb +100 -0
- data/vendor/javascripts/emscripted-ruby/lib/webrick.rb +29 -0
- data/vendor/javascripts/emscripted-ruby/lib/webrick/accesslog.rb +67 -0
- data/vendor/javascripts/emscripted-ruby/lib/webrick/cgi.rb +257 -0
- data/vendor/javascripts/emscripted-ruby/lib/webrick/compat.rb +15 -0
- data/vendor/javascripts/emscripted-ruby/lib/webrick/config.rb +97 -0
- data/vendor/javascripts/emscripted-ruby/lib/webrick/cookie.rb +110 -0
- data/vendor/javascripts/emscripted-ruby/lib/webrick/htmlutils.rb +25 -0
- data/vendor/javascripts/emscripted-ruby/lib/webrick/httpauth.rb +45 -0
- data/vendor/javascripts/emscripted-ruby/lib/webrick/httpauth/authenticator.rb +79 -0
- data/vendor/javascripts/emscripted-ruby/lib/webrick/httpauth/basicauth.rb +65 -0
- data/vendor/javascripts/emscripted-ruby/lib/webrick/httpauth/digestauth.rb +343 -0
- data/vendor/javascripts/emscripted-ruby/lib/webrick/httpauth/htdigest.rb +91 -0
- data/vendor/javascripts/emscripted-ruby/lib/webrick/httpauth/htgroup.rb +61 -0
- data/vendor/javascripts/emscripted-ruby/lib/webrick/httpauth/htpasswd.rb +83 -0
- data/vendor/javascripts/emscripted-ruby/lib/webrick/httpauth/userdb.rb +29 -0
- data/vendor/javascripts/emscripted-ruby/lib/webrick/httpproxy.rb +254 -0
- data/vendor/javascripts/emscripted-ruby/lib/webrick/httprequest.rb +365 -0
- data/vendor/javascripts/emscripted-ruby/lib/webrick/httpresponse.rb +327 -0
- data/vendor/javascripts/emscripted-ruby/lib/webrick/https.rb +63 -0
- data/vendor/javascripts/emscripted-ruby/lib/webrick/httpserver.rb +210 -0
- data/vendor/javascripts/emscripted-ruby/lib/webrick/httpservlet.rb +22 -0
- data/vendor/javascripts/emscripted-ruby/lib/webrick/httpservlet/abstract.rb +71 -0
- data/vendor/javascripts/emscripted-ruby/lib/webrick/httpservlet/cgi_runner.rb +47 -0
- data/vendor/javascripts/emscripted-ruby/lib/webrick/httpservlet/cgihandler.rb +108 -0
- data/vendor/javascripts/emscripted-ruby/lib/webrick/httpservlet/erbhandler.rb +54 -0
- data/vendor/javascripts/emscripted-ruby/lib/webrick/httpservlet/filehandler.rb +435 -0
- data/vendor/javascripts/emscripted-ruby/lib/webrick/httpservlet/prochandler.rb +33 -0
- data/vendor/javascripts/emscripted-ruby/lib/webrick/httpstatus.rb +126 -0
- data/vendor/javascripts/emscripted-ruby/lib/webrick/httputils.rb +399 -0
- data/vendor/javascripts/emscripted-ruby/lib/webrick/httpversion.rb +49 -0
- data/vendor/javascripts/emscripted-ruby/lib/webrick/log.rb +88 -0
- data/vendor/javascripts/emscripted-ruby/lib/webrick/server.rb +200 -0
- data/vendor/javascripts/emscripted-ruby/lib/webrick/ssl.rb +126 -0
- data/vendor/javascripts/emscripted-ruby/lib/webrick/utils.rb +100 -0
- data/vendor/javascripts/emscripted-ruby/lib/webrick/version.rb +13 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/binding.rb +65 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/data.rb +64 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/definitions.rb +250 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/documentation.rb +32 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/import.rb +80 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/importer.rb +38 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/info.rb +39 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/message.rb +54 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/operation.rb +130 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/operationBinding.rb +108 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/param.rb +85 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/parser.rb +163 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/part.rb +52 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/port.rb +84 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/portType.rb +73 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/service.rb +61 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/soap/address.rb +40 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/soap/binding.rb +49 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/soap/body.rb +56 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/soap/cgiStubCreator.rb +76 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/soap/classDefCreator.rb +314 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/soap/classDefCreatorSupport.rb +126 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/soap/clientSkeltonCreator.rb +78 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/soap/complexType.rb +161 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/soap/data.rb +42 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/soap/definitions.rb +149 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/soap/driverCreator.rb +95 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/soap/element.rb +28 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/soap/fault.rb +56 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/soap/header.rb +86 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/soap/headerfault.rb +56 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/soap/mappingRegistryCreator.rb +92 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/soap/methodDefCreator.rb +228 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/soap/operation.rb +122 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/soap/servantSkeltonCreator.rb +67 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/soap/standaloneServerStubCreator.rb +85 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/soap/wsdl2ruby.rb +176 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/types.rb +43 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/wsdl.rb +23 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/xmlSchema/all.rb +69 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/xmlSchema/annotation.rb +34 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/xmlSchema/any.rb +56 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/xmlSchema/attribute.rb +127 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/xmlSchema/choice.rb +69 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/xmlSchema/complexContent.rb +92 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/xmlSchema/complexType.rb +139 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/xmlSchema/content.rb +96 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/xmlSchema/data.rb +80 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/xmlSchema/element.rb +154 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/xmlSchema/enumeration.rb +36 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/xmlSchema/import.rb +65 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/xmlSchema/importer.rb +87 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/xmlSchema/include.rb +54 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/xmlSchema/length.rb +35 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/xmlSchema/parser.rb +166 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/xmlSchema/pattern.rb +36 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/xmlSchema/schema.rb +143 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/xmlSchema/sequence.rb +69 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/xmlSchema/simpleContent.rb +65 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/xmlSchema/simpleExtension.rb +54 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/xmlSchema/simpleRestriction.rb +73 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/xmlSchema/simpleType.rb +73 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/xmlSchema/unique.rb +34 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/xmlSchema/xsd2ruby.rb +107 -0
- data/vendor/javascripts/emscripted-ruby/lib/xmlrpc/.document +1 -0
- data/vendor/javascripts/emscripted-ruby/lib/xmlrpc/README.txt +31 -0
- data/vendor/javascripts/emscripted-ruby/lib/xmlrpc/base64.rb +81 -0
- data/vendor/javascripts/emscripted-ruby/lib/xmlrpc/client.rb +624 -0
- data/vendor/javascripts/emscripted-ruby/lib/xmlrpc/config.rb +40 -0
- data/vendor/javascripts/emscripted-ruby/lib/xmlrpc/create.rb +290 -0
- data/vendor/javascripts/emscripted-ruby/lib/xmlrpc/datetime.rb +142 -0
- data/vendor/javascripts/emscripted-ruby/lib/xmlrpc/httpserver.rb +178 -0
- data/vendor/javascripts/emscripted-ruby/lib/xmlrpc/marshal.rb +76 -0
- data/vendor/javascripts/emscripted-ruby/lib/xmlrpc/parser.rb +813 -0
- data/vendor/javascripts/emscripted-ruby/lib/xmlrpc/server.rb +780 -0
- data/vendor/javascripts/emscripted-ruby/lib/xmlrpc/utils.rb +165 -0
- data/vendor/javascripts/emscripted-ruby/lib/xsd/charset.rb +187 -0
- data/vendor/javascripts/emscripted-ruby/lib/xsd/codegen.rb +12 -0
- data/vendor/javascripts/emscripted-ruby/lib/xsd/codegen/classdef.rb +203 -0
- data/vendor/javascripts/emscripted-ruby/lib/xsd/codegen/commentdef.rb +34 -0
- data/vendor/javascripts/emscripted-ruby/lib/xsd/codegen/gensupport.rb +166 -0
- data/vendor/javascripts/emscripted-ruby/lib/xsd/codegen/methoddef.rb +63 -0
- data/vendor/javascripts/emscripted-ruby/lib/xsd/codegen/moduledef.rb +191 -0
- data/vendor/javascripts/emscripted-ruby/lib/xsd/datatypes.rb +1269 -0
- data/vendor/javascripts/emscripted-ruby/lib/xsd/datatypes1999.rb +20 -0
- data/vendor/javascripts/emscripted-ruby/lib/xsd/iconvcharset.rb +33 -0
- data/vendor/javascripts/emscripted-ruby/lib/xsd/mapping.rb +42 -0
- data/vendor/javascripts/emscripted-ruby/lib/xsd/namedelements.rb +95 -0
- data/vendor/javascripts/emscripted-ruby/lib/xsd/ns.rb +140 -0
- data/vendor/javascripts/emscripted-ruby/lib/xsd/qname.rb +78 -0
- data/vendor/javascripts/emscripted-ruby/lib/xsd/xmlparser.rb +61 -0
- data/vendor/javascripts/emscripted-ruby/lib/xsd/xmlparser/parser.rb +96 -0
- data/vendor/javascripts/emscripted-ruby/lib/xsd/xmlparser/rexmlparser.rb +54 -0
- data/vendor/javascripts/emscripted-ruby/lib/xsd/xmlparser/xmlparser.rb +50 -0
- data/vendor/javascripts/emscripted-ruby/lib/xsd/xmlparser/xmlscanner.rb +147 -0
- data/vendor/javascripts/emscripted-ruby/lib/yaml.rb +440 -0
- data/vendor/javascripts/emscripted-ruby/lib/yaml/baseemitter.rb +247 -0
- data/vendor/javascripts/emscripted-ruby/lib/yaml/basenode.rb +216 -0
- data/vendor/javascripts/emscripted-ruby/lib/yaml/constants.rb +45 -0
- data/vendor/javascripts/emscripted-ruby/lib/yaml/dbm.rb +111 -0
- data/vendor/javascripts/emscripted-ruby/lib/yaml/encoding.rb +33 -0
- data/vendor/javascripts/emscripted-ruby/lib/yaml/error.rb +34 -0
- data/vendor/javascripts/emscripted-ruby/lib/yaml/loader.rb +14 -0
- data/vendor/javascripts/emscripted-ruby/lib/yaml/rubytypes.rb +408 -0
- data/vendor/javascripts/emscripted-ruby/lib/yaml/store.rb +43 -0
- data/vendor/javascripts/emscripted-ruby/lib/yaml/stream.rb +40 -0
- data/vendor/javascripts/emscripted-ruby/lib/yaml/stringio.rb +83 -0
- data/vendor/javascripts/emscripted-ruby/lib/yaml/syck.rb +19 -0
- data/vendor/javascripts/emscripted-ruby/lib/yaml/tag.rb +91 -0
- data/vendor/javascripts/emscripted-ruby/lib/yaml/types.rb +192 -0
- data/vendor/javascripts/emscripted-ruby/lib/yaml/yamlnode.rb +54 -0
- data/vendor/javascripts/emscripted-ruby/lib/yaml/ypath.rb +52 -0
- data/vendor/javascripts/emscripted-ruby/ruby.closure.js +7201 -0
- metadata +554 -0
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
#
|
|
2
|
+
# getopts.rb -
|
|
3
|
+
# $Release Version: $
|
|
4
|
+
# $Revision: 11708 $
|
|
5
|
+
# $Date: 2007-02-13 08:01:19 +0900 (Tue, 13 Feb 2007) $
|
|
6
|
+
# by Yasuo OHBA(SHL Japan Inc. Technology Dept.)
|
|
7
|
+
#
|
|
8
|
+
# --
|
|
9
|
+
# this is obsolete; use getoptlong
|
|
10
|
+
#
|
|
11
|
+
# 2000-03-21
|
|
12
|
+
# modified by Minero Aoki <aamine@dp.u-netsurf.ne.jp>
|
|
13
|
+
#
|
|
14
|
+
# 2002-03-05
|
|
15
|
+
# rewritten by Akinori MUSHA <knu@ruby-lang.org>
|
|
16
|
+
#
|
|
17
|
+
|
|
18
|
+
warn "Warning:#{caller[0].sub(/:in `.*'\z/, '')}: getopts is deprecated after Ruby 1.8.1; use optparse instead" if caller[0] and $VERBOSE
|
|
19
|
+
|
|
20
|
+
$RCS_ID=%q$Header$
|
|
21
|
+
|
|
22
|
+
# getopts is obsolete. Use GetoptLong.
|
|
23
|
+
|
|
24
|
+
def getopts(single_options, *options)
|
|
25
|
+
boolopts = {}
|
|
26
|
+
valopts = {}
|
|
27
|
+
|
|
28
|
+
#
|
|
29
|
+
# set defaults
|
|
30
|
+
#
|
|
31
|
+
single_options.scan(/.:?/) do |opt|
|
|
32
|
+
if opt.size == 1
|
|
33
|
+
boolopts[opt] = false
|
|
34
|
+
else
|
|
35
|
+
valopts[opt[0, 1]] = nil
|
|
36
|
+
end
|
|
37
|
+
end if single_options
|
|
38
|
+
|
|
39
|
+
options.each do |arg|
|
|
40
|
+
opt, val = arg.split(':', 2)
|
|
41
|
+
|
|
42
|
+
if val
|
|
43
|
+
valopts[opt] = val.empty? ? nil : val
|
|
44
|
+
else
|
|
45
|
+
boolopts[opt] = false
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
#
|
|
50
|
+
# scan
|
|
51
|
+
#
|
|
52
|
+
c = 0
|
|
53
|
+
argv = ARGV
|
|
54
|
+
|
|
55
|
+
while arg = argv.shift
|
|
56
|
+
case arg
|
|
57
|
+
when /\A--(.*)/
|
|
58
|
+
if $1.empty? # xinit -- -bpp 24
|
|
59
|
+
break
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
opt, val = $1.split('=', 2)
|
|
63
|
+
|
|
64
|
+
if opt.size == 1
|
|
65
|
+
argv.unshift arg
|
|
66
|
+
return nil
|
|
67
|
+
elsif valopts.key? opt # imclean --src +trash
|
|
68
|
+
valopts[opt] = val || argv.shift or return nil
|
|
69
|
+
elsif boolopts.key? opt # ruby --verbose
|
|
70
|
+
boolopts[opt] = true
|
|
71
|
+
else
|
|
72
|
+
argv.unshift arg
|
|
73
|
+
return nil
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
c += 1
|
|
77
|
+
when /\A-(.+)/
|
|
78
|
+
opts = $1
|
|
79
|
+
|
|
80
|
+
until opts.empty?
|
|
81
|
+
opt = opts.slice!(0, 1)
|
|
82
|
+
|
|
83
|
+
if valopts.key? opt
|
|
84
|
+
val = opts
|
|
85
|
+
|
|
86
|
+
if val.empty? # ruby -e 'p $:'
|
|
87
|
+
valopts[opt] = argv.shift or return nil
|
|
88
|
+
else # cc -ohello ...
|
|
89
|
+
valopts[opt] = val
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
c += 1
|
|
93
|
+
break
|
|
94
|
+
elsif boolopts.key? opt
|
|
95
|
+
boolopts[opt] = true # ruby -h
|
|
96
|
+
c += 1
|
|
97
|
+
else
|
|
98
|
+
argv.unshift arg
|
|
99
|
+
return nil
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
else
|
|
103
|
+
argv.unshift arg
|
|
104
|
+
break
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
#
|
|
109
|
+
# set
|
|
110
|
+
#
|
|
111
|
+
$OPT = {}
|
|
112
|
+
|
|
113
|
+
boolopts.each do |opt, val|
|
|
114
|
+
$OPT[opt] = val
|
|
115
|
+
|
|
116
|
+
sopt = opt.gsub(/[^A-Za-z0-9_]/, '_')
|
|
117
|
+
eval "$OPT_#{sopt} = val"
|
|
118
|
+
end
|
|
119
|
+
valopts.each do |opt, val|
|
|
120
|
+
$OPT[opt] = val
|
|
121
|
+
|
|
122
|
+
sopt = opt.gsub(/[^A-Za-z0-9_]/, '_')
|
|
123
|
+
eval "$OPT_#{sopt} = val"
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
c
|
|
127
|
+
end
|
|
@@ -0,0 +1,253 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Copyright (C) 2001 John W. Small All Rights Reserved
|
|
3
|
+
#
|
|
4
|
+
# Author:: John W. Small
|
|
5
|
+
# Documentation:: Gavin Sinclair
|
|
6
|
+
# Licence:: Freeware.
|
|
7
|
+
#
|
|
8
|
+
# See the class GServer for documentation.
|
|
9
|
+
#
|
|
10
|
+
|
|
11
|
+
require "socket"
|
|
12
|
+
require "thread"
|
|
13
|
+
|
|
14
|
+
#
|
|
15
|
+
# GServer implements a generic server, featuring thread pool management,
|
|
16
|
+
# simple logging, and multi-server management. See HttpServer in
|
|
17
|
+
# <tt>xmlrpc/httpserver.rb</tt> in the Ruby standard library for an example of
|
|
18
|
+
# GServer in action.
|
|
19
|
+
#
|
|
20
|
+
# Any kind of application-level server can be implemented using this class.
|
|
21
|
+
# It accepts multiple simultaneous connections from clients, up to an optional
|
|
22
|
+
# maximum number. Several _services_ (i.e. one service per TCP port) can be
|
|
23
|
+
# run simultaneously, and stopped at any time through the class method
|
|
24
|
+
# <tt>GServer.stop(port)</tt>. All the threading issues are handled, saving
|
|
25
|
+
# you the effort. All events are optionally logged, but you can provide your
|
|
26
|
+
# own event handlers if you wish.
|
|
27
|
+
#
|
|
28
|
+
# === Example
|
|
29
|
+
#
|
|
30
|
+
# Using GServer is simple. Below we implement a simple time server, run it,
|
|
31
|
+
# query it, and shut it down. Try this code in +irb+:
|
|
32
|
+
#
|
|
33
|
+
# require 'gserver'
|
|
34
|
+
#
|
|
35
|
+
# #
|
|
36
|
+
# # A server that returns the time in seconds since 1970.
|
|
37
|
+
# #
|
|
38
|
+
# class TimeServer < GServer
|
|
39
|
+
# def initialize(port=10001, *args)
|
|
40
|
+
# super(port, *args)
|
|
41
|
+
# end
|
|
42
|
+
# def serve(io)
|
|
43
|
+
# io.puts(Time.now.to_i)
|
|
44
|
+
# end
|
|
45
|
+
# end
|
|
46
|
+
#
|
|
47
|
+
# # Run the server with logging enabled (it's a separate thread).
|
|
48
|
+
# server = TimeServer.new
|
|
49
|
+
# server.audit = true # Turn logging on.
|
|
50
|
+
# server.start
|
|
51
|
+
#
|
|
52
|
+
# # *** Now point your browser to http://localhost:10001 to see it working ***
|
|
53
|
+
#
|
|
54
|
+
# # See if it's still running.
|
|
55
|
+
# GServer.in_service?(10001) # -> true
|
|
56
|
+
# server.stopped? # -> false
|
|
57
|
+
#
|
|
58
|
+
# # Shut the server down gracefully.
|
|
59
|
+
# server.shutdown
|
|
60
|
+
#
|
|
61
|
+
# # Alternatively, stop it immediately.
|
|
62
|
+
# GServer.stop(10001)
|
|
63
|
+
# # or, of course, "server.stop".
|
|
64
|
+
#
|
|
65
|
+
# All the business of accepting connections and exception handling is taken
|
|
66
|
+
# care of. All we have to do is implement the method that actually serves the
|
|
67
|
+
# client.
|
|
68
|
+
#
|
|
69
|
+
# === Advanced
|
|
70
|
+
#
|
|
71
|
+
# As the example above shows, the way to use GServer is to subclass it to
|
|
72
|
+
# create a specific server, overriding the +serve+ method. You can override
|
|
73
|
+
# other methods as well if you wish, perhaps to collect statistics, or emit
|
|
74
|
+
# more detailed logging.
|
|
75
|
+
#
|
|
76
|
+
# connecting
|
|
77
|
+
# disconnecting
|
|
78
|
+
# starting
|
|
79
|
+
# stopping
|
|
80
|
+
#
|
|
81
|
+
# The above methods are only called if auditing is enabled.
|
|
82
|
+
#
|
|
83
|
+
# You can also override +log+ and +error+ if, for example, you wish to use a
|
|
84
|
+
# more sophisticated logging system.
|
|
85
|
+
#
|
|
86
|
+
class GServer
|
|
87
|
+
|
|
88
|
+
DEFAULT_HOST = "127.0.0.1"
|
|
89
|
+
|
|
90
|
+
def serve(io)
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
@@services = {} # Hash of opened ports, i.e. services
|
|
94
|
+
@@servicesMutex = Mutex.new
|
|
95
|
+
|
|
96
|
+
def GServer.stop(port, host = DEFAULT_HOST)
|
|
97
|
+
@@servicesMutex.synchronize {
|
|
98
|
+
@@services[host][port].stop
|
|
99
|
+
}
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
def GServer.in_service?(port, host = DEFAULT_HOST)
|
|
103
|
+
@@services.has_key?(host) and
|
|
104
|
+
@@services[host].has_key?(port)
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
def stop
|
|
108
|
+
@connectionsMutex.synchronize {
|
|
109
|
+
if @tcpServerThread
|
|
110
|
+
@tcpServerThread.raise "stop"
|
|
111
|
+
end
|
|
112
|
+
}
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
def stopped?
|
|
116
|
+
@tcpServerThread == nil
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
def shutdown
|
|
120
|
+
@shutdown = true
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
def connections
|
|
124
|
+
@connections.size
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
def join
|
|
128
|
+
@tcpServerThread.join if @tcpServerThread
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
attr_reader :port, :host, :maxConnections
|
|
132
|
+
attr_accessor :stdlog, :audit, :debug
|
|
133
|
+
|
|
134
|
+
def connecting(client)
|
|
135
|
+
addr = client.peeraddr
|
|
136
|
+
log("#{self.class.to_s} #{@host}:#{@port} client:#{addr[1]} " +
|
|
137
|
+
"#{addr[2]}<#{addr[3]}> connect")
|
|
138
|
+
true
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
def disconnecting(clientPort)
|
|
142
|
+
log("#{self.class.to_s} #{@host}:#{@port} " +
|
|
143
|
+
"client:#{clientPort} disconnect")
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
protected :connecting, :disconnecting
|
|
147
|
+
|
|
148
|
+
def starting()
|
|
149
|
+
log("#{self.class.to_s} #{@host}:#{@port} start")
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
def stopping()
|
|
153
|
+
log("#{self.class.to_s} #{@host}:#{@port} stop")
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
protected :starting, :stopping
|
|
157
|
+
|
|
158
|
+
def error(detail)
|
|
159
|
+
log(detail.backtrace.join("\n"))
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
def log(msg)
|
|
163
|
+
if @stdlog
|
|
164
|
+
@stdlog.puts("[#{Time.new.ctime}] %s" % msg)
|
|
165
|
+
@stdlog.flush
|
|
166
|
+
end
|
|
167
|
+
end
|
|
168
|
+
|
|
169
|
+
protected :error, :log
|
|
170
|
+
|
|
171
|
+
def initialize(port, host = DEFAULT_HOST, maxConnections = 4,
|
|
172
|
+
stdlog = $stderr, audit = false, debug = false)
|
|
173
|
+
@tcpServerThread = nil
|
|
174
|
+
@port = port
|
|
175
|
+
@host = host
|
|
176
|
+
@maxConnections = maxConnections
|
|
177
|
+
@connections = []
|
|
178
|
+
@connectionsMutex = Mutex.new
|
|
179
|
+
@connectionsCV = ConditionVariable.new
|
|
180
|
+
@stdlog = stdlog
|
|
181
|
+
@audit = audit
|
|
182
|
+
@debug = debug
|
|
183
|
+
end
|
|
184
|
+
|
|
185
|
+
def start(maxConnections = -1)
|
|
186
|
+
raise "running" if !stopped?
|
|
187
|
+
@shutdown = false
|
|
188
|
+
@maxConnections = maxConnections if maxConnections > 0
|
|
189
|
+
@@servicesMutex.synchronize {
|
|
190
|
+
if GServer.in_service?(@port,@host)
|
|
191
|
+
raise "Port already in use: #{host}:#{@port}!"
|
|
192
|
+
end
|
|
193
|
+
@tcpServer = TCPServer.new(@host,@port)
|
|
194
|
+
@port = @tcpServer.addr[1]
|
|
195
|
+
@@services[@host] = {} unless @@services.has_key?(@host)
|
|
196
|
+
@@services[@host][@port] = self;
|
|
197
|
+
}
|
|
198
|
+
@tcpServerThread = Thread.new {
|
|
199
|
+
begin
|
|
200
|
+
starting if @audit
|
|
201
|
+
while !@shutdown
|
|
202
|
+
@connectionsMutex.synchronize {
|
|
203
|
+
while @connections.size >= @maxConnections
|
|
204
|
+
@connectionsCV.wait(@connectionsMutex)
|
|
205
|
+
end
|
|
206
|
+
}
|
|
207
|
+
client = @tcpServer.accept
|
|
208
|
+
@connections << Thread.new(client) { |myClient|
|
|
209
|
+
begin
|
|
210
|
+
myPort = myClient.peeraddr[1]
|
|
211
|
+
serve(myClient) if !@audit or connecting(myClient)
|
|
212
|
+
rescue => detail
|
|
213
|
+
error(detail) if @debug
|
|
214
|
+
ensure
|
|
215
|
+
begin
|
|
216
|
+
myClient.close
|
|
217
|
+
rescue
|
|
218
|
+
end
|
|
219
|
+
@connectionsMutex.synchronize {
|
|
220
|
+
@connections.delete(Thread.current)
|
|
221
|
+
@connectionsCV.signal
|
|
222
|
+
}
|
|
223
|
+
disconnecting(myPort) if @audit
|
|
224
|
+
end
|
|
225
|
+
}
|
|
226
|
+
end
|
|
227
|
+
rescue => detail
|
|
228
|
+
error(detail) if @debug
|
|
229
|
+
ensure
|
|
230
|
+
begin
|
|
231
|
+
@tcpServer.close
|
|
232
|
+
rescue
|
|
233
|
+
end
|
|
234
|
+
if @shutdown
|
|
235
|
+
@connectionsMutex.synchronize {
|
|
236
|
+
while @connections.size > 0
|
|
237
|
+
@connectionsCV.wait(@connectionsMutex)
|
|
238
|
+
end
|
|
239
|
+
}
|
|
240
|
+
else
|
|
241
|
+
@connections.each { |c| c.raise "stop" }
|
|
242
|
+
end
|
|
243
|
+
@tcpServerThread = nil
|
|
244
|
+
@@servicesMutex.synchronize {
|
|
245
|
+
@@services[@host].delete(@port)
|
|
246
|
+
}
|
|
247
|
+
stopping if @audit
|
|
248
|
+
end
|
|
249
|
+
}
|
|
250
|
+
self
|
|
251
|
+
end
|
|
252
|
+
|
|
253
|
+
end
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# importenv.rb -- imports environment variables as global variables, Perlish ;(
|
|
2
|
+
#
|
|
3
|
+
# Usage:
|
|
4
|
+
#
|
|
5
|
+
# require 'importenv'
|
|
6
|
+
# p $USER
|
|
7
|
+
# $USER = "matz"
|
|
8
|
+
# p ENV["USER"]
|
|
9
|
+
|
|
10
|
+
warn "Warning:#{caller[0].sub(/:in `.*'\z/, '')}: importenv is deprecated after Ruby 1.8.1 (no replacement)"
|
|
11
|
+
|
|
12
|
+
for k,v in ENV
|
|
13
|
+
next unless /^[a-zA-Z][_a-zA-Z0-9]*/ =~ k
|
|
14
|
+
eval <<EOS
|
|
15
|
+
$#{k} = v
|
|
16
|
+
trace_var "$#{k}", proc{|v|
|
|
17
|
+
ENV[%q!#{k}!] = v
|
|
18
|
+
$#{k} = v
|
|
19
|
+
if v == nil
|
|
20
|
+
untrace_var "$#{k}"
|
|
21
|
+
end
|
|
22
|
+
}
|
|
23
|
+
EOS
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
if __FILE__ == $0
|
|
27
|
+
p $TERM
|
|
28
|
+
$TERM = nil
|
|
29
|
+
p $TERM
|
|
30
|
+
p ENV["TERM"]
|
|
31
|
+
$TERM = "foo"
|
|
32
|
+
p ENV["TERM"]
|
|
33
|
+
end
|
|
@@ -0,0 +1,814 @@
|
|
|
1
|
+
#
|
|
2
|
+
# ipaddr.rb - A class to manipulate an IP address
|
|
3
|
+
#
|
|
4
|
+
# Copyright (c) 2002 Hajimu UMEMOTO <ume@mahoroba.org>.
|
|
5
|
+
# Copyright (c) 2007 Akinori MUSHA <knu@iDaemons.org>.
|
|
6
|
+
# All rights reserved.
|
|
7
|
+
#
|
|
8
|
+
# You can redistribute and/or modify it under the same terms as Ruby.
|
|
9
|
+
#
|
|
10
|
+
# $Id: ipaddr.rb 15822 2008-03-21 12:16:15Z knu $
|
|
11
|
+
#
|
|
12
|
+
# Contact:
|
|
13
|
+
# - Akinori MUSHA <knu@iDaemons.org> (current maintainer)
|
|
14
|
+
#
|
|
15
|
+
# TODO:
|
|
16
|
+
# - scope_id support
|
|
17
|
+
#
|
|
18
|
+
require 'socket'
|
|
19
|
+
|
|
20
|
+
unless Socket.const_defined? "AF_INET6"
|
|
21
|
+
class Socket
|
|
22
|
+
AF_INET6 = Object.new
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
class << IPSocket
|
|
26
|
+
def valid_v4?(addr)
|
|
27
|
+
if /\A(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\Z/ =~ addr
|
|
28
|
+
return $~.captures.all? {|i| i.to_i < 256}
|
|
29
|
+
end
|
|
30
|
+
return false
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def valid_v6?(addr)
|
|
34
|
+
# IPv6 (normal)
|
|
35
|
+
return true if /\A[\dA-Fa-f]{1,4}(:[\dA-Fa-f]{1,4})*\Z/ =~ addr
|
|
36
|
+
return true if /\A[\dA-Fa-f]{1,4}(:[\dA-Fa-f]{1,4})*::([\dA-Fa-f]{1,4}(:[\dA-Fa-f]{1,4})*)?\Z/ =~ addr
|
|
37
|
+
return true if /\A::([\dA-Fa-f]{1,4}(:[\dA-Fa-f]{1,4})*)?\Z/ =~ addr
|
|
38
|
+
# IPv6 (IPv4 compat)
|
|
39
|
+
return true if /\A[\dA-Fa-f]{1,4}(:[\dA-Fa-f]{1,4})*:/ =~ addr && valid_v4?($')
|
|
40
|
+
return true if /\A[\dA-Fa-f]{1,4}(:[\dA-Fa-f]{1,4})*::([\dA-Fa-f]{1,4}(:[\dA-Fa-f]{1,4})*:)?/ =~ addr && valid_v4?($')
|
|
41
|
+
return true if /\A::([\dA-Fa-f]{1,4}(:[\dA-Fa-f]{1,4})*:)?/ =~ addr && valid_v4?($')
|
|
42
|
+
|
|
43
|
+
false
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def valid?(addr)
|
|
47
|
+
valid_v4?(addr) || valid_v6?(addr)
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
alias getaddress_orig getaddress
|
|
51
|
+
def getaddress(s)
|
|
52
|
+
if valid?(s)
|
|
53
|
+
s
|
|
54
|
+
elsif /\A[-A-Za-z\d.]+\Z/ =~ s
|
|
55
|
+
getaddress_orig(s)
|
|
56
|
+
else
|
|
57
|
+
raise ArgumentError, "invalid address"
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
# IPAddr provides a set of methods to manipulate an IP address. Both IPv4 and
|
|
64
|
+
# IPv6 are supported.
|
|
65
|
+
#
|
|
66
|
+
# == Example
|
|
67
|
+
#
|
|
68
|
+
# require 'ipaddr'
|
|
69
|
+
#
|
|
70
|
+
# ipaddr1 = IPAddr.new "3ffe:505:2::1"
|
|
71
|
+
#
|
|
72
|
+
# p ipaddr1 #=> #<IPAddr: IPv6:3ffe:0505:0002:0000:0000:0000:0000:0001/ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff>
|
|
73
|
+
#
|
|
74
|
+
# p ipaddr1.to_s #=> "3ffe:505:2::1"
|
|
75
|
+
#
|
|
76
|
+
# ipaddr2 = ipaddr1.mask(48) #=> #<IPAddr: IPv6:3ffe:0505:0002:0000:0000:0000:0000:0000/ffff:ffff:ffff:0000:0000:0000:0000:0000>
|
|
77
|
+
#
|
|
78
|
+
# p ipaddr2.to_s #=> "3ffe:505:2::"
|
|
79
|
+
#
|
|
80
|
+
# ipaddr3 = IPAddr.new "192.168.2.0/24"
|
|
81
|
+
#
|
|
82
|
+
# p ipaddr3 #=> #<IPAddr: IPv4:192.168.2.0/255.255.255.0>
|
|
83
|
+
|
|
84
|
+
class IPAddr
|
|
85
|
+
|
|
86
|
+
IN4MASK = 0xffffffff
|
|
87
|
+
IN6MASK = 0xffffffffffffffffffffffffffffffff
|
|
88
|
+
IN6FORMAT = (["%.4x"] * 8).join(':')
|
|
89
|
+
|
|
90
|
+
# Returns the address family of this IP address.
|
|
91
|
+
attr :family
|
|
92
|
+
|
|
93
|
+
# Creates a new ipaddr containing the given network byte ordered
|
|
94
|
+
# string form of an IP address.
|
|
95
|
+
def IPAddr::new_ntoh(addr)
|
|
96
|
+
return IPAddr.new(IPAddr::ntop(addr))
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
# Convert a network byte ordered string form of an IP address into
|
|
100
|
+
# human readable form.
|
|
101
|
+
def IPAddr::ntop(addr)
|
|
102
|
+
case addr.size
|
|
103
|
+
when 4
|
|
104
|
+
s = addr.unpack('C4').join('.')
|
|
105
|
+
when 16
|
|
106
|
+
s = IN6FORMAT % addr.unpack('n8')
|
|
107
|
+
else
|
|
108
|
+
raise ArgumentError, "unsupported address family"
|
|
109
|
+
end
|
|
110
|
+
return s
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
# Returns a new ipaddr built by bitwise AND.
|
|
114
|
+
def &(other)
|
|
115
|
+
return self.clone.set(@addr & coerce_other(other).to_i)
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
# Returns a new ipaddr built by bitwise OR.
|
|
119
|
+
def |(other)
|
|
120
|
+
return self.clone.set(@addr | coerce_other(other).to_i)
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
# Returns a new ipaddr built by bitwise right-shift.
|
|
124
|
+
def >>(num)
|
|
125
|
+
return self.clone.set(@addr >> num)
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
# Returns a new ipaddr built by bitwise left shift.
|
|
129
|
+
def <<(num)
|
|
130
|
+
return self.clone.set(addr_mask(@addr << num))
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
# Returns a new ipaddr built by bitwise negation.
|
|
134
|
+
def ~
|
|
135
|
+
return self.clone.set(addr_mask(~@addr))
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
# Returns true if two ipaddrs are equal.
|
|
139
|
+
def ==(other)
|
|
140
|
+
other = coerce_other(other)
|
|
141
|
+
return @family == other.family && @addr == other.to_i
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
# Returns a new ipaddr built by masking IP address with the given
|
|
145
|
+
# prefixlen/netmask. (e.g. 8, 64, "255.255.255.0", etc.)
|
|
146
|
+
def mask(prefixlen)
|
|
147
|
+
return self.clone.mask!(prefixlen)
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
# Returns true if the given ipaddr is in the range.
|
|
151
|
+
#
|
|
152
|
+
# e.g.:
|
|
153
|
+
# require 'ipaddr'
|
|
154
|
+
# net1 = IPAddr.new("192.168.2.0/24")
|
|
155
|
+
# net2 = IPAddr.new("192.168.2.100")
|
|
156
|
+
# net3 = IPAddr.new("192.168.3.0")
|
|
157
|
+
# p net1.include?(net2) #=> true
|
|
158
|
+
# p net1.include?(net3) #=> false
|
|
159
|
+
def include?(other)
|
|
160
|
+
other = coerce_other(other)
|
|
161
|
+
if ipv4_mapped?
|
|
162
|
+
if (@mask_addr >> 32) != 0xffffffffffffffffffffffff
|
|
163
|
+
return false
|
|
164
|
+
end
|
|
165
|
+
mask_addr = (@mask_addr & IN4MASK)
|
|
166
|
+
addr = (@addr & IN4MASK)
|
|
167
|
+
family = Socket::AF_INET
|
|
168
|
+
else
|
|
169
|
+
mask_addr = @mask_addr
|
|
170
|
+
addr = @addr
|
|
171
|
+
family = @family
|
|
172
|
+
end
|
|
173
|
+
if other.ipv4_mapped?
|
|
174
|
+
other_addr = (other.to_i & IN4MASK)
|
|
175
|
+
other_family = Socket::AF_INET
|
|
176
|
+
else
|
|
177
|
+
other_addr = other.to_i
|
|
178
|
+
other_family = other.family
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
if family != other_family
|
|
182
|
+
return false
|
|
183
|
+
end
|
|
184
|
+
return ((addr & mask_addr) == (other_addr & mask_addr))
|
|
185
|
+
end
|
|
186
|
+
alias === include?
|
|
187
|
+
|
|
188
|
+
# Returns the integer representation of the ipaddr.
|
|
189
|
+
def to_i
|
|
190
|
+
return @addr
|
|
191
|
+
end
|
|
192
|
+
|
|
193
|
+
# Returns a string containing the IP address representation.
|
|
194
|
+
def to_s
|
|
195
|
+
str = to_string
|
|
196
|
+
return str if ipv4?
|
|
197
|
+
|
|
198
|
+
str.gsub!(/\b0{1,3}([\da-f]+)\b/i, '\1')
|
|
199
|
+
loop do
|
|
200
|
+
break if str.sub!(/\A0:0:0:0:0:0:0:0\Z/, '::')
|
|
201
|
+
break if str.sub!(/\b0:0:0:0:0:0:0\b/, ':')
|
|
202
|
+
break if str.sub!(/\b0:0:0:0:0:0\b/, ':')
|
|
203
|
+
break if str.sub!(/\b0:0:0:0:0\b/, ':')
|
|
204
|
+
break if str.sub!(/\b0:0:0:0\b/, ':')
|
|
205
|
+
break if str.sub!(/\b0:0:0\b/, ':')
|
|
206
|
+
break if str.sub!(/\b0:0\b/, ':')
|
|
207
|
+
break
|
|
208
|
+
end
|
|
209
|
+
str.sub!(/:{3,}/, '::')
|
|
210
|
+
|
|
211
|
+
if /\A::(ffff:)?([\da-f]{1,4}):([\da-f]{1,4})\Z/i =~ str
|
|
212
|
+
str = sprintf('::%s%d.%d.%d.%d', $1, $2.hex / 256, $2.hex % 256, $3.hex / 256, $3.hex % 256)
|
|
213
|
+
end
|
|
214
|
+
|
|
215
|
+
str
|
|
216
|
+
end
|
|
217
|
+
|
|
218
|
+
# Returns a string containing the IP address representation in
|
|
219
|
+
# canonical form.
|
|
220
|
+
def to_string
|
|
221
|
+
return _to_string(@addr)
|
|
222
|
+
end
|
|
223
|
+
|
|
224
|
+
# Returns a network byte ordered string form of the IP address.
|
|
225
|
+
def hton
|
|
226
|
+
case @family
|
|
227
|
+
when Socket::AF_INET
|
|
228
|
+
return [@addr].pack('N')
|
|
229
|
+
when Socket::AF_INET6
|
|
230
|
+
return (0..7).map { |i|
|
|
231
|
+
(@addr >> (112 - 16 * i)) & 0xffff
|
|
232
|
+
}.pack('n8')
|
|
233
|
+
else
|
|
234
|
+
raise "unsupported address family"
|
|
235
|
+
end
|
|
236
|
+
end
|
|
237
|
+
|
|
238
|
+
# Returns true if the ipaddr is an IPv4 address.
|
|
239
|
+
def ipv4?
|
|
240
|
+
return @family == Socket::AF_INET
|
|
241
|
+
end
|
|
242
|
+
|
|
243
|
+
# Returns true if the ipaddr is an IPv6 address.
|
|
244
|
+
def ipv6?
|
|
245
|
+
return @family == Socket::AF_INET6
|
|
246
|
+
end
|
|
247
|
+
|
|
248
|
+
# Returns true if the ipaddr is an IPv4-mapped IPv6 address.
|
|
249
|
+
def ipv4_mapped?
|
|
250
|
+
return ipv6? && (@addr >> 32) == 0xffff
|
|
251
|
+
end
|
|
252
|
+
|
|
253
|
+
# Returns true if the ipaddr is an IPv4-compatible IPv6 address.
|
|
254
|
+
def ipv4_compat?
|
|
255
|
+
if !ipv6? || (@addr >> 32) != 0
|
|
256
|
+
return false
|
|
257
|
+
end
|
|
258
|
+
a = (@addr & IN4MASK)
|
|
259
|
+
return a != 0 && a != 1
|
|
260
|
+
end
|
|
261
|
+
|
|
262
|
+
# Returns a new ipaddr built by converting the native IPv4 address
|
|
263
|
+
# into an IPv4-mapped IPv6 address.
|
|
264
|
+
def ipv4_mapped
|
|
265
|
+
if !ipv4?
|
|
266
|
+
raise ArgumentError, "not an IPv4 address"
|
|
267
|
+
end
|
|
268
|
+
return self.clone.set(@addr | 0xffff00000000, Socket::AF_INET6)
|
|
269
|
+
end
|
|
270
|
+
|
|
271
|
+
# Returns a new ipaddr built by converting the native IPv4 address
|
|
272
|
+
# into an IPv4-compatible IPv6 address.
|
|
273
|
+
def ipv4_compat
|
|
274
|
+
if !ipv4?
|
|
275
|
+
raise ArgumentError, "not an IPv4 address"
|
|
276
|
+
end
|
|
277
|
+
return self.clone.set(@addr, Socket::AF_INET6)
|
|
278
|
+
end
|
|
279
|
+
|
|
280
|
+
# Returns a new ipaddr built by converting the IPv6 address into a
|
|
281
|
+
# native IPv4 address. If the IP address is not an IPv4-mapped or
|
|
282
|
+
# IPv4-compatible IPv6 address, returns self.
|
|
283
|
+
def native
|
|
284
|
+
if !ipv4_mapped? && !ipv4_compat?
|
|
285
|
+
return self
|
|
286
|
+
end
|
|
287
|
+
return self.clone.set(@addr & IN4MASK, Socket::AF_INET)
|
|
288
|
+
end
|
|
289
|
+
|
|
290
|
+
# Returns a string for DNS reverse lookup. It returns a string in
|
|
291
|
+
# RFC3172 form for an IPv6 address.
|
|
292
|
+
def reverse
|
|
293
|
+
case @family
|
|
294
|
+
when Socket::AF_INET
|
|
295
|
+
return _reverse + ".in-addr.arpa"
|
|
296
|
+
when Socket::AF_INET6
|
|
297
|
+
return ip6_arpa
|
|
298
|
+
else
|
|
299
|
+
raise "unsupported address family"
|
|
300
|
+
end
|
|
301
|
+
end
|
|
302
|
+
|
|
303
|
+
# Returns a string for DNS reverse lookup compatible with RFC3172.
|
|
304
|
+
def ip6_arpa
|
|
305
|
+
if !ipv6?
|
|
306
|
+
raise ArgumentError, "not an IPv6 address"
|
|
307
|
+
end
|
|
308
|
+
return _reverse + ".ip6.arpa"
|
|
309
|
+
end
|
|
310
|
+
|
|
311
|
+
# Returns a string for DNS reverse lookup compatible with RFC1886.
|
|
312
|
+
def ip6_int
|
|
313
|
+
if !ipv6?
|
|
314
|
+
raise ArgumentError, "not an IPv6 address"
|
|
315
|
+
end
|
|
316
|
+
return _reverse + ".ip6.int"
|
|
317
|
+
end
|
|
318
|
+
|
|
319
|
+
# Returns the successor to the ipaddr.
|
|
320
|
+
def succ
|
|
321
|
+
return self.clone.set(@addr + 1, @family)
|
|
322
|
+
end
|
|
323
|
+
|
|
324
|
+
# Compares the ipaddr with another.
|
|
325
|
+
def <=>(other)
|
|
326
|
+
other = coerce_other(other)
|
|
327
|
+
|
|
328
|
+
return nil if other.family != @family
|
|
329
|
+
|
|
330
|
+
return @addr <=> other.to_i
|
|
331
|
+
end
|
|
332
|
+
include Comparable
|
|
333
|
+
|
|
334
|
+
# Creates a Range object for the network address.
|
|
335
|
+
def to_range
|
|
336
|
+
begin_addr = (@addr & @mask_addr)
|
|
337
|
+
|
|
338
|
+
case @family
|
|
339
|
+
when Socket::AF_INET
|
|
340
|
+
end_addr = (@addr | (IN4MASK ^ @mask_addr))
|
|
341
|
+
when Socket::AF_INET6
|
|
342
|
+
end_addr = (@addr | (IN6MASK ^ @mask_addr))
|
|
343
|
+
else
|
|
344
|
+
raise "unsupported address family"
|
|
345
|
+
end
|
|
346
|
+
|
|
347
|
+
return clone.set(begin_addr, @family)..clone.set(end_addr, @family)
|
|
348
|
+
end
|
|
349
|
+
|
|
350
|
+
# Returns a string containing a human-readable representation of the
|
|
351
|
+
# ipaddr. ("#<IPAddr: family:address/mask>")
|
|
352
|
+
def inspect
|
|
353
|
+
case @family
|
|
354
|
+
when Socket::AF_INET
|
|
355
|
+
af = "IPv4"
|
|
356
|
+
when Socket::AF_INET6
|
|
357
|
+
af = "IPv6"
|
|
358
|
+
else
|
|
359
|
+
raise "unsupported address family"
|
|
360
|
+
end
|
|
361
|
+
return sprintf("#<%s: %s:%s/%s>", self.class.name,
|
|
362
|
+
af, _to_string(@addr), _to_string(@mask_addr))
|
|
363
|
+
end
|
|
364
|
+
|
|
365
|
+
protected
|
|
366
|
+
|
|
367
|
+
def set(addr, *family)
|
|
368
|
+
case family[0] ? family[0] : @family
|
|
369
|
+
when Socket::AF_INET
|
|
370
|
+
if addr < 0 || addr > IN4MASK
|
|
371
|
+
raise ArgumentError, "invalid address"
|
|
372
|
+
end
|
|
373
|
+
when Socket::AF_INET6
|
|
374
|
+
if addr < 0 || addr > IN6MASK
|
|
375
|
+
raise ArgumentError, "invalid address"
|
|
376
|
+
end
|
|
377
|
+
else
|
|
378
|
+
raise ArgumentError, "unsupported address family"
|
|
379
|
+
end
|
|
380
|
+
@addr = addr
|
|
381
|
+
if family[0]
|
|
382
|
+
@family = family[0]
|
|
383
|
+
end
|
|
384
|
+
return self
|
|
385
|
+
end
|
|
386
|
+
|
|
387
|
+
def mask!(mask)
|
|
388
|
+
if mask.kind_of?(String)
|
|
389
|
+
if mask =~ /^\d+$/
|
|
390
|
+
prefixlen = mask.to_i
|
|
391
|
+
else
|
|
392
|
+
m = IPAddr.new(mask)
|
|
393
|
+
if m.family != @family
|
|
394
|
+
raise ArgumentError, "address family is not same"
|
|
395
|
+
end
|
|
396
|
+
@mask_addr = m.to_i
|
|
397
|
+
@addr &= @mask_addr
|
|
398
|
+
return self
|
|
399
|
+
end
|
|
400
|
+
else
|
|
401
|
+
prefixlen = mask
|
|
402
|
+
end
|
|
403
|
+
case @family
|
|
404
|
+
when Socket::AF_INET
|
|
405
|
+
if prefixlen < 0 || prefixlen > 32
|
|
406
|
+
raise ArgumentError, "invalid length"
|
|
407
|
+
end
|
|
408
|
+
masklen = 32 - prefixlen
|
|
409
|
+
@mask_addr = ((IN4MASK >> masklen) << masklen)
|
|
410
|
+
when Socket::AF_INET6
|
|
411
|
+
if prefixlen < 0 || prefixlen > 128
|
|
412
|
+
raise ArgumentError, "invalid length"
|
|
413
|
+
end
|
|
414
|
+
masklen = 128 - prefixlen
|
|
415
|
+
@mask_addr = ((IN6MASK >> masklen) << masklen)
|
|
416
|
+
else
|
|
417
|
+
raise "unsupported address family"
|
|
418
|
+
end
|
|
419
|
+
@addr = ((@addr >> masklen) << masklen)
|
|
420
|
+
return self
|
|
421
|
+
end
|
|
422
|
+
|
|
423
|
+
private
|
|
424
|
+
|
|
425
|
+
# Creates a new ipaddr object either from a human readable IP
|
|
426
|
+
# address representation in string, or from a packed in_addr value
|
|
427
|
+
# followed by an address family.
|
|
428
|
+
#
|
|
429
|
+
# In the former case, the following are the valid formats that will
|
|
430
|
+
# be recognized: "address", "address/prefixlen" and "address/mask",
|
|
431
|
+
# where IPv6 address may be enclosed in square brackets (`[' and
|
|
432
|
+
# `]'). If a prefixlen or a mask is specified, it returns a masked
|
|
433
|
+
# IP address. Although the address family is determined
|
|
434
|
+
# automatically from a specified string, you can specify one
|
|
435
|
+
# explicitly by the optional second argument.
|
|
436
|
+
#
|
|
437
|
+
# Otherwise an IP addess is generated from a packed in_addr value
|
|
438
|
+
# and an address family.
|
|
439
|
+
#
|
|
440
|
+
# The IPAddr class defines many methods and operators, and some of
|
|
441
|
+
# those, such as &, |, include? and ==, accept a string, or a packed
|
|
442
|
+
# in_addr value instead of an IPAddr object.
|
|
443
|
+
def initialize(addr = '::', family = Socket::AF_UNSPEC)
|
|
444
|
+
if !addr.kind_of?(String)
|
|
445
|
+
case family
|
|
446
|
+
when Socket::AF_INET, Socket::AF_INET6
|
|
447
|
+
set(addr.to_i, family)
|
|
448
|
+
@mask_addr = (family == Socket::AF_INET) ? IN4MASK : IN6MASK
|
|
449
|
+
return
|
|
450
|
+
when Socket::AF_UNSPEC
|
|
451
|
+
raise ArgumentError, "address family must be specified"
|
|
452
|
+
else
|
|
453
|
+
raise ArgumentError, "unsupported address family: #{family}"
|
|
454
|
+
end
|
|
455
|
+
end
|
|
456
|
+
prefix, prefixlen = addr.split('/')
|
|
457
|
+
if prefix =~ /^\[(.*)\]$/i
|
|
458
|
+
prefix = $1
|
|
459
|
+
family = Socket::AF_INET6
|
|
460
|
+
end
|
|
461
|
+
# It seems AI_NUMERICHOST doesn't do the job.
|
|
462
|
+
#Socket.getaddrinfo(left, nil, Socket::AF_INET6, Socket::SOCK_STREAM, nil,
|
|
463
|
+
# Socket::AI_NUMERICHOST)
|
|
464
|
+
begin
|
|
465
|
+
IPSocket.getaddress(prefix) # test if address is vaild
|
|
466
|
+
rescue
|
|
467
|
+
raise ArgumentError, "invalid address"
|
|
468
|
+
end
|
|
469
|
+
@addr = @family = nil
|
|
470
|
+
if family == Socket::AF_UNSPEC || family == Socket::AF_INET
|
|
471
|
+
@addr = in_addr(prefix)
|
|
472
|
+
if @addr
|
|
473
|
+
@family = Socket::AF_INET
|
|
474
|
+
end
|
|
475
|
+
end
|
|
476
|
+
if !@addr && (family == Socket::AF_UNSPEC || family == Socket::AF_INET6)
|
|
477
|
+
@addr = in6_addr(prefix)
|
|
478
|
+
@family = Socket::AF_INET6
|
|
479
|
+
end
|
|
480
|
+
if family != Socket::AF_UNSPEC && @family != family
|
|
481
|
+
raise ArgumentError, "address family mismatch"
|
|
482
|
+
end
|
|
483
|
+
if prefixlen
|
|
484
|
+
mask!(prefixlen)
|
|
485
|
+
else
|
|
486
|
+
@mask_addr = (family == Socket::AF_INET) ? IN4MASK : IN6MASK
|
|
487
|
+
end
|
|
488
|
+
end
|
|
489
|
+
|
|
490
|
+
def coerce_other(other)
|
|
491
|
+
case other
|
|
492
|
+
when IPAddr
|
|
493
|
+
other
|
|
494
|
+
when String
|
|
495
|
+
self.class.new(other)
|
|
496
|
+
else
|
|
497
|
+
self.class.new(other, @family)
|
|
498
|
+
end
|
|
499
|
+
end
|
|
500
|
+
|
|
501
|
+
def in_addr(addr)
|
|
502
|
+
if addr =~ /^\d+\.\d+\.\d+\.\d+$/
|
|
503
|
+
return addr.split('.').inject(0) { |i, s|
|
|
504
|
+
i << 8 | s.to_i
|
|
505
|
+
}
|
|
506
|
+
end
|
|
507
|
+
return nil
|
|
508
|
+
end
|
|
509
|
+
|
|
510
|
+
def in6_addr(left)
|
|
511
|
+
case left
|
|
512
|
+
when /^::ffff:(\d+\.\d+\.\d+\.\d+)$/i
|
|
513
|
+
return in_addr($1) + 0xffff00000000
|
|
514
|
+
when /^::(\d+\.\d+\.\d+\.\d+)$/i
|
|
515
|
+
return in_addr($1)
|
|
516
|
+
when /[^0-9a-f:]/i
|
|
517
|
+
raise ArgumentError, "invalid address"
|
|
518
|
+
when /^(.*)::(.*)$/
|
|
519
|
+
left, right = $1, $2
|
|
520
|
+
else
|
|
521
|
+
right = ''
|
|
522
|
+
end
|
|
523
|
+
l = left.split(':')
|
|
524
|
+
r = right.split(':')
|
|
525
|
+
rest = 8 - l.size - r.size
|
|
526
|
+
if rest < 0
|
|
527
|
+
return nil
|
|
528
|
+
end
|
|
529
|
+
return (l + Array.new(rest, '0') + r).inject(0) { |i, s|
|
|
530
|
+
i << 16 | s.hex
|
|
531
|
+
}
|
|
532
|
+
end
|
|
533
|
+
|
|
534
|
+
def addr_mask(addr)
|
|
535
|
+
case @family
|
|
536
|
+
when Socket::AF_INET
|
|
537
|
+
return addr & IN4MASK
|
|
538
|
+
when Socket::AF_INET6
|
|
539
|
+
return addr & IN6MASK
|
|
540
|
+
else
|
|
541
|
+
raise "unsupported address family"
|
|
542
|
+
end
|
|
543
|
+
end
|
|
544
|
+
|
|
545
|
+
def _reverse
|
|
546
|
+
case @family
|
|
547
|
+
when Socket::AF_INET
|
|
548
|
+
return (0..3).map { |i|
|
|
549
|
+
(@addr >> (8 * i)) & 0xff
|
|
550
|
+
}.join('.')
|
|
551
|
+
when Socket::AF_INET6
|
|
552
|
+
return ("%.32x" % @addr).reverse!.gsub!(/.(?!$)/, '\&.')
|
|
553
|
+
else
|
|
554
|
+
raise "unsupported address family"
|
|
555
|
+
end
|
|
556
|
+
end
|
|
557
|
+
|
|
558
|
+
def _to_string(addr)
|
|
559
|
+
case @family
|
|
560
|
+
when Socket::AF_INET
|
|
561
|
+
return (0..3).map { |i|
|
|
562
|
+
(addr >> (24 - 8 * i)) & 0xff
|
|
563
|
+
}.join('.')
|
|
564
|
+
when Socket::AF_INET6
|
|
565
|
+
return (("%.32x" % addr).gsub!(/.{4}(?!$)/, '\&:'))
|
|
566
|
+
else
|
|
567
|
+
raise "unsupported address family"
|
|
568
|
+
end
|
|
569
|
+
end
|
|
570
|
+
|
|
571
|
+
end
|
|
572
|
+
|
|
573
|
+
if $0 == __FILE__
|
|
574
|
+
eval DATA.read, nil, $0, __LINE__+4
|
|
575
|
+
end
|
|
576
|
+
|
|
577
|
+
__END__
|
|
578
|
+
|
|
579
|
+
require 'test/unit'
|
|
580
|
+
require 'test/unit/ui/console/testrunner'
|
|
581
|
+
|
|
582
|
+
class TC_IPAddr < Test::Unit::TestCase
|
|
583
|
+
def test_s_new
|
|
584
|
+
assert_nothing_raised {
|
|
585
|
+
IPAddr.new("3FFE:505:ffff::/48")
|
|
586
|
+
IPAddr.new("0:0:0:1::")
|
|
587
|
+
IPAddr.new("2001:200:300::/48")
|
|
588
|
+
}
|
|
589
|
+
|
|
590
|
+
a = IPAddr.new
|
|
591
|
+
assert_equal("::", a.to_s)
|
|
592
|
+
assert_equal("0000:0000:0000:0000:0000:0000:0000:0000", a.to_string)
|
|
593
|
+
assert_equal(Socket::AF_INET6, a.family)
|
|
594
|
+
|
|
595
|
+
a = IPAddr.new("0123:4567:89ab:cdef:0ABC:DEF0:1234:5678")
|
|
596
|
+
assert_equal("123:4567:89ab:cdef:abc:def0:1234:5678", a.to_s)
|
|
597
|
+
assert_equal("0123:4567:89ab:cdef:0abc:def0:1234:5678", a.to_string)
|
|
598
|
+
assert_equal(Socket::AF_INET6, a.family)
|
|
599
|
+
|
|
600
|
+
a = IPAddr.new("3ffe:505:2::/48")
|
|
601
|
+
assert_equal("3ffe:505:2::", a.to_s)
|
|
602
|
+
assert_equal("3ffe:0505:0002:0000:0000:0000:0000:0000", a.to_string)
|
|
603
|
+
assert_equal(Socket::AF_INET6, a.family)
|
|
604
|
+
assert_equal(false, a.ipv4?)
|
|
605
|
+
assert_equal(true, a.ipv6?)
|
|
606
|
+
assert_equal("#<IPAddr: IPv6:3ffe:0505:0002:0000:0000:0000:0000:0000/ffff:ffff:ffff:0000:0000:0000:0000:0000>", a.inspect)
|
|
607
|
+
|
|
608
|
+
a = IPAddr.new("3ffe:505:2::/ffff:ffff:ffff::")
|
|
609
|
+
assert_equal("3ffe:505:2::", a.to_s)
|
|
610
|
+
assert_equal("3ffe:0505:0002:0000:0000:0000:0000:0000", a.to_string)
|
|
611
|
+
assert_equal(Socket::AF_INET6, a.family)
|
|
612
|
+
|
|
613
|
+
a = IPAddr.new("0.0.0.0")
|
|
614
|
+
assert_equal("0.0.0.0", a.to_s)
|
|
615
|
+
assert_equal("0.0.0.0", a.to_string)
|
|
616
|
+
assert_equal(Socket::AF_INET, a.family)
|
|
617
|
+
|
|
618
|
+
a = IPAddr.new("192.168.1.2")
|
|
619
|
+
assert_equal("192.168.1.2", a.to_s)
|
|
620
|
+
assert_equal("192.168.1.2", a.to_string)
|
|
621
|
+
assert_equal(Socket::AF_INET, a.family)
|
|
622
|
+
assert_equal(true, a.ipv4?)
|
|
623
|
+
assert_equal(false, a.ipv6?)
|
|
624
|
+
|
|
625
|
+
a = IPAddr.new("192.168.1.2/24")
|
|
626
|
+
assert_equal("192.168.1.0", a.to_s)
|
|
627
|
+
assert_equal("192.168.1.0", a.to_string)
|
|
628
|
+
assert_equal(Socket::AF_INET, a.family)
|
|
629
|
+
assert_equal("#<IPAddr: IPv4:192.168.1.0/255.255.255.0>", a.inspect)
|
|
630
|
+
|
|
631
|
+
a = IPAddr.new("192.168.1.2/255.255.255.0")
|
|
632
|
+
assert_equal("192.168.1.0", a.to_s)
|
|
633
|
+
assert_equal("192.168.1.0", a.to_string)
|
|
634
|
+
assert_equal(Socket::AF_INET, a.family)
|
|
635
|
+
|
|
636
|
+
assert_equal("0:0:0:1::", IPAddr.new("0:0:0:1::").to_s)
|
|
637
|
+
assert_equal("2001:200:300::", IPAddr.new("2001:200:300::/48").to_s)
|
|
638
|
+
|
|
639
|
+
assert_equal("2001:200:300::", IPAddr.new("[2001:200:300::]/48").to_s)
|
|
640
|
+
|
|
641
|
+
[
|
|
642
|
+
["fe80::1%fxp0"],
|
|
643
|
+
["::1/255.255.255.0"],
|
|
644
|
+
["::1:192.168.1.2/120"],
|
|
645
|
+
[IPAddr.new("::1").to_i],
|
|
646
|
+
["::ffff:192.168.1.2/120", Socket::AF_INET],
|
|
647
|
+
["[192.168.1.2]/120"],
|
|
648
|
+
].each { |args|
|
|
649
|
+
assert_raises(ArgumentError) {
|
|
650
|
+
IPAddr.new(*args)
|
|
651
|
+
}
|
|
652
|
+
}
|
|
653
|
+
end
|
|
654
|
+
|
|
655
|
+
def test_s_new_ntoh
|
|
656
|
+
addr = ''
|
|
657
|
+
IPAddr.new("1234:5678:9abc:def0:1234:5678:9abc:def0").hton.each_byte { |c|
|
|
658
|
+
addr += sprintf("%02x", c)
|
|
659
|
+
}
|
|
660
|
+
assert_equal("123456789abcdef0123456789abcdef0", addr)
|
|
661
|
+
addr = ''
|
|
662
|
+
IPAddr.new("123.45.67.89").hton.each_byte { |c|
|
|
663
|
+
addr += sprintf("%02x", c)
|
|
664
|
+
}
|
|
665
|
+
assert_equal(sprintf("%02x%02x%02x%02x", 123, 45, 67, 89), addr)
|
|
666
|
+
a = IPAddr.new("3ffe:505:2::")
|
|
667
|
+
assert_equal("3ffe:505:2::", IPAddr.new_ntoh(a.hton).to_s)
|
|
668
|
+
a = IPAddr.new("192.168.2.1")
|
|
669
|
+
assert_equal("192.168.2.1", IPAddr.new_ntoh(a.hton).to_s)
|
|
670
|
+
end
|
|
671
|
+
|
|
672
|
+
def test_ipv4_compat
|
|
673
|
+
a = IPAddr.new("::192.168.1.2")
|
|
674
|
+
assert_equal("::192.168.1.2", a.to_s)
|
|
675
|
+
assert_equal("0000:0000:0000:0000:0000:0000:c0a8:0102", a.to_string)
|
|
676
|
+
assert_equal(Socket::AF_INET6, a.family)
|
|
677
|
+
assert_equal(true, a.ipv4_compat?)
|
|
678
|
+
b = a.native
|
|
679
|
+
assert_equal("192.168.1.2", b.to_s)
|
|
680
|
+
assert_equal(Socket::AF_INET, b.family)
|
|
681
|
+
assert_equal(false, b.ipv4_compat?)
|
|
682
|
+
|
|
683
|
+
a = IPAddr.new("192.168.1.2")
|
|
684
|
+
b = a.ipv4_compat
|
|
685
|
+
assert_equal("::192.168.1.2", b.to_s)
|
|
686
|
+
assert_equal(Socket::AF_INET6, b.family)
|
|
687
|
+
end
|
|
688
|
+
|
|
689
|
+
def test_ipv4_mapped
|
|
690
|
+
a = IPAddr.new("::ffff:192.168.1.2")
|
|
691
|
+
assert_equal("::ffff:192.168.1.2", a.to_s)
|
|
692
|
+
assert_equal("0000:0000:0000:0000:0000:ffff:c0a8:0102", a.to_string)
|
|
693
|
+
assert_equal(Socket::AF_INET6, a.family)
|
|
694
|
+
assert_equal(true, a.ipv4_mapped?)
|
|
695
|
+
b = a.native
|
|
696
|
+
assert_equal("192.168.1.2", b.to_s)
|
|
697
|
+
assert_equal(Socket::AF_INET, b.family)
|
|
698
|
+
assert_equal(false, b.ipv4_mapped?)
|
|
699
|
+
|
|
700
|
+
a = IPAddr.new("192.168.1.2")
|
|
701
|
+
b = a.ipv4_mapped
|
|
702
|
+
assert_equal("::ffff:192.168.1.2", b.to_s)
|
|
703
|
+
assert_equal(Socket::AF_INET6, b.family)
|
|
704
|
+
end
|
|
705
|
+
|
|
706
|
+
def test_reverse
|
|
707
|
+
assert_equal("f.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.2.0.0.0.5.0.5.0.e.f.f.3.ip6.arpa", IPAddr.new("3ffe:505:2::f").reverse)
|
|
708
|
+
assert_equal("1.2.168.192.in-addr.arpa", IPAddr.new("192.168.2.1").reverse)
|
|
709
|
+
end
|
|
710
|
+
|
|
711
|
+
def test_ip6_arpa
|
|
712
|
+
assert_equal("f.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.2.0.0.0.5.0.5.0.e.f.f.3.ip6.arpa", IPAddr.new("3ffe:505:2::f").ip6_arpa)
|
|
713
|
+
assert_raises(ArgumentError) {
|
|
714
|
+
IPAddr.new("192.168.2.1").ip6_arpa
|
|
715
|
+
}
|
|
716
|
+
end
|
|
717
|
+
|
|
718
|
+
def test_ip6_int
|
|
719
|
+
assert_equal("f.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.2.0.0.0.5.0.5.0.e.f.f.3.ip6.int", IPAddr.new("3ffe:505:2::f").ip6_int)
|
|
720
|
+
assert_raises(ArgumentError) {
|
|
721
|
+
IPAddr.new("192.168.2.1").ip6_int
|
|
722
|
+
}
|
|
723
|
+
end
|
|
724
|
+
|
|
725
|
+
def test_to_s
|
|
726
|
+
assert_equal("3ffe:0505:0002:0000:0000:0000:0000:0001", IPAddr.new("3ffe:505:2::1").to_string)
|
|
727
|
+
assert_equal("3ffe:505:2::1", IPAddr.new("3ffe:505:2::1").to_s)
|
|
728
|
+
end
|
|
729
|
+
end
|
|
730
|
+
|
|
731
|
+
class TC_Operator < Test::Unit::TestCase
|
|
732
|
+
|
|
733
|
+
IN6MASK32 = "ffff:ffff::"
|
|
734
|
+
IN6MASK128 = "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff"
|
|
735
|
+
|
|
736
|
+
def setup
|
|
737
|
+
@in6_addr_any = IPAddr.new()
|
|
738
|
+
@a = IPAddr.new("3ffe:505:2::/48")
|
|
739
|
+
@b = IPAddr.new("0:0:0:1::")
|
|
740
|
+
@c = IPAddr.new(IN6MASK32)
|
|
741
|
+
end
|
|
742
|
+
alias set_up setup
|
|
743
|
+
|
|
744
|
+
def test_or
|
|
745
|
+
assert_equal("3ffe:505:2:1::", (@a | @b).to_s)
|
|
746
|
+
a = @a
|
|
747
|
+
a |= @b
|
|
748
|
+
assert_equal("3ffe:505:2:1::", a.to_s)
|
|
749
|
+
assert_equal("3ffe:505:2::", @a.to_s)
|
|
750
|
+
assert_equal("3ffe:505:2:1::",
|
|
751
|
+
(@a | 0x00000000000000010000000000000000).to_s)
|
|
752
|
+
end
|
|
753
|
+
|
|
754
|
+
def test_and
|
|
755
|
+
assert_equal("3ffe:505::", (@a & @c).to_s)
|
|
756
|
+
a = @a
|
|
757
|
+
a &= @c
|
|
758
|
+
assert_equal("3ffe:505::", a.to_s)
|
|
759
|
+
assert_equal("3ffe:505:2::", @a.to_s)
|
|
760
|
+
assert_equal("3ffe:505::", (@a & 0xffffffff000000000000000000000000).to_s)
|
|
761
|
+
end
|
|
762
|
+
|
|
763
|
+
def test_shift_right
|
|
764
|
+
assert_equal("0:3ffe:505:2::", (@a >> 16).to_s)
|
|
765
|
+
a = @a
|
|
766
|
+
a >>= 16
|
|
767
|
+
assert_equal("0:3ffe:505:2::", a.to_s)
|
|
768
|
+
assert_equal("3ffe:505:2::", @a.to_s)
|
|
769
|
+
end
|
|
770
|
+
|
|
771
|
+
def test_shift_left
|
|
772
|
+
assert_equal("505:2::", (@a << 16).to_s)
|
|
773
|
+
a = @a
|
|
774
|
+
a <<= 16
|
|
775
|
+
assert_equal("505:2::", a.to_s)
|
|
776
|
+
assert_equal("3ffe:505:2::", @a.to_s)
|
|
777
|
+
end
|
|
778
|
+
|
|
779
|
+
def test_carrot
|
|
780
|
+
a = ~@in6_addr_any
|
|
781
|
+
assert_equal(IN6MASK128, a.to_s)
|
|
782
|
+
assert_equal("::", @in6_addr_any.to_s)
|
|
783
|
+
end
|
|
784
|
+
|
|
785
|
+
def test_equal
|
|
786
|
+
assert_equal(true, @a == IPAddr.new("3ffe:505:2::"))
|
|
787
|
+
assert_equal(false, @a == IPAddr.new("3ffe:505:3::"))
|
|
788
|
+
assert_equal(true, @a != IPAddr.new("3ffe:505:3::"))
|
|
789
|
+
assert_equal(false, @a != IPAddr.new("3ffe:505:2::"))
|
|
790
|
+
end
|
|
791
|
+
|
|
792
|
+
def test_mask
|
|
793
|
+
a = @a.mask(32)
|
|
794
|
+
assert_equal("3ffe:505::", a.to_s)
|
|
795
|
+
assert_equal("3ffe:505:2::", @a.to_s)
|
|
796
|
+
end
|
|
797
|
+
|
|
798
|
+
def test_include?
|
|
799
|
+
assert_equal(true, @a.include?(IPAddr.new("3ffe:505:2::")))
|
|
800
|
+
assert_equal(true, @a.include?(IPAddr.new("3ffe:505:2::1")))
|
|
801
|
+
assert_equal(false, @a.include?(IPAddr.new("3ffe:505:3::")))
|
|
802
|
+
net1 = IPAddr.new("192.168.2.0/24")
|
|
803
|
+
assert_equal(true, net1.include?(IPAddr.new("192.168.2.0")))
|
|
804
|
+
assert_equal(true, net1.include?(IPAddr.new("192.168.2.255")))
|
|
805
|
+
assert_equal(false, net1.include?(IPAddr.new("192.168.3.0")))
|
|
806
|
+
# test with integer parameter
|
|
807
|
+
int = (192 << 24) + (168 << 16) + (2 << 8) + 13
|
|
808
|
+
|
|
809
|
+
assert_equal(true, net1.include?(int))
|
|
810
|
+
assert_equal(false, net1.include?(int+255))
|
|
811
|
+
|
|
812
|
+
end
|
|
813
|
+
|
|
814
|
+
end
|