X-Git-Url: https://git.enpas.org/?a=blobdiff_plain;f=util%2Fjid.lua;h=68449aa1c72bd934f42967b5dd444c7d64269b58;hb=489e8504301004d44240e4b9cb7194340d869a0a;hp=efa79b38a8505b98e95f165392951b5216314def;hpb=2310303b27aab868306c3817ceb2c768d53d42b7;p=prosody.git diff --git a/util/jid.lua b/util/jid.lua index efa79b38..68449aa1 100644 --- a/util/jid.lua +++ b/util/jid.lua @@ -1,15 +1,27 @@ +-- Prosody IM v0.2 +-- Copyright (C) 2008 Matthew Wild +-- Copyright (C) 2008 Waqas Hussain +-- +-- This project is MIT/X11 licensed. Please see the +-- COPYING file in the source package for more information. +-- + + local match = string.match; +local nodeprep = require "util.encodings".stringprep.nodeprep; +local nameprep = require "util.encodings".stringprep.nameprep; +local resourceprep = require "util.encodings".stringprep.resourceprep; module "jid" function split(jid) if not jid then return; end - local node, nodelen = match(jid, "^([^@]+)@()"); - local host, hostlen = match(jid, "^([^@/]+)()", nodelen) + local node, nodepos = match(jid, "^([^@]+)@()"); + local host, hostpos = match(jid, "^([^@/]+)()", nodepos) if node and not host then return nil, nil, nil; end - local resource = match(jid, "^/(.+)$", hostlen); - if (not host) or ((not resource) and #jid >= hostlen) then return nil, nil, nil; end + local resource = match(jid, "^/(.+)$", hostpos); + if (not host) or ((not resource) and #jid >= hostpos) then return nil, nil, nil; end return node, host, resource; end @@ -17,10 +29,38 @@ function bare(jid) local node, host = split(jid); if node and host then return node.."@"..host; - elseif host then - return host; end - return nil; + return host; +end + +function prepped_split(jid) + local node, host, resource = split(jid); + if host then + host = nameprep(host); + if not host then return; end + if node then + node = nodeprep(node); + if not node then return; end + end + if resource then + resource = resourceprep(resource); + if not resource then return; end + end + return node, host, resource; + end +end + +function prep(jid) + local node, host, resource = prepped_split(jid); + if host then + if node then + host = node .. "@" .. host; + end + if resource then + host = host .. "/" .. resource; + end + end + return host; end return _M;