Annotation of sbbs/sbbs3/sbbscon.c, revision 1.1.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.