#include "os.h"
#include "s_defines.h"
#include "match_ext.h"
#ifdef RUSNET_IRCD
#define BUFLEN 255
#define CFG_COMMENT '#'
#define CFG_CMD_END ';'
unsigned char logging_enabled = 0;
unsigned char logfile_name[BUFLEN + 1];
char config_prefix[BUFLEN + 1];
unsigned char* servicesname = NULL;
void update_matchtables()
{
int i;
for (i=0xc0; i<=0xdf; i++)
{
touppertab[i] = i+0x20;
tolowertab[i+0x20] = i;
char_atribs[i] = char_atribs[i+0x20] = PRINT|ALPHA;
}
touppertab[0xa3] = 0xb3;
tolowertab[0xb3] = 0xa3;
char_atribs[0xa3] = char_atribs[0xb3] = PRINT|ALPHA;
}
void initialize_rusnet(char *path)
{
/*
extern unsigned long rusnet_vaddr;
*/
extern struct rusnet_route *hdr_rusnet_route;
FILE *finit;
char s[BUFLEN + 1];
int i,j,k,l;
char *parm[16], *p, *r;
char *ptr;
char *codepage_name, *intable, *outtable, *portnum;
hdr_rusnet_route = NULL;
update_matchtables();
finit = fopen(path, "rt");
if (finit == NULL)
return;
s[BUFLEN] = '\0'; /* terminate buffer string for occasion */
while (fgets(s,BUFLEN,finit) != NULL)
{
r = s;
/* пропуск пробелов в начале */
while ( isspace(*r) )
{
r++;
}
if (*r == '#') continue; /* коментарий - на новую строку */
while ( (p = strchr(r, CFG_CMD_END)) != NULL)
{
*p++ = '\0'; /* terminate the token */
}
for (i = 0, ptr = strtok(r, " \t\n\r");
ptr != NULL && *ptr != CFG_COMMENT && i < 16;
ptr = strtok(NULL, " \t\n\r"))
{
parm[i++] = ptr; /* split parameters */
}
if (i == 0) continue; /* Umka: handle empty command */
#if 0
if (ptr != NULL && i < 16 && *ptr == CFG_COMMENT) continue;
#endif
while (i < 16) parm[i++] = NULL; /* finalize parameters */
/*
* Configure rusnet extensions
*/
if (strcasecmp(parm[0], "logfile") == 0)
{
logging_enabled = 1;
strcpy(logfile_name, parm[1]);
}
else
if (strcasecmp(parm[0], "prefix") == 0)
{
strcpy(config_prefix, parm[1]);
}
else
if (strcasecmp(parm[0], "codepage") == 0)
{
codepage_name = parm[1];
for (j = 0; codepage_name[j] != '\0'; j++)
codepage_name[j] = toupper(codepage_name[j]);
intable = outtable = portnum = NULL;
for (j = 2; parm[j] != NULL; j++)
{
if (strcasecmp(parm[j], "incoming") == 0)
intable = parm[++j];
else
if (strcasecmp(parm[j], "outgoing") == 0)
outtable = parm[++j];
else
if (strcasecmp(parm[j], "port") == 0)
portnum = parm[++j];
}
if (portnum != NULL)
rusnet_codepage_register(portnum, codepage_name,
intable, outtable);
}
else
/*
if (strcasecmp(parm[0],"interface") == 0)
{
rusnet_vaddr = inet_addr(parm[1]);
}
else
if (strcasecmp(parm[0],"connect") == 0)
{
if (strcasecmp(parm[2],"thru") == 0)
{
rusnet_add_route(parm[1],parm[3],(parm[4] == NULL) ?
"[Unnamed]" : parm[4]);
}
}
else
if( strcasecmp(parm[0],"forbid" ) == 0 )
{
if( parm[1][0] == 0 ) continue;
rusnet_add_forbid_mask(parm[1]);
}
else
if( strcasecmp(parm[0],"services" ) == 0 )
{
if( parm[1][0] == 0 ) continue;
if( servicesname != NULL ) MyFree( servicesname );
servicesname = (char *) mystrdup( parm[1] );
}
*/
r = p; /* prepare for next clause */
/* while (isspace(*r)) r++;
if (*r == '#') break; */
}
fclose(finit);
}
void uninitialize_rusnet(void)
{
rusnet_codepage_free();
}
#endif
syntax highlighted by Code2HTML, v. 0.9.1