anotherionfix
authorstephen
Wed, 21 Mar 2012 17:47:32 +0000
changeset 316867d657bb25
parent 30 9c67d607814d
child 32 debb20ae567d
anotherionfix
src/ltp.cc
     1.1 --- a/src/ltp.cc	Wed Mar 21 12:51:21 2012 +0000
     1.2 +++ b/src/ltp.cc	Wed Mar 21 17:47:32 2012 +0000
     1.3 @@ -5572,18 +5572,29 @@
     1.4  								rv=octets2ltpaddr(&segstr.peer,&naddr);
     1.5  								if (rv) { free(allbuf); LTPERR(rv); }
     1.6  								if (ltpaddr_cmp(&naddr,&paddr,sizeof(paddr))) {
     1.7 -									char *s1=strdup(ltpaddr2str(&paddr));
     1.8 -									char *s2=strdup(ltpaddr2str(&naddr));
     1.9 -									if (naddr.octets.magic==LTP_ADDR_OCT_MAGIC) {
    1.10 -										snprintf(ltpstr,LTPSTR_LEN,"Layer 2 (%s) and engine ID (%s) variant peer addresses differ! - I prefer layer 2\n",s1,s2);
    1.11 +									if (ion_mode) {
    1.12 +										short engid=htons(my_addr.sock.sin_port);
    1.13 +										if (segstr.peer.len==2 && !memcmp(segstr.peer.val,&engid,2)) {
    1.14 +										hackforscott=true;
    1.15 +										snprintf(ltpstr,LTPSTR_LEN,"Layer 2 seems to be an inbound port, probably from ION");
    1.16  										ltp_log(LTP_LOG_MAX,ltpstr);
    1.17 -										hackforscott=true;
    1.18 -									} else {
    1.19 -										snprintf(ltpstr,LTPSTR_LEN,"Layer 2 (%s) and engine ID (%s) variant peer addresses differ! - I prefer engine ID\n",s1,s2);
    1.20 -										ltp_log(LTP_LOG_MAX,ltpstr);
    1.21 -										paddr=naddr; // struct copy
    1.22 +										paddr=my_addr; // struct copy
    1.23 +										}
    1.24  									}
    1.25 -									free(s1); free(s2);
    1.26 +									if (!hackforscott) {
    1.27 +										char *s1=strdup(ltpaddr2str(&paddr));
    1.28 +										char *s2=strdup(ltpaddr2str(&naddr));
    1.29 +										if (naddr.octets.magic==LTP_ADDR_OCT_MAGIC) {
    1.30 +											snprintf(ltpstr,LTPSTR_LEN,"Layer 2 (%s) and engine ID (%s) variant peer addresses differ! - I prefer layer 2\n",s1,s2);
    1.31 +											ltp_log(LTP_LOG_MAX,ltpstr);
    1.32 +											hackforscott=true;
    1.33 +										} else {
    1.34 +											snprintf(ltpstr,LTPSTR_LEN,"Layer 2 (%s) and engine ID (%s) variant peer addresses differ! - I prefer engine ID\n",s1,s2);
    1.35 +											ltp_log(LTP_LOG_MAX,ltpstr);
    1.36 +											paddr=naddr; // struct copy
    1.37 +										}
    1.38 +										free(s1); free(s2);
    1.39 +									}
    1.40  								}
    1.41  							}
    1.42