Sha256: e21a15f3f761da9d0203e28b7e638971d1415efdbe7ac50d5af7cb182a4d0e71
Contents?: true
Size: 1.57 KB
Versions: 18
Compression:
Stored size: 1.57 KB
Contents
module Blather # :nodoc: class Stream # :nodoc: class Resource < Features # :nodoc: BIND_NS = 'urn:ietf:params:xml:ns:xmpp-bind'.freeze register BIND_NS def initialize(stream, succeed, fail) super @jid = stream.jid end def receive_data(stanza) @node = stanza case stanza.element_name when 'bind' then bind when 'iq' then result else fail!(UnknownResponse.new(@node)) end end private ## # Respond to the bind request # If @jid has a resource set already request it from the server def bind response = Stanza::Iq.new :set @id = response.id response << (binder = XMPPNode.new('bind', response.document)) binder.namespace = BIND_NS if @jid.resource binder << (resource = XMPPNode.new('resource', binder.document)) resource.content = @jid.resource end @stream.send response end ## # Process the result from the server # Sets the sends the JID (now bound to a resource) # back to the stream def result if @node[:type] == 'error' fail! StanzaError.import(@node) return end Blather.logger.debug "RESOURCE NODE #{@node}" # ensure this is a response to our original request if @id == @node['id'] @stream.jid = JID.new @node.find_first('bind_ns:bind/bind_ns:jid', :bind_ns => BIND_NS).content succeed! else fail!("BIND result ID mismatch. Expected: #{@id}. Received: #{@node['id']}") end end end #Resource end #Stream end #Blather
Version data entries
18 entries across 18 versions & 3 rubygems