int ast_sockaddr_is_ipv4(const struct ast_sockaddr *addr)
{
- return addr->ss.ss_family == AF_INET &&
- addr->len == sizeof(struct sockaddr_in);
+ /*
+ * Test addr->len first to be tolerant of an ast_sockaddr_setnull()
+ * addr. In that case addr->len might be the only value initialized.
+ */
+ return addr->len == sizeof(struct sockaddr_in)
+ && addr->ss.ss_family == AF_INET;
}
int ast_sockaddr_is_ipv4_mapped(const struct ast_sockaddr *addr)
int ast_sockaddr_is_ipv6(const struct ast_sockaddr *addr)
{
- return addr->ss.ss_family == AF_INET6 &&
- addr->len == sizeof(struct sockaddr_in6);
+ /*
+ * Test addr->len first to be tolerant of an ast_sockaddr_setnull()
+ * addr. In that case addr->len might be the only value initialized.
+ */
+ return addr->len == sizeof(struct sockaddr_in6)
+ && addr->ss.ss_family == AF_INET6;
}
int ast_sockaddr_is_any(const struct ast_sockaddr *addr)
if (st.username) {
append_attr_string(&attr, STUN_USERNAME, st.username, &resplen, &respleft);
snprintf(combined, sizeof(combined), "%16s%16s", st.username + 16, st.username);
+ } else {
+ combined[0] = '\0';
}
append_attr_address(&attr, STUN_MAPPED_ADDRESS, src, &resplen, &respleft);
stun_req_id(req);
reqlen = 0;
reqleft = sizeof(req_buf) - sizeof(struct stun_header);
- req->msgtype = 0;
- req->msglen = 0;
attr = (struct stun_attr *) req->ies;
if (username) {
append_attr_string(&attr, STUN_USERNAME, username, &reqlen, &reqleft);