logging, binkp TRF

master
Sergey Dorofeev 13 years ago
parent f2d9c6e4a7
commit 441f4021c2

@ -1,3 +1,9 @@
=== 2012-03 ===
$DEBUGLEVEL, $DEBUGFILE removed - please use configuration options
DNS zone support
=== 2012-02 ===
Netspool support

@ -24,9 +24,6 @@
## Config reader directives:
##
## $INCLUDE <filename> Include this file
## $LOGFILE <filename> Log to this file
## $DEBUGFILE <filename> Write debug information to this file
## $DEBUGLEVEL <debug_levels> Change debug level
##
## $IFEXP <expression> All data between ``$IFEXP'' and ``$ENDIF''
## <config_keyword> <value> directives will be used with the specified
@ -35,8 +32,6 @@
##
## Examples:
##
## $DEBUGLEVEL Outbound hShake
##
## $IFEXP ((2:*/*.* | !protected) & Time 23:00-01:00)
## options NoFreqs
## min_speed_in 14400
@ -81,7 +76,13 @@ options NoDirZap NoJanus NoChat
#
#log_file_daemon /var/log/bforce/bf-daemon
#log_file /var/log/bforce/bf-log
# Debugging information completness level. Debugging is disabled by
# default. Allowed debug levels: config, nodelist, outbound, info, hshake,
# ttyio, modem, prot, freq, daemon, full
#debug_file /var/log/bforce/bf-debug
#debug_level info hshake prot
#
# Existing of this file forbid any outgoing modem calls. Existing of
@ -90,16 +91,6 @@ options NoDirZap NoJanus NoChat
#
nodial_flag /etc/nodial
#
# Debugging information completness level. Debugging is disabled by
# default. Allowed debug levels: config, nodelist, outbound, info, hshake,
# ttyio, modem, prot, freq, daemon, full
#
# It seems to be broken now, use "$DEBUGLEVEL" instead
#
#debug_level info hshake prot
#
#
# Inbound directories
#

@ -1 +1 @@
0.22.9
0.24

@ -31,11 +31,13 @@ SPOOLDIR = @SPOOLDIR@
DAEMON_LOGFILE = $(LOGDIR)/bf-daemon
BFORCE_LOGFILE = $(LOGDIR)/bf-log
BFORCE_DEBFILE = $(LOGDIR)/bf-debug
BFORCE_DEBLEVEL = 0L
BFORCE_CFGFILE = $(CONFDIR)/bforce.conf
DEFINES = -DDAEMON_LOGFILE=\"$(DAEMON_LOGFILE)\" \
-DBFORCE_LOGFILE=\"$(BFORCE_LOGFILE)\" \
-DBFORCE_DEBFILE=\"$(BFORCE_DEBFILE)\" \
-DBFORCE_DEBLEVEL=$(BFORCE_DEBLEVEL) \
-DBFORCE_CFGFILE=\"$(BFORCE_CFGFILE)\" \
-DBF_OS=\"@build_os@\" @DEFS@

@ -1,8 +0,0 @@
tx_zmodem
rx_zmodem
hydra
binkp_transfer
all of then do use p_tx_readfile

@ -422,13 +422,13 @@ int main(int argc, char *argv[], char *envp[])
}
}
}
/* if( (rc = log_open(log_getfilename(LOG_FILE_SESSION), NULL, NULL)) )
/* if( (rc = log_open(BFORCE_LOGFILE, NULL, NULL)) ) //compiled in
{
log("can't continue without logging");
gotoexit(BFERR_FATALERROR);
}
*/
}*/
/* Process primary config file */
if( opts.confname && *opts.confname )
rc = conf_readconf(opts.confname, 0);
@ -442,17 +442,12 @@ int main(int argc, char *argv[], char *envp[])
(void)conf_readconf(opts.incname, 1);
/* Reopen log file if it was defined in config */
if( log_open(log_getfilename(LOG_FILE_SESSION), NULL, NULL) )
if( log_reopen(log_getfilename(LOG_FILE_SESSION), NULL, NULL) )
{
log("can't continue without logging");
gotoexit(BFERR_FATALERROR);
}
#ifdef DEBUG
/* Same for the debug file */
(void)debug_setfilename(log_getfilename(LOG_FILE_DEBUG));
#endif
//char runmode_str[21];
//snprintf(runmode_str, 20, "Run mode: %d", opts.runmode);
//log(runmode_str);

@ -173,7 +173,7 @@ s_conf_entry bforce_config[BFORCE_NUMBER_OF_KEYWORDS+1] = {
#endif
#ifdef DEBUG
CONF_KEY(debug_file, CT_STRING),
CONF_KEY(debug_level, CT_DEBLEVEL),
CONF_KEY(debug_level, CT_STRING),
#endif
CONF_KEY(split_inbound, CT_BOOLEAN),
#ifdef NETSPOOL
@ -201,9 +201,9 @@ static int proc_dialresp(s_dialresp *dest, char *value);
static int proc_translate(s_translate *dest, char *value);
static int proc_speeddep(s_connlist *dest, char *value);
static int proc_tries(s_tries *dest, char *value);
#ifdef DEBUG
static int proc_debuglevel(s_number *dest, char *value);
#endif
//#ifdef DEBUG
//static int proc_debuglevel(s_number *dest, char *value); move to reader
//#endif
static int proc_filebox(s_filebox *dest, char *value);
static int append_config_entry(s_conf_entry *conf_ent, s_cval_entry *cval_entry)
@ -292,11 +292,11 @@ int proc_configline(const char *k, const char *e, const char *v)
case CT_TRIES:
rc = proc_tries(&temp_value.d.tries, copy);
break;
#ifdef DEBUG
case CT_DEBLEVEL:
rc = proc_debuglevel(&temp_value.d.number, copy);
break;
#endif
//#ifdef DEBUG
// case CT_DEBLEVEL:
// rc = proc_debuglevel(&temp_value.d.number, copy);
// break;
//#endif
case CT_FILEBOX:
rc = proc_filebox(&temp_value.d.filebox, copy);
break;
@ -933,7 +933,7 @@ static int proc_tries(s_tries *dest, char *value)
* Line format: DebugLevel <Level> [<Level>]..
*/
#ifdef DEBUG
static int proc_debuglevel(s_number *dest, char *value)
/*static int proc_debuglevel(s_number *dest, char *value)
{
int rc = PROC_RC_OK;
long deblevel = 0L;
@ -945,7 +945,7 @@ static int proc_debuglevel(s_number *dest, char *value)
dest->num = deblevel;
return(rc);
}
} */
#endif
/*

@ -32,10 +32,10 @@ const char *conf_getconfname(void)
return(name);
}
int conf_readpasswdlist(s_falist **pwdlist, char *fname)
/*int conf_readpasswdlist(s_falist **pwdlist, char *fname)
{
return(0);
}
} */
/*
* Prepare config string for parsing, check for comments
@ -131,6 +131,7 @@ static void conf_parsestr(char *str, char **key, char **expr, char **value)
int conf_readconf(const char *confname, int inclevel)
{
// printf("%s %d\n", confname, inclevel);
FILE *fp = NULL;
char tmp[BF_MAXCFGLINE + 1];
int rc, maxrc = 0;
@ -300,7 +301,7 @@ int conf_readconf(const char *confname, int inclevel)
isifexpr = FALSE;
}
}
else if( strcasecmp(p_key+1, "logfile") == 0 )
/* else if( strcasecmp(p_key+1, "logfile") == 0 )
{
if( value == NULL || expr )
{
@ -359,7 +360,7 @@ int conf_readconf(const char *confname, int inclevel)
rc = PROC_RC_IGNORE;
}
#endif
}
}*/
else
{
log("unknown directive `%s'", p_key);
@ -426,11 +427,24 @@ int conf_readconf(const char *confname, int inclevel)
DEB((D_CONFIG, "readconfig: exit with maxrc = %d", maxrc));
/* update subsystems */
if (inclevel==0) { // end of main config
if( log_reopen(log_getfilename(LOG_FILE_SESSION), NULL, NULL) )
{
log("can't continue without logging");
exit(-1);
}
#ifdef DEBUG
debug_configure();
#endif
}
return maxrc;
}
#ifdef DEBUG
void debug_override(void)
/*void debug_override(void)
{
s_cval_entry *ptrl;
char abuf[BF_MAXADDRSTR+1];
@ -452,6 +466,6 @@ void debug_override(void)
}
DEB((D_CONFIG, "debug_override: END"));
}
}*/
#endif /* DEBUG */

@ -914,10 +914,6 @@ int daemon_run(const char *confname, const char *incname, bool quit)
return BFERR_FATALERROR;
}
#ifdef DEBUG
(void)debug_setfilename(log_getfilename(LOG_FILE_DEBUG));
#endif
log("%sstarting daemon (%s)",
started ? "re" : "", BF_VERSION);

@ -32,7 +32,7 @@ static char log_ttyname[32] = "";
* Local variables needed to make debug work
*/
static FILE *debug_fp = NULL;
static long debug_current_debuglevel = 0L;
static long debug_current_debuglevel = BFORCE_DEBLEVEL;
static char debug_name[BF_MAXPATH+1] = BFORCE_DEBFILE;
static bool debug_invalid_name = FALSE;
@ -56,6 +56,9 @@ struct debuglevel {
{ "Freq", D_FREQ },
{ "Statem", D_STATEM },
{ "Daemon", D_DAEMON },
{ "Free", D_FREE },
{ "24554", D_24554 },
// { "Daemon", D_DAEMON },
{ "Full", D_FULL },
{ NULL, 0 }
};
@ -385,28 +388,16 @@ int logerr(const char *s, ...)
#ifdef DEBUG
void debug_setlevel(long newlevel, bool logit)
{
if( logit && newlevel != debug_current_debuglevel )
{
log("changing debug level from 0x%07x to 0x%07x",
debug_current_debuglevel, newlevel);
debug_current_debuglevel = newlevel;
}
}
bool debug_isopened(void)
{
return debug_fp ? TRUE : FALSE;
}
int debug_parsestring(char *str, unsigned long *deblevel)
int _debug_parsestring(char *str, unsigned long *deblevel)
{
int i, rc = 0;
char *n;
char *p_str = NULL;
ASSERT(str != NULL);
if (str==NULL) {
puts("DEBUG level string is empty, please configure");
exit(-1);
}
*deblevel = 0L;
@ -427,40 +418,49 @@ int debug_parsestring(char *str, unsigned long *deblevel)
rc = 1;
}
}
return rc;
return rc;
}
void debug_setfilename(const char *debugname)
void debug_configure() // this function should be called after configuration is settled
{
ASSERT(debugname != NULL);
if( !strcmp(debug_name, debugname) ) return;
char *debugfile = conf_string(cf_debug_file);
char *debuglevel = conf_string(cf_debug_level);
unsigned long n_debuglevel;
if (debugfile!=NULL) {
if( strcmp(debug_name, debugfile)!=0 ) {
if( debug_isopened() ) debug_close();
if( debug_isopened() ) debug_close();
/* Reset ignore flag */
if( debug_invalid_name )
if( debug_invalid_name )
debug_invalid_name = FALSE;
strnxcpy(debug_name, debugname, sizeof(debug_name));
strncpy(debug_name, debugfile, sizeof(debug_name));
}
}
_debug_parsestring(debuglevel, &n_debuglevel);
if( n_debuglevel != debug_current_debuglevel ) {
log("changing debug level from 0x%08x to 0x%08x",
debug_current_debuglevel, n_debuglevel);
debug_current_debuglevel = n_debuglevel;
}
}
bool debug_isopened(void)
{
return debug_fp ? TRUE : FALSE;
}
int debug_open(const char *debugname)
int debug_open()
{
char buf[40];
ASSERT(debug_fp == NULL);
if( debugname )
{
if( (debug_fp = fopen(debugname, "a")) == NULL )
{
logerr("can't open debug file \"%s\"", debugname);
return -1;
}
strnxcpy(debug_name, debugname, sizeof(debug_name));
}
else if( debug_name )
if( debug_name )
{
if( (debug_fp = fopen(debug_name, "a")) == NULL )
{
@ -502,7 +502,7 @@ int debug_close(void)
rc = fclose(debug_fp) ? 0 : -1; debug_fp = NULL;
}
return rc;
return rc;
}
int debug(unsigned long what, const char *str, ...)
@ -515,7 +515,7 @@ int debug(unsigned long what, const char *str, ...)
{
if( debug_fp == NULL && debug_invalid_name == FALSE )
{
debug_open(NULL);
debug_open();
}
if( debug_fp )

@ -115,7 +115,8 @@ int binkp_loop(s_binkp_state *bstate) {
// session criterium handshake criterium
while (!bstate->complete || bstate->waiting_got) {
log("loop s: %d r: %d", bstate->batchsendcomplete, bstate->batchreceivecomplete);
DEB((D_24554, "loop s: %d r: %d p: %d sp: %d", bstate->batchsendcomplete, bstate->batchreceivecomplete,
bstate->phase, bstate->subphase));
if (bstate->continuesend) {
no_more_to_send = false;
bstate->continuesend = false;
@ -123,7 +124,7 @@ int binkp_loop(s_binkp_state *bstate) {
if (have_to_write==0 && (!no_more_to_send || bstate->extracmd[0]!=-1)) {
m = binkp_getforsend(bstate, writebuf+BINKP_HEADER, &block_type, &block_length);
if(m==1 || m==3) {
//log("got block for sending %d %hu", block_type, block_length);
//DEB((D_24554, "got block for sending %d %hu", block_type, block_length));
write_pos = 0;
have_to_write = block_length+BINKP_HEADER;
if( block_type == BINKP_BLK_CMD ) {
@ -132,28 +133,28 @@ int binkp_loop(s_binkp_state *bstate) {
else if( block_type == BINKP_BLK_DATA ) {
writebuf[0] = (block_length>>8)&0x7f;
} else {
log("block for sending has invalid type, aborting");
DEB((D_24554, "block for sending has invalid type, aborting"));
return PRC_ERROR;
}
writebuf[1] = block_length&0xff;
}
if (m==2 || m==3) {
log("no more to send");
DEB((D_24554, "no more to send"));
no_more_to_send = true;
}
if (m==0) {
log("binkp: nothing to write");
DEB((D_24554, "binkp: nothing to write"));
}
if (m<0 || m>3) {
log("getforsend error");
DEB((D_24554, "getforsend error"));
return PRC_ERROR;
}
}
if (bstate->batchsendcomplete && bstate->batchreceivecomplete) {
log("batch is complete");
DEB((D_24554, "batch is complete"));
if (bstate->MB && (bstate->batch_send_count || bstate->batch_recv_count)) {
log("starting one more batch");
DEB((D_24554, "starting one more batch"));
bstate->batchsendcomplete -= 1;
bstate->batchreceivecomplete -= 1;
//bstate->firstbatch = false;
@ -167,17 +168,17 @@ int binkp_loop(s_binkp_state *bstate) {
}
else {
if (bstate->waiting_got) {
log("waiting for all files have being confirmed");
DEB((D_24554, "waiting for all files have being confirmed"));
}
else {
log("finishing session");
DEB((D_24554, "finishing session"));
bstate->complete = true;
want_read = 0;
}
}
}
log("select read: %d write %d", want_read, have_to_write);
DEB((D_24554, "select read: %d write: %d", want_read, have_to_write));
if (want_read || have_to_write) {
n = tty_select(want_read?&canread:NULL, have_to_write?&canwrite:NULL, timeout);
if( n<0 ) {
@ -186,8 +187,9 @@ int binkp_loop(s_binkp_state *bstate) {
}
}
else {
log("empty loop %d", ++bstate->emptyloop);
DEB((D_24554, "empty loop %d", ++bstate->emptyloop));
if (bstate->emptyloop==10) {
log("eternal loop");
return PRC_ERROR;
}
}
@ -202,13 +204,14 @@ int binkp_loop(s_binkp_state *bstate) {
log("read: remote socket shutdown");
return PRC_REMOTEABORTED;
}
DEB((D_24554, "got %d bytes", n));
want_read -= n;
read_pos += n;
if (read_pos == BINKP_HEADER) {
// have read header, want read body
log("it should be 0: %d", want_read);
DEB((D_24554, "it should be 0: %d", want_read));
want_read = ((unsigned short)(readbuf[0]&0x7F)<<8) | readbuf[1];
log("pending block, length %u", want_read);
DEB((D_24554, "got block header, block length %u", want_read));
} // no else here: if want_read may be zero here for zero length block
}
@ -216,23 +219,23 @@ int binkp_loop(s_binkp_state *bstate) {
if (want_read==0 && read_pos) { // check every loop, not only just after read as accepting may be deferred
block_type = readbuf[0]&0x80? BINKP_BLK_CMD: BINKP_BLK_DATA;
block_length = read_pos - BINKP_HEADER;
log("binkp: complete block is received %d %hu", block_type, block_length);
DEB((D_24554, "binkp: complete block is received %d %hu", block_type, block_length));
m = binkp_doreceiveblock(bstate, readbuf+BINKP_HEADER, block_type, block_length);
if(m==1) {
log("block is successfully accepted");
DEB((D_24554, "block is successfully accepted"));
read_pos = 0;
want_read = BINKP_HEADER;
} else if (m==2) {
log("block accepted and no more is needed in this mode");
DEB((D_24554, "block accepted and no more is needed in this mode"));
no_more_read = true;
read_pos = 0;
want_read = 0; //BINKP_HEADER;
}
else if (m==0) {
log("binkp: keeping buffer");
DEB((D_24554, "binkp: keeping buffer"));
}
else if (m==3) {
log("aborting session");
DEB((D_24554, "aborting session"));
bstate->complete = true;
//rc = HRC_OTHER_ERR;
}
@ -243,7 +246,7 @@ int binkp_loop(s_binkp_state *bstate) {
}
if (have_to_write && canwrite) {
log("writing %d pos %d", have_to_write, write_pos);
DEB((D_24554, "writing %d pos %d", have_to_write, write_pos));
n = tty_write(writebuf+write_pos, have_to_write);
if( n<0 ) {
log("binkp: tty write error");
@ -253,7 +256,7 @@ int binkp_loop(s_binkp_state *bstate) {
log("write: remote socket shutdown");
return PRC_REMOTEABORTED;
}
//log("%d bytes sent", n);
DEB((D_24554, "%d bytes sent", n));
write_pos += n;
have_to_write -= n;
}
@ -285,7 +288,7 @@ int binkp_incoming(s_binkp_sysinfo *local_data, s_binkp_sysinfo *remote_data)
int binkp_transfer(s_binkp_sysinfo *local_data, s_binkp_sysinfo *remote_data, s_protinfo *pi)
{
log("start transfer");
DEB((D_24554, "start transfer"));
s_binkp_state s;
s.mode = bmode_transfer;
s.local_data = local_data;
@ -325,7 +328,7 @@ int binkp_getforsend(s_binkp_state *bstate, char *buf, int *block_type, unsigned
int my_sf, wr_pos;
int n; // read file
if (bstate->extracmd[0]!=-1) {
log("extra command from receiver %d %s", bstate->extracmd[0], bstate->extracmd+1);
DEB((D_24554, "send command from receiver %d %s", bstate->extracmd[0], bstate->extracmd+1));
buf[0] = bstate->extracmd[0];
strcpy(buf+1, bstate->extracmd+1);
*block_type = BINKP_BLK_CMD;
@ -333,7 +336,7 @@ int binkp_getforsend(s_binkp_state *bstate, char *buf, int *block_type, unsigned
bstate->extracmd[0] = -1;
if (bstate->extraislast) {
bstate->phase = 100;
log("extracmd is last");
DEB((D_24554, "extracmd is last"));
bstate->complete = true;
}
return 1;
@ -345,12 +348,12 @@ case 0: // MD5 challenge
bstate->subphase=0;
if( bstate->mode==bmode_incoming_handshake && bstate->local_data->challenge_length > 0 )
{
log("send challenge");
DEB((D_24554, "send challenge"));
char challenge[128];
string_bin_to_hex(challenge, bstate->local_data->challenge, bstate->local_data->challenge_length);
buf[0] = BPMSG_NUL;
sprintf(buf+1, "OPT CRAM-MD5-%s", challenge);
log("sent %s", buf+1);
DEB((D_24554, "send M_NUL %s", buf+1));
*block_type = BINKP_BLK_CMD;
*block_length = strlen(buf+1)+1;
return 1;
@ -390,6 +393,7 @@ case 6:
*block_length = 1 + sprintf(buf+1, "VER %s %s/%d.%d",
bstate->local_data->progname, bstate->local_data->protname,
bstate->local_data->majorver, bstate->local_data->minorver);
DEB((D_24554, "send M_NUL %s", buf+1));
return 1;
case 7:
if (bstate->mode==bmode_outgoing_handshake) {
@ -402,6 +406,7 @@ case 7:
// if (!nodelist_checkflag (state.node.flags, "ND"))
// strcat(buf+1, " ND");
*block_length = 1 + strlen(buf+1);
DEB((D_24554, "send M_NUL %s", buf+1));
return 1;
}
// else skip subphase
@ -415,7 +420,7 @@ case 7:
// p
case 2:
log("send address");
DEB((D_24554, "send address"));
bstate->phase += 1;
buf[0] = BPMSG_ADR;
wr_pos = 1;
@ -438,29 +443,29 @@ case 2:
}
*block_type = BINKP_BLK_CMD;
*block_length = wr_pos;
log("address: %s", buf+1);
DEB((D_24554, "send address: %s", buf+1));
return 1;
case 3: // send password on outgoing or pw confirmation on incoming
// special empty password is sent if there is no password for the remote addr
if (bstate->mode==bmode_incoming_handshake) {
if (bstate->password_received) {
log("password verified");
DEB((D_24554, "password verified"));
buf[0] = BPMSG_OK;
*block_type = BINKP_BLK_CMD;
*block_length = 1;
bstate->phase += 1;
return 1;
}
log("waiting for password from remote");
DEB((D_24554, "waiting for password from remote"));
return 0; // nothing to send
}
else if (bstate->mode==bmode_outgoing_handshake) {
if (!bstate->address_established) {
log("address not received still");
DEB((D_24554, "address not received still"));
return 0;
}
log("sending password");
DEB((D_24554, "sending password"));
buf[0] = BPMSG_PWD;
*block_type = BINKP_BLK_CMD;
@ -473,7 +478,7 @@ case 3: // send password on outgoing or pw confirmation on incoming
char digest_hex[33];
if(bstate->remote_data->challenge_length==0) {
log("waiting for challenge");
DEB((D_24554, "waiting for challenge"));
return 0;
}
md5_cram_get(bstate->local_data->passwd, bstate->remote_data->challenge,
@ -498,11 +503,11 @@ case 3: // send password on outgoing or pw confirmation on incoming
case 4:
if (bstate->mode==bmode_incoming_handshake) {
log("incoming handshake is complete");
DEB((D_24554, "incoming handshake is complete"));
bstate->complete = true;
}
else {
log("outgoing handshake: everything is sent");
DEB((D_24554, "outgoing handshake: everything is sent"));
}
return 2;
}
@ -513,9 +518,9 @@ case 4:
switch (bstate->phase) {
send_next_file:
case 0:
log("fetch file from queue");
DEB((D_24554, "fetch file from queue"));
if (p_tx_fopen(bstate->pi, NULL)) {
log("queue empty");
DEB((D_24554, "queue empty"));
bstate->phase = 4;
goto send_EOB;
}
@ -524,7 +529,7 @@ case 4:
//send M_FILE -1
if (bstate->NR) {
log("send M_FILE with -1");
DEB((D_24554, "send M_FILE with -1"));
buf[0] = BPMSG_FILE;
*block_length = 1+sprintf(buf+1, "%s %ld %ld -1", bstate->pi->send->net_name,
(long)bstate->pi->send->bytes_total, (long)bstate->pi->send->mod_time);
@ -534,7 +539,7 @@ case 4:
bstate->phase += 1;
case 1: //send M_FILE - M_GET forcibly sets this phase. M_GET must open needed file
log("send M_FILE");
DEB((D_24554, "send M_FILE"));
buf[0] = BPMSG_FILE;
*block_length = 1+sprintf(buf+1, "%s %ld %ld 0", bstate->pi->send->net_name,
bstate->pi->send->bytes_total, bstate->pi->send->mod_time);
@ -554,7 +559,7 @@ case 4:
log("p_tx_readfile error");
return -1;
}
log("file is sent");
DEB((D_24554, "file is sent"));
bstate->pi->send->status = FSTAT_WAITACK;
bstate->phase += 1;
@ -562,32 +567,32 @@ case 4:
case 3: //wait for acknowlede
if (bstate->pi->send->waitack) {
log("file must be acknowledged with M_GOT");
DEB((D_24554, "file must be acknowledged with M_GOT"));
int i;
bool ack = false;
for(i = 0; i < bstate->pi->n_sentfiles; i++ ) {
if (p_compfinfo(&bstate->pi->sentfiles[i], bstate->pi->send->net_name, bstate->pi->send->bytes_total, bstate->pi->send->mod_time) == 0) {
if (bstate->pi->sentfiles[i].status == FSTAT_SUCCESS) {
ack = true;
log("acknowledged");
DEB((D_24554, "acknowledged"));
break;
}
}
}
if (!ack) {
log("wait for M_GOT");
DEB((D_24554, "wait for M_GOT"));
return 0;
}
log("M_GOT received, going to next file");
DEB((D_24554, "M_GOT received, going to next file"));
} else {
log("do not wait M_GOT");
DEB((D_24554, "do not wait M_GOT"));
}
bstate->phase = 0;
goto send_next_file;
send_EOB:
case 4:
log("send EOB n_sentfile=%d", bstate->pi->n_sentfiles);
DEB((D_24554, "send EOB n_sentfile=%d", bstate->pi->n_sentfiles));
buf[0] = BPMSG_EOB;
*block_type = BINKP_BLK_CMD;
*block_length = 1;
@ -596,7 +601,7 @@ case 4:
return 1;
case 5:
log("nothing to send");
DEB((D_24554, "nothing to send"));
return 2;
@ -628,11 +633,12 @@ case BINKP_BLK_CMD:
buf[block_length] = 0; // fencing for easy processing
switch (buf[0]) {
case BPMSG_NUL: /* Site information, just logging */
log("received M_NUL len=%d", block_length);
DEB((D_24554, "received M_NUL len=%d", block_length));
DEB((D_24554, "M_NUL %s", buf+1));
binkp_process_NUL(bstate->remote_data, buf+1);
return 1;
case BPMSG_ADR: /* List of addresses */
log("received M_ADR len=%d", block_length);
DEB((D_24554, "received M_ADR len=%d", block_length));
if (bstate->address_established) {
PROTO_ERROR("remote tries to change address");
}
@ -650,7 +656,7 @@ case BPMSG_ADR: /* List of addresses */
if (bstate->mode == bmode_incoming_handshake) {
int i;
log("sending options");
DEB((D_24554, "sending options"));
bstate->extracmd[0] = BPMSG_NUL;
bstate->extraislast = false;
sprintf(bstate->extracmd+1,"OPT MB");
@ -693,7 +699,7 @@ case BPMSG_ADR: /* List of addresses */
bstate->address_established = true;
return 1;
case BPMSG_PWD: /* Session password */
log("received M_PWD len=%d", block_length);
DEB((D_24554, "received M_PWD len=%d", block_length));
if (bstate->mode != bmode_incoming_handshake) {
PROTO_ERROR("unexpected M_PWD");
}
@ -724,14 +730,14 @@ case BPMSG_PWD: /* Session password */
return 1;
}
else {
log("flag password received");
DEB((D_24554, "flag password received"));
bstate->password_received = true;
return 2;
}
break;
case BPMSG_FILE: /* File information */
log("received M_FILE len=%d", block_length);
DEB((D_24554, "received M_FILE len=%d", block_length));
if (bstate->mode != bmode_transfer) {
PROTO_ERROR("unexpected M_FILE");
}
@ -746,14 +752,14 @@ case BPMSG_FILE: /* File information */
}
if (bstate->frs == frs_didget) {
log("is it what we want?");
DEB((D_24554, "is it what we want?"));
if( bstate->pi->recv && p_compfinfo(bstate->pi->recv, recvfi.fn, recvfi.sz, recvfi.tm) == 0
&& bstate->pi->recv->bytes_skipped == recvfi.offs && bstate->pi->recv->fp ) {
log("resuming %s from offset %d", recvfi.fn, recvfi.offs);
bstate->frs = frs_data;
return 1;
}
log("no, skipping (TODO: accept it)");
DEB((D_24554, "no, skipping; TODO: accept it"));
if( bstate->extracmd[0] != -1 ) return 0;
bstate->extracmd[0] = BPMSG_SKIP;
sprintf(bstate->extracmd+1, "%s %ld %ld %ld", recvfi.fn, recvfi.sz, recvfi.tm);
@ -762,7 +768,7 @@ case BPMSG_FILE: /* File information */
}
if (bstate->frs!=frs_nothing && bstate->frs!=frs_skipping) {
log("strange receiving mode %d", bstate->frs);
DEB((D_24554, "strange receiving mode %d", bstate->frs));
PROTO_ERROR("invalid mode for M_FILE");
}
@ -774,7 +780,7 @@ case 0:
bstate->frs = frs_data;
return 1;
}
log("making M_GET to skip downloaded part");
DEB((D_24554, "making M_GET to skip downloaded part"));
bstate->extracmd[0] = BPMSG_GET;
sprintf(bstate->extracmd+1, "%s %ld %ld %ld",
bstate->pi->recv->net_name, (long)bstate->pi->recv->bytes_total,
@ -784,7 +790,7 @@ case 0:
bstate->frs = frs_didget;
return 1;
case 1:
log("SKIP (non-destructive)");
DEB((D_24554, "SKIP, non-destructive"));
bstate->extracmd[0] = BPMSG_SKIP;
sprintf(bstate->extracmd+1, "%s %ld %ld", bstate->pi->recv->net_name, (long)bstate->pi->recv->bytes_total,
(long)bstate->pi->recv->mod_time);
@ -792,7 +798,7 @@ case 1:
bstate->frs = frs_skipping;
return 1;
case 2:
log("SKIP (destructive)");
DEB((D_24554, "SKIP, destructive"));
bstate->extracmd[0] = BPMSG_GOT;
sprintf(bstate->extracmd+1, "%s %ld %ld",
bstate->pi->recv->net_name, (long)bstate->pi->recv->bytes_total,
@ -806,7 +812,7 @@ default:
PROTO_ERROR("never should get here");
case BPMSG_OK: /* Password was acknowleged (data ignored) */
log("received M_OK len=%d", block_length);
DEB((D_24554, "received M_OK len=%d", block_length));
if (bstate->mode != bmode_outgoing_handshake) {
PROTO_ERROR("unexpected M_OK");
}
@ -818,12 +824,12 @@ case BPMSG_OK: /* Password was acknowleged (data ignored) */
bstate->extraislast = true;
return 2;
}
log("outoing handshake successfully complete");
DEB((D_24554, "outoing handshake successfully complete"));
bstate->complete = true;
return 2;
case BPMSG_EOB: /* End Of Batch (data ignored) */
log("received M_EOB len=%d", block_length);
DEB((D_24554, "received M_EOB len=%d", block_length));
if (bstate->mode != bmode_transfer) {
PROTO_ERROR("unexpected M_EOB");
}
@ -832,7 +838,7 @@ case BPMSG_EOB: /* End Of Batch (data ignored) */
case BPMSG_GOT: /* File received */
case BPMSG_SKIP:
log("received GOT/SKIP len=%d", block_length);
DEB((D_24554, "received GOT/SKIP len=%d", block_length));
if (bstate->mode != bmode_transfer) {
PROTO_ERROR("unexpected M_GOT/M_SKIP");
}
@ -843,7 +849,7 @@ case BPMSG_SKIP:
}
if (strcmp (bstate->pi->send->net_name, fi.fn) == 0 && bstate->pi->send->status != FSTAT_WAITACK) {
log("aborting current file");
DEB((D_24554, "aborting current file"));
if (bstate->pi->send->netspool) {
PROTO_ERROR("cannot SKIP or REFUSE netspool");
}
@ -863,7 +869,7 @@ case BPMSG_SKIP:
bstate->pi->send->status = FSTAT_REFUSED;
} else {
if (bstate->pi->send->status == FSTAT_WAITACK) {
log("confirmed %s", fi.fn);
DEB((D_24554, "confirmed %s", fi.fn));
bstate->pi->send->status = FSTAT_SUCCESS;
} else {
log("confirmed not sent file - skipped %s", fi.fn);
@ -873,7 +879,7 @@ case BPMSG_SKIP:
bstate->pi->send->status = FSTAT_SKIPPED;
}
}
log("closing file");
DEB((D_24554, "closing file"));
p_tx_fclose(bstate->pi);
bstate->pi->send = tmp;
goto check_that_all_files_are_confirmed;
@ -886,12 +892,12 @@ check_that_all_files_are_confirmed:
int i;
for (i = 0; i < bstate->pi->n_sentfiles; i++) {
if (bstate->pi->sentfiles[i].status == FSTAT_WAITACK) {
log("sent file %d waits for acknowlede", i);
DEB((D_24554, "sent file %d waits for acknowlede", i));
return 1;
}
}
}
log("all files are confirmed");
DEB((D_24554, "all files are confirmed"));
bstate->waiting_got = false;
return 1;
@ -906,23 +912,23 @@ case BPMSG_BSY: /* All AKAs are busy */
return 3;
case BPMSG_GET: /* Get a file from offset */
log("received M_GET len=%d", block_length);
DEB((D_24554, "received M_GET len=%d", block_length));
if (bstate->mode != bmode_transfer) {
PROTO_ERROR("unexpected M_GET");
}
s_bpfinfo getfi;
if (binkp_parsfinfo(buf+1, &getfi, true) != 0) {
log("error parsing M_GET %s", buf+1);
DEB((D_24554, "error parsing M_GET %s", buf+1));
PROTO_ERROR("invalid M_GET");
}
log("M_GET file %s size %d time %d offset %d", getfi.fn, getfi.sz, getfi.tm, getfi.offs);
DEB((D_24554, "M_GET file %s size %d time %d offset %d", getfi.fn, getfi.sz, getfi.tm, getfi.offs));
if (bstate->extracmd[0] != -1) return 0;
if (bstate->pi->send) if (p_compfinfo(bstate->pi->send, getfi.fn, getfi.sz, getfi.tm)==0) {
log("M_GET for currently transmitted file");
DEB((D_24554, "M_GET for currently transmitted file"));
if (getfi.offs==bstate->pi->send->bytes_sent) {
log("M_GET offset match current (seems NR mode)");
DEB((D_24554, "M_GET offset match current, seems NR mode"));
// go to sending M_FILE
bstate->phase = 2;
bstate->extracmd[0] = BPMSG_FILE;
@ -937,7 +943,7 @@ case BPMSG_GET: /* Get a file from offset */
}
if (bstate->pi->send) if (bstate->pi->send->netspool) {
log("ignore differing M_GET for netspool");
DEB((D_24554, "ignore differing M_GET for netspool"));
bstate->continuesend = true;
return 1;
}
@ -945,7 +951,7 @@ case BPMSG_GET: /* Get a file from offset */
if (bstate->pi->send) if (p_compfinfo(bstate->pi->send, getfi.fn, getfi.sz, getfi.tm)==0) {
log("resending \"%s\" from %ld offset", bstate->pi->send->net_name, (long)getfi.offs);
if( p_tx_rewind(bstate->pi, getfi.offs) != 0 ) {
log("failed to rewind");
DEB((D_24554, "failed to rewind"));
p_tx_fclose(bstate->pi);
PROTO_ERROR("seek error")
}
@ -961,7 +967,7 @@ case BPMSG_GET: /* Get a file from offset */
}
if( bstate->pi->send ) {
log("aborting current file");
DEB((D_24554, "aborting current file"));
p_tx_fclose(bstate->pi);
}
@ -973,7 +979,7 @@ case BPMSG_GET: /* Get a file from offset */
PROTO_ERROR("could not satisfy M_GET");
}
if( p_tx_rewind(bstate->pi, getfi.offs) != 0 ) {
log("failed to rewind");
DEB((D_24554, "failed to rewind"));
p_tx_fclose(bstate->pi);
PROTO_ERROR("seek error 2");
}
@ -989,21 +995,21 @@ case BPMSG_GET: /* Get a file from offset */
bstate->continuesend = true;
return 1;
}
log("unknown command %d received", buf[0]);
DEB((D_24554, "unknown command %d received", buf[0]));
PROTO_ERROR("invalid command")
case BINKP_BLK_DATA:
//if there is file in progress
log("data block received length=%d", block_length);
DEB((D_24554, "data block received length=%d", block_length));
if (block_length==0) {
log("ignore zero length data block, argus workaround");
log("warning: remote have sent zero length data block");
return 1;
}
if (bstate->frs == frs_nothing) {
PROTO_ERROR("unexpected data block");
}
if (bstate->frs == frs_didget || bstate->frs == frs_skipping) {
log("did M_GET or M_GOT or M_SKIP, skipping data");
DEB((D_24554, "did M_GET or M_GOT or M_SKIP, skipping data"));
return 1;
}
@ -1044,7 +1050,7 @@ case BINKP_BLK_DATA:
PROTO_ERROR("extra data for file")
}
else if( bstate->pi->recv->bytes_received == bstate->pi->recv->bytes_total ) {
log("receive completed");
DEB((D_24554, "receive completed"));
bstate->frs = frs_nothing;
bstate->pi->recv->status = FSTAT_SUCCESS;
if( !p_rx_fclose(bstate->pi) ) {
@ -1056,7 +1062,7 @@ case BINKP_BLK_DATA:
return 1;
}
else {
log("some error committing file");
DEB((D_24554, "some error committing file"));
bstate->extracmd[0] = BPMSG_SKIP;
sprintf(bstate->extracmd+1, "%s %ld %ld",
bstate->pi->recv->net_name, (long)bstate->pi->recv->bytes_total,
@ -1065,7 +1071,7 @@ case BINKP_BLK_DATA:
return 1;
}
} else {
log("data block accepted");
DEB((D_24554, "data block accepted"));
return 1;
}
}
@ -1129,6 +1135,13 @@ void binkp_process_NUL(s_binkp_sysinfo *remote_data, char *buffer)
else
strnxcpy(remote_data->progname, buffer+4, sizeof(remote_data->progname));
}
else if( strncmp(buffer, "TRF ", 4) == 0 ) {
// usually 24554 protocol mailers send only netmail size and arcmail+files size
DEB((D_24554, "process TRF"));
if( sscanf(buffer, "TRF %d %d", &remote_data->TRF_PKT, &remote_data->TRF_other)==2 ) {
remote_data->has_TRF = true;
}
}
else
log("BinkP NUL: \"%s\"", string_printable(buffer)); // NUL cannot be invalid as it is optional info
}
@ -1152,11 +1165,11 @@ int binkp_auth_incoming(s_binkp_sysinfo *remote_data)
if( remote_data->challenge_length > 0
&& strncmp(remote_data->passwd, "CRAM-MD5-", 9) == 0 )
{
//log("md5 auth addrs %s", remote_data->addrs);
//log("md5 auth anum %d", remote_data->anum);
//log("md5 auth passwd %s", remote_data->passwd + 9);
//log("md5 auth challenge %s", remote_data->challenge);
//log("md5 auth challenge len %d", remote_data->challenge_length);
//DEB((D_24554, "md5 auth addrs %s", remote_data->addrs));
//DEB((D_24554, "md5 auth anum %d", remote_data->anum));
//DEB((D_24554, "md5 auth passwd %s", remote_data->passwd + 9));
//DEB((D_24554, "md5 auth challenge %s", remote_data->challenge));
//DEB((D_24554, "md5 auth challenge len %d", remote_data->challenge_length));
return session_addrs_check(state.remoteaddrs,
state.n_remoteaddr,
remote_data->passwd + 9,
@ -1164,7 +1177,7 @@ int binkp_auth_incoming(s_binkp_sysinfo *remote_data)
remote_data->challenge_length);
}
log("plain-text auth");
DEB((D_24554, "plain-text auth"));
return session_addrs_check(state.remoteaddrs, state.n_remoteaddr,
remote_data->passwd, NULL, 0);
}

@ -56,7 +56,7 @@ s_handshake_protocol handshake_protocol_binkp = {
binkp_remote_phone,
binkp_remote_flags,
binkp_remote_mailer,
NULL,
binkp_remote_traffic,
/* Section 3 */
// binkp_local_address,
binkp_local_password
@ -78,7 +78,7 @@ void binkp_init(s_handshake_protocol *THIS)
void binkp_deinit(s_handshake_protocol *THIS)
{
log("binkp_deinit");
DEB((D_FREE, "binkp_deinit"));
if (THIS==NULL) {
log("THIS==NULL");
return;
@ -97,7 +97,7 @@ void binkp_deinit(s_handshake_protocol *THIS)
free(THIS->local_data);
THIS->local_data = NULL;
}
log("binkp_deinit end");
DEB((D_FREE, "binkp_deinit end"));
}
@ -291,3 +291,19 @@ char *binkp_local_password(s_handshake_protocol *THIS)
return NULL;
}
int binkp_remote_traffic(s_handshake_protocol *THIS, s_traffic *dest)
{
ASSERT(THIS);
ASSERT(THIS->remote_data);
ASSERT(dest);
memset(dest, '\0', sizeof(s_traffic));
if (((s_binkp_sysinfo *)THIS->remote_data)->has_TRF) {
dest->netmail_size = ((s_binkp_sysinfo *)THIS->remote_data)->TRF_PKT;
dest->arcmail_size = 0;
dest->files_size = ((s_binkp_sysinfo *)THIS->remote_data)->TRF_other;
return 0;
}
return -1;
}

@ -44,7 +44,7 @@ int binkp_parsfinfo(const char *str, s_bpfinfo *fi, bool with_offset)
log("too long string, overflow may occur");
return -1;
}
log("info to parse: %s", str);
DEB((D_24554, "info to parse: %s", str));
r = sscanf(str, with_offset? "%s %d %d %d": "%s %d %d", &fi->fn, &fi->sz, &fi->tm, &fi->offs);
chkslash = fi->fn;
while (1) {

@ -43,7 +43,7 @@ const char *Protocols[] =
static int prot_get_next_file(s_filelist **dest, s_protinfo *pi)
{
log("prot_get_next_file"); // %s %d", hint->fn, hint->sz);
DEB((D_OUTBOUND, "prot_get_next_file")); // %s %d", hint->fn, hint->sz);
s_filelist *ptrl = NULL;
s_filelist *best = NULL;
s_fsqueue *q = &state.queue;
@ -53,7 +53,7 @@ static int prot_get_next_file(s_filelist **dest, s_protinfo *pi)
/* local queue */
for( ptrl = q->fslist; ptrl; ptrl = ptrl->next ) {
//log("scan %s", ptrl->fname);
//DEB((D_OUTBOUND, "scan %s", ptrl->fname));
if (hint) if (strcmp(hint->fn, ptrl->fname) !=0 || hint->sz != ptrl->size) continue;
if( ptrl->status == STATUS_WILLSEND )
{
@ -91,7 +91,7 @@ static int prot_get_next_file(s_filelist **dest, s_protinfo *pi)
best = ptrl;
}
}
//log("scan1 done");
//DEB((D_OUTBOUND, log("scan1 done");
if( best )
{
@ -107,16 +107,16 @@ static int prot_get_next_file(s_filelist **dest, s_protinfo *pi)
return 0;
}
}
//log("scan2 done");
//DEB((D_OUTBOUND, log("scan2 done");
/* network queue */
#ifdef NETSPOOL
if (hint) return 1; // cannot choose
/*log("netspool next file");*/
/*DEB((D_OUTBOUND, log("netspool next file");*/
if(state.netspool.state == NS_NOTINIT) {
/*log("new netspool connection");*/
/*DEB((D_OUTBOUND, log("new netspool connection");*/
#define ADDRBUF 3000
#define SMALLBUF 128
char password[SMALLBUF];
@ -126,7 +126,7 @@ static int prot_get_next_file(s_filelist **dest, s_protinfo *pi)
char *host = conf_string(cf_netspool_host);
char *port = conf_string(cf_netspool_port);
if(host==NULL) {
//log("netspool is not configured");
//DEB((D_OUTBOUND, log("netspool is not configured");
state.netspool.state = NS_UNCONF;
} else {
if (state.n_remoteaddr==0) {
@ -145,7 +145,7 @@ static int prot_get_next_file(s_filelist **dest, s_protinfo *pi)
log("no buffer space for address %s", address);
break;
}
log("add address %s", address);
DEB((D_OUTBOUND, "add address %s", address));
memcpy (addresses+pos, address, alen);
pos += alen;
addresses[pos++] = 0;
@ -163,26 +163,26 @@ static int prot_get_next_file(s_filelist **dest, s_protinfo *pi)
}
if(state.netspool.state == NS_READY) {
/*log("netspool request");*/
/*DEB((D_OUTBOUND, log("netspool request");*/
netspool_query(&state.netspool, "ALL");
}
if(state.netspool.state == NS_RECEIVING) {
//log("netspool begin receive");
//DEB((D_OUTBOUND, log("netspool begin receive");
netspool_receive(&state.netspool);
} else {
//log("netspool could not start receive");
//DEB((D_OUTBOUND, log("netspool could not start receive");
return 1;
}
if(state.netspool.state == NS_RECVFILE) {
/*log("netspool start file");*/
/*DEB((D_OUTBOUND, log("netspool start file");*/
*dest = NULL;
return 0;
}
if(state.netspool.state == NS_READY) {
//log("netspool queue empty");
//DEB((D_OUTBOUND, log("netspool queue empty");
netspool_end(&state.netspool);
}
@ -254,42 +254,42 @@ int p_tx_fopen(s_protinfo *pi, s_filehint *hint)
return 1;
if (hint) {
log("trying to reopen file %s size %d time %d", hint->fn, hint->sz, hint->tm);
DEB((D_OUTBOUND, "trying to reopen file %s size %d time %d", hint->fn, hint->sz, hint->tm));
int i;
for (i=0; i++; i<pi->n_sentfiles) {
log("check %s %d %d", pi->sentfiles[i].net_name, pi->sentfiles[i].bytes_total, pi->sentfiles[i].mod_time);
DEB((D_OUTBOUND, "check %s %d %d", pi->sentfiles[i].net_name, pi->sentfiles[i].bytes_total, pi->sentfiles[i].mod_time));
if (strcmp(pi->sentfiles[i].net_name, hint->fn)==0) {
log("name match");
DEB((D_OUTBOUND, "name match"));
if (pi->sentfiles[i].bytes_total == hint->sz) {
log("size match");
DEB((D_OUTBOUND, "size match"));
if (pi->sentfiles[i].mod_time == hint->tm) {
log("time match");
DEB((D_OUTBOUND, "time match"));
if (!pi->sentfiles[i].fp) {
log("already closed");
DEB((D_OUTBOUND, "already closed"));
return -1;
}
pi->send = pi->sentfiles + i;
pi->send->eofseen = FALSE;
pi->send->status = FSTAT_PROCESS;
log("reopened %s", pi->send->fname);
DEB((D_OUTBOUND, "reopened %s", pi->send->fname));
return 0;
}
}
}
}
log("no file for this hint");
DEB((D_OUTBOUND, "no file for this hint"));
return -1;
}
get_next_file:
if( prot_get_next_file(&ptrl, pi) ) {
log("no next file");
DEB((D_OUTBOUND, "no next file"));
return 1;
}
if( ptrl ) {
log("sending local file");
DEB((D_OUTBOUND, "sending local file"));
/* Mark this file as "processed" */
ptrl->status = STATUS_SENDING;
@ -328,14 +328,14 @@ get_next_file:
*/
if( pi->sentfiles && pi->n_sentfiles > 0 )
{
log("adding file to sentfile");
DEB((D_OUTBOUND, "adding file to sentfile"));
pi->sentfiles = (s_finfo *)xrealloc(pi->sentfiles, sizeof(s_finfo)*(pi->n_sentfiles+1));
memset(&pi->sentfiles[pi->n_sentfiles], '\0', sizeof(s_finfo));
pi->send = &pi->sentfiles[pi->n_sentfiles++];
}
else
{
log("adding file to new sentfile");
DEB((D_OUTBOUND, "adding file to new sentfile"));
pi->sentfiles = (s_finfo *)xmalloc(sizeof(s_finfo));
memset(pi->sentfiles, '\0', sizeof(s_finfo));
pi->send = pi->sentfiles;
@ -407,7 +407,7 @@ get_next_file:
int p_tx_rewind(s_protinfo *pi, size_t pos)
{
if( !pi || !pi->send || !pi->send->fp) {
log("cannot rewind");
DEB((D_OUTBOUND, "cannot rewind"));
return -1;
}
return fseek(pi->send->fp, pos, SEEK_SET);
@ -469,7 +469,7 @@ int p_tx_fclose(s_protinfo *pi)
long cps = 0;
if (!pi->send) {
log("already closed");
DEB((D_OUTBOUND, "already closed"));
return -1;
}
@ -541,7 +541,7 @@ int p_tx_fclose(s_protinfo *pi)
break;
#ifdef NETSPOOL
case ACTION_ACKNOWLEDGE:
log("netspool commit %s", state.netspool.filename);
DEB((D_OUTBOUND, "netspool commit %s", state.netspool.filename));
netspool_acknowledge(&state.netspool);
break;
#endif
@ -574,7 +574,7 @@ long int p_tx_readfile(char *buffer, size_t buflen, s_protinfo *pi)
#ifdef NETSPOOL
if (pi->send->netspool) {
/*log("reading netspool file");*/
/*DEB((D_OUTBOUND, log("reading netspool file");*/
if( state.netspool.state != NS_RECVFILE ) {
log("send: wrong netspool state");
pi->send->status = FSTAT_SKIPPED;
@ -587,10 +587,10 @@ long int p_tx_readfile(char *buffer, size_t buflen, s_protinfo *pi)
pi->send->status = FSTAT_SKIPPED;
return -2;
}
/*log("got %d bytes from netspool", n);*/
/*DEB((D_OUTBOUND, log("got %d bytes from netspool", n);*/
return n;
} else {
/*log("reading local file");*/
/*DEB((D_OUTBOUND, log("reading local file");*/
}
#endif
/*
@ -749,9 +749,9 @@ static int p_move2inbound(s_protinfo *pi)
{
log("recv: cannot get unique name for \"%s\"",
pi->recv->local_name);
log("free realname");
DEB((D_FREE, "free realname"));
free(realname);
log("freed");
DEB((D_FREE, "freed"));
return 1;
}
@ -799,14 +799,14 @@ static int p_move2inbound(s_protinfo *pi)
}
if( realname ) {
log("free realname");
DEB((D_FREE, "free realname"));
free(realname);
log("freed");
DEB((D_FREE, "freed"));
}
if( uniqname ) {
log("free uniqname");
DEB((D_FREE, "free uniqname"));
free(uniqname);
log("freed");
DEB((D_FREE, "freed"));
}
return rc ? 1 : 0;
@ -988,13 +988,13 @@ int p_rx_fopen(s_protinfo *pi, char *fn, size_t sz, time_t tm, mode_t mode)
if( pi->recv->mod_time == localtogmt(st.st_mtime)
&& pi->recv->bytes_total == st.st_size )
{
log("recv: allready have \"%s\"", fname);
log("recv: already have \"%s\"", fname);
pi->recv->status = FSTAT_SKIPPED;
}
}
log("free fname");
DEB((D_FREE, "free fname"));
free(fname); fname = NULL;
log("freed");
DEB((D_FREE, "freed"));
if( pi->recv->status == FSTAT_SKIPPED )
return 2;
@ -1022,10 +1022,10 @@ int p_rx_fopen(s_protinfo *pi, char *fn, size_t sz, time_t tm, mode_t mode)
else
pi->recv->status = FSTAT_REFUSED;
log("free pi->recv->fname");
DEB((D_FREE, "free pi->recv->fname"));
free(pi->recv->fname);
pi->recv->fname = NULL;
log("freed");
DEB((D_FREE, "freed"));
return pi->recv->status == FSTAT_SKIPPED ? 2 : 1;
}
@ -1064,8 +1064,10 @@ int p_rx_fopen(s_protinfo *pi, char *fn, size_t sz, time_t tm, mode_t mode)
logerr("recv: cannot open \"%s\" -> refuse", pi->recv->fname);
pi->recv->status = FSTAT_REFUSED;
DEB((D_FREE, "p_rx_open free"));
free(pi->recv->fname);
pi->recv->fname = NULL;
DEB((D_FREE, "p_rx_open ok"));
return 1;
}
@ -1595,8 +1597,10 @@ char *prot_unique_name(char *dirname, char *fname, int type)
*p = 'A';
else if( --p < result || *p == '.' || *p == '/' )
{
DEB((D_FREE, "free result"));
free(result);
result = NULL;
DEB((D_FREE, "result ok"));
break;
}
}
@ -1627,8 +1631,11 @@ char *prot_unique_name(char *dirname, char *fname, int type)
if( try >= MAX_TRIES )
{
if( result )
if( result ) {
DEB((D_FREE, "free result"));
free(result);
DEB((D_FREE, "result ok"));
}
return NULL;
}
@ -1647,7 +1654,7 @@ char *prot_unique_name(char *dirname, char *fname, int type)
*/
void deinit_finfo(s_finfo *fi)
{
log("deinit_finfo");
DEB((D_FREE, "deinit_finfo"));
if( fi->fp )
fclose(fi->fp);
@ -1659,7 +1666,7 @@ void deinit_finfo(s_finfo *fi)
free(fi->fname);
memset(fi, '\0', sizeof(s_finfo));
log("deinit_finfo end");
DEB((D_FREE, "deinit_finfo end"));
}
/*****************************************************************************
@ -1777,7 +1784,7 @@ void init_protinfo(s_protinfo *pi, bool caller)
void deinit_protinfo(s_protinfo *pi)
{
int i;
log("deinit_protinfo");
DEB((D_FREE, "deinit_protinfo"));
for( i = 0; i < pi->n_sentfiles; i++ )
deinit_finfo(&pi->sentfiles[i]);
@ -1793,5 +1800,5 @@ void deinit_protinfo(s_protinfo *pi)
free(pi->rcvdfiles);
memset(pi, '\0', sizeof(s_protinfo));
log("deinit_protinfo end");
DEB((D_FREE, "deinit_protinfo end"));
}

@ -69,10 +69,6 @@ int answ_system(e_session type, char *connstr, int inetd)
gotoexit(BFERR_FATALERROR);
}
#ifdef DEBUG
(void)debug_setfilename(log_getfilename(LOG_FILE_DEBUG));
#endif
if( inetd )
{
if( connstr && *connstr )

@ -249,10 +249,6 @@ int call_system_quiet(const char *connstr, bool inet)
return BFERR_FATALERROR;
}
#ifdef DEBUG
(void)debug_setfilename(log_getfilename(LOG_FILE_DEBUG));
#endif
if( inet )
{
if( connstr && *connstr )
@ -350,10 +346,6 @@ int call_system_modem(void)
log("can't continue without logging");
return BFERR_FATALERROR;
}
#ifdef DEBUG
(void)debug_setfilename(log_getfilename(LOG_FILE_DEBUG));
#endif
if( (rc = port_open(state.modemport, 1, &oldtio)) == 0 )
{
@ -505,10 +497,6 @@ int call_system_tcpip(int callwith) // only TCPIP values
log("can't continue without logging");
return BFERR_FATALERROR;
}
#ifdef DEBUG
(void)debug_setfilename(log_getfilename(LOG_FILE_DEBUG));
#endif
switch( callwith ) {
case CALL_TCPIP_BINKP:

@ -164,7 +164,7 @@ void init_state(s_state *pstate)
void deinit_state(s_state *pstate)
{
log("deinit_state begin");
DEB((D_FREE, "deinit_state begin"));
if (pstate->linename) free(pstate->linename);
if (pstate->cidstr) free(pstate->cidstr);
if (pstate->peername) free(pstate->peername);
@ -185,7 +185,7 @@ void deinit_state(s_state *pstate)
memset(pstate, '\0', sizeof(s_state));
pstate->session_rc = -1;
log("deinit_state end");
DEB((D_FREE, "deinit_state end"));
}
s_faddr *session_1remote_address()

@ -161,7 +161,7 @@ int session_addrs_check(s_sysaddr *addrs, int anum, const char *passwd,
/* Encode digest to the hex string */
string_bin_to_hex(digest_hex, digest_bin, 16);
log("good password is %s", digest_hex);
//log("good password is %s", digest_hex);
if( strcasecmp(passwd, digest_hex) == 0 )
good_passwd = TRUE;
@ -621,7 +621,7 @@ void session_traffic(void)
rc = session_traffic_set_incoming(&state.traff_recv);
session_traffic_log(TRUE, rc ? NULL : &state.traff_recv);
/* Outgoing traffic must be allread calculated */
/* Outgoing traffic must be already calculated */
session_traffic_log(FALSE, &state.traff_send);
}

@ -161,7 +161,9 @@ int plock_create(const char *lockname)
*++p = '\0';
else
{
DEB((D_FREE, "plock free"));
free(tmpname);
DEB((D_FREE, "plock freed"));
return PLOCK_ERROR;
}
tmpname = xstrcat(tmpname, "bforce-XXXXXX");
@ -169,7 +171,9 @@ int plock_create(const char *lockname)
if( (p = mktemp(tmpname)) == NULL )
{
logerr("can't generate unique file name from \"%s\"", tmpname);
DEB((D_FREE, "plock free"));
free(tmpname);
DEB((D_FREE, "plock freed"));
return PLOCK_ERROR;
}
@ -179,7 +183,9 @@ int plock_create(const char *lockname)
DEB((D_OUTBOUND, "out_bsy_createfile: createlink(\"%s\", \"%s\"), rc = %d",
lockname, p, rc));
DEB((D_FREE, "plock free"));
free(tmpname);
DEB((D_FREE, "plock freed"));
return rc;
}

48
source/configure vendored

@ -1,8 +1,8 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
# Generated by GNU Autoconf 2.68 for bforce 0.22.9.
# Generated by GNU Autoconf 2.68 for bforce 0.24.
#
# Report bugs to <e.kozhuhovskiy@gmail.com>.
# Report bugs to <sergey@fidoman.ru>.
#
#
# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
@ -238,11 +238,11 @@ fi
$as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should"
$as_echo "$0: be upgraded to zsh 4.3.4 or later."
else
$as_echo "$0: Please tell bug-autoconf@gnu.org and
$0: e.kozhuhovskiy@gmail.com about your system, including
$0: any error possibly output before this message. Then
$0: install a modern shell, or manually run the script
$0: under such a shell if you do have one."
$as_echo "$0: Please tell bug-autoconf@gnu.org and sergey@fidoman.ru
$0: about your system, including any error possibly output
$0: before this message. Then install a modern shell, or
$0: manually run the script under such a shell if you do
$0: have one."
fi
exit 1
fi
@ -560,9 +560,9 @@ MAKEFLAGS=
# Identity of this package.
PACKAGE_NAME='bforce'
PACKAGE_TARNAME='bforce'
PACKAGE_VERSION='0.22.9'
PACKAGE_STRING='bforce 0.22.9'
PACKAGE_BUGREPORT='e.kozhuhovskiy@gmail.com'
PACKAGE_VERSION='0.24'
PACKAGE_STRING='bforce 0.24'
PACKAGE_BUGREPORT='sergey@fidoman.ru'
PACKAGE_URL=''
ac_default_prefix=/usr/local/fido
@ -1243,7 +1243,7 @@ if test "$ac_init_help" = "long"; then
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
\`configure' configures bforce 0.22.9 to adapt to many kinds of systems.
\`configure' configures bforce 0.24 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@ -1309,7 +1309,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
short | recursive ) echo "Configuration of bforce 0.22.9:";;
short | recursive ) echo "Configuration of bforce 0.24:";;
esac
cat <<\_ACEOF
@ -1354,7 +1354,7 @@ Some influential environment variables:
Use these variables to override the choices made by `configure' or to help
it to find libraries and programs with nonstandard names/locations.
Report bugs to <e.kozhuhovskiy@gmail.com>.
Report bugs to <sergey@fidoman.ru>.
_ACEOF
ac_status=$?
fi
@ -1417,7 +1417,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
bforce configure 0.22.9
bforce configure 0.24
generated by GNU Autoconf 2.68
Copyright (C) 2010 Free Software Foundation, Inc.
@ -1664,9 +1664,9 @@ $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;}
$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;}
{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
( $as_echo "## --------------------------------------- ##
## Report this to e.kozhuhovskiy@gmail.com ##
## --------------------------------------- ##"
( $as_echo "## -------------------------------- ##
## Report this to sergey@fidoman.ru ##
## -------------------------------- ##"
) | sed "s/^/$as_me: WARNING: /" >&2
;;
esac
@ -1840,7 +1840,7 @@ cat >config.log <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
It was created by bforce $as_me 0.22.9, which was
It was created by bforce $as_me 0.24, which was
generated by GNU Autoconf 2.68. Invocation command line was
$ $0 $@
@ -4961,7 +4961,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
This file was extended by bforce $as_me 0.22.9, which was
This file was extended by bforce $as_me 0.24, which was
generated by GNU Autoconf 2.68. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@ -5017,13 +5017,13 @@ $config_files
Configuration headers:
$config_headers
Report bugs to <e.kozhuhovskiy@gmail.com>."
Report bugs to <sergey@fidoman.ru>."
_ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
ac_cs_version="\\
bforce config.status 0.22.9
bforce config.status 0.24
configured by $0, generated by GNU Autoconf 2.68,
with options \\"\$ac_cs_config\\"
@ -6253,7 +6253,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
This file was extended by bforce $as_me 0.22.9, which was
This file was extended by bforce $as_me 0.24, which was
generated by GNU Autoconf 2.68. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@ -6309,13 +6309,13 @@ $config_files
Configuration headers:
$config_headers
Report bugs to <e.kozhuhovskiy@gmail.com>."
Report bugs to <sergey@fidoman.ru>."
_ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
ac_cs_version="\\
bforce config.status 0.22.9
bforce config.status 0.24
configured by $0, generated by GNU Autoconf 2.68,
with options \\"\$ac_cs_config\\"

@ -3,7 +3,7 @@ dnl
dnl $Id$
dnl
#AC_INIT(bforce/bforce.c)
AC_INIT([bforce],[0.22.9],[e.kozhuhovskiy@gmail.com])
AC_INIT([bforce],[0.24],[sergey@fidoman.ru])
AC_CONFIG_HEADER(include/config.h)
AC_CANONICAL_SYSTEM
dnl # Minimum Autoconf version required.

@ -14,22 +14,6 @@
#ifndef _BFORCE_H_
#define _BFORCE_H_
#ifndef DAEMON_LOGFILE
#define DAEMON_LOGFILE "/var/log/bforce/bf-daemon"
#endif
#ifndef BFORCE_LOGFILE
#define BFORCE_LOGFILE "/var/log/bforce/bf-log"
#endif
#ifndef BFORCE_DEBFILE
#define BFORCE_DEBFILE "/var/log/bforce/bf-debug"
#endif
#ifndef BFORCE_CFGFILE
#define BFORCE_CFGFILE "/etc/bforce/bforce.conf"
#endif
/*
* BinkleyForce limits
*/
@ -39,9 +23,6 @@
#define BF_MAXDOMAIN 40
#define BF_MAXADDRSTR 80
/* IP-only nodes phone */
#define NO_PSTN_PHONE "00-00-000000"
/*
* Maximum length of file name (without path)
*/

@ -319,7 +319,7 @@ typedef struct conf_entry {
CT_STRING,
CT_TRANSLATE,
CT_TRIES,
CT_DEBLEVEL,
// CT_DEBLEVEL,
CT_FILEBOX
} type;
s_cval_entry *data;

@ -46,6 +46,8 @@ enum { LOG_FILE_DAEMON, LOG_FILE_SESSION, LOG_FILE_DEBUG, LOG_FILE_HISTORY };
# define D_FREQ 0x0000400L
# define D_STATEM 0x0000800L
# define D_DAEMON 0x0001000L
# define D_24554 0x0002000L
# define D_FREE 0x0004000L
# define D_FULL 0xfffffffL
#endif
@ -67,13 +69,14 @@ int log(const char *s, ...);
int logerr(const char *s, ...);
#ifdef DEBUG
void debug_setlevel(long newlevel, bool logit);
//void debug_setlevel(long newlevel, bool logit);
bool debug_isopened(void);
void debug_setfilename(const char *debugname);
int debug_parsestring(char *str, unsigned long *deblevel);
int debug_open(const char *debugname);
int debug_close(void);
int debug(unsigned long what, const char *str, ...);
//void debug_setfilename(const char *debugname);
//int debug_parsestring(char *str, unsigned long *deblevel);
int debug_open();
int debug_close();
int debug(unsigned long what, const char *str, ...);
void debug_configure();
#endif
#endif

@ -82,6 +82,9 @@ typedef struct {
int options;
char challenge[BINKP_MAXCHALLENGE+1];
int challenge_length;
bool has_TRF;
int TRF_PKT;
int TRF_other;
} s_binkp_sysinfo;
@ -172,6 +175,7 @@ void binkp_log_sysinfo(s_binkp_sysinfo *binkp);
//void binkp_queue_sysinfo(s_bpinfo *bpi, s_binkp_sysinfo *binkp);
void binkp_set_sysinfo(s_binkp_sysinfo *binkp, s_faddr *remote_addr, bool caller);
void binkp_parse_options(s_binkp_sysinfo *binkp, char *options);
int binkp_remote_traffic(s_handshake_protocol *THIS, s_traffic *dest);
/* prot_binkp_api.c */
extern s_handshake_protocol handshake_protocol_binkp;

@ -12,5 +12,7 @@ CC=$PREFIX-gcc
export PATH CC CPP
#make clean
#./configure --prefix=/opt/bforce --host=mips-openwrt-linux --disable-syslog --enable-netspool
make && scp bin/bforce root@gw-home:/opt/bforce/bin
#./configure --prefix=/opt/bforce --host=mips-openwrt-linux --disable-syslog --enable-netspool
#--with-logdir=/home/fido/log --with-spooldir=/home/fido/bforce
#make && scp bin/bforce root@gw-home:/opt/bforce/bin/bforce-new
make && scp bin/bforce root@gw-home:/opt/bforce/bin/bforce
Loading…
Cancel
Save