moved address lists to state variable
This commit is contained in:
parent
1aff894fc3
commit
3e9e152054
@ -68,8 +68,7 @@ int req_createsrif(char *sname, char *req, char *rsp)
|
||||
else
|
||||
fprintf(fp, "Sysop SysOp\n");
|
||||
|
||||
if( state.handshake && state.handshake->remote_address
|
||||
&& (aptr = state.handshake->remote_address(state.handshake)) )
|
||||
if( aptr = session_1remote_address() )
|
||||
fprintf(fp, "AKA %s\n", ftn_addrstr(abuf, *aptr));
|
||||
else
|
||||
return -1;
|
||||
|
@ -73,7 +73,7 @@ int sendstr(int s, const char *buf) {
|
||||
|
||||
|
||||
|
||||
void netspool_start(s_netspool_state *state, const char *host, const char *port, const char *address, const char *password)
|
||||
void netspool_start(s_netspool_state *state, const char *host, const char *port, const char *addresses, const char *password)
|
||||
{
|
||||
int s, r;
|
||||
struct addrinfo hint;
|
||||
@ -126,9 +126,12 @@ void netspool_start(s_netspool_state *state, const char *host, const char *port,
|
||||
if( r ) { state->state = NS_ERROR; state->error = "IO error"; return; }
|
||||
//puts(strbuf); -- hello from remote
|
||||
|
||||
snprintf(strbuf, STRBUF, "ADDRESS %s", address);
|
||||
r = sendstr(s, strbuf);
|
||||
if( r ) { state->state = NS_ERROR; state->error = "IO error"; return; }
|
||||
while (*addresses) { // stop when zero length string under pointer
|
||||
snprintf(strbuf, STRBUF, "ADDRESS %s", addresses);
|
||||
r = sendstr(s, strbuf);
|
||||
if( r ) { state->state = NS_ERROR; state->error = "IO error"; return; }
|
||||
addresses += strlen(addresses)+1; // go to next string
|
||||
}
|
||||
|
||||
snprintf(strbuf, STRBUF, "PASSWORD %s", password);
|
||||
r = sendstr(s, strbuf);
|
||||
|
@ -61,7 +61,7 @@ typedef struct {
|
||||
int binkp_getforsend(s_binkp_state *bstate, char *buf, int *block_type, unsigned short *block_length);
|
||||
int binkp_doreceiveblock(s_binkp_state *bstate, char *buf, int block_type, unsigned short block_length);
|
||||
void binkp_process_NUL(s_binkp_sysinfo *remote_data, char *buffer);
|
||||
void binkp_process_ADR(s_binkp_sysinfo *remote_data, char *buffer);
|
||||
void binkp_process_ADR(char *buffer);
|
||||
|
||||
int binkp_loop(s_binkp_state *bstate) {
|
||||
unsigned char readbuf[BINKP_HEADER+BINKP_MAXBLOCK+1];
|
||||
@ -419,20 +419,20 @@ case 2:
|
||||
buf[0] = BPMSG_ADR;
|
||||
wr_pos = 1;
|
||||
int i;
|
||||
for( i = 0; i < bstate->local_data->anum; i++ )
|
||||
for( i = 0; i < state.n_localaddr; i++ )
|
||||
{
|
||||
if (i) wr_pos += sprintf(buf+wr_pos, " ");
|
||||
if (bstate->local_data->addrs[i].addr.point) {
|
||||
if (state.localaddrs[i].addr.point) {
|
||||
wr_pos += sprintf(buf+wr_pos, "%d:%d/%d.%d@%s",
|
||||
bstate->local_data->addrs[i].addr.zone, bstate->local_data->addrs[i].addr.net,
|
||||
bstate->local_data->addrs[i].addr.node, bstate->local_data->addrs[i].addr.point,
|
||||
bstate->local_data->addrs[i].addr.domain);
|
||||
state.localaddrs[i].addr.zone, state.localaddrs[i].addr.net,
|
||||
state.localaddrs[i].addr.node, state.localaddrs[i].addr.point,
|
||||
state.localaddrs[i].addr.domain);
|
||||
}
|
||||
else {
|
||||
wr_pos += sprintf(buf+wr_pos, "%d:%d/%d@%s",
|
||||
bstate->local_data->addrs[i].addr.zone, bstate->local_data->addrs[i].addr.net,
|
||||
bstate->local_data->addrs[i].addr.node,
|
||||
bstate->local_data->addrs[i].addr.domain);
|
||||
state.localaddrs[i].addr.zone, state.localaddrs[i].addr.net,
|
||||
state.localaddrs[i].addr.node,
|
||||
state.localaddrs[i].addr.domain);
|
||||
}
|
||||
}
|
||||
*block_type = BINKP_BLK_CMD;
|
||||
@ -635,9 +635,9 @@ case BPMSG_ADR: /* List of addresses */
|
||||
return -1;
|
||||
}
|
||||
if( bstate->extracmd[0] !=-1 ) return 0; // suspend !!!
|
||||
binkp_process_ADR(bstate->remote_data, buf+1);
|
||||
binkp_process_ADR(buf+1);
|
||||
|
||||
if( !bstate->remote_data->anum ) {
|
||||
if( !state.n_remoteaddr ) {
|
||||
log("error: remote did not supplied any addresses");
|
||||
if( bstate->extracmd[0] !=-1 ) return 0; // suspend
|
||||
bstate->extracmd[0] = BPMSG_BSY;
|
||||
@ -653,9 +653,9 @@ case BPMSG_ADR: /* List of addresses */
|
||||
bstate->extraislast = false;
|
||||
sprintf(bstate->extracmd+1,"OPT MB");
|
||||
s_override ovr;
|
||||
for(i = 0; i < bstate->remote_data->anum; i++) {
|
||||
for(i = 0; i < state.n_remoteaddr; i++) {
|
||||
ovr.sFlags = "";
|
||||
override_get (&ovr, bstate->remote_data->addrs[i].addr, 0);
|
||||
override_get (&ovr, state.remoteaddrs[i].addr, 0);
|
||||
if (nodelist_checkflag (ovr.sFlags, "NR")==0) {
|
||||
strcat (bstate->extracmd+1, " NR");
|
||||
break;
|
||||
@ -666,7 +666,7 @@ case BPMSG_ADR: /* List of addresses */
|
||||
|
||||
if (bstate->mode == bmode_outgoing_handshake) {
|
||||
// check that remote has the address we call
|
||||
if( session_addrs_check_genuine(bstate->remote_data->addrs, bstate->remote_data->anum,
|
||||
if( session_addrs_check_genuine(state.remoteaddrs, state.n_remoteaddr,
|
||||
state.node.addr) ) {
|
||||
log("error: remote does not have the called address");
|
||||
bstate->extracmd[0] = BPMSG_ERR;
|
||||
@ -678,7 +678,7 @@ case BPMSG_ADR: /* List of addresses */
|
||||
strncpy(bstate->remote_data->passwd, bstate->local_data->passwd, BINKP_MAXPASSWD);
|
||||
bstate->remote_data->passwd[BINKP_MAXPASSWD] = '\0';
|
||||
|
||||
if( session_addrs_check(bstate->remote_data->addrs, bstate->remote_data->anum,
|
||||
if( session_addrs_check(state.remoteaddrs, state.n_remoteaddr,
|
||||
bstate->remote_data->passwd, NULL, 0) ) {
|
||||
log("error: Security violation");
|
||||
bstate->extracmd[0] = BPMSG_ERR;
|
||||
@ -715,7 +715,7 @@ case BPMSG_PWD: /* Session password */
|
||||
return 1;
|
||||
}
|
||||
// lock addresses
|
||||
if( session_addrs_lock(bstate->remote_data->addrs, bstate->remote_data->anum) ) {
|
||||
if( session_addrs_lock(state.remoteaddrs, state.n_remoteaddr) ) {
|
||||
log("error locking addresses of the remote");
|
||||
if( bstate->extracmd[0] !=-1 ) return 0; // suspend if extra is occupied
|
||||
bstate->extracmd[0] = BPMSG_BSY;
|
||||
@ -815,7 +815,7 @@ case BPMSG_OK: /* Password was acknowleged (data ignored) */
|
||||
log("unexpected M_OK");
|
||||
return -1;
|
||||
}
|
||||
if (session_addrs_lock(bstate->remote_data->addrs, bstate->remote_data->anum)) {
|
||||
if (session_addrs_lock(state.remoteaddrs, state.n_remoteaddr)) {
|
||||
log("error: unable to lock");
|
||||
if (bstate->extracmd[0]!=-1) return 0;
|
||||
bstate->extracmd[0] = BPMSG_BSY;
|
||||
@ -1148,7 +1148,7 @@ void binkp_process_NUL(s_binkp_sysinfo *remote_data, char *buffer)
|
||||
log("BinkP NUL: \"%s\"", string_printable(buffer)); // NUL cannot be invalid as it is optional info
|
||||
}
|
||||
|
||||
void binkp_process_ADR(s_binkp_sysinfo *remote_data, char *buffer)
|
||||
void binkp_process_ADR(char *buffer)
|
||||
{
|
||||
s_faddr addr;
|
||||
char *p, *q;
|
||||
@ -1158,7 +1158,7 @@ void binkp_process_ADR(s_binkp_sysinfo *remote_data, char *buffer)
|
||||
if( ftn_addrparse(&addr, p, FALSE) )
|
||||
log("BinkP got unparsable address \"%s\"", string_printable(p));
|
||||
else
|
||||
session_addrs_add(&remote_data->addrs, &remote_data->anum, addr);
|
||||
session_addrs_add(&state.remoteaddrs, &state.n_remoteaddr, addr);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1167,19 +1167,19 @@ int binkp_auth_incoming(s_binkp_sysinfo *remote_data)
|
||||
if( remote_data->challenge_length > 0
|
||||
&& strncmp(remote_data->passwd, "CRAM-MD5-", 9) == 0 )
|
||||
{
|
||||
log("md5 auth addrs %s", remote_data->addrs);
|
||||
log("md5 auth anum %d", remote_data->anum);
|
||||
log("md5 auth passwd %s", remote_data->passwd + 9);
|
||||
log("md5 auth challenge %s", remote_data->challenge);
|
||||
log("md5 auth challenge len %d", remote_data->challenge_length);
|
||||
return session_addrs_check(remote_data->addrs,
|
||||
remote_data->anum,
|
||||
//log("md5 auth addrs %s", remote_data->addrs);
|
||||
//log("md5 auth anum %d", remote_data->anum);
|
||||
//log("md5 auth passwd %s", remote_data->passwd + 9);
|
||||
//log("md5 auth challenge %s", remote_data->challenge);
|
||||
//log("md5 auth challenge len %d", remote_data->challenge_length);
|
||||
return session_addrs_check(state.remoteaddrs,
|
||||
state.n_remoteaddr,
|
||||
remote_data->passwd + 9,
|
||||
remote_data->challenge,
|
||||
remote_data->challenge_length);
|
||||
}
|
||||
|
||||
log("plain-text auth");
|
||||
return session_addrs_check(remote_data->addrs, remote_data->anum,
|
||||
return session_addrs_check(state.remoteaddrs, state.n_remoteaddr,
|
||||
remote_data->passwd, NULL, 0);
|
||||
}
|
||||
|
@ -48,7 +48,7 @@ s_handshake_protocol handshake_protocol_binkp = {
|
||||
binkp_incoming2,
|
||||
binkp_outgoing2,
|
||||
/* Section 2 */
|
||||
binkp_remote_address,
|
||||
// binkp_remote_address,
|
||||
binkp_remote_password,
|
||||
binkp_remote_sysop_name,
|
||||
binkp_remote_system_name,
|
||||
@ -58,7 +58,7 @@ s_handshake_protocol handshake_protocol_binkp = {
|
||||
binkp_remote_mailer,
|
||||
NULL,
|
||||
/* Section 3 */
|
||||
binkp_local_address,
|
||||
// binkp_local_address,
|
||||
binkp_local_password
|
||||
};
|
||||
|
||||
@ -113,9 +113,9 @@ int binkp_incoming2(s_handshake_protocol *THIS)
|
||||
rc = binkp_incoming(local_data, remote_data);
|
||||
|
||||
binkp_log_sysinfo(remote_data);
|
||||
if( remote_data->anum > 0 )
|
||||
if( state.n_remoteaddr > 0 )
|
||||
{
|
||||
session_remote_lookup(remote_data->addrs, remote_data->anum);
|
||||
session_remote_lookup(state.remoteaddrs, state.n_remoteaddr);
|
||||
session_remote_log_status();
|
||||
binkp_log_options(remote_data);
|
||||
}
|
||||
@ -125,8 +125,8 @@ int binkp_incoming2(s_handshake_protocol *THIS)
|
||||
/*
|
||||
* Create mail/files queue
|
||||
*/
|
||||
session_create_files_queue(remote_data->addrs,
|
||||
remote_data->anum);
|
||||
session_create_files_queue(state.remoteaddrs,
|
||||
state.n_remoteaddr);
|
||||
session_set_send_options();
|
||||
session_set_inbound();
|
||||
session_set_freqs_status();
|
||||
@ -155,9 +155,9 @@ int binkp_outgoing2(s_handshake_protocol *THIS)
|
||||
rc = binkp_outgoing(local_data, remote_data);
|
||||
|
||||
binkp_log_sysinfo(remote_data);
|
||||
if( remote_data->anum > 0 )
|
||||
if( state.n_remoteaddr > 0 )
|
||||
{
|
||||
session_remote_lookup(remote_data->addrs, remote_data->anum);
|
||||
session_remote_lookup(state.remoteaddrs, state.n_remoteaddr);
|
||||
session_remote_log_status();
|
||||
binkp_log_options(remote_data);
|
||||
}
|
||||
@ -167,8 +167,7 @@ int binkp_outgoing2(s_handshake_protocol *THIS)
|
||||
/*
|
||||
* Create mail/files queue
|
||||
*/
|
||||
session_create_files_queue(remote_data->addrs,
|
||||
remote_data->anum);
|
||||
session_create_files_queue(state.remoteaddrs, state.n_remoteaddr);
|
||||
session_set_send_options();
|
||||
session_set_inbound();
|
||||
}
|
||||
@ -176,7 +175,7 @@ int binkp_outgoing2(s_handshake_protocol *THIS)
|
||||
return rc;
|
||||
}
|
||||
|
||||
s_faddr *binkp_remote_address(s_handshake_protocol *THIS)
|
||||
/*s_faddr *binkp_remote_address(s_handshake_protocol *THIS)
|
||||
{
|
||||
ASSERT(THIS);
|
||||
ASSERT(THIS->remote_data);
|
||||
@ -185,7 +184,7 @@ s_faddr *binkp_remote_address(s_handshake_protocol *THIS)
|
||||
return &((s_binkp_sysinfo *)THIS->remote_data)->addrs[0].addr;
|
||||
|
||||
return NULL;
|
||||
}
|
||||
} */
|
||||
|
||||
char *binkp_remote_password(s_handshake_protocol *THIS)
|
||||
{
|
||||
@ -264,7 +263,7 @@ char *binkp_remote_mailer(s_handshake_protocol *THIS)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
s_faddr *binkp_local_address(s_handshake_protocol *THIS)
|
||||
/*s_faddr *binkp_local_address(s_handshake_protocol *THIS)
|
||||
{
|
||||
ASSERT(THIS);
|
||||
ASSERT(THIS->local_data);
|
||||
@ -273,7 +272,7 @@ s_faddr *binkp_local_address(s_handshake_protocol *THIS)
|
||||
return &((s_binkp_sysinfo *)THIS->local_data)->addrs[0].addr;
|
||||
|
||||
return NULL;
|
||||
}
|
||||
} */
|
||||
|
||||
char *binkp_local_password(s_handshake_protocol *THIS)
|
||||
{
|
||||
|
@ -146,11 +146,9 @@ void binkp_log_sysinfo(s_binkp_sysinfo *binkp)
|
||||
int i;
|
||||
char abuf[BF_MAXADDRSTR+1];
|
||||
|
||||
if( binkp->anum )
|
||||
for( i = 0; i < binkp->anum; i++ )
|
||||
{
|
||||
log(" Address : %s", ftn_addrstr(abuf, binkp->addrs[i].addr));
|
||||
}
|
||||
for( i = 0; i < state.n_remoteaddr; i++ ) {
|
||||
log(" Address : %s", ftn_addrstr(abuf, state.remoteaddrs[i].addr));
|
||||
}
|
||||
|
||||
if( *binkp->systname && *binkp->phone )
|
||||
log(" System : %s (%s)",
|
||||
@ -220,25 +218,21 @@ void binkp_set_sysinfo(s_binkp_sysinfo *binkp, s_faddr *remote_addr, bool caller
|
||||
const char *p_flags = conf_string(cf_flags);
|
||||
|
||||
/* free previously allocated memory */
|
||||
if( binkp->addrs )
|
||||
free(binkp->addrs);
|
||||
// if( binkp->addrs )
|
||||
// free(binkp->addrs);
|
||||
|
||||
memset(binkp, '\0', sizeof(s_binkp_sysinfo));
|
||||
|
||||
/* Set best primary address */
|
||||
if( remote_addr )
|
||||
{
|
||||
if(remote_addr) {
|
||||
primary = session_get_bestaka(*remote_addr);
|
||||
|
||||
/* Add primary address */
|
||||
if( primary )
|
||||
session_addrs_add(&binkp->addrs, &binkp->anum, *primary);
|
||||
if (primary) session_addrs_add(&state.localaddrs, &state.n_localaddr, *primary);
|
||||
}
|
||||
|
||||
/* Add other AKAs */
|
||||
for( addr_ptr = conf_first(cf_address); addr_ptr;
|
||||
addr_ptr = conf_next(addr_ptr) )
|
||||
{
|
||||
for( addr_ptr = conf_first(cf_address); addr_ptr; addr_ptr = conf_next(addr_ptr) ) {
|
||||
for( hide_ptr = conf_first(cf_hide_our_aka); hide_ptr;
|
||||
hide_ptr = conf_next(hide_ptr) )
|
||||
{
|
||||
@ -247,12 +241,11 @@ void binkp_set_sysinfo(s_binkp_sysinfo *binkp, s_faddr *remote_addr, bool caller
|
||||
}
|
||||
|
||||
if( !hide_ptr && primary != &addr_ptr->d.falist.addr )
|
||||
session_addrs_add(&binkp->addrs, &binkp->anum,
|
||||
session_addrs_add(&state.localaddrs, &state.n_localaddr,
|
||||
addr_ptr->d.falist.addr);
|
||||
}
|
||||
|
||||
if( binkp->anum == 0 )
|
||||
log("warning: no addresses will be presented to remote");
|
||||
if (state.n_localaddr == 0) log("warning: no addresses will be presented to remote");
|
||||
|
||||
/* session password */
|
||||
if( caller )
|
||||
|
@ -41,12 +41,13 @@ const char *Protocols[] =
|
||||
* Zero value on success and non-zero if nothing to send
|
||||
*/
|
||||
|
||||
static int prot_get_next_file(s_filelist **dest, s_protinfo *pi, s_filehint *hint)
|
||||
static int prot_get_next_file(s_filelist **dest, s_protinfo *pi)
|
||||
{
|
||||
log("prot_get_next_file"); // %s %d", hint->fn, hint->sz);
|
||||
s_filelist *ptrl = NULL;
|
||||
s_filelist *best = NULL;
|
||||
s_fsqueue *q = &state.queue;
|
||||
s_filehint *hint = NULL; // M_GET hinting does not work good here as it spec net_name and it is unknown here (especially for PKTs)
|
||||
|
||||
*dest = NULL;
|
||||
|
||||
@ -116,24 +117,48 @@ static int prot_get_next_file(s_filelist **dest, s_protinfo *pi, s_filehint *hin
|
||||
/*log("netspool next file");*/
|
||||
if(state.netspool.state == NS_NOTINIT) {
|
||||
/*log("new netspool connection");*/
|
||||
char password[100];
|
||||
char address[300];
|
||||
#define ADDRBUF 3000
|
||||
#define SMALLBUF 128
|
||||
char password[SMALLBUF];
|
||||
char address[SMALLBUF];
|
||||
char addresses[ADDRBUF];
|
||||
int i, pos, alen;
|
||||
char *host = conf_string(cf_netspool_host);
|
||||
char *port = conf_string(cf_netspool_port);
|
||||
if(host==NULL) {
|
||||
//log("netspool is not configured");
|
||||
state.netspool.state = NS_UNCONF;
|
||||
} else {
|
||||
snprintf(address, 299, state.node.addr.point? "%d:%d/%d.%d": "%d:%d/%d",
|
||||
state.node.addr.zone, state.node.addr.net,
|
||||
state.node.addr.node, state.node.addr.point);
|
||||
if (state.n_remoteaddr==0) {
|
||||
log("cannot start netspool: list of remote addresses has zero length");
|
||||
return -1;
|
||||
}
|
||||
for(i=0, pos=0; i<state.n_remoteaddr; i++) {
|
||||
alen=snprintf(address, SMALLBUF, state.remoteaddrs[i].addr.point? "%d:%d/%d.%d": "%d:%d/%d",
|
||||
state.remoteaddrs[i].addr.zone, state.remoteaddrs[i].addr.net,
|
||||
state.remoteaddrs[i].addr.node, state.remoteaddrs[i].addr.point);
|
||||
if (!state.remoteaddrs[i].good) {
|
||||
log("ignoring addr %s", address);
|
||||
continue;
|
||||
}
|
||||
if (pos+alen+1 > ADDRBUF-1) { // space for zero length string as end marker
|
||||
log("no buffer space for address %s", address);
|
||||
break;
|
||||
}
|
||||
log("add address %s", address);
|
||||
memcpy (addresses+pos, address, alen);
|
||||
pos += alen;
|
||||
addresses[pos++] = 0;
|
||||
}
|
||||
addresses[pos++] = 0;
|
||||
|
||||
if(state.protected) {
|
||||
session_get_password(state.node.addr, password, 100);
|
||||
session_get_password(state.remoteaddrs[0].addr, password, SMALLBUF);
|
||||
} else {
|
||||
password[0] = 0;
|
||||
}
|
||||
log("netspool start %s %s %s (pwd)", host, port, address);
|
||||
netspool_start(&state.netspool, host, port, address, password);
|
||||
log("netspool start %s %s", host, port);
|
||||
netspool_start(&state.netspool, host, port, addresses, password);
|
||||
}
|
||||
}
|
||||
|
||||
@ -257,7 +282,7 @@ int p_tx_fopen(s_protinfo *pi, s_filehint *hint)
|
||||
}
|
||||
|
||||
get_next_file:
|
||||
if( prot_get_next_file(&ptrl, pi, hint) ) {
|
||||
if( prot_get_next_file(&ptrl, pi) ) {
|
||||
log("no next file");
|
||||
return 1;
|
||||
}
|
||||
|
@ -610,7 +610,7 @@ void emsi_set_sysinfo(s_emsi *emsi, s_emsi *remote_emsi, int hrc,
|
||||
const char *p_emsifr = conf_string(cf_emsi_FR_time);
|
||||
|
||||
/* free previously allocated memory */
|
||||
if( emsi->addrs ) free(emsi->addrs);
|
||||
// if( emsi->addrs ) free(emsi->addrs);
|
||||
|
||||
memset(emsi, '\0', sizeof(s_emsi));
|
||||
|
||||
@ -624,7 +624,7 @@ void emsi_set_sysinfo(s_emsi *emsi, s_emsi *remote_emsi, int hrc,
|
||||
|
||||
/* Add primary address */
|
||||
if( primary )
|
||||
session_addrs_add(&emsi->addrs, &emsi->anum, *primary);
|
||||
session_addrs_add(&state.localaddrs, &state.n_localaddr, *primary);
|
||||
|
||||
/* Add other AKAs */
|
||||
for( addr_ptr = conf_first(cf_address); addr_ptr;
|
||||
@ -638,11 +638,11 @@ void emsi_set_sysinfo(s_emsi *emsi, s_emsi *remote_emsi, int hrc,
|
||||
}
|
||||
|
||||
if( !hide_ptr && primary != &addr_ptr->d.falist.addr )
|
||||
session_addrs_add(&emsi->addrs, &emsi->anum,
|
||||
session_addrs_add(&state.localaddrs, &state.n_localaddr,
|
||||
addr_ptr->d.falist.addr);
|
||||
}
|
||||
|
||||
if( emsi->anum == 0 )
|
||||
if( state.localaddrs == 0 )
|
||||
log("warning: no addresses will be presented to remote");
|
||||
|
||||
/* session password */
|
||||
|
@ -24,7 +24,7 @@ void emsi_init(s_handshake_protocol *THIS);
|
||||
void emsi_deinit(s_handshake_protocol *THIS);
|
||||
int emsi_incoming(s_handshake_protocol *THIS);
|
||||
int emsi_outgoing(s_handshake_protocol *THIS);
|
||||
s_faddr *emsi_remote_address(s_handshake_protocol *THIS);
|
||||
//s_faddr *emsi_remote_address(s_handshake_protocol *THIS);
|
||||
char *emsi_remote_password(s_handshake_protocol *THIS);
|
||||
char *emsi_remote_sysop_name(s_handshake_protocol *THIS);
|
||||
char *emsi_remote_system_name(s_handshake_protocol *THIS);
|
||||
@ -33,7 +33,7 @@ char *emsi_remote_phone(s_handshake_protocol *THIS);
|
||||
char *emsi_remote_flags(s_handshake_protocol *THIS);
|
||||
char *emsi_remote_mailer(s_handshake_protocol *THIS);
|
||||
int emsi_remote_traffic(s_handshake_protocol *THIS, s_traffic *dest);
|
||||
s_faddr *emsi_local_address(s_handshake_protocol *THIS);
|
||||
//s_faddr *emsi_local_address(s_handshake_protocol *THIS);
|
||||
char *emsi_local_password(s_handshake_protocol *THIS);
|
||||
|
||||
s_handshake_protocol handshake_protocol_emsi = {
|
||||
@ -49,7 +49,7 @@ s_handshake_protocol handshake_protocol_emsi = {
|
||||
emsi_incoming,
|
||||
emsi_outgoing,
|
||||
/* Section 2 */
|
||||
emsi_remote_address,
|
||||
// emsi_remote_address,
|
||||
emsi_remote_password,
|
||||
emsi_remote_sysop_name,
|
||||
emsi_remote_system_name,
|
||||
@ -59,7 +59,7 @@ s_handshake_protocol handshake_protocol_emsi = {
|
||||
emsi_remote_mailer,
|
||||
emsi_remote_traffic,
|
||||
/* Section 3 */
|
||||
emsi_local_address,
|
||||
// emsi_local_address,
|
||||
emsi_local_password
|
||||
};
|
||||
|
||||
@ -151,7 +151,7 @@ int emsi_incoming(s_handshake_protocol *THIS)
|
||||
/*
|
||||
* Check password(s)
|
||||
*/
|
||||
if( session_addrs_check(remote_emsi->addrs, remote_emsi->anum,
|
||||
if( session_addrs_check(state.remoteaddrs, state.n_remoteaddr,
|
||||
remote_emsi->passwd, NULL, 0) )
|
||||
{
|
||||
rc = HRC_BAD_PASSWD;
|
||||
@ -161,7 +161,7 @@ int emsi_incoming(s_handshake_protocol *THIS)
|
||||
else
|
||||
{
|
||||
/* Lock (create BSY) remote addresses */
|
||||
if( session_addrs_lock(remote_emsi->addrs, remote_emsi->anum) )
|
||||
if( session_addrs_lock(state.remoteaddrs, state.n_remoteaddr) )
|
||||
{
|
||||
log("all remote addresses are busy");
|
||||
rc = HRC_BUSY;
|
||||
@ -172,7 +172,7 @@ int emsi_incoming(s_handshake_protocol *THIS)
|
||||
* We know caller's address so we can process
|
||||
* more expressions and fill state.node structure..
|
||||
*/
|
||||
session_remote_lookup(remote_emsi->addrs, remote_emsi->anum);
|
||||
session_remote_lookup(state.remoteaddrs, state.n_remoteaddr);
|
||||
|
||||
if( session_check_speed() )
|
||||
rc = HRC_LOW_SPEED;
|
||||
@ -219,8 +219,8 @@ int emsi_incoming(s_handshake_protocol *THIS)
|
||||
/*
|
||||
* Create mail/files queue
|
||||
*/
|
||||
session_create_files_queue(remote_emsi->addrs,
|
||||
remote_emsi->anum);
|
||||
session_create_files_queue(state.remoteaddrs,
|
||||
state.n_remoteaddr);
|
||||
|
||||
/*
|
||||
* Set FREQ processor status
|
||||
@ -290,21 +290,21 @@ int emsi_outgoing(s_handshake_protocol *THIS)
|
||||
/*
|
||||
* Make sure expected address was presented
|
||||
*/
|
||||
if( session_addrs_check_genuine(remote_emsi->addrs,
|
||||
remote_emsi->anum, state.node.addr) )
|
||||
if( session_addrs_check_genuine(state.remoteaddrs,
|
||||
state.n_remoteaddr, state.node.addr) )
|
||||
return HRC_NO_ADDRESS;
|
||||
|
||||
/*
|
||||
* Check password(s)
|
||||
*/
|
||||
if( session_addrs_check(remote_emsi->addrs, remote_emsi->anum,
|
||||
if( session_addrs_check(state.remoteaddrs, state.n_remoteaddr,
|
||||
remote_emsi->passwd, NULL, 0) )
|
||||
return HRC_BAD_PASSWD;
|
||||
|
||||
/*
|
||||
* Lock (create BSY) remote addresses
|
||||
*/
|
||||
(void)session_addrs_lock(remote_emsi->addrs, remote_emsi->anum);
|
||||
(void)session_addrs_lock(state.remoteaddrs, state.n_remoteaddr);
|
||||
|
||||
/*
|
||||
* Set protocol we will use ("options" ignored)
|
||||
@ -341,13 +341,12 @@ int emsi_outgoing(s_handshake_protocol *THIS)
|
||||
/*
|
||||
* Create mail/files queue
|
||||
*/
|
||||
session_create_files_queue(remote_emsi->addrs,
|
||||
remote_emsi->anum);
|
||||
session_create_files_queue(state.remoteaddrs, state.n_remoteaddr);
|
||||
|
||||
return HRC_OK;
|
||||
}
|
||||
|
||||
s_faddr *emsi_remote_address(s_handshake_protocol *THIS)
|
||||
/*s_faddr *emsi_remote_address(s_handshake_protocol *THIS)
|
||||
{
|
||||
ASSERT(THIS);
|
||||
ASSERT(THIS->remote_data);
|
||||
@ -356,7 +355,7 @@ s_faddr *emsi_remote_address(s_handshake_protocol *THIS)
|
||||
return &((s_emsi *)THIS->remote_data)->addrs[0].addr;
|
||||
|
||||
return NULL;
|
||||
}
|
||||
} */
|
||||
|
||||
char *emsi_remote_password(s_handshake_protocol *THIS)
|
||||
{
|
||||
@ -456,7 +455,7 @@ int emsi_remote_traffic(s_handshake_protocol *THIS, s_traffic *dest)
|
||||
return -1;
|
||||
}
|
||||
|
||||
s_faddr *emsi_local_address(s_handshake_protocol *THIS)
|
||||
/*s_faddr *emsi_local_address(s_handshake_protocol *THIS)
|
||||
{
|
||||
ASSERT(THIS);
|
||||
ASSERT(THIS->local_data);
|
||||
@ -465,7 +464,7 @@ s_faddr *emsi_local_address(s_handshake_protocol *THIS)
|
||||
return &((s_emsi *)THIS->local_data)->addrs[0].addr;
|
||||
|
||||
return NULL;
|
||||
}
|
||||
} */
|
||||
|
||||
char *emsi_local_password(s_handshake_protocol *THIS)
|
||||
{
|
||||
|
@ -116,10 +116,10 @@ char *emsi_createdat(s_emsi *emsi)
|
||||
|
||||
/* our addresses, akas, etc :) */
|
||||
tmp = add_char(tmp, '{');
|
||||
for( i = 0; i < emsi->anum; i++ )
|
||||
for( i = 0; i < state.n_localaddr; i++ )
|
||||
{
|
||||
if( i ) tmp = add_char(tmp, ' ');
|
||||
tmp = add_str(tmp, ftn_addrstr(abuf, emsi->addrs[i].addr));
|
||||
tmp = add_str(tmp, ftn_addrstr(abuf, state.localaddrs[i].addr));
|
||||
}
|
||||
tmp = add_char(tmp, '}');
|
||||
|
||||
@ -146,27 +146,27 @@ char *emsi_createdat(s_emsi *emsi)
|
||||
if( emsi->linkcodes.FNC ) tmp = add_str(tmp, "FNC,");
|
||||
if( emsi->linkcodes.RMA ) tmp = add_str(tmp, "RMA,");
|
||||
if( emsi->linkcodes.RH1 ) tmp = add_str(tmp, "RH1,");
|
||||
for( i = 0; i < emsi->anum; i++ )
|
||||
for( i = 0; i < state.n_localaddr; i++ )
|
||||
{
|
||||
if( emsi->addrs[i].flags & EMSI_FLAG_PU )
|
||||
if( state.localaddrs[i].flags & EMSI_FLAG_PU )
|
||||
tmp = add_nflag(tmp, "PU", i);
|
||||
if( emsi->addrs[i].flags & EMSI_FLAG_HA )
|
||||
if( state.localaddrs[i].flags & EMSI_FLAG_HA )
|
||||
tmp = add_nflag(tmp, "HA", i);
|
||||
if( emsi->addrs[i].flags & EMSI_FLAG_PM )
|
||||
if( state.localaddrs[i].flags & EMSI_FLAG_PM )
|
||||
tmp = add_nflag(tmp, "PM", i);
|
||||
if( emsi->addrs[i].flags & EMSI_FLAG_NF )
|
||||
if( state.localaddrs[i].flags & EMSI_FLAG_NF )
|
||||
tmp = add_nflag(tmp, "NF", i);
|
||||
if( emsi->addrs[i].flags & EMSI_FLAG_NX )
|
||||
if( state.localaddrs[i].flags & EMSI_FLAG_NX )
|
||||
tmp = add_nflag(tmp, "NX", i);
|
||||
if( emsi->addrs[i].flags & EMSI_FLAG_NR )
|
||||
if( state.localaddrs[i].flags & EMSI_FLAG_NR )
|
||||
tmp = add_nflag(tmp, "NR", i);
|
||||
if( emsi->addrs[i].flags & EMSI_FLAG_HN )
|
||||
if( state.localaddrs[i].flags & EMSI_FLAG_HN )
|
||||
tmp = add_nflag(tmp, "HN", i);
|
||||
if( emsi->addrs[i].flags & EMSI_FLAG_HX )
|
||||
if( state.localaddrs[i].flags & EMSI_FLAG_HX )
|
||||
tmp = add_nflag(tmp, "HX", i);
|
||||
if( emsi->addrs[i].flags & EMSI_FLAG_HF )
|
||||
if( state.localaddrs[i].flags & EMSI_FLAG_HF )
|
||||
tmp = add_nflag(tmp, "HF", i);
|
||||
if( emsi->addrs[i].flags & EMSI_FLAG_HR )
|
||||
if( state.localaddrs[i].flags & EMSI_FLAG_HR )
|
||||
tmp = add_nflag(tmp, "HR", i);
|
||||
}
|
||||
if( tmp[strlen(tmp+1)] == ',' )
|
||||
@ -468,10 +468,10 @@ int emsi_parsedat(char *emsi_dat, s_emsi *emsi)
|
||||
if( ftn_addrparse(&addr, p, FALSE) )
|
||||
log("unparsable address \"%s\" skipped", p);
|
||||
else
|
||||
session_addrs_add(&emsi->addrs, &emsi->anum, addr);
|
||||
session_addrs_add(&state.remoteaddrs, &state.n_remoteaddr, addr);
|
||||
}
|
||||
|
||||
if( emsi->anum == 0 )
|
||||
if( state.n_remoteaddr == 0 )
|
||||
{
|
||||
log("parsable addresses not found");
|
||||
return(1);
|
||||
@ -502,24 +502,24 @@ int emsi_parsedat(char *emsi_dat, s_emsi *emsi)
|
||||
else if( !strcmp(p, "RMA") ) emsi->linkcodes.RMA = 1;
|
||||
else if( !strcmp(p, "RH1") ) emsi->linkcodes.RH1 = 1;
|
||||
/* check EMSI-II address dependend flags */
|
||||
else if( ((i=nflgcmp(p, "HA")) >= 0) && (i < emsi->anum) )
|
||||
emsi->addrs[i].flags |= EMSI_FLAG_HA;
|
||||
else if( ((i=nflgcmp(p, "PM")) >= 0) && (i < emsi->anum) )
|
||||
emsi->addrs[i].flags |= EMSI_FLAG_PM;
|
||||
else if( ((i=nflgcmp(p, "NF")) >= 0) && (i < emsi->anum) )
|
||||
emsi->addrs[i].flags |= EMSI_FLAG_NF;
|
||||
else if( ((i=nflgcmp(p, "NX")) >= 0) && (i < emsi->anum) )
|
||||
emsi->addrs[i].flags |= EMSI_FLAG_NX;
|
||||
else if( ((i=nflgcmp(p, "NR")) >= 0) && (i < emsi->anum) )
|
||||
emsi->addrs[i].flags |= EMSI_FLAG_NR;
|
||||
else if( ((i=nflgcmp(p, "HN")) >= 0) && (i < emsi->anum) )
|
||||
emsi->addrs[i].flags |= EMSI_FLAG_HN;
|
||||
else if( ((i=nflgcmp(p, "HX")) >= 0) && (i < emsi->anum) )
|
||||
emsi->addrs[i].flags |= EMSI_FLAG_HX;
|
||||
else if( ((i=nflgcmp(p, "HF")) >= 0) && (i < emsi->anum) )
|
||||
emsi->addrs[i].flags |= EMSI_FLAG_HF;
|
||||
else if( ((i=nflgcmp(p, "HR")) >= 0) && (i < emsi->anum) )
|
||||
emsi->addrs[i].flags |= EMSI_FLAG_HR;
|
||||
else if( ((i=nflgcmp(p, "HA")) >= 0) && (i < state.n_remoteaddr) )
|
||||
state.remoteaddrs[i].flags |= EMSI_FLAG_HA;
|
||||
else if( ((i=nflgcmp(p, "PM")) >= 0) && (i < state.n_remoteaddr) )
|
||||
state.remoteaddrs[i].flags |= EMSI_FLAG_PM;
|
||||
else if( ((i=nflgcmp(p, "NF")) >= 0) && (i < state.n_remoteaddr) )
|
||||
state.remoteaddrs[i].flags |= EMSI_FLAG_NF;
|
||||
else if( ((i=nflgcmp(p, "NX")) >= 0) && (i < state.n_remoteaddr) )
|
||||
state.remoteaddrs[i].flags |= EMSI_FLAG_NX;
|
||||
else if( ((i=nflgcmp(p, "NR")) >= 0) && (i < state.n_remoteaddr) )
|
||||
state.remoteaddrs[i].flags |= EMSI_FLAG_NR;
|
||||
else if( ((i=nflgcmp(p, "HN")) >= 0) && (i < state.n_remoteaddr) )
|
||||
state.remoteaddrs[i].flags |= EMSI_FLAG_HN;
|
||||
else if( ((i=nflgcmp(p, "HX")) >= 0) && (i < state.n_remoteaddr) )
|
||||
state.remoteaddrs[i].flags |= EMSI_FLAG_HX;
|
||||
else if( ((i=nflgcmp(p, "HF")) >= 0) && (i < state.n_remoteaddr) )
|
||||
state.remoteaddrs[i].flags |= EMSI_FLAG_HF;
|
||||
else if( ((i=nflgcmp(p, "HR")) >= 0) && (i < state.n_remoteaddr) )
|
||||
state.remoteaddrs[i].flags |= EMSI_FLAG_HR;
|
||||
}
|
||||
|
||||
/* compatibility codes */
|
||||
@ -670,14 +670,14 @@ void emsi_logdat(s_emsi *emsi)
|
||||
|
||||
if( emsi->have_emsi )
|
||||
{
|
||||
if( emsi->anum )
|
||||
if( state.n_remoteaddr )
|
||||
{
|
||||
for( i = 0; i < emsi->anum; i++ )
|
||||
for( i = 0; i < state.n_remoteaddr; i++ )
|
||||
{
|
||||
if( emsi->addrs[i].busy )
|
||||
log(" Address : %s (Busy)", ftn_addrstr(abuf, emsi->addrs[i].addr));
|
||||
if( state.remoteaddrs[i].busy )
|
||||
log(" Address : %s (Busy)", ftn_addrstr(abuf, state.remoteaddrs[i].addr));
|
||||
else
|
||||
log(" Address : %s", ftn_addrstr(abuf, emsi->addrs[i].addr));
|
||||
log(" Address : %s", ftn_addrstr(abuf, state.remoteaddrs[i].addr));
|
||||
}
|
||||
}
|
||||
else
|
||||
|
@ -64,35 +64,35 @@ static int yoohoo_getword(const char *buf)
|
||||
* Return value:
|
||||
* None
|
||||
*/
|
||||
static void yoohoo_put_hello(char *buffer, s_yoohoo_sysinfo *hello)
|
||||
static void yoohoo_put_hello(char *buffer, s_yoohoo_sysinfo *myhello)
|
||||
{
|
||||
char *p, *q;
|
||||
|
||||
ASSERT(buffer && hello);
|
||||
ASSERT(buffer && myhello);
|
||||
|
||||
memset(buffer, '\0', YOOHOO_HELLOLEN);
|
||||
|
||||
p = buffer;
|
||||
p = yoohoo_putword(p, 0x6f);
|
||||
p = yoohoo_putword(p, 0x01); /* Hello version */
|
||||
p = yoohoo_putword(p, hello->product_code); /* Product code */
|
||||
p = yoohoo_putword(p, hello->version_maj); /* Major version */
|
||||
p = yoohoo_putword(p, hello->version_min); /* Minor version */
|
||||
p = yoohoo_putword(p, myhello->product_code); /* Product code */
|
||||
p = yoohoo_putword(p, myhello->version_maj); /* Major version */
|
||||
p = yoohoo_putword(p, myhello->version_min); /* Minor version */
|
||||
|
||||
strnxcpy(p, hello->system, 60); /* Node name */
|
||||
strnxcpy(p, myhello->system, 60); /* Node name */
|
||||
|
||||
/*
|
||||
* Add domain after the end of 'Node name'
|
||||
* TODO: check it for buffer overflows %-I
|
||||
*/
|
||||
if( hello->anum > 0 && hello->addrs[0].addr.domain
|
||||
&& *hello->addrs[0].addr.domain )
|
||||
if( state.n_localaddr > 0 && state.localaddrs[0].addr.domain
|
||||
&& *state.localaddrs[0].addr.domain )
|
||||
{
|
||||
char *q;
|
||||
if( strlen(hello->system) + strlen(hello->addrs[0].addr.domain) > 57 )
|
||||
if( strlen(myhello->system) + strlen(state.localaddrs[0].addr.domain) > 57 )
|
||||
{
|
||||
if( strlen(hello->addrs[0].addr.domain) < 60 )
|
||||
q = p + (60 - strlen(hello->addrs[0].addr.domain));
|
||||
if( strlen(state.localaddrs[0].addr.domain) < 60 )
|
||||
q = p + (60 - strlen(state.localaddrs[0].addr.domain));
|
||||
else
|
||||
q = p;
|
||||
|
||||
@ -100,29 +100,29 @@ static void yoohoo_put_hello(char *buffer, s_yoohoo_sysinfo *hello)
|
||||
}
|
||||
else
|
||||
{
|
||||
q = p + strlen(hello->system) + 1;
|
||||
q = p + strlen(myhello->system) + 1;
|
||||
}
|
||||
strnxcpy(q, hello->addrs[0].addr.domain, 60-(q-p));
|
||||
strnxcpy(q, state.localaddrs[0].addr.domain, 60-(q-p));
|
||||
}
|
||||
p += 60;
|
||||
|
||||
strnxcpy(p, hello->sysop, 20); /* SysOp name */
|
||||
strnxcpy(p, myhello->sysop, 20); /* SysOp name */
|
||||
p += 20;
|
||||
|
||||
if( hello->anum > 0 )
|
||||
if( state.n_localaddr > 0 )
|
||||
{
|
||||
p = yoohoo_putword(p, hello->addrs[0].addr.zone);
|
||||
p = yoohoo_putword(p, hello->addrs[0].addr.net);
|
||||
p = yoohoo_putword(p, hello->addrs[0].addr.node);
|
||||
p = yoohoo_putword(p, hello->addrs[0].addr.point);
|
||||
p = yoohoo_putword(p, state.localaddrs[0].addr.zone);
|
||||
p = yoohoo_putword(p, state.localaddrs[0].addr.net);
|
||||
p = yoohoo_putword(p, state.localaddrs[0].addr.node);
|
||||
p = yoohoo_putword(p, state.localaddrs[0].addr.point);
|
||||
}
|
||||
else
|
||||
p += 8;
|
||||
|
||||
strncpy(p, hello->passwd, 8); /* Session password */
|
||||
strncpy(p, myhello->passwd, 8); /* Session password */
|
||||
p += 8;
|
||||
p += 8; /* Reserved 8 bytes */
|
||||
p = yoohoo_putword(p, hello->capabilities); /* Capabilities */
|
||||
p = yoohoo_putword(p, myhello->capabilities); /* Capabilities */
|
||||
p += 12; /* Reserved 12 bytes */
|
||||
|
||||
#ifdef DEBUG
|
||||
@ -145,11 +145,11 @@ static void yoohoo_put_hello(char *buffer, s_yoohoo_sysinfo *hello)
|
||||
* Return value:
|
||||
* None
|
||||
*/
|
||||
static int yoohoo_get_hello(s_yoohoo_sysinfo *hello, const char *buffer)
|
||||
static int yoohoo_get_hello(s_yoohoo_sysinfo *remhello, const char *buffer)
|
||||
{
|
||||
s_faddr addr;
|
||||
|
||||
ASSERT(buffer && hello);
|
||||
ASSERT(buffer && remhello);
|
||||
|
||||
#ifdef DEBUG
|
||||
{
|
||||
@ -159,16 +159,16 @@ static int yoohoo_get_hello(s_yoohoo_sysinfo *hello, const char *buffer)
|
||||
}
|
||||
#endif
|
||||
|
||||
memset(hello, '\0', sizeof(s_yoohoo_sysinfo));
|
||||
memset(remhello, '\0', sizeof(s_yoohoo_sysinfo));
|
||||
|
||||
if( yoohoo_getword(buffer+2) != 0x01 )
|
||||
log("YooHoo hello version is %d!", yoohoo_getword(buffer+2));
|
||||
|
||||
hello->product_code = yoohoo_getword(buffer+4);
|
||||
hello->version_maj = yoohoo_getword(buffer+6);
|
||||
hello->version_min = yoohoo_getword(buffer+8);
|
||||
strnxcpy(hello->system, buffer+10, MIN(sizeof(hello->system),60+1));
|
||||
strnxcpy(hello->sysop, buffer+70, MIN(sizeof(hello->sysop),20+1));
|
||||
remhello->product_code = yoohoo_getword(buffer+4);
|
||||
remhello->version_maj = yoohoo_getword(buffer+6);
|
||||
remhello->version_min = yoohoo_getword(buffer+8);
|
||||
strnxcpy(remhello->system, buffer+10, MIN(sizeof(remhello->system),60+1));
|
||||
strnxcpy(remhello->sysop, buffer+70, MIN(sizeof(remhello->sysop),20+1));
|
||||
|
||||
/*
|
||||
* Extract address
|
||||
@ -178,11 +178,11 @@ static int yoohoo_get_hello(s_yoohoo_sysinfo *hello, const char *buffer)
|
||||
addr.net = yoohoo_getword(buffer+92);
|
||||
addr.node = yoohoo_getword(buffer+94);
|
||||
addr.point = yoohoo_getword(buffer+96);
|
||||
session_addrs_add(&hello->addrs, &hello->anum, addr);
|
||||
session_addrs_add(&state.remoteaddrs, &state.n_remoteaddr, addr);
|
||||
|
||||
strnxcpy(hello->passwd, buffer+98, MIN(sizeof(hello->passwd),8+1));
|
||||
strnxcpy(remhello->passwd, buffer+98, MIN(sizeof(remhello->passwd),8+1));
|
||||
/* Reserved 8 bytes */
|
||||
hello->capabilities = yoohoo_getword(buffer+114);
|
||||
remhello->capabilities = yoohoo_getword(buffer+114);
|
||||
/* Reserved 12 bytes */
|
||||
|
||||
return 0;
|
||||
@ -466,11 +466,11 @@ void yoohoo_set_sysinfo(s_yoohoo_sysinfo *local_data, int hrc,
|
||||
* Set our local address
|
||||
*/
|
||||
if( primary )
|
||||
session_addrs_add(&local_data->addrs, &local_data->anum, *primary);
|
||||
session_addrs_add(&state.localaddrs, &state.n_localaddr, *primary);
|
||||
else if( (addr_ptr = conf_first(cf_address)) )
|
||||
session_addrs_add(&local_data->addrs, &local_data->anum, addr_ptr->d.falist.addr);
|
||||
session_addrs_add(&state.localaddrs, &state.n_localaddr, addr_ptr->d.falist.addr);
|
||||
|
||||
if( !local_data->anum )
|
||||
if( !state.n_localaddr )
|
||||
log("warning: no addresses will be presented to remote");
|
||||
|
||||
/*
|
||||
@ -557,35 +557,35 @@ void yoohoo_set_sysinfo(s_yoohoo_sysinfo *local_data, int hrc,
|
||||
* Return value:
|
||||
* None
|
||||
*/
|
||||
void yoohoo_log_sysinfo(s_yoohoo_sysinfo *yoohoo)
|
||||
void yoohoo_log_sysinfo(s_yoohoo_sysinfo *remyoohoo)
|
||||
{
|
||||
int i;
|
||||
char abuf[BF_MAXADDRSTR+1];
|
||||
|
||||
if( yoohoo->anum )
|
||||
for( i = 0; i < yoohoo->anum; i++ )
|
||||
if( state.n_remoteaddr )
|
||||
for( i = 0; i < state.n_remoteaddr; i++ )
|
||||
{
|
||||
log(" Address : %s", ftn_addrstr(abuf, yoohoo->addrs[i].addr));
|
||||
log(" Address : %s", ftn_addrstr(abuf, state.remoteaddrs[i].addr));
|
||||
}
|
||||
else
|
||||
log(" Address : <none>");
|
||||
|
||||
if( yoohoo->system[0] )
|
||||
log(" System : %s", string_printable(yoohoo->system));
|
||||
if( remyoohoo->system[0] )
|
||||
log(" System : %s", string_printable(remyoohoo->system));
|
||||
|
||||
#ifdef BFORCE_LOG_PASSWD
|
||||
if( yoohoo->passwd[0] )
|
||||
log(" Password : %s", string_printable(yoohoo->passwd));
|
||||
if( remyoohoo->passwd[0] )
|
||||
log(" Password : %s", string_printable(remyoohoo->passwd));
|
||||
#endif
|
||||
|
||||
if( yoohoo->sysop[0] )
|
||||
log(" SysOp : %s", string_printable(yoohoo->sysop));
|
||||
if( remyoohoo->sysop[0] )
|
||||
log(" SysOp : %s", string_printable(remyoohoo->sysop));
|
||||
|
||||
if( yoohoo->product_code || yoohoo->version_maj || yoohoo->version_min )
|
||||
if( remyoohoo->product_code || remyoohoo->version_maj || remyoohoo->version_min )
|
||||
{
|
||||
log(" Mailer : %s [%02x] %d.%d",
|
||||
"?", yoohoo->product_code,
|
||||
yoohoo->version_maj, yoohoo->version_min);
|
||||
"?", remyoohoo->product_code,
|
||||
remyoohoo->version_maj, remyoohoo->version_min);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -24,7 +24,7 @@ void yoohoo_init(s_handshake_protocol *THIS);
|
||||
void yoohoo_deinit(s_handshake_protocol *THIS);
|
||||
int yoohoo_incoming(s_handshake_protocol *THIS);
|
||||
int yoohoo_outgoing(s_handshake_protocol *THIS);
|
||||
s_faddr *yoohoo_remote_address(s_handshake_protocol *THIS);
|
||||
//s_faddr *yoohoo_remote_address(s_handshake_protocol *THIS);
|
||||
char *yoohoo_remote_password(s_handshake_protocol *THIS);
|
||||
char *yoohoo_remote_sysop_name(s_handshake_protocol *THIS);
|
||||
char *yoohoo_remote_system_name(s_handshake_protocol *THIS);
|
||||
@ -32,7 +32,7 @@ char *yoohoo_remote_location(s_handshake_protocol *THIS);
|
||||
char *yoohoo_remote_phone(s_handshake_protocol *THIS);
|
||||
char *yoohoo_remote_flags(s_handshake_protocol *THIS);
|
||||
char *yoohoo_remote_mailer(s_handshake_protocol *THIS);
|
||||
s_faddr *yoohoo_local_address(s_handshake_protocol *THIS);
|
||||
//s_faddr *yoohoo_local_address(s_handshake_protocol *THIS);
|
||||
char *yoohoo_local_password(s_handshake_protocol *THIS);
|
||||
|
||||
s_handshake_protocol handshake_protocol_yoohoo = {
|
||||
@ -48,7 +48,7 @@ s_handshake_protocol handshake_protocol_yoohoo = {
|
||||
yoohoo_incoming,
|
||||
yoohoo_outgoing,
|
||||
/* Section 2 */
|
||||
yoohoo_remote_address,
|
||||
// yoohoo_remote_address,
|
||||
yoohoo_remote_password,
|
||||
yoohoo_remote_sysop_name,
|
||||
yoohoo_remote_system_name,
|
||||
@ -58,7 +58,7 @@ s_handshake_protocol handshake_protocol_yoohoo = {
|
||||
NULL,
|
||||
NULL,
|
||||
/* Section 3 */
|
||||
yoohoo_local_address,
|
||||
// yoohoo_local_address,
|
||||
yoohoo_local_password
|
||||
};
|
||||
|
||||
@ -113,7 +113,7 @@ int yoohoo_incoming(s_handshake_protocol *THIS)
|
||||
/*
|
||||
* Check password(s)
|
||||
*/
|
||||
if( session_addrs_check(remote_data->addrs, remote_data->anum,
|
||||
if( session_addrs_check(state.remoteaddrs, state.n_remoteaddr,
|
||||
remote_data->passwd, NULL, 0) )
|
||||
{
|
||||
rc = HRC_BAD_PASSWD;
|
||||
@ -123,8 +123,8 @@ int yoohoo_incoming(s_handshake_protocol *THIS)
|
||||
else
|
||||
{
|
||||
/* Lock (create BSY) remote addresses */
|
||||
if( session_addrs_lock(remote_data->addrs,
|
||||
remote_data->anum) )
|
||||
if( session_addrs_lock(state.remoteaddrs,
|
||||
state.n_remoteaddr) )
|
||||
{
|
||||
log("all remote addresses are busy");
|
||||
rc = HRC_BUSY;
|
||||
@ -135,7 +135,7 @@ int yoohoo_incoming(s_handshake_protocol *THIS)
|
||||
* Fill state.node with a first valid
|
||||
* address, try to lookup it in nodelist
|
||||
*/
|
||||
session_remote_lookup(remote_data->addrs, remote_data->anum);
|
||||
session_remote_lookup(state.remoteaddrs, state.n_remoteaddr);
|
||||
|
||||
if( session_check_speed() )
|
||||
rc = HRC_LOW_SPEED;
|
||||
@ -180,7 +180,7 @@ int yoohoo_incoming(s_handshake_protocol *THIS)
|
||||
/*
|
||||
* Create mail/files queue
|
||||
*/
|
||||
session_create_files_queue(remote_data->addrs, remote_data->anum);
|
||||
session_create_files_queue(state.remoteaddrs, state.n_remoteaddr);
|
||||
|
||||
/*
|
||||
* Set FREQ processor status
|
||||
@ -238,23 +238,23 @@ int yoohoo_outgoing(s_handshake_protocol *THIS)
|
||||
/*
|
||||
* Make sure expected address was presented
|
||||
*/
|
||||
if( session_addrs_check_genuine(remote_data->addrs,
|
||||
remote_data->anum,
|
||||
if( session_addrs_check_genuine(state.remoteaddrs,
|
||||
state.n_remoteaddr,
|
||||
state.node.addr) )
|
||||
return HRC_NO_ADDRESS;
|
||||
|
||||
/*
|
||||
* Check password(s)
|
||||
*/
|
||||
if( session_addrs_check(remote_data->addrs, remote_data->anum,
|
||||
if( session_addrs_check(state.remoteaddrs, state.n_remoteaddr,
|
||||
remote_data->passwd, NULL, 0) )
|
||||
return HRC_BAD_PASSWD;
|
||||
|
||||
/*
|
||||
* Lock (create BSY) remote addresses
|
||||
*/
|
||||
(void)session_addrs_lock(remote_data->addrs,
|
||||
remote_data->anum);
|
||||
(void)session_addrs_lock(state.remoteaddrs,
|
||||
state.n_remoteaddr);
|
||||
|
||||
/*
|
||||
* Set protocol we will use ("options" ignored)
|
||||
@ -289,13 +289,12 @@ int yoohoo_outgoing(s_handshake_protocol *THIS)
|
||||
/*
|
||||
* Create mail/files queue
|
||||
*/
|
||||
session_create_files_queue(remote_data->addrs,
|
||||
remote_data->anum);
|
||||
session_create_files_queue(state.remoteaddrs, state.n_remoteaddr);
|
||||
|
||||
return HRC_OK;
|
||||
}
|
||||
|
||||
s_faddr *yoohoo_remote_address(s_handshake_protocol *THIS)
|
||||
/*s_faddr *yoohoo_remote_address(s_handshake_protocol *THIS)
|
||||
{
|
||||
ASSERT(THIS);
|
||||
ASSERT(THIS->remote_data);
|
||||
@ -304,7 +303,7 @@ s_faddr *yoohoo_remote_address(s_handshake_protocol *THIS)
|
||||
return &((s_yoohoo_sysinfo *)THIS->remote_data)->addrs[0].addr;
|
||||
|
||||
return NULL;
|
||||
}
|
||||
} */
|
||||
|
||||
char *yoohoo_remote_password(s_handshake_protocol *THIS)
|
||||
{
|
||||
@ -339,7 +338,7 @@ char *yoohoo_remote_system_name(s_handshake_protocol *THIS)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
s_faddr *yoohoo_local_address(s_handshake_protocol *THIS)
|
||||
/*s_faddr *yoohoo_local_address(s_handshake_protocol *THIS)
|
||||
{
|
||||
ASSERT(THIS);
|
||||
ASSERT(THIS->local_data);
|
||||
@ -348,7 +347,7 @@ s_faddr *yoohoo_local_address(s_handshake_protocol *THIS)
|
||||
return &((s_yoohoo_sysinfo *)THIS->local_data)->addrs[0].addr;
|
||||
|
||||
return NULL;
|
||||
}
|
||||
} */
|
||||
|
||||
char *yoohoo_local_password(s_handshake_protocol *THIS)
|
||||
{
|
||||
|
@ -58,7 +58,7 @@ static void zmodem_add_empty_packet(s_protinfo *pi)
|
||||
memset(&pkt, '\0', sizeof(s_packet));
|
||||
|
||||
pkt.dest = state.node.addr;
|
||||
pkt.orig = *state.handshake->remote_address(state.handshake);
|
||||
if (session_1remote_address()) pkt.orig = *session_1remote_address();
|
||||
|
||||
if( pkt_createpacket(p_tmpname, &pkt) )
|
||||
{
|
||||
|
@ -52,8 +52,7 @@ int session_run_command(const char *execstr)
|
||||
|
||||
if( state.handshake )
|
||||
{
|
||||
if( state.handshake->remote_address
|
||||
&& (addr = state.handshake->remote_address(state.handshake)) )
|
||||
if( addr = session_1remote_address() )
|
||||
{
|
||||
exec_env_add(&eopts, "REM_ADDR_FTN",
|
||||
ftn_addrstr_fido(abuf, *addr));
|
||||
@ -61,8 +60,7 @@ int session_run_command(const char *execstr)
|
||||
ftn_addrstr_inet(abuf, *addr));
|
||||
}
|
||||
|
||||
if( state.handshake->local_address
|
||||
&& (addr = state.handshake->local_address(state.handshake)) )
|
||||
if( addr = session_1local_address() )
|
||||
{
|
||||
exec_env_add(&eopts, "LOC_ADDR_FTN",
|
||||
ftn_addrstr_fido(abuf, *addr));
|
||||
@ -166,27 +164,38 @@ void init_state(s_state *pstate)
|
||||
|
||||
void deinit_state(s_state *pstate)
|
||||
{
|
||||
if( pstate->linename )
|
||||
free(pstate->linename);
|
||||
if( pstate->cidstr )
|
||||
free(pstate->cidstr);
|
||||
if( pstate->peername )
|
||||
free(pstate->peername);
|
||||
if( pstate->connstr )
|
||||
free(pstate->connstr);
|
||||
if( pstate->inbound )
|
||||
free(pstate->inbound);
|
||||
if( pstate->tinbound )
|
||||
free(pstate->tinbound);
|
||||
if( pstate->mailfor )
|
||||
deinit_falist(pstate->mailfor);
|
||||
|
||||
if (pstate->linename) free(pstate->linename);
|
||||
if (pstate->cidstr) free(pstate->cidstr);
|
||||
if (pstate->peername) free(pstate->peername);
|
||||
if (pstate->connstr) free(pstate->connstr);
|
||||
if (pstate->inbound) free(pstate->inbound);
|
||||
if (pstate->tinbound) free(pstate->tinbound);
|
||||
if (pstate->mailfor) deinit_falist(pstate->mailfor);
|
||||
|
||||
deinit_fsqueue(&pstate->queue);
|
||||
|
||||
if( state.handshake && state.handshake->deinit )
|
||||
if (state.handshake && state.handshake->deinit) {
|
||||
state.handshake->deinit(state.handshake);
|
||||
}
|
||||
|
||||
if (pstate->remoteaddrs) free (pstate->remoteaddrs);
|
||||
if (pstate->localaddrs) free (pstate->localaddrs);
|
||||
|
||||
memset(pstate, '\0', sizeof(s_state));
|
||||
|
||||
pstate->session_rc = -1;
|
||||
}
|
||||
|
||||
s_faddr *session_1remote_address()
|
||||
{
|
||||
if (state.n_remoteaddr > 0) return &state.remoteaddrs[0].addr;
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
s_faddr *session_1local_address()
|
||||
{
|
||||
if (state.n_localaddr > 0) return &state.localaddrs[0].addr;
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
@ -65,8 +65,8 @@ typedef enum binkp_mode {
|
||||
|
||||
|
||||
typedef struct {
|
||||
s_sysaddr *addrs;
|
||||
int anum;
|
||||
// s_sysaddr *addrs;
|
||||
// int anum;
|
||||
char passwd[BINKP_MAXPASSWD+1];
|
||||
char systname[BINKP_MAXSYSTNAME+1];
|
||||
char location[BINKP_MAXLOCATION+1];
|
||||
|
@ -143,8 +143,8 @@ struct emsi
|
||||
* {EMSI_DAT} (main handshake information)
|
||||
*/
|
||||
bool have_emsi;
|
||||
s_sysaddr *addrs; /* dynamicaly allocated array */
|
||||
int anum; /* number of used entries in it */
|
||||
// s_sysaddr *addrs; /* dynamicaly allocated array */
|
||||
// int anum; /* number of used entries in it */
|
||||
char passwd[EMSI_MAXPASSWD+1];
|
||||
s_linkcodes linkcodes; /* XXn linkcodes contained in eaddr */
|
||||
s_compcodes compcodes;
|
||||
|
@ -22,8 +22,8 @@
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
s_sysaddr *addrs; /* FTN address */
|
||||
int anum;
|
||||
// s_sysaddr *addrs; /* FTN address */
|
||||
// int anum;
|
||||
int product_code; /* product code */
|
||||
int version_maj; /* major revision of the product */
|
||||
int version_min; /* minor revision of the product */
|
||||
|
@ -20,6 +20,14 @@
|
||||
#include "io.h"
|
||||
#include "nodelist.h"
|
||||
#include "outbound.h"
|
||||
|
||||
typedef struct sysaddr {
|
||||
s_faddr addr;
|
||||
bool busy;
|
||||
bool good;
|
||||
int flags;
|
||||
} s_sysaddr;
|
||||
|
||||
#include "prot_common.h"
|
||||
|
||||
#ifdef NETSPOOL
|
||||
@ -62,13 +70,6 @@ typedef enum reqstat {
|
||||
#define HRC_TEMP_ERR 7 /* Any other temporary handshake error */
|
||||
#define HRC_OTHER_ERR 8 /* Any other error (e.g. timeout, NO CARRIER) */
|
||||
|
||||
typedef struct sysaddr {
|
||||
s_faddr addr;
|
||||
bool busy;
|
||||
bool good;
|
||||
int flags;
|
||||
} s_sysaddr;
|
||||
|
||||
typedef struct {
|
||||
char passwd[128];
|
||||
char challenge[128];
|
||||
@ -109,7 +110,7 @@ typedef struct handshake_protocol
|
||||
/*
|
||||
* 2. Remote system information extract methods
|
||||
*/
|
||||
s_faddr* (*remote_address)(struct handshake_protocol *THIS);
|
||||
// s_faddr* (*remote_address)(struct handshake_protocol *THIS);
|
||||
char* (*remote_password)(struct handshake_protocol *THIS);
|
||||
char* (*remote_sysop_name)(struct handshake_protocol *THIS);
|
||||
char* (*remote_system_name)(struct handshake_protocol *THIS);
|
||||
@ -122,7 +123,7 @@ typedef struct handshake_protocol
|
||||
/*
|
||||
* 3. Local system information extract methods
|
||||
*/
|
||||
s_faddr* (*local_address)(struct handshake_protocol *THIS);
|
||||
// s_faddr* (*local_address)(struct handshake_protocol *THIS);
|
||||
char* (*local_password)(struct handshake_protocol *THIS);
|
||||
} s_handshake_protocol;
|
||||
|
||||
@ -162,6 +163,10 @@ const s_modemport *modemport;
|
||||
#ifdef NETSPOOL
|
||||
s_netspool_state netspool;
|
||||
#endif
|
||||
s_sysaddr *remoteaddrs;
|
||||
int n_remoteaddr;
|
||||
s_sysaddr *localaddrs;
|
||||
int n_localaddr;
|
||||
};
|
||||
typedef struct state s_state;
|
||||
|
||||
@ -187,7 +192,8 @@ int session_init_outgoing();
|
||||
int session_init_incoming();
|
||||
|
||||
/* s_main.c */
|
||||
extern s_state state;
|
||||
extern s_state state; // IF YOU WANT MAKE THIS PROGRAM MULTITHREAD, MAKE THIS VARIBLE LOCAL TO THE THREADS AND PASS IT TO SUBROUTINES
|
||||
// YOU SHOULD ADD IT TO ALL FUNCTIONS: IT IS MANY OF HANDWORK BUT EASY TO DO
|
||||
|
||||
s_faddr *session_get_bestaka(s_faddr addr);
|
||||
int session_addrs_lock(s_sysaddr *addrs, int anum);
|
||||
@ -213,6 +219,9 @@ void session_traffic(void);
|
||||
void session_update_history(s_traffic *send, s_traffic *recv, int rc);
|
||||
int session(void);
|
||||
|
||||
s_faddr* session_1remote_address();
|
||||
s_faddr* session_1local_address();
|
||||
|
||||
/* sess_call.c */
|
||||
int call_system(s_faddr addr, const s_bforce_opts *opts);
|
||||
int call_system_modem(void);
|
||||
|
Loading…
x
Reference in New Issue
Block a user