Changeset 10391
- Timestamp:
- 02/03/15 23:00:33 (9 years ago)
- Location:
- trunk
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/module-cacheex.c
r10375 r10391 1041 1041 } 1042 1042 1043 void cacheex_mode1_delay(ECM_REQUEST *er) 1044 { 1045 if(!er->cacheex_wait_time_expired 1046 && er->cacheex_mode1_delay 1047 && er->cacheex_reader_count > 0 1048 && !er->stage 1049 && er->rc >= E_UNHANDLED) 1050 { 1051 cs_log_dbg(D_LB, "{client %s, caid %04X, prid %06X, srvid %04X} cacheex_mode1_delay timeout! ", (check_client(er->client) ? er->client->account->usr : "-"), er->caid, er->prid, er->srvid); 1052 request_cw_from_readers(er, 1); // setting stop_stage=1, we request only cacheex mode 1 readers. Others are requested at cacheex timeout! 1053 } 1054 } 1055 1056 void cacheex_timeout(ECM_REQUEST *er) 1057 { 1058 if(er->cacheex_wait_time_expired) 1059 return; 1060 er->cacheex_wait_time_expired = 1; 1061 if(er->rc >= E_UNHANDLED) 1062 { 1063 cs_log_dbg(D_LB, "{client %s, caid %04X, prid %06X, srvid %04X} cacheex timeout! ", (check_client(er->client) ? er->client->account->usr : "-"), er->caid, er->prid, er->srvid); 1064 //if check_cw mode=0, first try to get cw from cache without check counter! 1065 CWCHECK check_cw = get_cwcheck(er); 1066 if(!check_cw.mode) 1067 { 1068 struct ecm_request_t *ecm=NULL; 1069 ecm = check_cache(er, er->client); 1070 if(ecm) //found in cache 1071 { 1072 struct s_write_from_cache *wfc=NULL; 1073 if(!cs_malloc(&wfc, sizeof(struct s_write_from_cache))) 1074 { 1075 NULLFREE(ecm); 1076 return; 1077 } 1078 wfc->er_new=er; 1079 wfc->er_cache=ecm; 1080 if(!add_job(er->client, ACTION_ECM_ANSWER_CACHE, wfc, sizeof(struct s_write_from_cache))) //write_ecm_answer_fromcache 1081 { NULLFREE(ecm); } 1082 return; 1083 } 1084 } 1085 //check if "normal" readers selected, if not send NOT FOUND! 1086 //cacheex1-client (having always no "normal" reader), or not-cacheex-1 client with no normal readers available (or filtered by LB) 1087 if( (er->reader_count + er->fallback_reader_count - er->cacheex_reader_count) <= 0 ) 1088 { 1089 if(!cfg.wait_until_ctimeout){ 1090 er->rc = E_NOTFOUND; 1091 er->selected_reader = NULL; 1092 er->rcEx = 0; 1093 cs_log_dbg(D_LB, "{client %s, caid %04X, prid %06X, srvid %04X} cacheex timeout: NO \"normal\" readers... not_found! ", (check_client(er->client) ? er->client->account->usr : "-"), er->caid, er->prid, er->srvid); 1094 send_dcw(er->client, er); 1095 return; 1096 } 1097 } 1098 else 1099 { 1100 if(er->stage < 2){ 1101 debug_ecm(D_TRACE, "request for %s %s", username(er->client), buf); 1102 request_cw_from_readers(er, 0); 1103 } 1104 } 1105 } 1106 } 1107 1043 1108 #endif -
trunk/module-cacheex.h
r10375 r10391 37 37 void cacheex_cleanup_hitcache(void); 38 38 void cacheex_update_hash(ECM_REQUEST *er); 39 void cacheex_mode1_delay(ECM_REQUEST *er); 40 void cacheex_timeout(ECM_REQUEST *er); 39 41 #else 40 42 static inline void cacheex_init(void) { } … … 55 57 static inline void cacheex_cleanup_hitcache(void) { } 56 58 static inline void cacheex_update_hash(ECM_REQUEST *UNUSED(er)) { } 59 static inline void cacheex_mode1_delay(ECM_REQUEST *UNUSED(er)) { } 60 static inline void cacheex_timeout(ECM_REQUEST *UNUSED(er)) { } 57 61 #endif 58 62 -
trunk/oscam-ecm.c
r10385 r10391 37 37 static pthread_cond_t cw_process_sleep_cond; 38 38 static int cw_process_wakeups; 39 40 #ifdef CS_CACHEEX41 void cacheex_mode1_delay(ECM_REQUEST *er){42 if(!er->cacheex_wait_time_expired43 && er->cacheex_mode1_delay44 && er->cacheex_reader_count > 045 && !er->stage46 && er->rc >= E_UNHANDLED47 )48 {49 cs_log_dbg(D_LB, "{client %s, caid %04X, prid %06X, srvid %04X} cacheex_mode1_delay timeout! ", (check_client(er->client) ? er->client->account->usr : "-"), er->caid, er->prid, er->srvid);50 request_cw_from_readers(er, 1); // setting stop_stage=1, we request only cacheex mode 1 readers. Others are requested at cacheex timeout!51 }52 }53 54 55 void cacheex_timeout(ECM_REQUEST *er)56 {57 if(!er->cacheex_wait_time_expired){58 59 er->cacheex_wait_time_expired = 1;60 61 if(er->rc >= E_UNHANDLED)62 {63 cs_log_dbg(D_LB, "{client %s, caid %04X, prid %06X, srvid %04X} cacheex timeout! ", (check_client(er->client) ? er->client->account->usr : "-"), er->caid, er->prid, er->srvid);64 65 66 //if check_cw mode=0, first try to get cw from cache without check counter!67 CWCHECK check_cw = get_cwcheck(er);68 if(!check_cw.mode)69 {70 struct ecm_request_t *ecm=NULL;71 ecm = check_cache(er, er->client);72 if(ecm) //found in cache73 {74 struct s_write_from_cache *wfc=NULL;75 if(!cs_malloc(&wfc, sizeof(struct s_write_from_cache)))76 {77 NULLFREE(ecm);78 return;79 }80 wfc->er_new=er;81 wfc->er_cache=ecm;82 83 if(!add_job(er->client, ACTION_ECM_ANSWER_CACHE, wfc, sizeof(struct s_write_from_cache))) //write_ecm_answer_fromcache84 { NULLFREE(ecm); }85 86 return;87 }88 }89 90 91 //check if "normal" readers selected, if not send NOT FOUND!92 //cacheex1-client (having always no "normal" reader), or not-cacheex-1 client with no normal readers available (or filtered by LB)93 if( (er->reader_count + er->fallback_reader_count - er->cacheex_reader_count) <= 0 )94 {95 if(!cfg.wait_until_ctimeout){96 er->rc = E_NOTFOUND;97 er->selected_reader = NULL;98 er->rcEx = 0;99 100 cs_log_dbg(D_LB, "{client %s, caid %04X, prid %06X, srvid %04X} cacheex timeout: NO \"normal\" readers... not_found! ", (check_client(er->client) ? er->client->account->usr : "-"), er->caid, er->prid, er->srvid);101 send_dcw(er->client, er);102 return;103 }104 }105 else106 {107 if(er->stage < 2){108 debug_ecm(D_TRACE, "request for %s %s", username(er->client), buf);109 request_cw_from_readers(er, 0);110 }111 }112 }113 }114 }115 #endif116 39 117 40 void fallback_timeout(ECM_REQUEST *er) -
trunk/oscam-ecm.h
r10283 r10391 46 46 int32_t format_ecm(ECM_REQUEST *ecm, char *result, size_t size); 47 47 48 #ifdef CS_CACHEEX49 void cacheex_mode1_delay(ECM_REQUEST *er);50 void cacheex_timeout(ECM_REQUEST *er);51 #else52 static inline void cacheex_mode1_delay(ECM_REQUEST *UNUSED(er)) { }53 static inline void cacheex_timeout(ECM_REQUEST *UNUSED(er)) { }54 48 #endif 55 56 #endif
Note:
See TracChangeset
for help on using the changeset viewer.