~singpolyma/biboumi

ad0465b32051e224f6a234f3ed36494905e59cbf — Florent Le Coz 9 years ago d5324ac
Decode incoming JIDs local part according to xep 0106

This let users send message to nicks such as Q@CServe.quakenet.org

fix #3047
3 files changed, 11 insertions(+), 1 deletions(-)

M louloulibs
M src/irc/iid.cpp
M src/test.cpp
M louloulibs => louloulibs +1 -1
@@ 1,1 1,1 @@
Subproject commit 99757a44b49619ff59cae9e6d983a3b7c20c56bf
Subproject commit 88d2b136e5f133f0d0dc01f59449284f663d53ea

M src/irc/iid.cpp => src/irc/iid.cpp +2 -0
@@ 1,5 1,6 @@
#include <utils/tolower.hpp>
#include <config/config.hpp>
#include <utils/encoding.hpp>

#include <irc/iid.hpp>



@@ 68,6 69,7 @@ Iid::Iid():
void Iid::set_local(const std::string& loc)
{
  this->local = utils::tolower(loc);
  xep0106::decode(local);
}

void Iid::set_server(const std::string& serv)

M src/test.cpp => src/test.cpp +8 -0
@@ 396,7 396,15 @@ int main()
    assert(iid6.get_server() == "fixed.example.com");
    assert(iid6.is_channel);
    assert(!iid6.is_user);

    Config::set("fixed_irc_server", "", false);
  }

  std::cout << color << "Testing JID (xep 0106) decoding…" << reset << std::endl;
  assert(Iid{"space\\20cadet!"}.get_local() == "space cadet");
  assert(Iid{"call\\20me\\20\\22ishmael\\22!"}.get_local() == "call me \"ishmael\"");
  assert(Iid{"\\2f.fanboy!"}.get_local() == "/.fanboy");
  assert(Iid{"Q\\40CServe.quakenet.org!"}.get_local() == "q@cserve.quakenet.org");

  return 0;
}