More work on control center

This commit is contained in:
Andrew Pamment 2017-03-27 19:05:56 +10:00
parent dea3079e26
commit 5ed4566eda
3 changed files with 998 additions and 4 deletions

View File

@ -168,7 +168,8 @@ struct user_record {
int defarchiver; int defarchiver;
int defprotocol; int defprotocol;
}; };
extern int get_valid_seclevels(int **levels, int *count);
extern struct fido_addr *parse_fido_addr(const char *str);
extern int load_ini_file(char *ini_file); extern int load_ini_file(char *ini_file);
extern void system_config(void); extern void system_config(void);
#endif #endif

View File

@ -2,11 +2,40 @@
#include <time.h> #include <time.h>
#include <stdlib.h> #include <stdlib.h>
#include <limits.h> #include <limits.h>
#include <dirent.h>
#include "ccenter.h" #include "ccenter.h"
#include "../../inih/ini.h" #include "../../inih/ini.h"
struct bbs_config conf; struct bbs_config conf;
int get_valid_seclevels(int **levels, int *count) {
DIR *dp;
struct dirent *dirp;
int c = 0;
int *lvls;
dp = opendir(conf.config_path);
if (!dp) {
return 0;
}
while ((dirp = readdir(dp)) != NULL) {
if (dirp->d_name[0] == 's' && atoi(&dirp->d_name[1]) > 0) {
if (c == 0) {
lvls = (int *)malloc(sizeof(int) * (c + 1));
} else {
lvls = (int *)realloc(lvls, sizeof(int) * (c + 1));
}
lvls[c] = atoi(&dirp->d_name[1]);
c++;
}
}
closedir(dp);
*levels = lvls;
*count = c;
return 1;
}
struct fido_addr *parse_fido_addr(const char *str) { struct fido_addr *parse_fido_addr(const char *str) {
if (str == NULL) { if (str == NULL) {
return NULL; return NULL;

View File

@ -39,18 +39,970 @@ void sysop_name(void) {
destroyCDKEntry(sysopNameEntry); destroyCDKEntry(sysopNameEntry);
} }
void number_of_nodes(void) {
char *entrytext;
char buffer[4];
int newnum;
CDKENTRY *nodeNumEntry = newCDKEntry(cdkscreen, 5, 5, "</B/32>Number of Nodes (1-255)<!32>", NULL, A_NORMAL, ' ', vINT, 32, 1, 3, TRUE, FALSE);
snprintf(buffer, 4, "%d", conf.nodes);
setCDKEntry(nodeNumEntry, buffer, 1, 3, TRUE);
entrytext = activateCDKEntry(nodeNumEntry, 0);
if (nodeNumEntry->exitType == vNORMAL) {
newnum = atoi(entrytext);
if (newnum > 0 && newnum < 256) {
conf.nodes = newnum;
}
}
destroyCDKEntry(nodeNumEntry);
}
void main_aka() {
char *entrytext;
char buffer[128];
struct fido_addr *new_addr;
CDKENTRY *mainAKAEntry = newCDKEntry(cdkscreen, 7, 7, "</B/32>Main AKA<!32>", NULL, A_NORMAL, ' ', vMIXED, 32, 1, 32, TRUE, FALSE);
snprintf(buffer, 128, "%d:%d/%d.%d", conf.main_aka->zone, conf.main_aka->net, conf.main_aka->node, conf.main_aka->point);
setCDKEntry(mainAKAEntry, buffer, 1, 32, TRUE);
entrytext = activateCDKEntry(mainAKAEntry, 0);
if (mainAKAEntry->exitType == vNORMAL) {
new_addr = parse_fido_addr(entrytext);
if (new_addr != NULL) {
if (conf.main_aka != NULL) {
free(conf.main_aka);
}
conf.main_aka = new_addr;
}
}
destroyCDKEntry(mainAKAEntry);
}
void default_tagline(void) {
char *entrytext;
CDKENTRY *defaultTagline = newCDKEntry(cdkscreen, 7, 7, "</B/32>Default Tagline<!32>", NULL, A_NORMAL, ' ', vMIXED, 48, 1, 80, TRUE, FALSE);
setCDKEntry(defaultTagline, conf.default_tagline, 1, 80, TRUE);
entrytext = activateCDKEntry(defaultTagline, 0);
if (defaultTagline->exitType == vNORMAL) {
if (conf.default_tagline != NULL) {
free(conf.default_tagline);
}
conf.default_tagline = strdup(entrytext);
}
destroyCDKEntry(defaultTagline);
}
void external_editor_cmd(void) {
char *entrytext;
CDKENTRY *extEditCmd = newCDKEntry(cdkscreen, 9, 9, "</B/32>External Editor Command<!32>", NULL, A_NORMAL, ' ', vMIXED, 48, 1, 1024, TRUE, FALSE);
setCDKEntry(extEditCmd, conf.external_editor_cmd, 1, 1024, TRUE);
entrytext = activateCDKEntry(extEditCmd, 0);
if (extEditCmd->exitType == vNORMAL) {
if (conf.external_editor_cmd != NULL) {
free(conf.external_editor_cmd);
}
conf.external_editor_cmd = strdup(entrytext);
}
destroyCDKEntry(extEditCmd);
}
void external_editor_stdio() {
char *itemList[] = {"True",
"False"};
int selection;
int doexit = 0;
CDKSCROLL *extEditStdio = newCDKScroll(cdkscreen, 9, 9, RIGHT, 5, 30, "</B/32>External Editor STDIO<!32>", itemList, 2,FALSE, A_STANDOUT, TRUE, FALSE);
if (conf.external_editor_stdio == 1) {
setCDKScrollCurrent(extEditStdio, 0);
} else {
setCDKScrollCurrent(extEditStdio, 1);
}
while(!doexit) {
selection = activateCDKScroll(extEditStdio, 0);
if (extEditStdio->exitType == vESCAPE_HIT) {
break;
}
switch(selection) {
case 0:
conf.external_editor_stdio = 1;
doexit = 1;
break;
case 1:
conf.external_editor_stdio = 0;
doexit = 1;
break;
default:
break;
}
}
destroyCDKScroll(extEditStdio);
}
void external_editor() {
char *itemList[] = {"Command",
"STDIO Redirection"};
int selection;
CDKSCROLL *extEditOpts = newCDKScroll(cdkscreen, 7, 7, RIGHT, 5, 30, "</B/32>External Editor Config<!32>", itemList, 2,FALSE, A_STANDOUT, TRUE, FALSE);
while(1) {
selection = activateCDKScroll(extEditOpts, 0);
if (extEditOpts->exitType == vESCAPE_HIT) {
break;
}
switch(selection) {
case 0:
external_editor_cmd();
break;
case 1:
external_editor_stdio();
break;
default:
break;
}
}
destroyCDKScroll(extEditOpts);
}
void qwk_opts_name(void) {
char *entrytext;
CDKENTRY *qwkOpsName = newCDKEntry(cdkscreen, 9, 9, "</B/32>QWK/Bluewave Name (8 Chars Max)<!32>", NULL, A_NORMAL, ' ', vUMIXED, 16, 1, 8, TRUE, FALSE);
setCDKEntry(qwkOpsName, conf.bwave_name, 1, 8, TRUE);
entrytext = activateCDKEntry(qwkOpsName, 0);
if (qwkOpsName->exitType == vNORMAL) {
if (conf.bwave_name != NULL) {
free(conf.bwave_name);
}
conf.bwave_name = strdup(entrytext);
}
destroyCDKEntry(qwkOpsName);
}
void qwk_opts_max(void) {
char *entrytext;
char buffer[7];
int newnum;
CDKENTRY *qwkOptsMax = newCDKEntry(cdkscreen, 9, 9, "</B/32>Max Messages Per Packet<!32>", NULL, A_NORMAL, ' ', vINT, 32, 1, 6, TRUE, FALSE);
snprintf(buffer, 7, "%d", conf.bwave_max_msgs);
setCDKEntry(qwkOptsMax, buffer, 1, 3, TRUE);
entrytext = activateCDKEntry(qwkOptsMax, 0);
if (qwkOptsMax->exitType == vNORMAL) {
newnum = atoi(entrytext);
if (newnum > 0) {
conf.bwave_max_msgs = newnum;
}
}
destroyCDKEntry(qwkOptsMax);
}
void qwk_opts() {
char *itemList[] = {"QWK Name",
"QWK Max Messages"};
int selection;
CDKSCROLL *qwkOpts = newCDKScroll(cdkscreen, 7, 7, RIGHT, 5, 30, "</B/32>QWK/Bluewave Options<!32>", itemList, 2,FALSE, A_STANDOUT, TRUE, FALSE);
while(1) {
selection = activateCDKScroll(qwkOpts, 0);
if (qwkOpts->exitType == vESCAPE_HIT) {
break;
}
switch(selection) {
case 0:
qwk_opts_name();
break;
case 1:
qwk_opts_max();
break;
default:
break;
}
}
destroyCDKScroll(qwkOpts);
}
void message_area_opts() {
char *itemList[] = {"Main AKA",
"Default Tagline",
"External Editor",
"QWK/Bluewave Options"};
int selection;
CDKSCROLL *msgAreaOpts = newCDKScroll(cdkscreen, 5, 5, RIGHT, 7, 30, "</B/32>Message Area Options<!32>", itemList, 4,FALSE, A_STANDOUT, TRUE, FALSE);
while(1) {
selection = activateCDKScroll(msgAreaOpts, 0);
if (msgAreaOpts->exitType == vESCAPE_HIT) {
break;
}
switch(selection) {
case 0:
main_aka();
break;
case 1:
default_tagline();
break;
case 2:
external_editor();
break;
case 3:
qwk_opts();
break;
default:
break;
}
}
destroyCDKScroll(msgAreaOpts);
}
void choose_sec_level(int *result, int x, int y, int selected) {
int *lvls;
int count;
int res;
int i;
int s = -1;
if (!get_valid_seclevels(&lvls, &count)) {
return;
}
char **itemlist;
itemlist = (char **)malloc(sizeof(char *) * count);
for (i=0;i<count;i++) {
itemlist[i] = (char *)malloc(sizeof(char) * 4);
snprintf(itemlist[i], 4, "%d", lvls[i]);
if (lvls[i] == selected) {
s = i;
}
}
int selection;
CDKSCROLL *secLevelOpts = newCDKScroll(cdkscreen, x, y, RIGHT, 10, 30, "</B/32>Choose Sec Level<!32>", itemlist, count,FALSE, A_STANDOUT, TRUE, FALSE);
if (s != -1) {
setCDKScrollCurrent(secLevelOpts, s);
}
while(1) {
selection = activateCDKScroll(secLevelOpts, 0);
if (secLevelOpts->exitType == vESCAPE_HIT) {
break;
}
res = (lvls[selection]);
*result = res;
}
destroyCDKScroll(secLevelOpts);
for (i=0;i<count;i++) {
free(itemlist[i]);
}
free(itemlist);
free(lvls);
}
void sec_level_opts() {
char *itemList[] = {"New User Security Level",
"AutoMessage Write Sec. Level"};
int selection;
int ret;
CDKSCROLL *secLevelOpts = newCDKScroll(cdkscreen, 5, 5, RIGHT, 5, 30, "</B/32>Default Security Levels<!32>", itemList, 2,FALSE, A_STANDOUT, TRUE, FALSE);
while(1) {
selection = activateCDKScroll(secLevelOpts, 0);
if (secLevelOpts->exitType == vESCAPE_HIT) {
break;
}
switch(selection) {
case 0:
choose_sec_level(&ret, 7, 7, conf.newuserlvl);
conf.newuserlvl = ret;
break;
case 1:
choose_sec_level(&ret, 7, 7, conf.automsgwritelvl);
conf.automsgwritelvl = ret;
break;
default:
break;
}
}
destroyCDKScroll(secLevelOpts);
}
void telnet_port(void) {
char *entrytext;
char buffer[6];
int newnum;
CDKENTRY *telnetPort = newCDKEntry(cdkscreen, 7, 7, "</B/32>Telnet Port 1025-65535<!32>", NULL, A_NORMAL, ' ', vINT, 32, 1, 5, TRUE, FALSE);
snprintf(buffer, 6, "%d", conf.telnet_port);
setCDKEntry(telnetPort, buffer, 1, 5, TRUE);
entrytext = activateCDKEntry(telnetPort, 0);
if (telnetPort->exitType == vNORMAL) {
newnum = atoi(entrytext);
if (newnum > 1024 && newnum < 65536) {
conf.telnet_port = newnum;
}
}
destroyCDKEntry(telnetPort);
}
void ssh_enabled() {
char *itemList[] = {"True",
"False"};
int selection;
int doexit = 0;
CDKSCROLL *sshEnabled = newCDKScroll(cdkscreen, 9, 9, RIGHT, 5, 30, "</B/32>Enable SSH<!32>", itemList, 2,FALSE, A_STANDOUT, TRUE, FALSE);
if (conf.ssh_server == 1) {
setCDKScrollCurrent(sshEnabled, 0);
} else {
setCDKScrollCurrent(sshEnabled, 1);
}
while(!doexit) {
selection = activateCDKScroll(sshEnabled, 0);
if (sshEnabled->exitType == vESCAPE_HIT) {
break;
}
switch(selection) {
case 0:
conf.ssh_server = 1;
doexit = 1;
break;
case 1:
conf.ssh_server = 0;
doexit = 1;
break;
default:
break;
}
}
destroyCDKScroll(sshEnabled);
}
void ssh_port(void) {
char *entrytext;
char buffer[6];
int newnum;
CDKENTRY *sshPort = newCDKEntry(cdkscreen, 9, 9, "</B/32>SSH Port 1025-65535<!32>", NULL, A_NORMAL, ' ', vINT, 32, 1, 5, TRUE, FALSE);
snprintf(buffer, 6, "%d", conf.ssh_port);
setCDKEntry(sshPort, buffer, 1, 5, TRUE);
entrytext = activateCDKEntry(sshPort, 0);
if (sshPort->exitType == vNORMAL) {
newnum = atoi(entrytext);
if (newnum > 1024 && newnum < 65536) {
conf.ssh_port = newnum;
}
}
destroyCDKEntry(sshPort);
}
void ssh_dsa_key(void) {
char *entrytext;
CDKENTRY *sshDSAKey = newCDKEntry(cdkscreen, 9, 9, "</B/32>SSH DSA Key<!32>", NULL, A_NORMAL, ' ', vMIXED, 48, 1, 1024, TRUE, FALSE);
setCDKEntry(sshDSAKey, conf.ssh_dsa_key, 1, 1024, TRUE);
entrytext = activateCDKEntry(sshDSAKey, 0);
if (sshDSAKey->exitType == vNORMAL) {
if (conf.ssh_dsa_key != NULL) {
free(conf.ssh_dsa_key);
}
conf.ssh_dsa_key = strdup(entrytext);
}
destroyCDKEntry(sshDSAKey);
}
void ssh_rsa_key(void) {
char *entrytext;
CDKENTRY *sshRSAKey = newCDKEntry(cdkscreen, 9, 9, "</B/32>SSH RSA Key<!32>", NULL, A_NORMAL, ' ', vMIXED, 48, 1, 1024, TRUE, FALSE);
setCDKEntry(sshRSAKey, conf.ssh_rsa_key, 1, 1024, TRUE);
entrytext = activateCDKEntry(sshRSAKey, 0);
if (sshRSAKey->exitType == vNORMAL) {
if (conf.ssh_rsa_key != NULL) {
free(conf.ssh_rsa_key);
}
conf.ssh_rsa_key = strdup(entrytext);
}
destroyCDKEntry(sshRSAKey);
}
void ssh_opts() {
char *itemList[] = {"SSH Enabled",
"SSH Port",
"SSH DSA Key",
"SSH RSA Key"};
int selection;
CDKSCROLL *sshOpts = newCDKScroll(cdkscreen, 7, 7, RIGHT, 7, 30, "</B/32>SSH Options<!32>", itemList, 4,FALSE, A_STANDOUT, TRUE, FALSE);
while(1) {
selection = activateCDKScroll(sshOpts, 0);
if (sshOpts->exitType == vESCAPE_HIT) {
break;
}
switch(selection) {
case 0:
ssh_enabled();
break;
case 1:
ssh_port();
break;
case 2:
ssh_dsa_key();
break;
case 3:
ssh_rsa_key();
break;
default:
break;
}
}
destroyCDKScroll(sshOpts);
}
void www_enabled() {
char *itemList[] = {"True",
"False"};
int selection;
int doexit = 0;
CDKSCROLL *wwwEnabled = newCDKScroll(cdkscreen, 9, 9, RIGHT, 5, 30, "</B/32>Enable HTTP<!32>", itemList, 2,FALSE, A_STANDOUT, TRUE, FALSE);
if (conf.www_server == 1) {
setCDKScrollCurrent(wwwEnabled, 0);
} else {
setCDKScrollCurrent(wwwEnabled, 1);
}
while(!doexit) {
selection = activateCDKScroll(wwwEnabled, 0);
if (wwwEnabled->exitType == vESCAPE_HIT) {
break;
}
switch(selection) {
case 0:
conf.www_server = 1;
doexit = 1;
break;
case 1:
conf.www_server = 0;
doexit = 1;
break;
default:
break;
}
}
destroyCDKScroll(wwwEnabled);
}
void www_port(void) {
char *entrytext;
char buffer[6];
int newnum;
CDKENTRY *wwwPort = newCDKEntry(cdkscreen, 9, 9, "</B/32>HTTP Port 1025-65535<!32>", NULL, A_NORMAL, ' ', vINT, 32, 1, 5, TRUE, FALSE);
snprintf(buffer, 6, "%d", conf.www_port);
setCDKEntry(wwwPort, buffer, 1, 5, TRUE);
entrytext = activateCDKEntry(wwwPort, 0);
if (wwwPort->exitType == vNORMAL) {
newnum = atoi(entrytext);
if (newnum > 1024 && newnum < 65536) {
conf.www_port = newnum;
}
}
destroyCDKEntry(wwwPort);
}
void www_path(void) {
char *entrytext;
CDKENTRY *wwwPath = newCDKEntry(cdkscreen, 9, 9, "</B/32>HTTP Root Path<!32>", NULL, A_NORMAL, ' ', vMIXED, 48, 1, 1024, TRUE, FALSE);
setCDKEntry(wwwPath, conf.www_path, 1, 1024, TRUE);
entrytext = activateCDKEntry(wwwPath, 0);
if (wwwPath->exitType == vNORMAL) {
if (conf.www_path != NULL) {
free(conf.www_path);
}
conf.www_path = strdup(entrytext);
}
destroyCDKEntry(wwwPath);
}
void www_opts() {
char *itemList[] = {"HTTP Enabled",
"HTTP Port",
"HTTP Root Path"};
int selection;
CDKSCROLL *wwwOpts = newCDKScroll(cdkscreen, 7, 7, RIGHT, 6, 30, "</B/32>HTTP Options<!32>", itemList, 3,FALSE, A_STANDOUT, TRUE, FALSE);
while(1) {
selection = activateCDKScroll(wwwOpts, 0);
if (wwwOpts->exitType == vESCAPE_HIT) {
break;
}
switch(selection) {
case 0:
www_enabled();
break;
case 1:
www_port();
break;
case 2:
www_path();
break;
default:
break;
}
}
destroyCDKScroll(wwwOpts);
}
void chat_server(void) {
char *entrytext;
CDKENTRY *chatServer = newCDKEntry(cdkscreen, 9, 9, "</B/32>MagiChat Server<!32>", NULL, A_NORMAL, ' ', vMIXED, 48, 0, 1024, TRUE, FALSE);
if (conf.mgchat_server != NULL) {
setCDKEntry(chatServer, conf.mgchat_server, 1, 1024, TRUE);
}
entrytext = activateCDKEntry(chatServer, 0);
if (chatServer->exitType == vNORMAL) {
if (conf.mgchat_server != NULL) {
free(conf.mgchat_server);
}
if (strlen(entrytext) > 0) {
conf.mgchat_server = strdup(entrytext);
} else {
conf.mgchat_server = NULL;
}
}
destroyCDKEntry(chatServer);
}
void chat_port(void) {
char *entrytext;
char buffer[6];
int newnum;
CDKENTRY *chatPort = newCDKEntry(cdkscreen, 9, 9, "</B/32>MagiChat Port 1025-65535<!32>", NULL, A_NORMAL, ' ', vINT, 32, 1, 5, TRUE, FALSE);
snprintf(buffer, 6, "%d", conf.mgchat_port);
setCDKEntry(chatPort, buffer, 1, 5, TRUE);
entrytext = activateCDKEntry(chatPort, 0);
if (chatPort->exitType == vNORMAL) {
newnum = atoi(entrytext);
if (newnum > 1024 && newnum < 65536) {
conf.mgchat_port = newnum;
}
}
destroyCDKEntry(chatPort);
}
void chat_bbstag(void) {
char *entrytext;
CDKENTRY *chatTag = newCDKEntry(cdkscreen, 9, 9, "</B/32>MagiChat BBS Tag<!32>", NULL, A_NORMAL, ' ', vMIXED, 32, 1, 16, TRUE, FALSE);
setCDKEntry(chatTag, conf.mgchat_bbstag, 1, 16, TRUE);
entrytext = activateCDKEntry(chatTag, 0);
if (chatTag->exitType == vNORMAL) {
if (conf.mgchat_bbstag != NULL) {
free(conf.mgchat_bbstag);
}
conf.mgchat_bbstag = strdup(entrytext);
}
destroyCDKEntry(chatTag);
}
void chat_opts() {
char *itemList[] = {"MagiChat Server",
"MagiChat Port",
"MagiChat BBS Tag"};
int selection;
CDKSCROLL *chatOpts = newCDKScroll(cdkscreen, 7, 7, RIGHT, 6, 30, "</B/32>MagiChat Options<!32>", itemList, 3,FALSE, A_STANDOUT, TRUE, FALSE);
while(1) {
selection = activateCDKScroll(chatOpts, 0);
if (chatOpts->exitType == vESCAPE_HIT) {
break;
}
switch(selection) {
case 0:
chat_server();
break;
case 1:
chat_port();
break;
case 2:
chat_bbstag();
break;
default:
break;
}
}
destroyCDKScroll(chatOpts);
}
void broadcast_enable() {
char *itemList[] = {"True",
"False"};
int selection;
int doexit = 0;
CDKSCROLL *broadcastEnabled = newCDKScroll(cdkscreen, 9, 9, RIGHT, 5, 30, "</B/32>Enable Broadcast<!32>", itemList, 2,FALSE, A_STANDOUT, TRUE, FALSE);
if (conf.broadcast_enable == 1) {
setCDKScrollCurrent(broadcastEnabled, 0);
} else {
setCDKScrollCurrent(broadcastEnabled, 1);
}
while(!doexit) {
selection = activateCDKScroll(broadcastEnabled, 0);
if (broadcastEnabled->exitType == vESCAPE_HIT) {
break;
}
switch(selection) {
case 0:
conf.broadcast_enable = 1;
doexit = 1;
break;
case 1:
conf.broadcast_enable = 0;
doexit = 1;
break;
default:
break;
}
}
destroyCDKScroll(broadcastEnabled);
}
void broadcast_port(void) {
char *entrytext;
char buffer[6];
int newnum;
CDKENTRY *broadcastPort = newCDKEntry(cdkscreen, 9, 9, "</B/32>Broadcast Port 1025-65535<!32>", NULL, A_NORMAL, ' ', vINT, 32, 1, 5, TRUE, FALSE);
snprintf(buffer, 6, "%d", conf.broadcast_port);
setCDKEntry(broadcastPort, buffer, 1, 5, TRUE);
entrytext = activateCDKEntry(broadcastPort, 0);
if (broadcastPort->exitType == vNORMAL) {
newnum = atoi(entrytext);
if (newnum > 1024 && newnum < 65536) {
conf.broadcast_port = newnum;
}
}
destroyCDKEntry(broadcastPort);
}
void broadcast_address(void) {
char *entrytext;
CDKENTRY *broadcastAddr = newCDKEntry(cdkscreen, 9, 9, "</B/32>Broadcast Address<!32>", NULL, A_NORMAL, ' ', vMIXED, 48, 1, 1024, TRUE, FALSE);
setCDKEntry(broadcastAddr, conf.broadcast_address, 1, 1024, TRUE);
entrytext = activateCDKEntry(broadcastAddr, 0);
if (broadcastAddr->exitType == vNORMAL) {
if (conf.broadcast_address != NULL) {
free(conf.broadcast_address);
}
conf.broadcast_address = strdup(entrytext);
}
destroyCDKEntry(broadcastAddr);
}
void broadcast_opts() {
char *itemList[] = {"Broadcast Enable",
"Broadcast Port",
"Broadcast Address"};
int selection;
CDKSCROLL *broadcastOpts = newCDKScroll(cdkscreen, 7, 7, RIGHT, 6, 30, "</B/32>Broadcast Options<!32>", itemList, 3,FALSE, A_STANDOUT, TRUE, FALSE);
while(1) {
selection = activateCDKScroll(broadcastOpts, 0);
if (broadcastOpts->exitType == vESCAPE_HIT) {
break;
}
switch(selection) {
case 0:
broadcast_enable();
break;
case 1:
broadcast_port();
break;
case 2:
broadcast_address();
break;
default:
break;
}
}
destroyCDKScroll(broadcastOpts);
}
void ipguard_enable() {
char *itemList[] = {"True",
"False"};
int selection;
int doexit = 0;
CDKSCROLL *ipguardEnabled = newCDKScroll(cdkscreen, 9, 9, RIGHT, 5, 30, "</B/32>Enable IPGuard<!32>", itemList, 2,FALSE, A_STANDOUT, TRUE, FALSE);
if (conf.ipguard_enable == 1) {
setCDKScrollCurrent(ipguardEnabled, 0);
} else {
setCDKScrollCurrent(ipguardEnabled, 1);
}
while(!doexit) {
selection = activateCDKScroll(ipguardEnabled, 0);
if (ipguardEnabled->exitType == vESCAPE_HIT) {
break;
}
switch(selection) {
case 0:
conf.ipguard_enable = 1;
doexit = 1;
break;
case 1:
conf.ipguard_enable = 0;
doexit = 1;
break;
default:
break;
}
}
destroyCDKScroll(ipguardEnabled);
}
void ipguard_timeout(void) {
char *entrytext;
char buffer[6];
int newnum;
CDKENTRY *ipguardTimeout = newCDKEntry(cdkscreen, 9, 9, "</B/32>IP Guard Timeout<!32>", NULL, A_NORMAL, ' ', vINT, 32, 1, 5, TRUE, FALSE);
snprintf(buffer, 6, "%d", conf.ipguard_timeout);
setCDKEntry(ipguardTimeout, buffer, 1, 5, TRUE);
entrytext = activateCDKEntry(ipguardTimeout, 0);
if (ipguardTimeout->exitType == vNORMAL) {
newnum = atoi(entrytext);
if (newnum > 1024 && newnum < 65536) {
conf.ipguard_timeout = newnum;
}
}
destroyCDKEntry(ipguardTimeout);
}
void ipguard_tries(void) {
char *entrytext;
char buffer[6];
int newnum;
CDKENTRY *ipguardTries = newCDKEntry(cdkscreen, 9, 9, "</B/32>IP Guard Tries<!32>", NULL, A_NORMAL, ' ', vINT, 32, 1, 5, TRUE, FALSE);
snprintf(buffer, 6, "%d", conf.ipguard_tries);
setCDKEntry(ipguardTries, buffer, 1, 5, TRUE);
entrytext = activateCDKEntry(ipguardTries, 0);
if (ipguardTries->exitType == vNORMAL) {
newnum = atoi(entrytext);
if (newnum > 1024 && newnum < 65536) {
conf.ipguard_tries = newnum;
}
}
destroyCDKEntry(ipguardTries);
}
void ipguard_opts() {
char *itemList[] = {"IPGuard Enable",
"IPGuard Timeout",
"IPGuard Tries"};
int selection;
CDKSCROLL *ipGuardOpts = newCDKScroll(cdkscreen, 7, 7, RIGHT, 6, 30, "</B/32>IPGuard Options<!32>", itemList, 3,FALSE, A_STANDOUT, TRUE, FALSE);
while(1) {
selection = activateCDKScroll(ipGuardOpts, 0);
if (ipGuardOpts->exitType == vESCAPE_HIT) {
break;
}
switch(selection) {
case 0:
ipguard_enable();
break;
case 1:
ipguard_timeout();
break;
case 2:
ipguard_tries();
break;
default:
break;
}
}
destroyCDKScroll(ipGuardOpts);
}
void fork_enable() {
char *itemList[] = {"True",
"False"};
int selection;
int doexit = 0;
CDKSCROLL *forkEnabled = newCDKScroll(cdkscreen, 9, 9, RIGHT, 5, 30, "</B/32>Fork to Background<!32>", itemList, 2,FALSE, A_STANDOUT, TRUE, FALSE);
if (conf.fork == 1) {
setCDKScrollCurrent(forkEnabled, 0);
} else {
setCDKScrollCurrent(forkEnabled, 1);
}
while(!doexit) {
selection = activateCDKScroll(forkEnabled, 0);
if (forkEnabled->exitType == vESCAPE_HIT) {
break;
}
switch(selection) {
case 0:
conf.fork = 1;
doexit = 1;
break;
case 1:
conf.fork = 0;
doexit = 1;
break;
default:
break;
}
}
destroyCDKScroll(forkEnabled);
}
void misc_opts() {
char *itemList[] = {"Fork"};
int selection;
CDKSCROLL *miscOpts = newCDKScroll(cdkscreen, 7, 7, RIGHT, 4, 30, "</B/32>Misc Options<!32>", itemList, 1,FALSE, A_STANDOUT, TRUE, FALSE);
while(1) {
selection = activateCDKScroll(miscOpts, 0);
if (miscOpts->exitType == vESCAPE_HIT) {
break;
}
switch(selection) {
case 0:
fork_enable();
break;
default:
break;
}
}
destroyCDKScroll(miscOpts);
}
void server_opts() {
char *itemList[] = {"Telnet Port",
"SSH Options",
"HTTP Options",
"MagiChat Options",
"Broadcast Options",
"IP Guard Options",
"Misc Options"};
int selection;
CDKSCROLL *svrOpts = newCDKScroll(cdkscreen, 5, 5, RIGHT, 10, 30, "</B/32>Server/Port Options<!32>", itemList, 7,FALSE, A_STANDOUT, TRUE, FALSE);
while(1) {
selection = activateCDKScroll(svrOpts, 0);
if (svrOpts->exitType == vESCAPE_HIT) {
break;
}
switch(selection) {
case 0:
telnet_port();
break;
case 1:
ssh_opts();
break;
case 2:
www_opts();
break;
case 3:
chat_opts();
break;
case 4:
broadcast_opts();
break;
case 5:
ipguard_opts();
break;
case 6:
misc_opts();
break;
default:
break;
}
}
destroyCDKScroll(svrOpts);
}
void system_config(void) { void system_config(void) {
char *itemList[] = {"BBS Name", char *itemList[] = {"BBS Name",
"Sysop Name", "Sysop Name",
"Number of Nodes", "Number of Nodes",
"MagiChat",
"Message Area Options", "Message Area Options",
"Auto Message Write Level", "Default Security Levels",
"Servers and Ports" "Servers and Ports"
}; };
int selection; int selection;
CDKSCROLL *sysConfigItemList = newCDKScroll(cdkscreen, 3, 3, RIGHT, 10, 30, "</B/32>System Config<!32>", itemList, 7,FALSE, A_STANDOUT, TRUE, FALSE); CDKSCROLL *sysConfigItemList = newCDKScroll(cdkscreen, 3, 3, RIGHT, 9, 30, "</B/32>System Config<!32>", itemList, 6,FALSE, A_STANDOUT, TRUE, FALSE);
while (1) { while (1) {
selection = activateCDKScroll(sysConfigItemList, 0); selection = activateCDKScroll(sysConfigItemList, 0);
@ -64,6 +1016,18 @@ void system_config(void) {
case 1: case 1:
sysop_name(); sysop_name();
break; break;
case 2:
number_of_nodes();
break;
case 3:
message_area_opts();
break;
case 4:
sec_level_opts();
break;
case 5:
server_opts();
break;
default: default:
break; break;
} }