Annotation of sbbs/sbbs3/sbbscon.c, revision 1.1

1.1     ! root        1: /* sbbscon.c */
        !             2: 
        !             3: /* Synchronet vanilla/console-mode "front-end" */
        !             4: 
        !             5: /* $Id: sbbscon.c,v 1.14 2000/11/17 05:07:53 rswindell Exp $ */
        !             6: 
        !             7: /****************************************************************************
        !             8:  * @format.tab-size 4          (Plain Text/Source Code File Header)                    *
        !             9:  * @format.use-tabs true       (see http://www.synchro.net/ptsc_hdr.html)              *
        !            10:  *                                                                                                                                                     *
        !            11:  * Copyright 2000 Rob Swindell - http://www.synchro.net/copyright.html         *
        !            12:  *                                                                                                                                                     *
        !            13:  * This program is free software; you can redistribute it and/or                       *
        !            14:  * modify it under the terms of the GNU General Public License                         *
        !            15:  * as published by the Free Software Foundation; either version 2                      *
        !            16:  * of the License, or (at your option) any later version.                                      *
        !            17:  * See the GNU General Public License for more details: gpl.txt or                     *
        !            18:  * http://www.fsf.org/copyleft/gpl.html                                                                                *
        !            19:  *                                                                                                                                                     *
        !            20:  * Anonymous FTP access to the most recent released source is available at     *
        !            21:  * ftp://vert.synchro.net, ftp://cvs.synchro.net and ftp://ftp.synchro.net     *
        !            22:  *                                                                                                                                                     *
        !            23:  * Anonymous CVS access to the development source and modification history     *
        !            24:  * is available at cvs.synchro.net:/cvsroot/sbbs, example:                                     *
        !            25:  * cvs -d :pserver:[email protected]:/cvsroot/sbbs login                       *
        !            26:  *     (just hit return, no password is necessary)                                                     *
        !            27:  * cvs -d :pserver:[email protected]:/cvsroot/sbbs checkout src                *
        !            28:  *                                                                                                                                                     *
        !            29:  * For Synchronet coding style and modification guidelines, see                                *
        !            30:  * http://www.synchro.net/source.html                                                                          *
        !            31:  *                                                                                                                                                     *
        !            32:  * You are encouraged to submit any modifications (preferably in Unix diff     *
        !            33:  * format) via e-mail to [email protected]                                                                      *
        !            34:  *                                                                                                                                                     *
        !            35:  * Note: If this box doesn't appear square, then you need to fix your tabs.    *
        !            36:  ****************************************************************************/
        !            37: 
        !            38: /* Synchronet-specific headers */
        !            39: #include "sbbs.h"
        !            40: #include "conwrap.h"   /* kbhit/getch */
        !            41: #include "bbs_thrd.h"  /* bbs_thread */
        !            42: #include "ftpsrvr.h"   /* ftp_startup_t, ftp_server */
        !            43: #include "mailsrvr.h"  /* mail_startup_t, mail_server */
        !            44: 
        !            45: /* Constants */
        !            46: #define SBBSCON_VERSION                "1.00"
        !            47: 
        !            48: /* Global variables */
        !            49: BOOL                   bbs_running=FALSE;
        !            50: bbs_startup_t  bbs_startup;
        !            51: BOOL                   ftp_running=FALSE;
        !            52: ftp_startup_t  ftp_startup;
        !            53: BOOL                   mail_running=FALSE;
        !            54: mail_startup_t mail_startup;
        !            55: 
        !            56: static const char* prompt = "Command (?=Help): ";
        !            57: 
        !            58: static void lputs(char *str)
        !            59: {
        !            60:        static pthread_mutex_t mutex;
        !            61:        static BOOL mutex_initialized;
        !            62: 
        !            63:        if(!mutex_initialized) {
        !            64:                pthread_mutex_init(&mutex,NULL);
        !            65:                mutex_initialized=TRUE;
        !            66:        }
        !            67: 
        !            68:        pthread_mutex_lock(&mutex);
        !            69:        printf("\r%*s\r%s\n",strlen(prompt),"",str);
        !            70:        printf(prompt);
        !            71:        fflush(stdout);
        !            72:        pthread_mutex_unlock(&mutex);
        !            73: }
        !            74: 
        !            75: /************************************************/
        !            76: /* Truncates white-space chars off end of 'str' */
        !            77: /************************************************/
        !            78: static void truncsp(char *str)
        !            79: {
        !            80:        uint c;
        !            81: 
        !            82:        c=strlen(str);
        !            83:        while(c && (uchar)str[c-1]<=' ') c--;
        !            84:        str[c]=0;
        !            85: }
        !            86: 
        !            87: /****************************************************************************/
        !            88: /* BBS local/log print routine                                                                                         */
        !            89: /****************************************************************************/
        !            90: static int bbs_lputs(char *str)
        !            91: {
        !            92:        char            logline[512];
        !            93:        char            tstr[64];
        !            94:        time_t          t;
        !            95:        struct tm*      tm_p;
        !            96: 
        !            97:        t=time(NULL);
        !            98:        tm_p=localtime(&t);
        !            99:        if(tm_p==NULL)
        !           100:                tstr[0]=0;
        !           101:        else
        !           102:                sprintf(tstr,"%d/%d %02d:%02d:%02d "
        !           103:                        ,tm_p->tm_mon+1,tm_p->tm_mday
        !           104:                        ,tm_p->tm_hour,tm_p->tm_min,tm_p->tm_sec);
        !           105: 
        !           106:        sprintf(logline,"%sbbs  %.*s",tstr,sizeof(logline)-2,str);
        !           107:        truncsp(logline);
        !           108:        lputs(logline);
        !           109:        
        !           110:     return(strlen(logline)+1);
        !           111: }
        !           112: 
        !           113: static void bbs_started(void)
        !           114: {
        !           115:        bbs_running=TRUE;
        !           116: }
        !           117: 
        !           118: static void bbs_terminated(int code)
        !           119: {
        !           120:        bbs_running=FALSE;
        !           121: }
        !           122: 
        !           123: /****************************************************************************/
        !           124: /* FTP local/log print routine                                                                                         */
        !           125: /****************************************************************************/
        !           126: static int ftp_lputs(char *str)
        !           127: {
        !           128:        char            logline[512];
        !           129:        char            tstr[64];
        !           130:        time_t          t;
        !           131:        struct tm*      tm_p;
        !           132: 
        !           133:        t=time(NULL);
        !           134:        tm_p=localtime(&t);
        !           135:        if(tm_p==NULL)
        !           136:                tstr[0]=0;
        !           137:        else
        !           138:                sprintf(tstr,"%d/%d %02d:%02d:%02d "
        !           139:                        ,tm_p->tm_mon+1,tm_p->tm_mday
        !           140:                        ,tm_p->tm_hour,tm_p->tm_min,tm_p->tm_sec);
        !           141: 
        !           142:        sprintf(logline,"%sftp  %.*s",tstr,sizeof(logline)-2,str);
        !           143:        truncsp(logline);
        !           144:        lputs(logline);
        !           145:        
        !           146:     return(strlen(logline)+1);
        !           147: }
        !           148: 
        !           149: static void ftp_started(void)
        !           150: {
        !           151:        ftp_running=TRUE;
        !           152: }
        !           153: 
        !           154: static void ftp_terminated(int code)
        !           155: {
        !           156:        ftp_running=FALSE;
        !           157: }
        !           158: 
        !           159: /****************************************************************************/
        !           160: /* Mail Server local/log print routine                                                                         */
        !           161: /****************************************************************************/
        !           162: static int mail_lputs(char *str)
        !           163: {
        !           164:        char            logline[512];
        !           165:        char            tstr[64];
        !           166:        time_t          t;
        !           167:        struct tm*      tm_p;
        !           168: 
        !           169:        t=time(NULL);
        !           170:        tm_p=localtime(&t);
        !           171:        if(tm_p==NULL)
        !           172:                tstr[0]=0;
        !           173:        else
        !           174:                sprintf(tstr,"%d/%d %02d:%02d:%02d "
        !           175:                        ,tm_p->tm_mon+1,tm_p->tm_mday
        !           176:                        ,tm_p->tm_hour,tm_p->tm_min,tm_p->tm_sec);
        !           177: 
        !           178:        sprintf(logline,"%smail %.*s",tstr,sizeof(logline)-2,str);
        !           179:        truncsp(logline);
        !           180:        lputs(logline);
        !           181:        
        !           182:     return(strlen(logline)+1);
        !           183: }
        !           184: 
        !           185: static void mail_started(void)
        !           186: {
        !           187:        mail_running=TRUE;
        !           188: }
        !           189: 
        !           190: static void mail_terminated(int code)
        !           191: {
        !           192:        mail_running=FALSE;
        !           193: }
        !           194: 
        !           195: /****************************************************************************/
        !           196: /* Main Entry Point                                                                                                                    */
        !           197: /****************************************************************************/
        !           198: int main(int argc, char** argv)
        !           199: {
        !           200:        char    ch;
        !           201:        char*   ctrl_dir;
        !           202:        BOOL    quit=FALSE;
        !           203: 
        !           204:        printf("\nSynchronet BBS Console Version %s  Copyright 2000 Rob Swindell\n"
        !           205:                ,SBBSCON_VERSION);
        !           206: 
        !           207:        ctrl_dir=getenv("SBBSCTRL");    /* read from environment variable */
        !           208:        if(ctrl_dir==NULL)
        !           209:                ctrl_dir="/sbbs/ctrl/";         /* Not set? Use default */
        !           210: 
        !           211:        /* Initialize BBS startup structure */
        !           212:     memset(&bbs_startup,0,sizeof(bbs_startup));
        !           213:     bbs_startup.size=sizeof(bbs_startup);
        !           214:     bbs_startup.first_node=1;
        !           215:     bbs_startup.last_node=4;
        !           216:     bbs_startup.telnet_port=IPPORT_TELNET;
        !           217:     bbs_startup.telnet_interface=INADDR_ANY;
        !           218:        bbs_startup.options|=BBS_OPT_NO_QWK_EVENTS;
        !           219: 
        !           220: #ifdef USE_RLOGIN
        !           221:     bbs_startup.rlogin_port=513;
        !           222:     bbs_startup.rlogin_interface=INADDR_ANY;
        !           223:        bbs_startup.options|=BBS_OPT_ALLOW_RLOGIN;
        !           224: #endif
        !           225: 
        !           226:        bbs_startup.lputs=bbs_lputs;
        !           227:     bbs_startup.started=bbs_started;
        !           228:     bbs_startup.terminated=bbs_terminated;
        !           229: /*     These callbacks haven't been created yet
        !           230:     bbs_startup.status=bbs_status;
        !           231:     bbs_startup.clients=bbs_clients;
        !           232:     bbs_startup.thread_up=thread_up;
        !           233:     bbs_startup.client_on=client_on;
        !           234:     bbs_startup.socket_open=socket_open;
        !           235: */
        !           236:     strcpy(bbs_startup.ctrl_dir,ctrl_dir);
        !           237: 
        !           238:        /* Initialize FTP startup structure */
        !           239:     memset(&ftp_startup,0,sizeof(ftp_startup));
        !           240:     ftp_startup.size=sizeof(ftp_startup);
        !           241:     ftp_startup.port=IPPORT_FTP;
        !           242:     ftp_startup.interface_addr=INADDR_ANY;
        !           243:        ftp_startup.lputs=ftp_lputs;
        !           244:     ftp_startup.started=ftp_started;
        !           245:     ftp_startup.terminated=ftp_terminated;
        !           246:        ftp_startup.options=FTP_OPT_INDEX_FILE|FTP_OPT_ALLOW_QWK;
        !           247:     strcpy(ftp_startup.index_file_name,"00index");
        !           248:     strcpy(ftp_startup.ctrl_dir,ctrl_dir);
        !           249: 
        !           250:        /* Initialize Mail Server startup structure */
        !           251:     memset(&mail_startup,0,sizeof(mail_startup));
        !           252:     mail_startup.size=sizeof(mail_startup);
        !           253:     mail_startup.smtp_port=IPPORT_SMTP;
        !           254:     mail_startup.pop3_port=110;
        !           255:     mail_startup.max_clients=10;
        !           256:     mail_startup.max_inactivity=120;
        !           257:     mail_startup.max_delivery_attempts=10;
        !           258:     mail_startup.rescan_frequency=300; /* In seconds */
        !           259:     mail_startup.relay_port=IPPORT_SMTP;
        !           260:     mail_startup.interface_addr=INADDR_ANY;
        !           261:        mail_startup.lputs=mail_lputs;
        !           262:     mail_startup.started=mail_started;
        !           263:     mail_startup.terminated=mail_terminated;
        !           264:        mail_startup.options|=MAIL_OPT_ALLOW_POP3;
        !           265:     strcpy(mail_startup.ctrl_dir,ctrl_dir);
        !           266: 
        !           267:        _beginthread((void(*)(void*))bbs_thread,0,&bbs_startup);
        !           268:        _beginthread((void(*)(void*))ftp_server,0,&ftp_startup);
        !           269:        _beginthread((void(*)(void*))mail_server,0,&mail_startup);
        !           270: 
        !           271:        while(!quit) {
        !           272:                ch=getch();
        !           273:                printf("%c\n",ch);
        !           274:                switch(ch) {
        !           275:                        case 'q':
        !           276:                                quit=TRUE;
        !           277:                                break;
        !           278:                        default:
        !           279:                                printf("\nSynchronet BBS Console Version %s Help\n\n",SBBSCON_VERSION);
        !           280:                                printf("q   = quit\n");
        !           281: #if 0  /* to do */
        !           282:                                printf("n   = node list\n");
        !           283:                                printf("w   = who's online\n");
        !           284:                                printf("l#  = lock node #\n");
        !           285:                                printf("d#  = down node #\n");
        !           286:                                printf("i#  = interrupt node #\n");
        !           287:                                printf("c#  = chat with node #\n");
        !           288:                                printf("s#  = spy on node #\n");
        !           289: #endif
        !           290:                                lputs("");      /* redisplay prompt */
        !           291:                                break;
        !           292:                }
        !           293:        }
        !           294: 
        !           295:        bbs_terminate();
        !           296:        ftp_terminate();
        !           297:        mail_terminate();
        !           298: 
        !           299:        while(bbs_running || ftp_running || mail_running)
        !           300:                mswait(1);
        !           301: 
        !           302:        /* erase the prompt */
        !           303:        printf("\r%*s\r",strlen(prompt),"");
        !           304: 
        !           305:        return(0);
        !           306: }

unix.superglobalmegacorp.com

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