*
*/
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);
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_ */
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;
}
{
int tag, tlen;
uint16_t pid;
+ uintptr_t caid;
if((ptr[2] & 1) == 0) {
/* current_next_indicator == next, skip this */
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;