From 9887c5773db5b9aef0a775f680f3c98ec12c01d5 Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Sun, 8 Jun 2014 21:06:37 +0200 Subject: [PATCH] descrambler: introduce descrambler_keys() --- src/descrambler.h | 2 ++ src/descrambler/capmt.c | 18 +----------------- src/descrambler/cwc.c | 12 +----------- src/descrambler/descrambler.c | 23 +++++++++++++++++++++++ 4 files changed, 27 insertions(+), 28 deletions(-) diff --git a/src/descrambler.h b/src/descrambler.h index 9c19f47e..3e9065be 100755 --- a/src/descrambler.h +++ b/src/descrambler.h @@ -125,6 +125,8 @@ void descrambler_done ( void ); void descrambler_service_start ( struct service *t ); void descrambler_service_stop ( struct service *t ); void descrambler_caid_changed ( struct service *t ); +void descrambler_keys ( th_descrambler_t *t, + const uint8_t *even, const uint8_t *odd ); int descrambler_descramble ( struct service *t, struct elementary_stream *st, const uint8_t *tsb ); diff --git a/src/descrambler/capmt.c b/src/descrambler/capmt.c index cfdfc5e2..c028f43c 100644 --- a/src/descrambler/capmt.c +++ b/src/descrambler/capmt.c @@ -901,7 +901,6 @@ capmt_process_key(capmt_t *capmt, uint8_t adapter, uint16_t seq, { mpegts_service_t *t; capmt_service_t *ct; - unsigned int i; pthread_mutex_lock(&capmt->capmt_mutex); LIST_FOREACH(ct, &capmt->capmt_services, ct_link) { @@ -922,22 +921,7 @@ capmt_process_key(capmt_t *capmt, uint8_t adapter, uint16_t seq, if (adapter != ct->ct_adapter) continue; - for (i = 0; i < 8; i++) - if (even[i]) { - tvhcsa_set_key_even(&ct->ct_csa, even); - break; - } - for (i = 0; i < 8; i++) - if (odd[i]) { - tvhcsa_set_key_odd(&ct->ct_csa, odd); - break; - } - - if (ct->td_keystate != DS_RESOLVED) - tvhlog(LOG_DEBUG, "capmt", "Obtained key for service \"%s\"", - t->s_dvb_svcname); - - ct->td_keystate = DS_RESOLVED; + descrambler_keys((th_descrambler_t *)ct, even, odd); } pthread_mutex_unlock(&capmt->capmt_mutex); } diff --git a/src/descrambler/cwc.c b/src/descrambler/cwc.c index 1c09b33e..892ca820 100755 --- a/src/descrambler/cwc.c +++ b/src/descrambler/cwc.c @@ -797,17 +797,7 @@ forbid: t->s_dvb_svcname, delay, ct->cs_cwc->cwc_hostname, ct->cs_cwc->cwc_port); - ct->td_keystate = DS_RESOLVED; - for (i = 3; i < 3 + 8; i++) - if (msg[i]) { - tvhcsa_set_key_even(&ct->cs_csa, msg + 3); - break; - } - for (i = 3 + 8; i < 3 + 8 + 8; i++) - if (msg[i]) { - tvhcsa_set_key_odd(&ct->cs_csa, msg + 3 + 8); - break; - } + descrambler_keys((th_descrambler_t *)ct, msg + 3, msg + 3 + 8); ep = LIST_FIRST(&ct->cs_pids); while(ep != NULL) { diff --git a/src/descrambler/descrambler.c b/src/descrambler/descrambler.c index 07f669b4..69ec696a 100755 --- a/src/descrambler/descrambler.c +++ b/src/descrambler/descrambler.c @@ -160,6 +160,29 @@ descrambler_caid_changed ( service_t *t ) } } +void +descrambler_keys ( th_descrambler_t *td, + const uint8_t *even, const uint8_t *odd ) +{ + int i; + + for (i = 0; i < 8; i++) + if (even[i]) { + tvhcsa_set_key_even(td->td_csa, even); + break; + } + for (i = 0; i < 8; i++) + if (odd[i]) { + tvhcsa_set_key_odd(td->td_csa, odd); + break; + } + + if (td->td_keystate != DS_RESOLVED) + tvhlog(LOG_DEBUG, "descrambler", "Obtained key for service \"%s\"", + ((mpegts_service_t *)td->td_service)->s_dvb_svcname); + td->td_keystate = DS_RESOLVED; +} + int descrambler_descramble ( service_t *t, elementary_stream_t *st,