Skip to content
Snippets Groups Projects
Commit fee9cf3f authored by rswindell's avatar rswindell
Browse files

Created is_download_free() function which checks all the various criteria that

can make a download free for a particular user from a particular file area,
with support for per-directory exemption ARS (finally).
parent 9e493f95
No related branches found
No related tags found
No related merge requests found
...@@ -101,9 +101,9 @@ void sbbs_t::batchmenu() ...@@ -101,9 +101,9 @@ void sbbs_t::batchmenu()
break; break;
} }
for(i=0,totalcdt=0;i<batdn_total;i++) for(i=0,totalcdt=0;i<batdn_total;i++)
if(!is_download_free(&cfg,batdn_dir[i],&useron))
totalcdt+=batdn_cdt[i]; totalcdt+=batdn_cdt[i];
if(!(useron.exempt&FLAG('D')) if(totalcdt>useron.cdt+useron.freecdt) {
&& totalcdt>useron.cdt+useron.freecdt) {
bprintf(text[YouOnlyHaveNCredits] bprintf(text[YouOnlyHaveNCredits]
,ultoac(useron.cdt+useron.freecdt,tmp)); ,ultoac(useron.cdt+useron.freecdt,tmp));
break; break;
...@@ -353,9 +353,9 @@ BOOL sbbs_t::start_batch_download() ...@@ -353,9 +353,9 @@ BOOL sbbs_t::start_batch_download()
return(FALSE); return(FALSE);
} }
for(i=0,totalcdt=0;i<batdn_total;i++) for(i=0,totalcdt=0;i<batdn_total;i++)
totalcdt+=batdn_cdt[i]; if(is_download_free(&cfg,batdn_dir[i],&useron))
if(!(useron.exempt&FLAG('D')) totalcdt+=batdn_cdt[i];
&& totalcdt>useron.cdt+useron.freecdt) { if(totalcdt>useron.cdt+useron.freecdt) {
bprintf(text[YouOnlyHaveNCredits] bprintf(text[YouOnlyHaveNCredits]
,ultoac(useron.cdt+useron.freecdt,tmp)); ,ultoac(useron.cdt+useron.freecdt,tmp));
return(FALSE); return(FALSE);
...@@ -788,10 +788,12 @@ bool sbbs_t::addtobatdl(file_t* f) ...@@ -788,10 +788,12 @@ bool sbbs_t::addtobatdl(file_t* f)
return(false); return(false);
} }
for(i=0,totalcdt=0;i<batdn_total;i++) for(i=0,totalcdt=0;i<batdn_total;i++)
totalcdt+=batdn_cdt[i]; if(!is_download_free(&cfg,batdn_dir[i],&useron))
totalcdt+=batdn_cdt[i];
if(cfg.dir[f->dir]->misc&DIR_FREE) f->cdt=0L; if(cfg.dir[f->dir]->misc&DIR_FREE) f->cdt=0L;
totalcdt+=f->cdt; if(!is_download_free(&cfg,f->dir,&useron))
if(!(useron.exempt&FLAG('D')) && totalcdt>useron.cdt+useron.freecdt) { totalcdt+=f->cdt;
if(totalcdt>useron.cdt+useron.freecdt) {
bprintf(text[CantAddToQueue],f->name); bprintf(text[CantAddToQueue],f->name);
bprintf(text[YouOnlyHaveNCredits],ultoac(useron.cdt+useron.freecdt,tmp)); bprintf(text[YouOnlyHaveNCredits],ultoac(useron.cdt+useron.freecdt,tmp));
return(false); return(false);
......
...@@ -67,7 +67,7 @@ void sbbs_t::downloadfile(file_t* f) ...@@ -67,7 +67,7 @@ void sbbs_t::downloadfile(file_t* f)
/****************************/ /****************************/
useron.dls=(ushort)adjustuserrec(&cfg,useron.number,U_DLS,5,1); useron.dls=(ushort)adjustuserrec(&cfg,useron.number,U_DLS,5,1);
useron.dlb=adjustuserrec(&cfg,useron.number,U_DLB,10,length); useron.dlb=adjustuserrec(&cfg,useron.number,U_DLB,10,length);
if(!(cfg.dir[f->dir]->misc&DIR_FREE) && !(useron.exempt&FLAG('D'))) if(!is_download_free(&cfg,f->dir,&useron))
subtract_cdt(&cfg,&useron,f->cdt); subtract_cdt(&cfg,&useron,f->cdt);
/**************************/ /**************************/
/* Update Uploader's Info */ /* Update Uploader's Info */
......
...@@ -1335,7 +1335,6 @@ static void send_thread(void* arg) ...@@ -1335,7 +1335,6 @@ static void send_thread(void* arg)
ulong dur; ulong dur;
ulong cps; ulong cps;
ulong length; ulong length;
BOOL exempt;
BOOL error=FALSE; BOOL error=FALSE;
FILE* fp; FILE* fp;
file_t f; file_t f;
...@@ -1553,13 +1552,7 @@ static void send_thread(void* arg) ...@@ -1553,13 +1552,7 @@ static void send_thread(void* arg)
if(xfer.credits) { if(xfer.credits) {
xfer.user->dls=(ushort)adjustuserrec(&scfg, xfer.user->number,U_DLS,5,1); xfer.user->dls=(ushort)adjustuserrec(&scfg, xfer.user->number,U_DLS,5,1);
xfer.user->dlb=adjustuserrec(&scfg, xfer.user->number,U_DLB,10,total); xfer.user->dlb=adjustuserrec(&scfg, xfer.user->number,U_DLB,10,total);
exempt=FALSE; if(xfer.dir>=0 && !is_download_free(&scfg,xfer.dir,xfer.user))
if(xfer.user->exempt&FLAG('D'))
exempt=TRUE;
if(scfg.dir[xfer.dir]->ex_ar[0]!=0
&& chk_ar(&scfg, scfg.dir[xfer.dir]->ex_ar, xfer.user))
exempt=TRUE;
if(xfer.dir>=0 && !(scfg.dir[xfer.dir]->misc&DIR_FREE) && !exempt)
subtract_cdt(&scfg, xfer.user, xfer.credits); subtract_cdt(&scfg, xfer.user, xfer.credits);
} }
if(!xfer.tmpfile && !xfer.delfile) if(!xfer.tmpfile && !xfer.delfile)
...@@ -3900,8 +3893,7 @@ static void ctrl_thread(void* arg) ...@@ -3900,8 +3893,7 @@ static void ctrl_thread(void* arg)
/* Verify credits */ /* Verify credits */
if(!getsize && !getdate && !delecmd if(!getsize && !getdate && !delecmd
&& !(scfg.dir[dir]->misc&DIR_FREE) && !is_download_free(&scfg,dir,&user)) {
&& !(user.exempt&FLAG('D'))) {
if(filedat) if(filedat)
getfiledat(&scfg,&f); getfiledat(&scfg,&f);
else else
......
...@@ -1207,7 +1207,7 @@ int sbbs_t::listfileinfo(uint dirnum, char *filespec, long mode) ...@@ -1207,7 +1207,7 @@ int sbbs_t::listfileinfo(uint dirnum, char *filespec, long mode)
found=-1; found=-1;
break; } break; }
continue; } continue; }
if(!(cfg.dir[f.dir]->misc&DIR_FREE) && !(useron.exempt&FLAG('D')) if(!is_download_free(&cfg,f.dir,&useron)
&& f.cdt>(useron.cdt+useron.freecdt)) { && f.cdt>(useron.cdt+useron.freecdt)) {
SYNC; SYNC;
bprintf(text[YouOnlyHaveNCredits] bprintf(text[YouOnlyHaveNCredits]
......
...@@ -541,9 +541,9 @@ bool sbbs_t::pack_qwk(char *packet, ulong *msgcnt, bool prepack) ...@@ -541,9 +541,9 @@ bool sbbs_t::pack_qwk(char *packet, ulong *msgcnt, bool prepack)
if(batdn_total) { if(batdn_total) {
for(i=0,totalcdt=0;i<batdn_total;i++) for(i=0,totalcdt=0;i<batdn_total;i++)
if(!is_download_free(&cfg,batdn_dir[i],&useron))
totalcdt+=batdn_cdt[i]; totalcdt+=batdn_cdt[i];
if(!(useron.exempt&FLAG('D')) if(totalcdt>useron.cdt+useron.freecdt) {
&& totalcdt>useron.cdt+useron.freecdt) {
bprintf(text[YouOnlyHaveNCredits] bprintf(text[YouOnlyHaveNCredits]
,ultoac(useron.cdt+useron.freecdt,tmp)); ,ultoac(useron.cdt+useron.freecdt,tmp));
} }
......
...@@ -2200,3 +2200,26 @@ int DLLCALL user_rec_len(int offset) ...@@ -2200,3 +2200,26 @@ int DLLCALL user_rec_len(int offset)
return(-1); return(-1);
} }
BOOL DLLCALL is_download_free(scfg_t* cfg, uint dirnum, user_t* user)
{
if(!VALID_CFG(cfg))
return(FALSE);
if(dirnum>=cfg->total_dirs)
return(FALSE);
if(cfg->dir[dirnum]->misc&DIR_FREE)
return(TRUE);
if(user==NULL)
return(FALSE);
if(user->exempt&FLAG('D'))
return(TRUE);
if(cfg->dir[dirnum]->ex_ar[0]==0)
return(FALSE);
return(chk_ar(cfg,cfg->dir[dirnum]->ex_ar,user));
}
\ No newline at end of file
...@@ -106,6 +106,7 @@ DLLEXPORT BOOL DLLCALL logoutuserdat(scfg_t*, user_t*, time_t now, time_t logont ...@@ -106,6 +106,7 @@ DLLEXPORT BOOL DLLCALL logoutuserdat(scfg_t*, user_t*, time_t now, time_t logont
DLLEXPORT void DLLCALL resetdailyuserdat(scfg_t*, user_t*); DLLEXPORT void DLLCALL resetdailyuserdat(scfg_t*, user_t*);
DLLEXPORT void DLLCALL subtract_cdt(scfg_t*, user_t*, long amt); DLLEXPORT void DLLCALL subtract_cdt(scfg_t*, user_t*, long amt);
DLLEXPORT int DLLCALL user_rec_len(int offset); DLLEXPORT int DLLCALL user_rec_len(int offset);
DLLEXPORT BOOL DLLCALL is_download_free(scfg_t* cfg, uint dirnum, user_t* user);
#ifdef __cplusplus #ifdef __cplusplus
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment