summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/test.cpp11
-rw-r--r--src/xmpp/jid.cpp17
2 files changed, 24 insertions, 4 deletions
diff --git a/src/test.cpp b/src/test.cpp
index c9427f0..b95b379 100644
--- a/src/test.cpp
+++ b/src/test.cpp
@@ -161,10 +161,15 @@ int main()
assert(jid2.domain == "ツ.coucou");
assert(jid2.resource == "coucou@coucou/coucou");
- // Nodeprep
- const std::string& badjid("~louiz@EpiK-7D9D1FDE.poez.io");
+ // Jidprep
+ const std::string& badjid("~zigougou@EpiK-7D9D1FDE.poez.io/Boujour/coucou/slt");
const std::string correctjid = jidprep(badjid);
- assert(correctjid == "~louiz@epik-7d9d1fde.poez.io");
+ assert(correctjid == "~zigougou@epik-7d9d1fde.poez.io/Boujour/coucou/slt");
+
+ const std::string& badjid2("Zigougou@poez.io");
+ const std::string correctjid2 = jidprep(badjid2);
+ std::cout << correctjid2 << std::endl;
+ assert(correctjid2 == "zigougou@poez.io");
/**
* Config
diff --git a/src/xmpp/jid.cpp b/src/xmpp/jid.cpp
index 4f9917b..e3b0c8f 100644
--- a/src/xmpp/jid.cpp
+++ b/src/xmpp/jid.cpp
@@ -59,7 +59,22 @@ std::string jidprep(const std::string& original)
return "";
}
- return std::string(local) + "@" + domain;
+ // If there is no resource, stop here
+ if (jid.resource.empty())
+ return std::string(local) + "@" + domain;
+
+ // Otherwise, also process the resource part
+ char resource[max_jid_part_len] = {};
+ memcpy(resource, jid.resource.data(), jid.resource.size());
+ rc = static_cast<Stringprep_rc>(::stringprep(resource, max_jid_part_len,
+ static_cast<Stringprep_profile_flags>(0), stringprep_xmpp_resourceprep));
+ if (rc != STRINGPREP_OK)
+ {
+ log_error(error_msg + stringprep_strerror(rc));
+ return "";
+ }
+ return std::string(local) + "@" + domain + "/" + resource;
+
#else
(void)original;
return "";