size_t i, j = 0, n = 0, dc = 42;
addr->scope_id = 0;
if (str.len > 2 && str.buf[0] == '[') str.buf++, str.len -= 2;
- if (mg_v4mapped(str, addr)) return true;
+ if (mg_v4mapped(str, addr)) return true; // sets addr->is_ip6
for (i = 0; i < str.len; i++) {
if ((str.buf[i] >= '0' && str.buf[i] <= '9') ||
(str.buf[i] >= 'a' && str.buf[i] <= 'f') ||
if (n > 14) return false;
addr->ip[n] = addr->ip[n + 1] = 0; // For trailing ::
} else if (str.buf[i] == '%') { // Scope ID, last in string
- return mg_str_to_num(mg_str_n(&str.buf[i + 1], str.len - i - 1), 10,
- &addr->scope_id, sizeof(uint8_t));
+ if (mg_str_to_num(mg_str_n(&str.buf[i + 1], str.len - i - 1), 10,
+ &addr->scope_id, sizeof(uint8_t))) {
+ addr->is_ip6 = true;
+ return true;
+ } else {
+ return false;
+ }
} else {
return false;
}
size_t i, j = 0, n = 0, dc = 42;
addr->scope_id = 0;
if (str.len > 2 && str.buf[0] == '[') str.buf++, str.len -= 2;
- if (mg_v4mapped(str, addr)) return true;
+ if (mg_v4mapped(str, addr)) return true; // sets addr->is_ip6
for (i = 0; i < str.len; i++) {
if ((str.buf[i] >= '0' && str.buf[i] <= '9') ||
(str.buf[i] >= 'a' && str.buf[i] <= 'f') ||
if (n > 14) return false;
addr->ip[n] = addr->ip[n + 1] = 0; // For trailing ::
} else if (str.buf[i] == '%') { // Scope ID, last in string
- return mg_str_to_num(mg_str_n(&str.buf[i + 1], str.len - i - 1), 10,
- &addr->scope_id, sizeof(uint8_t));
+ if (mg_str_to_num(mg_str_n(&str.buf[i + 1], str.len - i - 1), 10,
+ &addr->scope_id, sizeof(uint8_t))) {
+ addr->is_ip6 = true;
+ return true;
+ } else {
+ return false;
+ }
} else {
return false;
}
ASSERT(mg_url_decode("a=%123", 6, buf, sizeof(buf), 0) == 4 &&
buf[2] == 0x12 && buf[3] == '3');
- memset(a.ip, 0xaa, sizeof(a.ip));
+ memset(&a, 0, sizeof(a));
ASSERT(mg_aton(mg_str("::1%1"), &a) == true);
ASSERT(a.is_ip6 == true);
ASSERT(a.scope_id == 1);
- memset(a.ip, 0xaa, sizeof(a.ip));
+ memset(&a, 0, sizeof(a));
ASSERT(mg_aton(mg_str("abcd::aabb:ccdd%17"), &a) == true);
ASSERT(a.is_ip6 == true);
ASSERT(a.scope_id == 17);
- memset(a.ip, 0xaa, sizeof(a.ip));
+ memset(&a, 0xaa, sizeof(a)), a.is_ip6 = false;
ASSERT(mg_aton(mg_str("::1%17"), &a) == true);
ASSERT(a.is_ip6 == true);
ASSERT(a.scope_id == 17);
- memset(a.ip, 0xaa, sizeof(a.ip));
+ memset(&a, 0xaa, sizeof(a)), a.is_ip6 = false;
ASSERT(mg_aton(mg_str("::1%255"), &a) == true);
ASSERT(a.is_ip6 == true);
ASSERT(a.scope_id == 255);