Class: Blather::Stream::Component

Inherits:
Blather::Stream
  • Object
show all
Defined in:
lib/blather/stream/component.rb

Constant Summary collapse

NAMESPACE =
'jabber:component:accept'

Constants inherited from Blather::Stream

STREAM_NS

Instance Attribute Summary

Attributes inherited from Blather::Stream

#jid, #password

Instance Method Summary collapse

Methods inherited from Blather::Stream

connect, #connection_completed, #initialize, #post_init, #receive_data, #ssl_verify_peer, start, #unbind

Constructor Details

This class inherits a constructor from Blather::Stream

Instance Method Details

#receive(node) ⇒ Object

:nodoc:



8
9
10
11
12
13
14
15
16
17
18
# File 'lib/blather/stream/component.rb', line 8

def receive(node) # :nodoc:
  if @state == :started
    super
  else
    if node.element_name == 'handshake'
      ready!
    elsif node.document.find_first('/stream:stream[not(stream:error)]', :xmlns => NAMESPACE, :stream => STREAM_NS)
      send("<handshake>#{Digest::SHA1.hexdigest(@node['id']+@password)}</handshake>")
    end
  end
end

#send(stanza) ⇒ Object



20
21
22
23
# File 'lib/blather/stream/component.rb', line 20

def send(stanza)
  stanza.from ||= self.jid if stanza.respond_to?(:from) && stanza.respond_to?(:from=)
  super stanza
end

#startObject



25
26
27
28
29
30
31
32
33
34
35
# File 'lib/blather/stream/component.rb', line 25

def start
  @parser = Parser.new self
  start_stream = <<-STREAM
    <stream:stream
      to='#{@jid}'
      xmlns='#{NAMESPACE}'
      xmlns:stream='#{STREAM_NS}'
    >
  STREAM
  send start_stream.gsub(/\s+/, ' ')
end