# Добавил ключевое слово "DebugRoute": # 0 - Ничего не выводит, даже информацию о Re-Routing (как было раньше). # 1 - (Default) Выводит только информацию о Re-Routing (как было раньше). # 2 - Плис к п.1 выводит информацию о Routing (куда что зароутило). # 3 - Плис к п.2 сначала выводит строку, по которой выполняется # Routing/Re-Routing, а потом уже информацию по п.1,2 (что именно и # куда Route/Re-Route), только для этой строки. Для Re-Route показывает # ещё информацию о том куда оно было зароучено раньше. # --- route.cpp-5 2007-02-04 06:07:51.000000000 +0200 +++ route.cpp 2007-02-04 08:43:37.000000000 +0200 @@ -297,7 +297,6 @@ local const char * ErrReplEndTooLong = EOLCHR"\"RouteEnd\" string is too long in dest file ("; local const char * ErrBadNdlType = "Bad \"HubRoute\" definition."; local const char * ErrMissDirect = EOLCHR"%s is routed via us, but missing in \"Link\" definitions."EOLCHR" \'DefaultFlavor\' assumed."; -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\" " @@ -379,6 +378,7 @@ local ushort MinMode = 0; local ushort KillTransit = 0; +local ushort DebugRoute = 1; local ushort TrustTransit = 0; #if defined (__GNUC__) @@ -1752,6 +1752,15 @@ } local boolean +GetInteger(char * p, void * Value) + { + char * i = (char *)Value; + *i = 0; + while (isdigit (*p)) *i = *i * 10 + *p++ - '0'; + return true; + } + +local boolean GetRouteType(char * p, void *) { if (strnicmp(p, "squish", 6) == 0) @@ -1962,22 +1971,34 @@ ushort Downlink = InMemory(tmpNode); if (!(Downlink == Uplink)) { - if (Downlink == WILDVALUE) // New node - { - Downlink = nNodes; - Node[nNodes].addr = tmpNode; - Node[nNodes++].idx = Uplink; - } - else - { - if (Node[Downlink].idx != WILDVALUE && // Already routed - Node[Downlink].idx != Uplink) // differently - { - ErrorS(ErrReroute, StrNode(tmpNode)); - } - Node[Downlink].idx = Uplink; - } - Node[Downlink].is_uplink = false; + if (Downlink == WILDVALUE) { // New node + Downlink = nNodes++; + Node[Downlink].addr = tmpNode; + if (DebugRoute > 1) { + fprintf (stderr, EOLCHR"Route for %-36s to ", + StrNode(tmpNode)); + fprintf (stderr, "%s", StrNode(Node[Uplink].addr)); + } + } else { + if (Node[Downlink].idx == WILDVALUE) { // Not routed + if (DebugRoute > 1) { + fprintf (stderr, EOLCHR"Route for %-36s to ", + StrNode(tmpNode)); + fprintf (stderr, "%s", StrNode(Node[Uplink].addr)); + } + } else if (Node[Downlink].idx != Uplink) { // Re-Route + if (DebugRoute) { + fprintf (stderr, EOLCHR"Re-route for %-15s ", + StrNode(tmpNode)); + fprintf (stderr, "from %-15s ", + StrNode(Node[Node[Downlink].idx].addr)); + fprintf (stderr, "to %-15s", + StrNode(Node[Uplink].addr)); + } + } + } + Node[Downlink].idx = Uplink; + Node[Downlink].is_uplink = false; } } } @@ -1991,6 +2012,13 @@ skipws(&p); if (!(*p == ';' || *p == '\n' || *p == '\0')) { + if (DebugRoute > 2) { + size_t len = strlen (p) - 1; + char c = p[len]; + if (p[len] == '\n') p[len] = 0; + fprintf (stderr, EOLCHR"%s", p); + p[len] = c; + } PrevNode = *MyNode; // Main AKA if (*p == '>') // 'via'-routing { @@ -2054,8 +2082,16 @@ GetTrustStr(char * p, void*) { + skipws(&p); if (!(*p == ';' || *p == '\n' || *p == '\0')) { + if (DebugRoute > 2) { + size_t len = strlen (p) - 1; + char c = p[len]; + if (p[len] == '\n') p[len] = 0; + fprintf (stderr, EOLCHR"%s", p); + p[len] = c; + } PrevNode = *MyNode; // Main AKA nodeaddr tmpNode = ScanNode(&p); // scan network @@ -2304,6 +2340,7 @@ local CfgValue CfgTab[] = { { "Address", NULL, 1, LoadAddress }, + { "DebugRoute", &DebugRoute, 0, GetInteger }, { "Hubroute", NULL, 3, GetHubRoute }, { "RouteFile", NULL, 3, GetRouteFile }, { "TrustFile", NULL, 4, GetTrustFile },