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.
Files changed (215) hide show
  1. data/CHANGELOG +91 -0
  2. data/COPYING +340 -0
  3. data/LICENSE +59 -0
  4. data/README.rdoc +113 -0
  5. data/README_ruby19.txt +43 -0
  6. data/Rakefile +252 -0
  7. data/data/doc/xmpp4r/examples/advanced/adventure/README +56 -0
  8. data/data/doc/xmpp4r/examples/advanced/adventure/adventure.rb +23 -0
  9. data/data/doc/xmpp4r/examples/advanced/adventure/adventuremuc.rb +136 -0
  10. data/data/doc/xmpp4r/examples/advanced/adventure/cube.xml +15 -0
  11. data/data/doc/xmpp4r/examples/advanced/adventure/tower.xml +69 -0
  12. data/data/doc/xmpp4r/examples/advanced/adventure/world.rb +424 -0
  13. data/data/doc/xmpp4r/examples/advanced/fileserve.conf +11 -0
  14. data/data/doc/xmpp4r/examples/advanced/fileserve.rb +346 -0
  15. data/data/doc/xmpp4r/examples/advanced/getonline.rb +56 -0
  16. data/data/doc/xmpp4r/examples/advanced/gtkmucclient.rb +315 -0
  17. data/data/doc/xmpp4r/examples/advanced/migrate.rb +88 -0
  18. data/data/doc/xmpp4r/examples/advanced/minimuc.rb +266 -0
  19. data/data/doc/xmpp4r/examples/advanced/pep-aggregator/index.xsl +235 -0
  20. data/data/doc/xmpp4r/examples/advanced/pep-aggregator/pep-aggregator.rb +147 -0
  21. data/data/doc/xmpp4r/examples/advanced/recvfile.rb +84 -0
  22. data/data/doc/xmpp4r/examples/advanced/rosterdiscovery.rb +129 -0
  23. data/data/doc/xmpp4r/examples/advanced/sendfile.conf +10 -0
  24. data/data/doc/xmpp4r/examples/advanced/sendfile.rb +72 -0
  25. data/data/doc/xmpp4r/examples/advanced/shellmgr/shellmgr.rb +51 -0
  26. data/data/doc/xmpp4r/examples/advanced/shellmgr/shellmgr_jabber.rb +43 -0
  27. data/data/doc/xmpp4r/examples/advanced/shellmgr/shellmgr_test.rb +10 -0
  28. data/data/doc/xmpp4r/examples/advanced/versionpoll.rb +109 -0
  29. data/data/doc/xmpp4r/examples/advanced/xmpping.rb +146 -0
  30. data/data/doc/xmpp4r/examples/advanced/xmppingrc.sample +14 -0
  31. data/data/doc/xmpp4r/examples/basic/change_password.rb +41 -0
  32. data/data/doc/xmpp4r/examples/basic/client.rb +70 -0
  33. data/data/doc/xmpp4r/examples/basic/component.rb +11 -0
  34. data/data/doc/xmpp4r/examples/basic/echo.rb +37 -0
  35. data/data/doc/xmpp4r/examples/basic/jabbersend.rb +41 -0
  36. data/data/doc/xmpp4r/examples/basic/mass_sender.rb +68 -0
  37. data/data/doc/xmpp4r/examples/basic/muc_owner_config.rb +12 -0
  38. data/data/doc/xmpp4r/examples/basic/mucinfo.rb +41 -0
  39. data/data/doc/xmpp4r/examples/basic/mucsimplebot.rb +82 -0
  40. data/data/doc/xmpp4r/examples/basic/register.rb +42 -0
  41. data/data/doc/xmpp4r/examples/basic/remove_registration.rb +18 -0
  42. data/data/doc/xmpp4r/examples/basic/roster.rb +44 -0
  43. data/data/doc/xmpp4r/examples/basic/rosterprint.rb +50 -0
  44. data/data/doc/xmpp4r/examples/basic/rosterrename.rb +34 -0
  45. data/data/doc/xmpp4r/examples/basic/rosterwatch.rb +171 -0
  46. data/data/doc/xmpp4r/examples/basic/send_vcard.rb +67 -0
  47. data/data/doc/xmpp4r/examples/basic/tune_client.rb +56 -0
  48. data/data/doc/xmpp4r/examples/basic/tune_server.rb +58 -0
  49. data/data/doc/xmpp4r/examples/basic/versionbot.rb +75 -0
  50. data/lib/xmpp4r.rb +116 -0
  51. data/lib/xmpp4r/base64.rb +32 -0
  52. data/lib/xmpp4r/bytestreams.rb +15 -0
  53. data/lib/xmpp4r/bytestreams/helper/filetransfer.rb +319 -0
  54. data/lib/xmpp4r/bytestreams/helper/ibb/base.rb +257 -0
  55. data/lib/xmpp4r/bytestreams/helper/ibb/initiator.rb +31 -0
  56. data/lib/xmpp4r/bytestreams/helper/ibb/target.rb +54 -0
  57. data/lib/xmpp4r/bytestreams/helper/socks5bytestreams/base.rb +152 -0
  58. data/lib/xmpp4r/bytestreams/helper/socks5bytestreams/initiator.rb +86 -0
  59. data/lib/xmpp4r/bytestreams/helper/socks5bytestreams/server.rb +198 -0
  60. data/lib/xmpp4r/bytestreams/helper/socks5bytestreams/socks5.rb +65 -0
  61. data/lib/xmpp4r/bytestreams/helper/socks5bytestreams/target.rb +79 -0
  62. data/lib/xmpp4r/bytestreams/iq/bytestreams.rb +170 -0
  63. data/lib/xmpp4r/bytestreams/iq/si.rb +206 -0
  64. data/lib/xmpp4r/callbacks.rb +133 -0
  65. data/lib/xmpp4r/caps.rb +1 -0
  66. data/lib/xmpp4r/caps/c.rb +67 -0
  67. data/lib/xmpp4r/caps/helper/generator.rb +160 -0
  68. data/lib/xmpp4r/caps/helper/helper.rb +84 -0
  69. data/lib/xmpp4r/client.rb +344 -0
  70. data/lib/xmpp4r/command/helper/responder.rb +53 -0
  71. data/lib/xmpp4r/command/iq/command.rb +154 -0
  72. data/lib/xmpp4r/component.rb +103 -0
  73. data/lib/xmpp4r/connection.rb +223 -0
  74. data/lib/xmpp4r/dataforms.rb +5 -0
  75. data/lib/xmpp4r/dataforms/x/data.rb +297 -0
  76. data/lib/xmpp4r/debuglog.rb +63 -0
  77. data/lib/xmpp4r/delay.rb +5 -0
  78. data/lib/xmpp4r/delay/x/delay.rb +99 -0
  79. data/lib/xmpp4r/discovery.rb +8 -0
  80. data/lib/xmpp4r/discovery/helper/helper.rb +58 -0
  81. data/lib/xmpp4r/discovery/helper/responder.rb +165 -0
  82. data/lib/xmpp4r/discovery/iq/discoinfo.rb +211 -0
  83. data/lib/xmpp4r/discovery/iq/discoitems.rb +147 -0
  84. data/lib/xmpp4r/errors.rb +284 -0
  85. data/lib/xmpp4r/feature_negotiation.rb +5 -0
  86. data/lib/xmpp4r/feature_negotiation/iq/feature.rb +28 -0
  87. data/lib/xmpp4r/framework/base.rb +55 -0
  88. data/lib/xmpp4r/framework/bot.rb +148 -0
  89. data/lib/xmpp4r/httpbinding.rb +5 -0
  90. data/lib/xmpp4r/httpbinding/client.rb +275 -0
  91. data/lib/xmpp4r/idgenerator.rb +37 -0
  92. data/lib/xmpp4r/iq.rb +221 -0
  93. data/lib/xmpp4r/jid.rb +167 -0
  94. data/lib/xmpp4r/last.rb +2 -0
  95. data/lib/xmpp4r/last/helper/helper.rb +37 -0
  96. data/lib/xmpp4r/last/iq/last.rb +67 -0
  97. data/lib/xmpp4r/location.rb +2 -0
  98. data/lib/xmpp4r/location/helper/helper.rb +56 -0
  99. data/lib/xmpp4r/location/location.rb +179 -0
  100. data/lib/xmpp4r/message.rb +180 -0
  101. data/lib/xmpp4r/muc.rb +14 -0
  102. data/lib/xmpp4r/muc/helper/mucbrowser.rb +92 -0
  103. data/lib/xmpp4r/muc/helper/mucclient.rb +462 -0
  104. data/lib/xmpp4r/muc/helper/simplemucclient.rb +332 -0
  105. data/lib/xmpp4r/muc/iq/mucadmin.rb +23 -0
  106. data/lib/xmpp4r/muc/iq/mucadminitem.rb +20 -0
  107. data/lib/xmpp4r/muc/iq/mucowner.rb +15 -0
  108. data/lib/xmpp4r/muc/item.rb +143 -0
  109. data/lib/xmpp4r/muc/x/muc.rb +70 -0
  110. data/lib/xmpp4r/muc/x/mucuserinvite.rb +60 -0
  111. data/lib/xmpp4r/muc/x/mucuseritem.rb +36 -0
  112. data/lib/xmpp4r/presence.rb +232 -0
  113. data/lib/xmpp4r/pubsub.rb +8 -0
  114. data/lib/xmpp4r/pubsub/children/configuration.rb +86 -0
  115. data/lib/xmpp4r/pubsub/children/event.rb +49 -0
  116. data/lib/xmpp4r/pubsub/children/item.rb +35 -0
  117. data/lib/xmpp4r/pubsub/children/items.rb +53 -0
  118. data/lib/xmpp4r/pubsub/children/node_config.rb +48 -0
  119. data/lib/xmpp4r/pubsub/children/publish.rb +38 -0
  120. data/lib/xmpp4r/pubsub/children/retract.rb +41 -0
  121. data/lib/xmpp4r/pubsub/children/subscription.rb +62 -0
  122. data/lib/xmpp4r/pubsub/children/subscription_config.rb +67 -0
  123. data/lib/xmpp4r/pubsub/children/unsubscribe.rb +48 -0
  124. data/lib/xmpp4r/pubsub/helper/nodebrowser.rb +129 -0
  125. data/lib/xmpp4r/pubsub/helper/nodehelper.rb +156 -0
  126. data/lib/xmpp4r/pubsub/helper/oauth_service_helper.rb +90 -0
  127. data/lib/xmpp4r/pubsub/helper/servicehelper.rb +456 -0
  128. data/lib/xmpp4r/pubsub/iq/pubsub.rb +19 -0
  129. data/lib/xmpp4r/query.rb +15 -0
  130. data/lib/xmpp4r/reliable.rb +168 -0
  131. data/lib/xmpp4r/rexmladdons.rb +157 -0
  132. data/lib/xmpp4r/roster.rb +7 -0
  133. data/lib/xmpp4r/roster/helper/roster.rb +522 -0
  134. data/lib/xmpp4r/roster/iq/roster.rb +215 -0
  135. data/lib/xmpp4r/roster/x/roster.rb +138 -0
  136. data/lib/xmpp4r/rpc.rb +2 -0
  137. data/lib/xmpp4r/rpc/helper/client.rb +123 -0
  138. data/lib/xmpp4r/rpc/helper/server.rb +74 -0
  139. data/lib/xmpp4r/rpc/helper/xmlrpcaddons.rb +67 -0
  140. data/lib/xmpp4r/rpc/iq/rpc.rb +23 -0
  141. data/lib/xmpp4r/sasl.rb +248 -0
  142. data/lib/xmpp4r/semaphore.rb +38 -0
  143. data/lib/xmpp4r/stream.rb +599 -0
  144. data/lib/xmpp4r/streamparser.rb +85 -0
  145. data/lib/xmpp4r/test/listener_mocker.rb +118 -0
  146. data/lib/xmpp4r/tune.rb +2 -0
  147. data/lib/xmpp4r/tune/helper/helper.rb +58 -0
  148. data/lib/xmpp4r/tune/tune.rb +113 -0
  149. data/lib/xmpp4r/vcard.rb +6 -0
  150. data/lib/xmpp4r/vcard/helper/vcard.rb +84 -0
  151. data/lib/xmpp4r/vcard/iq/vcard.rb +109 -0
  152. data/lib/xmpp4r/version.rb +7 -0
  153. data/lib/xmpp4r/version/helper/responder.rb +72 -0
  154. data/lib/xmpp4r/version/helper/simpleresponder.rb +44 -0
  155. data/lib/xmpp4r/version/iq/version.rb +105 -0
  156. data/lib/xmpp4r/x.rb +37 -0
  157. data/lib/xmpp4r/xhtml.rb +1 -0
  158. data/lib/xmpp4r/xhtml/html.rb +115 -0
  159. data/lib/xmpp4r/xmpp4r.rb +20 -0
  160. data/lib/xmpp4r/xmppelement.rb +168 -0
  161. data/lib/xmpp4r/xmppstanza.rb +162 -0
  162. data/setup.rb +1586 -0
  163. data/test/bytestreams/tc_ibb.rb +188 -0
  164. data/test/bytestreams/tc_socks5bytestreams.rb +114 -0
  165. data/test/caps/tc_helper.rb +158 -0
  166. data/test/dataforms/tc_data.rb +81 -0
  167. data/test/delay/tc_xdelay.rb +51 -0
  168. data/test/discovery/tc_responder.rb +91 -0
  169. data/test/last/tc_helper.rb +75 -0
  170. data/test/lib/assert_equal_xml.rb +14 -0
  171. data/test/lib/clienttester.rb +149 -0
  172. data/test/muc/tc_muc_mucclient.rb +834 -0
  173. data/test/muc/tc_muc_simplemucclient.rb +114 -0
  174. data/test/muc/tc_mucowner.rb +50 -0
  175. data/test/pubsub/tc_helper.rb +785 -0
  176. data/test/pubsub/tc_nodeconfig.rb +61 -0
  177. data/test/pubsub/tc_subscriptionconfig.rb +41 -0
  178. data/test/reliable/tc_disconnect_cleanup.rb +334 -0
  179. data/test/reliable/tc_disconnect_exception.rb +37 -0
  180. data/test/reliable/tc_listener_mocked_test.rb +68 -0
  181. data/test/reliable/tc_reliable_connection.rb +31 -0
  182. data/test/roster/tc_helper.rb +524 -0
  183. data/test/roster/tc_iqqueryroster.rb +173 -0
  184. data/test/roster/tc_xroster.rb +73 -0
  185. data/test/rpc/tc_helper.rb +96 -0
  186. data/test/tc_callbacks.rb +129 -0
  187. data/test/tc_class_names.rb +146 -0
  188. data/test/tc_client.rb +30 -0
  189. data/test/tc_errors.rb +146 -0
  190. data/test/tc_idgenerator.rb +30 -0
  191. data/test/tc_iq.rb +113 -0
  192. data/test/tc_iqquery.rb +31 -0
  193. data/test/tc_jid.rb +204 -0
  194. data/test/tc_message.rb +131 -0
  195. data/test/tc_presence.rb +150 -0
  196. data/test/tc_rexml.rb +139 -0
  197. data/test/tc_stream.rb +167 -0
  198. data/test/tc_streamComponent.rb +95 -0
  199. data/test/tc_streamError.rb +129 -0
  200. data/test/tc_streamSend.rb +59 -0
  201. data/test/tc_streamparser.rb +125 -0
  202. data/test/tc_xmppstanza.rb +135 -0
  203. data/test/ts_xmpp4r.rb +44 -0
  204. data/test/tune/tc_helper_recv.rb +82 -0
  205. data/test/tune/tc_helper_send.rb +74 -0
  206. data/test/tune/tc_tune.rb +79 -0
  207. data/test/vcard/tc_helper.rb +49 -0
  208. data/test/vcard/tc_iqvcard.rb +62 -0
  209. data/test/version/tc_helper.rb +60 -0
  210. data/test/version/tc_iqqueryversion.rb +97 -0
  211. data/test/xhtml/tc_html.rb +41 -0
  212. data/tools/gen_requires.bash +31 -0
  213. data/tools/xmpp4r-gemspec-test.rb +11 -0
  214. data/xmpp4r.gemspec +238 -0
  215. metadata +280 -0
@@ -0,0 +1,37 @@
1
+ #!/usr/bin/ruby
2
+
3
+ # This bot will reply to every message it receives. To end the game, send 'exit'
4
+
5
+ $:.unshift '../../../../../lib'
6
+
7
+ require 'xmpp4r/client'
8
+ include Jabber
9
+
10
+ # settings
11
+ if ARGV.length != 2
12
+ puts "Run with ./echo_thread.rb user@server/resource password"
13
+ exit 1
14
+ end
15
+ myJID = JID.new(ARGV[0])
16
+ myPassword = ARGV[1]
17
+ cl = Client.new(myJID)
18
+ cl.connect
19
+ cl.auth(myPassword)
20
+ cl.send(Presence.new)
21
+ puts "Connected ! send messages to #{myJID.strip.to_s}."
22
+ mainthread = Thread.current
23
+ cl.add_message_callback do |m|
24
+ if m.type != :error
25
+ m2 = Message.new(m.from, "You sent: #{m.body}")
26
+ m2.type = m.type
27
+ cl.send(m2)
28
+ if m.body == 'exit'
29
+ m2 = Message.new(m.from, "Exiting ...")
30
+ m2.type = m.type
31
+ cl.send(m2)
32
+ mainthread.wakeup
33
+ end
34
+ end
35
+ end
36
+ Thread.stop
37
+ cl.close
@@ -0,0 +1,41 @@
1
+ #!/usr/bin/ruby
2
+
3
+ # This script will send a jabber message to the specified JID. The subject can be
4
+ # specified using the '-s' option, and the message will be taken from stdin.
5
+
6
+ $:.unshift '../../../../../lib'
7
+
8
+ require 'optparse'
9
+ require 'xmpp4r'
10
+ include Jabber
11
+
12
+ # settings
13
+ myJID = JID.new('bot@localhost/Bot')
14
+ myPassword = 'bot'
15
+
16
+ to = nil
17
+ subject = ''
18
+ OptionParser.new do |opts|
19
+ opts.banner = 'Usage: jabbersend.rb -s \'subject\' -t dest@domain'
20
+ opts.separator ''
21
+ opts.on('-s', '--subject SUBJECT', 'sets the message\'s subject') { |s| subject = s }
22
+ opts.on('-t', '--to DESTJID', 'sets the receiver') { |t| to = JID.new(t) }
23
+ opts.on_tail('-h', '--help', 'Show this message') {
24
+ puts opts
25
+ exit
26
+ }
27
+ opts.parse!(ARGV)
28
+ end
29
+
30
+ if to.nil?
31
+ puts "No receiver specified. See jabbersend -h"
32
+ end
33
+
34
+ cl = Client.new(myJID)
35
+ cl.connect
36
+ cl.auth(myPassword)
37
+ body = STDIN.readlines.join
38
+ m = Message.new(to, body).set_type(:normal).set_id('1').set_subject(subject)
39
+ puts m.to_s
40
+ cl.send(m)
41
+ cl.close
@@ -0,0 +1,68 @@
1
+ #!/usr/bin/ruby
2
+
3
+ # This script will send a jabber message to a list of JID given on stdin.
4
+
5
+ $:.unshift '../../../../../lib'
6
+
7
+ require 'optparse'
8
+ require 'xmpp4r'
9
+ include Jabber
10
+ #Jabber::debug = true
11
+
12
+ # - message in file
13
+ # - subject in command line
14
+ # - JID list on stdin
15
+
16
+ # settings
17
+ jid = JID.new('bot@localhost/Bot')
18
+ password = 'bot'
19
+ filename = 'message.txt'
20
+
21
+ subject = "Message de test"
22
+
23
+ OptionParser.new do |opts|
24
+ opts.banner = 'Usage: mass_sender.rb -j jid -p password'
25
+ opts.separator ''
26
+ opts.on('-j', '--jid JID', 'sets the jid') { |j| jid = JID.new(j) }
27
+ opts.on('-p', '--password PASSWORD', 'sets the password') { |p| password = p }
28
+ opts.on('-f', '--filename MESSAGE', 'sets the filename containing the message') { |f| filename = f }
29
+ opts.on('-s', '--subject SUBJECT', 'sets the subject') { |s| subject = s }
30
+ opts.on_tail('-h', '--help', 'Show this message') {
31
+ puts opts
32
+ exit
33
+ }
34
+ opts.parse!(ARGV)
35
+ end
36
+
37
+ body = IO::read(filename).chomp
38
+
39
+ cl = Client.new(jid)
40
+ cl.connect
41
+ cl.auth(password)
42
+ exit = false
43
+ sent = []
44
+ cl.add_message_callback do |m|
45
+ if m.type != :error
46
+ if !sent.include?(m.from)
47
+ cl.send(Message.new(m.from, "Je suis un robot. Si tu souhaites contacter un administrateur du serveur, envoie un message à lucas@nussbaum.fr ou rejoins la salle jabberfr@chat.jabberfr.org."))
48
+ sent << m.from
49
+ end
50
+ if m.body == 'exitnowplease'
51
+ cl.send(Message.new(m.from, "Exiting ..."))
52
+ exit = true
53
+ end
54
+ cl.send(Message.new('lucas@nussbaum.fr', "From #{m.from}: #{m.body.to_s}"))
55
+ end
56
+ end
57
+ cl.send(Presence.new)
58
+ m = Message.new(nil, body)
59
+ m.subject = subject
60
+ STDIN.each_line { |l|
61
+ l.chomp!
62
+ m.set_to(JID.new(l).to_s)
63
+ cl.send(m)
64
+ }
65
+ while not exit do
66
+ cl.process(1)
67
+ end
68
+ cl.close
@@ -0,0 +1,12 @@
1
+ require 'xmpp4r'
2
+ require 'xmpp4r/muc'
3
+
4
+ client = Jabber::Client.new('admin@myserver.co.uk/ruby')
5
+ muc = Jabber::MUC::MUCClient.new(client)
6
+ client.connect
7
+ client.auth('admin')
8
+ muc.join('room@conference.myserver.co.uk/admin')
9
+ muc.configure(
10
+ 'muc#roomconfig_roomname' => 'roomname',
11
+ 'muc#roomconfig_persistentroom' => 1
12
+ )
@@ -0,0 +1,41 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ $:.unshift '../../../../../lib'
4
+
5
+ require 'xmpp4r'
6
+ require 'xmpp4r/muc/helper/mucbrowser'
7
+
8
+ if ARGV.size != 3
9
+ puts "Usage: #{$0} <jid> <password> <muc-jid>"
10
+ exit
11
+ end
12
+
13
+ jid, password, muc_jid = Jabber::JID.new(ARGV.shift), ARGV.shift, Jabber::JID.new(ARGV.shift)
14
+
15
+ cl = Jabber::Client.new(jid)
16
+ cl.connect
17
+ cl.auth(password)
18
+
19
+ browser = Jabber::MUC::MUCBrowser.new(cl)
20
+
21
+ print "Querying #{muc_jid} for identity..."; $stdout.flush
22
+ name = browser.muc_name(muc_jid)
23
+
24
+ if name.nil?
25
+ puts " Sorry, but the queried MUC component doesn't seem to support MUC or Groupchat."
26
+ else
27
+ puts " #{name}"
28
+
29
+ print "Querying #{muc_jid} for its rooms..."; $stdout.flush
30
+ rooms = browser.muc_rooms(muc_jid)
31
+ puts " #{rooms.size} rooms found"
32
+
33
+ max_room_length = 0
34
+ rooms.each_key { |jid| max_room_length = jid.to_s.size if jid.to_s.size > max_room_length }
35
+
36
+ rooms.each { |jid,name|
37
+ puts "#{jid.to_s.ljust(max_room_length)} #{name}"
38
+ }
39
+ end
40
+
41
+ cl.close
@@ -0,0 +1,82 @@
1
+ #!/usr/bin/env ruby
2
+ $:.unshift '../../../../../lib/'
3
+ require 'xmpp4r'
4
+ require 'xmpp4r/muc/helper/simplemucclient'
5
+
6
+
7
+ if ARGV.size != 3
8
+ puts "Usage: #{$0} <jid> <password> <room@conference/nick>"
9
+ exit
10
+ end
11
+
12
+ # Print a line formatted depending on time.nil?
13
+ def print_line(time, line)
14
+ if time.nil?
15
+ puts line
16
+ else
17
+ puts "#{time.strftime('%I:%M')} #{line}"
18
+ end
19
+ end
20
+
21
+
22
+ #Jabber::debug = true
23
+ cl = Jabber::Client.new(Jabber::JID.new(ARGV[0]))
24
+ cl.connect
25
+ cl.auth(ARGV[1])
26
+
27
+ # For waking up...
28
+ mainthread = Thread.current
29
+
30
+ # This is the SimpleMUCClient helper!
31
+ m = Jabber::MUC::SimpleMUCClient.new(cl)
32
+
33
+ # SimpleMUCClient callback-blocks
34
+
35
+ m.on_join { |time,nick|
36
+ print_line time, "#{nick} has joined!"
37
+ puts "Users: " + m.roster.keys.join(', ')
38
+ }
39
+ m.on_leave { |time,nick|
40
+ print_line time, "#{nick} has left!"
41
+ }
42
+
43
+ m.on_message { |time,nick,text|
44
+ print_line time, "<#{nick}> #{text}"
45
+
46
+ # Avoid reacting on messaged delivered as room history
47
+ unless time
48
+ # Bot: invite astro@spaceboyz.net
49
+ if text.strip =~ /^(.+?): invite (.+)$/
50
+ jid = $2
51
+ if $1.downcase == m.jid.resource.downcase
52
+ m.invite(jid => "Inviting you on behalf of #{nick}")
53
+ m.say("Inviting #{jid}...")
54
+ end
55
+ # Bot: subject This is room is powered by XMPP4R
56
+ elsif text.strip =~ /^(.+?): subject (.+)$/
57
+ if $1.downcase == m.jid.resource.downcase
58
+ m.subject = $2
59
+ end
60
+ # Bot: exit please
61
+ elsif text.strip =~ /^(.+?): exit please$/
62
+ if $1.downcase == m.jid.resource.downcase
63
+ puts "exiting"
64
+ m.exit "Exiting on behalf of #{nick}"
65
+ mainthread.wakeup
66
+ end
67
+ end
68
+ end
69
+ }
70
+ m.on_room_message { |time,text|
71
+ print_line time, "- #{text}"
72
+ }
73
+ m.on_subject { |time,nick,subject|
74
+ print_line time, "*** (#{nick}) #{subject}"
75
+ }
76
+
77
+ m.join(ARGV[2])
78
+
79
+ # Wait for being waken up by m.on_message
80
+ Thread.stop
81
+
82
+ cl.close
@@ -0,0 +1,42 @@
1
+ #!/usr/bin/ruby
2
+
3
+ $:.unshift '../../../../../lib'
4
+ require 'xmpp4r'
5
+
6
+
7
+ # Argument checking
8
+ if ARGV.size < 2
9
+ puts("Usage: #{$0} <desired jid> <password> [field1=value1] [fieldN=valueN]")
10
+ exit
11
+ end
12
+
13
+
14
+ # The usual procedure
15
+ cl = Jabber::Client.new(Jabber::JID.new(ARGV[0]))
16
+ puts "Connecting"
17
+ cl.connect
18
+
19
+ # Registration of the new user account
20
+ puts "Registering..."
21
+ begin
22
+ fields = {}
23
+ ARGV[2..-1].each { |a|
24
+ k, v = a.split('=', 2)
25
+ fields[k] = v
26
+ }
27
+ cl.register(ARGV[1], fields)
28
+ puts "Successful"
29
+ rescue Jabber::ServerError => e
30
+ puts "Error: #{e.error.text}"
31
+ if e.error.type == :modify
32
+ puts "Accepted registration information:"
33
+ instructions, fields = cl.register_info
34
+ fields.each { |info|
35
+ puts "* #{info}"
36
+ }
37
+ puts "(#{instructions})"
38
+ end
39
+ end
40
+
41
+ # Shutdown
42
+ cl.close
@@ -0,0 +1,18 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ $:.unshift '../../../../../lib'
4
+ require 'xmpp4r'
5
+ include Jabber
6
+
7
+ if ARGV.size != 2
8
+ puts "Warning! This example UNREGISTERS user accounts!"
9
+ puts "Usage: #{$0} <jid> <password>"
10
+ exit
11
+ end
12
+
13
+ cl = Client.new(JID.new(ARGV[0]))
14
+ cl.connect
15
+ cl.auth(ARGV[1])
16
+ cl.remove_registration
17
+
18
+ cl.close
@@ -0,0 +1,44 @@
1
+ #!/usr/bin/ruby
2
+
3
+ # This script can get all roster entries
4
+
5
+ #$:.unshift '../../../../../lib'
6
+
7
+ require 'optparse'
8
+ require 'xmpp4r'
9
+ require 'xmpp4r/roster/iq/roster'
10
+ include Jabber
11
+
12
+ jid = JID.new('lucastest@linux.ensimag.fr/rosterget')
13
+ password = 'lucastest'
14
+
15
+ OptionParser.new do |opts|
16
+ opts.banner = 'Usage: roster.rb -t get -j jid -p password'
17
+ opts.separator ''
18
+ opts.on('-j', '--jid JID', 'sets the jid') { |j| jid = JID.new(j) }
19
+ opts.on('-p', '--password PASSWORD', 'sets the password') { |p| password = p }
20
+ opts.on_tail('-h', '--help', 'Show this message') {
21
+ puts opts
22
+ exit
23
+ }
24
+ opts.parse!(ARGV)
25
+ end
26
+
27
+ cl = Client.new(jid)
28
+ cl.connect
29
+ cl.auth(password)
30
+ cl.send(Iq.new_rosterget)
31
+ exit = false
32
+ cl.add_iq_callback { |i|
33
+ if i.type == :result and i.query.kind_of?(Roster::IqQueryRoster)
34
+ i.query.each_element { |e|
35
+ e.text = ''
36
+ puts e.to_s
37
+ }
38
+ exit = true
39
+ end
40
+ }
41
+ while not exit
42
+ cl.process
43
+ end
44
+ cl.close
@@ -0,0 +1,50 @@
1
+ #!/usr/bin/ruby
2
+
3
+ $:.unshift '../../../../../lib/'
4
+
5
+ require 'xmpp4r'
6
+ require 'xmpp4r/roster/helper/roster'
7
+
8
+ # Command line argument checking
9
+
10
+ if ARGV.size != 2
11
+ puts("Usage: ./rosterprint.rb <jid> <password>")
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 roster instance
26
+ roster = Jabber::Roster::Helper.new(cl)
27
+
28
+ mainthread = Thread.current
29
+
30
+ roster.add_query_callback { |iq|
31
+ mainthread.wakeup
32
+ }
33
+
34
+ Thread.stop
35
+
36
+ roster.groups.each { |group|
37
+ if group.nil?
38
+ puts "*** Ungrouped ***"
39
+ else
40
+ puts "*** #{group} ***"
41
+ end
42
+
43
+ roster.find_by_group(group).each { |item|
44
+ puts "- #{item.iname} (#{item.jid})"
45
+ }
46
+
47
+ print "\n"
48
+ }
49
+
50
+ cl.close