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

1.1     ! root        1: #line 1 "UN_QWK.C"
        !             2: 
        !             3: /* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
        !             4: 
        !             5: #include "sbbs.h"
        !             6: #include "qwk.h"
        !             7: 
        !             8: /****************************************************************************/
        !             9: /* Unpacks .QWK packet, hubnum is the number of the QWK net hub                        */
        !            10: /****************************************************************************/
        !            11: void unpack_qwk(char *packet,uint hubnum)
        !            12: {
        !            13:        uchar   str[256],fname[128],block[128],ch;
        !            14:        int     k,file;
        !            15:        uint    i,j,n,msgs,lastsub=INVALID_SUB;
        !            16:        long    l,size,misc;
        !            17:        time_t  t;
        !            18:     struct  ffblk ff;
        !            19:        FILE    *qwk;
        !            20: 
        !            21: useron.number=1;
        !            22: getuserdat(&useron);
        !            23: console=CON_L_ECHO;
        !            24: i=external(cmdstr(qhub[hubnum]->unpack,packet,"*.*",NULL),EX_OUTL);
        !            25: if(i) {
        !            26:        errormsg(WHERE,ERR_EXEC,cmdstr(qhub[hubnum]->unpack,packet,"*.*",NULL),i);
        !            27:        return; }
        !            28: sprintf(str,"%sMESSAGES.DAT",temp_dir);
        !            29: if(!fexist(str)) {
        !            30:        sprintf(str,"%s.QWK doesn't contain MESSAGES.DAT",qhub[hubnum]->id);
        !            31:        errorlog(str);
        !            32:        return; }
        !            33: if((qwk=fnopen(&file,str,O_RDONLY))==NULL) {
        !            34:        errormsg(WHERE,ERR_OPEN,str,O_RDONLY);
        !            35:        return; }
        !            36: size=filelength(file);
        !            37: /********************/
        !            38: /* Process messages */
        !            39: /********************/
        !            40: bputs(text[QWKUnpacking]);
        !            41: 
        !            42: for(l=128;l<size;l+=i*128) {
        !            43:        fseek(qwk,l,SEEK_SET);
        !            44:        fread(block,128,1,qwk);
        !            45:        sprintf(tmp,"%.6s",block+116);
        !            46:        i=atoi(tmp);  /* i = number of 128 byte records */
        !            47:        if(i<2) {
        !            48:                i=1;
        !            49:                continue; }
        !            50:        /*********************************/
        !            51:        /* public message on a sub-board */
        !            52:        /*********************************/
        !            53:        n=(uint)block[123]|(((uint)block[124])<<8);  /* conference number */
        !            54: 
        !            55:        if(!n) {                /* NETMAIL */
        !            56:                sprintf(str,"%25.25s",block+21);
        !            57:                truncsp(str);
        !            58:                if(!stricmp(str,"NETMAIL")) {  /* QWK to FidoNet NetMail */
        !            59:                        qwktonetmail(qwk,block,NULL,hubnum+1);
        !            60:             continue; }
        !            61:                if(strchr(str,'@')) {
        !            62:                        qwktonetmail(qwk,block,str,hubnum+1);
        !            63:             continue; }
        !            64:                j=atoi(str);
        !            65:                if(j && j>lastuser())
        !            66:                        j=0;
        !            67:                if(!j && !stricmp(str,"SYSOP"))
        !            68:                        j=1;
        !            69:                if(!j)
        !            70:                        j=matchuser(str);
        !            71:                if(!j && !stricmp(str,sys_id))
        !            72:                        j=1;
        !            73:                if(!j) {
        !            74:                        bputs(text[UnknownUser]);
        !            75:             continue; }
        !            76: 
        !            77:                getuserrec(j,U_MISC,8,str);
        !            78:                misc=ahtoul(str);
        !            79:                if(misc&NETMAIL && sys_misc&SM_FWDTONET) {
        !            80:                        getuserrec(j,U_NETMAIL,LEN_NETMAIL,str);
        !            81:                        qwktonetmail(qwk,block,str,hubnum+1);
        !            82:             continue; }
        !            83: 
        !            84:                smb_stack(&smb,SMB_STACK_PUSH);
        !            85:                sprintf(smb.file,"%sMAIL",data_dir);
        !            86:                smb.retry_time=smb_retry_time;
        !            87:                if((k=smb_open(&smb))!=0) {
        !            88:                        errormsg(WHERE,ERR_OPEN,smb.file,k);
        !            89:                        smb_stack(&smb,SMB_STACK_POP);
        !            90:                        continue; }
        !            91:                if(!filelength(fileno(smb.shd_fp))) {
        !            92:                        smb.status.max_crcs=mail_maxcrcs;
        !            93:                        smb.status.max_msgs=MAX_SYSMAIL;
        !            94:                        smb.status.max_age=mail_maxage;
        !            95:                        smb.status.attr=SMB_EMAIL;
        !            96:                        if((k=smb_create(&smb))!=0) {
        !            97:                                smb_close(&smb);
        !            98:                                errormsg(WHERE,ERR_CREATE,smb.file,k);
        !            99:                                smb_stack(&smb,SMB_STACK_POP);
        !           100:                                continue; } }
        !           101:                if((k=smb_locksmbhdr(&smb))!=0) {
        !           102:                        smb_close(&smb);
        !           103:                        errormsg(WHERE,ERR_LOCK,smb.file,k);
        !           104:                        smb_stack(&smb,SMB_STACK_POP);
        !           105:                        continue; }
        !           106:                if((k=smb_getstatus(&smb))!=0) {
        !           107:                        smb_close(&smb);
        !           108:                        errormsg(WHERE,ERR_READ,smb.file,k);
        !           109:                        smb_stack(&smb,SMB_STACK_POP);
        !           110:             continue; }
        !           111:                smb_unlocksmbhdr(&smb);
        !           112:                qwktomsg(qwk,block,hubnum+1,INVALID_SUB,j);
        !           113:                smb_close(&smb);
        !           114:                smb_stack(&smb,SMB_STACK_POP);
        !           115:                sprintf(tmp,"%-25.25s",block+46);
        !           116:                truncsp(tmp);
        !           117:                sprintf(str,text[UserSentYouMail],tmp);
        !           118:                putsmsg(j,str);
        !           119:                continue;
        !           120:                }
        !           121: 
        !           122:        for(j=0;j<qhub[hubnum]->subs;j++)
        !           123:                if(qhub[hubnum]->conf[j]==n)
        !           124:                        break;
        !           125:        if(j>=qhub[hubnum]->subs)       /* ignore messages for subs not in config */
        !           126:                continue;
        !           127: 
        !           128:        j=qhub[hubnum]->sub[j];
        !           129: 
        !           130:        if(j!=lastsub) {
        !           131:                if(lastsub!=INVALID_SUB)
        !           132:                        smb_close(&smb);
        !           133:                lastsub=INVALID_SUB;
        !           134:                sprintf(smb.file,"%s%s",sub[j]->data_dir,sub[j]->code);
        !           135:                smb.retry_time=smb_retry_time;
        !           136:                if((k=smb_open(&smb))!=0) {
        !           137:                        errormsg(WHERE,ERR_OPEN,smb.file,k);
        !           138:                        continue; }
        !           139:                if(!filelength(fileno(smb.shd_fp))) {
        !           140:                        smb.status.max_crcs=sub[j]->maxcrcs;
        !           141:                        smb.status.max_msgs=sub[j]->maxmsgs;
        !           142:                        smb.status.max_age=sub[j]->maxage;
        !           143:                        smb.status.attr=sub[j]->misc&SUB_HYPER ? SMB_HYPERALLOC :0;
        !           144:                        if((k=smb_create(&smb))!=0) {
        !           145:                                smb_close(&smb);
        !           146:                                errormsg(WHERE,ERR_CREATE,smb.file,k);
        !           147:                                continue; } }
        !           148:                if((k=smb_locksmbhdr(&smb))!=0) {
        !           149:                        smb_close(&smb);
        !           150:                        errormsg(WHERE,ERR_LOCK,smb.file,k);
        !           151:                        continue; }
        !           152:                if((k=smb_getstatus(&smb))!=0) {
        !           153:                        smb_close(&smb);
        !           154:                        errormsg(WHERE,ERR_READ,smb.file,k);
        !           155:                        continue; }
        !           156:                smb_unlocksmbhdr(&smb);
        !           157:                lastsub=j; }
        !           158: 
        !           159:        if(!qwktomsg(qwk,block,hubnum+1,j,0))
        !           160:                continue;
        !           161: 
        !           162:        if(sub[j]->misc&SUB_FIDO && sub[j]->echomail_sem[0]) /* update semaphore */
        !           163:                if((file=nopen(sub[j]->echomail_sem,O_WRONLY|O_CREAT|O_TRUNC))!=-1)
        !           164:                        close(file);
        !           165:        bprintf(text[Posted],grp[sub[j]->grp]->sname,sub[j]->lname); }
        !           166: 
        !           167: update_qwkroute(NULL);         /* Write ROUTE.DAT */
        !           168: 
        !           169: fclose(qwk);
        !           170: if(lastsub!=INVALID_SUB)
        !           171:        smb_close(&smb);
        !           172: 
        !           173: delfiles(temp_dir,"*.NDX");
        !           174: sprintf(str,"%sMESSAGES.DAT",temp_dir);
        !           175: remove(str);
        !           176: sprintf(str,"%sDOOR.ID",temp_dir);
        !           177: remove(str);
        !           178: sprintf(str,"%sCONTROL.DAT",temp_dir);
        !           179: remove(str);
        !           180: sprintf(str,"%sNETFLAGS.DAT",temp_dir);
        !           181: remove(str);
        !           182: 
        !           183: sprintf(str,"%s*.*",temp_dir);
        !           184: i=findfirst(str,&ff,0);
        !           185: if(!i) {
        !           186:        sprintf(str,"%sQNET\\%s.IN",data_dir,qhub[hubnum]->id);
        !           187:        mkdir(str); }
        !           188: while(!i) {
        !           189:        sprintf(str,"%s%s",temp_dir,ff.ff_name);
        !           190:        sprintf(fname,"%sQNET\\%s.IN\\%s",data_dir,qhub[hubnum]->id,ff.ff_name);
        !           191:        mv(str,fname,1);
        !           192:        sprintf(str,text[ReceivedFileViaQWK],ff.ff_name,qhub[hubnum]->id);
        !           193:        putsmsg(1,str);
        !           194:        i=findnext(&ff); }
        !           195: 
        !           196: bputs(text[QWKUnpacked]);
        !           197: CRLF;
        !           198: remove(packet);
        !           199: 
        !           200: }

unix.superglobalmegacorp.com

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