Fix JID parsing

This commit is contained in:
Emmanuel Gil Peyrot
2013-11-14 23:31:32 +01:00
committed by Florent Le Coz
parent 8c33a01e68
commit 83219052c3
2 changed files with 27 additions and 7 deletions
+18
View File
@@ -12,6 +12,7 @@
#include <config/config.hpp> #include <config/config.hpp>
#include <xmpp/jid.hpp>
#include <xmpp/xmpp_parser.hpp> #include <xmpp/xmpp_parser.hpp>
int main() int main()
@@ -65,6 +66,23 @@ int main()
}); });
xml.feed(doc.data(), doc.size(), true); 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 * Config
*/ */
+9 -7
View File
@@ -2,18 +2,20 @@
Jid::Jid(const std::string& jid) Jid::Jid(const std::string& jid)
{ {
std::string::size_type at = jid.find("@"); std::string::size_type slash = jid.find('/');
if (at != std::string::npos) 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); this->local = jid.substr(0, at);
at++; at++;
} }
else else
at = 0; 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); this->domain = jid.substr(at, slash - at);
} }