Class Jabber::Discovery::Responder
In: lib/xmpp4r/discovery/helper/responder.rb
Parent: Object
Message Presence XMPPStanza Iq XMPPElement ErrorResponse X IqQuery JabberError ComponentAuthenticationFailure ArgumentError InvalidChatState SOCKS5Error ServerError NoNameXmlnsRegistered ServerDisconnected ClientAuthenticationFailure Connection Client Component Connection Client Singleton IdGenerator Comparable JID Enumerable CallbackList Items Publish StandardError REXML::Element Stream XMPPElement Location IqFeature StreamHost IqSiFile IqSiFileRange IqSi StreamHostUsed XRosterItem RosterItem C Body HTML UserItem XMUCUserInvite Configuration Retract IqPubSub Item IqPubSubOwner Event Subscription Unsubscribe Tune XDataField XDataReported XDataTitle XDataInstructions Feature Item Identity IqVcard PubSub::ServiceHelper Helper Helper SOCKS5Bytestreams SOCKS5BytestreamsTarget SOCKS5BytestreamsInitiator SOCKS5BytestreamsServerStreamHost TCPSocket SOCKS5Socket IqQuery IqQueryBytestreams IqQueryRoster IqQueryVersion IqQueryRPC IqQueryMUCOwner IqQueryMUCAdmin IqQueryDiscoItems IqQueryDiscoInfo IqQueryLastActivity IBB IBBTarget IBBInitiator RosterXItem XRoster RosterX X XDelay XMUC XMUCUser XData Responder SimpleResponder Iq IqCommand XMLRPC::ParserWriterChooseMixin Client Server XMLRPC::ParseContentType XMLRPC::BasicServer MUCClient SimpleMUCClient MUC::UserItem XMUCUserItem IqQueryMUCAdminItem XParent SubscriptionConfig NodeConfig OwnerNodeConfig EventItems ServiceHelper OAuthServiceHelper NodeHelper EventItem Base Anonymous DigestMD5 Plain FileSource Base Bot Callback StreamParser Semaphore SOCKS5BytestreamsPeer SOCKS5BytestreamsServer IBBQueueItem Helper Responder Helper Listener MUCBrowser NodeBrowser ListenerMocker Helper Responder Helper 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/location/helper/helper.rb lib/xmpp4r/location/location.rb UserLocation lib/xmpp4r/feature_negotiation/iq/feature.rb FeatureNegotiation 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/roster/x/roster.rb lib/xmpp4r/roster/helper/roster.rb lib/xmpp4r/roster/iq/roster.rb Roster lib/xmpp4r/version/helper/responder.rb lib/xmpp4r/version/helper/simpleresponder.rb lib/xmpp4r/version/iq/version.rb Version lib/xmpp4r/command/iq/command.rb lib/xmpp4r/command/helper/responder.rb Command lib/xmpp4r/caps/helper/helper.rb lib/xmpp4r/caps/c.rb Caps lib/xmpp4r/reliable.rb Reliable lib/xmpp4r/delay/x/delay.rb Delay 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/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/helper/oauth_service_helper.rb lib/xmpp4r/pubsub/children/event.rb lib/xmpp4r/pubsub/iq/pubsub.rb lib/xmpp4r/pubsub/children/retract.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 OAuthPubSubStreamHelper PubSub lib/xmpp4r/httpbinding/client.rb HTTPBinding lib/xmpp4r/tune/helper/helper.rb lib/xmpp4r/tune/tune.rb UserTune lib/xmpp4r/sasl.rb SASL lib/xmpp4r/test/listener_mocker.rb Test lib/xmpp4r/dataforms/x/data.rb Dataforms lib/xmpp4r/discovery/helper/helper.rb lib/xmpp4r/discovery/iq/discoinfo.rb lib/xmpp4r/discovery/helper/responder.rb lib/xmpp4r/discovery/iq/discoitems.rb Discovery lib/xmpp4r/bytestreams/helper/filetransfer.rb TransferSource FileTransfer lib/xmpp4r/last/helper/helper.rb lib/xmpp4r/last/iq/last.rb LastActivity lib/xmpp4r/framework/base.rb lib/xmpp4r/framework/bot.rb Framework lib/xmpp4r/vcard/helper/vcard.rb lib/xmpp4r/vcard/iq/vcard.rb Vcard Jabber dot/m_110_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]