]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
descrambler: introduce descrambler_keys()
authorJaroslav Kysela <perex@perex.cz>
Sun, 8 Jun 2014 19:06:37 +0000 (21:06 +0200)
committerJaroslav Kysela <perex@perex.cz>
Tue, 10 Jun 2014 12:02:36 +0000 (14:02 +0200)
src/descrambler.h
src/descrambler/capmt.c
src/descrambler/cwc.c
src/descrambler/descrambler.c

index 9c19f47e8d870b559bd38c02ab0fa925d9a3c23a..3e9065bede74c37e6e29103135b5c107aa469307 100755 (executable)
@@ -125,6 +125,8 @@ void descrambler_done          ( void );
 void descrambler_service_start ( struct service *t );
 void descrambler_service_stop  ( struct service *t );
 void descrambler_caid_changed  ( struct service *t );
+void descrambler_keys          ( th_descrambler_t *t,
+                                 const uint8_t *even, const uint8_t *odd );
 int  descrambler_descramble    ( struct service *t,
                                  struct elementary_stream *st,
                                  const uint8_t *tsb );
index cfdfc5e2ae04340afe1bda0291147ea9d04440bd..c028f43c589abfd5c2f1994410457616db46f0fd 100644 (file)
@@ -901,7 +901,6 @@ capmt_process_key(capmt_t *capmt, uint8_t adapter, uint16_t seq,
 {
   mpegts_service_t *t;
   capmt_service_t *ct;
-  unsigned int i;
 
   pthread_mutex_lock(&capmt->capmt_mutex);
   LIST_FOREACH(ct, &capmt->capmt_services, ct_link) {
@@ -922,22 +921,7 @@ capmt_process_key(capmt_t *capmt, uint8_t adapter, uint16_t seq,
     if (adapter != ct->ct_adapter)
       continue;
 
-    for (i = 0; i < 8; i++)
-      if (even[i]) {
-        tvhcsa_set_key_even(&ct->ct_csa, even);
-        break;
-      }
-    for (i = 0; i < 8; i++)
-      if (odd[i]) {
-        tvhcsa_set_key_odd(&ct->ct_csa, odd);
-        break;
-      }
-
-    if (ct->td_keystate != DS_RESOLVED)
-      tvhlog(LOG_DEBUG, "capmt", "Obtained key for service \"%s\"",
-                                 t->s_dvb_svcname);
-
-    ct->td_keystate = DS_RESOLVED;
+    descrambler_keys((th_descrambler_t *)ct, even, odd);
   }
   pthread_mutex_unlock(&capmt->capmt_mutex);
 }
index 1c09b33e84d9b1a58692d85eab4725f2b5328bc9..892ca82049da456eddbff0a71d5cbf9e8c9a5984 100755 (executable)
@@ -797,17 +797,7 @@ forbid:
             t->s_dvb_svcname, delay, ct->cs_cwc->cwc_hostname,
             ct->cs_cwc->cwc_port);
 
-    ct->td_keystate = DS_RESOLVED;
-    for (i = 3; i < 3 + 8; i++)
-      if (msg[i]) {
-        tvhcsa_set_key_even(&ct->cs_csa, msg + 3);
-        break;
-      }
-    for (i = 3 + 8; i < 3 + 8 + 8; i++)
-      if (msg[i]) {
-        tvhcsa_set_key_odd(&ct->cs_csa, msg + 3 + 8);
-        break;
-      }
+    descrambler_keys((th_descrambler_t *)ct, msg + 3, msg + 3 + 8);
 
     ep = LIST_FIRST(&ct->cs_pids);
     while(ep != NULL) {
index 07f669b434d0c2055a28643d82f41097aeeec702..69ec696a9b7e7bfe0bc7c0f57fff1430195cd9f9 100755 (executable)
@@ -160,6 +160,29 @@ descrambler_caid_changed ( service_t *t )
   }
 }
 
+void
+descrambler_keys ( th_descrambler_t *td,
+                   const uint8_t *even, const uint8_t *odd )
+{
+  int i;
+
+  for (i = 0; i < 8; i++)
+    if (even[i]) {
+      tvhcsa_set_key_even(td->td_csa, even);
+      break;
+    }
+  for (i = 0; i < 8; i++)
+    if (odd[i]) {
+      tvhcsa_set_key_odd(td->td_csa, odd);
+      break;
+    }
+
+  if (td->td_keystate != DS_RESOLVED)
+    tvhlog(LOG_DEBUG, "descrambler", "Obtained key for service \"%s\"",
+                      ((mpegts_service_t *)td->td_service)->s_dvb_svcname);
+  td->td_keystate = DS_RESOLVED;
+}
+
 int
 descrambler_descramble ( service_t *t,
                          elementary_stream_t *st,