1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- #include "CtlUtil.hpp"
- #ifdef ZT_CONTROLLER_USE_LIBPQ
- #include <sstream>
- #include <iomanip>
- namespace ZeroTier {
- const char *_timestr()
- {
- time_t t = time(0);
- char *ts = ctime(&t);
- char *p = ts;
- if (!p)
- return "";
- while (*p) {
- if (*p == '\n') {
- *p = (char)0;
- break;
- }
- ++p;
- }
- return ts;
- }
- std::vector<std::string> split(std::string str, char delim){
- std::istringstream iss(str);
- std::vector<std::string> tokens;
- std::string item;
- while(std::getline(iss, item, delim)) {
- tokens.push_back(item);
- }
- return tokens;
- }
- std::string url_encode(const std::string &value) {
- std::ostringstream escaped;
- escaped.fill('0');
- escaped << std::hex;
- for (std::string::const_iterator i = value.begin(), n = value.end(); i != n; ++i) {
- std::string::value_type c = (*i);
- // Keep alphanumeric and other accepted characters intact
- if (isalnum(c) || c == '-' || c == '_' || c == '.' || c == '~') {
- escaped << c;
- continue;
- }
- // Any other characters are percent-encoded
- escaped << std::uppercase;
- escaped << '%' << std::setw(2) << int((unsigned char) c);
- escaped << std::nouppercase;
- }
- return escaped.str();
- }
- } // namespace ZeroTier
- #endif
|