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,285 @@
|
|
|
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
|
+
|
|
6
|
+
require 'xmpp4r/client'
|
|
7
|
+
require 'net/http'
|
|
8
|
+
|
|
9
|
+
module Jabber
|
|
10
|
+
module HTTPBinding
|
|
11
|
+
##
|
|
12
|
+
# This class implements an alternative Client
|
|
13
|
+
# using HTTP Binding (JEP0124).
|
|
14
|
+
#
|
|
15
|
+
# This class is designed to be a drop-in replacement
|
|
16
|
+
# for Jabber::Client, except for the
|
|
17
|
+
# Jabber::HTTP::Client#connect method which takes an URI
|
|
18
|
+
# as argument.
|
|
19
|
+
#
|
|
20
|
+
# HTTP requests are buffered to not exceed the negotiated
|
|
21
|
+
# 'polling' and 'requests' parameters.
|
|
22
|
+
#
|
|
23
|
+
# Stanzas in HTTP resonses may be delayed to arrive in the
|
|
24
|
+
# order defined by 'rid' parameters.
|
|
25
|
+
#
|
|
26
|
+
# =Debugging
|
|
27
|
+
# Turning Jabber::debug to true will make debug output
|
|
28
|
+
# not only spit out stanzas but HTTP request/response
|
|
29
|
+
# bodies, too.
|
|
30
|
+
class Client < Jabber::Client
|
|
31
|
+
|
|
32
|
+
# Content-Type to be used for communication
|
|
33
|
+
# (you can set this to "text/html")
|
|
34
|
+
attr_accessor :http_content_type
|
|
35
|
+
# The server should wait this value seconds if
|
|
36
|
+
# there is no stanza to be received
|
|
37
|
+
attr_accessor :http_wait
|
|
38
|
+
# The server may hold this amount of stanzas
|
|
39
|
+
# to reduce number of HTTP requests
|
|
40
|
+
attr_accessor :http_hold
|
|
41
|
+
|
|
42
|
+
##
|
|
43
|
+
# Initialize
|
|
44
|
+
# jid:: [JID or String]
|
|
45
|
+
def initialize(jid)
|
|
46
|
+
super
|
|
47
|
+
|
|
48
|
+
@lock = Mutex.new
|
|
49
|
+
@pending_requests = 0
|
|
50
|
+
@last_send = Time.at(0)
|
|
51
|
+
@send_buffer = ''
|
|
52
|
+
|
|
53
|
+
@http_wait = 20
|
|
54
|
+
@http_hold = 1
|
|
55
|
+
@http_content_type = 'text/xml; charset=utf-8'
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
##
|
|
59
|
+
# Set up the stream using uri as the HTTP Binding URI
|
|
60
|
+
#
|
|
61
|
+
# You may optionally pass host and port parameters
|
|
62
|
+
# to make use of the JEP0124 'route' feature.
|
|
63
|
+
#
|
|
64
|
+
# uri:: [URI::Generic or String]
|
|
65
|
+
# host:: [String] Optional host to route to
|
|
66
|
+
# port:: [Fixnum] Port for route feature
|
|
67
|
+
def connect(uri, host=nil, port=5222)
|
|
68
|
+
uri = URI::parse(uri) unless uri.kind_of? URI::Generic
|
|
69
|
+
@uri = uri
|
|
70
|
+
|
|
71
|
+
@allow_tls = false # Shall be done at HTTP level
|
|
72
|
+
@stream_mechanisms = []
|
|
73
|
+
@stream_features = {}
|
|
74
|
+
@http_rid = IdGenerator.generate_id.to_i
|
|
75
|
+
@pending_rid = @http_rid
|
|
76
|
+
@pending_rid_lock = Mutex.new
|
|
77
|
+
|
|
78
|
+
req_body = REXML::Element.new('body')
|
|
79
|
+
req_body.attributes['rid'] = @http_rid
|
|
80
|
+
req_body.attributes['content'] = @http_content_type
|
|
81
|
+
req_body.attributes['hold'] = @http_hold.to_s
|
|
82
|
+
req_body.attributes['wait'] = @http_wait.to_s
|
|
83
|
+
req_body.attributes['to'] = @jid.domain
|
|
84
|
+
if host
|
|
85
|
+
req_body.attributes['route'] = 'xmpp:#{host}:#{port}'
|
|
86
|
+
end
|
|
87
|
+
req_body.attributes['secure'] = 'true'
|
|
88
|
+
req_body.attributes['xmlns'] = 'http://jabber.org/protocol/httpbind'
|
|
89
|
+
res_body = post(req_body)
|
|
90
|
+
unless res_body.name == 'body'
|
|
91
|
+
raise 'Response body is no <body/> element'
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
@streamid = res_body.attributes['authid']
|
|
95
|
+
@status = CONNECTED
|
|
96
|
+
@http_sid = res_body.attributes['sid']
|
|
97
|
+
@http_wait = res_body.attributes['wait'].to_i if res_body.attributes['wait']
|
|
98
|
+
@http_hold = res_body.attributes['hold'].to_i if res_body.attributes['hold']
|
|
99
|
+
@http_inactivity = res_body.attributes['inactivity'].to_i
|
|
100
|
+
@http_polling = res_body.attributes['polling'].to_i
|
|
101
|
+
@http_polling = 5 if @http_polling == 0
|
|
102
|
+
@http_requests = res_body.attributes['requests'].to_i
|
|
103
|
+
@http_requests = 1 if @http_requests == 0
|
|
104
|
+
|
|
105
|
+
receive_elements_with_rid(@http_rid, res_body.children)
|
|
106
|
+
|
|
107
|
+
@features_sem.run
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
##
|
|
111
|
+
# Send a stanza, additionally with block
|
|
112
|
+
#
|
|
113
|
+
# This method ensures a 'jabber:client' namespace for
|
|
114
|
+
# the stanza
|
|
115
|
+
def send(xml, &block)
|
|
116
|
+
if xml.kind_of? REXML::Element
|
|
117
|
+
xml.add_namespace('jabber:client')
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
super
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
##
|
|
124
|
+
# Ensure that there is one pending request
|
|
125
|
+
#
|
|
126
|
+
# Will be automatically called if you've sent
|
|
127
|
+
# a stanza.
|
|
128
|
+
def ensure_one_pending_request
|
|
129
|
+
return if is_disconnected?
|
|
130
|
+
|
|
131
|
+
if @lock.synchronize { @pending_requests } < 1
|
|
132
|
+
send_data('')
|
|
133
|
+
end
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
##
|
|
137
|
+
# Close the session by sending
|
|
138
|
+
# <presence type='unavailable'/>
|
|
139
|
+
def close
|
|
140
|
+
@status = DISCONNECTED
|
|
141
|
+
send(Jabber::Presence.new.set_type(:unavailable))
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
private
|
|
145
|
+
|
|
146
|
+
##
|
|
147
|
+
# Receive stanzas ensuring that the 'rid' order is kept
|
|
148
|
+
# result:: [REXML::Element]
|
|
149
|
+
def receive_elements_with_rid(rid, elements)
|
|
150
|
+
while rid > @pending_rid
|
|
151
|
+
@pending_rid_lock.lock
|
|
152
|
+
end
|
|
153
|
+
@pending_rid = rid + 1
|
|
154
|
+
|
|
155
|
+
elements.each { |e|
|
|
156
|
+
receive(e)
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
@pending_rid_lock.unlock
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
##
|
|
163
|
+
# Do a POST request
|
|
164
|
+
def post(body)
|
|
165
|
+
body = body.to_s
|
|
166
|
+
request = Net::HTTP::Post.new(@uri.path)
|
|
167
|
+
request.content_length = body.size
|
|
168
|
+
request.body = body
|
|
169
|
+
request['Content-Type'] = @http_content_type
|
|
170
|
+
Jabber::debuglog("HTTP REQUEST (#{@pending_requests}/#{@http_requests}):\n#{request.body}")
|
|
171
|
+
response = Net::HTTP.start(@uri.host, @uri.port) { |http|
|
|
172
|
+
http.use_ssl = true if @uri.kind_of? URI::HTTPS
|
|
173
|
+
http.request(request)
|
|
174
|
+
}
|
|
175
|
+
Jabber::debuglog("HTTP RESPONSE (#{@pending_requests}/#{@http_requests}):\n#{response.body}")
|
|
176
|
+
|
|
177
|
+
unless response.kind_of? Net::HTTPSuccess
|
|
178
|
+
# Unfortunately, HTTPResponses aren't exceptions
|
|
179
|
+
# TODO: rescue'ing code should be able to distinguish
|
|
180
|
+
raise Net::HTTPBadResponse, "#{response.class}"
|
|
181
|
+
end
|
|
182
|
+
|
|
183
|
+
body = REXML::Document.new(response.body).root
|
|
184
|
+
if body.name != 'body' and body.namespace != 'http://jabber.org/protocol/httpbind'
|
|
185
|
+
raise REXML::ParseException.new('Malformed body')
|
|
186
|
+
end
|
|
187
|
+
body
|
|
188
|
+
end
|
|
189
|
+
|
|
190
|
+
##
|
|
191
|
+
# Prepare data to POST and
|
|
192
|
+
# handle the result
|
|
193
|
+
def post_data(data)
|
|
194
|
+
req_body = nil
|
|
195
|
+
current_rid = nil
|
|
196
|
+
|
|
197
|
+
begin
|
|
198
|
+
begin
|
|
199
|
+
@lock.synchronize {
|
|
200
|
+
# Do not send unneeded requests
|
|
201
|
+
if data.size < 1 and @pending_requests > 0
|
|
202
|
+
return
|
|
203
|
+
end
|
|
204
|
+
|
|
205
|
+
req_body = "<body"
|
|
206
|
+
req_body += " rid='#{@http_rid += 1}'"
|
|
207
|
+
req_body += " sid='#{@http_sid}'"
|
|
208
|
+
req_body += " xmlns='http://jabber.org/protocol/httpbind'"
|
|
209
|
+
req_body += ">"
|
|
210
|
+
req_body += data
|
|
211
|
+
req_body += "</body>"
|
|
212
|
+
current_rid = @http_rid
|
|
213
|
+
|
|
214
|
+
@pending_requests += 1
|
|
215
|
+
@last_send = Time.now
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
res_body = post(req_body)
|
|
219
|
+
|
|
220
|
+
ensure
|
|
221
|
+
@lock.synchronize { @pending_requests -= 1 }
|
|
222
|
+
end
|
|
223
|
+
|
|
224
|
+
receive_elements_with_rid(current_rid, res_body.children)
|
|
225
|
+
ensure_one_pending_request
|
|
226
|
+
|
|
227
|
+
rescue REXML::ParseException
|
|
228
|
+
if @exception_block
|
|
229
|
+
Thread.new do
|
|
230
|
+
Thread.current.abort_on_exception = true
|
|
231
|
+
close; @exception_block.call(e, self, :parser)
|
|
232
|
+
end
|
|
233
|
+
else
|
|
234
|
+
Jabber::debuglog "Exception caught when parsing HTTP response!"
|
|
235
|
+
close
|
|
236
|
+
raise
|
|
237
|
+
end
|
|
238
|
+
|
|
239
|
+
rescue StandardError => e
|
|
240
|
+
Jabber::debuglog("POST error (will retry): #{e.class}: #{e}")
|
|
241
|
+
receive_elements_with_rid(current_rid, [])
|
|
242
|
+
# It's not good to resend on *any* exception,
|
|
243
|
+
# but there are too many cases (Timeout, 404, 502)
|
|
244
|
+
# where resending is appropriate
|
|
245
|
+
# TODO: recognize these conditions and act appropriate
|
|
246
|
+
send_data(data)
|
|
247
|
+
end
|
|
248
|
+
end
|
|
249
|
+
|
|
250
|
+
##
|
|
251
|
+
# Send data,
|
|
252
|
+
# buffered and obeying 'polling' and 'requests' limits
|
|
253
|
+
def send_data(data)
|
|
254
|
+
@lock.synchronize do
|
|
255
|
+
|
|
256
|
+
@send_buffer += data
|
|
257
|
+
limited_by_polling = (@last_send + @http_polling >= Time.now)
|
|
258
|
+
limited_by_requests = (@pending_requests + 1 > @http_requests)
|
|
259
|
+
|
|
260
|
+
# Can we send?
|
|
261
|
+
if !limited_by_polling and !limited_by_requests
|
|
262
|
+
data = @send_buffer
|
|
263
|
+
@send_buffer = ''
|
|
264
|
+
|
|
265
|
+
Thread.new do
|
|
266
|
+
Thread.current.abort_on_exception = true
|
|
267
|
+
post_data(data)
|
|
268
|
+
end
|
|
269
|
+
|
|
270
|
+
elsif !limited_by_requests
|
|
271
|
+
Thread.new do
|
|
272
|
+
Thread.current.abort_on_exception = true
|
|
273
|
+
# Defer until @http_polling has expired
|
|
274
|
+
wait = @last_send + @http_polling - Time.now
|
|
275
|
+
sleep(wait) if wait > 0
|
|
276
|
+
# Ignore locking, it's already threaded ;-)
|
|
277
|
+
send_data('')
|
|
278
|
+
end
|
|
279
|
+
end
|
|
280
|
+
|
|
281
|
+
end
|
|
282
|
+
end
|
|
283
|
+
end
|
|
284
|
+
end
|
|
285
|
+
end
|
|
@@ -0,0 +1,37 @@
|
|
|
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 'singleton'
|
|
6
|
+
|
|
7
|
+
module Jabber
|
|
8
|
+
##
|
|
9
|
+
# The Jabber::IdGenerator class generates unique IDs for use
|
|
10
|
+
# in XMMP stanzas. Jabber::IdGenerator includes the Singleton
|
|
11
|
+
# Mixin, usage as following:
|
|
12
|
+
# Jabber::IdGenerator.generate_id
|
|
13
|
+
# => "23"
|
|
14
|
+
class IdGenerator
|
|
15
|
+
include Singleton
|
|
16
|
+
|
|
17
|
+
def initialize
|
|
18
|
+
@last_id = 0
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
##
|
|
22
|
+
# Generate an unique ID.
|
|
23
|
+
#
|
|
24
|
+
# This is kind of boring this way, as it just counts up
|
|
25
|
+
# a number. Maybe something more random somewhen...
|
|
26
|
+
def IdGenerator.generate_id
|
|
27
|
+
IdGenerator.instance.generate_id
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def generate_id
|
|
31
|
+
@last_id += 1
|
|
32
|
+
timefrac = Time.new.to_f.to_s.split(/\./, 2).last[-3..-1]
|
|
33
|
+
|
|
34
|
+
"#{@last_id}#{timefrac}"
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
@@ -0,0 +1,221 @@
|
|
|
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/xmppstanza'
|
|
6
|
+
require 'xmpp4r/jid'
|
|
7
|
+
require 'digest/sha1'
|
|
8
|
+
|
|
9
|
+
require 'xmpp4r/query'
|
|
10
|
+
require 'xmpp4r/vcard/iq/vcard'
|
|
11
|
+
|
|
12
|
+
module Jabber
|
|
13
|
+
##
|
|
14
|
+
# IQ: Information/Query
|
|
15
|
+
# (see RFC3920 - 9.2.3
|
|
16
|
+
#
|
|
17
|
+
# A class used to build/parse IQ requests/responses
|
|
18
|
+
class Iq < XMPPStanza
|
|
19
|
+
name_xmlns 'iq', 'jabber:client'
|
|
20
|
+
force_xmlns true
|
|
21
|
+
|
|
22
|
+
@@element_classes = {}
|
|
23
|
+
|
|
24
|
+
##
|
|
25
|
+
# Build a new <iq/> stanza
|
|
26
|
+
# type:: [Symbol] or nil, see Iq#type
|
|
27
|
+
# to:: [JID] Recipient
|
|
28
|
+
def initialize(type = nil, to = nil)
|
|
29
|
+
super()
|
|
30
|
+
|
|
31
|
+
if not to.nil?
|
|
32
|
+
set_to(to)
|
|
33
|
+
end
|
|
34
|
+
if not type.nil?
|
|
35
|
+
set_type(type)
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
##
|
|
40
|
+
# Get the type of the Iq stanza
|
|
41
|
+
#
|
|
42
|
+
# The following values are allowed:
|
|
43
|
+
# * :get
|
|
44
|
+
# * :set
|
|
45
|
+
# * :result
|
|
46
|
+
# * :error
|
|
47
|
+
# result:: [Symbol] or nil
|
|
48
|
+
def type
|
|
49
|
+
case super
|
|
50
|
+
when 'get' then :get
|
|
51
|
+
when 'set' then :set
|
|
52
|
+
when 'result' then :result
|
|
53
|
+
when 'error' then :error
|
|
54
|
+
else nil
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
##
|
|
59
|
+
# Set the type of the Iq stanza (see Iq#type)
|
|
60
|
+
# v:: [Symbol] or nil
|
|
61
|
+
def type=(v)
|
|
62
|
+
case v
|
|
63
|
+
when :get then super('get')
|
|
64
|
+
when :set then super('set')
|
|
65
|
+
when :result then super('result')
|
|
66
|
+
when :error then super('error')
|
|
67
|
+
else super(nil)
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
##
|
|
72
|
+
# Set the type of the Iq stanza (chaining-friendly)
|
|
73
|
+
# v:: [Symbol] or nil
|
|
74
|
+
def set_type(v)
|
|
75
|
+
self.type = v
|
|
76
|
+
self
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
##
|
|
80
|
+
# Returns the iq's query child, or nil
|
|
81
|
+
# result:: [IqQuery]
|
|
82
|
+
def query
|
|
83
|
+
first_element('query')
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
##
|
|
87
|
+
# Delete old elements named newquery.name
|
|
88
|
+
#
|
|
89
|
+
# newquery:: [REXML::Element] will be added
|
|
90
|
+
def query=(newquery)
|
|
91
|
+
delete_elements(newquery.name)
|
|
92
|
+
add(newquery)
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
##
|
|
96
|
+
# Returns the iq's query's namespace, or nil
|
|
97
|
+
# result:: [String]
|
|
98
|
+
def queryns
|
|
99
|
+
e = first_element('query')
|
|
100
|
+
if e
|
|
101
|
+
return e.namespace
|
|
102
|
+
else
|
|
103
|
+
return nil
|
|
104
|
+
end
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
##
|
|
108
|
+
# Returns the iq's <vCard/> child, or nil
|
|
109
|
+
# result:: [IqVcard]
|
|
110
|
+
def vcard
|
|
111
|
+
first_element('vCard')
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
##
|
|
115
|
+
# Returns the iq's <pubsub/> child, or nil
|
|
116
|
+
# result:: [IqVcard]
|
|
117
|
+
def pubsub
|
|
118
|
+
first_element('pubsub')
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
##
|
|
122
|
+
# Returns the iq's <command/> child, or nil
|
|
123
|
+
# resulte:: [IqCommand]
|
|
124
|
+
def command
|
|
125
|
+
first_element("command")
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
##
|
|
129
|
+
# Create a new Iq stanza with an unspecified query child
|
|
130
|
+
# (<query/> has no namespace)
|
|
131
|
+
def Iq.new_query(type = nil, to = nil)
|
|
132
|
+
iq = Iq.new(type, to)
|
|
133
|
+
query = IqQuery.new
|
|
134
|
+
iq.add(query)
|
|
135
|
+
iq
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
##
|
|
139
|
+
# Create a new jabber:iq:auth set Stanza.
|
|
140
|
+
def Iq.new_authset(jid, password)
|
|
141
|
+
iq = Iq.new(:set)
|
|
142
|
+
query = IqQuery.new
|
|
143
|
+
query.add_namespace('jabber:iq:auth')
|
|
144
|
+
query.add(REXML::Element.new('username').add_text(jid.node))
|
|
145
|
+
query.add(REXML::Element.new('password').add_text(password))
|
|
146
|
+
query.add(REXML::Element.new('resource').add_text(jid.resource)) if not jid.resource.nil?
|
|
147
|
+
iq.add(query)
|
|
148
|
+
iq
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
##
|
|
152
|
+
# Create a new jabber:iq:auth set Stanza for Digest authentication
|
|
153
|
+
def Iq.new_authset_digest(jid, session_id, password)
|
|
154
|
+
iq = Iq.new(:set)
|
|
155
|
+
query = IqQuery.new
|
|
156
|
+
query.add_namespace('jabber:iq:auth')
|
|
157
|
+
query.add(REXML::Element.new('username').add_text(jid.node))
|
|
158
|
+
query.add(REXML::Element.new('digest').add_text(Digest::SHA1.hexdigest(session_id + password)))
|
|
159
|
+
query.add(REXML::Element.new('resource').add_text(jid.resource)) if not jid.resource.nil?
|
|
160
|
+
iq.add(query)
|
|
161
|
+
iq
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
##
|
|
165
|
+
# Create a new jabber:iq:register set stanza for service/server registration
|
|
166
|
+
# username:: [String] (Element will be ommited if unset)
|
|
167
|
+
# password:: [String] (Element will be ommited if unset)
|
|
168
|
+
def Iq.new_register(username=nil, password=nil)
|
|
169
|
+
iq = Iq.new(:set)
|
|
170
|
+
query = IqQuery.new
|
|
171
|
+
query.add_namespace('jabber:iq:register')
|
|
172
|
+
query.add(REXML::Element.new('username').add_text(username)) if username
|
|
173
|
+
query.add(REXML::Element.new('password').add_text(password)) if password
|
|
174
|
+
iq.add(query)
|
|
175
|
+
iq
|
|
176
|
+
end
|
|
177
|
+
|
|
178
|
+
##
|
|
179
|
+
# Create a new jabber:iq:register get stanza for retrieval
|
|
180
|
+
# of accepted registration information
|
|
181
|
+
def Iq.new_registerget
|
|
182
|
+
iq = Iq.new(:get)
|
|
183
|
+
query = IqQuery.new
|
|
184
|
+
query.add_namespace('jabber:iq:register')
|
|
185
|
+
iq.add(query)
|
|
186
|
+
iq
|
|
187
|
+
end
|
|
188
|
+
|
|
189
|
+
##
|
|
190
|
+
# Create a new jabber:iq:roster get Stanza.
|
|
191
|
+
#
|
|
192
|
+
# IqQueryRoster is unused here because possibly not require'd
|
|
193
|
+
def Iq.new_rosterget
|
|
194
|
+
iq = Iq.new(:get)
|
|
195
|
+
query = IqQuery.new
|
|
196
|
+
query.add_namespace('jabber:iq:roster')
|
|
197
|
+
iq.add(query)
|
|
198
|
+
iq
|
|
199
|
+
end
|
|
200
|
+
|
|
201
|
+
##
|
|
202
|
+
# Create a new jabber:iq:roster get Stanza.
|
|
203
|
+
def Iq.new_browseget
|
|
204
|
+
iq = Iq.new(:get)
|
|
205
|
+
query = IqQuery.new
|
|
206
|
+
query.add_namespace('jabber:iq:browse')
|
|
207
|
+
iq.add(query)
|
|
208
|
+
iq
|
|
209
|
+
end
|
|
210
|
+
|
|
211
|
+
##
|
|
212
|
+
# Create a new jabber:iq:roster set Stanza.
|
|
213
|
+
def Iq.new_rosterset
|
|
214
|
+
iq = Iq.new(:set)
|
|
215
|
+
query = IqQuery.new
|
|
216
|
+
query.add_namespace('jabber:iq:roster')
|
|
217
|
+
iq.add(query)
|
|
218
|
+
iq
|
|
219
|
+
end
|
|
220
|
+
end
|
|
221
|
+
end
|