diff --git a/src/descrambler.h b/src/descrambler.h index 8d5b2205..97af0811 100755 --- a/src/descrambler.h +++ b/src/descrambler.h @@ -22,6 +22,7 @@ #include #include #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; diff --git a/src/descrambler/capmt.c b/src/descrambler/capmt.c index d47633c1..32540420 100644 --- a/src/descrambler/capmt.c +++ b/src/descrambler/capmt.c @@ -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); diff --git a/src/descrambler/constcw.c b/src/descrambler/constcw.c index 07482685..6ac6e0df 100644 --- a/src/descrambler/constcw.c +++ b/src/descrambler/constcw.c @@ -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; diff --git a/src/descrambler/cwc.c b/src/descrambler/cwc.c index f1fd67a7..bbef83a0 100755 --- a/src/descrambler/cwc.c +++ b/src/descrambler/cwc.c @@ -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; diff --git a/src/descrambler/descrambler.c b/src/descrambler/descrambler.c index 185c5b45..330ffdc4 100755 --- a/src/descrambler/descrambler.c +++ b/src/descrambler/descrambler.c @@ -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: diff --git a/src/descrambler/tvhcsa.h b/src/descrambler/tvhcsa.h index d84c6b41..c2253a8a 100644 --- a/src/descrambler/tvhcsa.h +++ b/src/descrambler/tvhcsa.h @@ -22,9 +22,6 @@ struct mpegts_service; struct elementary_stream; -#include "tvheadend.h" -#include "descrambler.h" - #include #if ENABLE_DVBCSA #include