diff --git a/src/sbbs3/bulkmail.cpp b/src/sbbs3/bulkmail.cpp index 39b6c538ef4de2e21ccea0e19c1bd88a7a217012..3c8d4ae0481c8b2b42f4835fceef55a0f21525ce 100644 --- a/src/sbbs3/bulkmail.cpp +++ b/src/sbbs3/bulkmail.cpp @@ -247,7 +247,7 @@ int sbbs_t::bulkmailhdr(uint usernum, smbmsg_t *msg, ushort msgattr, ulong offse if(node.useron==usernum && !(node.misc&NODE_POFF) && (node.status==NODE_INUSE || node.status==NODE_QUIET)) { sprintf(str,text[EmailNodeMsg],cfg.node_num,useron.alias); - putnmsg(i,str); + putnmsg(&cfg,i,str); break; } } if(i>cfg.sys_nodes) { /* User wasn't online, so leave short msg */ sprintf(str,text[UserSentYouMail],useron.alias); diff --git a/src/sbbs3/chat.cpp b/src/sbbs3/chat.cpp index 4c2ea81f3b1fe92c8eeded248554d261539bcbee..d6c6e0388f51c8486ca0d548e9ae8bdf89461d12 100644 --- a/src/sbbs3/chat.cpp +++ b/src/sbbs3/chat.cpp @@ -332,7 +332,7 @@ void sbbs_t::multinodechat(int channel) strcat(buf,crlf); if(useron.chat&CHAT_ECHO) bputs(buf); - putnmsg(j,buf); + putnmsg(&cfg,j,buf); break; case 'Q': /* quit */ done=1; @@ -454,7 +454,7 @@ void sbbs_t::multinodechat(int channel) ? text[UNKNOWN_USER] : useron.alias ,"you"); strcat(buf,crlf); - putnmsg(usr[j],buf); } + putnmsg(&cfg,usr[j],buf); } /* Display to all other users */ @@ -468,10 +468,10 @@ void sbbs_t::multinodechat(int channel) if(i==j) continue; getnodedat(usr[i],&node,0); - putnmsg(usr[i],buf); } + putnmsg(&cfg,usr[i],buf); } for(i=0;i<qusrs;i++) { getnodedat(qusr[i],&node,0); - putnmsg(qusr[i],buf); } + putnmsg(&cfg,qusr[i],buf); } continue; } } sprintf(buf,text[ChatLineFmt] @@ -483,10 +483,10 @@ void sbbs_t::multinodechat(int channel) bputs(buf); for(i=0;i<usrs;i++) { getnodedat(usr[i],&node,0); - putnmsg(usr[i],buf); } + putnmsg(&cfg,usr[i],buf); } for(i=0;i<qusrs;i++) { getnodedat(qusr[i],&node,0); - putnmsg(qusr[i],buf); } + putnmsg(&cfg,qusr[i],buf); } if(!usrs && channel && gurubuf && cfg.chan[channel-1]->misc&CHAN_GURU) guruchat(pgraph,gurubuf,cfg.chan[channel-1]->guru); @@ -742,7 +742,7 @@ void sbbs_t::privchat(bool local) sprintf(str,text[NodePChatPageMsg] ,cfg.node_num,thisnode.misc&NODE_ANON ? text[UNKNOWN_USER] : useron.alias); - putnmsg(n,str); + putnmsg(&cfg,n,str); sprintf(str,"%s paged %s on node %d to private chat" ,useron.alias,username(&cfg,node.useron,tmp),n); logline("C",str); } @@ -1316,7 +1316,7 @@ void sbbs_t::nodemsg() sprintf(buf,text[NodeMsgFmt],cfg.node_num ,thisnode.misc&NODE_ANON ? text[UNKNOWN_USER] : useron.alias,line); - putnmsg(i,buf); + putnmsg(&cfg,i,buf); if(!(node.misc&NODE_ANON)) bprintf(text[MsgSentToUser],"Message" ,username(&cfg,usernumber,tmp),usernumber); @@ -1338,7 +1338,7 @@ void sbbs_t::nodemsg() if((node.status==NODE_INUSE || (SYSOP && node.status==NODE_QUIET)) && (SYSOP || !(node.misc&NODE_POFF))) - putnmsg(i,buf); } + putnmsg(&cfg,i,buf); } sprintf(str,"%s sent message to all nodes",useron.alias); logline("C",str); logline(nulstr,line); diff --git a/src/sbbs3/email.cpp b/src/sbbs3/email.cpp index 6a3fed9189c5bf369e9d5f1466918ffe6851ff00..aa0a2a78303793bc5895ab2b40518fb81704835e 100644 --- a/src/sbbs3/email.cpp +++ b/src/sbbs3/email.cpp @@ -307,7 +307,7 @@ bool sbbs_t::email(int usernumber, char *top, char *subj, long mode) if(node.useron==usernumber && !(node.misc&NODE_POFF) && (node.status==NODE_INUSE || node.status==NODE_QUIET)) { sprintf(str,text[EmailNodeMsg],cfg.node_num,useron.alias); - putnmsg(i,str); + putnmsg(&cfg,i,str); break; } } if(i>cfg.sys_nodes) { /* User wasn't online, so leave short msg */ sprintf(str,text[UserSentYouMail],useron.alias); diff --git a/src/sbbs3/js_bbs.cpp b/src/sbbs3/js_bbs.cpp index f83fdd6f17bedebc9f80cae2e3d0ce631dcf449d..ce99a780429b0c39ba2d0b419ce5a8666f3cb072 100644 --- a/src/sbbs3/js_bbs.cpp +++ b/src/sbbs3/js_bbs.cpp @@ -1968,7 +1968,7 @@ js_put_node_message(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval if((msg=JS_GetStringBytes(js_msg))==NULL) return(JS_FALSE); - sbbs->putnmsg(node,msg); + putnmsg(&sbbs->cfg,node,msg); *rval = JSVAL_VOID; return(JS_TRUE); diff --git a/src/sbbs3/logon.cpp b/src/sbbs3/logon.cpp index c2ef01f840ee61d27f880e8af2b1f66989a0aadd..a6201b007464d40e9da674581854273886a4a21d 100644 --- a/src/sbbs3/logon.cpp +++ b/src/sbbs3/logon.cpp @@ -524,7 +524,7 @@ bool sbbs_t::logon() ,cfg.node_num ,thisnode.misc&NODE_ANON ? text[UNKNOWN_USER] : useron.alias ,connection); - putnmsg(i,str); + putnmsg(&cfg,i,str); } } diff --git a/src/sbbs3/logout.cpp b/src/sbbs3/logout.cpp index 142ce5f2184bf73069b8ac4fdf36e3d4982d5983..df1580f8ce9834ffda13ca1345ee0fc52982bbf5 100644 --- a/src/sbbs3/logout.cpp +++ b/src/sbbs3/logout.cpp @@ -82,7 +82,7 @@ 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 */ diff --git a/src/sbbs3/mail.cpp b/src/sbbs3/mail.cpp index d7a126aabf7a4c62e40d9594ca7901ae232e59cc..7ccac4cff71d250cdcc8516914dc04d33ac2977c 100644 --- a/src/sbbs3/mail.cpp +++ b/src/sbbs3/mail.cpp @@ -214,7 +214,7 @@ void sbbs_t::telluser(smbmsg_t* msg) sprintf(str ,text[UserReadYourMailNodeMsg] ,cfg.node_num,useron.alias); - putnmsg(n,str); + putnmsg(&cfg,n,str); break; } } if(n>cfg.sys_nodes) { now=time(NULL); diff --git a/src/sbbs3/putnode.cpp b/src/sbbs3/putnode.cpp index da8c1b042ce98c1ba63e209e663e9597d2b5ad7f..f98fb76eaa87eabdb29bdc51e4f6dab62e2dc874 100644 --- a/src/sbbs3/putnode.cpp +++ b/src/sbbs3/putnode.cpp @@ -112,39 +112,6 @@ int sbbs_t::putnodedat(uint number, node_t* node) return(0); } -/****************************************************************************/ -/* Creates a short message for node 'num' than contains 'strin' */ -/****************************************************************************/ -int sbbs_t::putnmsg(int num, char *strin) -{ - char str[256]; - int file,i; - node_t node; - - sprintf(str,"%smsgs/n%3.3u.msg",cfg.data_dir,num); - if((file=nopen(str,O_WRONLY|O_CREAT))==-1) { - errormsg(WHERE,ERR_OPEN,str,O_WRONLY|O_CREAT); - return(errno); - } - lseek(file,0L,SEEK_END); // Instead of opening with O_APPEND - i=strlen(strin); - if(write(file,strin,i)!=i) { - close(file); - errormsg(WHERE,ERR_WRITE,str,i); - return(errno); - } - close(file); - getnodedat(num,&node,0); - if((node.status==NODE_INUSE || node.status==NODE_QUIET) - && !(node.misc&NODE_NMSG)) { - getnodedat(num,&node,1); - node.misc|=NODE_NMSG; - putnodedat(num,&node); - } - - return(0); -} - int sbbs_t::putnodeext(uint number, char *ext) { char str[MAX_PATH+1]; diff --git a/src/sbbs3/sbbs.h b/src/sbbs3/sbbs.h index be9fc3a09a5f473a504699b1b4cae5a37031a5e8..34c9de8eb0caade43066963efa7d551961201fae 100644 --- a/src/sbbs3/sbbs.h +++ b/src/sbbs3/sbbs.h @@ -508,7 +508,6 @@ public: /* putnode.cpp */ int putnodedat(uint number, node_t * node); int putnodeext(uint number, char * str); - int putnmsg(int num, char *strin); /* logonoff.cpp */ bool answer(); diff --git a/src/sbbs3/un_rep.cpp b/src/sbbs3/un_rep.cpp index 4a7d47de46890e535565e7d27e56beccc73187b8..a6a2bfa9b6049523c8a81b1f1fb1b10ad4536e9d 100644 --- a/src/sbbs3/un_rep.cpp +++ b/src/sbbs3/un_rep.cpp @@ -235,7 +235,7 @@ bool sbbs_t::unpack_rep(char* repfile) || node.status==NODE_QUIET)) { sprintf(str,text[EmailNodeMsg] ,cfg.node_num,tmp); - putnmsg(k,str); + putnmsg(&cfg,k,str); break; } } if(k>cfg.sys_nodes) { sprintf(str,text[UserSentYouMail],tmp); diff --git a/src/sbbs3/upload.cpp b/src/sbbs3/upload.cpp index 60793ab078d11bcfd2fa43f1e682f20cecc23c27..fb172b0dae19393a7a0557f83dc7dc6d4beeb976 100644 --- a/src/sbbs3/upload.cpp +++ b/src/sbbs3/upload.cpp @@ -477,7 +477,7 @@ bool sbbs_t::upload(uint dirnum) if(node.useron==destuser[j] && !(node.misc&NODE_POFF) && (node.status==NODE_INUSE || node.status==NODE_QUIET)) { sprintf(str,text[UserToUserXferNodeMsg],cfg.node_num,useron.alias); - putnmsg(i,str); + putnmsg(&cfg,i,str); break; } } if(i>cfg.sys_nodes) { /* User not online */ sprintf(str,text[UserSentYouFile],useron.alias); diff --git a/src/sbbs3/userdat.c b/src/sbbs3/userdat.c index 6ec15eb6339018731d8f92d0b25cca2743d86423..075f7b8803ed3d36f5d350641905a904757ba4ac 100644 --- a/src/sbbs3/userdat.c +++ b/src/sbbs3/userdat.c @@ -967,7 +967,7 @@ uint DLLCALL userdatdupe(scfg_t* cfg, uint usernumber, uint offset, uint datlen, } /****************************************************************************/ -/* Creates a short message for 'usernumber' than contains 'strin' */ +/* Creates a short message for 'usernumber' that contains 'strin' */ /****************************************************************************/ int DLLCALL putsmsg(scfg_t* cfg, int usernumber, char *strin) { @@ -998,6 +998,36 @@ int DLLCALL putsmsg(scfg_t* cfg, int usernumber, char *strin) return(0); } +/****************************************************************************/ +/* Creates a short message for node 'num' that contains 'strin' */ +/****************************************************************************/ +int DLLCALL putnmsg(scfg_t* cfg, int num, char *strin) +{ + char str[256]; + int file,i; + node_t node; + + sprintf(str,"%smsgs/n%3.3u.msg",cfg->data_dir,num); + if((file=nopen(str,O_WRONLY|O_CREAT))==-1) + return(errno); + lseek(file,0L,SEEK_END); // Instead of opening with O_APPEND + i=strlen(strin); + if(write(file,strin,i)!=i) { + close(file); + return(errno); + } + close(file); + getnodedat(cfg,num,&node,NULL); + if((node.status==NODE_INUSE || node.status==NODE_QUIET) + && !(node.misc&NODE_NMSG)) { + getnodedat(cfg,num,&node,&file); + node.misc|=NODE_NMSG; + putnodedat(cfg,num,&node,file); + } + + return(0); +} + static BOOL ar_exp(scfg_t* cfg, uchar **ptrptr, user_t* user) { BOOL result,not,or,equal; diff --git a/src/sbbs3/userdat.h b/src/sbbs3/userdat.h index b538874a1b09114b806d76c59f680ff6b999ccce..aeec2f7114a659ff2d3a2e62adaecde3777ab2c5 100644 --- a/src/sbbs3/userdat.h +++ b/src/sbbs3/userdat.h @@ -88,6 +88,8 @@ DLLEXPORT void DLLCALL packchatpass(char *pass, node_t* node); DLLEXPORT char* DLLCALL unpackchatpass(char *pass, node_t* node); DLLEXPORT int DLLCALL putsmsg(scfg_t* cfg, int usernumber, char *strin); +DLLEXPORT int DLLCALL putnmsg(scfg_t* cfg, int num, char *strin); + DLLEXPORT uint DLLCALL userdatdupe(scfg_t* cfg, uint usernumber, uint offset, uint datlen, char *dat ,BOOL del); diff --git a/src/sbbs3/writemsg.cpp b/src/sbbs3/writemsg.cpp index ab04b431eaffb5a418231daae32b376386f1237a..67cd052ef7a4f4cb66af8384b37c2126a4f99663 100644 --- a/src/sbbs3/writemsg.cpp +++ b/src/sbbs3/writemsg.cpp @@ -964,7 +964,7 @@ void sbbs_t::forwardmail(smbmsg_t *msg, int usernumber) if(node.useron==usernumber && !(node.misc&NODE_POFF) && (node.status==NODE_INUSE || node.status==NODE_QUIET)) { sprintf(str,text[EmailNodeMsg],cfg.node_num,useron.alias); - putnmsg(i,str); + putnmsg(&cfg,i,str); break; } } if(i>cfg.sys_nodes) { /* User wasn't online, so leave short msg */ sprintf(str,text[UserSentYouMail],useron.alias);