From 83219052c32a2073f52aae8e4b1c15822343f04f Mon Sep 17 00:00:00 2001 From: Emmanuel Gil Peyrot Date: Thu, 14 Nov 2013 15:59:05 +0100 Subject: Fix JID parsing --- src/test.cpp | 18 ++++++++++++++++++ src/xmpp/jid.cpp | 16 +++++++++------- 2 files changed, 27 insertions(+), 7 deletions(-) (limited to 'src') diff --git a/src/test.cpp b/src/test.cpp index 99454a5..7818451 100644 --- a/src/test.cpp +++ b/src/test.cpp @@ -12,6 +12,7 @@ #include +#include #include int main() @@ -65,6 +66,23 @@ int main() }); xml.feed(doc.data(), doc.size(), true); + /** + * JID parsing + */ + // Full JID + Jid jid1("♥@ツ.coucou/coucou@coucou/coucou"); + std::cerr << jid1.local << " @ " << jid1.domain << " / " << jid1.resource << std::endl; + assert(jid1.local == "♥"); + assert(jid1.domain == "ツ.coucou"); + assert(jid1.resource == "coucou@coucou/coucou"); + + // Domain and resource + Jid jid2("ツ.coucou/coucou@coucou/coucou"); + std::cerr << jid2.local << " @ " << jid2.domain << " / " << jid2.resource << std::endl; + assert(jid2.local == ""); + assert(jid2.domain == "ツ.coucou"); + assert(jid2.resource == "coucou@coucou/coucou"); + /** * Config */ diff --git a/src/xmpp/jid.cpp b/src/xmpp/jid.cpp index 78b28a0..29a5302 100644 --- a/src/xmpp/jid.cpp +++ b/src/xmpp/jid.cpp @@ -2,18 +2,20 @@ Jid::Jid(const std::string& jid) { - std::string::size_type at = jid.find("@"); - if (at != std::string::npos) + std::string::size_type slash = jid.find('/'); + if (slash != std::string::npos) + { + this->resource = jid.substr(slash + 1); + } + + std::string::size_type at = jid.find('@'); + if (at != std::string::npos && at < slash) { this->local = jid.substr(0, at); at++; } else at = 0; - std::string::size_type slash = jid.find("/", at); - if (slash != std::string::npos) - { - this->resource = jid.substr(slash + 1); - } + this->domain = jid.substr(at, slash - at); } -- cgit v1.2.3