# Добавил ключевое слово "TrustTransit", для включения/выключения # фичи, предложенной Костей Веденеевым, и внедрённой в сорцы # Сашей Грибановым. Преобразование ">A B C" в "A B\nB C" в случае # KillTransit = Off и А != MyNode. # --- route.cpp-4 2007-02-04 04:26:27.000000000 +0200 +++ route.cpp 2007-02-04 06:07:51.000000000 +0200 @@ -300,6 +300,9 @@ local const char * ErrReroute = EOLCHR"Re-routing for %s."; local const char * ErrLoop = EOLCHR"RouteLoop detected for %s. Try to route by default"; local const char * WarnNoMin = EOLCHR"Cannot minimize tree because of low memory"; +local const char * KillAndTrustTransit = EOLCHR"Keywords \"TrustTransit\" " + "and \"KillTransit\" turned \"On\" concurrently. "EOLCHR + "Keyword \"TrustTransit\" accepted \"Off\"."; #define Error(s) fprintf(stderr,s,EOLCHR) //#define ErrorN(s,node) fprintf(stderr,s,node.z,node.n,node.f) #define ErrorS(s,str) fprintf(stderr,s,str) @@ -376,6 +379,7 @@ local ushort MinMode = 0; local ushort KillTransit = 0; +local ushort TrustTransit = 0; #if defined (__GNUC__) glob_t globbuf; @@ -1982,6 +1986,7 @@ GetRouteStr(char * p, void*) { boolean ViaRoute; + ushort Uplink; skipws(&p); if (!(*p == ';' || *p == '\n' || *p == '\0')) @@ -1998,36 +2003,20 @@ nodeaddr tmpNode = ScanNode(&p); -/* if (ViaRoute) { - if( IsMyNode(tmpNode) ) { - tmpNode = ScanNode(&p); // skip myself - StoreDownLink(StoreUplink(MyNode[0]), tmpNode); - } else if (KillTransit) { - ScanNode(&p); // skip transit node - } + if( IsMyNode(tmpNode) ) { + tmpNode = ScanNode(&p); // skip myself + StoreDownLink(StoreUplink(MyNode[0]), tmpNode); + } else if (KillTransit) { + ScanNode(&p); // skip transit node + } else if (TrustTransit) { + Uplink = StoreUplink(tmpNode); + tmpNode = ScanNode(&p); + StoreDownLink(Uplink,tmpNode); + } } - ushort Uplink = StoreUplink(tmpNode); -*/ -// ---> Changed by Konstantin Vedeneev - ushort Uplink; - if (ViaRoute) { - if( IsMyNode(tmpNode) ) { - tmpNode = ScanNode(&p); // skip myself - StoreDownLink(StoreUplink(MyNode[0]), tmpNode); - } else if (KillTransit) { - ScanNode(&p); // skip transit node - } else { - Uplink = StoreUplink(tmpNode); - tmpNode = ScanNode(&p); - StoreDownLink(Uplink,tmpNode); - }; - }; - Uplink = StoreUplink(tmpNode); -// <--- - while(*p != '\n' && *p != '\0' && *p != ';') { @@ -2322,6 +2311,7 @@ { "WriteTo", WriteTo, 2, GetDestFile }, { "Minimize", &MinMode, 1, GetBoolean }, { "KillTransit", &KillTransit, 1, GetBoolean }, + { "TrustTransit", &TrustTransit, 1, GetBoolean }, { "LogFile", LogFile, 0, GetFile }, { "DefaultFlavor", &DefaultFlavor, 2, GetFlavor }, { "DefaultRoute", NULL, 5, GetRouteStr }, @@ -2367,6 +2357,11 @@ // Existing "Minimize" if (MinMode == 2) Error(ErrMissMinType); + // Keywords "KillTransit" and "TrustTransit" + if (KillTransit && TrustTransit) { + Error(KillAndTrustTransit); + TrustTransit = 0; + } break; case 2: // Existing WriteTo keyword