Changeset 8376
- Timestamp:
- 02/19/13 14:25:06 (11 years ago)
- Location:
- trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/module-dvbapi.c
r8366 r8376 1053 1053 1054 1054 #ifdef READER_VIACCESS 1055 extern int32_t viaccess_reassemble_emm(uchar *buffer, uint32_t *len , int32_t demux_index, uint16_t caid, uint32_t provid, uint16_t pid);1055 extern int32_t viaccess_reassemble_emm(uchar *buffer, uint32_t *len); 1056 1056 #endif 1057 1057 #ifdef READER_CRYPTOWORKS … … 1073 1073 case 0x05: 1074 1074 #ifdef READER_VIACCESS 1075 if (!viaccess_reassemble_emm(buffer, &len , demux_index, filter->caid, filter->provid, filter->pid))1075 if (!viaccess_reassemble_emm(buffer, &len)) 1076 1076 #endif 1077 1077 return; -
trunk/reader-viaccess.c
r8119 r8376 988 988 void dvbapi_sort_nanos(unsigned char *dest, const unsigned char *src, int32_t len); 989 989 990 struct s_reassemble_viaemm_data { 991 int32_t demux_id; 992 uint16_t caid; 993 uint32_t provid; 994 uint16_t pid; 995 uchar emm_global[512]; 996 uint32_t emm_global_len; 997 } S_REASSEMBLE_VIAEMM_DATA; 998 LLIST *ll_reassemble_viaemm_data = NULL; 999 1000 struct s_reassemble_viaemm_data *get_reassemble_viaemm_data(int32_t demux_index, uint16_t caid, uint32_t provid, uint16_t pid) 1001 { 1002 if (!ll_reassemble_viaemm_data) 1003 ll_reassemble_viaemm_data = ll_create("ll_reassemble_viaemm_data"); 1004 1005 struct s_reassemble_viaemm_data *data; 1006 LL_ITER itr; 1007 if (ll_count(ll_reassemble_viaemm_data) > 0) { 1008 itr = ll_iter_create(ll_reassemble_viaemm_data); 1009 while ((data=ll_iter_next(&itr))) { 1010 if (data->demux_id == demux_index && data->caid == caid && data->provid == provid && data->pid == pid) 1011 return data; 1012 } 1013 } 1014 return NULL; 1015 } 1016 1017 int8_t add_reassemble_viaemm_data(int32_t demux_index, uint16_t caid, uint32_t provid, uint16_t pid, uchar *buffer, uint32_t *len) 1018 { 1019 if (!ll_reassemble_viaemm_data) 1020 ll_reassemble_viaemm_data = ll_create("ll_reassemble_viaemm_data"); 1021 1022 struct s_reassemble_viaemm_data *data; 1023 if (!cs_malloc(&data,sizeof(struct s_reassemble_viaemm_data))) 1024 return 0; 1025 1026 data->demux_id = demux_index; 1027 data->caid = caid; 1028 data->provid = provid; 1029 data->pid = pid; 1030 data->emm_global_len =*len; 1031 memcpy(data->emm_global, buffer, *len); 1032 ll_append(ll_reassemble_viaemm_data, data); 1033 return 1; 1034 } 1035 1036 int32_t viaccess_reassemble_emm(uchar *buffer, uint32_t *len, int32_t demux_index, uint16_t caid, uint32_t provid, uint16_t pid) { 1037 int32_t pos=0; 1038 uint32_t i, k; 990 int32_t viaccess_reassemble_emm(uchar *buffer, uint32_t *len) { 991 static uchar emm_global[512]; 992 static int32_t emm_global_len = 0; 993 994 int32_t pos=0, i; 995 uint32_t k; 1039 996 1040 997 // Viaccess 1041 998 if (*len>500) return 0; 1042 1043 struct s_reassemble_viaemm_data *data = get_reassemble_viaemm_data(demux_index, caid, provid, pid);1044 999 1045 1000 switch(buffer[0]) { 1046 1001 case 0x8c: 1047 1002 case 0x8d: 1048 if (!data || !data->emm_global_len || !data->emm_global) {1049 add_reassemble_viaemm_data(demux_index, caid, provid, pid, buffer, len);1003 // emm-s part 1 1004 if (!memcmp(emm_global, buffer, *len)) 1050 1005 return 0; 1051 } 1052 // emm-s part 1 1053 if (!memcmp(data->emm_global, buffer, *len)) 1054 return 0; 1055 1056 ll_remove(ll_reassemble_viaemm_data, data); 1006 1057 1007 // copy first part of the emm-s 1058 add_reassemble_viaemm_data(demux_index, caid, provid, pid, buffer, len); 1008 memcpy(emm_global, buffer, *len); 1009 emm_global_len=*len; 1059 1010 //cs_ddump_mask(D_READER, buffer, len, "viaccess global emm:"); 1060 1011 return 0; … … 1062 1013 case 0x8e: 1063 1014 // emm-s part 2 1064 if (!data || !data->emm_global_len || !data->emm_global) 1065 return 0; 1015 if (!emm_global_len) return 0; 1066 1016 1067 1017 //extract nanos from emm-gh and emm-s … … 1070 1020 cs_debug_mask(D_DVBAPI, "[viaccess] %s: start extracting nanos", __func__); 1071 1021 //extract from emm-gh 1072 for (i=3; i< data->emm_global_len; i+=data->emm_global[i+1]+2) {1022 for (i=3; i<emm_global_len; i+=emm_global[i+1]+2) { 1073 1023 //copy nano (length determined by i+1) 1074 memcpy(emmbuf+pos, data->emm_global+i, data->emm_global[i+1]+2);1075 pos+= data->emm_global[i+1]+2;1024 memcpy(emmbuf+pos, emm_global+i, emm_global[i+1]+2); 1025 pos+=emm_global[i+1]+2; 1076 1026 } 1077 1027 … … 1103 1053 buffer[2]=pos-3; 1104 1054 1105 cs_ddump_mask(D_DVBAPI, data->emm_global, data->emm_global_len, "[viaccess] %s: emm-gh", __func__);1055 cs_ddump_mask(D_DVBAPI, emm_global, emm_global_len, "[viaccess] %s: emm-gh", __func__); 1106 1056 cs_ddump_mask(D_DVBAPI, buffer, pos, "[viaccess] %s: assembled emm", __func__); 1107 1057
Note:
See TracChangeset
for help on using the changeset viewer.