Changeset 1979


Ignore:
Timestamp:
04/06/10 21:18:09 (12 years ago)
Author:
_network
Message:

modular: fix dvbapi emm segfault

Location:
branches/modular
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • branches/modular/module-dvbapi.c

    r1975 r1979  
    347347    ushort pid  = demux[demux_index].ECMpids[demux[demux_index].pidindex].EMM_PID;
    348348
     349    if (reader[client[cs_idx].au].card_system<1)
     350        return;
     351
    349352    if (cardsystem[reader[client[cs_idx].au].card_system-1].get_emm_filter) {
    350353        uchar *filter1 = cardsystem[reader[client[cs_idx].au].card_system-1].get_emm_filter(&reader[client[cs_idx].au], emmtype);
     
    777780
    778781            for(j2=0,j1=0;j2<len;j2+=2,j1++) {
    779                 if (sscanf((char*)mbuf+j2,"%02X",(uint*)dest+j1) != 1) {
     782                if (sscanf((char*)mbuf+j2, "%02X", dest+j1) != 1) {
    780783                    cs_log("dvbapi: error parsing QboxHD pmt.tmp, data not valid in position %d",j2);
    781784                    return;
  • branches/modular/reader-common.h

    r1975 r1979  
    1717int irdeto_get_emm_type(EMM_PACKET *, struct s_reader *); //s_reader as last argument to remind you that this function picks out OTHER reader than you would expect!
    1818int irdeto_card_info(struct s_reader * reader);
     19uchar *irdeto_get_emm_filter(struct s_reader * rdr, int type);
    1920
    2021// reader-viaccess
  • branches/modular/reader-irdeto.c

    r1975 r1979  
    290290}
    291291
    292 uchar *irdeto_get_emm_filter(struct s_reader * rdr, int type)
    293 {
    294     static uint8_t filter[32];
    295     memset(filter, 0x00, 32);
    296 
    297     switch (type) {
    298         case GLOBAL:
    299             filter[1]    = 0x00;
    300             filter[1+16] = 0x2F;
    301             break;
    302         case SHARED:
    303         case UNIQUE:
    304             filter[1]    = 0xD2;
    305             filter[1+16] = 0xFE;
    306             memcpy(filter+2, rdr->hexserial, 2);
    307             memset(filter+2+16, 0xFF, 2);
    308 
    309             break;
    310     }
    311 
    312     return filter;
    313 }
    314 
    315292int irdeto_get_emm_type(EMM_PACKET *ep, struct s_reader * rdr) {
    316293
     
    352329    }
    353330
     331}
     332
     333uchar *irdeto_get_emm_filter(struct s_reader * rdr, int type)
     334{
     335    static uint8_t filter[32];
     336    memset(filter, 0x00, 32);
     337
     338    switch (type) {
     339        case GLOBAL:
     340            filter[0]    = 0x82;
     341            filter[0+16] = 0xFF;
     342            filter[1]    = 0x00;
     343            filter[1+16] = 0x2F; // 0x00 to 0xD0
     344            //filter[1]    = 0xD0;
     345            //filter[1+16] = 0xFF;
     346            break;
     347        case SHARED:
     348            filter[0]    = 0x82;
     349            filter[0+16] = 0xFF;
     350            filter[1]    = 0xD2;
     351            filter[1+16] = 0xFF;
     352            filter[2]    = rdr->sa[0][0];
     353            filter[2+16] = 0xFF;
     354            filter[3]    = rdr->sa[0][1];
     355            filter[3+16] = 0xFF;
     356            break;
     357        case UNIQUE:
     358            filter[0]    = 0x82;
     359            filter[0+16] = 0xFF;
     360            filter[1]    = 0xD3;
     361            filter[1+16] = 0xFF;
     362            memcpy(filter+2, rdr->hexserial, 4);
     363            memset(filter+2+16, 0xFF, 4);
     364            break;
     365    }
     366
     367    return filter;
    354368}
    355369
Note: See TracChangeset for help on using the changeset viewer.