X-Git-Url: https://git.enpas.org/?a=blobdiff_plain;f=util%2Fjid.lua;h=6c387868f5adcba7a082d16a2f9e92457b4e84b6;hb=4bbea2603b77659965281393e4b65f641ea111f2;hp=c9ea5b736f7a3b3a445c13141bbad4446d209625;hpb=b233f991f9dea008982a90c5f785fa021dd87558;p=prosody.git diff --git a/util/jid.lua b/util/jid.lua index c9ea5b73..6c387868 100644 --- a/util/jid.lua +++ b/util/jid.lua @@ -1,3 +1,23 @@ +-- 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; @@ -5,16 +25,20 @@ module "jid" function split(jid) if not jid then return; end - -- TODO verify JID, and return; if invalid - local node = match(jid, "^([^@]+)@"); - local server = (node and match(jid, ".-@([^@/]+)")) or match(jid, "^([^@/]+)"); - local resource = match(jid, "/(.+)$"); - return node, server, resource; + 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); - return node.."@"..host; + if node and host then + return node.."@"..host; + end + return host; end -return _M; \ No newline at end of file +return _M;