1 #define MODULE_LOG_PREFIX "irdguess"
6 #include "module-ird-guess.h"
7 #include "oscam-string.h"
8 #include "oscam-conf.h"
15 struct s_irdeto_quess
*next
;
18 static struct s_irdeto_quess
**itab
;
20 int32_t init_irdeto_guess_tab(void)
22 FILE *fp
= open_config_file("oscam.ird");
28 char token
[128], *ptr
, *saveptr1
= NULL
;
32 struct s_irdeto_quess
*ird_row
, *head
;
34 if(!cs_malloc(&itab
, sizeof(struct s_irdeto_quess
*) * 0xff))
40 while(fgets(token
, sizeof(token
), fp
))
42 if(strlen(token
) < 20) { continue; }
43 for(i
= b3
= b47
= caid
= sid
= skip
= 0, ptr
= strtok_r(token
, ":", &saveptr1
); (i
< 4) && (ptr
); ptr
= strtok_r(NULL
, ":", &saveptr1
), i
++)
46 if(*ptr
== ';' || *ptr
== '#' || *ptr
== '-')
67 for(j
= 0; j
< 4; j
++)
79 if(!cs_malloc(&ird_row
, sizeof(struct s_irdeto_quess
)))
93 { head
= head
->next
; }
97 { itab
[b3
] = ird_row
; }
98 //cs_log_dbg(D_CLIENT, "%02X:%08X:%04X:%04X", b3, b47, caid, sid);
103 for(i
= 0; i
< 0xff; i
++)
108 cs_log_dbg(D_CLIENT
, "itab[%02X]: b47=%08X, caid=%04X, sid=%04X",
109 i
, head
->b47
, head
->caid
, head
->sid
);
116 void free_irdeto_guess_tab(void)
122 for(i
= 0; i
< 0xff; i
++)
124 struct s_irdeto_quess
*head
= itab
[i
];
127 void *next
= head
->next
;
135 void guess_irdeto(ECM_REQUEST
*er
)
140 struct s_irdeto_quess
*ptr
;
149 cs_log_dbg(D_TRACE
, "unknown irdeto byte 3: %02X", b3
);
153 b47
= b2i(4, er
->ecm
+ 4);
154 //chid = b2i(2, er->ecm+6);
155 //cs_log_dbg(D_TRACE, "ecm: b47=%08X, ptr->b47=%08X, ptr->caid=%04X", b47, ptr->b47, ptr->caid);
161 if(er
->srvid
&& (er
->srvid
!= ptr
->sid
))
163 cs_log_dbg(D_TRACE
, "sid mismatched (ecm: %04X, guess: %04X), wrong oscam.ird file?",
164 er
->srvid
, ptr
->sid
);
167 er
->caid
= ptr
->caid
;
168 er
->srvid
= ptr
->sid
;
169 er
->chid
= (uint16_t)ptr
->b47
;
170 //cs_log_dbg(D_TRACE, "quess_irdeto() found caid=%04X, sid=%04X, chid=%04X",
171 //er->caid, er->srvid, er->chid);