Responds to Service Discovery queries on a given node
Modify returned elements by these attributes:
#features (Responder#add_features is a short-cut accepting an Array of Strings, too)
Features returned on Discovery Info query,
Array of [Discovery::Feature]
Forms returned on Discovery Info query (such as Software Information)
Array of [Dataforms::XData]
Identities returned on Discovery Info query
Array of [Discovery::Identity]
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)
Initialize responder for a specific node
or [String]
# File lib/xmpp4r/discovery/helper/responder.rb, line 64 def initialize(stream, node=nil, identities=[], features=[], items=[]) @stream = stream @my_jid = nil @node = node @identities = identities @features = [] add_features(features) @forms = [] @items = items @stream.add_iq_callback(CALLBACK_PRIORITY, self) do |iq| my_nodes = [@node, "#{@node}##{generate_ver}"] if iq.type == :get and iq.query.kind_of? IqQueryDiscoInfo and my_nodes.include?(iq.query.node) answer = iq.answer(false) answer.type = :result query = answer.add(IqQueryDiscoInfo.new) query.node = iq.query.node (@identities + @features + @forms).each do |element| query.add(element) end @stream.send(answer) true # handled elsif iq.type == :get and iq.query.kind_of? IqQueryDiscoItems and my_nodes.include?(iq.query.node) answer = iq.answer(false) answer.type = :result query = answer.add(IqQueryDiscoItems.new) query.node = iq.query.node @items.each do |item| if item.kind_of? Responder query.add(item.generate_item) else query.add(item) end end @stream.send(answer) true # handled else false # not handled end end end
Add a feature
or [String]
# File lib/xmpp4r/discovery/helper/responder.rb, line 120 def add_feature(feature) if feature.kind_of? Feature @features << feature else @features << Feature.new(feature.to_s) end end
Add a series of features
Array of [Jabber::Discovery::Feature] or [String]
# File lib/xmpp4r/discovery/helper/responder.rb, line 131 def add_features(features) features.each { |feature| add_feature(feature) } end
Generate an item for inclusion in items discovery in other responders
or nil
# File lib/xmpp4r/discovery/helper/responder.rb, line 149 def generate_item i = @identities.first if i Item.new(@my_jid || @stream.jid, i.iname, @node) else nil end end
# File lib/xmpp4r/discovery/helper/responder.rb, line 160 def generate_ver Caps::generate_ver(@identities, @features, @forms) end