Class Jabber::Discovery::Responder
In: lib/xmpp4r/discovery/helper/responder.rb
Parent: Object
Message Presence XMPPStanza Iq XMPPElement ErrorResponse X IqQuery JabberError ComponentAuthenticationFailure ArgumentError SOCKS5Error ServerError NoNameXmlnsRegistered ClientAuthenticationFailure Connection Client Component Client Singleton IdGenerator Comparable JID StandardError REXML::Element Stream IqQuery IqQueryVersion IqQueryRoster IqQueryBytestreams IqQueryRPC IqQueryMUCOwner IqQueryMUCAdmin IqQueryDiscoItems IqQueryDiscoInfo Responder SimpleResponder XRosterItem RosterXItem XMPPElement RosterItem IqFeature StreamHost IqSiFile IqSiFileRange IqSi StreamHostUsed C Body HTML UserItem XMUCUserInvite Tune Configuration Items Item IqPubSub Publish Event IqPubSubOwner Subscription Unsubscribe Feature Item Identity XDataField XDataReported XDataTitle XDataInstructions IqVcard XRoster RosterX X XMUC XMUCUser XDelay XData Iq IqCommand SOCKS5Bytestreams SOCKS5BytestreamsTarget SOCKS5BytestreamsInitiator SOCKS5BytestreamsServerStreamHost TCPSocket SOCKS5Socket IBB IBBTarget IBBInitiator XMLRPC::ParserWriterChooseMixin Client Server XMLRPC::ParseContentType XMLRPC::BasicServer MUCClient SimpleMUCClient MUC::UserItem XMUCUserItem IqQueryMUCAdminItem XParent Base Anonymous DigestMD5 Plain PubSub::ServiceHelper Helper SubscriptionConfig NodeConfig OwnerNodeConfig EventItems EventItem ServiceHelper NodeHelper FileSource Base Bot CallbackList Callback StreamParser Semaphore Helper Responder SOCKS5BytestreamsPeer SOCKS5BytestreamsServer IBBQueueItem Helper MUCBrowser NodeBrowser Responder Helper Helper lib/xmpp4r/message.rb lib/xmpp4r/connection.rb lib/xmpp4r/xmppstanza.rb lib/xmpp4r/iq.rb lib/xmpp4r/callbacks.rb lib/xmpp4r/idgenerator.rb lib/xmpp4r/stream.rb lib/xmpp4r/client.rb lib/xmpp4r/jid.rb lib/xmpp4r/x.rb lib/xmpp4r/streamparser.rb lib/xmpp4r/semaphore.rb lib/xmpp4r/errors.rb lib/xmpp4r/component.rb lib/xmpp4r/presence.rb lib/xmpp4r/xmppelement.rb lib/xmpp4r/query.rb XParent lib/xmpp4r/version/helper/responder.rb lib/xmpp4r/version/helper/simpleresponder.rb lib/xmpp4r/version/iq/version.rb Version lib/xmpp4r/roster/x/roster.rb lib/xmpp4r/roster/helper/roster.rb lib/xmpp4r/roster/iq/roster.rb Roster lib/xmpp4r/feature_negotiation/iq/feature.rb FeatureNegotiation lib/xmpp4r/command/iq/command.rb lib/xmpp4r/command/helper/responder.rb Command lib/xmpp4r/bytestreams/iq/si.rb lib/xmpp4r/bytestreams/helper/ibb/initiator.rb lib/xmpp4r/bytestreams/helper/socks5bytestreams/base.rb lib/xmpp4r/bytestreams/iq/bytestreams.rb lib/xmpp4r/bytestreams/helper/socks5bytestreams/initiator.rb lib/xmpp4r/bytestreams/helper/socks5bytestreams/target.rb lib/xmpp4r/bytestreams/helper/socks5bytestreams/socks5.rb lib/xmpp4r/bytestreams/helper/ibb/target.rb lib/xmpp4r/bytestreams/helper/socks5bytestreams/server.rb lib/xmpp4r/bytestreams/helper/ibb/base.rb Bytestreams lib/xmpp4r/caps/helper/helper.rb lib/xmpp4r/caps/c.rb Caps lib/xmpp4r/xhtml/html.rb XHTML lib/xmpp4r/rpc/helper/server.rb lib/xmpp4r/rpc/helper/client.rb lib/xmpp4r/rpc/iq/rpc.rb RPC lib/xmpp4r/muc/iq/mucadminitem.rb lib/xmpp4r/muc/x/muc.rb lib/xmpp4r/muc/item.rb lib/xmpp4r/muc/helper/simplemucclient.rb lib/xmpp4r/muc/iq/mucadmin.rb lib/xmpp4r/muc/helper/mucbrowser.rb lib/xmpp4r/muc/x/mucuseritem.rb lib/xmpp4r/muc/x/mucuserinvite.rb lib/xmpp4r/muc/iq/mucowner.rb lib/xmpp4r/muc/helper/mucclient.rb MUC lib/xmpp4r/delay/x/delay.rb Delay lib/xmpp4r/sasl.rb SASL lib/xmpp4r/tune/helper/helper.rb lib/xmpp4r/tune/tune.rb UserTune lib/xmpp4r/pubsub/children/item.rb lib/xmpp4r/pubsub/children/configuration.rb lib/xmpp4r/pubsub/children/subscription.rb lib/xmpp4r/pubsub/helper/servicehelper.rb lib/xmpp4r/pubsub/children/unsubscribe.rb lib/xmpp4r/pubsub/children/publish.rb lib/xmpp4r/pubsub/children/event.rb lib/xmpp4r/pubsub/iq/pubsub.rb lib/xmpp4r/pubsub/helper/nodebrowser.rb lib/xmpp4r/pubsub/helper/nodehelper.rb lib/xmpp4r/pubsub/children/items.rb lib/xmpp4r/pubsub/children/subscription_config.rb lib/xmpp4r/pubsub/children/node_config.rb PubSub lib/xmpp4r/httpbinding/client.rb HTTPBinding lib/xmpp4r/discovery/iq/discoinfo.rb lib/xmpp4r/discovery/helper/responder.rb lib/xmpp4r/discovery/iq/discoitems.rb Discovery lib/xmpp4r/dataforms/x/data.rb Dataforms lib/xmpp4r/bytestreams/helper/filetransfer.rb TransferSource FileTransfer lib/xmpp4r/vcard/helper/vcard.rb lib/xmpp4r/vcard/iq/vcard.rb Vcard lib/xmpp4r/framework/base.rb lib/xmpp4r/framework/bot.rb Framework Jabber dot/m_99_0.png

Responds to Service Discovery queries on a given node

Modify returned elements by these attributes:

  • Responder#identities
  • Responder#features (Responder#add_features is a short-cut accepting an Array of Strings, too)
  • Responder#forms
  • Responder#items

Methods

Constants

CALLBACK_PRIORITY = 180

Attributes

features  [RW]  Features returned on Discovery Info query,

Array of [Discovery::Feature]

forms  [RW]  Forms returned on Discovery Info query (such as Software Information)

Array of [Dataforms::XData]

identities  [RW]  Identities returned on Discovery Info query

Array of [Discovery::Identity]

items  [RW]  Children returned on Discovery Item query

May contain other Discovery::Responder instances which will generate an item dynamically from their first identity

Array of [Discovery::Item] or [Discovery::Responder] (mixed)

my_jid  [RW]  Set the JID this helper feels responsible for (default: nil, responsible for any JID)
node  [R]  Service Discovery node this Responder is responsible for (will not answer queries for other nodes)

Public Class methods

Initialize responder for a specific node

stream:[Jabber::Stream]
node:[nil] or [String]

[Source]

     # File lib/xmpp4r/discovery/helper/responder.rb, line 64
 64:       def initialize(stream, node=nil, identities=[], features=[], items=[])
 65:         @stream = stream
 66:         @my_jid = nil
 67:         @node = node
 68:         @identities = identities
 69:         @features = []
 70:         add_features(features)
 71:         @forms = []
 72:         @items = items
 73: 
 74:         @stream.add_iq_callback(CALLBACK_PRIORITY, self) do |iq|
 75:           my_nodes = [@node, "#{@node}##{generate_ver}"]
 76: 
 77:           if iq.type == :get and
 78:              iq.query.kind_of? IqQueryDiscoInfo and
 79:              my_nodes.include?(iq.query.node)
 80: 
 81:             answer = iq.answer(false)
 82:             answer.type = :result
 83:             query = answer.add(IqQueryDiscoInfo.new)
 84:             query.node = iq.query.node
 85:             (@identities + @features + @forms).each do |element|
 86:               query.add(element)
 87:             end
 88:             @stream.send(answer)
 89: 
 90:             true  # handled
 91: 
 92:           elsif iq.type == :get and
 93:                 iq.query.kind_of? IqQueryDiscoItems and
 94:                 my_nodes.include?(iq.query.node)
 95: 
 96:             answer = iq.answer(false)
 97:             answer.type = :result
 98:             query = answer.add(IqQueryDiscoItems.new)
 99:             query.node = iq.query.node
100:             @items.each do |item|
101:               if item.kind_of? Responder
102:                 query.add(item.generate_item)
103:               else
104:                 query.add(item)
105:               end
106:             end
107:             @stream.send(answer)
108: 
109:             true  # handled
110: 
111:           else
112:             false # not handled
113:           end
114:         end
115:       end

Public Instance methods

Add a feature

feature:[Jabber::Discovery::Feature] or [String]

[Source]

     # File lib/xmpp4r/discovery/helper/responder.rb, line 120
120:       def add_feature(feature)
121:         if feature.kind_of? Feature
122:           @features << feature
123:         else
124:           @features << Feature.new(feature.to_s)
125:         end
126:       end

Add a series of features

features:Array of [Jabber::Discovery::Feature] or [String]

[Source]

     # File lib/xmpp4r/discovery/helper/responder.rb, line 131
131:       def add_features(features)
132:         features.each { |feature|
133:           add_feature(feature)
134:         }
135:       end

Generate a XEP-0115: Entity Capabilities <c/> element for inclusion in Presence stanzas. This enables efficient caching of Service Discovery information.

[Source]

     # File lib/xmpp4r/discovery/helper/responder.rb, line 141
141:       def generate_caps
142:         Caps::C.new(@node, generate_ver)
143:       end

Generate an item for inclusion in items discovery in other responders

return:[Discovery::Item] or nil

[Source]

     # File lib/xmpp4r/discovery/helper/responder.rb, line 149
149:       def generate_item
150:         i = @identities.first
151:         if i
152:           Item.new(@my_jid || @stream.jid, i.iname, @node)
153:         else
154:           nil
155:         end
156:       end

Private Instance methods

[Source]

     # File lib/xmpp4r/discovery/helper/responder.rb, line 160
160:       def generate_ver
161:         Caps::generate_ver(@identities, @features, @forms)
162:       end

[Validate]