Changeset 1228 for branches/monitor-improvement/module-cccam.c
- Timestamp:
- 01/14/10 19:07:30 (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/monitor-improvement/module-cccam.c
r1140 r1228 165 165 166 166 #define SWAPC(X, Y) do { char p; p = *X; *X = *Y; *Y = p; } while(0) 167 #define X_FREE(X) do { if (X) { free(X); X = NULL; } } while(0)167 #define NULLFREE(X) do { if (X) { free(X); X = NULL; } } while(0) 168 168 169 169 #if (defined(WIN32) || defined(OS_CYGWIN32)) && !defined(MSG_WAITALL) … … 383 383 n = send(client[cs_idx].udp_fd, netbuf, len, 0); 384 384 385 X_FREE(netbuf);385 NULLFREE(netbuf); 386 386 387 387 return n; … … 548 548 n = cc_cmd_send(ecmbuf, cur_er->l+13, MSG_ECM); // send ecm 549 549 550 X_FREE(ecmbuf);550 NULLFREE(ecmbuf); 551 551 } else { 552 552 n = -1; … … 742 742 { 743 743 int n; 744 uchar *cbuf; 744 745 struct cc_data *cc = reader[ridx].cc; 745 uchar *cbuf = malloc(l); 746 747 if (buf==NULL) return -1; 748 cbuf = malloc(l); 749 if (cbuf==NULL) return -1; 746 750 747 751 memcpy(cbuf, buf, l); // make a copy of buf … … 756 760 } 757 761 758 cs_ddump( buf, n, "cccam: received %d bytes from %s", n, remote_txt());762 cs_ddump(cbuf, n, "cccam: received %d bytes from %s", n, remote_txt()); 759 763 client[cs_idx].last = time((time_t *) 0); 760 764 761 if (n < 4) { 765 if (n == 0) { 766 cs_log("cccam: Connection closed to %s", remote_txt()); 767 n = -1; 768 } else if (n < 4) { 762 769 cs_log("cccam: packet to small (%d bytes)", n); 763 770 n = -1; 764 } else if (n == 0) { 765 cs_log("cccam: Connection closed to %s", remote_txt()); 766 n = -1; 767 } 768 769 cc_parse_msg(cbuf, n); 770 771 memcpy(buf, cbuf, l); 772 773 X_FREE(cbuf); 771 } else { 772 // parse it and write it back, if we have received something of value 773 cc_parse_msg(cbuf, n); 774 memcpy(buf, cbuf, l); 775 } 776 777 NULLFREE(cbuf); 774 778 775 779 pthread_mutex_unlock(&cc->lock); … … 784 788 uint8 hash[SHA_DIGEST_LENGTH]; 785 789 uint8 buf[CC_MAXMSGSIZE]; 790 char pwd[64]; 786 791 struct cc_data *cc; 792 793 if (reader[ridx].cc) NULLFREE(reader[ridx].cc); 787 794 788 795 // init internals data struct 789 796 cc = malloc(sizeof(struct cc_data)); 797 if (cc==NULL) { 798 cs_log("cccam: cannot allocate memory"); 799 return -1; 800 } 790 801 reader[ridx].cc = cc; 791 802 bzero(reader[ridx].cc, sizeof(struct cc_data)); … … 827 838 828 839 bzero(buf, sizeof(buf)); 829 830 840 memcpy(buf, reader[ridx].r_usr, strlen(reader[ridx].r_usr)); 831 841 cs_ddump(buf, 20, "cccam: username '%s':", buf); … … 833 843 834 844 bzero(buf, sizeof(buf)); 845 bzero(pwd, sizeof(pwd)); 835 846 836 847 cs_debug("cccam: 'CCcam' xor"); 837 848 memcpy(buf, "CCcam", 5); 838 cc_crypt(&cc->block[ENCRYPT], (uint8 *)reader[ridx].r_pwd, strlen(reader[ridx].r_pwd), ENCRYPT); // modify encryption state w/ pwd 849 strncpy(pwd, reader[ridx].r_pwd, 63); 850 cc_crypt(&cc->block[ENCRYPT], (uint8 *)pwd, strlen(pwd), ENCRYPT); 839 851 cc_cmd_send(buf, 6, MSG_NO_HEADER); // send 'CCcam' xor w/ pwd 840 852 … … 925 937 bcopy((char *)server->h_addr, (char *)&client[cs_idx].udp_sa.sin_addr.s_addr, server->h_length); 926 938 927 reader[ridx].tcp_rto = 60 * 60 * 10; // timeout to 10 hours 939 if (reader[ridx].tcp_rto <= 0) reader[ridx].tcp_rto = 60 * 60 * 10; // timeout to 10 hours 940 cs_debug("cccam: reconnect timeout set to: %d", reader[ridx].tcp_rto); 928 941 if (!reader[ridx].cc_maxhop) reader[ridx].cc_maxhop = 10; // default maxhop to 10 if not configured 929 942
Note:
See TracChangeset
for help on using the changeset viewer.