Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
descrambler: move tvhcsa structure to the descrambler runtime
  • Loading branch information
perexg committed Oct 2, 2014
1 parent 4faa0ef commit 94cb147
Show file tree
Hide file tree
Showing 6 changed files with 17 additions and 33 deletions.
3 changes: 2 additions & 1 deletion src/descrambler.h
Expand Up @@ -22,6 +22,7 @@
#include <stdint.h>
#include <stdlib.h>
#include "queue.h"
#include "descrambler/tvhcsa.h"

struct service;
struct elementary_stream;
Expand Down Expand Up @@ -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);
Expand All @@ -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;
Expand Down
5 changes: 0 additions & 5 deletions src/descrambler/capmt.c
Expand Up @@ -45,7 +45,6 @@
#include "tvhpoll.h"

#include "subscriptions.h"
#include "tvhcsa.h"
#if ENABLE_LINUXDVB
#include "input/mpegts/linuxdvb/linuxdvb_private.h"
#endif
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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);
}
Expand Down Expand Up @@ -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);
Expand Down
4 changes: 0 additions & 4 deletions src/descrambler/constcw.c
Expand Up @@ -21,15 +21,13 @@
#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;

/**
Expand Down Expand Up @@ -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);
}
Expand Down Expand Up @@ -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;
Expand Down
5 changes: 0 additions & 5 deletions src/descrambler/cwc.c
Expand Up @@ -39,7 +39,6 @@
#include "subscriptions.h"
#include "service.h"
#include "input.h"
#include "tvhcsa.h"

/**
*
Expand Down Expand Up @@ -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;

Expand Down Expand Up @@ -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);
}
Expand Down Expand Up @@ -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;
Expand Down
30 changes: 15 additions & 15 deletions src/descrambler/descrambler.c
Expand Up @@ -21,7 +21,6 @@
#include "caclient.h"
#include "ffdecsa/FFdecsa.h"
#include "input.h"
#include "tvhcsa.h"

struct caid_tab {
const char *name;
Expand Down Expand Up @@ -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);
}
Expand All @@ -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);
}
Expand Down Expand Up @@ -164,15 +165,14 @@ 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) {
td->td_keystate = DS_FORBIDDEN;
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);
Expand All @@ -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;
Expand All @@ -214,15 +214,15 @@ 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\"",
even[0], even[1], even[2], even[3], even[4], even[5], even[6], even[7],
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"
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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:
Expand Down
3 changes: 0 additions & 3 deletions src/descrambler/tvhcsa.h
Expand Up @@ -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>
Expand Down

0 comments on commit 94cb147

Please sign in to comment.