Software / code / verse
Comparison
plugins/disco.lua @ 197:7e98cf2c1d8d
plugins.*: Use verse.stanza() & co instead of require util.stanza
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Thu, 17 Mar 2011 18:33:52 +0100 |
| parent | 180:58537eb98506 |
| child | 212:cd2e5eef7a7a |
comparison
equal
deleted
inserted
replaced
| 196:eb9d69d3f0b5 | 197:7e98cf2c1d8d |
|---|---|
| 4 -- | 4 -- |
| 5 -- This project is MIT/X11 licensed. Please see the | 5 -- This project is MIT/X11 licensed. Please see the |
| 6 -- COPYING file in the source package for more information. | 6 -- COPYING file in the source package for more information. |
| 7 -- | 7 -- |
| 8 | 8 |
| 9 local st = require "util.stanza" | |
| 10 local b64 = require("mime").b64 | 9 local b64 = require("mime").b64 |
| 11 local sha1 = require("util.sha1").sha1 | 10 local sha1 = require("util.sha1").sha1 |
| 12 | 11 |
| 13 local xmlns_caps = "http://jabber.org/protocol/caps"; | 12 local xmlns_caps = "http://jabber.org/protocol/caps"; |
| 14 local xmlns_disco = "http://jabber.org/protocol/disco"; | 13 local xmlns_disco = "http://jabber.org/protocol/disco"; |
| 77 setmetatable(stream.caps, { | 76 setmetatable(stream.caps, { |
| 78 __call = function (...) -- vararg: allow calling as function or member | 77 __call = function (...) -- vararg: allow calling as function or member |
| 79 -- retrieve the c stanza to insert into the | 78 -- retrieve the c stanza to insert into the |
| 80 -- presence stanza | 79 -- presence stanza |
| 81 local hash = calculate_hash() | 80 local hash = calculate_hash() |
| 82 return st.stanza('c', { | 81 return verse.stanza('c', { |
| 83 xmlns = xmlns_caps, | 82 xmlns = xmlns_caps, |
| 84 hash = 'sha-1', | 83 hash = 'sha-1', |
| 85 node = stream.caps.node, | 84 node = stream.caps.node, |
| 86 ver = hash | 85 ver = hash |
| 87 }) | 86 }) |
| 271 -- matches caps hash, so use the main info | 270 -- matches caps hash, so use the main info |
| 272 identities = stream.disco.info.identities | 271 identities = stream.disco.info.identities |
| 273 features = stream.disco.info.features | 272 features = stream.disco.info.features |
| 274 else | 273 else |
| 275 -- unknown node: give an error | 274 -- unknown node: give an error |
| 276 local response = st.stanza('iq',{ | 275 local response = verse.stanza('iq',{ |
| 277 to = stanza.attr.from, | 276 to = stanza.attr.from, |
| 278 from = stanza.attr.to, | 277 from = stanza.attr.to, |
| 279 id = stanza.attr.id, | 278 id = stanza.attr.id, |
| 280 type = 'error' | 279 type = 'error' |
| 281 }) | 280 }) |
| 289 else | 288 else |
| 290 identities = stream.disco.info.identities | 289 identities = stream.disco.info.identities |
| 291 features = stream.disco.info.features | 290 features = stream.disco.info.features |
| 292 end | 291 end |
| 293 -- construct the response | 292 -- construct the response |
| 294 local result = st.stanza('query',{ | 293 local result = verse.stanza('query',{ |
| 295 xmlns = xmlns_disco_info, | 294 xmlns = xmlns_disco_info, |
| 296 node = query.attr.node | 295 node = query.attr.node |
| 297 }) | 296 }) |
| 298 for key,identity in pairs(identities) do | 297 for key,identity in pairs(identities) do |
| 299 result:tag('identity', identity):reset() | 298 result:tag('identity', identity):reset() |
| 300 end | 299 end |
| 301 for key,feature in pairs(features) do | 300 for key,feature in pairs(features) do |
| 302 result:tag('feature', feature):reset() | 301 result:tag('feature', feature):reset() |
| 303 end | 302 end |
| 304 stream:send(st.stanza('iq',{ | 303 stream:send(verse.stanza('iq',{ |
| 305 to = stanza.attr.from, | 304 to = stanza.attr.from, |
| 306 from = stanza.attr.to, | 305 from = stanza.attr.to, |
| 307 id = stanza.attr.id, | 306 id = stanza.attr.id, |
| 308 type = 'result' | 307 type = 'result' |
| 309 }):add_child(result)) | 308 }):add_child(result)) |
| 321 local node = stream.disco.nodes[query.attr.node] | 320 local node = stream.disco.nodes[query.attr.node] |
| 322 if node then | 321 if node then |
| 323 items = node.items or {} | 322 items = node.items or {} |
| 324 else | 323 else |
| 325 -- unknown node: give an error | 324 -- unknown node: give an error |
| 326 local response = st.stanza('iq',{ | 325 local response = verse.stanza('iq',{ |
| 327 to = stanza.attr.from, | 326 to = stanza.attr.from, |
| 328 from = stanza.attr.to, | 327 from = stanza.attr.to, |
| 329 id = stanza.attr.id, | 328 id = stanza.attr.id, |
| 330 type = 'error' | 329 type = 'error' |
| 331 }) | 330 }) |
| 338 end | 337 end |
| 339 else | 338 else |
| 340 items = stream.disco.items | 339 items = stream.disco.items |
| 341 end | 340 end |
| 342 -- construct the response | 341 -- construct the response |
| 343 local result = st.stanza('query',{ | 342 local result = verse.stanza('query',{ |
| 344 xmlns = xmlns_disco_items, | 343 xmlns = xmlns_disco_items, |
| 345 node = query.attr.node | 344 node = query.attr.node |
| 346 }) | 345 }) |
| 347 for key,item in pairs(items) do | 346 for key,item in pairs(items) do |
| 348 result:tag('item', item):reset() | 347 result:tag('item', item):reset() |
| 349 end | 348 end |
| 350 stream:send(st.stanza('iq',{ | 349 stream:send(verse.stanza('iq',{ |
| 351 to = stanza.attr.from, | 350 to = stanza.attr.from, |
| 352 from = stanza.attr.to, | 351 from = stanza.attr.to, |
| 353 id = stanza.attr.id, | 352 id = stanza.attr.id, |
| 354 type = 'result' | 353 type = 'result' |
| 355 }):add_child(result)) | 354 }):add_child(result)) |