Changeset 1816


Ignore:
Timestamp:
Mar 9, 2010, 5:28:36 PM (10 years ago)
Author:
merek
Message:

Merge UMP r1868-r1880

Location:
trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/globals.h

    r1814 r1816  
    875875extern void set_signal_handler(int , int , void (*)(int));
    876876extern void cs_log_config(void);
     877extern void cs_waitforcardinit(void);
    877878extern void cs_reinit_clients(void);
    878879extern void cs_resolve(void);
  • trunk/module-cccam.c

    r1814 r1816  
    786786    break;
    787787  case MSG_KEEPALIVE:
    788     if (!is_server) {
     788    if (!reader[ridx].cc) {
     789      cs_debug("cccam: keepalive ack");
     790    } else {
    789791      cc_cmd_send(NULL, 0, MSG_KEEPALIVE);
    790792      cs_debug("cccam: keepalive");
     
    10161018  struct cc_data *cc = client[cs_idx].cc;
    10171019
     1020  cs_debug("cccam: reporting card changes to client...");
     1021
    10181022  reshare = cfg->cc_reshare;
    10191023
     
    10251029      for (j=0; j<CS_MAXFILTERS; j++)
    10261030      {
    1027         if (reader[r].ftab.filts[j].caid)
     1031        if (reader[r].ftab.filts[j].caid && !reader[r].cc_id)
    10281032  {
    10291033          reader[r].cc_id = 0x63 + r;
     
    10341038          buf[3] = reader[r].cc_id & 0xff;
    10351039    buf[7] = reader[r].cc_id;
    1036     if (!buf[7])
    1037       buf[7] = 0x63 + r;
    10381040          buf[8] = reader[r].ftab.filts[j].caid >> 8;
    10391041          buf[9] = reader[r].ftab.filts[j].caid & 0xff;
     
    10501052          memcpy(buf + 22 + (k*7), cc->node_id, 8);
    10511053
    1052    reader[r].cc_id = buf[7];
     1054  // reader[r].cc_id = buf[7];
     1055          cs_debug("cccam: send new card (1)...");
    10531056   cc_cmd_send(buf, 30 + (k*7), MSG_NEW_CARD);
    10541057    flt = 1;
     
    10601063    {
    10611064      memset(buf, 0, sizeof(buf));
    1062       buf[0] = reader[r].cc_id >> 24;
    1063       buf[1] = reader[r].cc_id >> 16;
    1064       buf[2] = reader[r].cc_id >> 8;
    1065       buf[3] = reader[r].cc_id & 0xff;
    1066       buf[7] = reader[r].cc_id;
    1067       if (!buf[7])
    1068         buf[7] = 0x63 + r;
    1069       buf[8] = reader[r].caid[0] >> 8;
    1070       buf[9] = reader[r].caid[0] & 0xff;
    1071       buf[10] = hop;
    1072       buf[11] = reshare;
    1073       buf[20] = reader[r].nprov;
    1074       for (j=0; j<reader[r].nprov; j++)
     1065      if ((reader[r].tcp_connected || reader[r].card_status == CARD_INSERTED) && !reader[r].cc_id)
    10751066      {
    1076         if (reader[r].card_status == CARD_INSERTED)
    1077       memcpy(buf + 21 + (j*7), reader[r].prid[j]+1, 3);
    1078   else
    1079       memcpy(buf + 21 + (j*7), reader[r].prid[j], 3);
    1080       }
    1081 
    1082       buf[21 + (j*7)] = 1;
    1083       memcpy(buf + 22 + (j*7), cc->node_id, 8);
    1084 
    1085       if (reader[r].tcp_connected || reader[r].card_status == CARD_INSERTED)
    1086       {
    1087         reader[r].cc_id = buf[7];
     1067        reader[r].cc_id = 0x63 + r;
     1068        buf[0] = reader[r].cc_id >> 24;
     1069        buf[1] = reader[r].cc_id >> 16;
     1070        buf[2] = reader[r].cc_id >> 8;
     1071        buf[3] = reader[r].cc_id & 0xff;
     1072        buf[7] = reader[r].cc_id;
     1073        buf[8] = reader[r].caid[0] >> 8;
     1074        buf[9] = reader[r].caid[0] & 0xff;
     1075        buf[10] = hop;
     1076        buf[11] = reshare;
     1077        buf[20] = reader[r].nprov;
     1078        for (j=0; j<reader[r].nprov; j++)
     1079        {
     1080          if (reader[r].card_status == CARD_INSERTED)
     1081        memcpy(buf + 21 + (j*7), reader[r].prid[j]+1, 3);
     1082    else
     1083        memcpy(buf + 21 + (j*7), reader[r].prid[j], 3);
     1084        }
     1085
     1086        buf[21 + (j*7)] = 1;
     1087        memcpy(buf + 22 + (j*7), cc->node_id, 8);
     1088
     1089    //    reader[r].cc_id = buf[7];
     1090        cs_debug("cccam: send new card (2)...");
    10881091        cc_cmd_send(buf, 30 + (j*7), MSG_NEW_CARD);
    10891092      }
     
    10961099          buf[3] = reader[r].cc_id & 0xff;
    10971100          reader[r].cc_id = 0;
     1101          cs_debug("cccam: send remove card...");
    10981102          cc_cmd_send(buf, 4, MSG_CARD_REMOVED);
     1103          cs_debug("cccam: OK!");
    10991104        }
    11001105    }
     
    12041209
    12051210  // report cards
     1211  for (i=0; i<CS_MAXREADER; i++)
     1212    reader[i].cc_id = 0;
    12061213  cc_srv_report_cards();
    12071214
     
    12121219    if (i == -9) {
    12131220      cc_srv_report_cards();
    1214       cmi += 10;
    1215       if (cmi >= cfg->cmaxidle) {
    1216         //cs_log("cccam: keepalive after %d sec", cfg->cmaxidle);
    1217         cmi = 0;
     1221      //cmi += 10;
     1222     // if (cmi >= cfg->cmaxidle) {
     1223    //    cmi = 0;
    12181224        if (cc_cmd_send(NULL, 0, MSG_KEEPALIVE) > 0) {
    1219           cs_debug("cccam: keepalive");
     1225          cs_debug("cccam: keepalive after maxidle is reached");
    12201226          i = 1;
    12211227        }
    1222       }
     1228   //   }
    12231229    } else if (i <= 0) break;
    12241230  }
     
    12261232  cs_disconnect_client();
    12271233
     1234  for (i=0; i<CS_MAXREADER; i++)
     1235    reader[i].cc_id = 0;
     1236
    12281237  return 0;
    12291238}
     
    12311240void cc_srv_init()
    12321241{
     1242  //cs_waitforcardinit();
    12331243  pfd=client[cs_idx].udp_fd;
    12341244  //cc_auth_client(client[cs_idx].ip);
     
    12381248int cc_cli_init()
    12391249{
     1250  //cs_waitforcardinit();
    12401251  if (!reader[ridx].tcp_connected) {
    12411252    static struct sockaddr_in loc_sa;
  • trunk/oscam.c

    r1814 r1816  
    19921992        for (j = 0; (j < 6) && (er->rc > 99); j++)
    19931993        {
    1994             usleep(1);
     1994            cs_sleepms(1);
    19951995            switch(j) {
    19961996
     
    23812381}
    23822382
     2383void cs_waitforcardinit()
     2384{
     2385    if (cfg->waitforcards)
     2386    {
     2387        int card_init_done, i;
     2388        cs_sleepms(3000);  // short sleep for card detect to work proberly
     2389        do {
     2390            card_init_done = 1;
     2391            for (i = 0; i < CS_MAXREADER; i++) {
     2392                if (reader[i].card_status == CARD_NEED_INIT) {
     2393                    card_init_done = 0;
     2394                    break;
     2395                }
     2396            }
     2397            cs_sleepms(300); // wait a little bit
     2398            alarm(cfg->cmaxidle + cfg->ctimeout / 1000 + 1);
     2399        } while (!card_init_done);
     2400    }
     2401}
     2402
    23832403int main (int argc, char *argv[])
    23842404{
     
    25042524  init_cardreader();
    25052525
    2506   if (cfg->waitforcards)
    2507   {
    2508       int card_init_done;
    2509       cs_log("waiting for local card init");
    2510       cs_sleepms(3000);  // short sleep for card detect to work proberly
    2511       do {
    2512           card_init_done = 1;
    2513           for (i = 0; i < CS_MAXREADER; i++) {
    2514             if (reader[i].card_status == CARD_NEED_INIT) {
    2515               card_init_done = 0;
    2516               break;
    2517             }
    2518           }
    2519           cs_sleepms(300);              // wait a little bit
    2520           alarm(cfg->cmaxidle + cfg->ctimeout / 1000 + 1);
    2521       } while (!card_init_done);
    2522       cs_log("init for all local cards done");
    2523 
    2524   }
     2526  cs_log("waiting for local card init");
     2527  cs_waitforcardinit();
     2528  cs_log("init for all local cards done");
    25252529
    25262530#ifdef CS_ANTICASC
Note: See TracChangeset for help on using the changeset viewer.