summaryrefslogtreecommitdiffstats
path: root/innbbsd/ctlinnbbsd.c
diff options
context:
space:
mode:
authorin2 <in2@63ad8ddf-47c3-0310-b6dd-a9e9d9715204>2002-03-07 23:13:44 +0800
committerin2 <in2@63ad8ddf-47c3-0310-b6dd-a9e9d9715204>2002-03-07 23:13:44 +0800
commitae31e19f92e717919ac8e3db9039eb38d2b89aae (patch)
treec70164d6a1852344f44b04a653ae2815043512af /innbbsd/ctlinnbbsd.c
downloadpttbbs-ae31e19f92e717919ac8e3db9039eb38d2b89aae.tar
pttbbs-ae31e19f92e717919ac8e3db9039eb38d2b89aae.tar.gz
pttbbs-ae31e19f92e717919ac8e3db9039eb38d2b89aae.tar.bz2
pttbbs-ae31e19f92e717919ac8e3db9039eb38d2b89aae.tar.lz
pttbbs-ae31e19f92e717919ac8e3db9039eb38d2b89aae.tar.xz
pttbbs-ae31e19f92e717919ac8e3db9039eb38d2b89aae.tar.zst
pttbbs-ae31e19f92e717919ac8e3db9039eb38d2b89aae.zip
Initial revision
git-svn-id: http://opensvn.csie.org/pttbbs/pttbbs/trunk/pttbbs@1 63ad8ddf-47c3-0310-b6dd-a9e9d9715204
Diffstat (limited to 'innbbsd/ctlinnbbsd.c')
-rw-r--r--innbbsd/ctlinnbbsd.c160
1 files changed, 160 insertions, 0 deletions
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 <mid> path: add history\n");
+ fprintf(stderr," ctlinnbbsd grephist <mid>: 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();
+}