]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
caclient: add caclient_cat_update() function (and callback)
authorJaroslav Kysela <perex@perex.cz>
Mon, 20 Nov 2017 09:32:08 +0000 (10:32 +0100)
committerJaroslav Kysela <perex@perex.cz>
Mon, 20 Nov 2017 09:32:08 +0000 (10:32 +0100)
src/descrambler/caclient.c
src/descrambler/caclient.h
src/descrambler/descrambler.c

index 9d7d9c4e62e1ecc48ee3663c5edf27bceb3103a3..edbc371e9849a035fcb931d24e48e75c9cb34999 100644 (file)
@@ -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;
 
index 927034bea0b856ee8c757d70acbffde81aa6b242..83596523c5c3f7bf76adf3b4d017f316a69ae4ae 100644 (file)
@@ -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);
index 653a4e314d7cafe20cd0781f31aa925a3a710c86..f5a825fb0d23dafa8b1ef40b3b4ac61a6e0c85cf 100644 (file)
@@ -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;