bool ParseIPv4Part(const char *str, uint32_t *out_addr, const char **next /*NULL*/) { const char *localNext; if (!parseIPv4Start(str, out_addr, &localNext)) return false; if (next) *next = localNext; return true; }
bool ParseIPv4(const char *str, uint32_t *out_addr, const char **next /*NULL*/ ) { const char *localNext; if(!parseIPv4Start(str, out_addr, &localNext)) return false; if (localNext[0] != '\0' && !::isspace(localNext[0])) return false; if (next) *next = localNext; return true; }
bool ParseIPv4Block(const char *str, uint32_t *out_addr, uint8_t *out_bits ) { const char *localNext; uint64_t bits; if(!parseIPv4Start(str, out_addr, &localNext)) return false; if (localNext[0] != '/' || ::isspace(localNext[1])) return false; localNext++; if (!StringToInt(localNext, bits)) return false; if (bits > 255) return false; *out_bits = (uint8_t)bits; return true; }
bool ParseIPv4Port(const char *str, uint32_t *out_addr, uint16_t *outPort) { const char *localNext; uint64_t port; if(!parseIPv4Start(str, out_addr, &localNext)) return false; if (localNext[0] != ':' || ::isspace(localNext[1])) return false; localNext++; if (!StringToInt(localNext, port)) return false; if (port > UINT16_MAX) return false; *outPort = (uint16_t)port; return true; }