}
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;
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);
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);
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;