203 lines
5.6 KiB
C++
203 lines
5.6 KiB
C++
#include "ausreg-cd.h"
|
|
|
|
int is_numeric(const char *p) { int i = strlen(p),j=0;
|
|
if (*p) {
|
|
char c;
|
|
while ((c=*p++)) { j++;
|
|
if (!isdigit(c)) {
|
|
if (j == i) return 2;
|
|
else return 0;
|
|
}
|
|
}
|
|
return 1;
|
|
}
|
|
return 0;
|
|
}
|
|
void mdCommander::driver() {
|
|
|
|
bool rc;
|
|
char instrinsic[16],next,rawString[4096],work[4096];
|
|
const char *mdErrCode = "";
|
|
int i,commandLength;
|
|
|
|
greet();
|
|
while(acceptingInput) {
|
|
putchar('>');
|
|
next=0;
|
|
i=0;
|
|
memset(rawString,0,sizeof(rawString));
|
|
while(next != '\012') {
|
|
next = getchar();
|
|
rawString[i++] = next;
|
|
if (i > (sizeof(rawString) - 1)) {
|
|
puts("Max length exceeded!");
|
|
continue;
|
|
}
|
|
}
|
|
if (!strlen(rawString)) continue;
|
|
if (strlen(rawString) == 2) {
|
|
switch(rawString[0]) {
|
|
case '?': help();
|
|
break;
|
|
case 'e': eppMainMenu();
|
|
break;
|
|
case '!': sendCommand();
|
|
break;
|
|
case 'X': flushCommand();
|
|
break;
|
|
case 'a': acMainMenu();
|
|
break;
|
|
case 'c': check();
|
|
break;
|
|
case 'i': info();
|
|
break;
|
|
case 't': transferCheck();
|
|
break;
|
|
case 'C': create();
|
|
break;
|
|
case 'R': renew();
|
|
break;
|
|
case 'U': update();
|
|
break;
|
|
case 'D': trash();
|
|
break;
|
|
case 'T': transfer();
|
|
break;
|
|
}
|
|
continue;
|
|
}
|
|
if (strlen(rawString) == 3) {
|
|
if (!strcmp(rawString,"??")) {
|
|
showCommand();
|
|
continue;
|
|
}
|
|
}
|
|
if (is_numeric(rawString) == 2) {
|
|
rawString[strlen(rawString)] = 0;
|
|
mdStdDevIdx = atoi(rawString);
|
|
continue;
|
|
}
|
|
if (strlen(rawString) >= 4 && strlen(rawString) <= 6 )
|
|
{if (!strcmp(rawString,"log\n")) {
|
|
system("less /tmp/ausreg-cd.log");
|
|
continue;
|
|
}
|
|
if (!strcmp(rawString,"done\n")) {
|
|
return;
|
|
}
|
|
if (!strcmp(rawString,"mdapi\n")) {
|
|
system("mdclient ");
|
|
continue;
|
|
}
|
|
if (!strcmp(rawString,"quit\n")) {
|
|
thisConfig->terminateRequest = true;
|
|
return;
|
|
}
|
|
if (!strcmp(rawString,"mdapi\n")) {
|
|
continue;
|
|
}
|
|
if (strlen(rawString) < 3) {
|
|
puts("That SCPI command is too short!");
|
|
continue;
|
|
}
|
|
rc = epp(rawString);
|
|
if (!rc) puts("Command transmitted: OK.");
|
|
else printf("Command result: %s.",mdErrCode);
|
|
continue;
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
void mdCommander::greet() {
|
|
|
|
puts(" AC Commander ");
|
|
puts("Enter ? for help or an AC command");
|
|
acceptingInput = true;
|
|
EPPmode = true;
|
|
currentDevice = std::string("ALX");
|
|
|
|
}
|
|
void mdCommander::help() {
|
|
|
|
const char *banner = "\n" CD_NAME " " CD_VERSION " compiled on " __DATE__ " @ " __TIME__ " (%d)\n\n";
|
|
|
|
system("clear");
|
|
printf(banner,thisConfig->shellProcess);
|
|
printf(" target acEPPDevIdx-> %d this acEPPDevIdx: %d \n\n",0,mdStdDevIdx);
|
|
puts(" ? - display this screen");
|
|
puts(" ! - send the pending command");
|
|
puts(" ?? - display the pending command");
|
|
puts(" X - discard the pending command");
|
|
puts(" <n> - make <n> (an integer) the target acEPPDevIdx");
|
|
puts(" done - terminate this command loop but not ausreg-cd");
|
|
puts(" e - standard EPP command menu");
|
|
puts(" a - AC system control menu");
|
|
puts(" log - display this cliever's log");
|
|
puts(" rlog - pull and display the master daemon log");
|
|
puts(" quit - terminate this process tree\n\n");
|
|
puts("Any command valid outside command data loop(>>).");
|
|
|
|
}
|
|
void mdCommander::eppMainMenu() {
|
|
|
|
const char *banner = "\n" CD_NAME " " CD_VERSION " compiled on " __DATE__ " @ " __TIME__ " (%d)\n\n";
|
|
|
|
system("clear");
|
|
printf(banner,thisConfig->shellProcess);
|
|
printf(" target acEPPDevIdx-> %d this acEPPDevIdx: %d \n\n",0,mdStdDevIdx);
|
|
puts(" Queries \n");
|
|
puts(" c - check");
|
|
puts(" i - info");
|
|
puts(" t - transfer\n");
|
|
puts(" Commands \n");
|
|
puts(" C - create");
|
|
puts(" R - renew");
|
|
puts(" U - update\n");
|
|
puts(" D - delete");
|
|
puts(" T - transfer");
|
|
|
|
}
|
|
void mdCommander::acMainMenu() {
|
|
|
|
const char *banner = "\n" CD_NAME " " CD_VERSION " compiled on " __DATE__ " @ " __TIME__ " (%d)\n\n";
|
|
|
|
system("clear");
|
|
printf(banner,thisConfig->shellProcess);
|
|
printf(" target acEPPDevIdx-> %d this acEPPDevIdx: %d \n\n",0,mdStdDevIdx);
|
|
puts(" Directives \n\n");
|
|
puts(" RST - followed by quit resets entire AC system");
|
|
|
|
}
|
|
bool mdCommander::epp(char *cmd) {
|
|
|
|
char *command,work[256];
|
|
bool isDirect=false,rc=true;
|
|
|
|
if (!mdStdDevIdx && !strncmp(cmd,"RST",3)) {
|
|
|
|
mdDG mdg;
|
|
|
|
mdg.dg.hdr.sourceHandle = thisCliever->myHandle;
|
|
mdg.dg.hdr.payloadSize = 0;
|
|
mdg.dg.hdr.msgType = MDDG_CDRESET;
|
|
if (thisCliever->fg->send(mdg.dg)) rc = false;
|
|
|
|
}
|
|
|
|
return rc;
|
|
|
|
}
|
|
void mdCommander::check(){};
|
|
void mdCommander::create(){};
|
|
void mdCommander::flushCommand(){};
|
|
void mdCommander::info(){};
|
|
void mdCommander::renew(){};
|
|
void mdCommander::sendCommand(){};
|
|
void mdCommander::showCommand(){};
|
|
void mdCommander::trash(){};
|
|
void mdCommander::transfer(){};
|
|
void mdCommander::transferCheck(){};
|
|
void mdCommander::update(){};
|
|
|