diff options
author | Kim Alvefur <zash@zash.se> | 2014-06-21 15:05:52 +0200 |
---|---|---|
committer | Kim Alvefur <zash@zash.se> | 2014-06-21 15:05:52 +0200 |
commit | 2d5b25a9375156bba8b3ffa97a95b9cb2fe35a9d (patch) | |
tree | b2f59bdc9faeaf18b51e6b13f3b78a625c8a7510 | |
parent | 3a09673e61b5d394fcade54e8e09dadcc840fdb0 (diff) | |
parent | 265b49cc49438767327fc3468561a4fbcf484fe0 (diff) | |
download | prosody-2d5b25a9375156bba8b3ffa97a95b9cb2fe35a9d.tar.gz prosody-2d5b25a9375156bba8b3ffa97a95b9cb2fe35a9d.zip |
Merge 0.10->trunk
-rw-r--r-- | plugins/mod_presence.lua | 3 | ||||
-rw-r--r-- | plugins/mod_storage_internal.lua | 3 | ||||
-rw-r--r-- | plugins/mod_storage_none.lua | 7 | ||||
-rw-r--r-- | plugins/mod_storage_sql.lua | 6 | ||||
-rw-r--r-- | plugins/mod_storage_sql2.lua | 4 | ||||
-rwxr-xr-x | tools/ejabberd2prosody.lua | 27 |
6 files changed, 30 insertions, 20 deletions
diff --git a/plugins/mod_presence.lua b/plugins/mod_presence.lua index 2899bd7e..32a25b59 100644 --- a/plugins/mod_presence.lua +++ b/plugins/mod_presence.lua @@ -137,6 +137,9 @@ function handle_normal_presence(origin, stanza) origin.directed = nil; end else + if not origin.presence then + module:fire_event("presence/initial", { origin = origin, stanza = stanza } ); + end origin.presence = stanza; stanza:tag("delay", { xmlns = "urn:xmpp:delay", from = host, stamp = datetime.datetime() }):up(); if origin.priority ~= priority then diff --git a/plugins/mod_storage_internal.lua b/plugins/mod_storage_internal.lua index 972ecbee..ade4f0a6 100644 --- a/plugins/mod_storage_internal.lua +++ b/plugins/mod_storage_internal.lua @@ -6,6 +6,9 @@ local driver = {}; local driver_mt = { __index = driver }; function driver:open(store, typ) + if typ and typ ~= "keyval" then + return nil, "unsupported-store"; + end return setmetatable({ store = store, type = typ }, driver_mt); end function driver:get(user) diff --git a/plugins/mod_storage_none.lua b/plugins/mod_storage_none.lua index 8f2d2f56..fa925b76 100644 --- a/plugins/mod_storage_none.lua +++ b/plugins/mod_storage_none.lua @@ -1,8 +1,11 @@ local driver = {}; local driver_mt = { __index = driver }; -function driver:open(store) - return setmetatable({ store = store }, driver_mt); +function driver:open(store, typ) + if typ and typ ~= "keyval" then + return nil, "unsupported-store"; + end + return setmetatable({ store = store, type = typ }, driver_mt); end function driver:get(user) return {}; diff --git a/plugins/mod_storage_sql.lua b/plugins/mod_storage_sql.lua index 7b810ab8..a5bb5bfa 100644 --- a/plugins/mod_storage_sql.lua +++ b/plugins/mod_storage_sql.lua @@ -380,10 +380,10 @@ end local driver = {}; function driver:open(store, typ) - if not typ then -- default key-value store - return setmetatable({ store = store }, keyval_store); + if typ and typ ~= "keyval" then + return nil, "unsupported-store"; end - return nil, "unsupported-store"; + return setmetatable({ store = store }, keyval_store); end function driver:stores(username) diff --git a/plugins/mod_storage_sql2.lua b/plugins/mod_storage_sql2.lua index 249c72a7..0531c905 100644 --- a/plugins/mod_storage_sql2.lua +++ b/plugins/mod_storage_sql2.lua @@ -198,7 +198,9 @@ local keyval_store = {}; keyval_store.__index = keyval_store; function keyval_store:get(username) user,store = username,self.store; - return select(2, engine:transaction(keyval_store_get)); + local ok, result = engine:transaction(keyval_store_get); + if not ok then return ok, result; end + return result; end function keyval_store:set(username, data) user,store = username,self.store; diff --git a/tools/ejabberd2prosody.lua b/tools/ejabberd2prosody.lua index 66bf4f93..590145cd 100755 --- a/tools/ejabberd2prosody.lua +++ b/tools/ejabberd2prosody.lua @@ -56,6 +56,16 @@ function build_time(tuple) local Megaseconds,Seconds,Microseconds = unpack(tuple); return Megaseconds * 1000000 + Seconds; end +function build_jid(tuple, full) + local node, jid, resource = tuple[1], tuple[2], tuple[3] + if type(node) == "string" and node ~= "" then + jid = tuple[1] .. "@" .. jid; + end + if full and type(resource) == "string" and resource ~= "" then + jid = jid .. "/" .. resource; + end + return jid; +end function vcard(node, host, stanza) local ret, err = dm.store(node, host, "vcard", st.preserialize(stanza)); @@ -105,10 +115,7 @@ function privacy(node, host, default, lists) if _type == "jid" then if type(value) ~= "table" then print("[error] privacy: jid value is not valid: "..tostring(value)); break; end local _node, _host, _resource = value[1], value[2], value[3]; - if (type(_node) == "table") then _node = nil; end - if (type(_host) == "table") then _host = nil; end - if (type(_resource) == "table") then _resource = nil; end - value = (_node and _node.."@".._host or _host)..(_resource and "/".._resource or ""); + value = build_jid(value, true) elseif _type == "none" then _type = nil; value = nil; @@ -154,18 +161,10 @@ function privacy(node, host, default, lists) local ret, err = dm.store(node, host, "privacy", privacy); print("["..(err or "success").."] privacy: " ..node.."@"..host.." - "..count.." list(s)"); end -local function _table_to_jid(t) - if type(t[2]) == "string" then - local jid = t[2]; - if type(t[1]) == "string" then jid = t[1].."@"..jid; end - if type(t[3]) == "string" then jid = jid.."/"..t[3]; end - return jid; - end -end function muc_room(node, host, properties) local store = { jid = node.."@"..host, _data = {}, _affiliations = {} }; for _,aff in ipairs(properties.affiliations) do - store._affiliations[_table_to_jid(aff[1])] = aff[2][1] or aff[2]; + store._affiliations[build_jid(aff[1])] = aff[2][1] or aff[2]; end store._data.subject = properties.subject; if properties.subject_author then @@ -207,7 +206,7 @@ local filters = { end; roster = function(tuple) local node = tuple[3][1]; local host = tuple[3][2]; - local contact = (type(tuple[4][1]) == "table") and tuple[4][2] or tuple[4][1].."@"..tuple[4][2]; + local contact = build_jid(tuple[4]); local name = tuple[5]; local subscription = tuple[6]; local ask = tuple[7]; local groups = tuple[8]; if type(name) ~= type("") then name = nil; end |