Class | Jabber::Bytestreams::SOCKS5BytestreamsTarget |
In: |
lib/xmpp4r/bytestreams/helper/socks5bytestreams/target.rb
|
Parent: | SOCKS5Bytestreams |
SOCKS5 Bytestreams implementation of the target site
Wait until the stream has been established
May raise various exceptions
# File lib/xmpp4r/bytestreams/helper/socks5bytestreams/target.rb, line 10 10: def accept 11: error = nil 12: connect_lock = Mutex.new 13: connect_lock.lock 14: 15: @stream.add_iq_callback(200, self) { |iq| 16: if iq.type == :set and iq.from == @initiator_jid and iq.to == @target_jid and iq.query.kind_of?(IqQueryBytestreams) 17: begin 18: @stream.delete_iq_callback(self) 19: 20: iq.query.each_element('streamhost') { |streamhost| 21: if streamhost.host and streamhost.port and not @socks 22: begin 23: @socks = connect_socks(streamhost) 24: @streamhost_used = streamhost 25: rescue Exception => e 26: Jabber::debuglog("SOCKS5 Bytestreams: #{e.class}: #{e}\n#{e.backtrace.join("\n")}") 27: @streamhost_cbs.process(streamhost, :failure, e) 28: end 29: end 30: } 31: 32: reply = iq.answer(false) 33: if @streamhost_used 34: reply.type = :result 35: reply.add(IqQueryBytestreams.new) 36: reply.query.add(StreamHostUsed.new(@streamhost_used.jid)) 37: else 38: reply.type = :error 39: reply.add(Error.new('item-not-found')) 40: end 41: @stream.send(reply) 42: rescue Exception => e 43: error = e 44: end 45: 46: connect_lock.unlock 47: true 48: else 49: false 50: end 51: } 52: 53: connect_lock.lock 54: connect_lock.unlock 55: raise error if error 56: (@socks != nil) 57: end