|
|
|
@ -434,31 +434,31 @@ static struct sdp_attribute *attr_get_by_id_m_s(struct sdp_media *m, enum attr_i |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
static int __parse_address(sockaddr_t *out, str *network_type, str *address_type, str *address) { |
|
|
|
static bool __parse_address(sockaddr_t *out, str *network_type, str *address_type, str *address) { |
|
|
|
sockfamily_t *af; |
|
|
|
|
|
|
|
if (network_type) { |
|
|
|
if (network_type->len != 2) |
|
|
|
return -1; |
|
|
|
return false; |
|
|
|
if (memcmp(network_type->s, "IN", 2) |
|
|
|
&& memcmp(network_type->s, "in", 2)) |
|
|
|
return -1; |
|
|
|
return false; |
|
|
|
} |
|
|
|
|
|
|
|
if (!address_type->len) { |
|
|
|
if (!sockaddr_parse_any_str(out, address)) |
|
|
|
return -1; |
|
|
|
return 0; |
|
|
|
return false; |
|
|
|
return true; |
|
|
|
} |
|
|
|
|
|
|
|
af = get_socket_family_rfc(address_type); |
|
|
|
if (sockaddr_parse_str(out, af, address)) |
|
|
|
return -1; |
|
|
|
return false; |
|
|
|
|
|
|
|
return 0; |
|
|
|
return true; |
|
|
|
} |
|
|
|
|
|
|
|
static int parse_address(struct network_address *address) { |
|
|
|
static bool parse_address(struct network_address *address) { |
|
|
|
return __parse_address(&address->parsed, &address->network_type, |
|
|
|
&address->address_type, &address->address); |
|
|
|
} |
|
|
|
@ -470,10 +470,10 @@ static int parse_address(struct network_address *address) { |
|
|
|
EXTRACT_TOKEN(field.address); } while (0) |
|
|
|
#define EXTRACT_NETWORK_ADDRESS(field) \ |
|
|
|
do { EXTRACT_NETWORK_ADDRESS_NP(field); \ |
|
|
|
if (parse_address(&output->field)) return -1; } while (0) |
|
|
|
if (!parse_address(&output->field)) return -1; } while (0) |
|
|
|
#define EXTRACT_NETWORK_ADDRESS_NF(field) \ |
|
|
|
do { EXTRACT_NETWORK_ADDRESS_NP(field); \ |
|
|
|
if (parse_address(&output->field)) { \ |
|
|
|
if (!parse_address(&output->field)) { \ |
|
|
|
output->field.parsed.family = get_socket_family_enum(SF_IP4); \ |
|
|
|
output->field.parsed.ipv4.s_addr = 1; \ |
|
|
|
} } while (0) |
|
|
|
@ -1435,7 +1435,7 @@ static int fill_endpoint(struct endpoint *ep, const struct sdp_media *media, sdp |
|
|
|
|
|
|
|
if (!flags->trust_address) { |
|
|
|
if (is_addr_unspecified(&flags->parsed_received_from)) { |
|
|
|
if (__parse_address(&flags->parsed_received_from, NULL, &flags->received_from_family, |
|
|
|
if (!__parse_address(&flags->parsed_received_from, NULL, &flags->received_from_family, |
|
|
|
&flags->received_from_address)) |
|
|
|
return -1; |
|
|
|
} |
|
|
|
|