Class Jabber::Bytestreams::SOCKS5BytestreamsTarget
In: lib/xmpp4r/bytestreams/helper/socks5bytestreams/target.rb
Parent: SOCKS5Bytestreams

SOCKS5 Bytestreams implementation of the target site

Methods

accept  

Public Instance methods

Wait until the stream has been established

May raise various exceptions

[Source]

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

[Validate]