- sdp_t *sdp = sdp_init(data, datalen);
- logger_log(&conn->raop->logger, LOGGER_DEBUG, "rsaaeskey: %s\n", sdp_get_rsaaeskey(sdp));
- logger_log(&conn->raop->logger, LOGGER_DEBUG, "aesiv: %s\n", sdp_get_aesiv(sdp));
-
- aeskeylen = rsakey_decrypt(raop->rsakey, aeskey, sizeof(aeskey),
- sdp_get_rsaaeskey(sdp));
- aesivlen = rsakey_parseiv(raop->rsakey, aesiv, sizeof(aesiv),
- sdp_get_aesiv(sdp));
- logger_log(&conn->raop->logger, LOGGER_DEBUG, "aeskeylen: %d\n", aeskeylen);
- logger_log(&conn->raop->logger, LOGGER_DEBUG, "aesivlen: %d\n", aesivlen);
-
- conn->raop_rtp = raop_rtp_init(&raop->logger, &raop->callbacks, sdp_get_fmtp(sdp), aeskey, aesiv);
+ sdp_t *sdp;
+ const char *remotestr, *rtpmapstr, *fmtpstr, *aeskeystr, *aesivstr;
+
+ sdp = sdp_init(data, datalen);
+ remotestr = sdp_get_connection(sdp);
+ rtpmapstr = sdp_get_rtpmap(sdp);
+ fmtpstr = sdp_get_fmtp(sdp);
+ aeskeystr = sdp_get_rsaaeskey(sdp);
+ aesivstr = sdp_get_aesiv(sdp);
+
+ logger_log(conn->raop->logger, LOGGER_DEBUG, "connection: %s", remotestr);
+ logger_log(conn->raop->logger, LOGGER_DEBUG, "rtpmap: %s", rtpmapstr);
+ logger_log(conn->raop->logger, LOGGER_DEBUG, "fmtp: %s", fmtpstr);
+ logger_log(conn->raop->logger, LOGGER_DEBUG, "rsaaeskey: %s", aeskeystr);
+ logger_log(conn->raop->logger, LOGGER_DEBUG, "aesiv: %s", aesivstr);
+
+ aeskeylen = rsakey_decrypt(raop->rsakey, aeskey, sizeof(aeskey), aeskeystr);
+ aesivlen = rsakey_parseiv(raop->rsakey, aesiv, sizeof(aesiv), aesivstr);
+ logger_log(conn->raop->logger, LOGGER_DEBUG, "aeskeylen: %d", aeskeylen);
+ logger_log(conn->raop->logger, LOGGER_DEBUG, "aesivlen: %d", aesivlen);
+
+ if (conn->raop_rtp) {
+ /* This should never happen */
+ raop_rtp_destroy(conn->raop_rtp);
+ conn->raop_rtp = NULL;
+ }
+ conn->raop_rtp = raop_rtp_init(raop->logger, &raop->callbacks, remotestr, rtpmapstr, fmtpstr, aeskey, aesiv);
+ if (!conn->raop_rtp) {
+ logger_log(conn->raop->logger, LOGGER_ERR, "Error initializing the audio decoder");
+ http_response_set_disconnect(res, 1);
+ }