From: Jaroslav Kysela Date: Wed, 7 Nov 2018 16:04:35 +0000 (+0100) Subject: satip server: fix pmt rewrite (wrong CC), use sbuf as the internal data buffer X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2ad46c44308ab2e6ad9873f22b205cdf196950a8;p=thirdparty%2Ftvheadend.git satip server: fix pmt rewrite (wrong CC), use sbuf as the internal data buffer --- diff --git a/src/satip/rtp.c b/src/satip/rtp.c index 9364baef3..dd334b4a7 100644 --- a/src/satip/rtp.c +++ b/src/satip/rtp.c @@ -75,8 +75,7 @@ typedef struct satip_rtp_session { int sig_lock; pthread_mutex_t lock; http_connection_t *hc; - uint8_t *table_data; - int table_data_len; + sbuf_t table_data; void (*no_data_cb)(void *opaque); void *no_data_opaque; } satip_rtp_session_t; @@ -141,10 +140,8 @@ satip_rtp_pmt_cb(mpegts_psi_table_t *mt, const uint8_t *buf, int len) ol = dvb_table_append_crc32(out, ol, sizeof(out)); - if (ol > 0 && (l = dvb_table_remux(mt, out, ol, &ob)) > 0) { - rtp->table_data = ob; - rtp->table_data_len = l; - } + if (ol > 0 && (l = dvb_table_remux(mt, out, ol, &ob)) > 0) + sbuf_append(&rtp->table_data, ob, l); } static void @@ -242,15 +239,13 @@ found: TAILQ_FOREACH(tbl, &rtp->pmt_tables, link) if (tbl->pid == pid) { dvb_table_parse(&tbl->tbl, "-", data, 188, 1, 0, satip_rtp_pmt_cb); - if (rtp->table_data && rtp->table_data_len) { - for (i = r = 0; i < rtp->table_data_len; i += 188) { - r = satip_rtp_append_data(rtp, &v, rtp->table_data + i); + if (rtp->table_data.sb_ptr > 0) { + for (i = r = 0; i < rtp->table_data.sb_ptr; i += 188) { + r = satip_rtp_append_data(rtp, &v, rtp->table_data.sb_data + i); if (r) break; } - free(rtp->table_data); - rtp->table_data = NULL; - rtp->table_data_len = 0; + sbuf_reset(&rtp->table_data, 10*188); if (r) return r; } @@ -333,11 +328,9 @@ found: TAILQ_FOREACH(tbl, &rtp->pmt_tables, link) if (tbl->pid == pid) { dvb_table_parse(&tbl->tbl, "-", data, 188, 1, 0, satip_rtp_pmt_cb); - if (rtp->table_data && rtp->table_data_len) { - r = satip_rtp_append_tcp_data(rtp, rtp->table_data, rtp->table_data_len); - free(rtp->table_data); - rtp->table_data = NULL; - rtp->table_data_len = 0; + if (rtp->table_data.sb_ptr) { + r = satip_rtp_append_tcp_data(rtp, rtp->table_data.sb_data, rtp->table_data.sb_ptr); + sbuf_reset(&rtp->table_data, 10*188); if (r) return -1; }