home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
rtsi.com
/
2014.01.www.rtsi.com.tar
/
www.rtsi.com
/
OS9
/
OSK
/
TELECOM
/
stg_v4.lzh
/
stg_net.c
< prev
next >
Wrap
C/C++ Source or Header
|
1994-11-11
|
16KB
|
786 lines
#define TREVNICK
#ifdef _OSK
#include <module.h>
#endif
#include "stgnet.h"
#include "db9.h"
#include "key.h"
#include "nodes.h"
#include "node.h"
char *apcMsg[]=
{
"",
"StG-Net System Configuration",
"============================",
"",
"If you have not done so already, please register",
"your system name with StG-Net administration and",
"obtain a Network Password. If the administrator",
"for your area is not listed in the documentation",
"please contact the sales office where you bought",
"this package.",
"",
"You must have a valid registered system name and",
"password to complete this installation. This is",
"necessary to connect with other systems.",
"",
0
};
int hSTG;
int hSeek;
#ifdef _OSK
mod_dev *psStG;
mod_dev *modlink();
mod_dev *modloadp();
mod_dev *make_module();
/* mod_dev *psDesc; */
#endif
char acPass[32];
char acName[32];
struct sNODE sNODE;
struct sFld_Block sFld;
char acO_ALPHANUM[]={FO_ALPHA,FO_NUM,0};
char acO_NUM[]={FO_NUM,0}; /* no right */
extern int _edtchg;
struct sNode sNode;
get_stg()
{
int cKey;
char **ppcList;
int iCheck;
ppcList=apcMsg;
while (*ppcList)
{
strcpy(b,*ppcList++);
strcat(b,"\n");
writeln(1,b,80);
}
bad_entry:
sFld.oFld_Len=20;
sFld.cFld_Type=FT_ASCII;
strcpy(sFld.acFld_Opts,acO_ALPHANUM);
strcat(sFld.acFld_Opts,"'_");
strcpy(sFld.acFld_Mask,"Enter System Name : ________");
#ifdef _UNIX
gethostname(acName,sFld.oFld_Len);
#endif
edt_name:
cKey=_Edt(&sFld,acName);
if (cKey==KY_ESC)
{
_Dsp(0,0);
return(ERR);
}
if (cKey!=KY_ENTER)
goto edt_name;
_Dsp(0,0);
if (!*acName)
return(ERR);
writeln(1,"\n",1);
sFld.oFld_Len=14;
sFld.cFld_Type=FT_ASCII;
strcpy(sFld.acFld_Opts,acO_NUM);
strcpy(sFld.acFld_Mask,"Enter Net Password: ______________");
edt_pass:
cKey=_Edt(&sFld,acPass);
if (cKey==KY_ESC)
{
_Dsp(0,0);
return(ERR);
}
if (cKey!=KY_ENTER)
goto edt_pass;
_Dsp(0,0);
if (!*acPass)
return(ERR);
if (strlen(acPass)!=14)
goto edt_pass;
writeln(1,"\n",1);
memset(&sNODE,0,sizeof(sNODE));
strncpy(sNODE.acPass,acPass,10);
strcpy(sNODE.acName,acName);
iCheck=-1;
crc(sNODE.acName,strlen(sNODE.acName),&iCheck);
crc(sNODE.acPass,strlen(sNODE.acPass),&iCheck);
iCheck=~iCheck;
iCheck&=0x00FFFFFF;
iCheck=iCheck%10000;
if (iCheck!=atoi(acPass+10))
{
writeln(1,"\n",1);
writeln(1,"ERROR IN ENTRY - PLEASE CHECK YOUR SYS NAME AND PASSWORD AND TRY AGAIN\n",80);
writeln(1,"\n",1);
goto bad_entry;
}
set_node(&sNODE);
}
editnode(psNode)
struct sNode *psNode;
{
int cKey;
int i;
char *p;
int n;
stringf(b,"Parameters for node %s:\n",psNode->acN_Name);
writeln(1,b,80);
writeln(1,"\n",1);
writeln(1,"Status codes: 0 = Permantly Dead\n",80);
writeln(1," 1 = Online & accepting new users\n",80);
writeln(1," 2 = Online but restricted access (semi-private)\n",80);
writeln(1," 3 = No dial-in (private system/offline reader)\n",80);
writeln(1," 4 = Temporarily down (mail will be held)\n",80);
writeln(1,"\n",1);
sFld.oFld_Len=1;
sFld.cFld_Type=FT_UINT;
strcpy(sFld.acFld_Opts,acO_NUM);
strcpy(sFld.acFld_Mask,"System Status: _");
cKey=0;
while (cKey!=KY_ENTER)
{
cKey=_Edt(&sFld,&(psNode->bN_Status));
if (cKey==KY_ESC) goto escape;
}
if (_edtchg) psNode->bN_Update|=NU_STATUS;
_Dsp(0,0);
writeln(1,"\n",1);
#ifdef TREVNICK
writeln(1,"Machine Codes: 1=OSK, 2=OS9K, 3=6809, 4=Unix\n",80);
writeln(1," 5=MSDOS, 6=MSWIN, 7=WIN-NT, 8=OS/2\n",80);
sFld.oFld_Len=1;
sFld.cFld_Type=FT_UINT;
strcpy(sFld.acFld_Opts,acO_NUM);
strcpy(sFld.acFld_Mask,"Machine Type : ___");
cKey=0;
while (cKey!=KY_ENTER)
{
cKey=_Edt(&sFld,&(psNode->bN_MType));
if (cKey==KY_ESC) goto escape;
} if (_edtchg) psNode->bN_Update|=NU_STATUS;
_Dsp(0,0);
writeln(1,"\n",1);
#else
i=0;
#ifdef _OSK
i=MT_OSK;
#endif
#ifdef _OS9000
i=MT_OS9K;
#endif
#ifdef _6809
i=MT_6809;
#endif
#ifdef _UNIX
i=MT_UNIX;
#endif
#ifdef _MSDOS
i=MT_MSDOS;
#endif
#ifdef _MSWIN
i=MT_MSWIN;
#endif
if (psNode->bN_MType!=i)
{
psNode->bN_MType=i;
psNode->bN_Update|=NU_STATUS;
}
#endif
writeln(1,"\n",1);
if (psNode->bN_Status==NS_NONE)
writeln(1,"Phone, ISDN, and INET address will not be shown to the public.\n",80);
sFld.oFld_Len=11;
sFld.cFld_Type=FT_ASCII;
strcpy(sFld.acFld_Opts,acO_NUM);
strcpy(sFld.acFld_Mask,"Phone Number : ___-___-____ (leave blank if no modem access)");
cKey=0;
while (cKey!=KY_ENTER)
{
cKey=_Edt(&sFld,psNode->acN_Phone);
if (cKey==KY_ESC) goto escape;
} if (_edtchg) psNode->bN_Update|=NU_PHONE;
_Dsp(0,0);
writeln(1,"\n",1);
if (!*psNode->acN_Phone) goto skip_baud;
sFld.oFld_Len=2;
sFld.cFld_Type=FT_UINT;
*sFld.acFld_Opts=0;
strcpy(sFld.acFld_Mask,"Highest Baud : ____00");
cKey=0;
while (cKey!=KY_ENTER)
{
cKey=_Edt(&sFld,&(psNode->wN_Speed));
if (cKey==KY_ESC) goto escape;
} if (_edtchg) psNode->bN_Update|=NU_PHONE;
_Dsp(0,0);
writeln(1,"\n",1);
skip_baud:
sFld.oFld_Len=11;
sFld.cFld_Type=FT_ASCII;
strcpy(sFld.acFld_Opts,acO_NUM);
strcpy(sFld.acFld_Mask,"ISDN Address : ___-___-____ (leave blank if no ISDN access)");
cKey=0;
while (cKey!=KY_ENTER)
{
cKey=_Edt(&sFld,psNode->acN_ISDN);
if (cKey==KY_ESC) goto escape;
} if (_edtchg) psNode->bN_Update|=NU_PHONE;
_Dsp(0,0);
writeln(1,"\n",1);
sFld.oFld_Len=4;
sFld.cFld_Type=FT_INET;
strcpy(sFld.acFld_Opts,acO_NUM);
strcpy(sFld.acFld_Mask,"INET Address : ___.___.___.___ (leave zero if no Internet access)");
cKey=0;
while (cKey!=KY_ENTER)
{
cKey=_Edt(&sFld,psNode->abN_INET);
if (cKey==KY_ESC) goto escape;
} if (_edtchg) psNode->bN_Update|=NU_PHONE;
_Dsp(0,0);
writeln(1,"\n",1);
writeln(1,"\n",1);
writeln(1," Time Zone UTC Offset Daylight Savings\n",80);
writeln(1," -------------------------- ---------- ----------------\n",80);
writeln(1," Eastern Standard Time -5 -4\n",80);
writeln(1," Central Standard Time -6 -5\n",80);
writeln(1," Mountain Standard Time -7 -6\n",80);
writeln(1," Pacific Standard Time -8 -7\n",80);
writeln(1,"\n",1);
sFld.oFld_Len=1;
sFld.cFld_Type=FT_SINT;
*sFld.acFld_Opts=0;
strcpy(sFld.acFld_Mask,"Time Zone : ____ (offset from UTC/GMT)");
cKey=0;
while (cKey!=KY_ENTER)
{
cKey=_Edt(&sFld,&psNode->cN_UTC);
if (cKey==KY_ESC) goto escape;
} if (_edtchg) psNode->bN_Update|=NU_TIME;
_Dsp(0,0);
writeln(1,"\n",1);
sFld.oFld_Len=2;
sFld.cFld_Type=FT_DATE;
strcpy(sFld.acFld_Opts,acO_NUM);
strcpy(sFld.acFld_Mask,"Weekday Hours: __:00 - __:00 (0=24 hrs)");
cKey=0;
while (cKey!=KY_ENTER)
{
cKey=_Edt(&sFld,psNode->abN_WkdHrs);
if (cKey==KY_ESC) goto escape;
} if (_edtchg) psNode->bN_Update|=NU_TIME;
_Dsp(0,0);
writeln(1,"\n",1);
strcpy(sFld.acFld_Mask,"Weekend Hours: __:00 - __:00 (0=24 hrs)");
cKey=0;
while (cKey!=KY_ENTER)
{
cKey=_Edt(&sFld,psNode->abN_WkeHrs);
if (cKey==KY_ESC) goto escape;
} if (_edtchg) psNode->bN_Update|=NU_TIME;
_Dsp(0,0);
writeln(1,"\n",1);
strcpy(sFld.acFld_Mask,"Network Hours: __:00 - __:00 (0=24 hrs)");
cKey=0;
while (cKey!=KY_ENTER)
{
cKey=_Edt(&sFld,psNode->abN_NetHrs);
if (cKey==KY_ESC) goto escape;
} if (_edtchg) psNode->bN_Update|=NU_TIME;
_Dsp(0,0);
writeln(1,"\n",1);
sFld.oFld_Len=28;
sFld.cFld_Type=FT_ASCII;
*sFld.acFld_Opts=0;
strcpy(sFld.acFld_Mask,"Description : _______________________________");
cKey=0;
while (cKey!=KY_ENTER)
{
cKey=_Edt(&sFld,psNode->acN_Desc);
if (cKey==KY_ESC) goto escape;
} if (_edtchg) psNode->bN_Update|=NU_DESC;
_Dsp(0,0);
writeln(1,"\n",1);
sFld.oFld_Len=24;
sFld.cFld_Type=FT_ASCII;
*sFld.acFld_Opts=0;
strcpy(sFld.acFld_Mask,"Sysop Name : _______________________");
cKey=0;
while (cKey!=KY_ENTER)
{
cKey=_Edt(&sFld,psNode->acN_Sysop);
if (cKey==KY_ESC) goto escape;
} if (_edtchg) psNode->bN_Update|=NU_OPER;
_Dsp(0,0);
writeln(1,"\n",1);
sFld.oFld_Len=32;
sFld.cFld_Type=FT_ASCII;
*sFld.acFld_Opts=0;
strcpy(sFld.acFld_Mask,"Node Address : ________________________________");
cKey=0;
while (cKey!=KY_ENTER)
{
cKey=_Edt(&sFld,psNode->acN_Addr);
if (cKey==KY_ESC) goto escape;
} if (_edtchg) psNode->bN_Update|=NU_ADDR;
_Dsp(0,0);
writeln(1,"\n",1);
sFld.oFld_Len=24;
sFld.cFld_Type=FT_ASCII;
*sFld.acFld_Opts=0;
strcpy(sFld.acFld_Mask," City : _______________________");
cKey=0;
while (cKey!=KY_ENTER)
{
cKey=_Edt(&sFld,psNode->acN_City);
if (cKey==KY_ESC) goto escape;
} if (_edtchg) psNode->bN_Update|=NU_ADDR;
_Dsp(0,0);
writeln(1,"\n",1);
sFld.oFld_Len=24;
sFld.cFld_Type=FT_ASCII;
*sFld.acFld_Opts=0;
strcpy(sFld.acFld_Mask," State : _______________________");
cKey=0;
while (cKey!=KY_ENTER)
{
cKey=_Edt(&sFld,psNode->acN_State);
if (cKey==KY_ESC) goto escape;
} if (_edtchg) psNode->bN_Update|=NU_ADDR;
_Dsp(0,0);
writeln(1,"\n",1);
sFld.oFld_Len=16;
sFld.cFld_Type=FT_ASCII;
*sFld.acFld_Opts=0;
strcpy(sFld.acFld_Mask," Zip : _______________");
cKey=0;
while (cKey!=KY_ENTER)
{
cKey=_Edt(&sFld,psNode->acN_Zip);
if (cKey==KY_ESC) goto escape;
} if (_edtchg) psNode->bN_Update|=NU_ADDR;
_Dsp(0,0);
writeln(1,"\n",1);
if (!*psNode->acN_Country)
strcpy(psNode->acN_Country,"USA");
sFld.oFld_Len=24;
sFld.cFld_Type=FT_ASCII;
*sFld.acFld_Opts=0;
strcpy(sFld.acFld_Mask," Country : _______________________");
cKey=0;
while (cKey!=KY_ENTER)
{
cKey=_Edt(&sFld,psNode->acN_Country);
if (cKey==KY_ESC) goto escape;
} if (_edtchg) psNode->bN_Update|=NU_ADDR;
_Dsp(0,0);
writeln(1,"\n",1);
sFld.oFld_Len=11;
sFld.cFld_Type=FT_ASCII;
strcpy(sFld.acFld_Opts,acO_NUM);
strcpy(sFld.acFld_Mask,"Sysop's Phone: ___-___-____");
cKey=0;
while (cKey!=KY_ENTER)
{
cKey=_Edt(&sFld,psNode->acN_SPhone);
if (cKey==KY_ESC) goto escape;
} if (_edtchg) psNode->bN_Update|=NU_OPER;
_Dsp(0,0);
writeln(1,"\n",1);
i=0;
while (i<4)
{
writeln(1,"\n",1);
stringf(b,"Network feed selection #%d:\n",i+1);
writeln(1,b,80);
sFld.oFld_Len=28;
sFld.cFld_Type=FT_ASCII;
*sFld.acFld_Opts=0;
strcpy(sFld.acFld_Mask,"Node Name : ________________");
renode:
cKey=0;
while (cKey!=KY_ENTER)
{
cKey=_Edt(&sFld,psNode->asNode2[i].acN2_Name);
if (cKey==KY_ESC) goto escape;
} p=psNode->asNode2[i].acN2_Name;
if (*p)
{
n=_db9(DB_SEEK,hSeek,p,strlen(p)+1);
if (n==ERR)
exit(syserr("DB9 seek %s: %m",p));
if (!n)
{
write(1,"\7",1);
goto renode;
}
}
if (_edtchg) psNode->bN_Update|=NU_ROUTE;
_Dsp(0,0);
writeln(1,"\n",1);
if (!*psNode->asNode2[i].acN2_Name)
{
psNode->asNode2[i].bN2_MaxAge=0;
psNode->asNode2[i].bN2_MinAge=0;
psNode->asNode2[i].bN2_MaxSize=0;
psNode->asNode2[i].bN2_MaxSize=0;
i++;
continue;
}
sFld.oFld_Len=1;
sFld.cFld_Type=FT_UINT;
*sFld.acFld_Opts=0;
strcpy(sFld.acFld_Mask,"Maximum Age : ___ hours (0=immediate, 72 or less recomended)");
cKey=0;
while (cKey!=KY_ENTER)
{
cKey=_Edt(&sFld,&(psNode->asNode2[i].bN2_MaxAge));
if (cKey==KY_ESC) goto escape;
} if (_edtchg) psNode->bN_Update|=NU_ROUTE;
_Dsp(0,0);
writeln(1,"\n",1);
sFld.oFld_Len=1;
sFld.cFld_Type=FT_UINT;
*sFld.acFld_Opts=0;
strcpy(sFld.acFld_Mask,"Minimum Age : ___ hours (0=no minimum)");
cKey=0;
while (cKey!=KY_ENTER)
{
cKey=_Edt(&sFld,&(psNode->asNode2[i].bN2_MinAge));
if (cKey==KY_ESC) goto escape;
} if (_edtchg) psNode->bN_Update|=NU_ROUTE;
_Dsp(0,0);
writeln(1,"\n",1);
sFld.oFld_Len=1;
sFld.cFld_Type=FT_UINT;
*sFld.acFld_Opts=0;
strcpy(sFld.acFld_Mask,"Maximum Size : ___ K bytes (0=no maximum)");
cKey=0;
while (cKey!=KY_ENTER)
{
cKey=_Edt(&sFld,&(psNode->asNode2[i].bN2_MaxSize));
if (cKey==KY_ESC) goto escape;
} if (_edtchg) psNode->bN_Update|=NU_ROUTE;
_Dsp(0,0);
writeln(1,"\n",1);
sFld.oFld_Len=1;
sFld.cFld_Type=FT_UINT;
*sFld.acFld_Opts=0;
strcpy(sFld.acFld_Mask,"Minimum Size : ___ K bytes (0=no minimum)");
cKey=0;
while (cKey!=KY_ENTER)
{
cKey=_Edt(&sFld,&(psNode->asNode2[i].bN2_MinSize));
if (cKey==KY_ESC) goto escape;
} if (_edtchg) psNode->bN_Update|=NU_ROUTE;
_Dsp(0,0);
writeln(1,"\n",1);
i++;
}
return;
escape:
_Dsp(0,0);
wstringf(2,"\nUpdate cancelled\n");
exit(1);
}
void
checknet(pcName,iUpdate)
char *pcName;
int iUpdate;
{
int iFound;
if (_db9(DB_OPEN,hSTG,"nodes",6)==ERR)
exit(errno);
if (_db9(DB_MATCH,hSTG,-1,0)==ERR)
exit(errno);
iFound=_db9(DB_SEEK,hSTG,pcName,strlen(pcName)+1);
if (iFound==ERR)
exit(errno);
if (iFound)
{
if (_db9(DB_READ,hSTG,&sNode,sizeof(sNode))==ERR)
exit(errno);
}
else
{
memset(&sNode,0,sizeof(sNode));
strcpy(sNode.acN_Name,pcName);
sNode.bN_Update=-1;
iUpdate=3;
}
if (!iUpdate)
return;
if (iUpdate&1)
editnode(&sNode);
if (iUpdate&2)
;
if (iFound)
{
if (_db9(DB_WRITE,hSTG,&sNode,sizeof(sNode))==ERR)
exit(errno);
}
else
{
if (_db9(DB_ADD,hSTG,&sNode,sizeof(sNode))==ERR)
exit(errno);
}
}
main(argc,argv)
char **argv;
{
int hFile;
int iUpdate=0;
int iBoot=0;
char *args[3];
openerr(*argv,0,LOG_STGNET);
dash(argv)
{
case '#':
wstringf(2,"stg_net: %s\n",STG_VER);
exit(0);
case '?':
writeln(2,"stg_net {-bsu} - initialize/update StG-Net\n",80);
writeln(2,"\n");
writeln(2," -b - boot the network\n",80);
writeln(2," -s - shutdown the network\n",80);
writeln(2," -u - update system configuration\n",80);
STGVER;
exit(0);
case 'b':
iBoot=1;
break;
case 's':
writeln(2,"shutdown option has not been implimented yet\n",80);
exit(1);
case 'u':
iUpdate|=1;
break;
default:
stringf(b,"stg_net: invalid option: %s\n",--*argv);
writeln(2,b,80);
exit(1);
}
if (sizeof(sNode)!=508)
exit(syserr("node structure is %d",sizeof(sNode)));
/*
if (_Trm(getenv("TERM"))==ERR)
exit(errno);
if (!_Trm_CM || !_Trm_CO || !_Trm_LI)
exit(DE_TERMNC);
*/
hSTG=open(STG_FILE,O_RDWR);
if (hSTG==ERR)
exit(syserr("open %s: %m",STG_FILE));
hSeek=open(STG_FILE,O_RDONLY);
if (hSeek==ERR)
exit(syserr("open %s: %m",STG_FILE));
if (_db9(DB_OPEN,hSeek,"nodes",6)==ERR)
exit(syserr("DB9 open nodes: %m"));
/* select case insensitive seek */
if (_db9(DB_MATCH,hSeek,-1,0)==ERR)
exit(syserr("DB9 match c-i: %m"));
/* get node info */
if (!get_node(&sNODE))
{
if (get_stg()==ERR)
{
writeln(2,"stg_net: system not configured\n",80);
exit(1);
}
iUpdate|=1;
}
#ifdef TREVNICK
if (*argv)
checknet(*argv,iUpdate|1);
else
#endif
/* loads sNode */
checknet(sNODE.acName,iUpdate);
if (iBoot)
{
syslog(LOG_INFO,"system booted");
writeln(1,"Starting smon(s)...\n",80);
args[0]="@smon";
args[1]=0;
if (_fork(*args+1,args,environ)==ERR)
exit(syserr("fork %s: %m",*args+1));
sleep(3);
/*
if (*sNode.acN_ISDN)
{
writeln(1,"Starting ISDN daemon...\n",80);
args[0]="@stgisdn";
args[1]=0;
if (_fork(*args+1,args,environ)==ERR)
exit(syserr("fork %s: %m",*args+1));
sleep(3);
}
*/
if (sNode.abN_INET[0])
{
writeln(1,"Starting Internet daemon...\n",80);
args[0]="@stginet";
args[1]=0;
if (_fork(*args+1,args,environ)==ERR)
exit(syserr("fork %s: %m",*args+1));
sleep(3);
}
writeln(1,"Starting postman...\n",80);
args[0]="@postman";
args[1]=0;
if (_fork(*args+1,args,environ)==ERR)
exit(syserr("fork %s: %m",*args+1));
sleep(3);
}
}