Merge pull request #84 from perexg/fixes-emm

cwc: improve EMM handling for multiple readers with same CAS system
This commit is contained in:
Andreas Öman 2012-04-10 10:29:34 -07:00
commit 5777a1fe30
3 changed files with 8 additions and 6 deletions

View file

@ -1188,14 +1188,15 @@ cwc_emm_cache_lookup(cwc_t *cwc, uint32_t crc)
*
*/
void
cwc_emm(uint8_t *data, int len)
cwc_emm(uint8_t *data, int len, uint16_t caid)
{
cwc_t *cwc;
pthread_mutex_lock(&cwc_mutex);
TAILQ_FOREACH(cwc, &cwcs, cwc_link) {
if(cwc->cwc_forward_emm && cwc->cwc_writer_running) {
if(cwc->cwc_caid == caid &&
cwc->cwc_forward_emm && cwc->cwc_writer_running) {
switch (cwc->cwc_card_type) {
case CARD_CONAX:
cwc_emm_conax(cwc, data, len);

View file

@ -23,6 +23,6 @@ void cwc_init(void);
void cwc_service_start(struct service *t);
void cwc_emm(uint8_t *data, int len);
void cwc_emm(uint8_t *data, int len, uint16_t caid);
#endif /* CWC_H_ */

View file

@ -828,7 +828,7 @@ static int
dvb_ca_callback(th_dvb_mux_instance_t *tdmi, uint8_t *ptr, int len,
uint8_t tableid, void *opaque)
{
cwc_emm(ptr, len);
cwc_emm(ptr, len, (uintptr_t)opaque);
return 0;
}
@ -841,6 +841,7 @@ dvb_cat_callback(th_dvb_mux_instance_t *tdmi, uint8_t *ptr, int len,
{
int tag, tlen;
uint16_t pid;
uintptr_t caid;
if((ptr[2] & 1) == 0) {
/* current_next_indicator == next, skip this */
@ -856,13 +857,13 @@ dvb_cat_callback(th_dvb_mux_instance_t *tdmi, uint8_t *ptr, int len,
len -= 2;
switch(tag) {
case DVB_DESC_CA:
// caid = ( ptr[0] << 8) | ptr[1];
caid = ( ptr[0] << 8) | ptr[1];
pid = ((ptr[2] & 0x1f) << 8) | ptr[3];
if(pid == 0)
break;
tdt_add(tdmi, NULL, dvb_ca_callback, NULL, "CA",
tdt_add(tdmi, NULL, dvb_ca_callback, (void *)caid, "CA",
TDT_INC_TABLE_HDR, pid, NULL);
break;