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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
|
#ifndef _TOX_ADDRESS_H_
#define _TOX_ADDRESS_H_
class ToxHexAddress;
class ToxBinAddress;
class ToxHexAddress
{
private:
std::string hexData;
public:
ToxHexAddress(const char *hex) : hexData(hex) { }
ToxHexAddress(const std::string &hex) : hexData(hex) { }
ToxHexAddress(const ToxHexAddress &address) : hexData(address.hexData) { }
ToxHexAddress(const std::vector<uint8_t> &bin)
{
this->ToxHexAddress::ToxHexAddress(bin.data(), bin.size());
}
ToxHexAddress(const uint8_t *bin, int size = TOX_FRIEND_ADDRESS_SIZE)
{
char *hex = (char*)mir_alloc(size * 2 + 1);
hexData = bin2hex(bin, size, hex);
std::transform(hexData.begin(), hexData.end(), hexData.begin(), ::toupper);
mir_free(hex);
}
const size_t GetLength() const
{
return hexData.length();
}
const ToxHexAddress GetPubKey() const
{
ToxHexAddress pubKey = hexData.substr(0, TOX_PUBLIC_KEY_SIZE * 2).c_str();
return pubKey;
}
operator const char*() const
{
return hexData.c_str();
}
ToxBinAddress ToBin() const;
};
class ToxBinAddress
{
private:
std::vector<uint8_t> binData;
public:
ToxBinAddress(const ToxBinAddress &address) : binData(address.binData) { }
ToxBinAddress(const std::vector<uint8_t> &bin) : binData(bin) { }
ToxBinAddress(const uint8_t *bin, int size = TOX_FRIEND_ADDRESS_SIZE) : binData(bin, bin + size) { }
ToxBinAddress(const std::string &hex)
{
this->ToxBinAddress::ToxBinAddress(hex.c_str());
}
ToxBinAddress(const char *hex)
{
char *endptr;
const char *pos = hex;
int size = mir_strlen(hex) / 2;
uint8_t *result = (uint8_t*)mir_alloc(size);
for (int i = 0; i < size; i++)
{
char buf[5] = { '0', 'x', pos[0], pos[1], 0 };
binData.push_back((uint8_t)strtol(buf, &endptr, 0));
pos += 2;
}
}
const ToxBinAddress GetPubKey() const
{
ToxBinAddress pubKey(binData.data(), TOX_PUBLIC_KEY_SIZE);
return pubKey;
}
operator const uint8_t*() const
{
return binData.data();
}
ToxHexAddress ToHex() const
{
ToxHexAddress hex(binData.data(), binData.size());
return hex;
}
};
ToxBinAddress ToxHexAddress::ToBin() const
{
ToxBinAddress bin(hexData.c_str());
return bin;
}
/*class ToxAddress
{
private:
std::string hexData;
class ToxBytes
{
private:
uint8_t *bytes;
public:
ToxBytes(uint8_t *bytes) : bytes(bytes) { }
~ToxBytes() { if (bytes) mir_free(bytes); }
operator const uint8_t*() { return bytes; }
};
public:
ToxAddress(const char *hex) : hexData(hex) { }
ToxAddress(const std::string &hex) : hexData(hex) { }
ToxAddress(const ToxAddress &address) : hexData(address.hexData) { }
ToxAddress(const uint8_t *bin, int size = TOX_FRIEND_ADDRESS_SIZE)
//: binData(bin, bin + size)
{
char *hex = (char*)mir_alloc(size * 2 + 1);
std::string hexData = bin2hex(bin, size, hex);
std::transform(hexData.begin(), hexData.end(), hexData.begin(), ::toupper);
//mir_free(hex);
}
~ToxAddress()
{
int i = 0;
}
operator const char*() const
{
return hexData.c_str();
}
ToxBytes AsBytes() const
{
char *endptr;
const char *pos = hexData.c_str();
int size = hexData.length() / 2;
uint8_t *result = (uint8_t*)mir_alloc(size);
for (int i = 0; i < size; i++)
{
char buf[5] = { '0', 'x', pos[0], pos[1], 0 };
result[i] = (uint8_t)strtol(buf, &endptr, 0);
pos += 2;
}
return ToxBytes(result);
}
std::string AsPubKey() const
{
return hexData.substr(0, TOX_PUBLIC_KEY_SIZE * 2).c_str();
}
};*/
#endif //_TOX_ADDRESS_H_
|