Class | Jabber::Component |
In: |
lib/xmpp4r/component.rb
|
Parent: | Connection |
The component class provides everything needed to build a XMPP Component.
Components are more flexible as they are only restricted in the use of a fixed domain. node and resource of JIDs are freely choosable for all stanzas.
jid | [R] | The component’s JID |
server_address | [R] | The server’s address |
server_port | [R] | The server’s port |
Create a new Component
jid: | [JID] |
server_address: | [String] Hostname |
server_port: | [Integer] TCP port (5347) |
# File lib/xmpp4r/component.rb, line 28 28: def initialize(jid, server_address, server_port=5347, threaded = true) 29: super(threaded) 30: @jid = jid 31: @server_address = server_address 32: @server_port = server_port 33: end
Send auth with given secret and wait for result
Throws AuthenticationFailure
secret: | [String] the shared secret |
# File lib/xmpp4r/component.rb, line 62 62: def auth(secret) 63: hash = Digest::SHA1::new(@streamid.to_s + secret).to_s 64: authenticated = false 65: send("<handshake>#{hash}</handshake>") { |r| 66: if r.prefix == 'stream' and r.name == 'error' 67: true 68: elsif r.name == 'handshake' and r.namespace == 'jabber:component:accept' 69: authenticated = true 70: true 71: else 72: false 73: end 74: } 75: unless authenticated 76: raise AuthenticationFailure.new, "Component authentication failed" 77: end 78: end
Close the connection, sends </stream:stream> tag first
# File lib/xmpp4r/component.rb, line 53 53: def close 54: send("</stream:stream>") 55: super 56: end
Connect to the server (chaining-friendly)
return: | self |
# File lib/xmpp4r/component.rb, line 38 38: def connect 39: super(@server_address, @server_port) 40: send("<stream:stream xmlns:stream='http://etherx.jabber.org/streams' xmlns='jabber:component:accept' to='#{@jid}'>") { |e| 41: if e.name == 'stream' 42: true 43: else 44: false 45: end 46: } 47: self 48: end