mirror of https://github.com/GOSTSec/poolserver
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
127 lines
3.2 KiB
127 lines
3.2 KiB
#include "Util.h" |
|
|
|
#include <boost/algorithm/string.hpp> |
|
|
|
std::string Util::Date(const char* format, bool utc) |
|
{ |
|
boost::posix_time::ptime now; |
|
if (utc) |
|
now = boost::posix_time::second_clock::universal_time(); |
|
else |
|
now = boost::posix_time::second_clock::local_time(); |
|
|
|
std::stringstream ss; |
|
boost::posix_time::time_facet *facet = new boost::posix_time::time_facet(format); |
|
ss.imbue(std::locale(std::cout.getloc(), facet)); |
|
ss << now; |
|
|
|
return ss.str(); |
|
} |
|
|
|
uint32 Util::Date(bool utc) |
|
{ |
|
boost::posix_time::ptime now; |
|
if (utc) |
|
now = boost::posix_time::second_clock::universal_time(); |
|
else |
|
now = boost::posix_time::second_clock::local_time(); |
|
|
|
boost::posix_time::ptime epoch(boost::gregorian::date(1970,1,1)); |
|
boost::posix_time::time_duration diff = now - epoch; |
|
return diff.total_seconds(); |
|
} |
|
|
|
std::string Util::FS(const char *str, ...) |
|
{ |
|
va_list ap; |
|
va_start(ap, str); |
|
|
|
char text[MAX_FORMAT_LEN]; |
|
vsnprintf(text, MAX_FORMAT_LEN, str, ap); |
|
|
|
va_end(ap); |
|
|
|
return std::string(text); |
|
} |
|
|
|
std::vector<std::string> Util::Explode(std::string input, std::string delim) |
|
{ |
|
std::vector<std::string> strs; |
|
boost::split(strs, input, boost::is_any_of(delim)); |
|
return strs; |
|
} |
|
|
|
std::string Util::ToBase64(std::string input, bool linebreaks) |
|
{ |
|
uint32_t writePaddChars = (3 - input.length() % 3) % 3; |
|
|
|
if (linebreaks) { |
|
std::string base64(it_base64_lb_t(input.begin()), it_base64_lb_t(input.end())); |
|
base64.append(writePaddChars, '='); |
|
return base64; |
|
} else { |
|
std::string base64(it_base64_t(input.begin()), it_base64_t(input.end())); |
|
base64.append(writePaddChars, '='); |
|
return base64; |
|
} |
|
} |
|
|
|
std::string Util::FromBase64(std::string input) |
|
{ |
|
boost::algorithm::trim(input); |
|
uint32_t paddChars = count(input.begin(), input.end(), '='); |
|
std::replace(input.begin(), input.end(), '=', 'A'); // replace '=' by base64 encoding of '\0' |
|
std::string result(it_binary_t(input.begin()), it_binary_t(input.end())); // decode |
|
result.erase(result.end() - paddChars, result.end()); // erase padding '\0' characters |
|
return result; |
|
} |
|
|
|
uint8 Util::ASCIIToHex(char ch) |
|
{ |
|
if (ch > 47 && ch < 58) // Number |
|
return ch - 48; |
|
else if (ch > 64 && ch < 71) // Uppercase |
|
return ch - 55; |
|
else if (ch > 96 && ch < 103) // Lowercase |
|
return ch - 87; |
|
else |
|
return 0; // Invalid |
|
} |
|
|
|
BinaryData Util::ASCIIToBin(std::string str) |
|
{ |
|
BinaryData data; |
|
data.resize(str.size()/2, 0); |
|
for (uint64 i = 0; i < str.size(); ++i) { |
|
if (i%2) |
|
data[i/2] += ASCIIToHex(str[i]); |
|
else |
|
data[i/2] += ASCIIToHex(str[i])*16; |
|
} |
|
return data; |
|
} |
|
|
|
std::string Util::BinToASCII(BinaryData data) |
|
{ |
|
std::string str; |
|
for (uint64 i = 0; i < data.size(); ++i) |
|
{ |
|
str += "0123456789abcdef"[data[i]/16]; |
|
str += "0123456789abcdef"[data[i]%16]; |
|
} |
|
return str; |
|
} |
|
|
|
BinaryData Util::Reverse(BinaryData data) |
|
{ |
|
BinaryData out = data; |
|
std::reverse(out.begin(), out.end()); |
|
return out; |
|
} |
|
|
|
BinaryData Util::Join(BinaryData v1, BinaryData v2) |
|
{ |
|
BinaryData v3 = v1; |
|
v3.insert(v3.end(), v2.begin(), v2.end()); |
|
return v3; |
|
}
|
|
|