14#ifndef OPENVPN_COMMON_HEXSTR_H
15#define OPENVPN_COMMON_HEXSTR_H
47 return '0' +
static_cast<char>(c);
49 return static_cast<char>((caps ?
'A' :
'a') - 10 + c);
66 if (c >=
'0' && c <=
'9')
68 if (c >=
'a' && c <=
'f')
70 if (c >=
'A' && c <=
'F')
133inline std::string
render_hex(
const unsigned char *data,
size_t size,
const bool caps =
false)
138 ret.reserve(size * 2 + 1);
159inline std::string
render_hex(
const void *data,
const size_t size,
const bool caps =
false)
161 return render_hex((
const unsigned char *)data, size, caps);
178inline std::string
render_hex_sep(
const unsigned char *data,
size_t size,
const char sep,
const bool caps =
false)
183 ret.reserve(size * 3);
210inline std::string
render_hex_sep(
const void *data,
const size_t size,
const char sep,
const bool caps =
false)
212 return render_hex_sep((
const unsigned char *)data, size, sep, caps);
231 ret.reserve(data.size() * 2 + 1);
232 for (
size_t i = 0; i < data.size(); ++i)
253inline std::string
dump_hex(
const unsigned char *data,
size_t size)
257 const unsigned int mask = 0x0F;
258 std::ostringstream
os;
262 for (i = 0; i < size; ++i)
268 os <<
" " << chars <<
'\n';
271 os << std::setfill(
' ') << std::setw(8) << i <<
":";
273 const unsigned char c = data[i];
274 os <<
' ' << std::setfill(
'0') << std::setw(2) << (
unsigned int)c;
281 os << string::spaces(clamp_to_typerange<int>(2 + (((i - 1) & mask) ^ mask) * 3)) << chars <<
'\n';
296inline std::string
dump_hex(
void *data,
size_t size)
298 return dump_hex((
const unsigned char *)data, size);
313 return dump_hex((
const unsigned char *)
str.c_str(),
str.length());
330 return dump_hex(data.c_data(), data.size());
352 using vvalue_t =
typename V::value_type;
353 const int len = int(
str.length());
355 for (i = 0; i <= len - 2; i += 2)
359 if (high == -1 || low == -1)
360 throw parse_hex_error();
361 dest.push_back(
static_cast<vvalue_t
>((high << 4) + low));
364 throw parse_hex_error();
389 const char c =
str[i++];
441 if (!parse_hex_number<T>(
str.c_str(),
ret))
442 throw parse_hex_error();
461 unsigned char buf[
sizeof(T)];
462 for (
size_t i =
sizeof(T); i-- > 0;)
464 buf[i] = value & 0xFF;
485 return std::string(b.
str2(), 2);
const char * str2() const
RenderHexByte(const unsigned char byte, const bool caps=false)
#define OPENVPN_SIMPLE_EXCEPTION(C)
bool is_printable(const char c)
std::string render_hex_generic(const V &data, const bool caps=false)
bool parse_hex_number(const char *str, T &retval)
void parse_hex(V &dest, const std::string &str)
int parse_hex_char(const int c)
std::string render_hex(const unsigned char *data, size_t size, const bool caps=false)
char render_hex_char(const int c, const bool caps=false)
std::string render_hex_number(T value, const bool caps=false)
std::string render_hex_sep(const unsigned char *data, size_t size, const char sep, const bool caps=false)
std::string dump_hex(const unsigned char *data, size_t size)
os<< "Session Name: "<< tbc-> session_name<< '\n';os<< "Layer: "<< tbc-> layer str()<< '\n'