Changeset 8264
- Timestamp:
- 02/03/13 20:48:42 (11 years ago)
- Location:
- trunk
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/global-functions.h
r8263 r8264 35 35 * oscam-reader 36 36 * =========================== */ 37 extern int32_t check_sct_len(const unsigned char *data, int32_t off);38 37 extern void * start_cardreader(void *); 39 38 extern int32_t hostResolve(struct s_reader * reader); … … 58 57 void add_provider(uint16_t caid, uint32_t provid, const char *name, const char *sat, const char *lang); 59 58 60 /* ===========================61 * reader-common62 * =========================== */63 extern struct s_cardsystem *get_cardsystem_by_caid(uint16_t caid);64 65 59 #endif -
trunk/oscam-reader.c
r8258 r8264 15 15 16 16 extern CS_MUTEX_LOCK system_lock; 17 extern struct s_cardsystem cardsystems[CS_MAX_MOD]; 18 19 struct s_cardsystem *get_cardsystem_by_caid(uint16_t caid) { 20 int32_t i, j; 21 for (i = 0; i < CS_MAX_MOD; i++) { 22 if (cardsystems[i].caids) { 23 for (j = 0; j < 2; j++) { 24 uint16_t cs_caid = cardsystems[i].caids[j]; 25 if (cs_caid == caid || cs_caid == caid >> 8) 26 return &cardsystems[i]; 27 } 28 } 29 } 30 return NULL; 31 } 32 33 struct s_reader *get_reader_by_label(char *lbl) 34 { 35 struct s_reader *rdr; 36 LL_ITER itr = ll_iter_create(configured_readers); 37 while ((rdr = ll_iter_next(&itr))) { 38 if (streq(lbl, rdr->label)) 39 break; 40 } 41 return rdr; 42 } 43 44 char *reader_get_type_desc(struct s_reader * rdr, int32_t extended) 45 { 46 char *desc = "unknown"; 47 if (rdr->crdr.desc) 48 return rdr->crdr.desc; 49 if (is_network_reader(rdr) || rdr->typ == R_SERIAL) { 50 if (rdr->ph.desc) 51 desc = rdr->ph.desc; 52 } 53 if (rdr->typ == R_NEWCAMD && rdr->ncd_proto == NCD_524) 54 desc = "newcamd524"; 55 else if (extended && rdr->typ == R_CCCAM && cccam_client_extended_mode(rdr->client)) { 56 desc = "cccam ext"; 57 } 58 return desc; 59 } 60 61 bool hexserialset(struct s_reader *rdr) 62 { 63 int i; 64 if (!rdr) 65 return false; 66 for (i = 0; i < 8; i++) { 67 if (rdr->hexserial[i]) 68 return true; 69 } 70 return false; 71 } 72 73 void hexserial_to_newcamd(uchar *source, uchar *dest, uint16_t caid) 74 { 75 if (caid == 0x5581 || caid == 0x4aee) { // Bulcrypt 76 dest[0] = 0x00; 77 dest[1] = 0x00; 78 memcpy(dest + 2, source, 4); 79 return; 80 } 81 caid = caid >> 8; 82 if (caid == 0x17 || caid == 0x06) { // Betacrypt or Irdeto 83 // only 4 Bytes Hexserial for newcamd clients (Hex Base + Hex Serial) 84 // first 2 Byte always 00 85 dest[0]=0x00; //serial only 4 bytes 86 dest[1]=0x00; //serial only 4 bytes 87 // 1 Byte Hex Base (see reader-irdeto.c how this is stored in "source") 88 dest[2]=source[3]; 89 // 3 Bytes Hex Serial (see reader-irdeto.c how this is stored in "source") 90 dest[3]=source[0]; 91 dest[4]=source[1]; 92 dest[5]=source[2]; 93 } else if (caid == 0x05 || caid == 0x0D) { 94 dest[0] = 0x00; 95 memcpy(dest + 1, source, 5); 96 } else { 97 memcpy(dest, source, 6); 98 } 99 } 100 101 void newcamd_to_hexserial(uchar *source, uchar *dest, uint16_t caid) 102 { 103 caid = caid >> 8; 104 if (caid == 0x17 || caid == 0x06) { // Betacrypt or Irdeto 105 memcpy(dest, source+3, 3); 106 dest[3] = source[2]; 107 dest[4] = 0; 108 dest[5] = 0; 109 } else if (caid == 0x05 || caid == 0x0D) { 110 memcpy(dest, source+1, 5); 111 dest[5] = 0; 112 } else { 113 memcpy(dest, source, 6); 114 } 115 } 17 116 18 117 /** … … 533 632 } 534 633 #endif 535 536 char *reader_get_type_desc(struct s_reader * rdr, int32_t extended)537 {538 char *desc = "unknown";539 if (rdr->crdr.desc)540 return rdr->crdr.desc;541 if (is_network_reader(rdr) || rdr->typ == R_SERIAL) {542 if (rdr->ph.desc)543 desc = rdr->ph.desc;544 }545 if (rdr->typ == R_NEWCAMD && rdr->ncd_proto == NCD_524)546 desc = "newcamd524";547 else if (extended && rdr->typ == R_CCCAM && cccam_client_extended_mode(rdr->client)) {548 desc = "cccam ext";549 }550 return desc;551 }552 553 void hexserial_to_newcamd(uchar *source, uchar *dest, uint16_t caid)554 {555 if (caid == 0x5581 || caid == 0x4aee) { // Bulcrypt556 dest[0] = 0x00;557 dest[1] = 0x00;558 memcpy(dest + 2, source, 4);559 return;560 }561 caid = caid >> 8;562 if (caid == 0x17 || caid == 0x06) { // Betacrypt or Irdeto563 // only 4 Bytes Hexserial for newcamd clients (Hex Base + Hex Serial)564 // first 2 Byte always 00565 dest[0]=0x00; //serial only 4 bytes566 dest[1]=0x00; //serial only 4 bytes567 // 1 Byte Hex Base (see reader-irdeto.c how this is stored in "source")568 dest[2]=source[3];569 // 3 Bytes Hex Serial (see reader-irdeto.c how this is stored in "source")570 dest[3]=source[0];571 dest[4]=source[1];572 dest[5]=source[2];573 } else if (caid == 0x05 || caid == 0x0D) {574 dest[0] = 0x00;575 memcpy(dest + 1, source, 5);576 } else {577 memcpy(dest, source, 6);578 }579 }580 581 void newcamd_to_hexserial(uchar *source, uchar *dest, uint16_t caid)582 {583 caid = caid >> 8;584 if (caid == 0x17 || caid == 0x06) { // Betacrypt or Irdeto585 memcpy(dest, source+3, 3);586 dest[3] = source[2];587 dest[4] = 0;588 dest[5] = 0;589 } else if (caid == 0x05 || caid == 0x0D) {590 memcpy(dest, source+1, 5);591 dest[5] = 0;592 } else {593 memcpy(dest, source, 6);594 }595 }596 597 struct s_reader *get_reader_by_label(char *lbl)598 {599 struct s_reader *rdr;600 LL_ITER itr = ll_iter_create(configured_readers);601 while ((rdr = ll_iter_next(&itr))) {602 if (streq(lbl, rdr->label))603 break;604 }605 return rdr;606 }607 608 bool hexserialset(struct s_reader *rdr)609 {610 int i;611 if (!rdr)612 return false;613 for (i = 0; i < 8; i++) {614 if (rdr->hexserial[i])615 return true;616 }617 return false;618 }619 634 620 635 void cs_card_info(void) -
trunk/oscam-reader.h
r8255 r8264 2 2 #define _OSCAM_READER_H_ 3 3 4 struct s_cardsystem *get_cardsystem_by_caid(uint16_t caid); 5 struct s_reader *get_reader_by_label(char *lbl); 4 6 char *reader_get_type_desc(struct s_reader * rdr, int32_t extended); 7 8 bool hexserialset(struct s_reader *rdr); 5 9 void hexserial_to_newcamd(uchar *source, uchar *dest, uint16_t caid); 6 10 void newcamd_to_hexserial(uchar *source, uchar *dest, uint16_t caid); 7 struct s_reader *get_reader_by_label(char *lbl); 8 bool hexserialset(struct s_reader *rdr); 11 9 12 void cs_card_info(void); 10 13 int32_t reader_init(struct s_reader *reader); -
trunk/oscam-simples.c
r8242 r8264 1 //FIXME Not checked on threadsafety yet; after checking please remove this line2 1 #include "globals.h" 3 #include "oscam-garbage.h"4 2 #include "oscam-string.h" 5 6 extern struct s_cardsystem cardsystems[CS_MAX_MOD];7 3 8 4 /* Gets the servicename. Make sure that buf is at least 32 bytes large. */ … … 91 87 *ptr = prov; 92 88 } 93 94 int32_t check_sct_len(const uchar *data, int32_t off)95 {96 int32_t len = SCT_LEN(data);97 if (len + off > MAX_LEN) {98 cs_debug_mask(D_TRACE | D_READER, "check_sct_len(): smartcard section too long %d > %d", len, MAX_LEN - off);99 len = -1;100 }101 return len;102 }103 104 struct s_cardsystem *get_cardsystem_by_caid(uint16_t caid) {105 int32_t i, j;106 for (i = 0; i < CS_MAX_MOD; i++) {107 if (cardsystems[i].caids) {108 for (j = 0; j < 2; j++) {109 uint16_t cs_caid = cardsystems[i].caids[j];110 if (cs_caid == caid || cs_caid == caid >> 8)111 return &cardsystems[i];112 }113 }114 }115 return NULL;116 } -
trunk/reader-common.c
r8258 r8264 16 16 17 17 extern struct s_cardsystem cardsystems[CS_MAX_MOD]; 18 19 int32_t check_sct_len(const uchar *data, int32_t off) 20 { 21 int32_t len = SCT_LEN(data); 22 if (len + off > MAX_LEN) { 23 cs_debug_mask(D_TRACE | D_READER, "check_sct_len(): smartcard section too long %d > %d", len, MAX_LEN - off); 24 len = -1; 25 } 26 return len; 27 } 18 28 19 29 static void reader_nullcard(struct s_reader * reader) -
trunk/reader-common.h
r8256 r8264 9 9 #include "csctapi/atr.h" 10 10 #include "oscam-string.h" 11 #include "oscam-reader.h" 11 12 12 13 int32_t reader_cmd2icc(struct s_reader *reader, const uchar *buf, const int32_t l, uchar *response, uint16_t *response_length); … … 45 46 void cardreader_process_ecm(struct s_reader *reader, struct s_client *cl, ECM_REQUEST *er); 46 47 void cardreader_get_card_info(struct s_reader *reader); 48 int32_t check_sct_len(const unsigned char *data, int32_t off); 47 49 #else 48 50 static inline void cardreader_init_locks(void) { }
Note:
See TracChangeset
for help on using the changeset viewer.