Class: Jabber::Bytestreams::IBBTarget

Inherits:
IBB show all
Defined in:
lib/gems/xmpp4r-0.4/lib/xmpp4r/bytestreams/helper/ibb/target.rb

Overview

Implementation of IBB at the target side

Constant Summary

Constants inherited from IBB

Jabber::Bytestreams::IBB::NS_IBB

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods inherited from IBB

#active?, #close, #flush, #read, #write

Constructor Details

#initialize(stream, session_id, initiator_jid, target_jid) ⇒ IBBTarget

Returns a new instance of IBBTarget.



13
14
15
16
# File 'lib/gems/xmpp4r-0.4/lib/xmpp4r/bytestreams/helper/ibb/target.rb', line 13

def initialize(stream, session_id, initiator_jid, target_jid)
  # Target and Initiator are swapped here, because we're the target
  super(stream, session_id, target_jid, initiator_jid)
end

Instance Attribute Details

#block_sizeObject (readonly)

You may read the block-size after accept



11
12
13
# File 'lib/gems/xmpp4r-0.4/lib/xmpp4r/bytestreams/helper/ibb/target.rb', line 11

def block_size
  @block_size
end

Instance Method Details

#acceptObject

Wait for the initiator side to start the stream.



21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/gems/xmpp4r-0.4/lib/xmpp4r/bytestreams/helper/ibb/target.rb', line 21

def accept
  connect_sem = Semaphore.new

  @stream.add_iq_callback(200, self) { |iq|
    open = iq.first_element('open')
    if iq.type == :set and iq.from == @peer_jid and iq.to == @my_jid and open and open.attributes['sid'] == @session_id
      @stream.delete_iq_callback(self)
      activate
      @block_size = (open.attributes['block-size'] || 4096).to_i

      reply = iq.answer(false)
      reply.type = :result
      @stream.send(reply)

      connect_sem.run
      true
    else
      false
    end
  }

  connect_sem.wait
  true
end