|
|
1.1 ! root 1: #line 1 "PACK_REP.C" ! 2: ! 3: /* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */ ! 4: ! 5: #include "sbbs.h" ! 6: #include "post.h" ! 7: #include "qwk.h" ! 8: ! 9: /****************************************************************************/ ! 10: /* Creates an REP packet for upload to QWK hub 'hubnum'. */ ! 11: /* Returns 1 if successful, 0 if not. */ ! 12: /****************************************************************************/ ! 13: char pack_rep(uint hubnum) ! 14: { ! 15: uchar str[256],tmp2[256],ch,*p; ! 16: uchar HUGE16 *qwkbuf; ! 17: int file,mode; ! 18: uint i,j,k,n; ! 19: long l,size,msgcnt,submsgs,mailmsgs,packedmail,netfiles=0,deleted; ! 20: ulong last,ptr,posts,msgs; ! 21: post_t HUGE16 *post; ! 22: mail_t *mail; ! 23: struct ffblk ff; ! 24: FILE *rep; ! 25: smbmsg_t msg; ! 26: ! 27: msgcnt=0L; ! 28: delfiles(temp_dir,"*.*"); ! 29: sprintf(str,"%s%s.REP",data_dir,qhub[hubnum]->id); ! 30: if(fexist(str)) ! 31: external(cmdstr(qhub[hubnum]->unpack,str,"*.*",NULL),EX_OUTL); ! 32: /*************************************************/ ! 33: /* Create SYSID.MSG, write header and leave open */ ! 34: /*************************************************/ ! 35: sprintf(str,"%s%s.MSG",temp_dir,qhub[hubnum]->id); ! 36: if((rep=fnopen(&file,str,O_CREAT|O_WRONLY))==NULL) { ! 37: errormsg(WHERE,ERR_OPEN,str,O_CREAT|O_WRONLY); ! 38: return(0); } ! 39: if(!filelength(file)) { /* New REP packet */ ! 40: sprintf(str,"%-128s",qhub[hubnum]->id); /* So write header */ ! 41: fwrite(str,128,1,rep); } ! 42: fseek(rep,0L,SEEK_END); ! 43: /*********************/ ! 44: /* Pack new messages */ ! 45: /*********************/ ! 46: console|=CON_L_ECHO; ! 47: ! 48: sprintf(smb.file,"%sMAIL",data_dir); ! 49: smb.retry_time=smb_retry_time; ! 50: if((i=smb_open(&smb))!=0) { ! 51: fclose(rep); ! 52: errormsg(WHERE,ERR_OPEN,smb.file,i); ! 53: return(0); } ! 54: ! 55: /***********************/ ! 56: /* Pack E-mail, if any */ ! 57: /***********************/ ! 58: qwkmail_time=time(NULL); ! 59: mailmsgs=loadmail(&mail,0,MAIL_YOUR,LM_QWK); ! 60: packedmail=0; ! 61: if(mailmsgs) { ! 62: bputs(text[QWKPackingEmail]); ! 63: for(l=0;l<mailmsgs;l++) { ! 64: bprintf("\b\b\b\b\b%-5lu",l+1); ! 65: ! 66: msg.idx.offset=mail[l].offset; ! 67: if(!loadmsg(&msg,mail[l].number)) ! 68: continue; ! 69: ! 70: sprintf(str,"%s/",qhub[hubnum]->id); ! 71: if(msg.to_net.type!=NET_QWK ! 72: || (strcmp(msg.to_net.addr,qhub[hubnum]->id) ! 73: && strncmp(msg.to_net.addr,str,strlen(str)))) { ! 74: smb_unlockmsghdr(&smb,&msg); ! 75: smb_freemsgmem(&msg); ! 76: continue; } ! 77: ! 78: msgtoqwk(msg,rep,TO_QNET|REP|A_LEAVE,INVALID_SUB,0); ! 79: packedmail++; ! 80: smb_unlockmsghdr(&smb,&msg); ! 81: smb_freemsgmem(&msg); } ! 82: bprintf(text[QWKPackedEmail],packedmail); } ! 83: smb_close(&smb); /* Close the e-mail */ ! 84: if(mailmsgs) ! 85: FREE(mail); ! 86: ! 87: useron.number=1; ! 88: getuserdat(&useron); ! 89: for(i=0;i<qhub[hubnum]->subs;i++) { ! 90: j=qhub[hubnum]->sub[i]; /* j now equals the real sub num */ ! 91: msgs=getlastmsg(j,&last,0); ! 92: lncntr=0; /* defeat pause */ ! 93: if(!msgs || last<=sub[j]->ptr) { ! 94: if(sub[j]->ptr>last) { ! 95: sub[j]->ptr=last; ! 96: sub[j]->last=last; } ! 97: bprintf(text[NScanStatusFmt] ! 98: ,grp[sub[j]->grp]->sname ! 99: ,sub[j]->lname,0L,msgs); ! 100: continue; } ! 101: ! 102: sprintf(smb.file,"%s%s" ! 103: ,sub[j]->data_dir,sub[j]->code); ! 104: smb.retry_time=smb_retry_time; ! 105: if((k=smb_open(&smb))!=0) { ! 106: errormsg(WHERE,ERR_OPEN,smb.file,k); ! 107: continue; } ! 108: ! 109: post=loadposts(&posts,j,sub[j]->ptr,LP_BYSELF|LP_OTHERS|LP_PRIVATE|LP_REP); ! 110: bprintf(text[NScanStatusFmt] ! 111: ,grp[sub[j]->grp]->sname ! 112: ,sub[j]->lname,posts,msgs); ! 113: if(!posts) { /* no new messages */ ! 114: smb_close(&smb); ! 115: continue; } ! 116: ! 117: sub[j]->ptr=last; /* set pointer */ ! 118: bputs(text[QWKPackingSubboard]); /* ptr to last msg */ ! 119: submsgs=0; ! 120: for(l=0;l<posts;l++) { ! 121: bprintf("\b\b\b\b\b%-5lu",l+1); ! 122: ! 123: msg.idx.offset=post[l].offset; ! 124: if(!loadmsg(&msg,post[l].number)) ! 125: continue; ! 126: ! 127: if(msg.from_net.type && msg.from_net.type!=NET_QWK && ! 128: !(sub[j]->misc&SUB_GATE)) { ! 129: smb_freemsgmem(&msg); ! 130: smb_unlockmsghdr(&smb,&msg); ! 131: continue; } ! 132: ! 133: if(!strncmpi(msg.subj,"NE:",3) || (msg.from_net.type==NET_QWK && ! 134: route_circ(msg.from_net.addr,qhub[hubnum]->id))) { ! 135: smb_freemsgmem(&msg); ! 136: smb_unlockmsghdr(&smb,&msg); ! 137: continue; } ! 138: ! 139: mode=qhub[hubnum]->mode[i]|TO_QNET|REP; ! 140: if(mode&A_LEAVE) mode|=(VIA|TZ); ! 141: if(msg.from_net.type!=NET_QWK) ! 142: mode|=TAGLINE; ! 143: ! 144: msgtoqwk(msg,rep,mode,j,qhub[hubnum]->conf[i]); ! 145: ! 146: smb_freemsgmem(&msg); ! 147: smb_unlockmsghdr(&smb,&msg); ! 148: msgcnt++; ! 149: submsgs++; } ! 150: bprintf(text[QWKPackedSubboard],submsgs,msgcnt); ! 151: LFREE(post); ! 152: smb_close(&smb); } ! 153: ! 154: fclose(rep); /* close MESSAGE.DAT */ ! 155: CRLF; ! 156: /* Look for extra files to send out */ ! 157: sprintf(str,"%sQNET\\%s.OUT\\*.*",data_dir,qhub[hubnum]->id); ! 158: i=findfirst(str,&ff,0); ! 159: while(!i) { ! 160: sprintf(str,"%sQNET\\%s.OUT\\%s",data_dir,qhub[hubnum]->id,ff.ff_name); ! 161: sprintf(tmp2,"%s%s",temp_dir,ff.ff_name); ! 162: bprintf(text[RetrievingFile],str); ! 163: if(!mv(str,tmp2,1)) ! 164: netfiles++; ! 165: i=findnext(&ff); } ! 166: if(netfiles) ! 167: CRLF; ! 168: ! 169: if(!msgcnt && !netfiles && !packedmail) { ! 170: bputs(text[QWKNoNewMessages]); ! 171: return(0); } ! 172: ! 173: /*******************/ ! 174: /* Compress Packet */ ! 175: /*******************/ ! 176: sprintf(str,"%s%s.REP",data_dir,qhub[hubnum]->id); ! 177: sprintf(tmp2,"%s*.*",temp_dir); ! 178: i=external(cmdstr(qhub[hubnum]->pack,str,tmp2,NULL),EX_OUTL); ! 179: if(!fexist(str)) { ! 180: bputs(text[QWKCompressionFailed]); ! 181: if(i) ! 182: errormsg(WHERE,ERR_EXEC,cmdstr(qhub[hubnum]->pack,str,tmp2,NULL),i); ! 183: else ! 184: errorlog("Couldn't compress REP packet"); ! 185: return(0); } ! 186: sprintf(str,"%sQNET\\%s.OUT\\",data_dir,qhub[hubnum]->id); ! 187: delfiles(str,"*.*"); ! 188: ! 189: if(packedmail) { /* Delete NetMail */ ! 190: sprintf(smb.file,"%sMAIL",data_dir); ! 191: smb.retry_time=smb_retry_time; ! 192: if((i=smb_open(&smb))!=0) { ! 193: errormsg(WHERE,ERR_OPEN,smb.file,i); ! 194: return(1); } ! 195: ! 196: mailmsgs=loadmail(&mail,0,MAIL_YOUR,LM_QWK); ! 197: ! 198: if((i=smb_locksmbhdr(&smb))!=0) { /* Lock the base, so nobody */ ! 199: if(mailmsgs) ! 200: FREE(mail); ! 201: smb_close(&smb); ! 202: errormsg(WHERE,ERR_LOCK,smb.file,i); /* messes with the index */ ! 203: return(1); } ! 204: ! 205: if((i=smb_getstatus(&smb))!=0) { ! 206: if(mailmsgs) ! 207: FREE(mail); ! 208: smb_close(&smb); ! 209: errormsg(WHERE,ERR_READ,smb.file,i); ! 210: return(1); } ! 211: ! 212: deleted=0; ! 213: /* Mark as READ and DELETE */ ! 214: for(l=0;l<mailmsgs;l++) { ! 215: if(mail[l].time>qwkmail_time) ! 216: continue; ! 217: msg.idx.offset=0; ! 218: if(!loadmsg(&msg,mail[l].number)) ! 219: continue; ! 220: ! 221: sprintf(str,"%s/",qhub[hubnum]->id); ! 222: if(msg.to_net.type!=NET_QWK ! 223: || (strcmp(msg.to_net.addr,qhub[hubnum]->id) ! 224: && strncmp(msg.to_net.addr,str,strlen(str)))) { ! 225: smb_unlockmsghdr(&smb,&msg); ! 226: smb_freemsgmem(&msg); ! 227: continue; } ! 228: ! 229: msg.hdr.attr|=MSG_DELETE; ! 230: msg.idx.attr=msg.hdr.attr; ! 231: if((i=smb_putmsg(&smb,&msg))!=0) ! 232: errormsg(WHERE,ERR_WRITE,smb.file,i); ! 233: else ! 234: deleted++; ! 235: smb_unlockmsghdr(&smb,&msg); ! 236: smb_freemsgmem(&msg); } ! 237: ! 238: if(deleted && sys_misc&SM_DELEMAIL) ! 239: delmail(0,MAIL_YOUR); ! 240: smb_close(&smb); ! 241: if(mailmsgs) ! 242: FREE(mail); } ! 243: ! 244: return(1); ! 245: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.