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,43 @@
1
+ #!/usr/bin/ruby -w
2
+
3
+ $:.unshift '../../lib'
4
+ require 'shellmgr'
5
+ require 'xmpp4r'
6
+ include Jabber
7
+
8
+ if ARGV.length != 3
9
+ puts "usage: ./shellmgr_jabber.rb jid_to_use password jid_to_authorize"
10
+ exit(1)
11
+ end
12
+
13
+ myjid = JID.new(ARGV[0])
14
+ mypassword = ARGV[1]
15
+ authjid = JID.new(ARGV[2])
16
+
17
+ myjid = JID.new(myjid.node, myjid.domain, 'RSM')
18
+ cl = Client.new(myjid)
19
+ cl.connect
20
+ cl.auth(mypassword)
21
+ mainthread = Thread.current
22
+ sh = Shell.new { |str|
23
+ puts "-----RECEIVING-----\n#{str}"
24
+ cl.send(Message.new(authjid, str)) }
25
+ cl.add_message_callback do |m|
26
+ if JID.new(m.from).strip.to_s != authjid.strip.to_s
27
+ puts "Received message from non-authorized user #{m.from}"
28
+ else
29
+ if m.body == "killshell"
30
+ cl.send(Message.new(authjid, "Exiting..."))
31
+ mainthread.wakeup
32
+ else
33
+ puts "-----EXECUTING-----\n#{m.body}"
34
+ sh.puts(m.body)
35
+ end
36
+ end
37
+ end
38
+ cl.send(Presence.new)
39
+ puts "Connected ! Ask #{authjid.to_s} to send commands to #{myjid.to_s}"
40
+ cl.send(Message.new(authjid, "I'm ready to receive commands from you."))
41
+ Thread.stop
42
+ cl.close
43
+ sh.kill
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/ruby -w
2
+
3
+ require 'shellmgr'
4
+
5
+ sh = Shell.new { |s| puts s }
6
+
7
+ while true do
8
+ l = gets
9
+ sh.puts l
10
+ end
@@ -0,0 +1,109 @@
1
+ #!/usr/bin/ruby
2
+
3
+ # This script will request the version information of a list of JID given
4
+ # on stdin.
5
+
6
+ $:.unshift '../../../../../lib'
7
+
8
+ require 'optparse'
9
+ require 'xmpp4r/client'
10
+ require 'xmpp4r/version'
11
+ require 'xmpp4r/discovery'
12
+ include Jabber
13
+ #Jabber::debug = true
14
+
15
+ # settings
16
+ jid = JID.new('bot@localhost/Bot')
17
+ password = 'bot'
18
+ domains = []
19
+ domains_ejabberd = []
20
+ OptionParser.new do |opts|
21
+ opts.banner = 'Usage: versionpoll.rb -j jid -p password -d DOMAINS'
22
+ opts.separator ''
23
+ opts.on('-j', '--jid JID', 'sets the jid') { |j| jid = JID.new(j) }
24
+ opts.on('-p', '--password PASSWORD', 'sets the password') { |p| password = p }
25
+ opts.on('-d', '--domain DOMAIN', 'sets the domain') { |d| domains << d }
26
+ opts.on_tail('-h', '--help', 'Show this message') {
27
+ puts opts
28
+ exit
29
+ }
30
+ opts.parse!(ARGV)
31
+ end
32
+
33
+ cl = Client.new(jid)
34
+ cl.connect
35
+ cl.auth(password)
36
+ sent = []
37
+ queried = []
38
+ activity = false
39
+ cl.add_iq_callback do |i|
40
+ fjid = JID.new(i.from)
41
+ if i.type == :result and fjid.resource == "admin"
42
+ domain = fjid.domain
43
+ items = i.first_element('item')
44
+ raise "items nil" if items.nil?
45
+ items.each_element('user') do |e|
46
+ j = e.attribute('jid')
47
+ if not queried.include?(j)
48
+ activity = true
49
+ queried << j
50
+ cl.send(Iq.new_browseget.set_to(j))
51
+ end
52
+ end
53
+ elsif i.type == :result and i.query.kind_of? Discovery::IqQueryDiscoItems
54
+ i.query.items.each do |e|
55
+ j = e.jid
56
+ if not queried.include?(j)
57
+ activity = true
58
+ queried << j
59
+ iq = Iq.new(:get)
60
+ iq.query = Version::IqQueryVersion.new
61
+ iq.set_to(j)
62
+ cl.send(iq)
63
+ end
64
+ end
65
+ end
66
+ end
67
+
68
+ cl.add_iq_callback do |i|
69
+ if i.type == :result
70
+ u = i.first_element('user')
71
+ if u
72
+ u.each_element('user') do |e|
73
+ if (a = e.attribute('type'))
74
+ if a.value == 'client'
75
+ activity = true
76
+ iq = Iq.new(:get)
77
+ iq.query = Version::IqQueryVersion.new
78
+ iq.set_to(JID.new(e.attribute('jid').to_s))
79
+ cl.send(iq)
80
+ end
81
+ end
82
+ end
83
+ end
84
+ end
85
+ end
86
+ cl.add_iq_callback do |iq|
87
+ if iq.type == :result and iq.query.class == Version::IqQueryVersion
88
+ activity = true
89
+ r = [ iq.from.to_s, iq.query.iname, iq.query.version, iq.query.os ]
90
+ puts r.inspect
91
+ end
92
+ end
93
+ cl.send(Presence.new)
94
+ for d in domains do
95
+ cl.send(Iq.new_browseget.set_to("#{d}/admin"))
96
+ end
97
+ for d in domains_ejabberd do
98
+ iq = Iq.new(:get, d)
99
+ iq.add(Discovery::IqQueryDiscoItems.new).node = 'online users'
100
+ cl.send(iq)
101
+ end
102
+
103
+ activity = true
104
+ while activity
105
+ activity = false
106
+ # other threads might set activity to true
107
+ sleep 10
108
+ end
109
+ cl.close
@@ -0,0 +1,146 @@
1
+ #!/usr/bin/env ruby
2
+ # =XMPP4R - XMPP Library for Ruby
3
+ # License:: Ruby's license (see the LICENSE file) or GNU GPL, at your option.
4
+ # Website::http://home.gna.org/xmpp4r/
5
+
6
+
7
+ # This is PING for Jabber
8
+ #
9
+ # Please customize your ~/.xmppingrc
10
+
11
+
12
+ require 'xmpp4r'
13
+ require 'xmpp4r/httpbinding'
14
+ require 'xmpp4r/version/iq/version'
15
+ require 'xmpp4r/discovery/iq/discoinfo'
16
+ require 'optparse'
17
+ require 'yaml'
18
+ require 'thread'
19
+
20
+
21
+ ##
22
+ # Options
23
+ ##
24
+
25
+ interval = 5
26
+ jid = nil
27
+ conf_filename = "#{ENV['HOME']}/.xmppingrc"
28
+ accountname = 'default'
29
+
30
+ OptionParser.new { |opts|
31
+ opts.banner = 'Usage: xmpping.rb [-d] [-a ACCOUNT] [-c FILENAME] [-i SECONDS] -t <JID>'
32
+ opts.separator 'Ping a destination JID with various <iq/> stanzas'
33
+ opts.on('-t', '--to JID', 'Destionation Jabber-ID') { |j| jid = Jabber::JID.new(j) }
34
+ opts.on('-a', '--account ACCOUNT', 'Account tag to use (default: default)') { |a| accountname = a }
35
+ opts.on('-c', '--config FILENAME', 'Configuration file (default: ~/.xmppingrc)') { |c| conf_filename = c }
36
+ opts.on('-i', '--interval SECONDS', 'Wait SECONDS between each stanza (default: 5)') { |sec| interval = sec.to_i }
37
+ opts.on('-d', '--debug', 'Enable XMPP4R debugging (print stanzas)') { Jabber::debug = true }
38
+ opts.on_tail('-h', '--help', 'Show help') {
39
+ puts opts
40
+ exit
41
+ }
42
+ opts.parse!(ARGV)
43
+
44
+ unless jid
45
+ puts opts
46
+ exit
47
+ end
48
+ }
49
+
50
+
51
+ ##
52
+ # Configuration
53
+ ##
54
+
55
+ begin
56
+ conf_file = File.new(conf_filename)
57
+ rescue Exception => e
58
+ puts "Unable to open config file: #{e.to_s}"
59
+ exit
60
+ end
61
+
62
+ conf = YAML::load(conf_file)
63
+ unless conf
64
+ puts "#{conf_filename} is no valid YAML document"
65
+ exit
66
+ end
67
+ account = conf[accountname]
68
+ unless account
69
+ puts "Account #{accountname} not found in #{conf_filename}"
70
+ exit
71
+ end
72
+
73
+ ##
74
+ # Connection
75
+ ##
76
+
77
+ if account['http bind']
78
+ cl = Jabber::HTTPBinding::Client.new(Jabber::JID.new(account['jid']))
79
+ cl.connect(account['http bind'])
80
+ else
81
+ cl = Jabber::Client.new(Jabber::JID.new(account['jid']))
82
+ cl.connect(account['host'], (account['port'] ? account['port'].to_i : 5222))
83
+ end
84
+ cl.auth(account['password'])
85
+
86
+ ##
87
+ # Reply printer
88
+ ##
89
+
90
+ def print_reply(iq, roundtrip)
91
+ roundtrip_s = ((roundtrip * 100).round / 100.0).to_s + " sec"
92
+ output = "Received a #{iq.query.namespace} #{iq.type} (id: #{iq.id}) from #{iq.from} (#{roundtrip_s}): "
93
+
94
+ if iq.query.kind_of?(Jabber::Version::IqQueryVersion)
95
+ output += "#{iq.query.iname}-#{iq.query.version} #{iq.query.os}"
96
+ elsif iq.query.namespace == 'jabber:iq:time'
97
+ output += "#{iq.query.first_element_text('display')} (#{iq.query.first_element_text('tz')})"
98
+ elsif iq.query.kind_of?(Jabber::Discovery::IqQueryDiscoInfo)
99
+ identity = iq.query.identity
100
+ if identity
101
+ output += "#{identity.iname} (#{identity.category} #{identity.type})"
102
+ else
103
+ output += "<identity/> missing"
104
+ end
105
+ else
106
+ output += iq.query.to_s
107
+ end
108
+
109
+ puts output
110
+ end
111
+
112
+ ##
113
+ # Main loop
114
+ ##
115
+
116
+ require 'mprofiler'
117
+ MemoryProfiler.start(:string_debug=>true)
118
+
119
+ puts "XMPPING #{cl.jid} -> #{jid}"
120
+ query_methods = ['jabber:iq:version', 'jabber:iq:time', 'http://jabber.org/protocol/disco#info']
121
+ query_method = 0
122
+
123
+ loop {
124
+ Thread.new {
125
+ iq = Jabber::Iq.new_query(:get, jid)
126
+ iq.query.add_namespace(query_methods[query_method])
127
+
128
+ time1 = Time.new
129
+
130
+ begin
131
+ cl.send_with_id(iq) { |reply|
132
+ print_reply(reply, Time.new - time1)
133
+ true
134
+ }
135
+ rescue Jabber::ServerError => e
136
+ puts "Error for #{iq.query.namespace} to #{iq.to}: #{e.error.to_s.inspect}"
137
+ end
138
+ }
139
+
140
+ query_method += 1
141
+ if query_method >= query_methods.size
142
+ query_method = 0
143
+ end
144
+
145
+ sleep(interval)
146
+ }
@@ -0,0 +1,14 @@
1
+ default:
2
+ jid: user@host/xmpping
3
+ password: secret
4
+
5
+ other_account:
6
+ jid: me@domain/ping
7
+ password: xxx
8
+ host: 127.0.0.1
9
+ port: 65222
10
+
11
+ web_account:
12
+ jid: me@domain/ping
13
+ password: xxx
14
+ http bind: http://domain/http-bind/
@@ -0,0 +1,41 @@
1
+ #!/usr/bin/ruby
2
+ #
3
+ # A tool to change the password of a Jabber account
4
+ #
5
+
6
+
7
+ $:.unshift('../../../../../lib')
8
+
9
+ require 'xmpp4r'
10
+ include Jabber
11
+
12
+ def with_status(str, &block)
13
+ print "#{str}..."
14
+ $stdout.flush
15
+ begin
16
+ yield
17
+ puts " Ok"
18
+ rescue Exception => e
19
+ puts " Exception: #{e.to_s}"
20
+ raise e
21
+ end
22
+ end
23
+
24
+
25
+ # settings
26
+ if ARGV.length != 3
27
+ puts "Run with ./change_password.rb user@server/resource oldpassword newpassword"
28
+ exit 1
29
+ end
30
+ my_jid = JID.new(ARGV[0])
31
+ my_jid.resource = 'change_password' if my_jid.resource.nil?
32
+ old_password = ARGV[1]
33
+ new_password = ARGV[2]
34
+
35
+ cl = Client.new(my_jid)
36
+
37
+ with_status('Connecting') { cl.connect }
38
+ with_status('Authenticating') { cl.auth(old_password) }
39
+ with_status('Changing password') { cl.password = new_password }
40
+
41
+ cl.close
@@ -0,0 +1,70 @@
1
+ #!/usr/bin/ruby
2
+
3
+ # Basic console client that does nothing, but easy to modify to test things.
4
+ # to test, start, then type :
5
+ # connect login@server/resource password
6
+ # auth
7
+
8
+ $:.unshift '../../../../../lib'
9
+
10
+ require 'xmpp4r/client'
11
+ include Jabber
12
+
13
+ Jabber::debug = true
14
+
15
+ class BasicClient
16
+ def initialize
17
+ puts "Welcome to this Basic Console Jabber Client!"
18
+ quit = false
19
+ # main loop
20
+ while not quit do
21
+ print "> "
22
+ $defout.flush
23
+ line = gets
24
+ quit = true if line.nil?
25
+ if not quit
26
+ command, args = line.split(' ', 2)
27
+ args = args.to_s.chomp
28
+ # main case
29
+ case command
30
+ when 'exit'
31
+ quit = true
32
+ when 'connect'
33
+ do_connect(args)
34
+ when 'help'
35
+ do_help
36
+ when 'auth'
37
+ do_auth
38
+ else
39
+ puts "Command \"#{command}\" unknown"
40
+ end
41
+ end
42
+ end
43
+ puts "Goodbye!"
44
+ end
45
+
46
+ def do_help
47
+ puts <<-EOF
48
+ # exit - exits
49
+ # connect user@server/resource password - connects
50
+ # auth - sends authentification
51
+ EOF
52
+ end
53
+
54
+ ##
55
+ # connect <jid> <password>
56
+ def do_connect(args)
57
+ @jid, @password = args.split(' ', 2)
58
+ @jid = JID.new(@jid)
59
+ @cl = Client.new(@jid)
60
+ @cl.connect
61
+ end
62
+
63
+ ##
64
+ # auth
65
+ def do_auth
66
+ @cl.auth(@password, false)
67
+ end
68
+ end
69
+
70
+ BasicClient.new
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/ruby
2
+
3
+ $:.unshift '../../../../../lib'
4
+
5
+ require 'xmpp4r'
6
+ include Jabber
7
+
8
+ c = Component.new('tada', 'localhost', 60001)
9
+ c.connect
10
+ c.auth('jabber-rocks')
11
+ Thread.stop