ln-xmpp4r 0.5
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/CHANGELOG +91 -0
- data/COPYING +340 -0
- data/LICENSE +59 -0
- data/README.rdoc +113 -0
- data/README_ruby19.txt +43 -0
- data/Rakefile +252 -0
- data/data/doc/xmpp4r/examples/advanced/adventure/README +56 -0
- data/data/doc/xmpp4r/examples/advanced/adventure/adventure.rb +23 -0
- data/data/doc/xmpp4r/examples/advanced/adventure/adventuremuc.rb +136 -0
- data/data/doc/xmpp4r/examples/advanced/adventure/cube.xml +15 -0
- data/data/doc/xmpp4r/examples/advanced/adventure/tower.xml +69 -0
- data/data/doc/xmpp4r/examples/advanced/adventure/world.rb +424 -0
- data/data/doc/xmpp4r/examples/advanced/fileserve.conf +11 -0
- data/data/doc/xmpp4r/examples/advanced/fileserve.rb +346 -0
- data/data/doc/xmpp4r/examples/advanced/getonline.rb +56 -0
- data/data/doc/xmpp4r/examples/advanced/gtkmucclient.rb +315 -0
- data/data/doc/xmpp4r/examples/advanced/migrate.rb +88 -0
- data/data/doc/xmpp4r/examples/advanced/minimuc.rb +266 -0
- data/data/doc/xmpp4r/examples/advanced/pep-aggregator/index.xsl +235 -0
- data/data/doc/xmpp4r/examples/advanced/pep-aggregator/pep-aggregator.rb +147 -0
- data/data/doc/xmpp4r/examples/advanced/recvfile.rb +84 -0
- data/data/doc/xmpp4r/examples/advanced/rosterdiscovery.rb +129 -0
- data/data/doc/xmpp4r/examples/advanced/sendfile.conf +10 -0
- data/data/doc/xmpp4r/examples/advanced/sendfile.rb +72 -0
- data/data/doc/xmpp4r/examples/advanced/shellmgr/shellmgr.rb +51 -0
- data/data/doc/xmpp4r/examples/advanced/shellmgr/shellmgr_jabber.rb +43 -0
- data/data/doc/xmpp4r/examples/advanced/shellmgr/shellmgr_test.rb +10 -0
- data/data/doc/xmpp4r/examples/advanced/versionpoll.rb +109 -0
- data/data/doc/xmpp4r/examples/advanced/xmpping.rb +146 -0
- data/data/doc/xmpp4r/examples/advanced/xmppingrc.sample +14 -0
- data/data/doc/xmpp4r/examples/basic/change_password.rb +41 -0
- data/data/doc/xmpp4r/examples/basic/client.rb +70 -0
- data/data/doc/xmpp4r/examples/basic/component.rb +11 -0
- data/data/doc/xmpp4r/examples/basic/echo.rb +37 -0
- data/data/doc/xmpp4r/examples/basic/jabbersend.rb +41 -0
- data/data/doc/xmpp4r/examples/basic/mass_sender.rb +68 -0
- data/data/doc/xmpp4r/examples/basic/muc_owner_config.rb +12 -0
- data/data/doc/xmpp4r/examples/basic/mucinfo.rb +41 -0
- data/data/doc/xmpp4r/examples/basic/mucsimplebot.rb +82 -0
- data/data/doc/xmpp4r/examples/basic/register.rb +42 -0
- data/data/doc/xmpp4r/examples/basic/remove_registration.rb +18 -0
- data/data/doc/xmpp4r/examples/basic/roster.rb +44 -0
- data/data/doc/xmpp4r/examples/basic/rosterprint.rb +50 -0
- data/data/doc/xmpp4r/examples/basic/rosterrename.rb +34 -0
- data/data/doc/xmpp4r/examples/basic/rosterwatch.rb +171 -0
- data/data/doc/xmpp4r/examples/basic/send_vcard.rb +67 -0
- data/data/doc/xmpp4r/examples/basic/tune_client.rb +56 -0
- data/data/doc/xmpp4r/examples/basic/tune_server.rb +58 -0
- data/data/doc/xmpp4r/examples/basic/versionbot.rb +75 -0
- data/lib/xmpp4r.rb +116 -0
- data/lib/xmpp4r/base64.rb +32 -0
- data/lib/xmpp4r/bytestreams.rb +15 -0
- data/lib/xmpp4r/bytestreams/helper/filetransfer.rb +319 -0
- data/lib/xmpp4r/bytestreams/helper/ibb/base.rb +257 -0
- data/lib/xmpp4r/bytestreams/helper/ibb/initiator.rb +31 -0
- data/lib/xmpp4r/bytestreams/helper/ibb/target.rb +54 -0
- data/lib/xmpp4r/bytestreams/helper/socks5bytestreams/base.rb +152 -0
- data/lib/xmpp4r/bytestreams/helper/socks5bytestreams/initiator.rb +86 -0
- data/lib/xmpp4r/bytestreams/helper/socks5bytestreams/server.rb +198 -0
- data/lib/xmpp4r/bytestreams/helper/socks5bytestreams/socks5.rb +65 -0
- data/lib/xmpp4r/bytestreams/helper/socks5bytestreams/target.rb +79 -0
- data/lib/xmpp4r/bytestreams/iq/bytestreams.rb +170 -0
- data/lib/xmpp4r/bytestreams/iq/si.rb +206 -0
- data/lib/xmpp4r/callbacks.rb +133 -0
- data/lib/xmpp4r/caps.rb +1 -0
- data/lib/xmpp4r/caps/c.rb +67 -0
- data/lib/xmpp4r/caps/helper/generator.rb +160 -0
- data/lib/xmpp4r/caps/helper/helper.rb +84 -0
- data/lib/xmpp4r/client.rb +344 -0
- data/lib/xmpp4r/command/helper/responder.rb +53 -0
- data/lib/xmpp4r/command/iq/command.rb +154 -0
- data/lib/xmpp4r/component.rb +103 -0
- data/lib/xmpp4r/connection.rb +223 -0
- data/lib/xmpp4r/dataforms.rb +5 -0
- data/lib/xmpp4r/dataforms/x/data.rb +297 -0
- data/lib/xmpp4r/debuglog.rb +63 -0
- data/lib/xmpp4r/delay.rb +5 -0
- data/lib/xmpp4r/delay/x/delay.rb +99 -0
- data/lib/xmpp4r/discovery.rb +8 -0
- data/lib/xmpp4r/discovery/helper/helper.rb +58 -0
- data/lib/xmpp4r/discovery/helper/responder.rb +165 -0
- data/lib/xmpp4r/discovery/iq/discoinfo.rb +211 -0
- data/lib/xmpp4r/discovery/iq/discoitems.rb +147 -0
- data/lib/xmpp4r/errors.rb +284 -0
- data/lib/xmpp4r/feature_negotiation.rb +5 -0
- data/lib/xmpp4r/feature_negotiation/iq/feature.rb +28 -0
- data/lib/xmpp4r/framework/base.rb +55 -0
- data/lib/xmpp4r/framework/bot.rb +148 -0
- data/lib/xmpp4r/httpbinding.rb +5 -0
- data/lib/xmpp4r/httpbinding/client.rb +275 -0
- data/lib/xmpp4r/idgenerator.rb +37 -0
- data/lib/xmpp4r/iq.rb +221 -0
- data/lib/xmpp4r/jid.rb +167 -0
- data/lib/xmpp4r/last.rb +2 -0
- data/lib/xmpp4r/last/helper/helper.rb +37 -0
- data/lib/xmpp4r/last/iq/last.rb +67 -0
- data/lib/xmpp4r/location.rb +2 -0
- data/lib/xmpp4r/location/helper/helper.rb +56 -0
- data/lib/xmpp4r/location/location.rb +179 -0
- data/lib/xmpp4r/message.rb +180 -0
- data/lib/xmpp4r/muc.rb +14 -0
- data/lib/xmpp4r/muc/helper/mucbrowser.rb +92 -0
- data/lib/xmpp4r/muc/helper/mucclient.rb +462 -0
- data/lib/xmpp4r/muc/helper/simplemucclient.rb +332 -0
- data/lib/xmpp4r/muc/iq/mucadmin.rb +23 -0
- data/lib/xmpp4r/muc/iq/mucadminitem.rb +20 -0
- data/lib/xmpp4r/muc/iq/mucowner.rb +15 -0
- data/lib/xmpp4r/muc/item.rb +143 -0
- data/lib/xmpp4r/muc/x/muc.rb +70 -0
- data/lib/xmpp4r/muc/x/mucuserinvite.rb +60 -0
- data/lib/xmpp4r/muc/x/mucuseritem.rb +36 -0
- data/lib/xmpp4r/presence.rb +232 -0
- data/lib/xmpp4r/pubsub.rb +8 -0
- data/lib/xmpp4r/pubsub/children/configuration.rb +86 -0
- data/lib/xmpp4r/pubsub/children/event.rb +49 -0
- data/lib/xmpp4r/pubsub/children/item.rb +35 -0
- data/lib/xmpp4r/pubsub/children/items.rb +53 -0
- data/lib/xmpp4r/pubsub/children/node_config.rb +48 -0
- data/lib/xmpp4r/pubsub/children/publish.rb +38 -0
- data/lib/xmpp4r/pubsub/children/retract.rb +41 -0
- data/lib/xmpp4r/pubsub/children/subscription.rb +62 -0
- data/lib/xmpp4r/pubsub/children/subscription_config.rb +67 -0
- data/lib/xmpp4r/pubsub/children/unsubscribe.rb +48 -0
- data/lib/xmpp4r/pubsub/helper/nodebrowser.rb +129 -0
- data/lib/xmpp4r/pubsub/helper/nodehelper.rb +156 -0
- data/lib/xmpp4r/pubsub/helper/oauth_service_helper.rb +90 -0
- data/lib/xmpp4r/pubsub/helper/servicehelper.rb +456 -0
- data/lib/xmpp4r/pubsub/iq/pubsub.rb +19 -0
- data/lib/xmpp4r/query.rb +15 -0
- data/lib/xmpp4r/reliable.rb +168 -0
- data/lib/xmpp4r/rexmladdons.rb +157 -0
- data/lib/xmpp4r/roster.rb +7 -0
- data/lib/xmpp4r/roster/helper/roster.rb +522 -0
- data/lib/xmpp4r/roster/iq/roster.rb +215 -0
- data/lib/xmpp4r/roster/x/roster.rb +138 -0
- data/lib/xmpp4r/rpc.rb +2 -0
- data/lib/xmpp4r/rpc/helper/client.rb +123 -0
- data/lib/xmpp4r/rpc/helper/server.rb +74 -0
- data/lib/xmpp4r/rpc/helper/xmlrpcaddons.rb +67 -0
- data/lib/xmpp4r/rpc/iq/rpc.rb +23 -0
- data/lib/xmpp4r/sasl.rb +248 -0
- data/lib/xmpp4r/semaphore.rb +38 -0
- data/lib/xmpp4r/stream.rb +599 -0
- data/lib/xmpp4r/streamparser.rb +85 -0
- data/lib/xmpp4r/test/listener_mocker.rb +118 -0
- data/lib/xmpp4r/tune.rb +2 -0
- data/lib/xmpp4r/tune/helper/helper.rb +58 -0
- data/lib/xmpp4r/tune/tune.rb +113 -0
- data/lib/xmpp4r/vcard.rb +6 -0
- data/lib/xmpp4r/vcard/helper/vcard.rb +84 -0
- data/lib/xmpp4r/vcard/iq/vcard.rb +109 -0
- data/lib/xmpp4r/version.rb +7 -0
- data/lib/xmpp4r/version/helper/responder.rb +72 -0
- data/lib/xmpp4r/version/helper/simpleresponder.rb +44 -0
- data/lib/xmpp4r/version/iq/version.rb +105 -0
- data/lib/xmpp4r/x.rb +37 -0
- data/lib/xmpp4r/xhtml.rb +1 -0
- data/lib/xmpp4r/xhtml/html.rb +115 -0
- data/lib/xmpp4r/xmpp4r.rb +20 -0
- data/lib/xmpp4r/xmppelement.rb +168 -0
- data/lib/xmpp4r/xmppstanza.rb +162 -0
- data/setup.rb +1586 -0
- data/test/bytestreams/tc_ibb.rb +188 -0
- data/test/bytestreams/tc_socks5bytestreams.rb +114 -0
- data/test/caps/tc_helper.rb +158 -0
- data/test/dataforms/tc_data.rb +81 -0
- data/test/delay/tc_xdelay.rb +51 -0
- data/test/discovery/tc_responder.rb +91 -0
- data/test/last/tc_helper.rb +75 -0
- data/test/lib/assert_equal_xml.rb +14 -0
- data/test/lib/clienttester.rb +149 -0
- data/test/muc/tc_muc_mucclient.rb +834 -0
- data/test/muc/tc_muc_simplemucclient.rb +114 -0
- data/test/muc/tc_mucowner.rb +50 -0
- data/test/pubsub/tc_helper.rb +785 -0
- data/test/pubsub/tc_nodeconfig.rb +61 -0
- data/test/pubsub/tc_subscriptionconfig.rb +41 -0
- data/test/reliable/tc_disconnect_cleanup.rb +334 -0
- data/test/reliable/tc_disconnect_exception.rb +37 -0
- data/test/reliable/tc_listener_mocked_test.rb +68 -0
- data/test/reliable/tc_reliable_connection.rb +31 -0
- data/test/roster/tc_helper.rb +524 -0
- data/test/roster/tc_iqqueryroster.rb +173 -0
- data/test/roster/tc_xroster.rb +73 -0
- data/test/rpc/tc_helper.rb +96 -0
- data/test/tc_callbacks.rb +129 -0
- data/test/tc_class_names.rb +146 -0
- data/test/tc_client.rb +30 -0
- data/test/tc_errors.rb +146 -0
- data/test/tc_idgenerator.rb +30 -0
- data/test/tc_iq.rb +113 -0
- data/test/tc_iqquery.rb +31 -0
- data/test/tc_jid.rb +204 -0
- data/test/tc_message.rb +131 -0
- data/test/tc_presence.rb +150 -0
- data/test/tc_rexml.rb +139 -0
- data/test/tc_stream.rb +167 -0
- data/test/tc_streamComponent.rb +95 -0
- data/test/tc_streamError.rb +129 -0
- data/test/tc_streamSend.rb +59 -0
- data/test/tc_streamparser.rb +125 -0
- data/test/tc_xmppstanza.rb +135 -0
- data/test/ts_xmpp4r.rb +44 -0
- data/test/tune/tc_helper_recv.rb +82 -0
- data/test/tune/tc_helper_send.rb +74 -0
- data/test/tune/tc_tune.rb +79 -0
- data/test/vcard/tc_helper.rb +49 -0
- data/test/vcard/tc_iqvcard.rb +62 -0
- data/test/version/tc_helper.rb +60 -0
- data/test/version/tc_iqqueryversion.rb +97 -0
- data/test/xhtml/tc_html.rb +41 -0
- data/tools/gen_requires.bash +31 -0
- data/tools/xmpp4r-gemspec-test.rb +11 -0
- data/xmpp4r.gemspec +238 -0
- metadata +280 -0
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
#!/usr/bin/ruby
|
|
2
|
+
|
|
3
|
+
$:.unshift '../../../../../lib'
|
|
4
|
+
|
|
5
|
+
require 'xmpp4r'
|
|
6
|
+
require 'xmpp4r/roster/iq/roster'
|
|
7
|
+
|
|
8
|
+
# Command line argument checking
|
|
9
|
+
|
|
10
|
+
if ARGV.size < 4
|
|
11
|
+
puts("Usage: ./rosterrename.rb <your jid> <password> <jid to rename> <new name> [<group1> ... <groupn>]")
|
|
12
|
+
exit
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
# Building up the connection
|
|
16
|
+
|
|
17
|
+
#Jabber::debug = true
|
|
18
|
+
|
|
19
|
+
jid = Jabber::JID.new(ARGV[0])
|
|
20
|
+
|
|
21
|
+
cl = Jabber::Client.new(jid)
|
|
22
|
+
cl.connect
|
|
23
|
+
cl.auth(ARGV[1])
|
|
24
|
+
|
|
25
|
+
# The iq stanza
|
|
26
|
+
iq = Jabber::Iq.new(:set)
|
|
27
|
+
# The new roster instance and item element
|
|
28
|
+
iq.add(Jabber::Roster::IqQueryRoster.new).add(Jabber::Roster::RosterItem.new(ARGV[2], ARGV[3])).groups = ARGV[4..ARGV.size]
|
|
29
|
+
|
|
30
|
+
# Sending the stanza
|
|
31
|
+
cl.send(iq)
|
|
32
|
+
|
|
33
|
+
# Don't look at the results:
|
|
34
|
+
cl.close
|
|
@@ -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
|