descrambler: move tvhcsa structure to the descrambler runtime
This commit is contained in:
parent
4faa0efc87
commit
94cb147321
6 changed files with 17 additions and 33 deletions
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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>
|
||||
|
|
Loading…
Add table
Reference in a new issue