cerberus 0.6 → 0.7
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/Authors.txt +4 -0
- data/Changelog.txt +11 -0
- data/Copyright.txt +16 -0
- data/Rakefile +16 -25
- data/Readme.markdown +1 -3
- data/bin/cerberus +5 -0
- data/lib/cerberus/builder/bjam.rb +1 -3
- data/lib/cerberus/builder/maven2.rb +0 -1
- data/lib/cerberus/builder/rake.rb +1 -1
- data/lib/cerberus/builder/rspec.rb +0 -1
- data/lib/cerberus/builder/ruby_base.rb +0 -1
- data/lib/cerberus/component_lazy_loader.rb +6 -2
- data/lib/cerberus/config.example.yml +1 -0
- data/lib/cerberus/constants.rb +2 -2
- data/lib/cerberus/manager.rb +7 -1
- data/lib/cerberus/publisher/mail.rb +4 -4
- data/lib/cerberus/publisher/twitter.rb +0 -1
- data/lib/cerberus/scm/base.rb +19 -0
- data/lib/cerberus/scm/bzr.rb +62 -0
- data/lib/cerberus/scm/cvs.rb +2 -7
- data/lib/cerberus/scm/darcs.rb +2 -11
- data/lib/cerberus/scm/git.rb +6 -14
- data/lib/cerberus/scm/perforce.rb +4 -4
- data/lib/cerberus/scm/svn.rb +2 -7
- data/lib/cerberus/utils.rb +5 -0
- data/lib/vendor/irc/README +23 -0
- data/lib/vendor/irc/lib/IRC.rb +164 -0
- data/lib/vendor/irc/lib/IRCChannel.rb +33 -0
- data/lib/vendor/irc/lib/IRCConnection.rb +134 -0
- data/lib/vendor/irc/lib/IRCEvent.rb +91 -0
- data/lib/vendor/irc/lib/IRCUser.rb +23 -0
- data/lib/vendor/irc/lib/IRCUtil.rb +49 -0
- data/lib/vendor/irc/lib/eventmap.yml +247 -0
- data/lib/vendor/twitter/CHANGES +129 -0
- data/lib/vendor/twitter/MIT-LICENSE +20 -0
- data/lib/vendor/twitter/README +37 -0
- data/lib/vendor/twitter/TODO +7 -0
- data/lib/vendor/twitter/lib/twitter.rb +34 -0
- data/lib/vendor/twitter/lib/twitter/client.rb +24 -0
- data/lib/vendor/twitter/lib/twitter/client/account.rb +24 -0
- data/lib/vendor/twitter/lib/twitter/client/auth.rb +27 -0
- data/lib/vendor/twitter/lib/twitter/client/base.rb +93 -0
- data/lib/vendor/twitter/lib/twitter/client/blocks.rb +35 -0
- data/lib/vendor/twitter/lib/twitter/client/favorites.rb +53 -0
- data/lib/vendor/twitter/lib/twitter/client/friendship.rb +35 -0
- data/lib/vendor/twitter/lib/twitter/client/graph.rb +37 -0
- data/lib/vendor/twitter/lib/twitter/client/messaging.rb +79 -0
- data/lib/vendor/twitter/lib/twitter/client/profile.rb +29 -0
- data/lib/vendor/twitter/lib/twitter/client/search.rb +27 -0
- data/lib/vendor/twitter/lib/twitter/client/status.rb +51 -0
- data/lib/vendor/twitter/lib/twitter/client/timeline.rb +72 -0
- data/lib/vendor/twitter/lib/twitter/client/user.rb +65 -0
- data/lib/vendor/twitter/lib/twitter/config.rb +77 -0
- data/lib/vendor/twitter/lib/twitter/console.rb +31 -0
- data/lib/vendor/twitter/lib/twitter/core.rb +137 -0
- data/lib/vendor/twitter/lib/twitter/ext.rb +2 -0
- data/lib/vendor/twitter/lib/twitter/ext/stdlib.rb +52 -0
- data/lib/vendor/twitter/lib/twitter/extras.rb +39 -0
- data/lib/vendor/twitter/lib/twitter/meta.rb +56 -0
- data/lib/vendor/twitter/lib/twitter/model.rb +360 -0
- data/lib/vendor/twitter/lib/twitter/version.rb +19 -0
- data/lib/vendor/twitter/spec/twitter/client/account_spec.rb +28 -0
- data/lib/vendor/twitter/spec/twitter/client/auth_spec.rb +34 -0
- data/lib/vendor/twitter/spec/twitter/client/base_spec.rb +242 -0
- data/lib/vendor/twitter/spec/twitter/client/blocks_spec.rb +76 -0
- data/lib/vendor/twitter/spec/twitter/client/favorites_spec.rb +183 -0
- data/lib/vendor/twitter/spec/twitter/client/friendship_spec.rb +76 -0
- data/lib/vendor/twitter/spec/twitter/client/graph_spec.rb +67 -0
- data/lib/vendor/twitter/spec/twitter/client/messaging_spec.rb +135 -0
- data/lib/vendor/twitter/spec/twitter/client/profile_spec.rb +91 -0
- data/lib/vendor/twitter/spec/twitter/client/search_spec.rb +68 -0
- data/lib/vendor/twitter/spec/twitter/client/status_spec.rb +119 -0
- data/lib/vendor/twitter/spec/twitter/client/timeline_spec.rb +79 -0
- data/lib/vendor/twitter/spec/twitter/client/user_spec.rb +203 -0
- data/lib/vendor/twitter/spec/twitter/client_spec.rb +2 -0
- data/lib/vendor/twitter/spec/twitter/config_spec.rb +86 -0
- data/lib/vendor/twitter/spec/twitter/console_spec.rb +15 -0
- data/lib/vendor/twitter/spec/twitter/core_spec.rb +127 -0
- data/lib/vendor/twitter/spec/twitter/ext/stdlib_spec.rb +59 -0
- data/lib/vendor/twitter/spec/twitter/extras_spec.rb +46 -0
- data/lib/vendor/twitter/spec/twitter/meta_spec.rb +90 -0
- data/lib/vendor/twitter/spec/twitter/model_spec.rb +508 -0
- data/lib/vendor/twitter/spec/twitter/version_spec.rb +19 -0
- data/lib/vendor/xmpp4r/CHANGELOG +83 -0
- data/lib/vendor/xmpp4r/COPYING +340 -0
- data/lib/vendor/xmpp4r/LICENSE +59 -0
- data/lib/vendor/xmpp4r/README.rdoc +110 -0
- data/lib/vendor/xmpp4r/README_ruby19.txt +43 -0
- data/lib/vendor/xmpp4r/Rakefile +262 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/advanced/adventure/README +56 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/advanced/adventure/adventure.rb +23 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/advanced/adventure/adventuremuc.rb +136 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/advanced/adventure/cube.xml +15 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/advanced/adventure/tower.xml +69 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/advanced/adventure/world.rb +424 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/advanced/fileserve.conf +11 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/advanced/fileserve.rb +346 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/advanced/getonline.rb +56 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/advanced/gtkmucclient.rb +315 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/advanced/migrate.rb +88 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/advanced/minimuc.rb +266 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/advanced/pep-aggregator/index.xsl +235 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/advanced/pep-aggregator/pep-aggregator.rb +147 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/advanced/recvfile.rb +84 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/advanced/rosterdiscovery.rb +129 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/advanced/sendfile.conf +10 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/advanced/sendfile.rb +72 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/advanced/shellmgr/shellmgr.rb +51 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/advanced/shellmgr/shellmgr_jabber.rb +43 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/advanced/shellmgr/shellmgr_test.rb +10 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/advanced/versionpoll.rb +90 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/advanced/xmpping.rb +146 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/advanced/xmppingrc.sample +14 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/basic/change_password.rb +41 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/basic/client.rb +70 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/basic/component.rb +11 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/basic/echo.rb +37 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/basic/jabbersend.rb +41 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/basic/mass_sender.rb +68 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/basic/muc_owner_config.rb +12 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/basic/mucinfo.rb +41 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/basic/mucsimplebot.rb +82 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/basic/register.rb +42 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/basic/remove_registration.rb +18 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/basic/roster.rb +44 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/basic/rosterprint.rb +50 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/basic/rosterrename.rb +34 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/basic/rosterwatch.rb +171 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/basic/send_vcard.rb +67 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/basic/tune_client.rb +56 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/basic/tune_server.rb +58 -0
- data/lib/vendor/xmpp4r/data/doc/xmpp4r/examples/basic/versionbot.rb +75 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r.rb +116 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/base64.rb +32 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/bytestreams.rb +15 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/bytestreams/helper/filetransfer.rb +319 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/bytestreams/helper/ibb/base.rb +257 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/bytestreams/helper/ibb/initiator.rb +31 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/bytestreams/helper/ibb/target.rb +47 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/bytestreams/helper/socks5bytestreams/base.rb +152 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/bytestreams/helper/socks5bytestreams/initiator.rb +86 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/bytestreams/helper/socks5bytestreams/server.rb +198 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/bytestreams/helper/socks5bytestreams/socks5.rb +65 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/bytestreams/helper/socks5bytestreams/target.rb +73 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/bytestreams/helper/socks5bytestreams/target.rb.orig +62 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/bytestreams/iq/bytestreams.rb +170 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/bytestreams/iq/si.rb +206 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/callbacks.rb +124 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/caps.rb +1 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/caps/c.rb +53 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/caps/helper/generator.rb +160 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/caps/helper/helper.rb +87 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/client.rb +317 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/command/helper/responder.rb +53 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/command/iq/command.rb +154 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/component.rb +103 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/connection.rb +219 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/dataforms.rb +5 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/dataforms/x/data.rb +297 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/debuglog.rb +42 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/delay.rb +5 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/delay/x/delay.rb +99 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/discovery.rb +7 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/discovery/helper/responder.rb +165 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/discovery/iq/discoinfo.rb +211 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/discovery/iq/discoitems.rb +147 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/errors.rb +281 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/feature_negotiation.rb +5 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/feature_negotiation/iq/feature.rb +28 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/framework/base.rb +55 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/framework/bot.rb +148 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/httpbinding.rb +5 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/httpbinding/client.rb +285 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/idgenerator.rb +37 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/iq.rb +221 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/jid.rb +167 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/message.rb +148 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/muc.rb +14 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/muc/helper/mucbrowser.rb +92 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/muc/helper/mucclient.rb +462 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/muc/helper/simplemucclient.rb +332 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/muc/iq/mucadmin.rb +23 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/muc/iq/mucadminitem.rb +20 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/muc/iq/mucowner.rb +15 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/muc/item.rb +143 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/muc/x/muc.rb +70 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/muc/x/mucuserinvite.rb +60 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/muc/x/mucuseritem.rb +36 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/presence.rb +232 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/pubsub.rb +8 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/pubsub/children/configuration.rb +86 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/pubsub/children/event.rb +49 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/pubsub/children/item.rb +35 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/pubsub/children/items.rb +44 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/pubsub/children/node_config.rb +48 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/pubsub/children/publish.rb +24 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/pubsub/children/subscription.rb +62 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/pubsub/children/subscription_config.rb +67 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/pubsub/children/unsubscribe.rb +48 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/pubsub/helper/nodebrowser.rb +130 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/pubsub/helper/nodehelper.rb +156 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/pubsub/helper/servicehelper.rb +417 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/pubsub/iq/pubsub.rb +19 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/query.rb +15 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/rexmladdons.rb +151 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/roster.rb +7 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/roster/helper/roster.rb +519 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/roster/iq/roster.rb +215 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/roster/x/roster.rb +138 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/rpc.rb +2 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/rpc/helper/client.rb +123 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/rpc/helper/server.rb +74 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/rpc/helper/xmlrpcaddons.rb +67 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/rpc/iq/rpc.rb +23 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/sasl.rb +237 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/semaphore.rb +38 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/stream.rb +497 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/streamparser.rb +77 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/tune.rb +2 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/tune/helper/helper.rb +58 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/tune/tune.rb +113 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/vcard.rb +6 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/vcard/helper/vcard.rb +84 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/vcard/iq/vcard.rb +109 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/version.rb +7 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/version/helper/responder.rb +72 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/version/helper/simpleresponder.rb +44 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/version/iq/version.rb +105 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/x.rb +37 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/xhtml.rb +1 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/xhtml/html.rb +115 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/xmpp4r.rb +18 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/xmppelement.rb +168 -0
- data/lib/vendor/xmpp4r/lib/xmpp4r/xmppstanza.rb +162 -0
- data/lib/vendor/xmpp4r/setup.rb +1586 -0
- data/lib/vendor/xmpp4r/test/bytestreams/tc_ibb.rb +186 -0
- data/lib/vendor/xmpp4r/test/bytestreams/tc_socks5bytestreams.rb +113 -0
- data/lib/vendor/xmpp4r/test/caps/tc_helper.rb +156 -0
- data/lib/vendor/xmpp4r/test/dataforms/tc_data.rb +81 -0
- data/lib/vendor/xmpp4r/test/delay/tc_xdelay.rb +51 -0
- data/lib/vendor/xmpp4r/test/discovery/tc_responder.rb +91 -0
- data/lib/vendor/xmpp4r/test/lib/assert_equal_xml.rb +14 -0
- data/lib/vendor/xmpp4r/test/lib/clienttester.rb +120 -0
- data/lib/vendor/xmpp4r/test/muc/tc_muc_mucclient.rb +830 -0
- data/lib/vendor/xmpp4r/test/muc/tc_muc_simplemucclient.rb +114 -0
- data/lib/vendor/xmpp4r/test/muc/tc_mucowner.rb +50 -0
- data/lib/vendor/xmpp4r/test/pubsub/tc_helper.rb +662 -0
- data/lib/vendor/xmpp4r/test/pubsub/tc_nodeconfig.rb +54 -0
- data/lib/vendor/xmpp4r/test/pubsub/tc_subscriptionconfig.rb +41 -0
- data/lib/vendor/xmpp4r/test/roster/tc_helper.rb +514 -0
- data/lib/vendor/xmpp4r/test/roster/tc_iqqueryroster.rb +173 -0
- data/lib/vendor/xmpp4r/test/roster/tc_xroster.rb +73 -0
- data/lib/vendor/xmpp4r/test/rpc/tc_helper.rb +96 -0
- data/lib/vendor/xmpp4r/test/tc_callbacks.rb +129 -0
- data/lib/vendor/xmpp4r/test/tc_class_names.rb +146 -0
- data/lib/vendor/xmpp4r/test/tc_client.rb +30 -0
- data/lib/vendor/xmpp4r/test/tc_errors.rb +146 -0
- data/lib/vendor/xmpp4r/test/tc_idgenerator.rb +30 -0
- data/lib/vendor/xmpp4r/test/tc_iq.rb +113 -0
- data/lib/vendor/xmpp4r/test/tc_iqquery.rb +31 -0
- data/lib/vendor/xmpp4r/test/tc_jid.rb +204 -0
- data/lib/vendor/xmpp4r/test/tc_message.rb +116 -0
- data/lib/vendor/xmpp4r/test/tc_presence.rb +150 -0
- data/lib/vendor/xmpp4r/test/tc_rexml.rb +139 -0
- data/lib/vendor/xmpp4r/test/tc_stream.rb +229 -0
- data/lib/vendor/xmpp4r/test/tc_streamComponent.rb +95 -0
- data/lib/vendor/xmpp4r/test/tc_streamError.rb +131 -0
- data/lib/vendor/xmpp4r/test/tc_streamSend.rb +59 -0
- data/lib/vendor/xmpp4r/test/tc_streamparser.rb +112 -0
- data/lib/vendor/xmpp4r/test/tc_xmppstanza.rb +135 -0
- data/lib/vendor/xmpp4r/test/ts_xmpp4r.rb +53 -0
- data/lib/vendor/xmpp4r/test/tune/tc_helper_recv.rb +84 -0
- data/lib/vendor/xmpp4r/test/tune/tc_helper_send.rb +74 -0
- data/lib/vendor/xmpp4r/test/tune/tc_tune.rb +79 -0
- data/lib/vendor/xmpp4r/test/vcard/tc_helper.rb +49 -0
- data/lib/vendor/xmpp4r/test/vcard/tc_iqvcard.rb +62 -0
- data/lib/vendor/xmpp4r/test/version/tc_helper.rb +60 -0
- data/lib/vendor/xmpp4r/test/version/tc_iqqueryversion.rb +97 -0
- data/lib/vendor/xmpp4r/test/xhtml/tc_html.rb +41 -0
- data/lib/vendor/xmpp4r/tools/gen_requires.bash +31 -0
- data/lib/vendor/xmpp4r/tools/xmpp4r-gemspec-test.rb +11 -0
- data/lib/vendor/xmpp4r/xmpp4r.gemspec +291 -0
- data/test/jabber_publisher_test.rb +1 -1
- data/test/mail_publisher_test.rb +2 -2
- data/test/mock/twitter.rb +0 -1
- data/test/rspec_builder_test.rb +39 -2
- data/test/rss_publisher_test.rb +1 -1
- data/test/twitter_publisher_test.rb +1 -1
- metadata +268 -53
- data/lib/cerberus/publisher/gmailer.rb +0 -17
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
# =XMPP4R - XMPP Library for Ruby
|
|
2
|
+
# License:: Ruby's license (see the LICENSE file) or GNU GPL, at your option.
|
|
3
|
+
# Website::http://home.gna.org/xmpp4r/
|
|
4
|
+
|
|
5
|
+
require 'xmpp4r/base64'
|
|
6
|
+
|
|
7
|
+
module Jabber
|
|
8
|
+
module Bytestreams
|
|
9
|
+
##
|
|
10
|
+
# In-Band Bytestreams (JEP-0047) implementation
|
|
11
|
+
#
|
|
12
|
+
# Don't use directly, use IBBInitiator and IBBTarget
|
|
13
|
+
#
|
|
14
|
+
# In-Band Bytestreams should only be used when transferring
|
|
15
|
+
# very small amounts of binary data, because it is slow and
|
|
16
|
+
# increases server load drastically.
|
|
17
|
+
#
|
|
18
|
+
# Note that the constructor takes a lot of arguments. In-Band
|
|
19
|
+
# Bytestreams do not specify a way to initiate the stream,
|
|
20
|
+
# this should be done via Stream Initiation.
|
|
21
|
+
class IBB
|
|
22
|
+
NS_IBB = 'http://jabber.org/protocol/ibb'
|
|
23
|
+
|
|
24
|
+
##
|
|
25
|
+
# Create a new bytestream
|
|
26
|
+
#
|
|
27
|
+
# Will register a <message/> callback to intercept data
|
|
28
|
+
# of this stream. This data will be buffered, you can retrieve
|
|
29
|
+
# it with receive
|
|
30
|
+
def initialize(stream, session_id, my_jid, peer_jid)
|
|
31
|
+
@stream = stream
|
|
32
|
+
@session_id = session_id
|
|
33
|
+
@my_jid = (my_jid.kind_of?(String) ? JID.new(my_jid) : my_jid)
|
|
34
|
+
@peer_jid = (peer_jid.kind_of?(String) ? JID.new(peer_jid) : peer_jid)
|
|
35
|
+
|
|
36
|
+
@active = false
|
|
37
|
+
@seq_send = 0
|
|
38
|
+
@seq_recv = 0
|
|
39
|
+
@queue = []
|
|
40
|
+
@queue_lock = Mutex.new
|
|
41
|
+
@pending = Semaphore.new
|
|
42
|
+
@sendbuf = ''
|
|
43
|
+
@sendbuf_lock = Mutex.new
|
|
44
|
+
|
|
45
|
+
@block_size = 4096 # Recommended by JEP0047
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def active?
|
|
49
|
+
@active
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
##
|
|
53
|
+
# Send data
|
|
54
|
+
#
|
|
55
|
+
# Data is buffered to match block_size in each packet.
|
|
56
|
+
# If you need the data to be sent immediately, use
|
|
57
|
+
# flush afterwards.
|
|
58
|
+
# buf:: [String]
|
|
59
|
+
def write(buf)
|
|
60
|
+
@sendbuf_lock.synchronize {
|
|
61
|
+
@sendbuf += buf
|
|
62
|
+
|
|
63
|
+
while @sendbuf.size >= @block_size
|
|
64
|
+
send_data(@sendbuf[0..@block_size-1])
|
|
65
|
+
@sendbuf = @sendbuf[@block_size..-1].to_s
|
|
66
|
+
end
|
|
67
|
+
}
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
##
|
|
71
|
+
# Empty the send-buffer by sending remaining data
|
|
72
|
+
def flush
|
|
73
|
+
@sendbuf_lock.synchronize {
|
|
74
|
+
while @sendbuf.size > 0
|
|
75
|
+
send_data(@sendbuf[0..@block_size-1])
|
|
76
|
+
@sendbuf = @sendbuf[@block_size..-1].to_s
|
|
77
|
+
end
|
|
78
|
+
}
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
##
|
|
82
|
+
# Receive data
|
|
83
|
+
#
|
|
84
|
+
# Will wait until the Message with the next sequence number
|
|
85
|
+
# is in the stanza queue.
|
|
86
|
+
def read
|
|
87
|
+
if active?
|
|
88
|
+
res = nil
|
|
89
|
+
|
|
90
|
+
while res.nil?
|
|
91
|
+
@queue_lock.synchronize {
|
|
92
|
+
@queue.each { |item|
|
|
93
|
+
# Find next data
|
|
94
|
+
if item.type == :data and item.seq == @seq_recv.to_s
|
|
95
|
+
res = item
|
|
96
|
+
break
|
|
97
|
+
# No data? Find close
|
|
98
|
+
elsif item.type == :close and res.nil?
|
|
99
|
+
res = item
|
|
100
|
+
end
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
@queue.delete_if { |item| item == res }
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
# No data? Wait for next to arrive...
|
|
107
|
+
@pending.wait unless res
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
if res.type == :data
|
|
111
|
+
@seq_recv += 1
|
|
112
|
+
@seq_recv = 0 if @seq_recv > 65535
|
|
113
|
+
res.data
|
|
114
|
+
elsif res.type == :close
|
|
115
|
+
deactivate
|
|
116
|
+
nil # Closed
|
|
117
|
+
end
|
|
118
|
+
else
|
|
119
|
+
nil
|
|
120
|
+
end
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
##
|
|
124
|
+
# Close the stream
|
|
125
|
+
#
|
|
126
|
+
# Waits for acknowledge from peer,
|
|
127
|
+
# may throw ServerError
|
|
128
|
+
def close
|
|
129
|
+
if active?
|
|
130
|
+
flush
|
|
131
|
+
deactivate
|
|
132
|
+
|
|
133
|
+
iq = Iq.new(:set, @peer_jid)
|
|
134
|
+
close = iq.add REXML::Element.new('close')
|
|
135
|
+
close.add_namespace IBB::NS_IBB
|
|
136
|
+
close.attributes['sid'] = @session_id
|
|
137
|
+
|
|
138
|
+
@stream.send_with_id(iq)
|
|
139
|
+
end
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
private
|
|
143
|
+
|
|
144
|
+
##
|
|
145
|
+
# Send data directly
|
|
146
|
+
# data:: [String]
|
|
147
|
+
def send_data(databuf)
|
|
148
|
+
if active?
|
|
149
|
+
msg = Message.new
|
|
150
|
+
msg.from = @my_jid
|
|
151
|
+
msg.to = @peer_jid
|
|
152
|
+
|
|
153
|
+
data = msg.add REXML::Element.new('data')
|
|
154
|
+
data.add_namespace NS_IBB
|
|
155
|
+
data.attributes['sid'] = @session_id
|
|
156
|
+
data.attributes['seq'] = @seq_send.to_s
|
|
157
|
+
data.text = Base64::encode64(databuf)
|
|
158
|
+
|
|
159
|
+
# TODO: Implement AMP correctly
|
|
160
|
+
amp = msg.add REXML::Element.new('amp')
|
|
161
|
+
amp.add_namespace 'http://jabber.org/protocol/amp'
|
|
162
|
+
deliver_at = amp.add REXML::Element.new('rule')
|
|
163
|
+
deliver_at.attributes['condition'] = 'deliver-at'
|
|
164
|
+
deliver_at.attributes['value'] = 'stored'
|
|
165
|
+
deliver_at.attributes['action'] = 'error'
|
|
166
|
+
match_resource = amp.add REXML::Element.new('rule')
|
|
167
|
+
match_resource.attributes['condition'] = 'match-resource'
|
|
168
|
+
match_resource.attributes['value'] = 'exact'
|
|
169
|
+
match_resource.attributes['action'] = 'error'
|
|
170
|
+
|
|
171
|
+
@stream.send(msg)
|
|
172
|
+
|
|
173
|
+
@seq_send += 1
|
|
174
|
+
@seq_send = 0 if @seq_send > 65535
|
|
175
|
+
else
|
|
176
|
+
raise 'Attempt to send data when not activated'
|
|
177
|
+
end
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
def activate
|
|
181
|
+
unless active?
|
|
182
|
+
@stream.add_message_callback(200, self) { |msg|
|
|
183
|
+
data = msg.first_element('data')
|
|
184
|
+
if msg.from == @peer_jid and msg.to == @my_jid and data and data.attributes['sid'] == @session_id
|
|
185
|
+
if msg.type == nil
|
|
186
|
+
@queue_lock.synchronize {
|
|
187
|
+
@queue.push IBBQueueItem.new(:data, data.attributes['seq'], data.text.to_s)
|
|
188
|
+
@pending.run
|
|
189
|
+
}
|
|
190
|
+
elsif msg.type == :error
|
|
191
|
+
@queue_lock.synchronize {
|
|
192
|
+
@queue << IBBQueueItem.new(:close)
|
|
193
|
+
@pending.run
|
|
194
|
+
}
|
|
195
|
+
end
|
|
196
|
+
true
|
|
197
|
+
else
|
|
198
|
+
false
|
|
199
|
+
end
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
@stream.add_iq_callback(200, self) { |iq|
|
|
203
|
+
close = iq.first_element('close')
|
|
204
|
+
if iq.type == :set and close and close.attributes['sid'] == @session_id
|
|
205
|
+
answer = iq.answer(false)
|
|
206
|
+
answer.type = :result
|
|
207
|
+
@stream.send(answer)
|
|
208
|
+
|
|
209
|
+
@queue_lock.synchronize {
|
|
210
|
+
@queue << IBBQueueItem.new(:close)
|
|
211
|
+
@pending.run
|
|
212
|
+
}
|
|
213
|
+
true
|
|
214
|
+
else
|
|
215
|
+
false
|
|
216
|
+
end
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
@active = true
|
|
220
|
+
end
|
|
221
|
+
end
|
|
222
|
+
|
|
223
|
+
def deactivate
|
|
224
|
+
if active?
|
|
225
|
+
@stream.delete_message_callback(self)
|
|
226
|
+
@stream.delete_iq_callback(self)
|
|
227
|
+
|
|
228
|
+
@active = false
|
|
229
|
+
end
|
|
230
|
+
end
|
|
231
|
+
end
|
|
232
|
+
|
|
233
|
+
##
|
|
234
|
+
# Represents an item in the internal data queue
|
|
235
|
+
class IBBQueueItem
|
|
236
|
+
attr_reader :type, :seq
|
|
237
|
+
def initialize(type, seq=nil, data_text='')
|
|
238
|
+
unless [:data, :close].include? type
|
|
239
|
+
raise "Unknown IBBQueueItem type: #{type}"
|
|
240
|
+
end
|
|
241
|
+
|
|
242
|
+
@type = type
|
|
243
|
+
@seq = seq
|
|
244
|
+
@data = data_text
|
|
245
|
+
end
|
|
246
|
+
|
|
247
|
+
##
|
|
248
|
+
# Return the Base64-*decoded* data
|
|
249
|
+
#
|
|
250
|
+
# There's no need to catch Exceptions here,
|
|
251
|
+
# as none are thrown.
|
|
252
|
+
def data
|
|
253
|
+
Base64::decode64(@data)
|
|
254
|
+
end
|
|
255
|
+
end
|
|
256
|
+
end
|
|
257
|
+
end
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# =XMPP4R - XMPP Library for Ruby
|
|
2
|
+
# License:: Ruby's license (see the LICENSE file) or GNU GPL, at your option.
|
|
3
|
+
# Website::http://home.gna.org/xmpp4r/
|
|
4
|
+
|
|
5
|
+
module Jabber
|
|
6
|
+
module Bytestreams
|
|
7
|
+
##
|
|
8
|
+
# Implementation of IBB at the initiator side
|
|
9
|
+
class IBBInitiator < IBB
|
|
10
|
+
# You may set the block-size before open
|
|
11
|
+
attr_accessor :block_size
|
|
12
|
+
|
|
13
|
+
##
|
|
14
|
+
# Open the stream to the peer,
|
|
15
|
+
# waits for successful result
|
|
16
|
+
#
|
|
17
|
+
# May throw ServerError
|
|
18
|
+
def open
|
|
19
|
+
iq = Iq.new(:set, @peer_jid)
|
|
20
|
+
open = iq.add REXML::Element.new('open')
|
|
21
|
+
open.add_namespace IBB::NS_IBB
|
|
22
|
+
open.attributes['sid'] = @session_id
|
|
23
|
+
open.attributes['block-size'] = @block_size.to_s
|
|
24
|
+
|
|
25
|
+
@stream.send_with_id(iq)
|
|
26
|
+
|
|
27
|
+
activate
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# =XMPP4R - XMPP Library for Ruby
|
|
2
|
+
# License:: Ruby's license (see the LICENSE file) or GNU GPL, at your option.
|
|
3
|
+
# Website::http://home.gna.org/xmpp4r/
|
|
4
|
+
|
|
5
|
+
module Jabber
|
|
6
|
+
module Bytestreams
|
|
7
|
+
##
|
|
8
|
+
# Implementation of IBB at the target side
|
|
9
|
+
class IBBTarget < IBB
|
|
10
|
+
# You may read the block-size after accept
|
|
11
|
+
attr_reader :block_size
|
|
12
|
+
|
|
13
|
+
def initialize(stream, session_id, initiator_jid, target_jid)
|
|
14
|
+
# Target and Initiator are swapped here, because we're the target
|
|
15
|
+
super(stream, session_id, target_jid, initiator_jid)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
##
|
|
19
|
+
# Wait for the initiator side to start
|
|
20
|
+
# the stream.
|
|
21
|
+
def accept
|
|
22
|
+
connect_sem = Semaphore.new
|
|
23
|
+
|
|
24
|
+
@stream.add_iq_callback(200, self) { |iq|
|
|
25
|
+
open = iq.first_element('open')
|
|
26
|
+
if iq.type == :set and iq.from == @peer_jid and iq.to == @my_jid and open and open.attributes['sid'] == @session_id
|
|
27
|
+
@stream.delete_iq_callback(self)
|
|
28
|
+
activate
|
|
29
|
+
@block_size = (open.attributes['block-size'] || 4096).to_i
|
|
30
|
+
|
|
31
|
+
reply = iq.answer(false)
|
|
32
|
+
reply.type = :result
|
|
33
|
+
@stream.send(reply)
|
|
34
|
+
|
|
35
|
+
connect_sem.run
|
|
36
|
+
true
|
|
37
|
+
else
|
|
38
|
+
false
|
|
39
|
+
end
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
connect_sem.wait
|
|
43
|
+
true
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
# =XMPP4R - XMPP Library for Ruby
|
|
2
|
+
# License:: Ruby's license (see the LICENSE file) or GNU GPL, at your option.
|
|
3
|
+
# Website::http://home.gna.org/xmpp4r/
|
|
4
|
+
|
|
5
|
+
require 'socket'
|
|
6
|
+
require 'thread'
|
|
7
|
+
require 'timeout'
|
|
8
|
+
require 'digest/sha1'
|
|
9
|
+
|
|
10
|
+
require 'xmpp4r/callbacks'
|
|
11
|
+
|
|
12
|
+
module Jabber
|
|
13
|
+
module Bytestreams
|
|
14
|
+
##
|
|
15
|
+
# SOCKS5 Bytestreams (JEP-0065) implementation
|
|
16
|
+
#
|
|
17
|
+
# Don't use directly, use SOCKS5BytestreamsInitiator
|
|
18
|
+
# and SOCKS5BytestreamsTarget
|
|
19
|
+
class SOCKS5Bytestreams
|
|
20
|
+
##
|
|
21
|
+
# [StreamHost] the SOCKS connection is using
|
|
22
|
+
attr_reader :streamhost_used
|
|
23
|
+
|
|
24
|
+
##
|
|
25
|
+
# SOCKS connection timeout (for trying multiple streamhosts)
|
|
26
|
+
#
|
|
27
|
+
# default: nil, use the OS' default timeout
|
|
28
|
+
attr_accessor :connect_timeout
|
|
29
|
+
|
|
30
|
+
def initialize(stream, session_id, initiator_jid, target_jid)
|
|
31
|
+
@stream = stream
|
|
32
|
+
@session_id = session_id
|
|
33
|
+
@initiator_jid = (initiator_jid.kind_of?(String) ? JID.new(initiator_jid) : initiator_jid)
|
|
34
|
+
@target_jid = (target_jid.kind_of?(String) ? JID.new(target_jid) : target_jid)
|
|
35
|
+
@socks = nil
|
|
36
|
+
@connect_timeout = nil
|
|
37
|
+
@streamhost_used = nil
|
|
38
|
+
@streamhost_cbs = CallbackList.new
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
##
|
|
42
|
+
# Add a callback that will be called when there is action regarding
|
|
43
|
+
# SOCKS stream-hosts
|
|
44
|
+
#
|
|
45
|
+
# Usage of this callback is optional and serves informational purposes only.
|
|
46
|
+
#
|
|
47
|
+
# block takes three arguments:
|
|
48
|
+
# * The StreamHost instance that is currently being tried
|
|
49
|
+
# * State information (is either :connecting, :authenticating, :success or :failure)
|
|
50
|
+
# * The exception value for the state :failure, else nil
|
|
51
|
+
def add_streamhost_callback(priority = 0, ref = nil, &block)
|
|
52
|
+
@streamhost_cbs.add(priority, ref, block)
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
##
|
|
56
|
+
# Receive from the stream-host
|
|
57
|
+
# length:: [Fixnum] Amount of bytes (Will be passed to TCPSocket#read for the underlying SOCKS5 connection)
|
|
58
|
+
# result:: [String] (or [nil] if finished)
|
|
59
|
+
def read(length=nil)
|
|
60
|
+
@socks.read(length)
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
##
|
|
64
|
+
# Flush the SOCKS5 socket
|
|
65
|
+
def flush
|
|
66
|
+
@socks.flush
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
##
|
|
70
|
+
# Send to the stream-host
|
|
71
|
+
# buf:: [String] Data
|
|
72
|
+
# result:: [Fixnum] Amount of bytes sent
|
|
73
|
+
def write(buf)
|
|
74
|
+
@socks.write(buf)
|
|
75
|
+
# FIXME: On FreeBSD this throws Errno::EPERM after it has already written a few
|
|
76
|
+
# kilobytes, and when there are multiple sockets. ktrace told, that this originates
|
|
77
|
+
# from the syscall, not ruby.
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
##
|
|
81
|
+
# Close the stream-host connection
|
|
82
|
+
def close
|
|
83
|
+
@socks.close
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
##
|
|
87
|
+
# Query a JID for its stream-host information
|
|
88
|
+
#
|
|
89
|
+
# SOCKS5BytestreamsInitiator#add_streamhost can do this for you.
|
|
90
|
+
# Use this method if you plan to do multiple transfers, so
|
|
91
|
+
# you can cache the result.
|
|
92
|
+
# stream:: [Stream] to operate on
|
|
93
|
+
# streamhost:: [JID] of the proxy
|
|
94
|
+
# my_jid:: [JID] Optional sender JID for Component operation
|
|
95
|
+
def self.query_streamhost(stream, streamhost, my_jid=nil)
|
|
96
|
+
res = nil
|
|
97
|
+
|
|
98
|
+
iq = Iq.new(:get, streamhost)
|
|
99
|
+
iq.from = my_jid
|
|
100
|
+
iq.add(IqQueryBytestreams.new)
|
|
101
|
+
stream.send_with_id(iq) { |reply|
|
|
102
|
+
reply.query.each_element { |e|
|
|
103
|
+
if e.kind_of?(StreamHost)
|
|
104
|
+
e.jid = reply.from # Help misconfigured proxys
|
|
105
|
+
res = e
|
|
106
|
+
end
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
if res and res.jid and res.host and res.port
|
|
111
|
+
res
|
|
112
|
+
else
|
|
113
|
+
nil
|
|
114
|
+
end
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
private
|
|
118
|
+
|
|
119
|
+
##
|
|
120
|
+
# The address the stream-host expects from us.
|
|
121
|
+
# According to JEP-0096 this is the SHA1 hash
|
|
122
|
+
# of the concatenation of session_id,
|
|
123
|
+
# initiator_jid and target_jid.
|
|
124
|
+
# result:: [String] SHA1 hash
|
|
125
|
+
def stream_address
|
|
126
|
+
Digest::SHA1.hexdigest("#{@session_id}#{@initiator_jid}#{@target_jid}")
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
##
|
|
130
|
+
# Try a streamhost
|
|
131
|
+
# result:: [SOCKS5Socket]
|
|
132
|
+
def connect_socks(streamhost)
|
|
133
|
+
Timeout::timeout(@connect_timeout, Errno::ETIMEDOUT) {
|
|
134
|
+
Jabber::debuglog("SOCKS5 Bytestreams: connecting to proxy #{streamhost.jid} (#{streamhost.host}:#{streamhost.port})")
|
|
135
|
+
@streamhost_cbs.process(streamhost, :connecting, nil)
|
|
136
|
+
socks = SOCKS5Socket.new(streamhost.host, streamhost.port)
|
|
137
|
+
|
|
138
|
+
Jabber::debuglog("SOCKS5 Bytestreams: connected, authenticating")
|
|
139
|
+
@streamhost_cbs.process(streamhost, :authenticating, nil)
|
|
140
|
+
socks.auth
|
|
141
|
+
|
|
142
|
+
socks.connect_domain(stream_address, 0)
|
|
143
|
+
|
|
144
|
+
Jabber::debuglog("SOCKS5 Bytestreams: connected")
|
|
145
|
+
@streamhost_cbs.process(streamhost, :success, nil)
|
|
146
|
+
|
|
147
|
+
socks
|
|
148
|
+
}
|
|
149
|
+
end
|
|
150
|
+
end
|
|
151
|
+
end
|
|
152
|
+
end
|