xmpp4r 0.5 → 0.5.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 +21 -0
- data/README.rdoc +29 -38
- data/Rakefile +11 -18
- data/data/doc/xmpp4r/examples/advanced/recvfile.rb +5 -4
- data/lib/xmpp4r/bytestreams/helper/filetransfer.rb +2 -0
- data/lib/xmpp4r/bytestreams/helper/socks5bytestreams/base.rb +1 -0
- data/lib/xmpp4r/bytestreams/helper/socks5bytestreams/initiator.rb +1 -1
- data/lib/xmpp4r/bytestreams/helper/socks5bytestreams/target.rb +4 -1
- data/lib/xmpp4r/caps/helper/generator.rb +2 -2
- data/lib/xmpp4r/client.rb +18 -4
- data/lib/xmpp4r/connection.rb +8 -5
- data/lib/xmpp4r/delay/x/delay.rb +1 -1
- data/lib/xmpp4r/entity_time.rb +6 -0
- data/lib/xmpp4r/entity_time/iq.rb +45 -0
- data/lib/xmpp4r/entity_time/responder.rb +57 -0
- data/lib/xmpp4r/httpbinding/client.rb +178 -44
- data/lib/xmpp4r/message.rb +46 -0
- data/lib/xmpp4r/muc/helper/mucclient.rb +8 -1
- data/lib/xmpp4r/observable.rb +9 -0
- data/lib/xmpp4r/observable/contact.rb +61 -0
- data/lib/xmpp4r/observable/helper.rb +389 -0
- data/lib/xmpp4r/observable/observable_thing.rb +191 -0
- data/lib/xmpp4r/observable/pubsub.rb +211 -0
- data/lib/xmpp4r/observable/subscription.rb +57 -0
- data/lib/xmpp4r/observable/thread_store.rb +65 -0
- data/lib/xmpp4r/pubsub/children/unsubscribe.rb +16 -1
- data/lib/xmpp4r/pubsub/helper/servicehelper.rb +48 -14
- data/lib/xmpp4r/rexmladdons.rb +46 -6
- data/lib/xmpp4r/roster/helper/roster.rb +19 -9
- data/lib/xmpp4r/sasl.rb +1 -1
- data/lib/xmpp4r/stream.rb +2 -2
- data/lib/xmpp4r/xmpp4r.rb +1 -1
- data/test/bytestreams/tc_socks5bytestreams.rb +2 -2
- data/test/entity_time/tc_responder.rb +65 -0
- data/test/roster/tc_helper.rb +2 -3
- data/test/tc_message.rb +52 -1
- data/test/tc_stream.rb +2 -2
- data/test/tc_streamComponent.rb +11 -1
- data/test/ts_xmpp4r.rb +11 -2
- data/xmpp4r.gemspec +20 -9
- metadata +41 -35
data/CHANGELOG
CHANGED
@@ -1,3 +1,24 @@
|
|
1
|
+
mad-p-xmpp4r 0.6.3 (02/03/2013)
|
2
|
+
===============================
|
3
|
+
* Removed unnecessary dependency on pry.
|
4
|
+
|
5
|
+
mad-p-xmpp4r 0.6.2 (26/02/2013)
|
6
|
+
===============================
|
7
|
+
* Merge pull request #1 from Strech/patch-1
|
8
|
+
* Non-bosh connection flushes correctly
|
9
|
+
* Elaborated debug messages in HTTPBinding::Client
|
10
|
+
|
11
|
+
mad-p-xmpp4r 0.6.1 (21/02/2013)
|
12
|
+
===============================
|
13
|
+
* Modified to work with BOSH with HTTPBinding::Client
|
14
|
+
- Support stream restart with urn:xmpp:xbosh way.
|
15
|
+
- Removed unnecessary wait until authenticated.
|
16
|
+
- Added Semaphore to wait for auth and bind response.
|
17
|
+
- Hook to setup SSL flags (certificate, etc.)
|
18
|
+
- Adjusted HTTP::Net read_timeout according to http_wait.
|
19
|
+
- Proxy handling.
|
20
|
+
- Respect poll/request BOSH parameters to avoid overactivity.
|
21
|
+
|
1
22
|
XMPP4R 0.5 (15/06/2009)
|
2
23
|
=======================
|
3
24
|
* Many bugs fixed and tests cleanups (better Ruby 1.9 support, in
|
data/README.rdoc
CHANGED
@@ -1,20 +1,22 @@
|
|
1
1
|
= XMPP4R
|
2
2
|
|
3
|
+
A XMPP/Jabber library for ruby
|
4
|
+
|
5
|
+
|
3
6
|
== Project Home
|
4
7
|
|
5
8
|
You can find info about the xmpp4r project and how to contribute
|
6
9
|
at the project home page:
|
7
10
|
|
8
|
-
http://
|
11
|
+
http://xmpp4r.github.io
|
9
12
|
|
10
13
|
If you need to ask questions, or want feedback on proposed changes
|
11
|
-
please feel free to ask them on the
|
12
|
-
list. You can join or view archives of the mailing list at:
|
14
|
+
please feel free to ask them on the github issues tracker.
|
13
15
|
|
14
|
-
https://
|
16
|
+
https://github.com/xmpp4r/xmpp4r/issues
|
15
17
|
|
16
18
|
If you are having a problem and would like to report it
|
17
|
-
|
19
|
+
please include a protocol dump
|
18
20
|
which can be enabled in your code with:
|
19
21
|
|
20
22
|
Jabber::debug = true
|
@@ -22,24 +24,14 @@ which can be enabled in your code with:
|
|
22
24
|
|
23
25
|
== Contributors
|
24
26
|
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
Vojtech Vobr
|
34
|
-
Andreas Wiese
|
35
|
-
Chris Zelenak
|
36
|
-
Matthew Wood
|
37
|
-
Sam Ruby
|
38
|
-
Tim Carey-Smith
|
39
|
-
Scott Lillibridge
|
40
|
-
Joshua Sierles
|
41
|
-
Ripta Pasay <github@r8y.org>
|
42
|
-
Seth Fitzsimmons
|
27
|
+
=== Present Maintainers
|
28
|
+
|
29
|
+
Harisankar P S (hsps@rubykitchen.org)
|
30
|
+
Manu S Ajith (manu@rubykitchen.org)
|
31
|
+
|
32
|
+
=== List of Contributors
|
33
|
+
|
34
|
+
http://github.com/xmpp4r/xmpp4r/contributors
|
43
35
|
|
44
36
|
|
45
37
|
== Source Code
|
@@ -47,7 +39,7 @@ which can be enabled in your code with:
|
|
47
39
|
The source for xmpp4r is managed using the Git SCM and can be
|
48
40
|
found in our GitHub.com project page:
|
49
41
|
|
50
|
-
http://github.com/
|
42
|
+
http://github.com/xmpp4r/xmpp4r/tree/master
|
51
43
|
|
52
44
|
|
53
45
|
== Installation
|
@@ -57,17 +49,10 @@ on your needs and the methods you prefer.
|
|
57
49
|
|
58
50
|
=== Install over the network using RubyGems
|
59
51
|
|
60
|
-
You can install the current release of the xmpp4r library
|
61
|
-
release gem on RubyForge using RubyGems:
|
52
|
+
You can install the current release of the xmpp4r library via rubygems:
|
62
53
|
|
63
54
|
sudo gem install xmpp4r
|
64
55
|
|
65
|
-
=== Install over the network using a Debian package
|
66
|
-
|
67
|
-
You can install the current release of the xmpp4r library from a stable release copy
|
68
|
-
on your .deb friendly linux system (e.g. Debian or Ubuntu) using apt:
|
69
|
-
|
70
|
-
sudo apt-get install libxmpp4r-ruby
|
71
56
|
|
72
57
|
=== Install from local source code (Developers Only)
|
73
58
|
|
@@ -77,15 +62,11 @@ need to get a local copy.
|
|
77
62
|
|
78
63
|
Clone the Git repository (recommended):
|
79
64
|
|
80
|
-
git clone git://github.com/
|
81
|
-
|
82
|
-
OR download a stable release tarball from:
|
83
|
-
|
84
|
-
http://download.gna.org/xmpp4r/xmpp4r-0.3.2.tgz
|
65
|
+
git clone git://github.com/xmpp4r/xmpp4r.git
|
85
66
|
|
86
67
|
OR download a snapshot of the latest source in .tar.gz format from:
|
87
68
|
|
88
|
-
http://github.com/
|
69
|
+
http://github.com/xmpp4r/xmpp4r/tarball/master
|
89
70
|
|
90
71
|
==== Install : Using Rake
|
91
72
|
|
@@ -105,9 +86,19 @@ require RubyGems to be installed.
|
|
105
86
|
./setup.rb
|
106
87
|
|
107
88
|
|
89
|
+
== Contributing
|
90
|
+
|
91
|
+
1. Fork it
|
92
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
93
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
94
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
95
|
+
5. Create new Pull Request
|
96
|
+
|
108
97
|
== License
|
109
98
|
|
110
99
|
XMPP4R is released under the Ruby license (see the LICENSE file), which is
|
111
100
|
compatible with the GNU GPL (see the COPYING file) via an explicit
|
112
101
|
dual-licensing clause.
|
113
102
|
|
103
|
+
|
104
|
+
|
data/Rakefile
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'rake'
|
2
2
|
require "rake/clean"
|
3
3
|
require 'rake/testtask'
|
4
|
-
require '
|
4
|
+
require 'rdoc/task'
|
5
5
|
|
6
6
|
$:.unshift 'lib'
|
7
7
|
require "xmpp4r"
|
@@ -12,16 +12,16 @@ require "xmpp4r"
|
|
12
12
|
|
13
13
|
PKG_NAME = 'xmpp4r'
|
14
14
|
PKG_VERSION = Jabber::XMPP4R_VERSION
|
15
|
-
AUTHORS = ['Lucas Nussbaum', 'Stephan Maka', 'Glenn Rempe']
|
16
|
-
EMAIL = "
|
17
|
-
HOMEPAGE = "
|
18
|
-
SUMMARY = "
|
15
|
+
AUTHORS = ['Lucas Nussbaum', 'Stephan Maka', 'Glenn Rempe', 'Kaoru Maeda', 'Harisankar P S']
|
16
|
+
EMAIL = "mailme@hsps.in"
|
17
|
+
HOMEPAGE = "https://xmpp4r.github.io"
|
18
|
+
SUMMARY = "XMPP/Jabber library for ruby"
|
19
19
|
|
20
20
|
# These are the common rdoc options that are shared between generation of
|
21
21
|
# rdoc files using BOTH 'rake rdoc' and the installation by users of a
|
22
22
|
# RubyGem version which builds rdoc's along with its installation. Any
|
23
23
|
# rdoc options that are ONLY for developers running 'rake rdoc' should be
|
24
|
-
# added in the '
|
24
|
+
# added in the 'RDoc::Task' block below.
|
25
25
|
RDOC_OPTIONS = [
|
26
26
|
"--quiet",
|
27
27
|
"--title", SUMMARY,
|
@@ -61,7 +61,7 @@ end
|
|
61
61
|
|
62
62
|
# RDOC
|
63
63
|
#######
|
64
|
-
|
64
|
+
RDoc::Task.new do |rd|
|
65
65
|
|
66
66
|
# which dir should rdoc files be installed in?
|
67
67
|
rd.rdoc_dir = 'rdoc'
|
@@ -108,13 +108,6 @@ task :gen_requires_graph do
|
|
108
108
|
sh %{cd tools; ./gen_requires.bash}
|
109
109
|
end
|
110
110
|
|
111
|
-
# UPDATE WEBSITE (for Lucas only)
|
112
|
-
#################################
|
113
|
-
desc "Update website (for Lucas only)"
|
114
|
-
task :update_website do
|
115
|
-
sh %{cp website/* ~/dev/xmpp4r/website/ && cd ~/dev/xmpp4r/website/ && svn commit -m "website update"}
|
116
|
-
end
|
117
|
-
|
118
111
|
|
119
112
|
##############################################################################
|
120
113
|
# SYNTAX CHECKING
|
@@ -134,7 +127,7 @@ end
|
|
134
127
|
CLEAN.include ["*.gem", "pkg", "rdoc", "coverage", "tools/*.png"]
|
135
128
|
|
136
129
|
begin
|
137
|
-
require '
|
130
|
+
require 'rubygems/package_task'
|
138
131
|
|
139
132
|
spec = Gem::Specification.new do |s|
|
140
133
|
s.name = PKG_NAME
|
@@ -156,7 +149,7 @@ begin
|
|
156
149
|
s.required_ruby_version = ">= 1.8.4"
|
157
150
|
end
|
158
151
|
|
159
|
-
|
152
|
+
Gem::PackageTask.new(spec) do |pkg|
|
160
153
|
pkg.gem_spec = spec
|
161
154
|
pkg.need_tar = true
|
162
155
|
pkg.need_zip = true
|
@@ -182,14 +175,14 @@ begin
|
|
182
175
|
# Thanks to the Merb project for this code.
|
183
176
|
desc "Update Github Gemspec"
|
184
177
|
task :update_gemspec do
|
185
|
-
skip_fields = %w(new_platform original_platform date)
|
178
|
+
skip_fields = %w(new_platform original_platform date cache_dir cache_file loaded)
|
186
179
|
|
187
180
|
result = "# WARNING : RAKE AUTO-GENERATED FILE. DO NOT MANUALLY EDIT!\n"
|
188
181
|
result << "# RUN : 'rake gem:update_gemspec'\n\n"
|
189
182
|
result << "Gem::Specification.new do |s|\n"
|
190
183
|
spec.instance_variables.sort.each do |ivar|
|
191
184
|
value = spec.instance_variable_get(ivar)
|
192
|
-
name = ivar.split("@").last
|
185
|
+
name = ivar.to_s.split("@").last
|
193
186
|
next if skip_fields.include?(name) || value.nil? || value == "" || (value.respond_to?(:empty?) && value.empty?)
|
194
187
|
if name == "dependencies"
|
195
188
|
value.each do |d|
|
@@ -1,8 +1,9 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
3
|
require 'xmpp4r'
|
4
|
-
require 'xmpp4r/
|
4
|
+
require 'xmpp4r/bytestreams/helper/filetransfer'
|
5
5
|
|
6
|
+
Jabber::debug = true
|
6
7
|
|
7
8
|
if ARGV.size != 3
|
8
9
|
puts "Usage: #{$0} <jid> <password> <incoming-directory>"
|
@@ -18,7 +19,7 @@ cl.connect
|
|
18
19
|
puts "Authenticating..."
|
19
20
|
cl.auth ARGV[1]
|
20
21
|
|
21
|
-
ft = Jabber::
|
22
|
+
ft = Jabber::FileTransfer::Helper.new(cl)
|
22
23
|
ft.add_incoming_callback { |iq,file|
|
23
24
|
puts "Incoming file transfer from #{iq.from}: #{file.fname} (#{file.size / 1024} KB)"
|
24
25
|
|
@@ -40,7 +41,7 @@ ft.add_incoming_callback { |iq,file|
|
|
40
41
|
begin
|
41
42
|
puts "Accepting #{file.fname}"
|
42
43
|
stream = ft.accept(iq, offset)
|
43
|
-
if stream.kind_of?(Jabber::
|
44
|
+
if stream.kind_of?(Jabber::Bytestreams::SOCKS5Bytestreams)
|
44
45
|
stream.connect_timeout = 5
|
45
46
|
stream.add_streamhost_callback { |streamhost,state,e|
|
46
47
|
case state
|
@@ -58,7 +59,7 @@ ft.add_incoming_callback { |iq,file|
|
|
58
59
|
if stream.accept
|
59
60
|
puts "Stream established"
|
60
61
|
outfile = File.new(filename, (offset ? 'a' : 'w'))
|
61
|
-
while buf = stream.read
|
62
|
+
while buf = stream.read(65536)
|
62
63
|
outfile.write(buf)
|
63
64
|
print '.'
|
64
65
|
$stdout.flush
|
@@ -4,9 +4,11 @@
|
|
4
4
|
|
5
5
|
require 'xmpp4r/callbacks'
|
6
6
|
require 'xmpp4r/bytestreams/iq/si'
|
7
|
+
require 'xmpp4r/bytestreams/iq/bytestreams'
|
7
8
|
require 'xmpp4r/dataforms/x/data'
|
8
9
|
require 'xmpp4r/bytestreams/helper/ibb/base'
|
9
10
|
require 'xmpp4r/bytestreams/helper/socks5bytestreams/base'
|
11
|
+
require 'xmpp4r/bytestreams/helper/socks5bytestreams/target'
|
10
12
|
|
11
13
|
module Jabber
|
12
14
|
module FileTransfer
|
@@ -31,7 +31,7 @@ module Jabber
|
|
31
31
|
elsif streamhost.kind_of?(String) or streamhost.kind_of?(JID)
|
32
32
|
@streamhosts << SOCKS5Bytestreams::query_streamhost(@stream, streamhost, @initiator_jid)
|
33
33
|
else
|
34
|
-
raise "
|
34
|
+
raise "Unknown streamhost type: #{streamhost.class}"
|
35
35
|
end
|
36
36
|
end
|
37
37
|
|
@@ -26,10 +26,12 @@ module Jabber
|
|
26
26
|
def accept
|
27
27
|
error = nil
|
28
28
|
connect_sem = Semaphore.new
|
29
|
+
iq_received_sem = Semaphore.new
|
29
30
|
|
30
31
|
@stream.add_iq_callback(200, self) { |iq|
|
31
32
|
if iq.type == :set and iq.from == @initiator_jid and iq.to == @target_jid and iq.query.kind_of?(IqQueryBytestreams)
|
32
33
|
begin
|
34
|
+
iq_received_sem.run
|
33
35
|
@stream.delete_iq_callback(self)
|
34
36
|
|
35
37
|
iq.query.each_element('streamhost') { |streamhost|
|
@@ -66,7 +68,8 @@ module Jabber
|
|
66
68
|
}
|
67
69
|
@accept_ready.run
|
68
70
|
begin
|
69
|
-
Timeout::timeout(@connect_timeout) {
|
71
|
+
Timeout::timeout(@connect_timeout) { iq_received_sem.wait }
|
72
|
+
connect_sem.wait
|
70
73
|
rescue Timeout::Error
|
71
74
|
@stream.delete_iq_callback(self)
|
72
75
|
end
|
@@ -43,7 +43,7 @@ module Jabber
|
|
43
43
|
identity.send(field).to_s
|
44
44
|
end.join('/') + '<'
|
45
45
|
end.join
|
46
|
-
|
46
|
+
|
47
47
|
# 4. Sort the supported service discovery features. [15]
|
48
48
|
features.sort! do |feature1,feature2|
|
49
49
|
feature1.var <=> feature2.var
|
@@ -71,7 +71,7 @@ module Jabber
|
|
71
71
|
# 7.1. Append the XML character data of the FORM_TYPE field's
|
72
72
|
# <value/> element, followed by the '<' character.
|
73
73
|
fform_type = form.field('FORM_TYPE')
|
74
|
-
form_type = fform_type ? fform_type.
|
74
|
+
form_type = fform_type ? fform_type.first_element_text('value') : nil
|
75
75
|
s += "#{form_type}<"
|
76
76
|
|
77
77
|
# 7.2. Sort the fields by the value of the "var" attribute.
|
data/lib/xmpp4r/client.rb
CHANGED
@@ -27,6 +27,7 @@ module Jabber
|
|
27
27
|
def initialize(jid)
|
28
28
|
super()
|
29
29
|
@jid = (jid.kind_of?(JID) ? jid : JID.new(jid.to_s))
|
30
|
+
@authenticated = false
|
30
31
|
end
|
31
32
|
|
32
33
|
##
|
@@ -113,6 +114,7 @@ module Jabber
|
|
113
114
|
else
|
114
115
|
auth_nonsasl(password)
|
115
116
|
end
|
117
|
+
@authenticated = true
|
116
118
|
rescue
|
117
119
|
Jabber::debuglog("#{$!.class}: #{$!}\n#{$!.backtrace.join("\n")}")
|
118
120
|
raise ClientAuthenticationFailure.new, $!.to_s
|
@@ -133,6 +135,7 @@ module Jabber
|
|
133
135
|
end
|
134
136
|
|
135
137
|
jid = nil
|
138
|
+
semaphore = Semaphore.new
|
136
139
|
send_with_id(iq) do |reply|
|
137
140
|
reply_bind = reply.first_element('bind')
|
138
141
|
if reply_bind
|
@@ -141,7 +144,9 @@ module Jabber
|
|
141
144
|
jid = JID.new(reported_jid.text)
|
142
145
|
end
|
143
146
|
end
|
147
|
+
semaphore.run
|
144
148
|
end
|
149
|
+
semaphore.wait
|
145
150
|
jid
|
146
151
|
end
|
147
152
|
|
@@ -171,13 +176,13 @@ module Jabber
|
|
171
176
|
sasl.auth(password)
|
172
177
|
|
173
178
|
# Restart stream after SASL auth
|
174
|
-
|
175
|
-
start
|
179
|
+
restart
|
176
180
|
# And wait for features - again
|
177
181
|
@features_sem.wait
|
178
182
|
|
179
183
|
# Resource binding (RFC3920 - 7)
|
180
184
|
if @stream_features.has_key? 'bind'
|
185
|
+
Jabber::debuglog("**********Handling bind")
|
181
186
|
@jid = bind(@jid.resource)
|
182
187
|
end
|
183
188
|
|
@@ -187,10 +192,19 @@ module Jabber
|
|
187
192
|
session = iq.add REXML::Element.new('session')
|
188
193
|
session.add_namespace @stream_features['session']
|
189
194
|
|
190
|
-
|
195
|
+
semaphore = Semaphore.new
|
196
|
+
send_with_id(iq) {
|
197
|
+
semaphore.run
|
198
|
+
}
|
199
|
+
semaphore.wait
|
191
200
|
end
|
192
201
|
end
|
193
202
|
|
203
|
+
def restart
|
204
|
+
stop
|
205
|
+
start
|
206
|
+
end
|
207
|
+
|
194
208
|
##
|
195
209
|
# See Client#auth_anonymous_sasl
|
196
210
|
def auth_anonymous
|
@@ -239,7 +253,7 @@ module Jabber
|
|
239
253
|
authset = Iq.new_authset(@jid, password)
|
240
254
|
end
|
241
255
|
send_with_id(authset)
|
242
|
-
|
256
|
+
$>.flush
|
243
257
|
|
244
258
|
true
|
245
259
|
end
|
data/lib/xmpp4r/connection.rb
CHANGED
@@ -19,8 +19,9 @@ module Jabber
|
|
19
19
|
# before proceeding
|
20
20
|
attr_accessor :features_timeout
|
21
21
|
|
22
|
-
# Keep-alive interval in seconds,
|
23
|
-
# (see private method keepalive_loop for
|
22
|
+
# Keep-alive interval in seconds, or nil to disable keepalive,
|
23
|
+
# defaults to 60 (see private method keepalive_loop for
|
24
|
+
# implementation details)
|
24
25
|
attr_accessor :keepalive_interval
|
25
26
|
|
26
27
|
# Allow TLS negotiation? Defaults to true
|
@@ -78,9 +79,11 @@ module Jabber
|
|
78
79
|
|
79
80
|
accept_features
|
80
81
|
|
81
|
-
@
|
82
|
-
Thread.
|
83
|
-
|
82
|
+
unless @keepalive_interval.nil?
|
83
|
+
@keepaliveThread = Thread.new do
|
84
|
+
Thread.current.abort_on_exception = true
|
85
|
+
keepalive_loop
|
86
|
+
end
|
84
87
|
end
|
85
88
|
end
|
86
89
|
|