if (from == NULL)
;
else if (from->ss_family == AF_INET) {
- struct sockaddr_in const *sin = (void *)from;
- su_inet_ntop(AF_INET, &sin->sin_addr, host, sizeof host);
- port = sin->sin_port;
+ struct sockaddr_in sin;
+ memcpy(&sin, from, sizeof sin);
+ su_inet_ntop(AF_INET, &sin.sin_addr, host, sizeof host);
+ port = sin.sin_port;
}
#if HAVE_SIN6
else if (from->ss_family == AF_INET6) {
- struct sockaddr_in6 const *sin6 = (void *)from;
- su_inet_ntop(AF_INET6, &sin6->sin6_addr, host, sizeof host);
- port = sin6->sin6_port;
+ struct sockaddr_in6 sin6;
+ memcpy(&sin6, from, sizeof sin6);
+ su_inet_ntop(AF_INET6, &sin6.sin6_addr, host, sizeof host);
+ port = sin6.sin6_port;
}
#endif
sns = &ctx->dnsc_serv[i];
if (sns->sa.sa_family == AF_INET) {
sin6.sin6_port = sns->sin.sin_port;
- ((struct in_addr*)&sin6.sin6_addr)[3] = sns->sin.sin_addr;
+ memcpy(&sin6.sin6_addr.s6_addr[12], &sns->sin.sin_addr, sizeof(struct in_addr));
sns->sin6 = sin6;
}
}
case SWITCH_STUN_ATTR_MAPPED_ADDRESS:
if (attr->type) {
if (funny) {
- ((switch_stun_ip_t *) attr->value)->address ^= ntohl(0xabcdabcd);
+ switch_stun_ip_t *tmp = (switch_stun_ip_t *)attr->value;
+ tmp->address ^= ntohl(0xabcdabcd);
}
switch_stun_packet_attribute_get_mapped_address(attr, rip, &rport);
}
int flags)
{
char host[NI_MAXHOST], serv[NI_MAXSERV];
- struct sockaddr_storage ss;
+ struct sockaddr_in6 si6;
const struct sockaddr *addr;
const char *colon;
if (flags & SWITCH_URI_NO_SCOPE && sa->family == AF_INET6) {
- memcpy(&ss, &sa->sa, sa->salen);
- ((struct sockaddr_in6*) (intptr_t) &ss)->sin6_scope_id = 0;
- addr = (const struct sockaddr*) (intptr_t)&ss;
+ memcpy(&si6, &sa->sa, sa->salen);
+ si6.sin6_scope_id = 0;
+
+ addr = (const struct sockaddr*) &si6;
} else {
addr = (const struct sockaddr*) (intptr_t)&sa->sa;
}