diff --git a/src/sbbs3/sbbsecho.c b/src/sbbs3/sbbsecho.c index 5acc91137e8de451d63d77fab2203a0e733a1a66..9b6f02fea6b622e3196101e94f2aff70ae6f3b37 100644 --- a/src/sbbs3/sbbsecho.c +++ b/src/sbbs3/sbbsecho.c @@ -688,14 +688,17 @@ int execute(char *cmdline) /****************************************************************************** Returns the system address with the same zone as the address passed ******************************************************************************/ -fidoaddr_t getsysfaddr(short zone) +fidoaddr_t getsysfaddr(short zone, short net) { int i; + for(i=0; i<scfg.total_faddrs && net != 0; i++) + if(scfg.faddr[i].zone == zone && scfg.faddr[i].net == net) + return scfg.faddr[i]; for(i=0;i<scfg.total_faddrs;i++) if(scfg.faddr[i].zone==zone) - return(scfg.faddr[i]); - return(sys_faddr); + return scfg.faddr[i]; + return sys_faddr; } int get_outbound(fidoaddr_t dest, char* outbound, size_t maxlen, bool fileboxes) @@ -1131,7 +1134,7 @@ int create_netmail(const char *to, const smbmsg_t* msg, const char *subject, con return(-1); } - faddr=getsysfaddr(dest.zone); + faddr=getsysfaddr(dest.zone, dest.net); memset(&hdr,0,sizeof(fmsghdr_t)); hdr.origzone=faddr.zone; hdr.orignet=faddr.net; @@ -3663,7 +3666,7 @@ void putfmsg(FILE* stream, const char* fbuf, fmsghdr_t* hdr, area_t area fpkdmsg_t pkdmsg; size_t len; - addr=getsysfaddr(hdr->destzone); + addr=getsysfaddr(hdr->destzone, hdr->destnet); /* Write fixed-length header fields */ memset(&pkdmsg,0,sizeof(pkdmsg)); @@ -3792,7 +3795,7 @@ void putfmsg(FILE* stream, const char* fbuf, fmsghdr_t* hdr, area_t area lastlen=7; net_exists=0; fprintf(stream,"\r\1PATH:"); - addr=getsysfaddr(hdr->destzone); + addr=getsysfaddr(hdr->destzone, hdr->destnet); for(u=0;u<paths.addrs;u++) { /* Put back the original PATH */ if(paths.addr[u].net == 0) continue; // Invalid node number/address, don't include "0/0" in PATH @@ -3821,7 +3824,7 @@ void putfmsg(FILE* stream, const char* fbuf, fmsghdr_t* hdr, area_t area } strcpy(seenby," "); /* Add first address with same zone to PATH */ - sysaddr=getsysfaddr(hdr->destzone); + sysaddr=getsysfaddr(hdr->destzone, hdr->destnet); if(sysaddr.net!=0 && sysaddr.point==0 && (paths.addrs==0 || lasthop.net!=sysaddr.net || lasthop.node!=sysaddr.node)) { if(sysaddr.net!=addr.net || !net_exists) { @@ -4164,7 +4167,7 @@ void pkt_to_pkt(const char *fbuf, area_t area, const fidoaddr_t* faddr nodecfg_t* nodecfg = findnodecfg(&cfg, area.link[u],0); if(nodecfg != NULL && nodecfg->passive) continue; - sysaddr = getsysfaddr(area.link[u].zone); + sysaddr = getsysfaddr(area.link[u].zone, area.link[u].net); printf("%s ",smb_faddrtoa(&area.link[u],NULL)); outpkt_t* pkt = get_outpkt(sysaddr, area.link[u], nodecfg); if(pkt == NULL) { @@ -5394,7 +5397,7 @@ void pack_netmail(void) newpkt="new "; chsize(file,0); rewind(stream); - new_pkthdr(&pkthdr, getsysfaddr(addr.zone), addr, nodecfg); + new_pkthdr(&pkthdr, getsysfaddr(addr.zone, addr.net), addr, nodecfg); (void)fwrite(&pkthdr,sizeof(pkthdr),1,stream); } else (void)fseek(stream,find_packet_terminator(stream),SEEK_SET);