Ignore:
Timestamp:
01/14/10 19:07:30 (13 years ago)
Author:
alno
Message:

WebIf:

  • Command: Merging revisions 1212-1227 of trunk
File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/monitor-improvement/module-cccam.c

    r1140 r1228  
    165165
    166166#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)
    168168
    169169#if (defined(WIN32) || defined(OS_CYGWIN32)) && !defined(MSG_WAITALL)
     
    383383  n = send(client[cs_idx].udp_fd, netbuf, len, 0);
    384384
    385   X_FREE(netbuf);
     385  NULLFREE(netbuf);
    386386
    387387  return n;
     
    548548    n = cc_cmd_send(ecmbuf, cur_er->l+13, MSG_ECM);      // send ecm
    549549
    550     X_FREE(ecmbuf);
     550    NULLFREE(ecmbuf);
    551551  } else {
    552552    n = -1;
     
    742742{
    743743  int n;
     744  uchar *cbuf;
    744745  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;
    746750
    747751  memcpy(cbuf, buf, l);   // make a copy of buf
     
    756760  }
    757761
    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());
    759763  client[cs_idx].last = time((time_t *) 0);
    760764
    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) {
    762769    cs_log("cccam: packet to small (%d bytes)", n);
    763770    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);
    774778
    775779  pthread_mutex_unlock(&cc->lock);
     
    784788  uint8 hash[SHA_DIGEST_LENGTH];
    785789  uint8 buf[CC_MAXMSGSIZE];
     790  char pwd[64];
    786791  struct cc_data *cc;
     792
     793  if (reader[ridx].cc) NULLFREE(reader[ridx].cc);
    787794
    788795  // init internals data struct
    789796  cc = malloc(sizeof(struct cc_data));
     797  if (cc==NULL) {
     798    cs_log("cccam: cannot allocate memory");
     799    return -1;
     800  }
    790801  reader[ridx].cc = cc;
    791802  bzero(reader[ridx].cc, sizeof(struct cc_data));
     
    827838
    828839  bzero(buf, sizeof(buf));
    829 
    830840  memcpy(buf, reader[ridx].r_usr, strlen(reader[ridx].r_usr));
    831841  cs_ddump(buf, 20, "cccam: username '%s':", buf);
     
    833843
    834844  bzero(buf, sizeof(buf));
     845  bzero(pwd, sizeof(pwd));
    835846
    836847  cs_debug("cccam: 'CCcam' xor");
    837848  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);
    839851  cc_cmd_send(buf, 6, MSG_NO_HEADER); // send 'CCcam' xor w/ pwd
    840852
     
    925937    bcopy((char *)server->h_addr, (char *)&client[cs_idx].udp_sa.sin_addr.s_addr, server->h_length);
    926938
    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);
    928941    if (!reader[ridx].cc_maxhop) reader[ridx].cc_maxhop = 10; // default maxhop to 10 if not configured
    929942
Note: See TracChangeset for help on using the changeset viewer.