descrambler: move tvhcsa structure to the descrambler runtime

This commit is contained in:
Jaroslav Kysela 2014-10-02 15:39:25 +02:00
parent 4faa0efc87
commit 94cb147321
6 changed files with 17 additions and 33 deletions

View file

@ -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;

View 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);

View 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;

View file

@ -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;

View file

@ -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:

View 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>