Changeset 5101
- Timestamp:
- 04/28/11 11:34:29 (13 years ago)
- Location:
- trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/module-stat.c
r5095 r5101 388 388 389 389 //add timeout to stat: 390 if (ecm_time<=0 )390 if (ecm_time<=0 || ecm_time > (int)cfg.ctimeout) 391 391 ecm_time = cfg.ctimeout; 392 392 stat->time_idx++; … … 588 588 er_beta->l = er->l; 589 589 er_beta->client = er->client; 590 er_beta->beta_ptr_to_nagra = er; 590 er_beta->beta_ptr_to_nagra = er; 591 er->beta_ptr_to_nagra = er_beta; //link back 591 592 convert_to_beta(er->client, er_beta, caid_to); 592 593 er_beta->btun = 0; … … 606 607 LLIST * result = ll_create(); 607 608 LLIST * selected = ll_create(); 609 LLIST * timeout_services = ll_create(); 608 610 609 611 struct timeb new_nulltime; … … 694 696 695 697 if (stat->rc >= 5) 696 nbest_readers++; //just add another reader if best reader is nonresponding but has services 698 ll_prepend(timeout_services, rdr); 699 //just add another reader if best reader is nonresponding but has services 697 700 698 701 switch (cfg.lb_mode) { … … 781 784 782 785 if (nlocal_readers) {//primary readers, local 783 nlocal_readers--; 786 if (!ll_contains(timeout_services, best_rdri)) 787 nlocal_readers--; 784 788 ll_append(result, best_rdri); 785 789 nreaders--; … … 788 792 } 789 793 else if (nbest_readers) {//primary readers, other 790 nbest_readers--; 794 if (!ll_contains(timeout_services, best_rdri)) 795 nbest_readers--; 791 796 ll_append(result, best_rdri); 792 797 nreaders--; … … 795 800 } 796 801 else if (nfb_readers) { //fallbacks: 797 nfb_readers--; 802 if (!ll_contains(timeout_services, best_rdri)) 803 nfb_readers--; 798 804 LL_NODE *node = ll_append(result, best_rdri); 799 805 if (!fallback) … … 805 811 ll_iter_release(it); 806 812 ll_destroy_data(selected); 813 ll_destroy(timeout_services); 807 814 808 815 if (!n) //no best reader found? reopen if we have ecm_count>0 -
trunk/oscam.c
r5100 r5101 2190 2190 if (ert) { 2191 2191 //betatunnel: 2192 //got a 17xx answer for a 18xx betatunnel request:2192 2193 2193 if (ert->beta_ptr_to_nagra) { 2194 ECM_REQUEST *ecm_nagra = ert->beta_ptr_to_nagra; 2195 if (ert->rc < E_NOTFOUND && ecm_nagra->rc >= E_99) { 2196 ecm_nagra->rc = ert->rc; 2197 ecm_nagra->rcEx = ert->rcEx; 2198 ecm_nagra->selected_reader = ert->selected_reader; 2199 memcpy(ecm_nagra->msglog, ert->msglog, sizeof(ert->msglog)); 2200 memcpy(ecm_nagra->cw, ert->cw, sizeof(ert->cw)); 2201 ll_remove(ecm_nagra->matching_rdr, ecm_nagra->selected_reader); 2202 store_cw_in_cache(ecm_nagra, ecm_nagra->selected_reader->grp, ecm_nagra->rc); 2203 send_dcw(cl, ecm_nagra); 2204 distribute_ecm(ecm_nagra, ert->selected_reader->grp); 2205 } 2206 return; 2194 if (ert->caid >> 8==0x17) { //got a 17xx answer for a 18xx betatunnel request: 2195 // this request is created by the lb, betatunnel 17xx for testing: 2196 ECM_REQUEST *ecm_nagra = ert->beta_ptr_to_nagra; //18xx 2197 if (ert->rc < E_NOTFOUND && ecm_nagra->rc >= E_99) { //found 17xx 2198 //replace the orignal request with that: 2199 ecm_nagra->rc = ert->rc; 2200 ecm_nagra->rcEx = ert->rcEx; 2201 ecm_nagra->selected_reader = ert->selected_reader; 2202 memcpy(ecm_nagra->msglog, ert->msglog, sizeof(ert->msglog)); 2203 memcpy(ecm_nagra->cw, ert->cw, sizeof(ert->cw)); 2204 ll_remove(ecm_nagra->matching_rdr, ecm_nagra->selected_reader); 2205 store_cw_in_cache(ecm_nagra, ecm_nagra->selected_reader->grp, ecm_nagra->rc); 2206 send_dcw(cl, ecm_nagra); 2207 distribute_ecm(ecm_nagra, ert->selected_reader->grp); 2208 } 2209 return; //do not send it to the client, he hasn't requested that, its from the lb 2210 } 2211 else 2212 { 2213 ECM_REQUEST *ecm_beta = ert->beta_ptr_to_nagra; //17xx 2214 if (ert->rc >= E_NOTFOUND && ecm_beta->rc >= E_99) { // this is the original 18xx request 2215 //if 18xx can't answered, wait for 17xx answer 2216 ert->rc = E_99; 2217 return; 2218 } 2219 } 2207 2220 } 2208 2221
Note:
See TracChangeset
for help on using the changeset viewer.