X-Git-Url: https://git.enpas.org/?a=blobdiff_plain;f=util%2Fjid.lua;h=6c387868f5adcba7a082d16a2f9e92457b4e84b6;hb=4bbea2603b77659965281393e4b65f641ea111f2;hp=784d2b645739eb2bd62aaa55a18ef353d5dfc049;hpb=d06debf079fd7b267f159e72a79adff68a31cfd0;p=prosody.git diff --git a/util/jid.lua b/util/jid.lua index 784d2b64..6c387868 100644 --- a/util/jid.lua +++ b/util/jid.lua @@ -1,14 +1,44 @@ +-- Prosody IM v0.1 +-- Copyright (C) 2008 Matthew Wild +-- Copyright (C) 2008 Waqas Hussain +-- +-- This program is free software; you can redistribute it and/or +-- modify it under the terms of the GNU General Public License +-- as published by the Free Software Foundation; either version 2 +-- of the License, or (at your option) any later version. +-- +-- This program is distributed in the hope that it will be useful, +-- but WITHOUT ANY WARRANTY; without even the implied warranty of +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-- GNU General Public License for more details. +-- +-- You should have received a copy of the GNU General Public License +-- along with this program; if not, write to the Free Software +-- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +-- + + local match = string.match; module "jid" function split(jid) - if not jid then return nil; end - local node = match(jid, "^([^@]+)@"); - local server = (node and match(jid, ".-@([^@/]+)")) or match(jid, "^([^@/]+)"); - local resource = match(jid, "/(.+)$"); - return node, server, resource; + if not jid then return; end + 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, "^/(.+)$", hostpos); + if (not host) or ((not resource) and #jid >= hostpos) then return nil, nil, nil; end + return node, host, resource; +end + +function bare(jid) + local node, host = split(jid); + if node and host then + return node.."@"..host; + end + return host; end -return _M; \ No newline at end of file +return _M;