9#ifndef SNBMODULES_INCLUDE_SNBMODULES_IP_FORMAT_HPP_
10#define SNBMODULES_INCLUDE_SNBMODULES_IP_FORMAT_HPP_
33 explicit IPFormat(
const std::string& ip =
"0.0.0.0",
int port = 0)
67 if (port < 0 || port > 65535) {
68 throw std::invalid_argument(
"Port must be between 0 and 65535");
75 inline char*
strtok_s(
char* s,
const char* delim,
char** context) {
return strtok_r(s, delim, context); }
83 throw std::invalid_argument(
"IP address cannot be empty");
87 std::vector<std::string> ip_port_pair;
88 char* next_token =
nullptr;
90 char* ip_char =
new char[ip.length() + 1];
91 strcpy(ip_char, ip.c_str());
93 char* token =
strtok_s(ip_char,
":", &next_token);
94 while (token !=
nullptr) {
95 ip_port_pair.emplace_back(std::string(token));
96 token =
strtok_s(
nullptr,
":", &next_token);
101 if (ip_port_pair.size() != 1 && ip_port_pair.size() != 2) {
102 throw std::invalid_argument(
"Invalid IP address format (IP:PORT or IP)");
108 if (ip_port_pair.size() == 2) {
109 set_port(std::stoi(ip_port_pair[1]));
112 m_ip = ip_port_pair[0];