Merge 0.9->trunk
[prosody.git] / util / jid.lua
index 069817c6167c46d0fffbe2a4e98bb71f604474b2..0d9a864fa3b1d8a4faa5e747a96c30a1c47e20a9 100644 (file)
@@ -1,7 +1,7 @@
 -- Prosody IM
 -- Copyright (C) 2008-2010 Matthew Wild
 -- Copyright (C) 2008-2010 Waqas Hussain
--- 
+--
 -- This project is MIT/X11 licensed. Please see the
 -- COPYING file in the source package for more information.
 --
@@ -13,6 +13,16 @@ local nodeprep = require "util.encodings".stringprep.nodeprep;
 local nameprep = require "util.encodings".stringprep.nameprep;
 local resourceprep = require "util.encodings".stringprep.resourceprep;
 
+local escapes = {
+       [" "] = "\\20"; ['"'] = "\\22";
+       ["&"] = "\\26"; ["'"] = "\\27";
+       ["/"] = "\\2f"; [":"] = "\\3a";
+       ["<"] = "\\3c"; [">"] = "\\3e";
+       ["@"] = "\\40"; ["\\"] = "\\5c";
+};
+local unescapes = {};
+for k,v in pairs(escapes) do unescapes[v] = k; end
+
 module "jid"
 
 local function _split(jid)
@@ -91,4 +101,7 @@ function compare(jid, acl)
        return false
 end
 
+function escape(s) return s and (s:gsub(".", escapes)); end
+function unescape(s) return s and (s:gsub("\\%x%x", unescapes)); end
+
 return _M;