logging, binkp TRF
This commit is contained in:
		
							parent
							
								
									f2d9c6e4a7
								
							
						
					
					
						commit
						441f4021c2
					
				| @ -1,3 +1,9 @@ | |||||||
|  | === 2012-03 === | ||||||
|  | 
 | ||||||
|  | $DEBUGLEVEL, $DEBUGFILE removed - please use configuration options | ||||||
|  | 
 | ||||||
|  | DNS zone support | ||||||
|  | 
 | ||||||
| === 2012-02 === | === 2012-02 === | ||||||
| 
 | 
 | ||||||
| Netspool support | Netspool support | ||||||
|  | |||||||
| @ -24,9 +24,6 @@ | |||||||
| ## Config reader directives: | ## Config reader directives: | ||||||
| ## | ## | ||||||
| ##   $INCLUDE    <filename>         Include this file | ##   $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'' | ##   $IFEXP      <expression>       All data between ``$IFEXP'' and ``$ENDIF'' | ||||||
| ##      <config_keyword> <value>    directives will be used with the specified | ##      <config_keyword> <value>    directives will be used with the specified | ||||||
| @ -35,8 +32,6 @@ | |||||||
| ## | ## | ||||||
| ## Examples: | ## Examples: | ||||||
| ## | ## | ||||||
| ##   $DEBUGLEVEL Outbound hShake |  | ||||||
| ## |  | ||||||
| ##   $IFEXP ((2:*/*.* | !protected) & Time 23:00-01:00) | ##   $IFEXP ((2:*/*.* | !protected) & Time 23:00-01:00) | ||||||
| ##     options NoFreqs | ##     options NoFreqs | ||||||
| ##     min_speed_in 14400 | ##     min_speed_in 14400 | ||||||
| @ -81,7 +76,13 @@ options NoDirZap NoJanus NoChat | |||||||
| #						 | #						 | ||||||
| #log_file_daemon /var/log/bforce/bf-daemon | #log_file_daemon /var/log/bforce/bf-daemon | ||||||
| #log_file /var/log/bforce/bf-log | #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_file /var/log/bforce/bf-debug | ||||||
|  | #debug_level info hshake prot | ||||||
| 
 | 
 | ||||||
| # | # | ||||||
| # Existing of this file forbid any outgoing modem calls. Existing of | # Existing of this file forbid any outgoing modem calls. Existing of | ||||||
| @ -90,16 +91,6 @@ options NoDirZap NoJanus NoChat | |||||||
| # | # | ||||||
| nodial_flag /etc/nodial | 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 | # Inbound directories | ||||||
| # | # | ||||||
|  | |||||||
| @ -1 +1 @@ | |||||||
| 0.22.9 | 0.24 | ||||||
|  | |||||||
| @ -31,11 +31,13 @@ SPOOLDIR	= @SPOOLDIR@ | |||||||
| DAEMON_LOGFILE	= $(LOGDIR)/bf-daemon | DAEMON_LOGFILE	= $(LOGDIR)/bf-daemon | ||||||
| BFORCE_LOGFILE	= $(LOGDIR)/bf-log | BFORCE_LOGFILE	= $(LOGDIR)/bf-log | ||||||
| BFORCE_DEBFILE	= $(LOGDIR)/bf-debug | BFORCE_DEBFILE	= $(LOGDIR)/bf-debug | ||||||
|  | BFORCE_DEBLEVEL	= 0L | ||||||
| BFORCE_CFGFILE	= $(CONFDIR)/bforce.conf | BFORCE_CFGFILE	= $(CONFDIR)/bforce.conf | ||||||
| 
 | 
 | ||||||
| DEFINES		= -DDAEMON_LOGFILE=\"$(DAEMON_LOGFILE)\" \
 | DEFINES		= -DDAEMON_LOGFILE=\"$(DAEMON_LOGFILE)\" \
 | ||||||
| 		-DBFORCE_LOGFILE=\"$(BFORCE_LOGFILE)\" \
 | 		-DBFORCE_LOGFILE=\"$(BFORCE_LOGFILE)\" \
 | ||||||
| 		-DBFORCE_DEBFILE=\"$(BFORCE_DEBFILE)\" \
 | 		-DBFORCE_DEBFILE=\"$(BFORCE_DEBFILE)\" \
 | ||||||
|  | 		-DBFORCE_DEBLEVEL=$(BFORCE_DEBLEVEL) \
 | ||||||
| 		-DBFORCE_CFGFILE=\"$(BFORCE_CFGFILE)\" \
 | 		-DBFORCE_CFGFILE=\"$(BFORCE_CFGFILE)\" \
 | ||||||
| 		-DBF_OS=\"@build_os@\" @DEFS@ | 		-DBF_OS=\"@build_os@\" @DEFS@ | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -1,8 +0,0 @@ | |||||||
| tx_zmodem |  | ||||||
| rx_zmodem |  | ||||||
| hydra |  | ||||||
| binkp_transfer |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
|   all of then do use p_tx_readfile |  | ||||||
|    |  | ||||||
| @ -423,12 +423,12 @@ 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"); | 		log("can't continue without logging"); | ||||||
| 		gotoexit(BFERR_FATALERROR); | 		gotoexit(BFERR_FATALERROR); | ||||||
| 	} | 	}*/ | ||||||
| */	 | 	 | ||||||
| 	/* Process primary config file */ | 	/* Process primary config file */ | ||||||
| 	if( opts.confname && *opts.confname ) | 	if( opts.confname && *opts.confname ) | ||||||
| 		rc = conf_readconf(opts.confname, 0); | 		rc = conf_readconf(opts.confname, 0); | ||||||
| @ -442,17 +442,12 @@ int main(int argc, char *argv[], char *envp[]) | |||||||
| 		(void)conf_readconf(opts.incname, 1); | 		(void)conf_readconf(opts.incname, 1); | ||||||
| 	 | 	 | ||||||
| 	/* Reopen log file if it was defined in config */ | 	/* 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"); | 		log("can't continue without logging"); | ||||||
| 		gotoexit(BFERR_FATALERROR); | 		gotoexit(BFERR_FATALERROR); | ||||||
| 	} | 	} | ||||||
| 	 | 	 | ||||||
| #ifdef DEBUG |  | ||||||
| 	/* Same for the debug file */ |  | ||||||
| 	(void)debug_setfilename(log_getfilename(LOG_FILE_DEBUG)); |  | ||||||
| #endif |  | ||||||
| 	 |  | ||||||
| 	//char runmode_str[21];
 | 	//char runmode_str[21];
 | ||||||
| 	//snprintf(runmode_str, 20, "Run mode: %d", opts.runmode);
 | 	//snprintf(runmode_str, 20, "Run mode: %d", opts.runmode);
 | ||||||
| 	//log(runmode_str);
 | 	//log(runmode_str);
 | ||||||
|  | |||||||
| @ -173,7 +173,7 @@ s_conf_entry bforce_config[BFORCE_NUMBER_OF_KEYWORDS+1] = { | |||||||
| #endif | #endif | ||||||
| #ifdef DEBUG | #ifdef DEBUG | ||||||
| 	CONF_KEY(debug_file,			CT_STRING), | 	CONF_KEY(debug_file,			CT_STRING), | ||||||
| 	CONF_KEY(debug_level,			CT_DEBLEVEL), | 	CONF_KEY(debug_level,			CT_STRING), | ||||||
| #endif | #endif | ||||||
| 	CONF_KEY(split_inbound,			CT_BOOLEAN), | 	CONF_KEY(split_inbound,			CT_BOOLEAN), | ||||||
| #ifdef NETSPOOL | #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_translate(s_translate *dest, char *value); | ||||||
| static int proc_speeddep(s_connlist *dest, char *value); | static int proc_speeddep(s_connlist *dest, char *value); | ||||||
| static int proc_tries(s_tries *dest, char *value); | static int proc_tries(s_tries *dest, char *value); | ||||||
| #ifdef DEBUG | //#ifdef DEBUG
 | ||||||
| static int proc_debuglevel(s_number *dest, char *value); | //static int proc_debuglevel(s_number *dest, char *value); move to reader
 | ||||||
| #endif | //#endif
 | ||||||
| static int proc_filebox(s_filebox *dest, char *value); | static int proc_filebox(s_filebox *dest, char *value); | ||||||
| 
 | 
 | ||||||
| static int append_config_entry(s_conf_entry *conf_ent, s_cval_entry *cval_entry) | 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: | 		case CT_TRIES: | ||||||
| 			rc = proc_tries(&temp_value.d.tries, copy); | 			rc = proc_tries(&temp_value.d.tries, copy); | ||||||
| 			break; | 			break; | ||||||
| #ifdef DEBUG | //#ifdef DEBUG
 | ||||||
| 		case CT_DEBLEVEL: | //		case CT_DEBLEVEL:
 | ||||||
| 			rc = proc_debuglevel(&temp_value.d.number, copy); | //			rc = proc_debuglevel(&temp_value.d.number, copy);
 | ||||||
| 			break; | //			break;
 | ||||||
| #endif | //#endif
 | ||||||
| 		case CT_FILEBOX: | 		case CT_FILEBOX: | ||||||
| 			rc = proc_filebox(&temp_value.d.filebox, copy); | 			rc = proc_filebox(&temp_value.d.filebox, copy); | ||||||
| 			break; | 			break; | ||||||
| @ -933,7 +933,7 @@ static int proc_tries(s_tries *dest, char *value) | |||||||
|  *  Line format: DebugLevel <Level> [<Level>].. |  *  Line format: DebugLevel <Level> [<Level>].. | ||||||
|  */ |  */ | ||||||
| #ifdef DEBUG | #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; | 	int rc = PROC_RC_OK; | ||||||
| 	long deblevel = 0L; | 	long deblevel = 0L; | ||||||
| @ -945,7 +945,7 @@ static int proc_debuglevel(s_number *dest, char *value) | |||||||
| 	dest->num = deblevel; | 	dest->num = deblevel; | ||||||
| 
 | 
 | ||||||
| 	return(rc); | 	return(rc); | ||||||
| } | } */ | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
| /*
 | /*
 | ||||||
|  | |||||||
| @ -32,10 +32,10 @@ const char *conf_getconfname(void) | |||||||
| 	return(name); | 	return(name); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| int conf_readpasswdlist(s_falist **pwdlist, char *fname) | /*int conf_readpasswdlist(s_falist **pwdlist, char *fname)
 | ||||||
| { | { | ||||||
| 	return(0); | 	return(0); | ||||||
| } | } */ | ||||||
| 
 | 
 | ||||||
| /*
 | /*
 | ||||||
|  *  Prepare config string for parsing, check for comments |  *  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) | int conf_readconf(const char *confname, int inclevel) | ||||||
| { | { | ||||||
|  | //        printf("%s %d\n", confname, inclevel);
 | ||||||
| 	FILE *fp = NULL; | 	FILE *fp = NULL; | ||||||
| 	char tmp[BF_MAXCFGLINE + 1]; | 	char tmp[BF_MAXCFGLINE + 1]; | ||||||
| 	int rc, maxrc = 0; | 	int rc, maxrc = 0; | ||||||
| @ -300,7 +301,7 @@ int conf_readconf(const char *confname, int inclevel) | |||||||
| 					isifexpr = FALSE; | 					isifexpr = FALSE; | ||||||
| 				} | 				} | ||||||
| 			} | 			} | ||||||
| 			else if( strcasecmp(p_key+1, "logfile") == 0 ) | /*			else if( strcasecmp(p_key+1, "logfile") == 0 )
 | ||||||
| 			{ | 			{ | ||||||
| 				if( value == NULL || expr ) | 				if( value == NULL || expr ) | ||||||
| 				{ | 				{ | ||||||
| @ -359,7 +360,7 @@ int conf_readconf(const char *confname, int inclevel) | |||||||
| 					rc = PROC_RC_IGNORE; | 					rc = PROC_RC_IGNORE; | ||||||
| 				} | 				} | ||||||
| #endif | #endif | ||||||
| 			} | 			}*/ | ||||||
| 			else | 			else | ||||||
| 			{ | 			{ | ||||||
| 				log("unknown directive `%s'", p_key); | 				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)); | 	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; | 	return maxrc; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| #ifdef DEBUG | #ifdef DEBUG | ||||||
| void debug_override(void) | /*void debug_override(void)
 | ||||||
| { | { | ||||||
| 	s_cval_entry *ptrl; | 	s_cval_entry *ptrl; | ||||||
| 	char abuf[BF_MAXADDRSTR+1]; | 	char abuf[BF_MAXADDRSTR+1]; | ||||||
| @ -452,6 +466,6 @@ void debug_override(void) | |||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	DEB((D_CONFIG, "debug_override: END")); | 	DEB((D_CONFIG, "debug_override: END")); | ||||||
| } | }*/ | ||||||
| #endif /* DEBUG */ | #endif /* DEBUG */ | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -914,10 +914,6 @@ int daemon_run(const char *confname, const char *incname, bool quit) | |||||||
| 				return BFERR_FATALERROR; | 				return BFERR_FATALERROR; | ||||||
| 			} | 			} | ||||||
| 
 | 
 | ||||||
| #ifdef DEBUG |  | ||||||
| 			(void)debug_setfilename(log_getfilename(LOG_FILE_DEBUG)); |  | ||||||
| #endif |  | ||||||
| 
 |  | ||||||
| 			log("%sstarting daemon (%s)", | 			log("%sstarting daemon (%s)", | ||||||
| 				started ? "re" : "", BF_VERSION); | 				started ? "re" : "", BF_VERSION); | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -32,7 +32,7 @@ static char  log_ttyname[32] = ""; | |||||||
|  * Local variables needed to make debug work |  * Local variables needed to make debug work | ||||||
|  */ |  */ | ||||||
| static FILE *debug_fp = NULL; | 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 char  debug_name[BF_MAXPATH+1] = BFORCE_DEBFILE; | ||||||
| static bool  debug_invalid_name = FALSE; | static bool  debug_invalid_name = FALSE; | ||||||
| 
 | 
 | ||||||
| @ -56,6 +56,9 @@ struct debuglevel { | |||||||
| 	{ "Freq",     D_FREQ     }, | 	{ "Freq",     D_FREQ     }, | ||||||
| 	{ "Statem",   D_STATEM   }, | 	{ "Statem",   D_STATEM   }, | ||||||
| 	{ "Daemon",   D_DAEMON   }, | 	{ "Daemon",   D_DAEMON   }, | ||||||
|  | 	{ "Free",     D_FREE     }, | ||||||
|  | 	{ "24554",    D_24554    }, | ||||||
|  | //	{ "Daemon",   D_DAEMON   },
 | ||||||
| 	{ "Full",     D_FULL     }, | 	{ "Full",     D_FULL     }, | ||||||
| 	{ NULL,       0          } | 	{ NULL,       0          } | ||||||
| }; | }; | ||||||
| @ -385,28 +388,16 @@ int logerr(const char *s, ...) | |||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| #ifdef DEBUG | #ifdef DEBUG | ||||||
| void debug_setlevel(long newlevel, bool logit) | int _debug_parsestring(char *str, unsigned long *deblevel) | ||||||
| { |  | ||||||
| 	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 i, rc = 0; | 	int i, rc = 0; | ||||||
| 	char *n; | 	char *n; | ||||||
| 	char *p_str = NULL; | 	char *p_str = NULL; | ||||||
| 
 | 
 | ||||||
| 	ASSERT(str != NULL); | 	if (str==NULL) { | ||||||
|  | 	    puts("DEBUG level string is empty, please configure"); | ||||||
|  | 	    exit(-1); | ||||||
|  | 	} | ||||||
| 	 | 	 | ||||||
| 	*deblevel = 0L; | 	*deblevel = 0L; | ||||||
| 	 | 	 | ||||||
| @ -430,37 +421,46 @@ int debug_parsestring(char *str, unsigned long *deblevel) | |||||||
| 	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); |     char *debugfile = conf_string(cf_debug_file); | ||||||
|  |     char *debuglevel =  conf_string(cf_debug_level); | ||||||
|  |     unsigned long n_debuglevel; | ||||||
| 
 | 
 | ||||||
| 	if( !strcmp(debug_name, debugname) ) return; |     if (debugfile!=NULL) { | ||||||
|  | 	if( strcmp(debug_name, debugfile)!=0 ) { | ||||||
| 	 | 	 | ||||||
| 	if( debug_isopened() ) debug_close(); |             if( debug_isopened() ) debug_close(); | ||||||
| 	 | 	 | ||||||
| 	/* Reset ignore flag */ | 	/* Reset ignore flag */ | ||||||
| 	if( debug_invalid_name ) | 	    if( debug_invalid_name ) | ||||||
| 		debug_invalid_name = FALSE; | 		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; | ||||||
|  |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| int debug_open(const char *debugname) | bool debug_isopened(void) | ||||||
|  | { | ||||||
|  | 	return debug_fp ? TRUE : FALSE; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | int debug_open() | ||||||
| { | { | ||||||
| 	char buf[40]; | 	char buf[40]; | ||||||
| 
 | 
 | ||||||
| 	ASSERT(debug_fp == NULL); | 	ASSERT(debug_fp == NULL); | ||||||
| 
 | 
 | ||||||
| 	if( debugname ) | 	if( debug_name ) | ||||||
| 	{ |  | ||||||
| 		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_fp = fopen(debug_name, "a")) == NULL ) | 		if( (debug_fp = fopen(debug_name, "a")) == NULL ) | ||||||
| 		{ | 		{ | ||||||
| @ -515,7 +515,7 @@ int debug(unsigned long what, const char *str, ...) | |||||||
| 	{ | 	{ | ||||||
| 		if( debug_fp == NULL && debug_invalid_name == FALSE ) | 		if( debug_fp == NULL && debug_invalid_name == FALSE ) | ||||||
| 		{ | 		{ | ||||||
| 			debug_open(NULL); | 			debug_open(); | ||||||
| 		} | 		} | ||||||
| 		 | 		 | ||||||
| 		if( debug_fp ) | 		if( debug_fp ) | ||||||
|  | |||||||
| @ -115,7 +115,8 @@ int binkp_loop(s_binkp_state *bstate) { | |||||||
| 
 | 
 | ||||||
|     //     session criterium           handshake criterium
 |     //     session criterium           handshake criterium
 | ||||||
|     while (!bstate->complete || bstate->waiting_got) { |     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) { |         if (bstate->continuesend) { | ||||||
|             no_more_to_send = false; |             no_more_to_send = false; | ||||||
|             bstate->continuesend = 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)) { |         if (have_to_write==0 && (!no_more_to_send || bstate->extracmd[0]!=-1)) { | ||||||
|             m = binkp_getforsend(bstate, writebuf+BINKP_HEADER, &block_type, &block_length); |             m = binkp_getforsend(bstate, writebuf+BINKP_HEADER, &block_type, &block_length); | ||||||
|             if(m==1 || m==3) { |             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; |                 write_pos = 0; | ||||||
|                 have_to_write = block_length+BINKP_HEADER; |                 have_to_write = block_length+BINKP_HEADER; | ||||||
|                 if( block_type == BINKP_BLK_CMD ) { |                 if( block_type == BINKP_BLK_CMD ) { | ||||||
| @ -132,28 +133,28 @@ int binkp_loop(s_binkp_state *bstate) { | |||||||
|                 else if( block_type == BINKP_BLK_DATA ) { |                 else if( block_type == BINKP_BLK_DATA ) { | ||||||
|                     writebuf[0] = (block_length>>8)&0x7f; |                     writebuf[0] = (block_length>>8)&0x7f; | ||||||
|                 } else { |                 } else { | ||||||
|                     log("block for sending has invalid type, aborting"); |                     DEB((D_24554, "block for sending has invalid type, aborting")); | ||||||
|                     return PRC_ERROR; |                     return PRC_ERROR; | ||||||
|                 } |                 } | ||||||
|                 writebuf[1] = block_length&0xff; |                 writebuf[1] = block_length&0xff; | ||||||
|             } |             } | ||||||
|             if (m==2 || m==3) { |             if (m==2 || m==3) { | ||||||
|                 log("no more to send"); |                 DEB((D_24554, "no more to send")); | ||||||
|                 no_more_to_send = true; |                 no_more_to_send = true; | ||||||
|             } |             } | ||||||
|             if (m==0) { |             if (m==0) { | ||||||
|                 log("binkp: nothing to write"); |                 DEB((D_24554, "binkp: nothing to write")); | ||||||
|             } |             } | ||||||
|             if (m<0 || m>3) { |             if (m<0 || m>3) { | ||||||
|                 log("getforsend error"); |                 DEB((D_24554, "getforsend error")); | ||||||
|                 return PRC_ERROR; |                 return PRC_ERROR; | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         if (bstate->batchsendcomplete && bstate->batchreceivecomplete) { |         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)) { |             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->batchsendcomplete -= 1; | ||||||
|                 bstate->batchreceivecomplete -= 1; |                 bstate->batchreceivecomplete -= 1; | ||||||
|                 //bstate->firstbatch = false;
 |                 //bstate->firstbatch = false;
 | ||||||
| @ -167,17 +168,17 @@ int binkp_loop(s_binkp_state *bstate) { | |||||||
|             } |             } | ||||||
|             else { |             else { | ||||||
|                 if (bstate->waiting_got) { |                 if (bstate->waiting_got) { | ||||||
|                     log("waiting for all files have being confirmed"); |                     DEB((D_24554, "waiting for all files have being confirmed")); | ||||||
|                 } |                 } | ||||||
|                 else { |                 else { | ||||||
|                     log("finishing session"); |                     DEB((D_24554, "finishing session")); | ||||||
|                     bstate->complete = true; |                     bstate->complete = true; | ||||||
|                     want_read = 0; |                     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) { |         if (want_read || have_to_write) { | ||||||
|           n = tty_select(want_read?&canread:NULL, have_to_write?&canwrite:NULL, timeout); |           n = tty_select(want_read?&canread:NULL, have_to_write?&canwrite:NULL, timeout); | ||||||
|           if( n<0 ) { |           if( n<0 ) { | ||||||
| @ -186,8 +187,9 @@ int binkp_loop(s_binkp_state *bstate) { | |||||||
|           } |           } | ||||||
|         } |         } | ||||||
|         else { |         else { | ||||||
|             log("empty loop %d", ++bstate->emptyloop); |             DEB((D_24554, "empty loop %d", ++bstate->emptyloop)); | ||||||
|             if (bstate->emptyloop==10) { |             if (bstate->emptyloop==10) { | ||||||
|  |                 log("eternal loop"); | ||||||
|                 return PRC_ERROR; |                 return PRC_ERROR; | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
| @ -202,13 +204,14 @@ int binkp_loop(s_binkp_state *bstate) { | |||||||
|                 log("read: remote socket shutdown"); |                 log("read: remote socket shutdown"); | ||||||
|                 return PRC_REMOTEABORTED; |                 return PRC_REMOTEABORTED; | ||||||
|             } |             } | ||||||
|  |             DEB((D_24554, "got %d bytes", n)); | ||||||
|             want_read -= n; |             want_read -= n; | ||||||
|             read_pos += n; |             read_pos += n; | ||||||
|             if (read_pos == BINKP_HEADER) { |             if (read_pos == BINKP_HEADER) { | ||||||
|                 // have read header, want read body
 |                 // 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]; |                 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
 |             } // 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
 |         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_type = readbuf[0]&0x80? BINKP_BLK_CMD: BINKP_BLK_DATA; | ||||||
|                 block_length = read_pos - BINKP_HEADER; |                 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); |                 m = binkp_doreceiveblock(bstate, readbuf+BINKP_HEADER, block_type, block_length); | ||||||
|                 if(m==1) { |                 if(m==1) { | ||||||
|                     log("block is successfully accepted"); |                     DEB((D_24554, "block is successfully accepted")); | ||||||
|                     read_pos = 0; |                     read_pos = 0; | ||||||
|                     want_read = BINKP_HEADER; |                     want_read = BINKP_HEADER; | ||||||
|                 } else if (m==2) { |                 } 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; |                     no_more_read = true; | ||||||
|                     read_pos = 0; |                     read_pos = 0; | ||||||
|                     want_read = 0; //BINKP_HEADER;
 |                     want_read = 0; //BINKP_HEADER;
 | ||||||
|                 } |                 } | ||||||
|                 else if (m==0) { |                 else if (m==0) { | ||||||
|                     log("binkp: keeping buffer"); |                     DEB((D_24554, "binkp: keeping buffer")); | ||||||
|                 } |                 } | ||||||
|                 else if (m==3) { |                 else if (m==3) { | ||||||
|                     log("aborting session"); |                     DEB((D_24554, "aborting session")); | ||||||
|                     bstate->complete = true; |                     bstate->complete = true; | ||||||
|                     //rc = HRC_OTHER_ERR;
 |                     //rc = HRC_OTHER_ERR;
 | ||||||
|                 } |                 } | ||||||
| @ -243,7 +246,7 @@ int binkp_loop(s_binkp_state *bstate) { | |||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         if (have_to_write && canwrite) { |         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); |             n = tty_write(writebuf+write_pos, have_to_write); | ||||||
|             if( n<0 ) { |             if( n<0 ) { | ||||||
|                 log("binkp: tty write error"); |                 log("binkp: tty write error"); | ||||||
| @ -253,7 +256,7 @@ int binkp_loop(s_binkp_state *bstate) { | |||||||
|                 log("write: remote socket shutdown"); |                 log("write: remote socket shutdown"); | ||||||
|                 return PRC_REMOTEABORTED; |                 return PRC_REMOTEABORTED; | ||||||
|             } |             } | ||||||
|             //log("%d bytes sent", n);
 |             DEB((D_24554, "%d bytes sent", n)); | ||||||
|             write_pos += n; |             write_pos += n; | ||||||
|             have_to_write -= 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) | 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_binkp_state s; | ||||||
|     s.mode = bmode_transfer; |     s.mode = bmode_transfer; | ||||||
|     s.local_data = local_data; |     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 my_sf, wr_pos; | ||||||
|     int n; // read file
 |     int n; // read file
 | ||||||
|     if (bstate->extracmd[0]!=-1) { |     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]; |         buf[0] = bstate->extracmd[0]; | ||||||
|         strcpy(buf+1, bstate->extracmd+1); |         strcpy(buf+1, bstate->extracmd+1); | ||||||
|         *block_type = BINKP_BLK_CMD; |         *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; |         bstate->extracmd[0] = -1; | ||||||
|         if (bstate->extraislast) { |         if (bstate->extraislast) { | ||||||
|             bstate->phase = 100; |             bstate->phase = 100; | ||||||
|             log("extracmd is last"); |             DEB((D_24554, "extracmd is last")); | ||||||
|             bstate->complete = true; |             bstate->complete = true; | ||||||
|         } |         } | ||||||
|         return 1; |         return 1; | ||||||
| @ -345,12 +348,12 @@ case 0: // MD5 challenge | |||||||
|         bstate->subphase=0; |         bstate->subphase=0; | ||||||
| 	if( bstate->mode==bmode_incoming_handshake && bstate->local_data->challenge_length > 0 ) | 	if( bstate->mode==bmode_incoming_handshake && bstate->local_data->challenge_length > 0 ) | ||||||
| 	{ | 	{ | ||||||
|                 log("send challenge"); |                 DEB((D_24554, "send challenge")); | ||||||
| 		char challenge[128]; | 		char challenge[128]; | ||||||
| 		string_bin_to_hex(challenge, bstate->local_data->challenge, bstate->local_data->challenge_length); | 		string_bin_to_hex(challenge, bstate->local_data->challenge, bstate->local_data->challenge_length); | ||||||
| 		buf[0] = BPMSG_NUL; | 		buf[0] = BPMSG_NUL; | ||||||
| 		sprintf(buf+1, "OPT CRAM-MD5-%s", challenge); | 		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_type = BINKP_BLK_CMD; | ||||||
| 		*block_length = strlen(buf+1)+1; | 		*block_length = strlen(buf+1)+1; | ||||||
| 		return 1; | 		return 1; | ||||||
| @ -390,6 +393,7 @@ case 6: | |||||||
| 	    *block_length = 1 + sprintf(buf+1, "VER %s %s/%d.%d", | 	    *block_length = 1 + sprintf(buf+1, "VER %s %s/%d.%d", | ||||||
| 		bstate->local_data->progname, bstate->local_data->protname, | 		bstate->local_data->progname, bstate->local_data->protname, | ||||||
| 		bstate->local_data->majorver, bstate->local_data->minorver); | 		bstate->local_data->majorver, bstate->local_data->minorver); | ||||||
|  | 	    DEB((D_24554, "send M_NUL %s", buf+1)); | ||||||
| 	    return 1; | 	    return 1; | ||||||
| case 7: | case 7: | ||||||
| 	    if (bstate->mode==bmode_outgoing_handshake) { | 	    if (bstate->mode==bmode_outgoing_handshake) { | ||||||
| @ -402,6 +406,7 @@ case 7: | |||||||
| 		// if (!nodelist_checkflag (state.node.flags, "ND"))
 | 		// if (!nodelist_checkflag (state.node.flags, "ND"))
 | ||||||
| 		//	strcat(buf+1, " ND");
 | 		//	strcat(buf+1, " ND");
 | ||||||
| 		*block_length = 1 + strlen(buf+1); | 		*block_length = 1 + strlen(buf+1); | ||||||
|  | 		DEB((D_24554, "send M_NUL %s", buf+1)); | ||||||
| 		return 1; | 		return 1; | ||||||
| 	    } | 	    } | ||||||
| 	    // else skip subphase
 | 	    // else skip subphase
 | ||||||
| @ -415,7 +420,7 @@ case 7: | |||||||
| 	// p
 | 	// p
 | ||||||
| 
 | 
 | ||||||
| case 2: | case 2: | ||||||
|         log("send address"); |         DEB((D_24554, "send address")); | ||||||
|         bstate->phase += 1; |         bstate->phase += 1; | ||||||
|         buf[0] = BPMSG_ADR; |         buf[0] = BPMSG_ADR; | ||||||
|         wr_pos = 1; |         wr_pos = 1; | ||||||
| @ -438,29 +443,29 @@ case 2: | |||||||
| 	} | 	} | ||||||
| 	*block_type = BINKP_BLK_CMD; | 	*block_type = BINKP_BLK_CMD; | ||||||
| 	*block_length = wr_pos; | 	*block_length = wr_pos; | ||||||
| 	log("address: %s", buf+1); | 	DEB((D_24554, "send address: %s", buf+1)); | ||||||
| 	return 1; | 	return 1; | ||||||
| 
 | 
 | ||||||
| case 3: // send password on outgoing or pw confirmation on incoming
 | 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
 |         // special empty password is sent if there is no password for the remote addr
 | ||||||
|         if (bstate->mode==bmode_incoming_handshake) { |         if (bstate->mode==bmode_incoming_handshake) { | ||||||
|             if (bstate->password_received) { |             if (bstate->password_received) { | ||||||
|                 log("password verified"); |                 DEB((D_24554, "password verified")); | ||||||
|                 buf[0] = BPMSG_OK; |                 buf[0] = BPMSG_OK; | ||||||
|                 *block_type = BINKP_BLK_CMD; |                 *block_type = BINKP_BLK_CMD; | ||||||
|                 *block_length = 1; |                 *block_length = 1; | ||||||
|                 bstate->phase += 1; |                 bstate->phase += 1; | ||||||
|                 return 1; |                 return 1; | ||||||
|             } |             } | ||||||
|             log("waiting for password from remote"); |             DEB((D_24554, "waiting for password from remote")); | ||||||
|             return 0; // nothing to send
 |             return 0; // nothing to send
 | ||||||
|         } |         } | ||||||
|         else if (bstate->mode==bmode_outgoing_handshake) { |         else if (bstate->mode==bmode_outgoing_handshake) { | ||||||
|             if (!bstate->address_established) { |             if (!bstate->address_established) { | ||||||
|                 log("address not received still"); |                 DEB((D_24554, "address not received still")); | ||||||
|                 return 0; |                 return 0; | ||||||
|             } |             } | ||||||
|             log("sending password"); |             DEB((D_24554, "sending password")); | ||||||
| 
 | 
 | ||||||
|             buf[0] = BPMSG_PWD; |             buf[0] = BPMSG_PWD; | ||||||
|             *block_type = BINKP_BLK_CMD; |             *block_type = BINKP_BLK_CMD; | ||||||
| @ -473,7 +478,7 @@ case 3: // send password on outgoing or pw confirmation on incoming | |||||||
| 		char digest_hex[33]; | 		char digest_hex[33]; | ||||||
| 		 | 		 | ||||||
| 		if(bstate->remote_data->challenge_length==0) { | 		if(bstate->remote_data->challenge_length==0) { | ||||||
| 		    log("waiting for challenge"); | 		    DEB((D_24554, "waiting for challenge")); | ||||||
| 		    return 0; | 		    return 0; | ||||||
| 		} | 		} | ||||||
| 		md5_cram_get(bstate->local_data->passwd, bstate->remote_data->challenge, | 		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: | case 4: | ||||||
|         if (bstate->mode==bmode_incoming_handshake) { |         if (bstate->mode==bmode_incoming_handshake) { | ||||||
|             log("incoming handshake is complete"); |             DEB((D_24554, "incoming handshake is complete")); | ||||||
|             bstate->complete = true; |             bstate->complete = true; | ||||||
|         } |         } | ||||||
|         else { |         else { | ||||||
|             log("outgoing handshake: everything is sent"); |             DEB((D_24554, "outgoing handshake: everything is sent")); | ||||||
|         } |         } | ||||||
|         return 2; |         return 2; | ||||||
|         } |         } | ||||||
| @ -513,9 +518,9 @@ case 4: | |||||||
|         switch (bstate->phase) { |         switch (bstate->phase) { | ||||||
|             send_next_file: |             send_next_file: | ||||||
|             case 0: |             case 0: | ||||||
|                 log("fetch file from queue"); |                 DEB((D_24554, "fetch file from queue")); | ||||||
|                 if (p_tx_fopen(bstate->pi, NULL)) { |                 if (p_tx_fopen(bstate->pi, NULL)) { | ||||||
|                     log("queue empty"); |                     DEB((D_24554, "queue empty")); | ||||||
|                     bstate->phase = 4; |                     bstate->phase = 4; | ||||||
|                     goto send_EOB; |                     goto send_EOB; | ||||||
|                 } |                 } | ||||||
| @ -524,7 +529,7 @@ case 4: | |||||||
| 
 | 
 | ||||||
|                 //send M_FILE -1
 |                 //send M_FILE -1
 | ||||||
|                 if (bstate->NR) { |                 if (bstate->NR) { | ||||||
|                     log("send M_FILE with -1"); |                     DEB((D_24554, "send M_FILE with -1")); | ||||||
|                     buf[0] = BPMSG_FILE; |                     buf[0] = BPMSG_FILE; | ||||||
|                     *block_length = 1+sprintf(buf+1, "%s %ld %ld -1", bstate->pi->send->net_name,  |                     *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); |                             (long)bstate->pi->send->bytes_total, (long)bstate->pi->send->mod_time); | ||||||
| @ -534,7 +539,7 @@ case 4: | |||||||
|                 bstate->phase += 1; |                 bstate->phase += 1; | ||||||
| 
 | 
 | ||||||
|             case 1: //send M_FILE - M_GET forcibly sets this phase. M_GET must open needed file
 |             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; |                 buf[0] = BPMSG_FILE; | ||||||
|                 *block_length = 1+sprintf(buf+1, "%s %ld %ld 0", bstate->pi->send->net_name,  |                 *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); |                         bstate->pi->send->bytes_total, bstate->pi->send->mod_time); | ||||||
| @ -554,7 +559,7 @@ case 4: | |||||||
|                     log("p_tx_readfile error"); |                     log("p_tx_readfile error"); | ||||||
|                     return -1; |                     return -1; | ||||||
|                 } |                 } | ||||||
|                 log("file is sent"); |                 DEB((D_24554, "file is sent")); | ||||||
|                 bstate->pi->send->status = FSTAT_WAITACK; |                 bstate->pi->send->status = FSTAT_WAITACK; | ||||||
|                  |                  | ||||||
|                 bstate->phase += 1; |                 bstate->phase += 1; | ||||||
| @ -562,32 +567,32 @@ case 4: | |||||||
|             case 3: //wait for acknowlede
 |             case 3: //wait for acknowlede
 | ||||||
|              |              | ||||||
|                 if (bstate->pi->send->waitack) { |                 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; |                     int i; | ||||||
|                     bool ack = false; |                     bool ack = false; | ||||||
|                     for(i = 0; i < bstate->pi->n_sentfiles; i++ ) { |                     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 (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) { |                             if (bstate->pi->sentfiles[i].status == FSTAT_SUCCESS) { | ||||||
|                                 ack = true; |                                 ack = true; | ||||||
|                                 log("acknowledged"); |                                 DEB((D_24554, "acknowledged")); | ||||||
|                                 break; |                                 break; | ||||||
|                             } |                             } | ||||||
|                         } |                         } | ||||||
|                     } |                     } | ||||||
|                     if (!ack) { |                     if (!ack) { | ||||||
|                         log("wait for M_GOT"); |                         DEB((D_24554, "wait for M_GOT")); | ||||||
|                         return 0; |                         return 0; | ||||||
|                     } |                     } | ||||||
|                     log("M_GOT received, going to next file"); |                     DEB((D_24554, "M_GOT received, going to next file")); | ||||||
|                 } else { |                 } else { | ||||||
|                     log("do not wait M_GOT"); |                     DEB((D_24554, "do not wait M_GOT")); | ||||||
|                 } |                 } | ||||||
|                 bstate->phase = 0; |                 bstate->phase = 0; | ||||||
|                 goto send_next_file; |                 goto send_next_file; | ||||||
| 
 | 
 | ||||||
|             send_EOB: |             send_EOB: | ||||||
|             case 4: |             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; |                 buf[0] = BPMSG_EOB; | ||||||
|                 *block_type = BINKP_BLK_CMD; |                 *block_type = BINKP_BLK_CMD; | ||||||
|                 *block_length = 1; |                 *block_length = 1; | ||||||
| @ -596,7 +601,7 @@ case 4: | |||||||
|                 return 1; |                 return 1; | ||||||
| 
 | 
 | ||||||
|             case 5: |             case 5: | ||||||
|                 log("nothing to send"); |                 DEB((D_24554, "nothing to send")); | ||||||
|                 return 2; |                 return 2; | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| @ -628,11 +633,12 @@ case BINKP_BLK_CMD: | |||||||
|         buf[block_length] = 0; // fencing for easy processing
 |         buf[block_length] = 0; // fencing for easy processing
 | ||||||
|         switch (buf[0]) { |         switch (buf[0]) { | ||||||
| case BPMSG_NUL:          /* Site information, just logging */ | 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); |             binkp_process_NUL(bstate->remote_data, buf+1); | ||||||
|             return 1; |             return 1; | ||||||
| case BPMSG_ADR:              /* List of addresses */ | 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) { |             if (bstate->address_established) { | ||||||
|                 PROTO_ERROR("remote tries to change address"); |                 PROTO_ERROR("remote tries to change address"); | ||||||
|             } |             } | ||||||
| @ -650,7 +656,7 @@ case BPMSG_ADR:              /* List of addresses */ | |||||||
| 
 | 
 | ||||||
|             if (bstate->mode == bmode_incoming_handshake) { |             if (bstate->mode == bmode_incoming_handshake) { | ||||||
| 		int i; | 		int i; | ||||||
| 		log("sending options"); | 		DEB((D_24554, "sending options")); | ||||||
| 		bstate->extracmd[0] = BPMSG_NUL; | 		bstate->extracmd[0] = BPMSG_NUL; | ||||||
| 		bstate->extraislast = false; | 		bstate->extraislast = false; | ||||||
| 		sprintf(bstate->extracmd+1,"OPT MB"); | 		sprintf(bstate->extracmd+1,"OPT MB"); | ||||||
| @ -693,7 +699,7 @@ case BPMSG_ADR:              /* List of addresses */ | |||||||
|             bstate->address_established = true; |             bstate->address_established = true; | ||||||
|             return 1; |             return 1; | ||||||
| case BPMSG_PWD:              /* Session password */ | 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) { |             if (bstate->mode != bmode_incoming_handshake) { | ||||||
|                 PROTO_ERROR("unexpected M_PWD"); |                 PROTO_ERROR("unexpected M_PWD"); | ||||||
|             } |             } | ||||||
| @ -724,14 +730,14 @@ case BPMSG_PWD:              /* Session password */ | |||||||
| 	        return 1; | 	        return 1; | ||||||
| 	    } | 	    } | ||||||
| 	    else { | 	    else { | ||||||
| 	        log("flag password received"); | 	        DEB((D_24554, "flag password received")); | ||||||
| 		bstate->password_received = true; | 		bstate->password_received = true; | ||||||
| 		return 2; | 		return 2; | ||||||
| 	    } | 	    } | ||||||
|             break; |             break; | ||||||
| 
 | 
 | ||||||
| case BPMSG_FILE:             /* File information */ | 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) { |             if (bstate->mode != bmode_transfer) { | ||||||
|                 PROTO_ERROR("unexpected M_FILE"); |                 PROTO_ERROR("unexpected M_FILE"); | ||||||
|             } |             } | ||||||
| @ -746,14 +752,14 @@ case BPMSG_FILE:             /* File information */ | |||||||
|             } |             } | ||||||
| 
 | 
 | ||||||
| 	    if (bstate->frs == frs_didget) { | 	    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 |                 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 ) { | 			 && bstate->pi->recv->bytes_skipped == recvfi.offs && bstate->pi->recv->fp ) { | ||||||
|                     log("resuming %s from offset %d", recvfi.fn, recvfi.offs); |                     log("resuming %s from offset %d", recvfi.fn, recvfi.offs); | ||||||
| 	            bstate->frs = frs_data; | 	            bstate->frs = frs_data; | ||||||
| 		    return 1; | 		    return 1; | ||||||
| 	        } | 	        } | ||||||
| 	        log("no, skipping (TODO: accept it)"); | 	        DEB((D_24554, "no, skipping; TODO: accept it")); | ||||||
| 		if( bstate->extracmd[0] != -1 ) return 0; | 		if( bstate->extracmd[0] != -1 ) return 0; | ||||||
| 		bstate->extracmd[0] = BPMSG_SKIP; | 		bstate->extracmd[0] = BPMSG_SKIP; | ||||||
| 		sprintf(bstate->extracmd+1, "%s %ld %ld %ld", recvfi.fn, recvfi.sz, recvfi.tm); | 		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) { | 	    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"); | 	        PROTO_ERROR("invalid mode for M_FILE"); | ||||||
| 	    } | 	    } | ||||||
| 
 | 
 | ||||||
| @ -774,7 +780,7 @@ case 0: | |||||||
| 			bstate->frs = frs_data; | 			bstate->frs = frs_data; | ||||||
| 			return 1; | 			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; | 		bstate->extracmd[0] = BPMSG_GET; | ||||||
| 		sprintf(bstate->extracmd+1, "%s %ld %ld %ld", | 		sprintf(bstate->extracmd+1, "%s %ld %ld %ld", | ||||||
| 					bstate->pi->recv->net_name, (long)bstate->pi->recv->bytes_total, | 					bstate->pi->recv->net_name, (long)bstate->pi->recv->bytes_total, | ||||||
| @ -784,7 +790,7 @@ case 0: | |||||||
| 		bstate->frs = frs_didget; | 		bstate->frs = frs_didget; | ||||||
| 		return 1; | 		return 1; | ||||||
| case 1: | case 1: | ||||||
| 		log("SKIP (non-destructive)"); | 		DEB((D_24554, "SKIP, non-destructive")); | ||||||
| 		bstate->extracmd[0] = BPMSG_SKIP; | 		bstate->extracmd[0] = BPMSG_SKIP; | ||||||
| 		sprintf(bstate->extracmd+1, "%s %ld %ld", bstate->pi->recv->net_name, (long)bstate->pi->recv->bytes_total, | 		sprintf(bstate->extracmd+1, "%s %ld %ld", bstate->pi->recv->net_name, (long)bstate->pi->recv->bytes_total, | ||||||
| 					(long)bstate->pi->recv->mod_time); | 					(long)bstate->pi->recv->mod_time); | ||||||
| @ -792,7 +798,7 @@ case 1: | |||||||
| 	        bstate->frs = frs_skipping; | 	        bstate->frs = frs_skipping; | ||||||
| 		return 1; | 		return 1; | ||||||
| case 2: | case 2: | ||||||
| 		log("SKIP (destructive)"); | 		DEB((D_24554, "SKIP, destructive")); | ||||||
| 		bstate->extracmd[0] =  BPMSG_GOT; | 		bstate->extracmd[0] =  BPMSG_GOT; | ||||||
| 		sprintf(bstate->extracmd+1, "%s %ld %ld", | 		sprintf(bstate->extracmd+1, "%s %ld %ld", | ||||||
| 					bstate->pi->recv->net_name, (long)bstate->pi->recv->bytes_total, | 					bstate->pi->recv->net_name, (long)bstate->pi->recv->bytes_total, | ||||||
| @ -806,7 +812,7 @@ default: | |||||||
|             PROTO_ERROR("never should get here"); |             PROTO_ERROR("never should get here"); | ||||||
|              |              | ||||||
| case BPMSG_OK:               /* Password was acknowleged (data ignored) */ | 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) { |             if (bstate->mode != bmode_outgoing_handshake) { | ||||||
|                 PROTO_ERROR("unexpected M_OK"); |                 PROTO_ERROR("unexpected M_OK"); | ||||||
|             } |             } | ||||||
| @ -818,12 +824,12 @@ case BPMSG_OK:               /* Password was acknowleged (data ignored) */ | |||||||
| 		bstate->extraislast = true; | 		bstate->extraislast = true; | ||||||
| 		return 2; | 		return 2; | ||||||
| 	    } | 	    } | ||||||
| 	    log("outoing handshake successfully complete"); | 	    DEB((D_24554, "outoing handshake successfully complete")); | ||||||
| 	    bstate->complete = true; | 	    bstate->complete = true; | ||||||
|             return 2; |             return 2; | ||||||
| 
 | 
 | ||||||
| case BPMSG_EOB:              /* End Of Batch (data ignored) */ | 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) { |             if (bstate->mode != bmode_transfer) { | ||||||
|                 PROTO_ERROR("unexpected M_EOB"); |                 PROTO_ERROR("unexpected M_EOB"); | ||||||
|             } |             } | ||||||
| @ -832,7 +838,7 @@ case BPMSG_EOB:              /* End Of Batch (data ignored) */ | |||||||
| 
 | 
 | ||||||
| case BPMSG_GOT:              /* File received */ | case BPMSG_GOT:              /* File received */ | ||||||
| case BPMSG_SKIP: | 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) { |             if (bstate->mode != bmode_transfer) { | ||||||
|                 PROTO_ERROR("unexpected M_GOT/M_SKIP"); |                 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) { | 	    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) { | 	        if (bstate->pi->send->netspool) { | ||||||
| 	            PROTO_ERROR("cannot SKIP or REFUSE netspool"); | 	            PROTO_ERROR("cannot SKIP or REFUSE netspool"); | ||||||
| 	        } | 	        } | ||||||
| @ -863,7 +869,7 @@ case BPMSG_SKIP: | |||||||
| 	                bstate->pi->send->status = FSTAT_REFUSED; | 	                bstate->pi->send->status = FSTAT_REFUSED; | ||||||
| 	            } else { | 	            } else { | ||||||
| 	                if (bstate->pi->send->status == FSTAT_WAITACK) { | 	                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; | 	                    bstate->pi->send->status = FSTAT_SUCCESS; | ||||||
| 	                } else { | 	                } else { | ||||||
| 	                    log("confirmed not sent file - skipped %s", fi.fn); | 	                    log("confirmed not sent file - skipped %s", fi.fn); | ||||||
| @ -873,7 +879,7 @@ case BPMSG_SKIP: | |||||||
| 		            bstate->pi->send->status = FSTAT_SKIPPED; | 		            bstate->pi->send->status = FSTAT_SKIPPED; | ||||||
| 	                } | 	                } | ||||||
| 	            } | 	            } | ||||||
| 	            log("closing file"); | 	            DEB((D_24554, "closing file")); | ||||||
| 	            p_tx_fclose(bstate->pi); | 	            p_tx_fclose(bstate->pi); | ||||||
| 	            bstate->pi->send = tmp; | 	            bstate->pi->send = tmp; | ||||||
| 	            goto check_that_all_files_are_confirmed; | 	            goto check_that_all_files_are_confirmed; | ||||||
| @ -886,12 +892,12 @@ check_that_all_files_are_confirmed: | |||||||
|                 int i; |                 int i; | ||||||
|                 for (i = 0; i < bstate->pi->n_sentfiles; i++) { |                 for (i = 0; i < bstate->pi->n_sentfiles; i++) { | ||||||
|                     if (bstate->pi->sentfiles[i].status == FSTAT_WAITACK) { |                     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; |                         return 1; | ||||||
|                     } |                     } | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|             log("all files are confirmed"); |             DEB((D_24554, "all files are confirmed")); | ||||||
|             bstate->waiting_got = false; |             bstate->waiting_got = false; | ||||||
|             return 1; |             return 1; | ||||||
| 
 | 
 | ||||||
| @ -906,23 +912,23 @@ case BPMSG_BSY:              /* All AKAs are busy */ | |||||||
|             return 3; |             return 3; | ||||||
| 
 | 
 | ||||||
| case BPMSG_GET:              /* Get a file from offset */ | 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) { |             if (bstate->mode != bmode_transfer) { | ||||||
|                 PROTO_ERROR("unexpected M_GET"); |                 PROTO_ERROR("unexpected M_GET"); | ||||||
|             } |             } | ||||||
|             s_bpfinfo getfi; |             s_bpfinfo getfi; | ||||||
|             if (binkp_parsfinfo(buf+1, &getfi, true) != 0) { |             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"); |                 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->extracmd[0] != -1) return 0; | ||||||
| 
 | 
 | ||||||
|             if (bstate->pi->send) if (p_compfinfo(bstate->pi->send, getfi.fn, getfi.sz, getfi.tm)==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) { |                 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
 |                     // go to sending M_FILE
 | ||||||
|                     bstate->phase = 2; |                     bstate->phase = 2; | ||||||
|                     bstate->extracmd[0] = BPMSG_FILE; |                     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) { |             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; |                 bstate->continuesend = true; | ||||||
|                 return 1; |                 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) { |             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); | 		log("resending \"%s\" from %ld offset", bstate->pi->send->net_name, (long)getfi.offs); | ||||||
|                 if( p_tx_rewind(bstate->pi, getfi.offs) != 0 ) { |                 if( p_tx_rewind(bstate->pi, getfi.offs) != 0 ) { | ||||||
|                     log("failed to rewind"); |                     DEB((D_24554, "failed to rewind")); | ||||||
|                     p_tx_fclose(bstate->pi); |                     p_tx_fclose(bstate->pi); | ||||||
|                     PROTO_ERROR("seek error") |                     PROTO_ERROR("seek error") | ||||||
|                 } |                 } | ||||||
| @ -961,7 +967,7 @@ case BPMSG_GET:              /* Get a file from offset */ | |||||||
| 	    } | 	    } | ||||||
| 
 | 
 | ||||||
|             if( bstate->pi->send ) { |             if( bstate->pi->send ) { | ||||||
|                 log("aborting current file"); |                 DEB((D_24554, "aborting current file")); | ||||||
|                 p_tx_fclose(bstate->pi); |                 p_tx_fclose(bstate->pi); | ||||||
|             } |             } | ||||||
| 
 | 
 | ||||||
| @ -973,7 +979,7 @@ case BPMSG_GET:              /* Get a file from offset */ | |||||||
|                 PROTO_ERROR("could not satisfy M_GET"); |                 PROTO_ERROR("could not satisfy M_GET"); | ||||||
|             } |             } | ||||||
|             if( p_tx_rewind(bstate->pi, getfi.offs) != 0 ) { |             if( p_tx_rewind(bstate->pi, getfi.offs) != 0 ) { | ||||||
|                 log("failed to rewind"); |                 DEB((D_24554, "failed to rewind")); | ||||||
|                 p_tx_fclose(bstate->pi); |                 p_tx_fclose(bstate->pi); | ||||||
|                 PROTO_ERROR("seek error 2"); |                 PROTO_ERROR("seek error 2"); | ||||||
|             } |             } | ||||||
| @ -989,21 +995,21 @@ case BPMSG_GET:              /* Get a file from offset */ | |||||||
| 	    bstate->continuesend = true; | 	    bstate->continuesend = true; | ||||||
| 	    return 1; | 	    return 1; | ||||||
|         } |         } | ||||||
|         log("unknown command %d received", buf[0]); |         DEB((D_24554, "unknown command %d received", buf[0])); | ||||||
|         PROTO_ERROR("invalid command") |         PROTO_ERROR("invalid command") | ||||||
| 
 | 
 | ||||||
| case BINKP_BLK_DATA: | case BINKP_BLK_DATA: | ||||||
|         //if there is file in progress
 |         //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) { |         if (block_length==0) { | ||||||
|             log("ignore zero length data block, argus workaround"); |             log("warning: remote have sent zero length data block"); | ||||||
|             return 1; |             return 1; | ||||||
|         } |         } | ||||||
|         if (bstate->frs == frs_nothing) { |         if (bstate->frs == frs_nothing) { | ||||||
|             PROTO_ERROR("unexpected data block"); |             PROTO_ERROR("unexpected data block"); | ||||||
|         } |         } | ||||||
|         if (bstate->frs == frs_didget || bstate->frs == frs_skipping) { |         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; |             return 1; | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
| @ -1044,7 +1050,7 @@ case BINKP_BLK_DATA: | |||||||
| 		PROTO_ERROR("extra data for file") | 		PROTO_ERROR("extra data for file") | ||||||
| 	    } | 	    } | ||||||
| 	    else if( bstate->pi->recv->bytes_received == bstate->pi->recv->bytes_total ) { | 	    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->frs = frs_nothing; | ||||||
| 		bstate->pi->recv->status = FSTAT_SUCCESS; | 		bstate->pi->recv->status = FSTAT_SUCCESS; | ||||||
| 		if( !p_rx_fclose(bstate->pi) ) { | 		if( !p_rx_fclose(bstate->pi) ) { | ||||||
| @ -1056,7 +1062,7 @@ case BINKP_BLK_DATA: | |||||||
| 			return 1; | 			return 1; | ||||||
| 		} | 		} | ||||||
| 		else { | 		else { | ||||||
| 		    log("some error committing file"); | 		    DEB((D_24554, "some error committing file")); | ||||||
| 		    bstate->extracmd[0] = BPMSG_SKIP; | 		    bstate->extracmd[0] = BPMSG_SKIP; | ||||||
| 		    sprintf(bstate->extracmd+1, "%s %ld %ld", | 		    sprintf(bstate->extracmd+1, "%s %ld %ld", | ||||||
| 								bstate->pi->recv->net_name, (long)bstate->pi->recv->bytes_total, | 								bstate->pi->recv->net_name, (long)bstate->pi->recv->bytes_total, | ||||||
| @ -1065,7 +1071,7 @@ case BINKP_BLK_DATA: | |||||||
| 		    return 1; | 		    return 1; | ||||||
| 		} | 		} | ||||||
| 	    } else { | 	    } else { | ||||||
| 	        log("data block accepted"); | 	        DEB((D_24554, "data block accepted")); | ||||||
| 	        return 1; | 	        return 1; | ||||||
| 	    } | 	    } | ||||||
| 	} | 	} | ||||||
| @ -1129,6 +1135,13 @@ void binkp_process_NUL(s_binkp_sysinfo *remote_data, char *buffer) | |||||||
| 		else | 		else | ||||||
| 			strnxcpy(remote_data->progname, buffer+4, sizeof(remote_data->progname)); | 			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 | 	else | ||||||
| 		log("BinkP NUL: \"%s\"", string_printable(buffer)); // NUL cannot be invalid as it is optional info
 | 		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 | 	if( remote_data->challenge_length > 0 | ||||||
| 	 && strncmp(remote_data->passwd, "CRAM-MD5-", 9) == 0 ) | 	 && strncmp(remote_data->passwd, "CRAM-MD5-", 9) == 0 ) | ||||||
| 	{ | 	{ | ||||||
| 	        //log("md5 auth addrs %s", remote_data->addrs);
 | 	        //DEB((D_24554, "md5 auth addrs %s", remote_data->addrs));
 | ||||||
| 	        //log("md5 auth anum %d", remote_data->anum);
 | 	        //DEB((D_24554, "md5 auth anum %d", remote_data->anum));
 | ||||||
| 	        //log("md5 auth passwd %s", remote_data->passwd + 9);
 | 	        //DEB((D_24554, "md5 auth passwd %s", remote_data->passwd + 9));
 | ||||||
| 	        //log("md5 auth challenge %s", remote_data->challenge);
 | 	        //DEB((D_24554, "md5 auth challenge %s", remote_data->challenge));
 | ||||||
| 	        //log("md5 auth challenge len %d", remote_data->challenge_length);
 | 	        //DEB((D_24554, "md5 auth challenge len %d", remote_data->challenge_length));
 | ||||||
| 		return session_addrs_check(state.remoteaddrs, | 		return session_addrs_check(state.remoteaddrs, | ||||||
| 		                           state.n_remoteaddr, | 		                           state.n_remoteaddr, | ||||||
| 		                           remote_data->passwd + 9, | 		                           remote_data->passwd + 9, | ||||||
| @ -1164,7 +1177,7 @@ int binkp_auth_incoming(s_binkp_sysinfo *remote_data) | |||||||
| 		                           remote_data->challenge_length); | 		                           remote_data->challenge_length); | ||||||
| 	} | 	} | ||||||
| 	 | 	 | ||||||
| 	log("plain-text auth"); | 	DEB((D_24554, "plain-text auth")); | ||||||
| 	return session_addrs_check(state.remoteaddrs, state.n_remoteaddr, | 	return session_addrs_check(state.remoteaddrs, state.n_remoteaddr, | ||||||
| 	                           remote_data->passwd, NULL, 0); | 	                           remote_data->passwd, NULL, 0); | ||||||
| } | } | ||||||
|  | |||||||
| @ -56,7 +56,7 @@ s_handshake_protocol handshake_protocol_binkp = { | |||||||
| 	binkp_remote_phone, | 	binkp_remote_phone, | ||||||
| 	binkp_remote_flags, | 	binkp_remote_flags, | ||||||
| 	binkp_remote_mailer, | 	binkp_remote_mailer, | ||||||
| 	NULL, | 	binkp_remote_traffic, | ||||||
| 	/* Section 3 */ | 	/* Section 3 */ | ||||||
| //	binkp_local_address,
 | //	binkp_local_address,
 | ||||||
| 	binkp_local_password | 	binkp_local_password | ||||||
| @ -78,7 +78,7 @@ void binkp_init(s_handshake_protocol *THIS) | |||||||
| 
 | 
 | ||||||
| void binkp_deinit(s_handshake_protocol *THIS) | void binkp_deinit(s_handshake_protocol *THIS) | ||||||
| { | { | ||||||
|         log("binkp_deinit"); |         DEB((D_FREE, "binkp_deinit")); | ||||||
| 	if (THIS==NULL) { | 	if (THIS==NULL) { | ||||||
| 	    log("THIS==NULL"); | 	    log("THIS==NULL"); | ||||||
| 	    return; | 	    return; | ||||||
| @ -97,7 +97,7 @@ void binkp_deinit(s_handshake_protocol *THIS) | |||||||
| 		free(THIS->local_data); | 		free(THIS->local_data); | ||||||
| 		THIS->local_data = NULL; | 		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; | 	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"); |         log("too long string, overflow may occur"); | ||||||
|         return -1; |         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); |     r = sscanf(str, with_offset? "%s %d %d %d": "%s %d %d", &fi->fn, &fi->sz, &fi->tm, &fi->offs); | ||||||
|     chkslash = fi->fn; |     chkslash = fi->fn; | ||||||
|     while (1) { |     while (1) { | ||||||
|  | |||||||
| @ -43,7 +43,7 @@ const char *Protocols[] = | |||||||
| 
 | 
 | ||||||
| static int prot_get_next_file(s_filelist **dest, s_protinfo *pi) | 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 *ptrl = NULL; | ||||||
| 	s_filelist *best = NULL; | 	s_filelist *best = NULL; | ||||||
| 	s_fsqueue *q = &state.queue; | 	s_fsqueue *q = &state.queue; | ||||||
| @ -53,7 +53,7 @@ static int prot_get_next_file(s_filelist **dest, s_protinfo *pi) | |||||||
| 
 | 
 | ||||||
| 	/* local queue */ | 	/* local queue */ | ||||||
| 	for( ptrl = q->fslist; ptrl; ptrl = ptrl->next ) { | 	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 (hint) if (strcmp(hint->fn, ptrl->fname) !=0 || hint->sz != ptrl->size) continue; | ||||||
| 		if( ptrl->status == STATUS_WILLSEND ) | 		if( ptrl->status == STATUS_WILLSEND ) | ||||||
| 		{ | 		{ | ||||||
| @ -91,7 +91,7 @@ static int prot_get_next_file(s_filelist **dest, s_protinfo *pi) | |||||||
| 				best = ptrl; | 				best = ptrl; | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 	//log("scan1 done");
 | 	//DEB((D_OUTBOUND, log("scan1 done");
 | ||||||
| 	 | 	 | ||||||
| 	if( best ) | 	if( best ) | ||||||
| 	{ | 	{ | ||||||
| @ -107,16 +107,16 @@ static int prot_get_next_file(s_filelist **dest, s_protinfo *pi) | |||||||
| 			return 0; | 			return 0; | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 	//log("scan2 done");
 | 	//DEB((D_OUTBOUND, log("scan2 done");
 | ||||||
| 	 | 	 | ||||||
| 	/* network queue */ | 	/* network queue */ | ||||||
| #ifdef NETSPOOL | #ifdef NETSPOOL | ||||||
| 
 | 
 | ||||||
|         if (hint) return 1; // cannot choose
 |         if (hint) return 1; // cannot choose
 | ||||||
| 
 | 
 | ||||||
| 	/*log("netspool next file");*/ | 	/*DEB((D_OUTBOUND, log("netspool next file");*/ | ||||||
| 	if(state.netspool.state == NS_NOTINIT) { | 	if(state.netspool.state == NS_NOTINIT) { | ||||||
| 	    /*log("new netspool connection");*/ | 	    /*DEB((D_OUTBOUND, log("new netspool connection");*/ | ||||||
| #define ADDRBUF 3000 | #define ADDRBUF 3000 | ||||||
| #define SMALLBUF 128 | #define SMALLBUF 128 | ||||||
| 	    char password[SMALLBUF]; | 	    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 *host = conf_string(cf_netspool_host); | ||||||
| 	    char *port = conf_string(cf_netspool_port); | 	    char *port = conf_string(cf_netspool_port); | ||||||
| 	    if(host==NULL) { | 	    if(host==NULL) { | ||||||
| 		//log("netspool is not configured");
 | 		//DEB((D_OUTBOUND, log("netspool is not configured");
 | ||||||
| 	        state.netspool.state = NS_UNCONF; | 	        state.netspool.state = NS_UNCONF; | ||||||
| 	    } else { | 	    } else { | ||||||
| 	        if (state.n_remoteaddr==0) { | 	        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); | 	                log("no buffer space for address %s", address); | ||||||
| 	                break; | 	                break; | ||||||
| 	            } | 	            } | ||||||
| 	            log("add address %s", address); | 	            DEB((D_OUTBOUND, "add address %s", address)); | ||||||
| 	            memcpy (addresses+pos, address, alen); | 	            memcpy (addresses+pos, address, alen); | ||||||
| 	            pos += alen; | 	            pos += alen; | ||||||
| 	            addresses[pos++] = 0; | 	            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) { | 	if(state.netspool.state == NS_READY) { | ||||||
| 	    /*log("netspool request");*/ | 	    /*DEB((D_OUTBOUND, log("netspool request");*/ | ||||||
| 	    netspool_query(&state.netspool, "ALL"); | 	    netspool_query(&state.netspool, "ALL"); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	if(state.netspool.state == NS_RECEIVING) { | 	if(state.netspool.state == NS_RECEIVING) { | ||||||
| 	    //log("netspool begin receive");
 | 	    //DEB((D_OUTBOUND, log("netspool begin receive");
 | ||||||
| 	    netspool_receive(&state.netspool); | 	    netspool_receive(&state.netspool); | ||||||
| 	} else { | 	} else { | ||||||
| 	    //log("netspool could not start receive");
 | 	    //DEB((D_OUTBOUND, log("netspool could not start receive");
 | ||||||
| 	    return 1; | 	    return 1; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	if(state.netspool.state == NS_RECVFILE) { | 	if(state.netspool.state == NS_RECVFILE) { | ||||||
| 	    /*log("netspool start file");*/ | 	    /*DEB((D_OUTBOUND, log("netspool start file");*/ | ||||||
| 	    *dest = NULL; | 	    *dest = NULL; | ||||||
| 	    return 0; | 	    return 0; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	if(state.netspool.state == NS_READY) { | 	if(state.netspool.state == NS_READY) { | ||||||
| 	    //log("netspool queue empty");
 | 	    //DEB((D_OUTBOUND, log("netspool queue empty");
 | ||||||
| 	    netspool_end(&state.netspool); | 	    netspool_end(&state.netspool); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| @ -254,42 +254,42 @@ int p_tx_fopen(s_protinfo *pi, s_filehint *hint) | |||||||
| 		return 1; | 		return 1; | ||||||
| 		 | 		 | ||||||
| 	if (hint) { | 	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; | 	    int i; | ||||||
| 	    for (i=0; i++; i<pi->n_sentfiles) { | 	    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) { | 	        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) { | 	            if (pi->sentfiles[i].bytes_total == hint->sz) { | ||||||
| 	                log("size match"); | 	                DEB((D_OUTBOUND, "size match")); | ||||||
| 	                if (pi->sentfiles[i].mod_time == hint->tm) { | 	                if (pi->sentfiles[i].mod_time == hint->tm) { | ||||||
| 	                    log("time match"); | 	                    DEB((D_OUTBOUND, "time match")); | ||||||
| 	                    if (!pi->sentfiles[i].fp) { | 	                    if (!pi->sentfiles[i].fp) { | ||||||
| 	                        log("already closed"); | 	                        DEB((D_OUTBOUND, "already closed")); | ||||||
| 	                        return -1; | 	                        return -1; | ||||||
| 	                    } | 	                    } | ||||||
| 	                    pi->send = pi->sentfiles + i; | 	                    pi->send = pi->sentfiles + i; | ||||||
| 	                    pi->send->eofseen = FALSE; | 	                    pi->send->eofseen = FALSE; | ||||||
|                             pi->send->status = FSTAT_PROCESS; |                             pi->send->status = FSTAT_PROCESS; | ||||||
|                             log("reopened %s", pi->send->fname); |                             DEB((D_OUTBOUND, "reopened %s", pi->send->fname)); | ||||||
| 	                    return 0; | 	                    return 0; | ||||||
| 	                } | 	                } | ||||||
| 	            } | 	            } | ||||||
| 	        } | 	        } | ||||||
| 	    } | 	    } | ||||||
| 	    log("no file for this hint"); | 	    DEB((D_OUTBOUND, "no file for this hint")); | ||||||
| 	    return -1; | 	    return -1; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| get_next_file: | get_next_file: | ||||||
| 	if( prot_get_next_file(&ptrl, pi) ) { | 	if( prot_get_next_file(&ptrl, pi) ) { | ||||||
| 	    log("no next file"); | 	    DEB((D_OUTBOUND, "no next file")); | ||||||
| 	    return 1; | 	    return 1; | ||||||
|         } |         } | ||||||
|          |          | ||||||
| 	if( ptrl ) { | 	if( ptrl ) { | ||||||
| 	 | 	 | ||||||
| 	    log("sending local file"); | 	    DEB((D_OUTBOUND, "sending local file")); | ||||||
| 	    /* Mark this file as "processed" */ | 	    /* Mark this file as "processed" */ | ||||||
| 	    ptrl->status = STATUS_SENDING; | 	    ptrl->status = STATUS_SENDING; | ||||||
| 
 | 
 | ||||||
| @ -328,14 +328,14 @@ get_next_file: | |||||||
| 	 */ | 	 */ | ||||||
| 	if( pi->sentfiles && pi->n_sentfiles > 0 ) | 	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)); | 		pi->sentfiles = (s_finfo *)xrealloc(pi->sentfiles, sizeof(s_finfo)*(pi->n_sentfiles+1)); | ||||||
| 		memset(&pi->sentfiles[pi->n_sentfiles], '\0', sizeof(s_finfo)); | 		memset(&pi->sentfiles[pi->n_sentfiles], '\0', sizeof(s_finfo)); | ||||||
| 		pi->send = &pi->sentfiles[pi->n_sentfiles++]; | 		pi->send = &pi->sentfiles[pi->n_sentfiles++]; | ||||||
| 	} | 	} | ||||||
| 	else | 	else | ||||||
| 	{ | 	{ | ||||||
| 	        log("adding file to new sentfile"); | 	        DEB((D_OUTBOUND, "adding file to new sentfile")); | ||||||
| 		pi->sentfiles = (s_finfo *)xmalloc(sizeof(s_finfo)); | 		pi->sentfiles = (s_finfo *)xmalloc(sizeof(s_finfo)); | ||||||
| 		memset(pi->sentfiles, '\0', sizeof(s_finfo)); | 		memset(pi->sentfiles, '\0', sizeof(s_finfo)); | ||||||
| 		pi->send = pi->sentfiles; | 		pi->send = pi->sentfiles; | ||||||
| @ -407,7 +407,7 @@ get_next_file: | |||||||
| int p_tx_rewind(s_protinfo *pi, size_t pos) | int p_tx_rewind(s_protinfo *pi, size_t pos) | ||||||
| { | { | ||||||
|     if( !pi || !pi->send || !pi->send->fp) { |     if( !pi || !pi->send || !pi->send->fp) { | ||||||
|         log("cannot rewind"); |         DEB((D_OUTBOUND, "cannot rewind")); | ||||||
|         return -1; |         return -1; | ||||||
|     } |     } | ||||||
|     return fseek(pi->send->fp, pos, SEEK_SET); |     return fseek(pi->send->fp, pos, SEEK_SET); | ||||||
| @ -469,7 +469,7 @@ int p_tx_fclose(s_protinfo *pi) | |||||||
| 	long cps = 0; | 	long cps = 0; | ||||||
| 	 | 	 | ||||||
| 	if (!pi->send) { | 	if (!pi->send) { | ||||||
| 	    log("already closed"); | 	    DEB((D_OUTBOUND, "already closed")); | ||||||
| 	    return -1; | 	    return -1; | ||||||
| 	} | 	} | ||||||
| 	 | 	 | ||||||
| @ -541,7 +541,7 @@ int p_tx_fclose(s_protinfo *pi) | |||||||
| 			break; | 			break; | ||||||
| #ifdef NETSPOOL | #ifdef NETSPOOL | ||||||
| 		case ACTION_ACKNOWLEDGE: | 		case ACTION_ACKNOWLEDGE: | ||||||
| 			log("netspool commit %s", state.netspool.filename); | 			DEB((D_OUTBOUND, "netspool commit %s", state.netspool.filename)); | ||||||
| 			netspool_acknowledge(&state.netspool); | 			netspool_acknowledge(&state.netspool); | ||||||
| 			break; | 			break; | ||||||
| #endif | #endif | ||||||
| @ -574,7 +574,7 @@ long int p_tx_readfile(char *buffer, size_t buflen, s_protinfo *pi) | |||||||
| 
 | 
 | ||||||
| #ifdef NETSPOOL | #ifdef NETSPOOL | ||||||
| 	if (pi->send->netspool) { | 	if (pi->send->netspool) { | ||||||
| 	    /*log("reading netspool file");*/ | 	    /*DEB((D_OUTBOUND, log("reading netspool file");*/ | ||||||
| 	    if( state.netspool.state != NS_RECVFILE ) { | 	    if( state.netspool.state != NS_RECVFILE ) { | ||||||
| 		log("send: wrong netspool state"); | 		log("send: wrong netspool state"); | ||||||
| 		pi->send->status = FSTAT_SKIPPED; | 		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; | 		pi->send->status = FSTAT_SKIPPED; | ||||||
| 		return -2; | 		return -2; | ||||||
| 	    } | 	    } | ||||||
| 	    /*log("got %d bytes from netspool", n);*/ | 	    /*DEB((D_OUTBOUND, log("got %d bytes from netspool", n);*/ | ||||||
| 	    return n; | 	    return n; | ||||||
| 	} else { | 	} else { | ||||||
| 	    /*log("reading local file");*/ | 	    /*DEB((D_OUTBOUND, log("reading local file");*/ | ||||||
| 	} | 	} | ||||||
| #endif | #endif | ||||||
| 	/*
 | 	/*
 | ||||||
| @ -749,9 +749,9 @@ static int p_move2inbound(s_protinfo *pi) | |||||||
| 		{ | 		{ | ||||||
| 			log("recv: cannot get unique name for \"%s\"", | 			log("recv: cannot get unique name for \"%s\"", | ||||||
| 				pi->recv->local_name); | 				pi->recv->local_name); | ||||||
| 			log("free realname"); | 			DEB((D_FREE, "free realname")); | ||||||
| 			free(realname); | 			free(realname); | ||||||
| 			log("freed"); | 			DEB((D_FREE, "freed")); | ||||||
| 			return 1; | 			return 1; | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| @ -799,14 +799,14 @@ static int p_move2inbound(s_protinfo *pi) | |||||||
| 	} | 	} | ||||||
| 	 | 	 | ||||||
| 	if( realname ) { | 	if( realname ) { | ||||||
| 	        log("free realname"); | 	        DEB((D_FREE, "free realname")); | ||||||
| 		free(realname); | 		free(realname); | ||||||
| 		log("freed"); | 		DEB((D_FREE, "freed")); | ||||||
| 	} | 	} | ||||||
| 	if( uniqname ) { | 	if( uniqname ) { | ||||||
| 	        log("free uniqname"); | 	        DEB((D_FREE, "free uniqname")); | ||||||
| 		free(uniqname); | 		free(uniqname); | ||||||
| 		log("freed"); | 		DEB((D_FREE, "freed")); | ||||||
| 	} | 	} | ||||||
| 	 | 	 | ||||||
| 	return rc ? 1 : 0; | 	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) | 			if( pi->recv->mod_time == localtogmt(st.st_mtime) | ||||||
| 			 && pi->recv->bytes_total == st.st_size ) | 			 && pi->recv->bytes_total == st.st_size ) | ||||||
| 			{ | 			{ | ||||||
| 				log("recv: allready have \"%s\"", fname); | 				log("recv: already have \"%s\"", fname); | ||||||
| 				pi->recv->status = FSTAT_SKIPPED; | 				pi->recv->status = FSTAT_SKIPPED; | ||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
| 	        log("free fname"); | 	        DEB((D_FREE, "free fname")); | ||||||
| 		free(fname); fname = NULL; | 		free(fname); fname = NULL; | ||||||
| 		log("freed"); | 		DEB((D_FREE, "freed")); | ||||||
| 		 | 		 | ||||||
| 		if( pi->recv->status == FSTAT_SKIPPED ) | 		if( pi->recv->status == FSTAT_SKIPPED ) | ||||||
| 			return 2; | 			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	 | 				else	 | ||||||
| 					pi->recv->status = FSTAT_REFUSED; | 					pi->recv->status = FSTAT_REFUSED; | ||||||
| 				 | 				 | ||||||
| 				log("free pi->recv->fname"); | 				DEB((D_FREE, "free pi->recv->fname")); | ||||||
| 				free(pi->recv->fname); | 				free(pi->recv->fname); | ||||||
| 				pi->recv->fname = NULL; | 				pi->recv->fname = NULL; | ||||||
| 				log("freed"); | 				DEB((D_FREE, "freed")); | ||||||
| 				 | 				 | ||||||
| 				return pi->recv->status == FSTAT_SKIPPED ? 2 : 1; | 				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); | 		logerr("recv: cannot open \"%s\" -> refuse", pi->recv->fname); | ||||||
| 		 | 		 | ||||||
| 		pi->recv->status = FSTAT_REFUSED; | 		pi->recv->status = FSTAT_REFUSED; | ||||||
|  | 		DEB((D_FREE, "p_rx_open free")); | ||||||
| 		free(pi->recv->fname); | 		free(pi->recv->fname); | ||||||
| 		pi->recv->fname = NULL; | 		pi->recv->fname = NULL; | ||||||
|  | 		DEB((D_FREE, "p_rx_open ok")); | ||||||
| 		 | 		 | ||||||
| 		return 1; | 		return 1; | ||||||
| 	} | 	} | ||||||
| @ -1595,8 +1597,10 @@ char *prot_unique_name(char *dirname, char *fname, int type) | |||||||
| 				*p = 'A'; | 				*p = 'A'; | ||||||
| 			else if( --p < result || *p == '.' || *p == '/' ) | 			else if( --p < result || *p == '.' || *p == '/' ) | ||||||
| 			{ | 			{ | ||||||
|  | 			        DEB((D_FREE, "free result")); | ||||||
| 				free(result); | 				free(result); | ||||||
| 				result = NULL; | 				result = NULL; | ||||||
|  | 				DEB((D_FREE, "result ok")); | ||||||
| 				break; | 				break; | ||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
| @ -1627,8 +1631,11 @@ char *prot_unique_name(char *dirname, char *fname, int type) | |||||||
| 	 | 	 | ||||||
| 	if( try >= MAX_TRIES ) | 	if( try >= MAX_TRIES ) | ||||||
| 	{ | 	{ | ||||||
| 		if( result ) | 		if( result ) { | ||||||
|  | 		        DEB((D_FREE, "free result")); | ||||||
| 			free(result); | 			free(result); | ||||||
|  | 			DEB((D_FREE, "result ok")); | ||||||
|  | 		} | ||||||
| 		 | 		 | ||||||
| 		return NULL; | 		return NULL; | ||||||
| 	} | 	} | ||||||
| @ -1647,7 +1654,7 @@ char *prot_unique_name(char *dirname, char *fname, int type) | |||||||
|  */ |  */ | ||||||
| void deinit_finfo(s_finfo *fi) | void deinit_finfo(s_finfo *fi) | ||||||
| { | { | ||||||
|         log("deinit_finfo"); |         DEB((D_FREE, "deinit_finfo")); | ||||||
| 	if( fi->fp ) | 	if( fi->fp ) | ||||||
| 		fclose(fi->fp); | 		fclose(fi->fp); | ||||||
| 	 | 	 | ||||||
| @ -1659,7 +1666,7 @@ void deinit_finfo(s_finfo *fi) | |||||||
| 		free(fi->fname); | 		free(fi->fname); | ||||||
| 	 | 	 | ||||||
| 	memset(fi, '\0', sizeof(s_finfo)); | 	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) | void deinit_protinfo(s_protinfo *pi) | ||||||
| { | { | ||||||
| 	int i; | 	int i; | ||||||
| 	log("deinit_protinfo"); | 	DEB((D_FREE, "deinit_protinfo")); | ||||||
| 	 | 	 | ||||||
| 	for( i = 0; i < pi->n_sentfiles; i++ ) | 	for( i = 0; i < pi->n_sentfiles; i++ ) | ||||||
| 		deinit_finfo(&pi->sentfiles[i]); | 		deinit_finfo(&pi->sentfiles[i]); | ||||||
| @ -1793,5 +1800,5 @@ void deinit_protinfo(s_protinfo *pi) | |||||||
| 		free(pi->rcvdfiles); | 		free(pi->rcvdfiles); | ||||||
| 	 | 	 | ||||||
| 	memset(pi, '\0', sizeof(s_protinfo)); | 	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); | 		gotoexit(BFERR_FATALERROR); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| #ifdef DEBUG |  | ||||||
| 	(void)debug_setfilename(log_getfilename(LOG_FILE_DEBUG)); |  | ||||||
| #endif |  | ||||||
| 	 |  | ||||||
| 	if( inetd ) | 	if( inetd ) | ||||||
| 	{ | 	{ | ||||||
| 		if( connstr && *connstr ) | 		if( connstr && *connstr ) | ||||||
|  | |||||||
| @ -249,10 +249,6 @@ int call_system_quiet(const char *connstr, bool inet) | |||||||
| 		return BFERR_FATALERROR; | 		return BFERR_FATALERROR; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| #ifdef DEBUG |  | ||||||
| 	(void)debug_setfilename(log_getfilename(LOG_FILE_DEBUG)); |  | ||||||
| #endif |  | ||||||
| 	 |  | ||||||
| 	if( inet ) | 	if( inet ) | ||||||
| 	{ | 	{ | ||||||
| 		if( connstr && *connstr ) | 		if( connstr && *connstr ) | ||||||
| @ -351,10 +347,6 @@ int call_system_modem(void) | |||||||
| 		return BFERR_FATALERROR; | 		return BFERR_FATALERROR; | ||||||
| 	} | 	} | ||||||
| 	 | 	 | ||||||
| #ifdef DEBUG |  | ||||||
| 	(void)debug_setfilename(log_getfilename(LOG_FILE_DEBUG)); |  | ||||||
| #endif |  | ||||||
| 	 |  | ||||||
| 	if( (rc = port_open(state.modemport, 1, &oldtio)) == 0 ) | 	if( (rc = port_open(state.modemport, 1, &oldtio)) == 0 ) | ||||||
| 	{ | 	{ | ||||||
| 		/* Load dialing options */ | 		/* Load dialing options */ | ||||||
| @ -506,10 +498,6 @@ int call_system_tcpip(int callwith) // only TCPIP values | |||||||
| 		return BFERR_FATALERROR; | 		return BFERR_FATALERROR; | ||||||
| 	} | 	} | ||||||
| 	 | 	 | ||||||
| #ifdef DEBUG |  | ||||||
| 	(void)debug_setfilename(log_getfilename(LOG_FILE_DEBUG)); |  | ||||||
| #endif |  | ||||||
| 	 |  | ||||||
| 	switch( callwith ) { | 	switch( callwith ) { | ||||||
| case CALL_TCPIP_BINKP: | case CALL_TCPIP_BINKP: | ||||||
| 		state.tcpmode = TCPMODE_BINKP; | 		state.tcpmode = TCPMODE_BINKP; | ||||||
|  | |||||||
| @ -164,7 +164,7 @@ void init_state(s_state *pstate) | |||||||
| 
 | 
 | ||||||
| void deinit_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->linename) free(pstate->linename); | ||||||
| 	if (pstate->cidstr) free(pstate->cidstr); | 	if (pstate->cidstr) free(pstate->cidstr); | ||||||
| 	if (pstate->peername) free(pstate->peername); | 	if (pstate->peername) free(pstate->peername); | ||||||
| @ -185,7 +185,7 @@ void deinit_state(s_state *pstate) | |||||||
| 	memset(pstate, '\0', sizeof(s_state)); | 	memset(pstate, '\0', sizeof(s_state)); | ||||||
| 
 | 
 | ||||||
| 	pstate->session_rc = -1; | 	pstate->session_rc = -1; | ||||||
|         log("deinit_state end"); |         DEB((D_FREE, "deinit_state end")); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| s_faddr *session_1remote_address() | 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 */ | 					/* Encode digest to the hex string */ | ||||||
| 					string_bin_to_hex(digest_hex, digest_bin, 16); | 					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 ) | 					if( strcasecmp(passwd, digest_hex) == 0 ) | ||||||
| 						good_passwd = TRUE; | 						good_passwd = TRUE; | ||||||
| @ -621,7 +621,7 @@ void session_traffic(void) | |||||||
| 	rc = session_traffic_set_incoming(&state.traff_recv); | 	rc = session_traffic_set_incoming(&state.traff_recv); | ||||||
| 	session_traffic_log(TRUE,  rc ? NULL : &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); | 	session_traffic_log(FALSE, &state.traff_send); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -161,7 +161,9 @@ int plock_create(const char *lockname) | |||||||
| 		*++p = '\0'; | 		*++p = '\0'; | ||||||
| 	else | 	else | ||||||
| 	{ | 	{ | ||||||
|  | 	        DEB((D_FREE, "plock free")); | ||||||
| 		free(tmpname); | 		free(tmpname); | ||||||
|  | 		DEB((D_FREE, "plock freed")); | ||||||
| 		return PLOCK_ERROR; | 		return PLOCK_ERROR; | ||||||
| 	} | 	} | ||||||
| 	tmpname = xstrcat(tmpname, "bforce-XXXXXX"); | 	tmpname = xstrcat(tmpname, "bforce-XXXXXX"); | ||||||
| @ -169,7 +171,9 @@ int plock_create(const char *lockname) | |||||||
| 	if( (p = mktemp(tmpname)) == NULL ) | 	if( (p = mktemp(tmpname)) == NULL ) | ||||||
| 	{ | 	{ | ||||||
| 		logerr("can't generate unique file name from \"%s\"", tmpname); | 		logerr("can't generate unique file name from \"%s\"", tmpname); | ||||||
|  | 		DEB((D_FREE, "plock free")); | ||||||
| 		free(tmpname); | 		free(tmpname); | ||||||
|  | 		DEB((D_FREE, "plock freed")); | ||||||
| 		return PLOCK_ERROR; | 		return PLOCK_ERROR; | ||||||
| 	} | 	} | ||||||
| 	 | 	 | ||||||
| @ -179,7 +183,9 @@ int plock_create(const char *lockname) | |||||||
| 	DEB((D_OUTBOUND, "out_bsy_createfile: createlink(\"%s\", \"%s\"), rc = %d", | 	DEB((D_OUTBOUND, "out_bsy_createfile: createlink(\"%s\", \"%s\"), rc = %d", | ||||||
| 		lockname, p, rc)); | 		lockname, p, rc)); | ||||||
| 	 | 	 | ||||||
|  | 	DEB((D_FREE, "plock free")); | ||||||
| 	free(tmpname); | 	free(tmpname); | ||||||
|  | 	DEB((D_FREE, "plock freed")); | ||||||
| 	 | 	 | ||||||
| 	return rc; | 	return rc; | ||||||
| } | } | ||||||
|  | |||||||
							
								
								
									
										48
									
								
								source/configure
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										48
									
								
								source/configure
									
									
									
									
										vendored
									
									
								
							| @ -1,8 +1,8 @@ | |||||||
| #! /bin/sh | #! /bin/sh | ||||||
| # Guess values for system-dependent variables and create Makefiles. | # 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, | # 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: In particular, zsh $ZSH_VERSION has bugs and should" | ||||||
|     $as_echo "$0: be upgraded to zsh 4.3.4 or later." |     $as_echo "$0: be upgraded to zsh 4.3.4 or later." | ||||||
|   else |   else | ||||||
|     $as_echo "$0: Please tell bug-autoconf@gnu.org and |     $as_echo "$0: Please tell bug-autoconf@gnu.org and sergey@fidoman.ru | ||||||
| $0: e.kozhuhovskiy@gmail.com about your system, including | $0: about your system, including any error possibly output | ||||||
| $0: any error possibly output before this message. Then | $0: before this message. Then install a modern shell, or | ||||||
| $0: install a modern shell, or manually run the script | $0: manually run the script under such a shell if you do | ||||||
| $0: under such a shell if you do have one." | $0: have one." | ||||||
|   fi |   fi | ||||||
|   exit 1 |   exit 1 | ||||||
| fi | fi | ||||||
| @ -560,9 +560,9 @@ MAKEFLAGS= | |||||||
| # Identity of this package. | # Identity of this package. | ||||||
| PACKAGE_NAME='bforce' | PACKAGE_NAME='bforce' | ||||||
| PACKAGE_TARNAME='bforce' | PACKAGE_TARNAME='bforce' | ||||||
| PACKAGE_VERSION='0.22.9' | PACKAGE_VERSION='0.24' | ||||||
| PACKAGE_STRING='bforce 0.22.9' | PACKAGE_STRING='bforce 0.24' | ||||||
| PACKAGE_BUGREPORT='e.kozhuhovskiy@gmail.com' | PACKAGE_BUGREPORT='sergey@fidoman.ru' | ||||||
| PACKAGE_URL='' | PACKAGE_URL='' | ||||||
| 
 | 
 | ||||||
| ac_default_prefix=/usr/local/fido | 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. |   # 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. |   # This message is too long to be a string in the A/UX 3.1 sh. | ||||||
|   cat <<_ACEOF |   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]... | Usage: $0 [OPTION]... [VAR=VALUE]... | ||||||
| 
 | 
 | ||||||
| @ -1309,7 +1309,7 @@ fi | |||||||
| 
 | 
 | ||||||
| if test -n "$ac_init_help"; then | if test -n "$ac_init_help"; then | ||||||
|   case $ac_init_help in |   case $ac_init_help in | ||||||
|      short | recursive ) echo "Configuration of bforce 0.22.9:";; |      short | recursive ) echo "Configuration of bforce 0.24:";; | ||||||
|    esac |    esac | ||||||
|   cat <<\_ACEOF |   cat <<\_ACEOF | ||||||
| 
 | 
 | ||||||
| @ -1354,7 +1354,7 @@ Some influential environment variables: | |||||||
| Use these variables to override the choices made by `configure' or to help | Use these variables to override the choices made by `configure' or to help | ||||||
| it to find libraries and programs with nonstandard names/locations. | it to find libraries and programs with nonstandard names/locations. | ||||||
| 
 | 
 | ||||||
| Report bugs to <e.kozhuhovskiy@gmail.com>. | Report bugs to <sergey@fidoman.ru>. | ||||||
| _ACEOF | _ACEOF | ||||||
| ac_status=$? | ac_status=$? | ||||||
| fi | fi | ||||||
| @ -1417,7 +1417,7 @@ fi | |||||||
| test -n "$ac_init_help" && exit $ac_status | test -n "$ac_init_help" && exit $ac_status | ||||||
| if $ac_init_version; then | if $ac_init_version; then | ||||||
|   cat <<\_ACEOF |   cat <<\_ACEOF | ||||||
| bforce configure 0.22.9 | bforce configure 0.24 | ||||||
| generated by GNU Autoconf 2.68 | generated by GNU Autoconf 2.68 | ||||||
| 
 | 
 | ||||||
| Copyright (C) 2010 Free Software Foundation, Inc. | 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: 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:${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 "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} | ||||||
| ( $as_echo "## --------------------------------------- ## | ( $as_echo "## -------------------------------- ## | ||||||
| ## Report this to e.kozhuhovskiy@gmail.com ## | ## Report this to sergey@fidoman.ru ## | ||||||
| ## --------------------------------------- ##" | ## -------------------------------- ##" | ||||||
|      ) | sed "s/^/$as_me: WARNING:     /" >&2 |      ) | sed "s/^/$as_me: WARNING:     /" >&2 | ||||||
|     ;; |     ;; | ||||||
| esac | esac | ||||||
| @ -1840,7 +1840,7 @@ cat >config.log <<_ACEOF | |||||||
| This file contains any messages produced by compilers while | This file contains any messages produced by compilers while | ||||||
| running configure, to aid debugging if configure makes a mistake. | 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 | generated by GNU Autoconf 2.68.  Invocation command line was | ||||||
| 
 | 
 | ||||||
|   $ $0 $@ |   $ $0 $@ | ||||||
| @ -4961,7 +4961,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 | |||||||
| # report actual input values of CONFIG_FILES etc. instead of their | # report actual input values of CONFIG_FILES etc. instead of their | ||||||
| # values after options handling. | # values after options handling. | ||||||
| ac_log=" | 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 | generated by GNU Autoconf 2.68.  Invocation command line was | ||||||
| 
 | 
 | ||||||
|   CONFIG_FILES    = $CONFIG_FILES |   CONFIG_FILES    = $CONFIG_FILES | ||||||
| @ -5017,13 +5017,13 @@ $config_files | |||||||
| Configuration headers: | Configuration headers: | ||||||
| $config_headers | $config_headers | ||||||
| 
 | 
 | ||||||
| Report bugs to <e.kozhuhovskiy@gmail.com>." | Report bugs to <sergey@fidoman.ru>." | ||||||
| 
 | 
 | ||||||
| _ACEOF | _ACEOF | ||||||
| cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 | cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 | ||||||
| ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" | ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" | ||||||
| ac_cs_version="\\ | ac_cs_version="\\ | ||||||
| bforce config.status 0.22.9 | bforce config.status 0.24 | ||||||
| configured by $0, generated by GNU Autoconf 2.68, | configured by $0, generated by GNU Autoconf 2.68, | ||||||
|   with options \\"\$ac_cs_config\\" |   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 | # report actual input values of CONFIG_FILES etc. instead of their | ||||||
| # values after options handling. | # values after options handling. | ||||||
| ac_log=" | 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 | generated by GNU Autoconf 2.68.  Invocation command line was | ||||||
| 
 | 
 | ||||||
|   CONFIG_FILES    = $CONFIG_FILES |   CONFIG_FILES    = $CONFIG_FILES | ||||||
| @ -6309,13 +6309,13 @@ $config_files | |||||||
| Configuration headers: | Configuration headers: | ||||||
| $config_headers | $config_headers | ||||||
| 
 | 
 | ||||||
| Report bugs to <e.kozhuhovskiy@gmail.com>." | Report bugs to <sergey@fidoman.ru>." | ||||||
| 
 | 
 | ||||||
| _ACEOF | _ACEOF | ||||||
| cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 | cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 | ||||||
| ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" | ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" | ||||||
| ac_cs_version="\\ | ac_cs_version="\\ | ||||||
| bforce config.status 0.22.9 | bforce config.status 0.24 | ||||||
| configured by $0, generated by GNU Autoconf 2.68, | configured by $0, generated by GNU Autoconf 2.68, | ||||||
|   with options \\"\$ac_cs_config\\" |   with options \\"\$ac_cs_config\\" | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -3,7 +3,7 @@ dnl | |||||||
| dnl $Id$ | dnl $Id$ | ||||||
| dnl | dnl | ||||||
| #AC_INIT(bforce/bforce.c) | #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_CONFIG_HEADER(include/config.h) | ||||||
| AC_CANONICAL_SYSTEM | AC_CANONICAL_SYSTEM | ||||||
| dnl # Minimum Autoconf version required. | dnl # Minimum Autoconf version required. | ||||||
|  | |||||||
| @ -14,22 +14,6 @@ | |||||||
| #ifndef _BFORCE_H_ | #ifndef _BFORCE_H_ | ||||||
| #define _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 |  * BinkleyForce limits | ||||||
|  */ |  */ | ||||||
| @ -39,9 +23,6 @@ | |||||||
| #define BF_MAXDOMAIN		40 | #define BF_MAXDOMAIN		40 | ||||||
| #define BF_MAXADDRSTR		80 | #define BF_MAXADDRSTR		80 | ||||||
| 
 | 
 | ||||||
| /* IP-only nodes phone */ |  | ||||||
| #define NO_PSTN_PHONE "00-00-000000" |  | ||||||
| 
 |  | ||||||
| /*
 | /*
 | ||||||
|  * Maximum length of file name (without path) |  * Maximum length of file name (without path) | ||||||
|  */ |  */ | ||||||
|  | |||||||
| @ -319,7 +319,7 @@ typedef struct conf_entry { | |||||||
| 		CT_STRING, | 		CT_STRING, | ||||||
| 		CT_TRANSLATE, | 		CT_TRANSLATE, | ||||||
| 		CT_TRIES, | 		CT_TRIES, | ||||||
| 		CT_DEBLEVEL, | //		CT_DEBLEVEL,
 | ||||||
| 		CT_FILEBOX | 		CT_FILEBOX | ||||||
| 	} type; | 	} type; | ||||||
| 	s_cval_entry *data; | 	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_FREQ		0x0000400L | ||||||
| # define D_STATEM	0x0000800L | # define D_STATEM	0x0000800L | ||||||
| # define D_DAEMON	0x0001000L | # define D_DAEMON	0x0001000L | ||||||
|  | # define D_24554	0x0002000L | ||||||
|  | # define D_FREE 	0x0004000L | ||||||
| # define D_FULL		0xfffffffL | # define D_FULL		0xfffffffL | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
| @ -67,13 +69,14 @@ int  log(const char *s, ...); | |||||||
| int  logerr(const char *s, ...); | int  logerr(const char *s, ...); | ||||||
| 
 | 
 | ||||||
| #ifdef DEBUG | #ifdef DEBUG | ||||||
| void debug_setlevel(long newlevel, bool logit); | //void debug_setlevel(long newlevel, bool logit);
 | ||||||
| bool debug_isopened(void); | bool debug_isopened(void); | ||||||
| void debug_setfilename(const char *debugname); | //void debug_setfilename(const char *debugname);
 | ||||||
| int  debug_parsestring(char *str, unsigned long *deblevel); | //int  debug_parsestring(char *str, unsigned long *deblevel);
 | ||||||
| int  debug_open(const char *debugname); | int debug_open(); | ||||||
| int  debug_close(void); | int debug_close(); | ||||||
| int  debug(unsigned long what, const char *str, ...); | int debug(unsigned long what, const char *str, ...); | ||||||
|  | void debug_configure(); | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
| #endif | #endif | ||||||
|  | |||||||
| @ -82,6 +82,9 @@ typedef struct { | |||||||
| 	int        options; | 	int        options; | ||||||
| 	char       challenge[BINKP_MAXCHALLENGE+1]; | 	char       challenge[BINKP_MAXCHALLENGE+1]; | ||||||
| 	int        challenge_length; | 	int        challenge_length; | ||||||
|  | 	bool    has_TRF; | ||||||
|  | 	int     TRF_PKT; | ||||||
|  | 	int     TRF_other; | ||||||
| } s_binkp_sysinfo; | } 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_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_set_sysinfo(s_binkp_sysinfo *binkp, s_faddr *remote_addr, bool caller); | ||||||
| void binkp_parse_options(s_binkp_sysinfo *binkp, char *options); | 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 */ | /* prot_binkp_api.c */ | ||||||
| extern s_handshake_protocol handshake_protocol_binkp; | extern s_handshake_protocol handshake_protocol_binkp; | ||||||
|  | |||||||
| @ -13,4 +13,6 @@ export PATH CC CPP | |||||||
| 
 | 
 | ||||||
| #make clean | #make clean | ||||||
| #./configure --prefix=/opt/bforce --host=mips-openwrt-linux --disable-syslog --enable-netspool  | #./configure --prefix=/opt/bforce --host=mips-openwrt-linux --disable-syslog --enable-netspool  | ||||||
| make && scp bin/bforce root@gw-home:/opt/bforce/bin | #--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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user