Software / code / prosody
Comparison
util/caps.lua @ 6791:e813e8cf6046
Merge 0.10->trunk
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Thu, 20 Aug 2015 13:05:22 +0200 |
| parent | 6777:5de6b93d0190 |
| child | 8555:4f0f5b49bb03 |
comparison
equal
deleted
inserted
replaced
| 6776:4412a2307c89 | 6791:e813e8cf6046 |
|---|---|
| 10 local sha1 = require "util.hashes".sha1; | 10 local sha1 = require "util.hashes".sha1; |
| 11 | 11 |
| 12 local t_insert, t_sort, t_concat = table.insert, table.sort, table.concat; | 12 local t_insert, t_sort, t_concat = table.insert, table.sort, table.concat; |
| 13 local ipairs = ipairs; | 13 local ipairs = ipairs; |
| 14 | 14 |
| 15 module "caps" | 15 local _ENV = nil; |
| 16 | 16 |
| 17 function calculate_hash(disco_info) | 17 local function calculate_hash(disco_info) |
| 18 local identities, features, extensions = {}, {}, {}; | 18 local identities, features, extensions = {}, {}, {}; |
| 19 for _, tag in ipairs(disco_info) do | 19 for _, tag in ipairs(disco_info) do |
| 20 if tag.name == "identity" then | 20 if tag.name == "identity" then |
| 21 t_insert(identities, (tag.attr.category or "").."\0"..(tag.attr.type or "").."\0"..(tag.attr["xml:lang"] or "").."\0"..(tag.attr.name or "")); | 21 t_insert(identities, (tag.attr.category or "").."\0"..(tag.attr.type or "").."\0"..(tag.attr["xml:lang"] or "").."\0"..(tag.attr.name or "")); |
| 22 elseif tag.name == "feature" then | 22 elseif tag.name == "feature" then |
| 56 local S = identities..features..extensions; | 56 local S = identities..features..extensions; |
| 57 local ver = base64(sha1(S)); | 57 local ver = base64(sha1(S)); |
| 58 return ver, S; | 58 return ver, S; |
| 59 end | 59 end |
| 60 | 60 |
| 61 return _M; | 61 return { |
| 62 calculate_hash = calculate_hash; | |
| 63 }; |