--- sbbs/sbbs3/logout.cpp 2018/04/24 16:39:34 1.1 +++ sbbs/sbbs3/logout.cpp 2018/04/24 16:40:40 1.1.1.2 @@ -2,7 +2,7 @@ /* Synchronet user logout routines */ -/* $Id: logout.cpp,v 1.1 2018/04/24 16:39:34 root Exp $ */ +/* $Id: logout.cpp,v 1.1.1.2 2018/04/24 16:40:40 root Exp $ */ /**************************************************************************** * @format.tab-size 4 (Plain Text/Source Code File Header) * @@ -48,50 +48,28 @@ void sbbs_t::logout() int i,j; ushort ttoday; node_t node; - struct tm * tm, tm_now; - FILE *stream; + struct tm tm; now=time(NULL); - tm=gmtime(&now); - if(tm==NULL) + if(localtime_r(&now,&tm)==NULL) return; - tm_now=*tm; if(!useron.number) { /* Not logged in, so do nothing */ -#if 1 if(!online) { - sprintf(str,"%02d:%02d%c T:%3u sec\r\n" - ,tm->tm_hour>12 ? tm->tm_hour-12 - : tm->tm_hour==0 ? 12 : tm->tm_hour, tm->tm_min - , tm->tm_hour>=12 ? 'p' : 'a' + sprintf(str,"%s T:%3u sec\r\n" + ,hhmmtostr(&cfg,&tm,tmp) ,(uint)(now-answertime)); logline("@-",str); } -#endif return; } strcpy(lastuseron,useron.alias); /* for use with WFC status display */ if(useron.rest&FLAG('G')) { /* Reset guest's msg scan cfg */ putuserrec(&cfg,useron.number,U_NAME,LEN_NAME,nulstr); -#if 0 // no longer necessary - for(i=0;imisc&SUB_NSDEF) - sub_cfg[i]|=SUB_CFG_NSCAN; - else - sub_cfg[i]&=~SUB_CFG_NSCAN; - if(cfg.sub[i]->misc&SUB_SSDEF) - sub_cfg[i]|=SUB_CFG_SSCAN; - else - sub_cfg[i]&=~SUB_CFG_SSCAN; } -#endif - batdn_total=0; } + batdn_total=0; + } - if(batdn_total) { - sprintf(str,"%sfile/%04u.dwn",cfg.data_dir,useron.number); - if((stream=fnopen(NULL,str,O_WRONLY|O_TRUNC|O_CREAT))!=NULL) { - for(i=0;i<(int)batdn_total;i++) - fprintf(stream,"%s\r\n",batdn_name[i]); - fclose(stream); } } + batch_create_list(); if(sys_status&SS_USERON && thisnode.status!=NODE_QUIET && !(useron.rest&FLAG('Q'))) for(i=1;i<=cfg.sys_nodes;i++) @@ -102,16 +80,19 @@ void sbbs_t::logout() sprintf(str,text[NodeLoggedOff],cfg.node_num ,thisnode.misc&NODE_ANON ? text[UNKNOWN_USER] : useron.alias); - putnmsg(i,str); } } + putnmsg(&cfg,i,str); } } if(!online) { /* NOT re-login */ +#if 0 /* too soon, handled in node_thread */ getnodedat(cfg.node_num,&thisnode,1); thisnode.status=NODE_WFC; thisnode.misc&=~(NODE_INTR|NODE_MSGW|NODE_NMSG |NODE_UDAT|NODE_POFF|NODE_AOFF|NODE_EXT); putnodedat(cfg.node_num,&thisnode); - #if 0 /* beep? */ +#endif + +#if 0 /* beep? */ if(sys_status&SS_SYSALERT) { mswait(500); offhook(); @@ -122,10 +103,10 @@ void sbbs_t::logout() nosound(); mswait(200); } lkbrd(0); } - #endif +#endif sys_status&=~SS_SYSALERT; - if(cfg.sys_logout[0]) /* execute system logoff event */ - external(cmdstr(cfg.sys_logout,nulstr,nulstr,NULL),EX_OUTL); /* EX_CC */ + if(cfg.sys_logout[0]) /* execute system logout event */ + external(cmdstr(cfg.sys_logout,nulstr,nulstr,NULL),EX_OUTL|EX_OFFLINE); } if(cfg.logout_mod[0]) @@ -162,37 +143,22 @@ void sbbs_t::logout() useron.min=0L; putuserrec(&cfg,useron.number,U_MIN,10,ultoa(useron.min,str,10)); } - useron.tlast=(now-logontime)/60; - useron.timeon+=useron.tlast; - useron.ttoday+=useron.tlast; - if(timeleft>0 && starttime-logontime>0) /* extra time */ - useron.textra+=(starttime-logontime)/60; - - tm=gmtime(&logontime); - if(tm==NULL) - return; - if(tm->tm_mday!=tm_now.tm_mday) { /* date has changed while online */ - putuserrec(&cfg,useron.number,U_LTODAY,5,"0"); - useron.ttoday=0; /* so zero logons today and time on today */ - useron.textra=0; } /* and extra time */ + useron.textra+=(ushort)((starttime-logontime)/60); - putuserrec(&cfg,useron.number,U_NS_TIME,8,ultoa(last_ns_time,str,16)); - putuserrec(&cfg,useron.number,U_LASTON,8,ultoa(useron.laston,str,16)); - putuserrec(&cfg,useron.number,U_TIMEON,5,ultoa(useron.timeon,str,10)); - putuserrec(&cfg,useron.number,U_TTODAY,5,ultoa(useron.ttoday,str,10)); putuserrec(&cfg,useron.number,U_TEXTRA,5,ultoa(useron.textra,str,10)); - putuserrec(&cfg,useron.number,U_TLAST,5,ultoa(useron.tlast,str,10)); + putuserrec(&cfg,useron.number,U_NS_TIME,8,ultoa(last_ns_time,str,16)); + + logoutuserdat(&cfg, &useron, now, logontime); getusrsubs(); getusrdirs(); if(usrgrps>0) - putuserrec(&cfg,useron.number,U_CURSUB,8,cfg.sub[usrsub[curgrp][cursub[curgrp]]]->code); + putuserrec(&cfg,useron.number,U_CURSUB,0,cfg.sub[usrsub[curgrp][cursub[curgrp]]]->code); if(usrlibs>0) - putuserrec(&cfg,useron.number,U_CURDIR,8,cfg.dir[usrdir[curlib][curdir[curlib]]]->code); - sprintf(str,"%02d:%02d%c ",tm_now.tm_hour>12 ? tm_now.tm_hour-12 - : tm_now.tm_hour==0 ? 12 : tm_now.tm_hour, tm_now.tm_min - , tm_now.tm_hour>=12 ? 'p' : 'a'); + putuserrec(&cfg,useron.number,U_CURDIR,0,cfg.dir[usrdir[curlib][curdir[curlib]]]->code); + hhmmtostr(&cfg,&tm,str); + strcat(str," "); if(sys_status&SS_USERON) sprintf(tmp,"T:%3u R:%3lu P:%3lu E:%3lu F:%3lu " "U:%3luk %lu D:%3luk %lu" @@ -262,23 +228,20 @@ void sbbs_t::logofflist() { char str[256]; int file; - struct tm * tm, tm_now; + struct tm tm, tm_now; - tm=gmtime(&now); - if(tm==NULL) + if(localtime_r(&now,&tm_now)==NULL) return; - tm_now=*tm; - tm=gmtime(&logontime); - if(tm==NULL) + if(localtime_r(&logontime,&tm)==NULL) return; - sprintf(str,"%slogs/%2.2d%2.2d%2.2d.LOL",cfg.data_dir,tm->tm_mon+1,tm->tm_mday - ,TM_YEAR(tm->tm_year)); + sprintf(str,"%slogs/%2.2d%2.2d%2.2d.lol",cfg.logs_dir,tm.tm_mon+1,tm.tm_mday + ,TM_YEAR(tm.tm_year)); if((file=nopen(str,O_WRONLY|O_CREAT|O_APPEND))==-1) { errormsg(WHERE,ERR_OPEN,str,O_WRONLY|O_CREAT|O_APPEND); return; } sprintf(str,"%-*.*s %-2d %-8.8s %2.2d:%2.2d %2.2d:%2.2d %3d%3ld%3ld%3ld%3ld" "%3ld%3ld\r\n",LEN_ALIAS,LEN_ALIAS,useron.alias,cfg.node_num,connection - ,tm->tm_hour,tm->tm_min,tm_now.tm_hour,tm_now.tm_min + ,tm.tm_hour,tm.tm_min,tm_now.tm_hour,tm_now.tm_min ,(int)(now-logontime)/60,posts_read,logon_posts,logon_emails ,logon_fbacks,logon_uls,logon_dls); write(file,str,strlen(str));