}
char *hdr = msg_get_header(req, "Transport");
if (!hdr)
- return;
+ goto error;
char *p;
p = strstr(hdr, "control_port=");
if (!p)
- return;
+ goto error;
p = strchr(p, '=') + 1;
cport = atoi(p);
p = strstr(hdr, "timing_port=");
if (!p)
- return;
+ goto error;
p = strchr(p, '=') + 1;
tport = atoi(p);
rtsp_take_player();
rtp_setup(&conn->remote, cport, tport, active_remote, &lsport,&lcport,<port);
if (!lsport)
- return;
+ goto error;
char *q;
p = strstr(hdr,"control_port=");
if (p) {
msg_add_header(resp, "Session", "1");
resp->respcode = 200;
+ return;
+
+error:
+ warn("Error in setup request.");
+ pthread_mutex_unlock(&play_lock);
+ resp->respcode = 451; // invalid arguments
}
static void handle_ignore(rtsp_conn_info *conn,
if (!paesiv || !prsaaeskey || !pfmtp) {
warn("required params missing from announce");
- return;
+ goto out;
}
int len, keylen;
if (len != 16) {
warn("client announced aeskey of %d bytes, wanted 16", len);
free(aesiv);
- return;
+ goto out;
}
memcpy(conn->stream.aesiv, aesiv, 16);
free(aesiv);
if (keylen != 16) {
warn("client announced rsaaeskey of %d bytes, wanted 16", keylen);
free(aeskey);
- return;
+ goto out;
}
memcpy(conn->stream.aeskey, aeskey, 16);
free(aeskey);
resp->respcode = 453;
debug(1,"Already playing.");
}
+
+out:
+ if (resp->respcode != 200 && resp->respcode != 453) {
+ pthread_mutex_unlock(&play_lock);
+ }
}