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