From ae31e19f92e717919ac8e3db9039eb38d2b89aae Mon Sep 17 00:00:00 2001 From: in2 Date: Thu, 7 Mar 2002 15:13:44 +0000 Subject: Initial revision git-svn-id: http://opensvn.csie.org/pttbbs/pttbbs/trunk/pttbbs@1 63ad8ddf-47c3-0310-b6dd-a9e9d9715204 --- innbbsd/ctlinnbbsd.c | 160 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 160 insertions(+) create mode 100644 innbbsd/ctlinnbbsd.c (limited to 'innbbsd/ctlinnbbsd.c') diff --git a/innbbsd/ctlinnbbsd.c b/innbbsd/ctlinnbbsd.c new file mode 100644 index 00000000..4ba77b52 --- /dev/null +++ b/innbbsd/ctlinnbbsd.c @@ -0,0 +1,160 @@ +#include "innbbsconf.h" +#include "bbslib.h" + +extern char *optarg; +extern int opterr, optind; + +usage(name) +char *name; +{ + fprintf(stderr, "Usage: %s [-p path] commands\n",name); + fprintf(stderr, " where available commands:\n"); + fprintf(stderr," ctlinnbbsd reload : reload datafiles for innbbsd\n"); + fprintf(stderr," ctlinnbbsd shutdown : shutdown innbbsd gracefully\n"); + fprintf(stderr," ctlinnbbsd mode : examine mode of innbbsd\n"); + fprintf(stderr," ctlinnbbsd addhist path: add history\n"); + fprintf(stderr," ctlinnbbsd grephist : query history\n"); + fprintf(stderr," ctlinnbbsd verboselog on|off : verboselog on/off\n"); + fprintf(stderr," ctlinnbbsd hismaint : maintain history\n"); + fprintf(stderr," ctlinnbbsd listnodelist : list nodelist.bbs\n"); + fprintf(stderr," ctlinnbbsd listnewsfeeds : list newsfeeds.bbs\n"); +#ifdef GETRUSAGE + fprintf(stderr," ctlinnbbsd getrusage: get resource usage\n"); +#endif +#ifdef MALLOCMAP + fprintf(stderr," ctlinnbbsd mallocmap: get malloc map\n"); +#endif +} + + +char *DefaultPath = LOCALDAEMON; +char INNBBSbuffer[4096]; + +FILE *innbbsin, *innbbsout; +int innbbsfd; + +ctlinnbbsd(argc, argv) +int argc; +char **argv; +{ + fgets(INNBBSbuffer, sizeof INNBBSbuffer, innbbsin); + printf("%s",INNBBSbuffer); + if (strcasecmp(argv[0], "shutdown")==0 || + strcasecmp(argv[0], "reload")==0 || + strcasecmp(argv[0], "hismaint")==0 || +#ifdef GETRUSAGE + strcasecmp(argv[0], "getrusage")==0 || +#endif +#ifdef MALLOCMAP + strcasecmp(argv[0], "mallocmap")==0 || +#endif + strcasecmp(argv[0], "mode")==0 || + strcasecmp(argv[0], "listnodelist")==0 || + strcasecmp(argv[0], "listnewsfeeds")==0 + ) { + fprintf( innbbsout, "%s\r\n", argv[0]); + fflush( innbbsout); + fgets(INNBBSbuffer, sizeof INNBBSbuffer, innbbsin); + printf("%s",INNBBSbuffer); + if (strcasecmp(argv[0], "mode") ==0 +#ifdef GETRUSAGE + || + strcasecmp(argv[0], "getrusage") ==0 + || + strcasecmp(argv[0], "mallocmap") ==0 +#endif + || + strcasecmp(argv[0], "listnodelist")==0 + || + strcasecmp(argv[0], "listnewsfeeds")==0 + ) { + while (fgets(INNBBSbuffer, sizeof INNBBSbuffer, innbbsin) != NULL) { + if (strcmp(INNBBSbuffer,".\r\n")==0) { + break; + } + printf("%s",INNBBSbuffer); + } + } + } else if (strcasecmp(argv[0], "grephist")==0 || + strcasecmp(argv[0], "verboselog")==0 ) { + if (argc < 2) { + usage("ctlinnbbsd"); + } else { + fprintf( innbbsout, "%s %s\r\n", argv[0], argv[1]); + fflush( innbbsout); + fgets(INNBBSbuffer, sizeof INNBBSbuffer, innbbsin); + printf("%s\n",INNBBSbuffer); + } + } else if (strcasecmp(argv[0], "addhist")==0) { + if (argc < 3) { + usage("ctlinnbbsd"); + } else { + fprintf( innbbsout, "%s %s %s\r\n", argv[0], argv[1], argv[2]); + fflush( innbbsout); + fgets(INNBBSbuffer, sizeof INNBBSbuffer, innbbsin); + printf("%s",INNBBSbuffer); + } + } else { + fprintf(stderr, "invalid command %s\n", argv[0]); + } + if (strcasecmp(argv[0],"shutdown") != 0) { + fprintf( innbbsout, "QUIT\r\n"); + fflush(innbbsout); + fgets(INNBBSbuffer, sizeof INNBBSbuffer, innbbsin); + } +} + +initsocket() +{ + innbbsfd = unixclient(DefaultPath,"tcp"); + if (innbbsfd < 0) { + fprintf(stderr, "Connect to %s error. You may not run innbbsd\n", DefaultPath); + exit(2); + } + if ( (innbbsin= fdopen(innbbsfd,"r")) == NULL || + (innbbsout= fdopen(innbbsfd,"w"))== NULL ) { + fprintf( stderr, "fdopen error\n"); + exit(3); + } +} + +closesocket() +{ + if (innbbsin != NULL) + fclose(innbbsin); + if (innbbsout != NULL) + fclose(innbbsout); + if (innbbsfd >= 0) + close(innbbsfd); +} + +main(argc, argv) +int argc; +char **argv; +{ + int c, errflag=0; + + while ((c = getopt(argc,argv,"p:h?"))!= -1) + switch (c) { + case 'p': + DefaultPath = optarg; + break; + case 'h': + case '?': + default: + errflag ++; + break; + } + if (errflag > 0) { + usage(argv[0]); + return(1); + } + if (argc - optind < 1) { + usage(argv[0]); + exit(1); + } + initial_bbs(NULL); + initsocket(); + ctlinnbbsd(argc-optind, argv+optind); + closesocket(); +} -- cgit v1.2.3