You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
zhabogram/inc/xmppgateway.rb

69 lines
1.6 KiB

module Jabber
module Gateway
NS_GATEWAY = 'jabber:iq:gateway'
class Responder
attr_accessor :description
attr_accessor :prompt
def initialize(stream, &func)
@stream = stream
@func = func
@stream.add_iq_callback() do |iq|
if iq.query.kind_of?(IqQueryGateway)
if iq.type == :get
# Client is requesting fields
answer = iq.answer(false)
answer.type = :result
query = answer.add(IqQueryGateway.new)
query.desc = @description || ''
query.prompt = @prompt || ''
@stream.send(answer)
elsif iq.type == :set
# Client is requesting full JID
query = iq.query.prompt
jid = @func.call(iq, query)
answer = iq.answer(false)
answer.type = :result
query = answer.add(IqQueryGateway.new)
query.jid = jid
@stream.send(answer)
end
end
end
end
end
class IqQueryGateway < IqQuery
name_xmlns 'query', Jabber::Gateway::NS_GATEWAY
def desc
first_element_text('desc')
end
def desc=(new_desc)
replace_element_text('desc', new_desc)
end
def prompt
first_element_text('prompt')
end
def prompt=(new_prompt)
replace_element_text('prompt', new_prompt)
end
def jid
first_element_text('jid')
end
def jid=(new_prompt)
replace_element_text('jid', new_prompt)
end
end
end
end