You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
154 lines
3.7 KiB
C
154 lines
3.7 KiB
C
/*
|
|
* binkleyforce -- unix FTN mailer project
|
|
*
|
|
* Copyright (c) 1998-2000 Alexander Belkin, 2:5020/1398.11
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; either version 2 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* $Id$
|
|
*/
|
|
|
|
#include "includes.h"
|
|
#include "confread.h"
|
|
#include "logger.h"
|
|
#include "util.h"
|
|
#include "freq.h"
|
|
#include "session.h"
|
|
|
|
int req_createsrif(char *sname, char *req, char *rsp)
|
|
{
|
|
FILE *fp;
|
|
char *cptr;
|
|
s_faddr *aptr;
|
|
char abuf[BF_MAXADDRSTR+1];
|
|
|
|
if( (fp = file_open(sname, "w")) == NULL )
|
|
{
|
|
logerr("can't create srif file \"%s\"", sname);
|
|
return -1;
|
|
}
|
|
|
|
switch(state.session) {
|
|
case SESSION_EMSI:
|
|
fprintf(fp, "SessionType EMSI\n");
|
|
break;
|
|
case SESSION_BINKP:
|
|
fprintf(fp, "SessionType OTHER\n");
|
|
break;
|
|
case SESSION_YOOHOO:
|
|
fprintf(fp, "SessionType WAZOO\n");
|
|
break;
|
|
case SESSION_FTSC:
|
|
fprintf(fp, "SessionType FTSC0001\n");
|
|
break;
|
|
case SESSION_UNKNOWN:
|
|
ASSERT_MSG();
|
|
break;
|
|
}
|
|
|
|
fprintf(fp, "Baud %ld\n",
|
|
state.connspeed ? state.connspeed : 115200);
|
|
|
|
fprintf(fp, "Time -1\n");
|
|
fprintf(fp, "RequestList %s\n", req);
|
|
fprintf(fp, "ResponseList %s\n", rsp);
|
|
|
|
fprintf(fp, "RemoteStatus %s\n",
|
|
state.protected ? "PROTECTED" : "UNPROTECTED");
|
|
|
|
fprintf(fp, "SystemStatus %s\n",
|
|
state.listed ? "LISTED" : "UNLISTED");
|
|
|
|
if( state.handshake && state.handshake->remote_sysop_name
|
|
&& (cptr = state.handshake->remote_sysop_name(state.handshake)) )
|
|
fprintf(fp, "Sysop %s\n", cptr);
|
|
else
|
|
fprintf(fp, "Sysop SysOp\n");
|
|
|
|
if( state.handshake && state.handshake->remote_address
|
|
&& (aptr = state.handshake->remote_address(state.handshake)) )
|
|
fprintf(fp, "AKA %s\n", ftn_addrstr(abuf, *aptr));
|
|
else
|
|
return -1;
|
|
|
|
if( state.handshake && state.handshake->remote_system_name
|
|
&& (cptr = state.handshake->remote_system_name(state.handshake)) )
|
|
fprintf(fp, "Site %s\n", cptr);
|
|
|
|
if( state.handshake && state.handshake->remote_location
|
|
&& (cptr = state.handshake->remote_location(state.handshake)) )
|
|
fprintf(fp, "Location %s\n", cptr);
|
|
|
|
if( state.handshake && state.handshake->remote_phone
|
|
&& (cptr = state.handshake->remote_phone(state.handshake)) )
|
|
fprintf(fp, "Phone %s\n", cptr);
|
|
|
|
if( state.handshake && state.handshake->remote_mailer
|
|
&& (cptr = state.handshake->remote_mailer(state.handshake)) )
|
|
fprintf(fp, "Mailer %s\n", cptr);
|
|
|
|
file_close(fp);
|
|
|
|
return(0);
|
|
}
|
|
|
|
void req_addfilelist(char *listname, s_freq *freq)
|
|
{
|
|
FILE *fp;
|
|
char fnbuf[BF_MAXPATH+1], *p;
|
|
int action = ACTION_NOTHING;
|
|
struct stat st;
|
|
|
|
if( (fp = file_open(listname, "r")) == NULL )
|
|
{
|
|
logerr("can't open freq answer list \"%s\" (%d)", listname, strlen(listname));
|
|
return;
|
|
}
|
|
|
|
while( fgets(fnbuf, sizeof(fnbuf), fp) )
|
|
{
|
|
p = fnbuf;
|
|
action = ACTION_NOTHING;
|
|
|
|
string_chomp(fnbuf);
|
|
|
|
/*
|
|
* We won't remove leading and trailing spaces
|
|
*/
|
|
|
|
if( *p == '\0' )
|
|
continue; /* Empty line! */
|
|
|
|
switch(*p) {
|
|
case '=': ++p; action = ACTION_UNLINK; break;
|
|
case '+': ++p; action = ACTION_NOTHING; break;
|
|
case '-': ++p; action = ACTION_FORCEUNLINK; break;
|
|
}
|
|
|
|
if( stat(p, &st) == 0 )
|
|
{
|
|
DEB((D_FREQ, "adding file \"%s\", %d", p, st.st_size));
|
|
|
|
(*freq->flast) = (s_filelist*)xmalloc(sizeof(s_filelist));
|
|
memset(*freq->flast, '\0', sizeof(s_filelist));
|
|
|
|
(*freq->flast)->fname = xstrcpy(p);
|
|
(*freq->flast)->size = st.st_size;
|
|
(*freq->flast)->action = action;
|
|
(*freq->flast)->status = STATUS_WILLSEND;
|
|
freq->flast = &(*freq->flast)->next;
|
|
|
|
freq->fnumber += 1;
|
|
freq->fsize += st.st_size;
|
|
}
|
|
else
|
|
logerr("can't stat file from answer list \"%s\"", p);
|
|
}
|
|
|
|
file_close(fp);
|
|
}
|
|
|