]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
descrambler: move tvhcsa structure to the descrambler runtime
authorJaroslav Kysela <perex@perex.cz>
Thu, 2 Oct 2014 13:39:25 +0000 (15:39 +0200)
committerJaroslav Kysela <perex@perex.cz>
Thu, 2 Oct 2014 13:39:25 +0000 (15:39 +0200)
src/descrambler.h
src/descrambler/capmt.c
src/descrambler/constcw.c
src/descrambler/cwc.c
src/descrambler/descrambler.c
src/descrambler/tvhcsa.h

index 8d5b220551d386fd4a04f9ec6652217b86f79706..97af08114b570a8e8a6223e1be3dc23216fde96f 100755 (executable)
@@ -22,6 +22,7 @@
 #include <stdint.h>
 #include <stdlib.h>
 #include "queue.h"
+#include "descrambler/tvhcsa.h"
 
 struct service;
 struct elementary_stream;
@@ -51,7 +52,6 @@ typedef struct th_descrambler {
   } td_keystate;
 
   struct service *td_service;
-  struct tvhcsa  *td_csa;
 
   void (*td_stop)       (struct th_descrambler *d);
   void (*td_caid_change)(struct th_descrambler *d);
@@ -61,6 +61,7 @@ typedef struct th_descrambler {
 } th_descrambler_t;
 
 typedef struct th_descrambler_runtime {
+  tvhcsa_t dr_csa;
   uint32_t dr_key:1;
   uint32_t dr_key_first:1;
   uint8_t  dr_key_index;
index d47633c12c912571f7e66640bc57be70b9016879..32540420d8922f35ccc36102a1ca56bf5ff191f6 100644 (file)
@@ -45,7 +45,6 @@
 #include "tvhpoll.h"
 
 #include "subscriptions.h"
-#include "tvhcsa.h"
 #if ENABLE_LINUXDVB
 #include "input/mpegts/linuxdvb/linuxdvb_private.h"
 #endif
@@ -185,8 +184,6 @@ typedef struct capmt_service {
   struct capmt_caid_ecm_list ct_caid_ecm;
   int ct_constcw; /* fast flag */
 
-  tvhcsa_t ct_csa;
-
   /* current sequence number */
   uint16_t ct_seq;
 } capmt_service_t;
@@ -770,7 +767,6 @@ capmt_service_destroy(th_descrambler_t *td)
 
   pthread_mutex_unlock(&capmt->capmt_mutex);
 
-  tvhcsa_destroy(&ct->ct_csa);
   free(ct->td_nicename);
   free(ct);
 }
@@ -1872,7 +1868,6 @@ capmt_service_start(caclient_t *cac, service_t *s)
   pthread_mutex_unlock(&t->s_stream_mutex);
 
   td = (th_descrambler_t *)ct;
-  tvhcsa_init(td->td_csa = &ct->ct_csa);
   snprintf(buf, sizeof(buf), "capmt-%s-%i",
                              capmt->capmt_sockfile,
                              capmt->capmt_port);
index 074826850c9a5f6a1f2923df66c808d7b9ef04be..6ac6e0df121c7efd3be41340bd51b8d026fca837 100644 (file)
@@ -21,7 +21,6 @@
 #include "caclient.h"
 #include "service.h"
 #include "input.h"
-#include "tvhcsa.h"
 
 /**
  *
@@ -29,7 +28,6 @@
 typedef struct constcw_service {
   th_descrambler_t;  
   LIST_ENTRY(constcw_service) cs_link;
-  tvhcsa_t cs_csa;
 } constcw_service_t;
 
 /**
@@ -89,7 +87,6 @@ constcw_service_destroy(th_descrambler_t *td)
   
   LIST_REMOVE(td, td_service_link);
   LIST_REMOVE(ct, cs_link);
-  tvhcsa_destroy(&ct->cs_csa);
   free(ct->td_nicename);
   free(ct);
 }   
@@ -140,7 +137,6 @@ constcw_service_start(caclient_t *cac, service_t *t)
 
   ct                   = calloc(1, sizeof(constcw_service_t));
   td                   = (th_descrambler_t *)ct;
-  tvhcsa_init(td->td_csa = &ct->cs_csa);
   snprintf(buf, sizeof(buf), "constcw-%s", constcw_name(ccw));
   td->td_nicename      = strdup(buf);
   td->td_service       = t;
index f1fd67a7b4b924664e0c212f2cfb3e37293c3722..bbef83a0641333d2fbdbac97cd0944735aebc998 100755 (executable)
@@ -39,7 +39,6 @@
 #include "subscriptions.h"
 #include "service.h"
 #include "input.h"
-#include "tvhcsa.h"
 
 /**
  *
@@ -147,8 +146,6 @@ typedef struct cwc_service {
     ECM_RESET
   } ecm_state;
 
-  tvhcsa_t cs_csa;
-
   LIST_HEAD(, ecm_pid) cs_pids;
   int cs_constcw;
 
@@ -1984,7 +1981,6 @@ cwc_service_destroy(th_descrambler_t *td)
 
   LIST_REMOVE(ct, cs_link);
 
-  tvhcsa_destroy(&ct->cs_csa);
   free(ct->td_nicename);
   free(ct);
 }
@@ -2051,7 +2047,6 @@ cwc_service_start(caclient_t *cac, service_t *t)
   ct->cs_constcw       = pcard->cwc_caid == 0x2600;
 
   td                   = (th_descrambler_t *)ct;
-  tvhcsa_init(td->td_csa = &ct->cs_csa);
   snprintf(buf, sizeof(buf), "cwc-%s-%i", cwc->cwc_hostname, cwc->cwc_port);
   td->td_nicename      = strdup(buf);
   td->td_service       = t;
index 185c5b45840eabc2d2cb2eec3dca573729d16435..330ffdc4249bd6d31f3e778553a7a877507009bb 100755 (executable)
@@ -21,7 +21,6 @@
 #include "caclient.h"
 #include "ffdecsa/FFdecsa.h"
 #include "input.h"
-#include "tvhcsa.h"
 
 struct caid_tab {
   const char *name;
@@ -116,6 +115,7 @@ descrambler_service_start ( service_t *t )
     t->s_descramble = dr = calloc(1, sizeof(th_descrambler_runtime_t));
     sbuf_init(&dr->dr_buf);
     dr->dr_key_index = 0xff;
+    tvhcsa_init(&dr->dr_csa);
   }
   caclient_start(t);
 }
@@ -130,6 +130,7 @@ descrambler_service_stop ( service_t *t )
     td->td_stop(td);
   t->s_descramble = NULL;
   if (dr) {
+    tvhcsa_destroy(&dr->dr_csa);
     sbuf_free(&dr->dr_buf);
     free(dr);
   }
@@ -164,7 +165,6 @@ descrambler_keys ( th_descrambler_t *td, int type,
   service_t *t = td->td_service;
   th_descrambler_runtime_t *dr;
   th_descrambler_t *td2;
-  tvhcsa_t *csa = td->td_csa;
   int i, j = 0;
 
   if (t == NULL || (dr = t->s_descramble) == NULL) {
@@ -172,7 +172,7 @@ descrambler_keys ( th_descrambler_t *td, int type,
     return;
   }
 
-  if (tvhcsa_set_type(td->td_csa, type) < 0)
+  if (tvhcsa_set_type(&dr->dr_csa, type) < 0)
     return;
 
   pthread_mutex_lock(&t->s_stream_mutex);
@@ -191,18 +191,18 @@ descrambler_keys ( th_descrambler_t *td, int type,
       goto fin;
     }
 
-  for (i = 0; i < csa->csa_keylen; i++)
+  for (i = 0; i < dr->dr_csa.csa_keylen; i++)
     if (even[i]) {
       j++;
-      tvhcsa_set_key_even(csa, even);
+      tvhcsa_set_key_even(&dr->dr_csa, even);
       dr->dr_key_valid |= 0x40;
       dr->dr_key_timestamp[0] = dispatch_clock;
       break;
     }
-  for (i = 0; i < csa->csa_keylen; i++)
+  for (i = 0; i < dr->dr_csa.csa_keylen; i++)
     if (odd[i]) {
       j++;
-      tvhcsa_set_key_odd(csa, odd);
+      tvhcsa_set_key_odd(&dr->dr_csa, odd);
       dr->dr_key_valid |= 0x80;
       dr->dr_key_timestamp[1] = dispatch_clock;
       break;
@@ -214,7 +214,7 @@ descrambler_keys ( th_descrambler_t *td, int type,
                         "Obtained keys from %s for service \"%s\"",
                         td->td_nicename,
                         ((mpegts_service_t *)t)->s_dvb_svcname);
-    if (csa->csa_keylen == 8) {
+    if (dr->dr_csa.csa_keylen == 8) {
       tvhtrace("descrambler", "Obtained keys "
                "%02X%02X%02X%02X%02X%02X%02X%02X:%02X%02X%02X%02X%02X%02X%02X%02X"
                " from %s for service \"%s\"",
@@ -222,7 +222,7 @@ descrambler_keys ( th_descrambler_t *td, int type,
                odd[0], odd[1], odd[2], odd[3], odd[4], odd[5], odd[6], odd[7],
                td->td_nicename,
                ((mpegts_service_t *)t)->s_dvb_svcname);
-    } else if (csa->csa_keylen == 16) {
+    } else if (dr->dr_csa.csa_keylen == 16) {
       tvhtrace("descrambler", "Obtained keys "
                "%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X:"
                "%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X"
@@ -357,9 +357,9 @@ descrambler_descramble ( service_t *t,
             key_update(dr, ki);
           }
         }
-        td->td_csa->csa_descramble(td->td_csa,
-                                   (mpegts_service_t *)td->td_service,
-                                   tsb2);
+        dr->dr_csa.csa_descramble(&dr->dr_csa,
+                                  (mpegts_service_t *)td->td_service,
+                                  tsb2);
       }
       service_reset_streaming_status_flags(t, TSS_NO_ACCESS);
       sbuf_free(&dr->dr_buf);
@@ -391,9 +391,9 @@ descrambler_descramble ( service_t *t,
         key_update(dr, ki);
       }
     }
-    td->td_csa->csa_descramble(td->td_csa,
-                               (mpegts_service_t *)td->td_service,
-                               tsb);
+    dr->dr_csa.csa_descramble(&dr->dr_csa,
+                              (mpegts_service_t *)td->td_service,
+                              tsb);
     service_reset_streaming_status_flags(t, TSS_NO_ACCESS);
     return 1;
 next:
index d84c6b41b298bd250b6b2d386d48ed926f79458d..c2253a8ab31b93e00cdd1a66c64d952903b9d34d 100644 (file)
@@ -22,9 +22,6 @@
 struct mpegts_service;
 struct elementary_stream;
 
-#include "tvheadend.h"
-#include "descrambler.h"
-
 #include <stdint.h>
 #if ENABLE_DVBCSA
 #include <dvbcsa/dvbcsa.h>