summaryrefslogtreecommitdiff
path: root/ext/apexsink/gstapexraop.c
diff options
context:
space:
mode:
authorJan Schmidt <thaytan@noraisin.net>2009-02-27 10:16:57 +0000
committerJan Schmidt <thaytan@noraisin.net>2009-02-27 10:41:43 +0000
commit4a046a08a336e1cde0105f40461f67491f5b22a1 (patch)
tree524b1c1d5207ec2f361c1de28eef2dc9263fc9f2 /ext/apexsink/gstapexraop.c
parent3ee87fa8f2591f2780b22fe8530038c0206d2c78 (diff)
downloadgstreamer-plugins-bad-4a046a08a336e1cde0105f40461f67491f5b22a1.tar.gz
apexsink: Use a union to avoid type-punning strict aliasing compiler warning.
Diffstat (limited to 'ext/apexsink/gstapexraop.c')
-rw-r--r--ext/apexsink/gstapexraop.c24
1 files changed, 17 insertions, 7 deletions
diff --git a/ext/apexsink/gstapexraop.c b/ext/apexsink/gstapexraop.c
index 42b707caa..98b7d8634 100644
--- a/ext/apexsink/gstapexraop.c
+++ b/ext/apexsink/gstapexraop.c
@@ -231,7 +231,17 @@ gst_apexraop_connect (GstApExRAOP * con)
creq[GST_APEX_RAOP_SDP_DEFAULT_LENGTH],
hreq[GST_APEX_RAOP_HDR_DEFAULT_LENGTH], *req;
RSA *rsa;
- guchar *mod, *exp, buf[4 + 8 + 16], rsakey[512];
+ guchar *mod, *exp, rsakey[512];
+ union gst_randbytes
+ {
+ struct asvals
+ {
+ gulong url_key;
+ guint64 conn_id;
+ guchar challenge[16];
+ } v;
+ guchar buf[4 + 8 + 16];
+ } randbuf;
gsize size;
struct sockaddr_in ioaddr;
socklen_t iolen;
@@ -257,12 +267,9 @@ gst_apexraop_connect (GstApExRAOP * con)
sizeof (conn->ctrl_sd_in)) < 0)
return GST_RTSP_STS_DESTINATION_UNREACHABLE;
- RAND_bytes (buf, sizeof (buf));
- sprintf ((gchar *) conn->url_abspath, "%lu", *((gulong *) buf));
- ac = g_base64_encode (buf + 12, 16);
- g_strdel (ac, '=');
- sprintf ((char *) conn->cid, "%08lx%08lx", *((gulong *) (buf + 4)),
- *((gulong *) (buf + 8)));
+ RAND_bytes (randbuf.buf, sizeof (randbuf));
+ sprintf ((gchar *) conn->url_abspath, "%lu", randbuf.v.url_key);
+ sprintf ((char *) conn->cid, "%16" G_GINT64_MODIFIER "x", randbuf.v.conn_id);
RAND_bytes (conn->aes_ky, AES_BLOCK_SIZE);
RAND_bytes (conn->aes_iv, AES_BLOCK_SIZE);
@@ -285,6 +292,9 @@ gst_apexraop_connect (GstApExRAOP * con)
getsockname (conn->ctrl_sd, (struct sockaddr *) &ioaddr, &iolen);
inet_ntop (AF_INET, &(ioaddr.sin_addr), inaddr, INET_ADDRSTRLEN);
+ ac = g_base64_encode (randbuf.v.challenge, 16);
+ g_strdel (ac, '=');
+
sprintf (creq,
"v=0\r\n"
"o=iTunes %s 0 IN IP4 %s\r\n"