mad-p-xmpp4r 0.6.0 → 0.6.1
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +11 -0
- data/Rakefile +2 -2
- data/lib/xmpp4r/httpbinding/client.rb +56 -33
- data/lib/xmpp4r/xmpp4r.rb +1 -1
- data/mad-p-xmpp4r.gemspec +2 -2
- metadata +3 -3
data/CHANGELOG
CHANGED
@@ -1,3 +1,14 @@
|
|
1
|
+
mad-p-xmpp4r 0.6.1 (21/02/2013)
|
2
|
+
===============================
|
3
|
+
* Modified to work with BOSH with HTTPBinding::Client
|
4
|
+
- Support stream restart with urn:xmpp:xbosh way.
|
5
|
+
- Removed unnecessary wait until authenticated.
|
6
|
+
- Added Semaphore to wait for auth and bind response.
|
7
|
+
- Hook to setup SSL flags (certificate, etc.)
|
8
|
+
- Adjusted HTTP::Net read_timeout according to http_wait.
|
9
|
+
- Proxy handling.
|
10
|
+
- Respect poll/request BOSH parameters to avoid overactivity.
|
11
|
+
|
1
12
|
XMPP4R 0.5 (15/06/2009)
|
2
13
|
=======================
|
3
14
|
* Many bugs fixed and tests cleanups (better Ruby 1.9 support, in
|
data/Rakefile
CHANGED
@@ -34,7 +34,7 @@ RDOC_OPTIONS = [
|
|
34
34
|
# Extra files outside of the lib dir that should be included with the rdocs.
|
35
35
|
RDOC_FILES = (%w( README.rdoc README_ruby19.txt CHANGELOG LICENSE COPYING )).sort
|
36
36
|
|
37
|
-
# The full file list used for rdocs, tarballs, gems, and for generating the
|
37
|
+
# The full file list used for rdocs, tarballs, gems, and for generating the xmpp4r.gemspec.
|
38
38
|
PKG_FILES = (%w( Rakefile setup.rb mad-p-xmpp4r.gemspec ) + RDOC_FILES + Dir["{lib,test,data,tools}/**/*"]).sort
|
39
39
|
|
40
40
|
##############################################################################
|
@@ -223,7 +223,7 @@ rescue LoadError
|
|
223
223
|
###
|
224
224
|
Packaging Warning : RubyGems is apparently not installed on this
|
225
225
|
system and any file add/remove/rename will not
|
226
|
-
be auto-updated in the '
|
226
|
+
be auto-updated in the 'xmpp4r.gemspec' when you run any
|
227
227
|
package tasks. All such file changes are recommended
|
228
228
|
to be packaged on a system with RubyGems installed
|
229
229
|
if you intend to push commits to the Git repo so the
|
@@ -125,7 +125,8 @@ module Jabber
|
|
125
125
|
@stream_features = {}
|
126
126
|
@http_rid = IdGenerator.generate_id.to_i
|
127
127
|
@pending_rid = @http_rid
|
128
|
-
@pending_rid_lock =
|
128
|
+
@pending_rid_lock = Mutex.new
|
129
|
+
@pending_rid_cv = [] # [ [rid, cv], [rid, cv], ... ]
|
129
130
|
|
130
131
|
req_body = REXML::Element.new('body')
|
131
132
|
req_body.attributes['rid'] = @http_rid
|
@@ -202,16 +203,30 @@ module Jabber
|
|
202
203
|
# Receive stanzas ensuring that the 'rid' order is kept
|
203
204
|
# result:: [REXML::Element]
|
204
205
|
def receive_elements_with_rid(rid, elements)
|
205
|
-
|
206
|
-
@
|
206
|
+
@pending_rid_lock.synchronize do
|
207
|
+
# Wait until rid == @pending_rid
|
208
|
+
if rid > @pending_rid
|
209
|
+
cv = ConditionVariable.new
|
210
|
+
@pending_rid_cv << [rid, cv]
|
211
|
+
@pending_rid_cv.sort!
|
212
|
+
while rid > @pending_rid
|
213
|
+
cv.wait(@pending_rid_lock)
|
214
|
+
end
|
215
|
+
end
|
207
216
|
end
|
208
|
-
@pending_rid = rid + 1
|
209
217
|
|
210
218
|
elements.each { |e|
|
211
219
|
receive(e)
|
212
220
|
}
|
213
221
|
|
214
|
-
|
222
|
+
# Signal waiting elements
|
223
|
+
@pending_rid_lock.synchronize do
|
224
|
+
@pending_rid = rid + 1 # Ensure @pending_rid is modified atomically
|
225
|
+
if @pending_rid_cv.size > 0 && @pending_rid_cv.first.first == @pending_rid
|
226
|
+
next_rid, cv = @pending_rid_cv.shift
|
227
|
+
cv.signal
|
228
|
+
end
|
229
|
+
end
|
215
230
|
end
|
216
231
|
|
217
232
|
##
|
@@ -278,6 +293,7 @@ module Jabber
|
|
278
293
|
# Do not send unneeded requests
|
279
294
|
if data.size < 1 and @pending_requests > 0 and !restart
|
280
295
|
@pending_requests += 1 # compensate for decrement in ensure clause
|
296
|
+
Jabber::debuglog "post_data: not sending excessive poll"
|
281
297
|
return
|
282
298
|
end
|
283
299
|
|
@@ -343,40 +359,47 @@ module Jabber
|
|
343
359
|
# Send data,
|
344
360
|
# buffered and obeying 'polling' and 'requests' limits
|
345
361
|
def send_data(data, restart = false)
|
346
|
-
|
347
|
-
Jabber::debuglog("send_data")
|
362
|
+
Jabber::debuglog("send_data")
|
348
363
|
|
349
|
-
|
350
|
-
|
351
|
-
|
352
|
-
|
353
|
-
|
354
|
-
|
355
|
-
|
356
|
-
# Can we send?
|
357
|
-
if !limited_by_polling and !limited_by_requests or !@authenticated
|
358
|
-
Jabber::debuglog("send_data non_limited")
|
359
|
-
data = @send_buffer
|
360
|
-
@send_buffer = ''
|
364
|
+
while true do # exit by return
|
365
|
+
@lock.synchronize do
|
366
|
+
if @last_send + 0.05 >= Time.now
|
367
|
+
Jabber::debuglog("send_data too fast: waiting 0.05sec")
|
368
|
+
next
|
369
|
+
end
|
361
370
|
|
362
|
-
|
363
|
-
|
364
|
-
|
365
|
-
|
371
|
+
@send_buffer += data
|
372
|
+
limited_by_polling = false
|
373
|
+
if @pending_requests + 1 == @http_requests && @send_buffer.size == 0
|
374
|
+
limited_by_polling = (@last_send + @http_polling >= Time.now)
|
366
375
|
end
|
376
|
+
limited_by_requests = (@pending_requests + 1 > @http_requests)
|
367
377
|
|
368
|
-
|
369
|
-
|
370
|
-
|
371
|
-
|
372
|
-
|
373
|
-
|
374
|
-
|
375
|
-
|
376
|
-
|
378
|
+
# Can we send?
|
379
|
+
if !limited_by_polling and !limited_by_requests or !@authenticated
|
380
|
+
Jabber::debuglog("send_data non_limited")
|
381
|
+
data = @send_buffer
|
382
|
+
@send_buffer = ''
|
383
|
+
|
384
|
+
Thread.new do
|
385
|
+
Thread.current.abort_on_exception = true
|
386
|
+
post_data(data, restart)
|
387
|
+
end
|
388
|
+
return
|
389
|
+
elsif limited_by_requests
|
390
|
+
Jabber::debuglog("send_data limited by requests")
|
391
|
+
# Do nothing.
|
392
|
+
# When a pending request gets an response, it calls send_data('')
|
393
|
+
return
|
394
|
+
elsif # limited_by_polling && @authenticated
|
395
|
+
# Wait until we get some data to send, or @http_polling expires
|
396
|
+
Jabber::debuglog("send_data limited by polling: #{@http_polling}")
|
397
|
+
else
|
398
|
+
Jabber::errorlog("send_data: can't happen: pending_requests=#{@pending_requests} http_requests=#{@http_requests} send_buffer.size=#{@send_buffer.size} limited_by_polling=#{limited_by_polling} limited_by_requests=#{limited_by_requests}")
|
399
|
+
return
|
377
400
|
end
|
378
401
|
end
|
379
|
-
|
402
|
+
sleep(0.1)
|
380
403
|
end
|
381
404
|
end
|
382
405
|
end
|
data/lib/xmpp4r/xmpp4r.rb
CHANGED
@@ -8,7 +8,7 @@ module Jabber
|
|
8
8
|
# XMPP4R Version number. This is the ONLY place where the version number
|
9
9
|
# should be specified. This constant is used to determine the version of
|
10
10
|
# package tarballs and generated gems.
|
11
|
-
XMPP4R_VERSION = '0.6.
|
11
|
+
XMPP4R_VERSION = '0.6.1'
|
12
12
|
end
|
13
13
|
|
14
14
|
require 'xmpp4r/client'
|
data/mad-p-xmpp4r.gemspec
CHANGED
@@ -242,8 +242,8 @@ Gem::Specification.new do |s|
|
|
242
242
|
s.required_ruby_version = ">= 1.8.4"
|
243
243
|
s.required_rubygems_version = ">= 0"
|
244
244
|
s.rubyforge_project = "mad-p-xmpp4r"
|
245
|
-
s.rubygems_version = "1.8.
|
245
|
+
s.rubygems_version = "1.8.24"
|
246
246
|
s.specification_version = 3
|
247
247
|
s.summary = "This is a fork from XMPP4R (https://github.com/ln/xmpp4r), fixing BOSH"
|
248
|
-
s.version = "0.6.
|
248
|
+
s.version = "0.6.1"
|
249
249
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mad-p-xmpp4r
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.6.
|
4
|
+
version: 0.6.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -12,7 +12,7 @@ authors:
|
|
12
12
|
autorequire:
|
13
13
|
bindir: bin
|
14
14
|
cert_chain: []
|
15
|
-
date:
|
15
|
+
date: 2013-02-21 00:00:00.000000000 Z
|
16
16
|
dependencies: []
|
17
17
|
description: This is a fork from XMPP4R (https://github.com/ln/xmpp4r), fixing BOSH
|
18
18
|
email: kaoru.maeda@gmail.com
|
@@ -279,7 +279,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
279
279
|
version: '0'
|
280
280
|
requirements: []
|
281
281
|
rubyforge_project: mad-p-xmpp4r
|
282
|
-
rubygems_version: 1.8.
|
282
|
+
rubygems_version: 1.8.24
|
283
283
|
signing_key:
|
284
284
|
specification_version: 3
|
285
285
|
summary: This is a fork from XMPP4R (https://github.com/ln/xmpp4r), fixing BOSH
|