# =XMPP4R - XMPP Library for Ruby # License:: Ruby's license (see the LICENSE file) or GNU GPL, at your option. # Website::http://xmpp4r.github.io require 'xmpp4r/callbacks' require 'xmpp4r/version/iq/version' module Jabber module Version ## # A class to answer version requests using IqQueryVersion # # If you don't need the flexibility of dynamic responses with # the callback you can register with add_version_callback, # take a look at SimpleResponder class Responder ## # Initialize a new version responder # # Registers it's callback (prio = 180, ref = self) # stream:: [Stream] Where to register callback handlers def initialize(stream) @stream = stream @versioncbs = CallbackList.new stream.add_iq_callback(180, self) { |iq| iq_callback(iq) } end ## # Add a callback for Iq stanzas with IqQueryVersion # # First argument passed to block is the Iq stanza, # second argument is a block, which can be called with # software name, version and os # # Example: # my_version_helper.add_version_callback { |iq,block| # block.call('Cool client', '6.0', 'Cool OS') # } def add_version_callback(priority = 0, ref = nil, &block) @versioncbs.add(priority, ref, block) end ## # callback handler to answer Software Version queries # (registered by constructor and used internally only) # # Used internally def iq_callback(iq) if iq.type == :get if iq.query.kind_of?(IqQueryVersion) replyblock = lambda { |name,version,os| answer = iq.answer answer.type = :result answer.query.set_iname(name).set_version(version).set_os(os) @stream.send(answer) true } @versioncbs.process(iq, replyblock) else false end else false end end end end end