SAT>IP Server: fixes, fixes...

This commit is contained in:
Jaroslav Kysela 2015-03-11 15:13:24 +01:00
parent cd99597a5c
commit 8b7c67abec

View file

@ -229,7 +229,7 @@ rtsp_clean(session_t *rs)
subscription_unsubscribe(rs->subs, 0);
rs->subs = NULL;
}
if (rs->prch.prch_pro)
if (rs->prch.prch_id)
profile_chain_close(&rs->prch);
if (rs->mux && rs->mux_created)
rs->mux->mm_delete((mpegts_mux_t *)rs->mux, 1);
@ -267,9 +267,9 @@ rtsp_start
}
if (mux == NULL && mn2) {
mux = (dvb_mux_t *)
mn->mn_create_mux(mn2, (void *)(intptr_t)rs->nsession,
MPEGTS_ONID_NONE, MPEGTS_TSID_NONE,
&rs->dmc, 0);
mn2->mn_create_mux(mn2, (void *)(intptr_t)rs->nsession,
MPEGTS_ONID_NONE, MPEGTS_TSID_NONE,
&rs->dmc, 0);
if (mux)
created = 1;
}
@ -595,7 +595,7 @@ static int
rtsp_process_play(http_connection_t *hc, int setup)
{
session_t *rs;
int errcode = HTTP_STATUS_BAD_REQUEST, r, findex = 0;
int errcode = HTTP_STATUS_BAD_REQUEST, r, findex = 0, valid;
int stream, delsys = DVB_SYS_NONE, msys, fe, src, freq, pol, sr;
int fec, ro, plts, bw, tmode, mtype, gi, plp, t2id, sm, c2tft, ds, specinv;
char *u, *s;
@ -624,7 +624,8 @@ rtsp_process_play(http_connection_t *hc, int setup)
s = http_arg_get_remove(&hc->hc_req_args, "pids");
if (parse_pids(s, &pids)) goto error2;
msys = msys_to_tvh(hc);
freq = atof(http_arg_get_remove(&hc->hc_req_args, "freq")) * 1000000;
freq = atof(http_arg_get_remove(&hc->hc_req_args, "freq")) * 1000;
valid = freq >= 10000;
if (addpids.count > 0 || delpids.count > 0) {
if (setup)
@ -647,7 +648,7 @@ rtsp_process_play(http_connection_t *hc, int setup)
if (delsys == DVB_SYS_NONE) goto error;
if (msys == DVB_SYS_NONE) goto error;
if (!fe) goto error;
if (freq < 1000000) goto error;
if (!valid) goto error;
if (!rs)
rs = rtsp_new_session(msys, 0, -1);
else if (stream != rs->stream)
@ -680,7 +681,7 @@ rtsp_process_play(http_connection_t *hc, int setup)
}
if (rs->frontend != fe)
goto error;
if (freq >= 1000000) {
if (valid) {
if (delsys == DVB_SYS_NONE) goto error;
if (msys == DVB_SYS_NONE) goto error;
} else {
@ -723,6 +724,8 @@ rtsp_process_play(http_connection_t *hc, int setup)
} else if (msys == DVB_SYS_DVBT || msys == DVB_SYS_DVBT2) {
freq *= 1000;
if (freq < 0) goto error;
bw = bw_to_tvh(hc);
if (bw == DVB_BANDWIDTH_NONE) goto error;
tmode = tmode_to_tvh(hc);
@ -758,6 +761,8 @@ rtsp_process_play(http_connection_t *hc, int setup)
} else if (msys == DVB_SYS_DVBC_ANNEX_A || msys == DVB_SYS_DVBC_ANNEX_C) {
freq *= 1000;
if (freq < 0) goto error;
c2tft = atoi(http_arg_get_remove(&hc->hc_req_args, "c2tft"));
if (c2tft < 0 || c2tft > 2) goto error;
bw = bw_to_tvh(hc);
@ -800,8 +805,6 @@ rtsp_process_play(http_connection_t *hc, int setup)
}
rs->src = src;
memset(&rs->udp_rtp, 0, sizeof(rs->udp_rtp));
memset(&rs->udp_rtcp, 0, sizeof(rs->udp_rtcp));
if (udp_bind_double(&rs->udp_rtp, &rs->udp_rtcp,
"satips", "rtsp", "rtcp",
rtsp_ip, 0, NULL,
@ -823,7 +826,7 @@ play:
mpegts_pid_del_group(&rs->pids, &delpids);
if (addpids.count > 0)
mpegts_pid_add_group(&rs->pids, &addpids);
if ((r = rtsp_start(hc, rs, addrbuf, freq >= 10000000, setup)) < 0) {
if ((r = rtsp_start(hc, rs, addrbuf, valid, setup)) < 0) {
errcode = r;
goto error;
}
@ -835,7 +838,9 @@ play:
dvb_mux_conf_str(dmc, buf, sizeof(buf));
s = buf + strlen(buf);
mpegts_pid_dump(&rs->pids, s, sizeof(buf) - (s - buf));
s += snprintf(s, sizeof(buf) - (s - buf), " pids ");
if (mpegts_pid_dump(&rs->pids, s, sizeof(buf) - (s - buf)) == 0)
snprintf(s, sizeof(buf) - (s - buf), "<none>");
tvhdebug("satips", "%i/%s/%d: %s %s",
rs->frontend, rs->session, rs->stream,
@ -891,8 +896,8 @@ rtsp_process_teardown(http_connection_t *hc)
return 0;
}
tvhdebug("satips", "teardown from %s:%d for stream %d",
addrbuf, IP_PORT(*hc->hc_peer), stream);
tvhdebug("satips", "-/%s/%i: teardown from %s:%d",
hc->hc_session, stream, addrbuf, IP_PORT(*hc->hc_peer));
pthread_mutex_lock(&rtsp_lock);
rs = rtsp_find_session(hc, stream);
@ -902,11 +907,11 @@ rtsp_process_teardown(http_connection_t *hc)
} else {
rtsp_close_session(rs);
pthread_mutex_unlock(&rtsp_lock);
rtsp_free_session(rs);
http_arg_init(&args);
http_arg_set(&args, "Session", rs->session);
http_send_header(hc, HTTP_STATUS_OK, NULL, 0, NULL, NULL, 0, NULL, NULL, NULL);
http_arg_flush(&args);
rtsp_free_session(rs);
}
return 0;
}
@ -968,9 +973,11 @@ rtsp_close_session(session_t *rs)
{
satip_rtp_close((void *)(intptr_t)rs->stream);
rs->stream = 0;
rs->run =0;
rs->run = 0;
udp_close(rs->udp_rtp);
rs->udp_rtp = NULL;
udp_close(rs->udp_rtcp);
rs->udp_rtcp = NULL;
pthread_mutex_lock(&global_lock);
rtsp_clean(rs);
pthread_mutex_unlock(&global_lock);
@ -985,6 +992,7 @@ rtsp_free_session(session_t *rs)
{
TAILQ_REMOVE(&rtsp_sessions, rs, link);
gtimer_disarm(&rs->timer);
mpegts_pid_done(&rs->pids);
free(rs);
}