- Timestamp:
- 08/07/13 14:51:09 (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/modern/module-camd35.c
r8770 r8821 130 130 rs = recv(client->udp_fd, buf, client->is_udp ? l : 36, 0); 131 131 } 132 if (rs < 24) rc = -1; 132 if (rs < 36) { 133 rc = -1; 134 goto out; 135 } 133 136 break; 134 137 case 1: … … 159 162 if (!(client->is_udp && client->typ == 'c') && (rs < n) && ((n-32) > 0)) { 160 163 len = recv(client->udp_fd, buf+32, n-32, 0); // read the rest of the packet 161 if (len >0) {162 rs +=len;164 if (len > 0) { 165 rs += len; 163 166 aes_decrypt(&client->aes_keys, buf+32, len); 167 } 168 if (len < 0) { 169 rc = -1; 170 goto out; 164 171 } 165 172 } … … 181 188 } 182 189 190 out: 183 191 if ((rs>0) && ((rc==-1)||(rc==-2))) { 184 192 cs_ddump_mask(client->typ == 'c'?D_CLIENT:D_READER, buf, rs, … … 373 381 } 374 382 375 static void camd35_process_ecm(uchar *buf )383 static void camd35_process_ecm(uchar *buf, int buflen) 376 384 { 377 385 ECM_REQUEST *er; 386 if (!buf || buflen < 23) 387 return; 388 uint16_t ecmlen = (((buf[21] & 0x0f)<< 8) | buf[22])+3; 389 if (ecmlen + 20 > buflen) 390 return; 378 391 if (!(er = get_ecmtask())) 379 392 return; 380 393 // er->l = buf[1]; 381 394 //fix ECM LEN issue 382 er->ecmlen = (((buf[21]&0x0f)<< 8) | buf[22])+3;395 er->ecmlen = ecmlen; 383 396 if (!cs_malloc(&er->src_data, 0x34 + 20 + er->ecmlen)) 384 397 return; … … 392 405 } 393 406 394 static void camd35_process_emm(uchar *buf )407 static void camd35_process_emm(uchar *buf, int buflen, int emmlen) 395 408 { 396 409 EMM_PACKET epg; 410 if (!buf || buflen < 20 || emmlen + 20 > buflen) 411 return; 397 412 memset(&epg, 0, sizeof(epg)); 398 epg.emmlen = buf[1];413 epg.emmlen = emmlen; 399 414 memcpy(epg.caid, buf + 10, 2); 400 415 memcpy(epg.provid, buf + 12 , 4); … … 737 752 #endif 738 753 739 static void * camd35_server(struct s_client *client __attribute__((unused)), uchar *mbuf, int32_t n) 740 { 754 static void * camd35_server(struct s_client *client, uchar *mbuf, int32_t n) 755 { 756 if (!client || !mbuf) 757 return NULL; 758 741 759 if (client->reader){ 742 760 client->reader->last_g = time((time_t *) 0); // last receive is now … … 748 766 case 0: // ECM 749 767 case 3: // ECM (cascading) 750 camd35_process_ecm(mbuf );768 camd35_process_ecm(mbuf, n); 751 769 break; 752 770 #ifdef CS_CACHEEX … … 763 781 case 6: // EMM 764 782 case 19: // EMM 765 camd35_process_emm(mbuf); 783 if (n > 2) 784 camd35_process_emm(mbuf, n, mbuf[1]); 766 785 break; 767 786 default:
Note:
See TracChangeset
for help on using the changeset viewer.