summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOlivier CrĂȘte <olivier.crete@collabora.com>2017-04-03 12:11:55 -0400
committerOlivier CrĂȘte <olivier.crete@collabora.com>2017-04-03 12:11:55 -0400
commit68ff86f942ff84138074496a53d73f4dacac4444 (patch)
treeadccdd30b3e9d5ea37b302c070429edddb70747e
parentf1e2443256f28fd84e721e028cff1a087903857c (diff)
downloadlibnice-68ff86f942ff84138074496a53d73f4dacac4444.tar.gz
stun: Use unions fix alignment issues
This makes clang happy.
-rw-r--r--socket/udp-turn.c11
-rw-r--r--stun/usages/bind.c18
2 files changed, 22 insertions, 7 deletions
diff --git a/socket/udp-turn.c b/socket/udp-turn.c
index 617e4f3..cc3409b 100644
--- a/socket/udp-turn.c
+++ b/socket/udp-turn.c
@@ -448,12 +448,15 @@ static StunMessageReturn
stun_message_append_ms_connection_id(StunMessage *msg,
uint8_t *ms_connection_id, uint32_t ms_sequence_num)
{
- uint8_t buf[24];
+ union {
+ uint8_t buf8[24];
+ uint32_t buf32[24/4];
+ } buf;
- memcpy(buf, ms_connection_id, 20);
- *(uint32_t*)(buf + 20) = htonl(ms_sequence_num);
+ memcpy(buf.buf8, ms_connection_id, 20);
+ buf.buf32[5] = htonl(ms_sequence_num);
return stun_message_append_bytes (msg, STUN_ATTRIBUTE_MS_SEQUENCE_NUMBER,
- buf, 24);
+ buf.buf8, 24);
}
static void
diff --git a/stun/usages/bind.c b/stun/usages/bind.c
index c5b09ab..8dd7afc 100644
--- a/stun/usages/bind.c
+++ b/stun/usages/bind.c
@@ -99,6 +99,12 @@ StunUsageBindReturn stun_usage_bind_process (StunMessage *msg,
{
int code = -1;
StunMessageReturn val;
+ union {
+ struct sockaddr *sa;
+ struct sockaddr_storage *sas;
+ } sa;
+
+ sa.sa = addr;
if (stun_message_get_method (msg) != STUN_BINDING)
return STUN_USAGE_BIND_RETURN_INVALID;
@@ -124,9 +130,15 @@ StunUsageBindReturn stun_usage_bind_process (StunMessage *msg,
/* ALTERNATE-SERVER mechanism */
if ((code / 100) == 3) {
+ union {
+ struct sockaddr *sa;
+ struct sockaddr_storage *sas;
+ } alternate_sa;
+
+ alternate_sa.sa = alternate_server;
if (alternate_server && alternate_server_len) {
if (stun_message_find_addr (msg, STUN_ATTRIBUTE_ALTERNATE_SERVER,
- (struct sockaddr_storage *) alternate_server,
+ alternate_sa.sas,
alternate_server_len) != STUN_MESSAGE_RETURN_SUCCESS) {
stun_debug (" Unexpectedly missing ALTERNATE-SERVER attribute");
return STUN_USAGE_BIND_RETURN_ERROR;
@@ -152,13 +164,13 @@ StunUsageBindReturn stun_usage_bind_process (StunMessage *msg,
stun_debug ("Received %u-bytes STUN message", stun_message_length (msg));
val = stun_message_find_xor_addr (msg,
- STUN_ATTRIBUTE_XOR_MAPPED_ADDRESS, (struct sockaddr_storage *)addr,
+ STUN_ATTRIBUTE_XOR_MAPPED_ADDRESS, sa.sas,
addrlen);
if (val != STUN_MESSAGE_RETURN_SUCCESS)
{
stun_debug (" No XOR-MAPPED-ADDRESS: %d", val);
val = stun_message_find_addr (msg,
- STUN_ATTRIBUTE_MAPPED_ADDRESS, (struct sockaddr_storage *)addr,
+ STUN_ATTRIBUTE_MAPPED_ADDRESS, sa.sas,
addrlen);
if (val != STUN_MESSAGE_RETURN_SUCCESS)
{