--- sbbs/src/sbbs3/getmsg.cpp 2018/04/24 16:41:23 1.1 +++ sbbs/src/sbbs3/getmsg.cpp 2018/04/24 16:43:34 1.1.1.2 @@ -2,13 +2,13 @@ /* Synchronet message retrieval functions */ -/* $Id: getmsg.cpp,v 1.1 2018/04/24 16:41:23 root Exp $ */ +/* $Id: getmsg.cpp,v 1.1.1.2 2018/04/24 16:43:34 root Exp $ */ /**************************************************************************** * @format.tab-size 4 (Plain Text/Source Code File Header) * * @format.use-tabs true (see http://www.synchro.net/ptsc_hdr.html) * * * - * Copyright 2005 Rob Swindell - http://www.synchro.net/copyright.html * + * Copyright 2011 Rob Swindell - http://www.synchro.net/copyright.html * * * * This program is free software; you can redistribute it and/or * * modify it under the terms of the GNU General Public License * @@ -104,7 +104,7 @@ void sbbs_t::show_msgattr(ushort attr) ,attr&MSG_MODERATED ? "Moderated " :nulstr ,attr&MSG_VALIDATED ? "Validated " :nulstr ,attr&MSG_REPLIED ? "Replied " :nulstr - ,nulstr + ,attr&MSG_NOREPLY ? "NoReply " :nulstr ,nulstr ,nulstr ,nulstr @@ -144,16 +144,16 @@ void sbbs_t::show_msghdr(smbmsg_t* msg) if(msg->to_ext) bprintf(text[MsgToExt],msg->to_ext); if(msg->to_net.addr) - bprintf(text[MsgToNet],smb_netaddr(&msg->to_net)); + bprintf(text[MsgToNet],smb_netaddrstr(&msg->to_net,str)); if(!(msg->hdr.attr&MSG_ANONYMOUS) || SYSOP) { bprintf(text[MsgFrom],msg->from); if(msg->from_ext) bprintf(text[MsgFromExt],msg->from_ext); if(msg->from_net.addr && !strchr(msg->from,'@')) - bprintf(text[MsgFromNet],smb_netaddr(&msg->from_net)); + bprintf(text[MsgFromNet],smb_netaddrstr(&msg->from_net,str)); } bprintf(text[MsgDate] - ,timestr((time_t *)&msg->hdr.when_written.time) + ,timestr(msg->hdr.when_written.time) ,smb_zonestr(msg->hdr.when_written.zone,NULL)); CRLF; @@ -163,12 +163,14 @@ void sbbs_t::show_msghdr(smbmsg_t* msg) sender=(char *)msg->hfield_dat[i]; if(msg->hfield[i].type==FORWARDED && sender) bprintf(text[ForwardedFrom],sender - ,timestr((time_t *)msg->hfield_dat[i])); } + ,timestr(*(time32_t *)msg->hfield_dat[i])); + } /* Debug stuff if(SYSOP) { bprintf("\1n\1c\r\nAux : \1h%08lX",msg->hdr.auxattr); - bprintf("\1n\1c\r\nNum : \1h%lu",msg->hdr.number); } + bprintf("\1n\1c\r\nNum : \1h%lu",msg->hdr.number); + } */ CRLF; @@ -191,32 +193,20 @@ void sbbs_t::show_msg(smbmsg_t* msg, lon } } -void sbbs_t::quotemsg(smbmsg_t* msg, int tails) -{ - char str[256]; - char tmp[13]; - - strcpy(tmp,"QUOTES.TXT"); - if(useron.xedit && cfg.xedit[useron.xedit-1]->misc&XTRN_LWRCASE) - strlwr(tmp); - sprintf(str,"%s%s",cfg.node_dir,tmp); - remove(str); - msgtotxt(msg,str,0,tails); -} - - /****************************************************************************/ /* Writes message header and text data to a text file */ /****************************************************************************/ void sbbs_t::msgtotxt(smbmsg_t* msg, char *str, int header, int tails) { char *buf; + char tmp[128]; int i; FILE *out; if((out=fnopen(&i,str,O_WRONLY|O_CREAT|O_APPEND))==NULL) { errormsg(WHERE,ERR_OPEN,str,0); - return; } + return; + } if(header) { fprintf(out,"\r\n"); fprintf(out,"Subj : %s\r\n",msg->subj); @@ -224,19 +214,21 @@ void sbbs_t::msgtotxt(smbmsg_t* msg, cha if(msg->to_ext) fprintf(out," #%s",msg->to_ext); if(msg->to_net.addr) - fprintf(out," (%s)",smb_netaddr(&msg->to_net)); + fprintf(out," (%s)",smb_netaddrstr(&msg->to_net,tmp)); fprintf(out,"\r\nFrom : %s",msg->from); if(msg->from_ext && !(msg->hdr.attr&MSG_ANONYMOUS)) fprintf(out," #%s",msg->from_ext); if(msg->from_net.addr) - fprintf(out," (%s)",smb_netaddr(&msg->from_net)); + fprintf(out," (%s)",smb_netaddrstr(&msg->from_net,tmp)); fprintf(out,"\r\nDate : %.24s %s" - ,timestr((time_t *)&msg->hdr.when_written.time) + ,timestr(msg->hdr.when_written.time) ,smb_zonestr(msg->hdr.when_written.zone,NULL)); - fprintf(out,"\r\n\r\n"); } + fprintf(out,"\r\n\r\n"); + } buf=smb_getmsgtxt(&smb,msg,tails); if(buf!=NULL) { + strip_invalid_attr(buf); fputs(buf,out); smb_freemsgtxt(buf); } else if(smb_getmsgdatlen(msg)>2) @@ -261,27 +253,32 @@ ulong sbbs_t::getmsgnum(uint subnum, tim smb.subnum=subnum; if((i=smb_open(&smb))!=0) { errormsg(WHERE,ERR_OPEN,smb.file,i,smb.last_error); - return(0); } + return(0); + } - total=filelength(fileno(smb.sid_fp))/sizeof(idxrec_t); + total=(long)filelength(fileno(smb.sid_fp))/sizeof(idxrec_t); if(!total) { /* Empty base */ smb_close(&smb); - return(0); } + return(0); + } if((i=smb_locksmbhdr(&smb))!=0) { smb_close(&smb); errormsg(WHERE,ERR_LOCK,smb.file,i,smb.last_error); - return(0); } + return(0); + } if((i=smb_getlastidx(&smb,&msg.idx))!=0) { smb_close(&smb); errormsg(WHERE,ERR_READ,smb.file,i,smb.last_error); - return(0); } + return(0); + } if((time_t)msg.idx.time<=t) { smb_close(&smb); - return(msg.idx.number); } + return(msg.idx.number); + } bot=0; top=total; @@ -296,12 +293,15 @@ ulong sbbs_t::getmsgnum(uint subnum, tim if((time_t)msg.idx.time>t) { top=l; l=bot+((top-bot)/2); - continue; } + continue; + } if((time_t)msg.idx.time=ptr) { /* ptr is before first message */ smb_close(&smb); - return(msg.idx.time); } /* so return time of first msg */ + return(msg.idx.time); /* so return time of first msg */ + } if(smb_getlastidx(&smb,&lastidx)) { /* Get last message index */ smb_close(&smb); - return(0); } + return(0); + } if(lastidx.number=ptr) break; - msg.offset++; } + msg.offset++; + } smb_close(&smb); - return(msg.idx.time); } + return(msg.idx.time); + } ptr--; while(ptr) { msg.hdr.number=ptr; if(!smb_getmsgidx(&smb,&msg)) break; - ptr--; } + ptr--; + } smb_close(&smb); return(msg.idx.time); } @@ -372,7 +382,7 @@ time_t sbbs_t::getmsgtime(uint subnum, u /* Returns the total number of msgs in the sub-board and sets 'ptr' to the */ /* number of the last message in the sub (0) if no messages. */ /****************************************************************************/ -ulong sbbs_t::getlastmsg(uint subnum, ulong *ptr, time_t *t) +ulong sbbs_t::getlastmsg(uint subnum, uint32_t *ptr, time_t *t) { int i; ulong total; @@ -390,20 +400,24 @@ ulong sbbs_t::getlastmsg(uint subnum, ul smb.subnum=subnum; if((i=smb_open(&smb))!=0) { errormsg(WHERE,ERR_OPEN,smb.file,i,smb.last_error); - return(0); } + return(0); + } if(!filelength(fileno(smb.sid_fp))) { /* Empty base */ smb_close(&smb); - return(0); } + return(0); + } if((i=smb_locksmbhdr(&smb))!=0) { smb_close(&smb); errormsg(WHERE,ERR_LOCK,smb.file,i,smb.last_error); - return(0); } + return(0); + } if((i=smb_getlastidx(&smb,&idx))!=0) { smb_close(&smb); errormsg(WHERE,ERR_READ,smb.file,i,smb.last_error); - return(0); } - total=filelength(fileno(smb.sid_fp))/sizeof(idxrec_t); + return(0); + } + total=(long)filelength(fileno(smb.sid_fp))/sizeof(idxrec_t); smb_unlocksmbhdr(&smb); smb_close(&smb); if(ptr)