Class Jabber::StreamParser
In: lib/xmpp4r/streamparser.rb
Parent: Object
XMLStanza Message Presence Iq REXML::Element X IqQuery Error StreamHost IqSiFileRange IqSiFile StreamHostUsed IqSi XRosterItem RosterItem IqFeature XMUCUserItem XMUCUserInvite Feature Identity Item XDataField XDataReported XDataTitle XDataInstructions IqVcard Singleton IdGenerator Connection Client Component Comparable JID RuntimeError ErrorException AuthenticationFailure SOCKS5Error Stream SOCKS5Bytestreams SOCKS5BytestreamsTarget SOCKS5BytestreamsInitiator SOCKS5BytestreamsServerStreamHost TCPSocket SOCKS5Socket IqQuery IqQueryBytestreams IqQueryVersion IqQueryRoster IqQueryDiscoItems IqQueryDiscoInfo IBB IBBTarget IBBInitiator Responder SimpleResponder X XRoster XMUCUser XMUC XDelay XData MUCClient SimpleMUCClient Base DigestMD5 Plain FileSource StreamParser SOCKS5BytestreamsPeer SOCKS5BytestreamsServer IBBQueueItem Helper MUCBrowser Helper Helper lib/xmpp4r/authenticationfailure.rb lib/xmpp4r/idgenerator.rb lib/xmpp4r/connection.rb lib/xmpp4r/iq.rb lib/xmpp4r/jid.rb lib/xmpp4r/xmlstanza.rb lib/xmpp4r/errorexception.rb lib/xmpp4r/stream.rb lib/xmpp4r/client.rb lib/xmpp4r/streamparser.rb lib/xmpp4r/x.rb lib/xmpp4r/error.rb lib/xmpp4r/component.rb lib/xmpp4r/query.rb lib/xmpp4r/message.rb lib/xmpp4r/presence.rb lib/xmpp4r/bytestreams/helper/ibb/initiator.rb lib/xmpp4r/bytestreams/iq/si.rb lib/xmpp4r/bytestreams/iq/bytestreams.rb lib/xmpp4r/bytestreams/helper/socks5bytestreams/base.rb lib/xmpp4r/bytestreams/helper/socks5bytestreams/target.rb lib/xmpp4r/bytestreams/helper/socks5bytestreams/server.rb lib/xmpp4r/bytestreams/helper/socks5bytestreams/socks5.rb lib/xmpp4r/bytestreams/helper/socks5bytestreams/initiator.rb lib/xmpp4r/bytestreams/helper/ibb/base.rb lib/xmpp4r/bytestreams/helper/ibb/target.rb Bytestreams lib/xmpp4r/version/iq/version.rb lib/xmpp4r/version/helper/responder.rb lib/xmpp4r/version/helper/simpleresponder.rb Version lib/xmpp4r/roster/helper/roster.rb lib/xmpp4r/roster/iq/roster.rb lib/xmpp4r/roster/x/roster.rb Roster lib/xmpp4r/feature_negotiation/iq/feature.rb FeatureNegotiation lib/xmpp4r/muc/x/muc.rb lib/xmpp4r/muc/helper/mucclient.rb lib/xmpp4r/muc/x/mucuseritem.rb lib/xmpp4r/muc/helper/mucbrowser.rb lib/xmpp4r/muc/x/mucuserinvite.rb lib/xmpp4r/muc/helper/simplemucclient.rb MUC lib/xmpp4r/sasl.rb SASL lib/xmpp4r/delay/x/delay.rb Delay lib/xmpp4r/bytestreams/helper/filetransfer.rb TransferSource FileTransfer lib/xmpp4r/discovery/iq/discoinfo.rb lib/xmpp4r/discovery/iq/discoitems.rb Discovery lib/xmpp4r/dataforms/x/data.rb Dataforms lib/xmpp4r/vcard/helper/vcard.rb lib/xmpp4r/vcard/iq/vcard.rb Vcard Jabber Module: Jabber

The StreamParser uses REXML to parse the incoming XML stream of the Jabber protocol and fires XMLStanzas at the Connection instance.

Methods

new   parse  

Attributes

started  [R]  status if the parser is started

Public Class methods

Constructs a parser for the supplied stream (socket input)

stream:[IO] Socket input stream
listener:[Object.receive(XMLStanza)] The listener (usually a Jabber::Protocol::Connection instance)

[Source]

    # File lib/xmpp4r/streamparser.rb, line 26
26:     def initialize(stream, listener)
27:       @stream = stream
28:       @listener = listener
29:       @current = nil
30:     end

Public Instance methods

Begins parsing the XML stream and does not return until the stream closes.

[Source]

    # File lib/xmpp4r/streamparser.rb, line 36
36:     def parse
37:       @started = false
38:       begin
39:         parser = REXML::Parsers::SAX2Parser.new @stream 
40: 
41:         parser.listen( :start_element ) do |uri, localname, qname, attributes|
42:           e = REXML::Element::new(qname)
43:           e.add_attributes attributes
44:           @current = @current.nil? ? e : @current.add_element(e)
45: 
46:           if @current.name == 'stream' and !@started
47:             @started = true
48:             @listener.receive(@current)
49:             @current = nil
50:           end
51:         end
52: 
53:         parser.listen( :end_element ) do  |uri, localname, qname|
54:           if qname == 'stream:stream' and @current.nil?
55:             @started = false
56:             @listener.parser_end
57:           else
58:             @listener.receive(@current) unless @current.parent
59:             @current = @current.parent
60:           end
61:         end
62: 
63:         parser.listen( :characters ) do | text |
64:           @current.text = @current.text.to_s + text if @current
65:         end
66: 
67:         parser.listen( :cdata ) do | text |
68:           raise "Not implemented !"
69:         end
70: 
71:         parser.parse
72:       rescue REXML::ParseException => e
73:         @listener.parse_failure(e)
74:       end
75:     end

[Validate]