summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEmmanuel Gil Peyrot <linkmauve@linkmauve.fr>2013-11-14 15:59:05 +0100
committerFlorent Le Coz <louiz@louiz.org>2013-11-14 23:31:32 +0100
commit83219052c32a2073f52aae8e4b1c15822343f04f (patch)
tree6925c26677985d48d8b7e25be8674be9ba8dfa00
parent8c33a01e68125fbc76be1f455f5ca85bcb952e65 (diff)
downloadbiboumi-83219052c32a2073f52aae8e4b1c15822343f04f.tar.gz
biboumi-83219052c32a2073f52aae8e4b1c15822343f04f.tar.bz2
biboumi-83219052c32a2073f52aae8e4b1c15822343f04f.tar.xz
biboumi-83219052c32a2073f52aae8e4b1c15822343f04f.zip
Fix JID parsing
-rw-r--r--src/test.cpp18
-rw-r--r--src/xmpp/jid.cpp16
2 files changed, 27 insertions, 7 deletions
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 <config/config.hpp>
+#include <xmpp/jid.hpp>
#include <xmpp/xmpp_parser.hpp>
int main()
@@ -66,6 +67,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
*/
Config::filename = "test.cfg";
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);
}