mack-notifier 0.8.1 → 0.8.2
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/lib/gems.rb +13 -0
- data/lib/gems/tmail-1.2.3.1/ext/Makefile +20 -0
- data/lib/gems/tmail-1.2.3.1/ext/tmailscanner/tmail/MANIFEST +4 -0
- data/lib/gems/tmail-1.2.3.1/ext/tmailscanner/tmail/depend +1 -0
- data/lib/gems/tmail-1.2.3.1/ext/tmailscanner/tmail/extconf.rb +33 -0
- data/lib/gems/tmail-1.2.3.1/ext/tmailscanner/tmail/tmailscanner.c +583 -0
- data/lib/gems/tmail-1.2.3.1/lib/tmail.rb +5 -0
- data/lib/gems/tmail-1.2.3.1/lib/tmail/Makefile +18 -0
- data/lib/gems/tmail-1.2.3.1/lib/tmail/address.rb +426 -0
- data/lib/gems/tmail-1.2.3.1/lib/tmail/attachments.rb +46 -0
- data/lib/gems/tmail-1.2.3.1/lib/tmail/base64.rb +46 -0
- data/lib/gems/tmail-1.2.3.1/lib/tmail/compat.rb +41 -0
- data/lib/gems/tmail-1.2.3.1/lib/tmail/config.rb +67 -0
- data/lib/gems/tmail-1.2.3.1/lib/tmail/core_extensions.rb +63 -0
- data/lib/gems/tmail-1.2.3.1/lib/tmail/encode.rb +581 -0
- data/lib/gems/tmail-1.2.3.1/lib/tmail/header.rb +960 -0
- data/lib/gems/tmail-1.2.3.1/lib/tmail/index.rb +9 -0
- data/lib/gems/tmail-1.2.3.1/lib/tmail/interface.rb +1125 -0
- data/lib/gems/tmail-1.2.3.1/lib/tmail/loader.rb +3 -0
- data/lib/gems/tmail-1.2.3.1/lib/tmail/mail.rb +578 -0
- data/lib/gems/tmail-1.2.3.1/lib/tmail/mailbox.rb +495 -0
- data/lib/gems/tmail-1.2.3.1/lib/tmail/main.rb +6 -0
- data/lib/gems/tmail-1.2.3.1/lib/tmail/mbox.rb +3 -0
- data/lib/gems/tmail-1.2.3.1/lib/tmail/net.rb +248 -0
- data/lib/gems/tmail-1.2.3.1/lib/tmail/obsolete.rb +132 -0
- data/lib/gems/tmail-1.2.3.1/lib/tmail/parser.rb +1476 -0
- data/lib/gems/tmail-1.2.3.1/lib/tmail/parser.y +381 -0
- data/lib/gems/tmail-1.2.3.1/lib/tmail/port.rb +379 -0
- data/lib/gems/tmail-1.2.3.1/lib/tmail/quoting.rb +118 -0
- data/lib/gems/tmail-1.2.3.1/lib/tmail/require_arch.rb +58 -0
- data/lib/gems/tmail-1.2.3.1/lib/tmail/scanner.rb +49 -0
- data/lib/gems/tmail-1.2.3.1/lib/tmail/scanner_r.rb +261 -0
- data/lib/gems/tmail-1.2.3.1/lib/tmail/stringio.rb +280 -0
- data/lib/gems/tmail-1.2.3.1/lib/tmail/utils.rb +337 -0
- data/lib/gems/tmail-1.2.3.1/lib/tmail/version.rb +39 -0
- data/lib/gems/tmail-1.2.3.1/meta/MANIFEST +128 -0
- data/lib/gems/tmail-1.2.3.1/meta/VERSION +1 -0
- data/lib/gems/tmail-1.2.3.1/meta/project.yaml +30 -0
- data/lib/gems/tmail-1.2.3.1/meta/unixname +1 -0
- data/lib/gems/validatable-1.6.7/README +118 -0
- data/lib/gems/validatable-1.6.7/lib/child_validation.rb +15 -0
- data/lib/gems/validatable-1.6.7/lib/errors.rb +74 -0
- data/lib/gems/validatable-1.6.7/lib/included_validation.rb +9 -0
- data/lib/gems/validatable-1.6.7/lib/macros.rb +283 -0
- data/lib/gems/validatable-1.6.7/lib/object_extension.rb +21 -0
- data/lib/gems/validatable-1.6.7/lib/requireable.rb +26 -0
- data/lib/gems/validatable-1.6.7/lib/understandable.rb +31 -0
- data/lib/gems/validatable-1.6.7/lib/validatable.rb +19 -0
- data/lib/gems/validatable-1.6.7/lib/validatable_class_methods.rb +85 -0
- data/lib/gems/validatable-1.6.7/lib/validatable_instance_methods.rb +106 -0
- data/lib/gems/validatable-1.6.7/lib/validations/validates_acceptance_of.rb +11 -0
- data/lib/gems/validatable-1.6.7/lib/validations/validates_confirmation_of.rb +15 -0
- data/lib/gems/validatable-1.6.7/lib/validations/validates_each.rb +14 -0
- data/lib/gems/validatable-1.6.7/lib/validations/validates_format_of.rb +13 -0
- data/lib/gems/validatable-1.6.7/lib/validations/validates_length_of.rb +25 -0
- data/lib/gems/validatable-1.6.7/lib/validations/validates_numericality_of.rb +16 -0
- data/lib/gems/validatable-1.6.7/lib/validations/validates_presence_of.rb +13 -0
- data/lib/gems/validatable-1.6.7/lib/validations/validates_true_for.rb +13 -0
- data/lib/gems/validatable-1.6.7/lib/validations/validation_base.rb +88 -0
- data/lib/gems/validatable-1.6.7/rakefile.rb +50 -0
- data/lib/gems/validatable-1.6.7/test/all_tests.rb +1 -0
- data/lib/gems/validatable-1.6.7/test/functional/validatable_test.rb +437 -0
- data/lib/gems/validatable-1.6.7/test/functional/validates_acceptance_of_test.rb +16 -0
- data/lib/gems/validatable-1.6.7/test/functional/validates_confirmation_of_test.rb +56 -0
- data/lib/gems/validatable-1.6.7/test/functional/validates_each_test.rb +14 -0
- data/lib/gems/validatable-1.6.7/test/functional/validates_format_of_test.rb +34 -0
- data/lib/gems/validatable-1.6.7/test/functional/validates_length_of_test.rb +64 -0
- data/lib/gems/validatable-1.6.7/test/functional/validates_numericality_of_test.rb +57 -0
- data/lib/gems/validatable-1.6.7/test/functional/validates_presence_of_test.rb +16 -0
- data/lib/gems/validatable-1.6.7/test/functional/validates_true_for_test.rb +27 -0
- data/lib/gems/validatable-1.6.7/test/test_helper.rb +33 -0
- data/lib/gems/validatable-1.6.7/test/unit/errors_test.rb +64 -0
- data/lib/gems/validatable-1.6.7/test/unit/understandable_test.rb +19 -0
- data/lib/gems/validatable-1.6.7/test/unit/validatable_test.rb +38 -0
- data/lib/gems/validatable-1.6.7/test/unit/validates_acceptance_of_test.rb +21 -0
- data/lib/gems/validatable-1.6.7/test/unit/validates_confirmation_of_test.rb +64 -0
- data/lib/gems/validatable-1.6.7/test/unit/validates_format_of_test.rb +34 -0
- data/lib/gems/validatable-1.6.7/test/unit/validates_length_of_test.rb +75 -0
- data/lib/gems/validatable-1.6.7/test/unit/validates_numericality_of_test.rb +52 -0
- data/lib/gems/validatable-1.6.7/test/unit/validates_presence_of_test.rb +25 -0
- data/lib/gems/validatable-1.6.7/test/unit/validates_true_for_test.rb +29 -0
- data/lib/gems/validatable-1.6.7/test/unit/validation_base_test.rb +52 -0
- data/lib/gems/xmpp4r-0.4/CHANGELOG +83 -0
- data/lib/gems/xmpp4r-0.4/COPYING +340 -0
- data/lib/gems/xmpp4r-0.4/LICENSE +59 -0
- data/lib/gems/xmpp4r-0.4/README.rdoc +110 -0
- data/lib/gems/xmpp4r-0.4/README_ruby19.txt +43 -0
- data/lib/gems/xmpp4r-0.4/Rakefile +262 -0
- data/lib/gems/xmpp4r-0.4/data/doc/xmpp4r/examples/advanced/adventure/README +56 -0
- data/lib/gems/xmpp4r-0.4/data/doc/xmpp4r/examples/advanced/adventure/adventure.rb +23 -0
- data/lib/gems/xmpp4r-0.4/data/doc/xmpp4r/examples/advanced/adventure/adventuremuc.rb +136 -0
- data/lib/gems/xmpp4r-0.4/data/doc/xmpp4r/examples/advanced/adventure/cube.xml +15 -0
- data/lib/gems/xmpp4r-0.4/data/doc/xmpp4r/examples/advanced/adventure/tower.xml +69 -0
- data/lib/gems/xmpp4r-0.4/data/doc/xmpp4r/examples/advanced/adventure/world.rb +424 -0
- data/lib/gems/xmpp4r-0.4/data/doc/xmpp4r/examples/advanced/fileserve.conf +11 -0
- data/lib/gems/xmpp4r-0.4/data/doc/xmpp4r/examples/advanced/fileserve.rb +346 -0
- data/lib/gems/xmpp4r-0.4/data/doc/xmpp4r/examples/advanced/getonline.rb +56 -0
- data/lib/gems/xmpp4r-0.4/data/doc/xmpp4r/examples/advanced/gtkmucclient.rb +315 -0
- data/lib/gems/xmpp4r-0.4/data/doc/xmpp4r/examples/advanced/migrate.rb +88 -0
- data/lib/gems/xmpp4r-0.4/data/doc/xmpp4r/examples/advanced/minimuc.rb +266 -0
- data/lib/gems/xmpp4r-0.4/data/doc/xmpp4r/examples/advanced/pep-aggregator/index.xsl +235 -0
- data/lib/gems/xmpp4r-0.4/data/doc/xmpp4r/examples/advanced/pep-aggregator/pep-aggregator.rb +147 -0
- data/lib/gems/xmpp4r-0.4/data/doc/xmpp4r/examples/advanced/recvfile.rb +84 -0
- data/lib/gems/xmpp4r-0.4/data/doc/xmpp4r/examples/advanced/rosterdiscovery.rb +129 -0
- data/lib/gems/xmpp4r-0.4/data/doc/xmpp4r/examples/advanced/sendfile.conf +10 -0
- data/lib/gems/xmpp4r-0.4/data/doc/xmpp4r/examples/advanced/sendfile.rb +72 -0
- data/lib/gems/xmpp4r-0.4/data/doc/xmpp4r/examples/advanced/shellmgr/shellmgr.rb +51 -0
- data/lib/gems/xmpp4r-0.4/data/doc/xmpp4r/examples/advanced/shellmgr/shellmgr_jabber.rb +43 -0
- data/lib/gems/xmpp4r-0.4/data/doc/xmpp4r/examples/advanced/shellmgr/shellmgr_test.rb +10 -0
- data/lib/gems/xmpp4r-0.4/data/doc/xmpp4r/examples/advanced/versionpoll.rb +90 -0
- data/lib/gems/xmpp4r-0.4/data/doc/xmpp4r/examples/advanced/xmpping.rb +146 -0
- data/lib/gems/xmpp4r-0.4/data/doc/xmpp4r/examples/advanced/xmppingrc.sample +14 -0
- data/lib/gems/xmpp4r-0.4/data/doc/xmpp4r/examples/basic/change_password.rb +41 -0
- data/lib/gems/xmpp4r-0.4/data/doc/xmpp4r/examples/basic/client.rb +70 -0
- data/lib/gems/xmpp4r-0.4/data/doc/xmpp4r/examples/basic/component.rb +11 -0
- data/lib/gems/xmpp4r-0.4/data/doc/xmpp4r/examples/basic/echo.rb +37 -0
- data/lib/gems/xmpp4r-0.4/data/doc/xmpp4r/examples/basic/jabbersend.rb +41 -0
- data/lib/gems/xmpp4r-0.4/data/doc/xmpp4r/examples/basic/mass_sender.rb +68 -0
- data/lib/gems/xmpp4r-0.4/data/doc/xmpp4r/examples/basic/muc_owner_config.rb +12 -0
- data/lib/gems/xmpp4r-0.4/data/doc/xmpp4r/examples/basic/mucinfo.rb +41 -0
- data/lib/gems/xmpp4r-0.4/data/doc/xmpp4r/examples/basic/mucsimplebot.rb +82 -0
- data/lib/gems/xmpp4r-0.4/data/doc/xmpp4r/examples/basic/register.rb +42 -0
- data/lib/gems/xmpp4r-0.4/data/doc/xmpp4r/examples/basic/remove_registration.rb +18 -0
- data/lib/gems/xmpp4r-0.4/data/doc/xmpp4r/examples/basic/roster.rb +44 -0
- data/lib/gems/xmpp4r-0.4/data/doc/xmpp4r/examples/basic/rosterprint.rb +50 -0
- data/lib/gems/xmpp4r-0.4/data/doc/xmpp4r/examples/basic/rosterrename.rb +34 -0
- data/lib/gems/xmpp4r-0.4/data/doc/xmpp4r/examples/basic/rosterwatch.rb +171 -0
- data/lib/gems/xmpp4r-0.4/data/doc/xmpp4r/examples/basic/send_vcard.rb +67 -0
- data/lib/gems/xmpp4r-0.4/data/doc/xmpp4r/examples/basic/tune_client.rb +56 -0
- data/lib/gems/xmpp4r-0.4/data/doc/xmpp4r/examples/basic/tune_server.rb +58 -0
- data/lib/gems/xmpp4r-0.4/data/doc/xmpp4r/examples/basic/versionbot.rb +75 -0
- data/lib/gems/xmpp4r-0.4/lib/xmpp4r.rb +116 -0
- data/lib/gems/xmpp4r-0.4/lib/xmpp4r/base64.rb +32 -0
- data/lib/gems/xmpp4r-0.4/lib/xmpp4r/bytestreams.rb +15 -0
- data/lib/gems/xmpp4r-0.4/lib/xmpp4r/bytestreams/helper/filetransfer.rb +319 -0
- data/lib/gems/xmpp4r-0.4/lib/xmpp4r/bytestreams/helper/ibb/base.rb +257 -0
- data/lib/gems/xmpp4r-0.4/lib/xmpp4r/bytestreams/helper/ibb/initiator.rb +31 -0
- data/lib/gems/xmpp4r-0.4/lib/xmpp4r/bytestreams/helper/ibb/target.rb +47 -0
- data/lib/gems/xmpp4r-0.4/lib/xmpp4r/bytestreams/helper/socks5bytestreams/base.rb +152 -0
- data/lib/gems/xmpp4r-0.4/lib/xmpp4r/bytestreams/helper/socks5bytestreams/initiator.rb +86 -0
- data/lib/gems/xmpp4r-0.4/lib/xmpp4r/bytestreams/helper/socks5bytestreams/server.rb +198 -0
- data/lib/gems/xmpp4r-0.4/lib/xmpp4r/bytestreams/helper/socks5bytestreams/socks5.rb +65 -0
- data/lib/gems/xmpp4r-0.4/lib/xmpp4r/bytestreams/helper/socks5bytestreams/target.rb +73 -0
- data/lib/gems/xmpp4r-0.4/lib/xmpp4r/bytestreams/helper/socks5bytestreams/target.rb.orig +62 -0
- data/lib/gems/xmpp4r-0.4/lib/xmpp4r/bytestreams/iq/bytestreams.rb +170 -0
- data/lib/gems/xmpp4r-0.4/lib/xmpp4r/bytestreams/iq/si.rb +206 -0
- data/lib/gems/xmpp4r-0.4/lib/xmpp4r/callbacks.rb +124 -0
- data/lib/gems/xmpp4r-0.4/lib/xmpp4r/caps.rb +1 -0
- data/lib/gems/xmpp4r-0.4/lib/xmpp4r/caps/c.rb +53 -0
- data/lib/gems/xmpp4r-0.4/lib/xmpp4r/caps/helper/generator.rb +160 -0
- data/lib/gems/xmpp4r-0.4/lib/xmpp4r/caps/helper/helper.rb +87 -0
- data/lib/gems/xmpp4r-0.4/lib/xmpp4r/client.rb +317 -0
- data/lib/gems/xmpp4r-0.4/lib/xmpp4r/command/helper/responder.rb +53 -0
- data/lib/gems/xmpp4r-0.4/lib/xmpp4r/command/iq/command.rb +154 -0
- data/lib/gems/xmpp4r-0.4/lib/xmpp4r/component.rb +103 -0
- data/lib/gems/xmpp4r-0.4/lib/xmpp4r/connection.rb +219 -0
- data/lib/gems/xmpp4r-0.4/lib/xmpp4r/dataforms.rb +5 -0
- data/lib/gems/xmpp4r-0.4/lib/xmpp4r/dataforms/x/data.rb +297 -0
- data/lib/gems/xmpp4r-0.4/lib/xmpp4r/debuglog.rb +42 -0
- data/lib/gems/xmpp4r-0.4/lib/xmpp4r/delay.rb +5 -0
- data/lib/gems/xmpp4r-0.4/lib/xmpp4r/delay/x/delay.rb +99 -0
- data/lib/gems/xmpp4r-0.4/lib/xmpp4r/discovery.rb +7 -0
- data/lib/gems/xmpp4r-0.4/lib/xmpp4r/discovery/helper/responder.rb +165 -0
- data/lib/gems/xmpp4r-0.4/lib/xmpp4r/discovery/iq/discoinfo.rb +211 -0
- data/lib/gems/xmpp4r-0.4/lib/xmpp4r/discovery/iq/discoitems.rb +147 -0
- data/lib/gems/xmpp4r-0.4/lib/xmpp4r/errors.rb +281 -0
- data/lib/gems/xmpp4r-0.4/lib/xmpp4r/feature_negotiation.rb +5 -0
- data/lib/gems/xmpp4r-0.4/lib/xmpp4r/feature_negotiation/iq/feature.rb +28 -0
- data/lib/gems/xmpp4r-0.4/lib/xmpp4r/framework/base.rb +55 -0
- data/lib/gems/xmpp4r-0.4/lib/xmpp4r/framework/bot.rb +148 -0
- data/lib/gems/xmpp4r-0.4/lib/xmpp4r/httpbinding.rb +5 -0
- data/lib/gems/xmpp4r-0.4/lib/xmpp4r/httpbinding/client.rb +285 -0
- data/lib/gems/xmpp4r-0.4/lib/xmpp4r/idgenerator.rb +37 -0
- data/lib/gems/xmpp4r-0.4/lib/xmpp4r/iq.rb +221 -0
- data/lib/gems/xmpp4r-0.4/lib/xmpp4r/jid.rb +167 -0
- data/lib/gems/xmpp4r-0.4/lib/xmpp4r/message.rb +148 -0
- data/lib/gems/xmpp4r-0.4/lib/xmpp4r/muc.rb +14 -0
- data/lib/gems/xmpp4r-0.4/lib/xmpp4r/muc/helper/mucbrowser.rb +92 -0
- data/lib/gems/xmpp4r-0.4/lib/xmpp4r/muc/helper/mucclient.rb +462 -0
- data/lib/gems/xmpp4r-0.4/lib/xmpp4r/muc/helper/simplemucclient.rb +332 -0
- data/lib/gems/xmpp4r-0.4/lib/xmpp4r/muc/iq/mucadmin.rb +23 -0
- data/lib/gems/xmpp4r-0.4/lib/xmpp4r/muc/iq/mucadminitem.rb +20 -0
- data/lib/gems/xmpp4r-0.4/lib/xmpp4r/muc/iq/mucowner.rb +15 -0
- data/lib/gems/xmpp4r-0.4/lib/xmpp4r/muc/item.rb +143 -0
- data/lib/gems/xmpp4r-0.4/lib/xmpp4r/muc/x/muc.rb +70 -0
- data/lib/gems/xmpp4r-0.4/lib/xmpp4r/muc/x/mucuserinvite.rb +60 -0
- data/lib/gems/xmpp4r-0.4/lib/xmpp4r/muc/x/mucuseritem.rb +36 -0
- data/lib/gems/xmpp4r-0.4/lib/xmpp4r/presence.rb +232 -0
- data/lib/gems/xmpp4r-0.4/lib/xmpp4r/pubsub.rb +8 -0
- data/lib/gems/xmpp4r-0.4/lib/xmpp4r/pubsub/children/configuration.rb +86 -0
- data/lib/gems/xmpp4r-0.4/lib/xmpp4r/pubsub/children/event.rb +49 -0
- data/lib/gems/xmpp4r-0.4/lib/xmpp4r/pubsub/children/item.rb +35 -0
- data/lib/gems/xmpp4r-0.4/lib/xmpp4r/pubsub/children/items.rb +44 -0
- data/lib/gems/xmpp4r-0.4/lib/xmpp4r/pubsub/children/node_config.rb +48 -0
- data/lib/gems/xmpp4r-0.4/lib/xmpp4r/pubsub/children/publish.rb +24 -0
- data/lib/gems/xmpp4r-0.4/lib/xmpp4r/pubsub/children/subscription.rb +62 -0
- data/lib/gems/xmpp4r-0.4/lib/xmpp4r/pubsub/children/subscription_config.rb +67 -0
- data/lib/gems/xmpp4r-0.4/lib/xmpp4r/pubsub/children/unsubscribe.rb +48 -0
- data/lib/gems/xmpp4r-0.4/lib/xmpp4r/pubsub/helper/nodebrowser.rb +130 -0
- data/lib/gems/xmpp4r-0.4/lib/xmpp4r/pubsub/helper/nodehelper.rb +156 -0
- data/lib/gems/xmpp4r-0.4/lib/xmpp4r/pubsub/helper/servicehelper.rb +417 -0
- data/lib/gems/xmpp4r-0.4/lib/xmpp4r/pubsub/iq/pubsub.rb +19 -0
- data/lib/gems/xmpp4r-0.4/lib/xmpp4r/query.rb +15 -0
- data/lib/gems/xmpp4r-0.4/lib/xmpp4r/rexmladdons.rb +151 -0
- data/lib/gems/xmpp4r-0.4/lib/xmpp4r/roster.rb +7 -0
- data/lib/gems/xmpp4r-0.4/lib/xmpp4r/roster/helper/roster.rb +519 -0
- data/lib/gems/xmpp4r-0.4/lib/xmpp4r/roster/iq/roster.rb +215 -0
- data/lib/gems/xmpp4r-0.4/lib/xmpp4r/roster/x/roster.rb +138 -0
- data/lib/gems/xmpp4r-0.4/lib/xmpp4r/rpc.rb +2 -0
- data/lib/gems/xmpp4r-0.4/lib/xmpp4r/rpc/helper/client.rb +123 -0
- data/lib/gems/xmpp4r-0.4/lib/xmpp4r/rpc/helper/server.rb +74 -0
- data/lib/gems/xmpp4r-0.4/lib/xmpp4r/rpc/helper/xmlrpcaddons.rb +67 -0
- data/lib/gems/xmpp4r-0.4/lib/xmpp4r/rpc/iq/rpc.rb +23 -0
- data/lib/gems/xmpp4r-0.4/lib/xmpp4r/sasl.rb +237 -0
- data/lib/gems/xmpp4r-0.4/lib/xmpp4r/semaphore.rb +38 -0
- data/lib/gems/xmpp4r-0.4/lib/xmpp4r/stream.rb +497 -0
- data/lib/gems/xmpp4r-0.4/lib/xmpp4r/streamparser.rb +77 -0
- data/lib/gems/xmpp4r-0.4/lib/xmpp4r/tune.rb +2 -0
- data/lib/gems/xmpp4r-0.4/lib/xmpp4r/tune/helper/helper.rb +58 -0
- data/lib/gems/xmpp4r-0.4/lib/xmpp4r/tune/tune.rb +113 -0
- data/lib/gems/xmpp4r-0.4/lib/xmpp4r/vcard.rb +6 -0
- data/lib/gems/xmpp4r-0.4/lib/xmpp4r/vcard/helper/vcard.rb +84 -0
- data/lib/gems/xmpp4r-0.4/lib/xmpp4r/vcard/iq/vcard.rb +109 -0
- data/lib/gems/xmpp4r-0.4/lib/xmpp4r/version.rb +7 -0
- data/lib/gems/xmpp4r-0.4/lib/xmpp4r/version/helper/responder.rb +72 -0
- data/lib/gems/xmpp4r-0.4/lib/xmpp4r/version/helper/simpleresponder.rb +44 -0
- data/lib/gems/xmpp4r-0.4/lib/xmpp4r/version/iq/version.rb +105 -0
- data/lib/gems/xmpp4r-0.4/lib/xmpp4r/x.rb +37 -0
- data/lib/gems/xmpp4r-0.4/lib/xmpp4r/xhtml.rb +1 -0
- data/lib/gems/xmpp4r-0.4/lib/xmpp4r/xhtml/html.rb +115 -0
- data/lib/gems/xmpp4r-0.4/lib/xmpp4r/xmpp4r.rb +18 -0
- data/lib/gems/xmpp4r-0.4/lib/xmpp4r/xmppelement.rb +168 -0
- data/lib/gems/xmpp4r-0.4/lib/xmpp4r/xmppstanza.rb +162 -0
- data/lib/gems/xmpp4r-0.4/setup.rb +1586 -0
- data/lib/gems/xmpp4r-0.4/test/bytestreams/tc_ibb.rb +186 -0
- data/lib/gems/xmpp4r-0.4/test/bytestreams/tc_socks5bytestreams.rb +113 -0
- data/lib/gems/xmpp4r-0.4/test/caps/tc_helper.rb +156 -0
- data/lib/gems/xmpp4r-0.4/test/dataforms/tc_data.rb +81 -0
- data/lib/gems/xmpp4r-0.4/test/delay/tc_xdelay.rb +51 -0
- data/lib/gems/xmpp4r-0.4/test/discovery/tc_responder.rb +91 -0
- data/lib/gems/xmpp4r-0.4/test/lib/assert_equal_xml.rb +14 -0
- data/lib/gems/xmpp4r-0.4/test/lib/clienttester.rb +120 -0
- data/lib/gems/xmpp4r-0.4/test/muc/tc_muc_mucclient.rb +830 -0
- data/lib/gems/xmpp4r-0.4/test/muc/tc_muc_simplemucclient.rb +114 -0
- data/lib/gems/xmpp4r-0.4/test/muc/tc_mucowner.rb +50 -0
- data/lib/gems/xmpp4r-0.4/test/pubsub/tc_helper.rb +662 -0
- data/lib/gems/xmpp4r-0.4/test/pubsub/tc_nodeconfig.rb +54 -0
- data/lib/gems/xmpp4r-0.4/test/pubsub/tc_subscriptionconfig.rb +41 -0
- data/lib/gems/xmpp4r-0.4/test/roster/tc_helper.rb +514 -0
- data/lib/gems/xmpp4r-0.4/test/roster/tc_iqqueryroster.rb +173 -0
- data/lib/gems/xmpp4r-0.4/test/roster/tc_xroster.rb +73 -0
- data/lib/gems/xmpp4r-0.4/test/rpc/tc_helper.rb +96 -0
- data/lib/gems/xmpp4r-0.4/test/tc_callbacks.rb +129 -0
- data/lib/gems/xmpp4r-0.4/test/tc_class_names.rb +146 -0
- data/lib/gems/xmpp4r-0.4/test/tc_client.rb +30 -0
- data/lib/gems/xmpp4r-0.4/test/tc_errors.rb +146 -0
- data/lib/gems/xmpp4r-0.4/test/tc_idgenerator.rb +30 -0
- data/lib/gems/xmpp4r-0.4/test/tc_iq.rb +113 -0
- data/lib/gems/xmpp4r-0.4/test/tc_iqquery.rb +31 -0
- data/lib/gems/xmpp4r-0.4/test/tc_jid.rb +204 -0
- data/lib/gems/xmpp4r-0.4/test/tc_message.rb +116 -0
- data/lib/gems/xmpp4r-0.4/test/tc_presence.rb +150 -0
- data/lib/gems/xmpp4r-0.4/test/tc_rexml.rb +139 -0
- data/lib/gems/xmpp4r-0.4/test/tc_stream.rb +229 -0
- data/lib/gems/xmpp4r-0.4/test/tc_streamComponent.rb +95 -0
- data/lib/gems/xmpp4r-0.4/test/tc_streamError.rb +131 -0
- data/lib/gems/xmpp4r-0.4/test/tc_streamSend.rb +59 -0
- data/lib/gems/xmpp4r-0.4/test/tc_streamparser.rb +112 -0
- data/lib/gems/xmpp4r-0.4/test/tc_xmppstanza.rb +135 -0
- data/lib/gems/xmpp4r-0.4/test/ts_xmpp4r.rb +53 -0
- data/lib/gems/xmpp4r-0.4/test/tune/tc_helper_recv.rb +84 -0
- data/lib/gems/xmpp4r-0.4/test/tune/tc_helper_send.rb +74 -0
- data/lib/gems/xmpp4r-0.4/test/tune/tc_tune.rb +79 -0
- data/lib/gems/xmpp4r-0.4/test/vcard/tc_helper.rb +49 -0
- data/lib/gems/xmpp4r-0.4/test/vcard/tc_iqvcard.rb +62 -0
- data/lib/gems/xmpp4r-0.4/test/version/tc_helper.rb +60 -0
- data/lib/gems/xmpp4r-0.4/test/version/tc_iqqueryversion.rb +97 -0
- data/lib/gems/xmpp4r-0.4/test/xhtml/tc_html.rb +41 -0
- data/lib/gems/xmpp4r-0.4/tools/gen_requires.bash +31 -0
- data/lib/gems/xmpp4r-0.4/tools/xmpp4r-gemspec-test.rb +11 -0
- data/lib/gems/xmpp4r-0.4/xmpp4r.gemspec +291 -0
- data/lib/gems/xmpp4r-simple-0.8.8/CHANGELOG +73 -0
- data/lib/gems/xmpp4r-simple-0.8.8/COPYING +281 -0
- data/lib/gems/xmpp4r-simple-0.8.8/README +59 -0
- data/lib/gems/xmpp4r-simple-0.8.8/lib/xmpp4r-simple.rb +492 -0
- data/lib/gems/xmpp4r-simple-0.8.8/test/test_xmpp4r_simple.rb +242 -0
- data/lib/mack-notifier.rb +1 -3
- metadata +398 -46
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
#!/usr/bin/ruby
|
|
2
|
+
#
|
|
3
|
+
# XMPP4R - XMPP Library for Ruby
|
|
4
|
+
# Copyright (C) 2005 Stephan Maka <stephan@spaceboyz.net>
|
|
5
|
+
# Released under Ruby's license (see the LICENSE file) or GPL, at your option
|
|
6
|
+
#
|
|
7
|
+
#
|
|
8
|
+
# Roster-Watch example
|
|
9
|
+
#
|
|
10
|
+
#
|
|
11
|
+
# Learn how a roster looks like
|
|
12
|
+
# how presences are received
|
|
13
|
+
# about subscription requests and answers
|
|
14
|
+
# what vCards contain
|
|
15
|
+
#
|
|
16
|
+
# It's recommended to insert 'p' commands in this script. :-)
|
|
17
|
+
#
|
|
18
|
+
# This script does:
|
|
19
|
+
#
|
|
20
|
+
# * Listing roster changes
|
|
21
|
+
#
|
|
22
|
+
# * Subscribe to roster items which have a subscription of "none" or "from"
|
|
23
|
+
# WARNING: Chances are that you don't want that :-)
|
|
24
|
+
#
|
|
25
|
+
# * Requesting vCards for unnamed items in your roster and renaming them
|
|
26
|
+
# to the <NICKNAME/> or <FN/> field in the vCard
|
|
27
|
+
#
|
|
28
|
+
# * Listing presence changes
|
|
29
|
+
#
|
|
30
|
+
# * Listing subscription and unsubscription requests and answers
|
|
31
|
+
|
|
32
|
+
$:.unshift '../../../../../lib/'
|
|
33
|
+
|
|
34
|
+
require 'xmpp4r'
|
|
35
|
+
require 'xmpp4r/roster/helper/roster'
|
|
36
|
+
require 'xmpp4r/vcard/helper/vcard'
|
|
37
|
+
|
|
38
|
+
# Command line argument checking
|
|
39
|
+
|
|
40
|
+
if ARGV.size != 2
|
|
41
|
+
puts("Usage: ./rosterwatch.rb <jid> <password>")
|
|
42
|
+
exit
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
# Building up the connection
|
|
46
|
+
|
|
47
|
+
#Jabber::debug = true
|
|
48
|
+
|
|
49
|
+
jid = Jabber::JID.new(ARGV[0])
|
|
50
|
+
|
|
51
|
+
cl = Jabber::Client.new(jid)
|
|
52
|
+
cl.connect
|
|
53
|
+
cl.auth(ARGV[1])
|
|
54
|
+
|
|
55
|
+
# The roster instance
|
|
56
|
+
roster = Jabber::Roster::Helper.new(cl)
|
|
57
|
+
|
|
58
|
+
# Callback to handle updated roster items
|
|
59
|
+
roster.add_update_callback { |olditem,item|
|
|
60
|
+
if [:from, :none].include?(item.subscription) && item.ask != :subscribe
|
|
61
|
+
puts("Subscribing to #{item.jid}")
|
|
62
|
+
item.subscribe
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
# Print the item
|
|
66
|
+
if olditem.nil?
|
|
67
|
+
# We didn't knew before:
|
|
68
|
+
puts("#{item.iname} (#{item.jid}, #{item.subscription}) #{item.groups.join(', ')}")
|
|
69
|
+
else
|
|
70
|
+
# Showing whats different:
|
|
71
|
+
puts("#{olditem.iname} (#{olditem.jid}, #{olditem.subscription}) #{olditem.groups.join(', ')} -> #{item.iname} (#{item.jid}, #{item.subscription}) #{item.groups.join(', ')}")
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
# If the item has no name associated...
|
|
75
|
+
unless item.iname
|
|
76
|
+
Thread.new do
|
|
77
|
+
puts("#{item.jid} has no nickname... getting vCard")
|
|
78
|
+
begin
|
|
79
|
+
# ...get a vCard
|
|
80
|
+
vcard = Jabber::Vcard::Helper.new(cl).get(item.jid.strip)
|
|
81
|
+
|
|
82
|
+
unless vcard.nil?
|
|
83
|
+
# Rename him to vCard's <NICKNAME/> field
|
|
84
|
+
if vcard['NICKNAME']
|
|
85
|
+
item.iname = vcard['NICKNAME']
|
|
86
|
+
puts("Renaming #{item.jid} to #{vcard['NICKNAME']}")
|
|
87
|
+
item.send
|
|
88
|
+
# Rename him to vCard's <FN/> field
|
|
89
|
+
elsif vcard['FN']
|
|
90
|
+
item.iname = vcard['FN']
|
|
91
|
+
puts("Renaming #{item.jid} to #{vcard['FN']}")
|
|
92
|
+
item.send
|
|
93
|
+
# We've got a lazy one
|
|
94
|
+
else
|
|
95
|
+
puts("#{item.jid} provided no details in vCard")
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
rescue Exception => e
|
|
100
|
+
# This will be (mostly) thrown by Jabber::Vcard::Helper#get
|
|
101
|
+
puts("Error getting vCard for #{item.jid}: #{e.to_s}")
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
# Presence updates:
|
|
108
|
+
roster.add_presence_callback { |item,oldpres,pres|
|
|
109
|
+
# Can't look for something that just does not exist...
|
|
110
|
+
if pres.nil?
|
|
111
|
+
# ...so create it:
|
|
112
|
+
pres = Jabber::Presence.new
|
|
113
|
+
end
|
|
114
|
+
if oldpres.nil?
|
|
115
|
+
# ...so create it:
|
|
116
|
+
oldpres = Jabber::Presence.new
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
# Print name and jid:
|
|
120
|
+
name = "#{pres.from}"
|
|
121
|
+
if item.iname
|
|
122
|
+
name = "#{item.iname} (#{pres.from})"
|
|
123
|
+
end
|
|
124
|
+
puts(name)
|
|
125
|
+
|
|
126
|
+
# Print type changes:
|
|
127
|
+
unless oldpres.type.nil? && pres.type.nil?
|
|
128
|
+
puts(" Type: #{oldpres.type.inspect} -> #{pres.type.inspect}")
|
|
129
|
+
end
|
|
130
|
+
# Print show changes:
|
|
131
|
+
unless oldpres.show.nil? && pres.show.nil?
|
|
132
|
+
puts(" Show: #{oldpres.show.to_s.inspect} -> #{pres.show.to_s.inspect}")
|
|
133
|
+
end
|
|
134
|
+
# Print status changes:
|
|
135
|
+
unless oldpres.status.nil? && pres.status.nil?
|
|
136
|
+
puts(" Status: #{oldpres.status.to_s.inspect} -> #{pres.status.to_s.inspect}")
|
|
137
|
+
end
|
|
138
|
+
# Print priority changes:
|
|
139
|
+
unless oldpres.priority.nil? && pres.priority.nil?
|
|
140
|
+
puts(" Priority: #{oldpres.priority.inspect} -> #{pres.priority.inspect}")
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
# Note: presences with type='error' will reflect our own show/status/priority
|
|
144
|
+
# as it is mostly just a reply from a server. This is *not* a bug.
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
# Subscription requests and responses:
|
|
148
|
+
subscription_callback = lambda { |item,pres|
|
|
149
|
+
name = pres.from
|
|
150
|
+
if item != nil && item.iname != nil
|
|
151
|
+
name = "#{item.iname} (#{pres.from})"
|
|
152
|
+
end
|
|
153
|
+
case pres.type
|
|
154
|
+
when :subscribe then puts("Subscription request from #{name}")
|
|
155
|
+
when :subscribed then puts("Subscribed to #{name}")
|
|
156
|
+
when :unsubscribe then puts("Unsubscription request from #{name}")
|
|
157
|
+
when :unsubscribed then puts("Unsubscribed from #{name}")
|
|
158
|
+
else raise "The Roster Helper is buggy!!! subscription callback with type=#{pres.type}"
|
|
159
|
+
end
|
|
160
|
+
}
|
|
161
|
+
roster.add_subscription_callback(0, nil, &subscription_callback)
|
|
162
|
+
roster.add_subscription_request_callback(0, nil, &subscription_callback)
|
|
163
|
+
|
|
164
|
+
# Send initial presence
|
|
165
|
+
# this is important for receiving presence of subscribed users
|
|
166
|
+
cl.send(Jabber::Presence.new.set_show(:dnd).set_status('Watching my roster change...'))
|
|
167
|
+
|
|
168
|
+
# Main loop:
|
|
169
|
+
Thread.stop
|
|
170
|
+
|
|
171
|
+
cl.close
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
#!/usr/bin/ruby
|
|
2
|
+
|
|
3
|
+
# Demonstration of the Vcard helper class
|
|
4
|
+
#
|
|
5
|
+
# * Retrieves your own vCard
|
|
6
|
+
# * Modify fields given on the command line
|
|
7
|
+
# * Dumps the vCard
|
|
8
|
+
# * Send your vCard to the server
|
|
9
|
+
|
|
10
|
+
$:.unshift('../../../../../lib')
|
|
11
|
+
|
|
12
|
+
require 'xmpp4r'
|
|
13
|
+
require 'xmpp4r/vcard/helper/vcard'
|
|
14
|
+
include Jabber
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
# settings
|
|
18
|
+
if ARGV.length < 2
|
|
19
|
+
puts "Usage:\t./send_vcard.rb <jid> <password> [<field1>=<value1> [... <fieldN>=<valueN>] ]"
|
|
20
|
+
puts "Example:\t./send_vcard.rb user@server/resource password NICKNAME=User \"FN=A user\""
|
|
21
|
+
exit 1
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
# Do the client stuff...
|
|
25
|
+
myJID = JID.new(ARGV.shift)
|
|
26
|
+
myPassword = ARGV.shift
|
|
27
|
+
cl = Client.new(myJID)
|
|
28
|
+
cl.connect
|
|
29
|
+
cl.auth(myPassword)
|
|
30
|
+
|
|
31
|
+
# The Vcard helper
|
|
32
|
+
vcard_helper = Vcard::Helper.new(cl)
|
|
33
|
+
|
|
34
|
+
begin
|
|
35
|
+
puts "Retrieving vCard information for #{cl.jid.strip}"
|
|
36
|
+
vcard = vcard_helper.get
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
# Inspect the command line for vCard fields to be changed
|
|
40
|
+
ARGV.each { |arg|
|
|
41
|
+
arg.scan(/^(.+?)=(.*)$/) { |field,text|
|
|
42
|
+
puts "field #{field}: #{vcard[field].inspect} => #{text.inspect}"
|
|
43
|
+
vcard[field] = text
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
# Dump the vCard
|
|
48
|
+
vcard.fields.each { |field|
|
|
49
|
+
if field.split(/\//).pop == 'BINVAL'
|
|
50
|
+
puts "#{field}:\tBINVAL"
|
|
51
|
+
else
|
|
52
|
+
puts "#{field}:\t#{vcard[field].inspect}"
|
|
53
|
+
end
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
begin
|
|
57
|
+
puts "Sending vCard information for #{cl.jid.strip}"
|
|
58
|
+
vcard_helper.set(vcard)
|
|
59
|
+
rescue Exception => e
|
|
60
|
+
puts "Sorry, we stumbled upon the following when sending the vCard of #{cl.jid.strip}: #{e.to_s.inspect}"
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
rescue Exception => e
|
|
64
|
+
puts "Sorry, we stumbled upon the following when requesting the vCard of #{cl.jid.strip}: #{e.to_s.inspect}"
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
cl.close
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
|
|
3
|
+
$:.unshift '../../../../../lib'
|
|
4
|
+
|
|
5
|
+
require 'xmpp4r'
|
|
6
|
+
require 'xmpp4r/roster'
|
|
7
|
+
require 'xmpp4r/discovery'
|
|
8
|
+
require 'xmpp4r/caps'
|
|
9
|
+
require 'xmpp4r/tune'
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
#
|
|
13
|
+
# Echo tunes received via XEP-0118 User Tune notifications
|
|
14
|
+
#
|
|
15
|
+
# See Jabber::UserTune::Helper for the gory details
|
|
16
|
+
#
|
|
17
|
+
|
|
18
|
+
if ARGV.length != 3
|
|
19
|
+
puts "Usage: ruby tune_client.rb <jid> <pw> <tune-playing-jid>"
|
|
20
|
+
exit 1
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
jid = ARGV[0]
|
|
24
|
+
pw = ARGV[1]
|
|
25
|
+
dj_jid = ARGV[2]
|
|
26
|
+
|
|
27
|
+
#Jabber::debug=true
|
|
28
|
+
cl = Jabber::Client.new(Jabber::JID.new(jid))
|
|
29
|
+
cl.connect
|
|
30
|
+
cl.auth(pw)
|
|
31
|
+
|
|
32
|
+
# PEP (XEP-0163 says we need:
|
|
33
|
+
# - a 'both' subscription to the dj
|
|
34
|
+
# - told the server that we support the '...tune+notify' feature
|
|
35
|
+
# before we can receive events
|
|
36
|
+
roster = Jabber::Roster::Helper.new(cl)
|
|
37
|
+
roster.add_subscription_request_callback(0, nil) do |item,pres|
|
|
38
|
+
roster.accept_subscription(pres.from)
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
caps = Jabber::Caps::Helper.new(cl,
|
|
42
|
+
[Jabber::Discovery::Identity.new('client', nil, 'pc')],
|
|
43
|
+
[Jabber::Discovery::Feature.new('http://jabber.org/protocol/tune+notify')]
|
|
44
|
+
)
|
|
45
|
+
|
|
46
|
+
t = Jabber::UserTune::Helper.new(cl, dj_jid)
|
|
47
|
+
t.add_usertune_callback do |tune|
|
|
48
|
+
puts "from:#{dj_jid} tune:#{tune.artist} plays #{tune.title}"
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
p = Jabber::Presence.new()
|
|
52
|
+
p.type = :subscribe
|
|
53
|
+
p.to = dj_jid
|
|
54
|
+
cl.send p
|
|
55
|
+
|
|
56
|
+
Thread.stop
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
|
|
3
|
+
$:.unshift '../../../../../lib'
|
|
4
|
+
|
|
5
|
+
require 'xmpp4r'
|
|
6
|
+
require 'xmpp4r/roster'
|
|
7
|
+
require 'xmpp4r/tune'
|
|
8
|
+
require 'rbosa'
|
|
9
|
+
|
|
10
|
+
#
|
|
11
|
+
# Send XEP-0118 User Tune events...
|
|
12
|
+
#
|
|
13
|
+
# See Jabber::UserTune::Helper for the gory details...
|
|
14
|
+
#
|
|
15
|
+
# NB needs rbosa library to access iTunes - only on MacOSX
|
|
16
|
+
#
|
|
17
|
+
|
|
18
|
+
if ARGV.length != 2:
|
|
19
|
+
puts "Usage: ruby tune_server.rb <jid> <pw>"
|
|
20
|
+
exit 1
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
jid=ARGV[0]
|
|
24
|
+
pw=ARGV[1]
|
|
25
|
+
|
|
26
|
+
Jabber::debug=true
|
|
27
|
+
|
|
28
|
+
cl = Jabber::Client.new(jid)
|
|
29
|
+
cl.connect
|
|
30
|
+
cl.auth(pw)
|
|
31
|
+
|
|
32
|
+
# Following XEP-0163 PEP we need to
|
|
33
|
+
# ensure we have a 'both' subscription to the Tune client
|
|
34
|
+
roster = Jabber::Roster::Helper.new(cl)
|
|
35
|
+
roster.add_subscription_request_callback do |item,pres|
|
|
36
|
+
roster.accept_subscription(pres.from)
|
|
37
|
+
|
|
38
|
+
reply = pres.answer
|
|
39
|
+
reply.type = :subscribe
|
|
40
|
+
cl.send(reply)
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
cl.send(Jabber::Presence.new.set_show(:chat))
|
|
44
|
+
|
|
45
|
+
t=Jabber::UserTune::Helper.new(cl, nil)
|
|
46
|
+
|
|
47
|
+
itunes=OSA.app('iTunes')
|
|
48
|
+
|
|
49
|
+
loop do
|
|
50
|
+
track = itunes.current_track
|
|
51
|
+
|
|
52
|
+
if track
|
|
53
|
+
puts "Now playing: #{track.name} by #{track.artist}"
|
|
54
|
+
t.now_playing(Jabber::UserTune::Tune.new(track.artist, track.name))
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
sleep 5
|
|
58
|
+
end
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
#!/usr/bin/ruby
|
|
2
|
+
|
|
3
|
+
$:.unshift '../../../../../lib'
|
|
4
|
+
|
|
5
|
+
require 'xmpp4r'
|
|
6
|
+
require 'xmpp4r/version/iq/version'
|
|
7
|
+
require 'xmpp4r/version/helper/simpleresponder'
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
# A Hash containing all Version Query answers with their JIDs as keys:
|
|
11
|
+
versions = {}
|
|
12
|
+
|
|
13
|
+
# Command line argument checking
|
|
14
|
+
|
|
15
|
+
if ARGV.size != 2
|
|
16
|
+
puts("Usage: ./versionbot.rb <jid> <password>")
|
|
17
|
+
exit
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
# Building up the connection
|
|
21
|
+
|
|
22
|
+
#Jabber::debug = true
|
|
23
|
+
|
|
24
|
+
jid = Jabber::JID.new(ARGV[0])
|
|
25
|
+
|
|
26
|
+
cl = Jabber::Client.new(jid)
|
|
27
|
+
cl.connect
|
|
28
|
+
cl.auth(ARGV[1])
|
|
29
|
+
|
|
30
|
+
cl.on_exception { |*a|
|
|
31
|
+
p a[0].backtrace
|
|
32
|
+
exit!
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
# I'm not sure about the portability of 'uname -sr' here ;-)
|
|
36
|
+
# but that's all needed to answer version queries:
|
|
37
|
+
Jabber::Version::SimpleResponder.new(cl, 'xmpp4r Versionbot example', Jabber::XMPP4R_VERSION, IO.popen('uname -sr').readlines.to_s.strip)
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
cl.add_iq_callback { |iq|
|
|
41
|
+
# Filter for version query results
|
|
42
|
+
if (iq.type == :result) && iq.query.kind_of?(Jabber::Version::IqQueryVersion)
|
|
43
|
+
puts "Version query result from #{iq.from}"
|
|
44
|
+
# Keep track of results per JID
|
|
45
|
+
versions[iq.from] = iq.query
|
|
46
|
+
# Print details
|
|
47
|
+
puts " Name: #{iq.query.iname.inspect}"
|
|
48
|
+
puts " Version: #{iq.query.version.inspect}"
|
|
49
|
+
puts " OS: #{iq.query.os.inspect}"
|
|
50
|
+
end
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
cl.add_presence_callback { |pres|
|
|
54
|
+
# Already fingerprinted or offline?
|
|
55
|
+
unless versions.has_key?(pres.from) || (pres.type == :unavailable) || (pres.type == :error)
|
|
56
|
+
# Construct a new query
|
|
57
|
+
iq = Jabber::Iq.new(:get, pres.from)
|
|
58
|
+
# and ask for the version
|
|
59
|
+
iq.query = Jabber::Version::IqQueryVersion.new
|
|
60
|
+
puts "Asking #{iq.to} for his/her/its version"
|
|
61
|
+
versions[pres.from] = :asking
|
|
62
|
+
cl.send(iq)
|
|
63
|
+
end
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
# Send initial presence
|
|
67
|
+
cl.send(Jabber::Presence.new.set_show(:xa).set_status('I am the evil fingerprinting robot'))
|
|
68
|
+
|
|
69
|
+
# Main loop:
|
|
70
|
+
loop do
|
|
71
|
+
cl.process
|
|
72
|
+
sleep(1)
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
cl.close
|
|
@@ -0,0 +1,116 @@
|
|
|
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
|
+
# ==Introduction
|
|
6
|
+
#
|
|
7
|
+
# XMPP4R is a XMPP/Jabber library for Ruby. It can be used to build scripts
|
|
8
|
+
# using Jabber, full-featured Jabber clients, and components. It is written
|
|
9
|
+
# with extensibility in mind.
|
|
10
|
+
#
|
|
11
|
+
# ==XML management
|
|
12
|
+
#
|
|
13
|
+
# All the XML parsing is REXML's, and XML stanzas like <message/> (class
|
|
14
|
+
# <tt>Jabber::Message</tt>) or <iq/> (class <tt>Jabber::Iq</tt>) are indirect
|
|
15
|
+
# derivatives from REXML's Element class. This provide a maximum flexibity:
|
|
16
|
+
# the user can access attributes and childs using either the XMPP4R's helpers
|
|
17
|
+
# or directly using REXML's methods.
|
|
18
|
+
#
|
|
19
|
+
# ===Automatic element casting
|
|
20
|
+
#
|
|
21
|
+
# Because there are special classes derived from REXML::Element to ease
|
|
22
|
+
# development on the protocol level, Elements must be cast to them. This is
|
|
23
|
+
# done via REXML::Element.import. This method is also used in import class
|
|
24
|
+
# methods of some Element classes.
|
|
25
|
+
#
|
|
26
|
+
# The first occurance of this feature is in Jabber::Stream::receive:
|
|
27
|
+
# * <tt><message/></tt> stanzas are cast to Jabber::Message class
|
|
28
|
+
# * <tt><presence/></tt> stanzas are cast to Jabber::Presence class
|
|
29
|
+
# * <tt><iq/></tt> stanzas are cast to Jabber::Iq class
|
|
30
|
+
#
|
|
31
|
+
# This is not only useful for stanzas but all other XML processing, too:
|
|
32
|
+
# * <tt><x/></tt> children elements of <tt><message/></tt> and <tt><presence/></tt> are converted to Jabber::X
|
|
33
|
+
# * <tt><error/></tt> children elements of all three stanzas are converted to Jabber::ErrorResponse
|
|
34
|
+
# * <tt><query/></tt> children elements of <tt><iq/></tt> are converted to Jabber::IqQuery
|
|
35
|
+
# * <tt><vCard/></tt> children elements of <tt><iq/></tt> are converted to Jabber::IqVcard
|
|
36
|
+
#
|
|
37
|
+
# The following conversion facilities are only executed if the respective
|
|
38
|
+
# library parts are loaded. See below for more details on Non-basic features.
|
|
39
|
+
# * Jabber::IqQuery elements are converted to Jabber::Roster::IqQueryRoster if their
|
|
40
|
+
# namespace is 'jabber:iq:roster'
|
|
41
|
+
# * Jabber::IqQuery elements are converted to Jabber::Version::IqQueryVersion if their
|
|
42
|
+
# namespace is 'jabber:iq:version'
|
|
43
|
+
# * Jabber::IqQuery elements are converted to Jabber::Discovery::IqQueryDiscoInfo if their
|
|
44
|
+
# namespace is 'http://jabber.org/protocol/disco#info'
|
|
45
|
+
# * Jabber::IqQuery elements are converted to Jabber::Discovery::IqQueryDiscoItems if their
|
|
46
|
+
# namespace is 'http://jabber.org/protocol/disco#items'
|
|
47
|
+
# * <tt><item/></tt> children elements of Jabber::Roster::IqQueryRoster are converted
|
|
48
|
+
# to Jabber::Roster::RosterItem
|
|
49
|
+
# * <tt><identity/></tt> children elements of Jabber::IqQueryDiscoInfo are converted
|
|
50
|
+
# to Jabber::Discovery::DiscoIdentity
|
|
51
|
+
# * <tt><feature/></tt> children elements of Jabber::IqQueryDiscoInfo are converted
|
|
52
|
+
# to Jabber::Discovery::DiscoFeature
|
|
53
|
+
# * <tt><item/></tt> children elements of Jabber::IqQueryDiscoItems are converted
|
|
54
|
+
# to Jabber::Discovery::DiscoItem
|
|
55
|
+
#
|
|
56
|
+
# To use this, don't check for:
|
|
57
|
+
# <tt>iq.queryns == 'http://jabber.org/protocol/disco#info'</tt>
|
|
58
|
+
#
|
|
59
|
+
# But instead check for the query's class:
|
|
60
|
+
# <tt>iq.query.kind_of?(Jabber::IqQueryDiscoInfo)</tt>
|
|
61
|
+
#
|
|
62
|
+
# ==Where to begin?
|
|
63
|
+
#
|
|
64
|
+
# Because it is built in an extensible way, it might be hard for newcomers to
|
|
65
|
+
# understand where to look at documentation for a specific method. For example,
|
|
66
|
+
# Client inherits from Connection, which itself inherits from Stream.
|
|
67
|
+
#
|
|
68
|
+
# A newcomer should have a look at the <tt>Jabber::Client</tt> and
|
|
69
|
+
# <tt>Jabber::Component</tt> classes, and their parent classes
|
|
70
|
+
# <tt>Jabber::Connection</tt> and <tt>Jabber::Stream</tt>. The best way to
|
|
71
|
+
# understand how to use them is probably to look at the examples in the
|
|
72
|
+
# <tt>examples/</tt> dir.
|
|
73
|
+
#
|
|
74
|
+
# ==Non-basic features
|
|
75
|
+
#
|
|
76
|
+
# <tt>require 'xmpp4r'</tt> only includes basic functionality for
|
|
77
|
+
# Connections, Authentication, Stream processing, Callbacks, Stanza handling
|
|
78
|
+
# and Debugging to keep the library's footprint small.
|
|
79
|
+
#
|
|
80
|
+
# There is code for features that aren't required by a *basic* client. These
|
|
81
|
+
# must be additionally included to use them.
|
|
82
|
+
#
|
|
83
|
+
# ===Protocol-level features
|
|
84
|
+
#
|
|
85
|
+
# You're highly advised to read the according RFCs and JEPs if you intend to
|
|
86
|
+
# use them. The benefit will be that you'll understand the protocols and be
|
|
87
|
+
# going to be more efficient when programming with them.
|
|
88
|
+
#
|
|
89
|
+
# * Jabber::Bytestreams, Jabber::FileTransfer: <tt>require 'xmpp4r/bytestreams'</tt>
|
|
90
|
+
# * Jabber::Dataforms: <tt>require 'xmpp4r/dataforms'</tt>
|
|
91
|
+
# * Jabber::Delay: <tt>require 'xmpp4r/delay'</tt>
|
|
92
|
+
# * Jabber::Discovery: <tt>require 'xmpp4r/discovery'</tt>
|
|
93
|
+
# * Jabber::FeatureNegotiation: <tt>require 'xmpp4r/feature_negotiation'</tt>
|
|
94
|
+
# * Jabber::MUC: <tt>require 'xmpp4r/muc'</tt>
|
|
95
|
+
# * Jabber::Roster: <tt>require 'xmpp4r/roster'</tt>
|
|
96
|
+
# * Jabber::Vcard: <tt>require 'xmpp4r/vcard'</tt>
|
|
97
|
+
# * Jabber::Version: <tt>require 'xmpp4r/version'</tt>
|
|
98
|
+
#
|
|
99
|
+
# ===Helpers
|
|
100
|
+
#
|
|
101
|
+
# Helpers are intended to give more simplistic interfaces to various tasks
|
|
102
|
+
# of Jabber clients at the cost of flexibility. But you won't need that
|
|
103
|
+
# level of flexibility in most cases.
|
|
104
|
+
#
|
|
105
|
+
# * Jabber::Roster::Helper: <tt>require 'xmpp4r/roster'</tt>
|
|
106
|
+
# * Jabber::MUC::MUCBrowser, Jabber::MUC::MUCClient, Jabber::MUC::SimpleMUCClient: <tt>require 'xmpp4r/muc'</tt>
|
|
107
|
+
# * Jabber::Version::SimpleResponder, Jabber::Version::Responder: <tt>require 'xmpp4r/version'</tt>
|
|
108
|
+
# * Jabber::Vcard::Helper: <tt>require 'xmpp4r/vcard'</tt>
|
|
109
|
+
# * Jabber::FileTransfer::Helper, Jabber::Bytestreams::SOCKS5BytestreamsServer: <tt>require 'xmpp4r/bytestreams'</tt>
|
|
110
|
+
#
|
|
111
|
+
# ==Debugging
|
|
112
|
+
#
|
|
113
|
+
# Dumping your Jabber stream can be enabled this way:
|
|
114
|
+
# Jabber::debug = true
|
|
115
|
+
|
|
116
|
+
require 'xmpp4r/xmpp4r'
|