Annotation of sbbs/sbbs2/pack_rep.c, revision 1.1

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: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.