diff options
author | Jan Schmidt <thaytan@noraisin.net> | 2009-02-27 10:16:57 +0000 |
---|---|---|
committer | Jan Schmidt <thaytan@noraisin.net> | 2009-02-27 10:41:43 +0000 |
commit | 4a046a08a336e1cde0105f40461f67491f5b22a1 (patch) | |
tree | 524b1c1d5207ec2f361c1de28eef2dc9263fc9f2 /ext/apexsink/gstapexraop.c | |
parent | 3ee87fa8f2591f2780b22fe8530038c0206d2c78 (diff) | |
download | gstreamer-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.c | 24 |
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" |