~singpolyma/biboumi

ref: 0391f17f999618decffaf3c9261024ab04a33f63 biboumi/src/irc/iid.hpp -rw-r--r-- 1.9 KiB
0391f17f — Emmanuel Gil Peyrot Add XEP-0106 support to the bridge 7 years ago
                                                                                
bf7b05ef Florent Le Coz
7c1a3899 Florent Le Coz
bf7b05ef Florent Le Coz
e1d69806 Florent Le Coz
af420738 louiz’
bf7b05ef Florent Le Coz
7c1a3899 Florent Le Coz
0391f17f Emmanuel Gil Peyrot
7c1a3899 Florent Le Coz
bf7b05ef Florent Le Coz
2d11a5f4 louiz’
bf7b05ef Florent Le Coz
2df0ebf2 Florent Le Coz
7c1a3899 Florent Le Coz
bf7b05ef Florent Le Coz
7c1a3899 Florent Le Coz
bf7b05ef Florent Le Coz
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#ifndef IID_INCLUDED
# define IID_INCLUDED

#include <string>

/**
 * A name representing an IRC channel on an IRC server, or an IRC user on an
 * IRC server, or just an IRC server.
 *
 * The separator for an user is '!', for a channel it's '%'. If no separator
 * is present, it's just an irc server.
 * It’s possible to have an empty-string server, but it makes no sense in
 * the biboumi context.
 *
 * #test%irc.example.org has :
 * - local: "#test" (the # is part of the name, it could very well be absent, or & (for example) instead)
 * - server: "irc.example.org"
 * - is_channel: true
 * - is_user: false
 *
 * %irc.example.org:
 * - local: ""
 * - server: "irc.example.org"
 * - is_channel: true
 * - is_user: false
 * Note: this is the special empty-string channel, used internal in biboumi
 * but has no meaning on IRC.
 *
 * foo!irc.example.org
 * - local: "foo"
 * - server: "irc.example.org"
 * - is_channel: false
 * - is_user: true
 * Note: the empty-string user (!irc.example.org) has no special meaning in biboumi
 *
 * irc.example.org:
 * - local: ""
 * - server: "irc.example.org"
 * - is_channel: false
 * - is_user: false
 */
class Iid
{
public:
  Iid(const std::string& iid);
  Iid();
  Iid(const Iid&) = default;

  Iid(Iid&&) = delete;
  Iid& operator=(const Iid&) = delete;
  Iid& operator=(Iid&&) = delete;

  void set_local(const std::string& loc);
  void set_server(const std::string& serv);
  const std::string& get_local() const;
  const std::string get_encoded_local() const;
  const std::string& get_server() const;

  bool is_channel;
  bool is_user;

  std::string get_sep() const;

  std::tuple<std::string, std::string> to_tuple() const;

private:

  void init(const std::string& iid);
  void init_with_fixed_server(const std::string& iid, const std::string& hostname);

  std::string local;
  std::string server;
};

namespace std {
  const std::string to_string(const Iid& iid);
}

#endif // IID_INCLUDED