From cbd75690a1feb0adab17d81e42991b648e4cdadc Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Mon, 20 Nov 2017 10:32:08 +0100 Subject: [PATCH] caclient: add caclient_cat_update() function (and callback) --- src/descrambler/caclient.c | 18 +++++++++++++++++- src/descrambler/caclient.h | 5 +++++ src/descrambler/descrambler.c | 1 + 3 files changed, 23 insertions(+), 1 deletion(-) diff --git a/src/descrambler/caclient.c b/src/descrambler/caclient.c index 9d7d9c4e6..edbc371e9 100644 --- a/src/descrambler/caclient.c +++ b/src/descrambler/caclient.c @@ -333,7 +333,23 @@ caclient_start ( struct service *t ) } void -caclient_caid_update(struct mpegts_mux *mux, uint16_t caid, uint16_t pid, int valid) +caclient_cat_update + ( struct mpegts_mux *mux, const uint8_t *data, int len ) +{ + caclient_t *cac; + + lock_assert(&global_lock); + + pthread_mutex_lock(&caclients_mutex); + TAILQ_FOREACH(cac, &caclients, cac_link) + if (cac->cac_cat_update && cac->cac_enabled) + cac->cac_cat_update(cac, mux, data, len); + pthread_mutex_unlock(&caclients_mutex); +} + +void +caclient_caid_update + ( struct mpegts_mux *mux, uint16_t caid, uint16_t pid, int valid ) { caclient_t *cac; diff --git a/src/descrambler/caclient.h b/src/descrambler/caclient.h index 927034bea..83596523c 100644 --- a/src/descrambler/caclient.h +++ b/src/descrambler/caclient.h @@ -61,6 +61,9 @@ typedef struct caclient { void (*cac_free)(struct caclient *cac); void (*cac_start)(struct caclient *cac, struct service *t); void (*cac_conf_changed)(struct caclient *cac); + void (*cac_cat_update)(struct caclient *cac, + struct mpegts_mux *mux, + const uint8_t *data, int len); void (*cac_caid_update)(struct caclient *cac, struct mpegts_mux *mux, uint16_t caid, uint16_t pid, int valid); @@ -72,6 +75,8 @@ caclient_t *caclient_create void caclient_start( struct service *t ); void caclient_caid_update(struct mpegts_mux *mux, uint16_t caid, uint16_t pid, int valid); +void caclient_cat_update(struct mpegts_mux *mux, + const uint8_t *data, int len); void caclient_set_status(caclient_t *cac, caclient_status_t status); const char *caclient_get_status(caclient_t *cac); diff --git a/src/descrambler/descrambler.c b/src/descrambler/descrambler.c index 653a4e314..f5a825fb0 100644 --- a/src/descrambler/descrambler.c +++ b/src/descrambler/descrambler.c @@ -1481,6 +1481,7 @@ descrambler_cat_data( mpegts_mux_t *mux, const uint8_t *data, int len ) tvhtrace(LS_DESCRAMBLER, "CAT data (len %d)", len); tvhlog_hexdump(LS_DESCRAMBLER, data, len); + caclient_cat_update(mux, data, len); pthread_mutex_lock(&mux->mm_descrambler_lock); TAILQ_FOREACH(emm, &mux->mm_descrambler_emms, link) emm->to_be_removed = 1; -- 2.47.3