CtlUtil.cpp 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. #include "CtlUtil.hpp"
  2. #ifdef ZT_CONTROLLER_USE_LIBPQ
  3. #include <sstream>
  4. #include <iomanip>
  5. namespace ZeroTier {
  6. const char *_timestr()
  7. {
  8. time_t t = time(0);
  9. char *ts = ctime(&t);
  10. char *p = ts;
  11. if (!p)
  12. return "";
  13. while (*p) {
  14. if (*p == '\n') {
  15. *p = (char)0;
  16. break;
  17. }
  18. ++p;
  19. }
  20. return ts;
  21. }
  22. std::vector<std::string> split(std::string str, char delim){
  23. std::istringstream iss(str);
  24. std::vector<std::string> tokens;
  25. std::string item;
  26. while(std::getline(iss, item, delim)) {
  27. tokens.push_back(item);
  28. }
  29. return tokens;
  30. }
  31. std::string url_encode(const std::string &value) {
  32. std::ostringstream escaped;
  33. escaped.fill('0');
  34. escaped << std::hex;
  35. for (std::string::const_iterator i = value.begin(), n = value.end(); i != n; ++i) {
  36. std::string::value_type c = (*i);
  37. // Keep alphanumeric and other accepted characters intact
  38. if (isalnum(c) || c == '-' || c == '_' || c == '.' || c == '~') {
  39. escaped << c;
  40. continue;
  41. }
  42. // Any other characters are percent-encoded
  43. escaped << std::uppercase;
  44. escaped << '%' << std::setw(2) << int((unsigned char) c);
  45. escaped << std::nouppercase;
  46. }
  47. return escaped.str();
  48. }
  49. } // namespace ZeroTier
  50. #endif