#include "tvhpoll.h"
#include "subscriptions.h"
-#include "tvhcsa.h"
#if ENABLE_LINUXDVB
#include "input/mpegts/linuxdvb/linuxdvb_private.h"
#endif
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;
pthread_mutex_unlock(&capmt->capmt_mutex);
- tvhcsa_destroy(&ct->ct_csa);
free(ct->td_nicename);
free(ct);
}
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);
#include "caclient.h"
#include "service.h"
#include "input.h"
-#include "tvhcsa.h"
/**
*
typedef struct constcw_service {
th_descrambler_t;
LIST_ENTRY(constcw_service) cs_link;
- tvhcsa_t cs_csa;
} constcw_service_t;
/**
LIST_REMOVE(td, td_service_link);
LIST_REMOVE(ct, cs_link);
- tvhcsa_destroy(&ct->cs_csa);
free(ct->td_nicename);
free(ct);
}
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;
#include "subscriptions.h"
#include "service.h"
#include "input.h"
-#include "tvhcsa.h"
/**
*
ECM_RESET
} ecm_state;
- tvhcsa_t cs_csa;
-
LIST_HEAD(, ecm_pid) cs_pids;
int cs_constcw;
LIST_REMOVE(ct, cs_link);
- tvhcsa_destroy(&ct->cs_csa);
free(ct->td_nicename);
free(ct);
}
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;
#include "caclient.h"
#include "ffdecsa/FFdecsa.h"
#include "input.h"
-#include "tvhcsa.h"
struct caid_tab {
const char *name;
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);
}
td->td_stop(td);
t->s_descramble = NULL;
if (dr) {
+ tvhcsa_destroy(&dr->dr_csa);
sbuf_free(&dr->dr_buf);
free(dr);
}
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) {
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);
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;
"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\"",
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"
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);
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: