From ed0ccf16cead1d7ce98431388a8bc29061c181d4 Mon Sep 17 00:00:00 2001 From: Tim Young Date: Thu, 19 Nov 2015 14:25:15 -0500 Subject: [PATCH 1/5] Packet translations --- EduNetworkBuilder/Packet.cs | 12 ++++++------ .../Resources/languages/edustrings.resx | 16 ++++++++++++++++ 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/EduNetworkBuilder/Packet.cs b/EduNetworkBuilder/Packet.cs index 6b491ae..936e065 100644 --- a/EduNetworkBuilder/Packet.cs +++ b/EduNetworkBuilder/Packet.cs @@ -340,8 +340,8 @@ namespace EduNetworkBuilder myDirection = nb_direction.to_dst; else myDirection = nb_direction.to_src; - Console.WriteLine(NB.Translate("Starting on link.") + string.Format(" SMAC: {0} DMAC: {1}",sourceMAC,destMAC)); - AddMessage(DebugLevel.debug, " " + "Starting on link"); + Console.WriteLine(NB.Translate("P_StartingOnLink") + string.Format(" SMAC: {0} DMAC: {1}",sourceMAC,destMAC)); + AddMessage(DebugLevel.debug, " " + NB.Translate("P_StartingOnLink")); } public void StartOnDevice(NetworkDevice theDevice) @@ -366,9 +366,9 @@ namespace EduNetworkBuilder } if(MyType == PacketType.arp_request && MyStatus == PacketStatus.finished_failed) { - Tracking.AddMessage(DebugLevel.info, "Packet", - string.Format("Packet failed to reach any IP. No such IP on network: {0}", destIP.GetIPString)); - Tracking.Status = string.Format("Packet failed to reach IP: {0}",destIP.GetIPString); + Tracking.AddMessage(DebugLevel.info, NB.Translate("P_Packet"), + NB.Translate("P_PacketFailedToReach") + ": " + destIP.GetIPString); + Tracking.Status = NB.Translate("P_PacketFailedToReach2") + ": "+ destIP.GetIPString; MyStatus = PacketStatus.finished_failed; } if (MyStatus != PacketStatus.finished) @@ -448,7 +448,7 @@ namespace EduNetworkBuilder { if (!typeof(T).IsSerializable) { - throw new ArgumentException("The type must be serializable.", "source"); + throw new ArgumentException(NB.Translate("NC_CloneSerialzable"), NB.Translate("NC_source")); } // Don't serialize a null object, simply return the default for that object diff --git a/EduNetworkBuilder/Resources/languages/edustrings.resx b/EduNetworkBuilder/Resources/languages/edustrings.resx index d0e0a28..5cfbb71 100644 --- a/EduNetworkBuilder/Resources/languages/edustrings.resx +++ b/EduNetworkBuilder/Resources/languages/edustrings.resx @@ -1625,4 +1625,20 @@ Not found. RTFW_NotFound = Not found. + + Packet + P_Packet = Packet + + + Packet failed to reach any IP. No such IP on network + P_PacketFailedToReach = Packet failed to reach any IP. No such IP on network + + + Packet failed to reach IP + P_PacketFailedToReach2 = Packet failed to reach IP + + + Starting on link. + P_StartingOnLink = Starting on link. + \ No newline at end of file From 43f4028ef8213890fa92c14434972bff1435ef38 Mon Sep 17 00:00:00 2001 From: Tim Young Date: Thu, 19 Nov 2015 14:25:52 -0500 Subject: [PATCH 2/5] changes to toedit --- EduNetworkBuilder/toedit.txt | 5 ----- 1 file changed, 5 deletions(-) diff --git a/EduNetworkBuilder/toedit.txt b/EduNetworkBuilder/toedit.txt index 84204c0..bcf6191 100644 --- a/EduNetworkBuilder/toedit.txt +++ b/EduNetworkBuilder/toedit.txt @@ -63,16 +63,11 @@ Packet.cs:32: PacketDump(" " + status, DebugPausePoint.packet Packet.cs:125: Tracking.AddMessage(DebugLevel.routing, start, string.Format(" MAC: {0} -> {1}", source, dest)); Packet.cs:138: Tracking.AddMessage(DebugLevel.routing, start, string.Format(" IP: {0} -> {1}", source, dest)); Packet.cs:157: Tracking.AddMessage(DebugLevel.routing, start, string.Format(" IP:{0} -> {1}", sourceIP.GetIP.ToIpString(), dest.GetIP.ToIpString())); -Packet.cs:344: AddMessage(DebugLevel.debug, " " + "Starting on link"); -Packet.cs:369: Tracking.AddMessage(DebugLevel.info, "Packet", -Packet.cs:370: string.Format("Packet failed to reach any IP. No such IP on network: {0}", destIP.GetIPString)); -Packet.cs:371: Tracking.Status = string.Format("Packet failed to reach IP: {0}",destIP.GetIPString); Packet.cs:435: Console.WriteLine("Pausing"); Packet.cs:439: Console.WriteLine(string.Format("{0}: {1} PACKET: dstIP: {2} destMAC: {3}", hostname, position, dIP, destMAC)); Packet.cs:440: Console.WriteLine(string.Format("{0}: {1} PACKET: srcIP: {2} srcMAC: {3}", hostname, position, sIP, sourceMAC)); Packet.cs:441: Console.WriteLine("---"); Packet.cs:443: AddMessage(DebugLevel.packet, string.Format("{0}: {1} PACKET: dstIP: {2} destMAC: {3}", hostname, position, dIP, destMAC)); Packet.cs:444: AddMessage(DebugLevel.packet, string.Format("{0}: {1} PACKET: srcIP: {2} srcMAC: {3}", hostname,position,sIP,sourceMAC)); -Packet.cs:451: throw new ArgumentException("The type must be serializable.", "source"); PacketMessage.cs:91: tString = tmessage.HostName + " \t" + tmessage.WhatLevel.ToString() + "\t" + tmessage.Message; PacketMessage.cs:103: tString = time.ToString() + " ms " + Status; From 306b6b84243bacd2adb6dbdc2cc1498121127405 Mon Sep 17 00:00:00 2001 From: Tim Young Date: Thu, 19 Nov 2015 14:46:17 -0500 Subject: [PATCH 3/5] Minor fixes after translation --- EduNetworkBuilder/NetworkBuilder.cs | 2 +- EduNetworkBuilder/NetworkDevice.cs | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/EduNetworkBuilder/NetworkBuilder.cs b/EduNetworkBuilder/NetworkBuilder.cs index ea1bef7..4072748 100644 --- a/EduNetworkBuilder/NetworkBuilder.cs +++ b/EduNetworkBuilder/NetworkBuilder.cs @@ -682,7 +682,7 @@ namespace EduNetworkBuilder if (ItemClickedOn == null) return; //we do not have something chosen to ping from ToolStripMenuItem Pressed = (ToolStripMenuItem)sender; string itemname = Pressed.Text; - string dest = Regex.Replace(itemname, NB.Translate("NB_NetViewPing "), ""); + string dest = Regex.Replace(itemname, NB.Translate("NB_NetViewPing")+" ", ""); IPAddress destination; destination = myNetwork.DNSLookup(ItemClickedOn, dest); if(destination == null || destination.GetIPString == NB.ZeroIPString) diff --git a/EduNetworkBuilder/NetworkDevice.cs b/EduNetworkBuilder/NetworkDevice.cs index 281a33d..7bf269e 100644 --- a/EduNetworkBuilder/NetworkDevice.cs +++ b/EduNetworkBuilder/NetworkDevice.cs @@ -2193,7 +2193,7 @@ namespace EduNetworkBuilder if(nc == null) { tPacket.AddMessage(DebugLevel.info, NB.Translate("ND_DoInputFromLink_CardFail1")); - tPacket.Tracking.Status = hostname + string.Format(NB.Translate("ND_DoInputFromLink_CardFail2")); + tPacket.Tracking.Status = hostname + " " + string.Format(NB.Translate("ND_DoInputFromLink_CardFail2")); tPacket.MyStatus = PacketStatus.finished_failed; return; } @@ -2232,16 +2232,16 @@ namespace EduNetworkBuilder { if (tPacket.MyType == PacketType.dhcp_request && !isDHCPServer) { - tPacket.AddMessage(DebugLevel.debug, hostname + string.Format(NB.Translate("ND_DoInFromLnkDeaf"))); - tPacket.Tracking.Status = hostname + string.Format(NB.Translate("ND_DoInFromLnkNoDHCP")); + tPacket.AddMessage(DebugLevel.debug, hostname + " " +string.Format(NB.Translate("ND_DoInFromLnkDeaf"))); + tPacket.Tracking.Status = hostname +" " + string.Format(NB.Translate("ND_DoInFromLnkNoDHCP")); tPacket.MyStatus = PacketStatus.finished_failed; return; } if ((tPacket.MyType == PacketType.ping_answer || tPacket.MyType== PacketType.ping_request) && !RoutesPackets() && (!HasIPAddress(tPacket.destIP) && !HasBroadcastAddress(tPacket.destIP))) { - tPacket.AddMessage(DebugLevel.debug, hostname + string.Format(NB.Translate("ND_NotRouter"))); - tPacket.Tracking.Status = hostname + string.Format(NB.Translate("ND_NotRouter2")); + tPacket.AddMessage(DebugLevel.debug, hostname + " " +string.Format(NB.Translate("ND_NotRouter"))); + tPacket.Tracking.Status = hostname + " " + string.Format(NB.Translate("ND_NotRouter2")); tPacket.MyStatus = PacketStatus.finished_failed; return; } @@ -2251,7 +2251,7 @@ namespace EduNetworkBuilder myType != NetworkComponentType.wrouter) { tPacket.AddMessage(DebugLevel.debug, hostname + string.Format(NB.Translate("ND_NoLocIP"))); - tPacket.Tracking.Status = hostname + string.Format(NB.Translate("ND_NoLocIP2")); + tPacket.Tracking.Status = hostname + " " + string.Format(NB.Translate("ND_NoLocIP2")); tPacket.MyStatus = PacketStatus.finished_failed; return; } From 0340b8700eed9a819a6dd0dd90388cd887d72309 Mon Sep 17 00:00:00 2001 From: Tim Young Date: Thu, 19 Nov 2015 14:48:12 -0500 Subject: [PATCH 4/5] Minor syntax fixes --- EduNetworkBuilder/NetworkDevice.cs | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/EduNetworkBuilder/NetworkDevice.cs b/EduNetworkBuilder/NetworkDevice.cs index 7bf269e..f2dae90 100644 --- a/EduNetworkBuilder/NetworkDevice.cs +++ b/EduNetworkBuilder/NetworkDevice.cs @@ -1982,15 +1982,15 @@ namespace EduNetworkBuilder { if (tPacket.MyType == PacketType.dhcp_answer) { - tPacket.AddMessage(DebugLevel.info, hostname + string.Format(NB.Translate("ND_PrepPackGtewyErr")) + " " + tPacket.OutboundIP.GetIP.ToIpString()); - tPacket.Tracking.Status = hostname + string.Format(NB.Translate("ND_PrepPackGtewyErr")); + tPacket.AddMessage(DebugLevel.info, hostname + " " + string.Format(NB.Translate("ND_PrepPackGtewyErr")) + " " + tPacket.OutboundIP.GetIP.ToIpString()); + tPacket.Tracking.Status = hostname + " " + string.Format(NB.Translate("ND_PrepPackGtewyErr")); tPacket.MyStatus = PacketStatus.finished_failed; return false; } else { - tPacket.AddMessage(DebugLevel.info, hostname + string.Format(NB.Translate("ND_PrepPackRoutErr")) +" "+ tPacket.OutboundIP.GetIP.ToIpString()); - tPacket.Tracking.Status = hostname + NB.Translate("ND_PrepPackRoutErr"); + tPacket.AddMessage(DebugLevel.info, hostname + " " + string.Format(NB.Translate("ND_PrepPackRoutErr")) +" "+ tPacket.OutboundIP.GetIP.ToIpString()); + tPacket.Tracking.Status = hostname + " " + NB.Translate("ND_PrepPackRoutErr"); tPacket.MyStatus = PacketStatus.finished_failed; return false; } @@ -2003,8 +2003,8 @@ namespace EduNetworkBuilder tPacket.OutboundNic = LocalNic(tPacket.OutboundIP); if (tPacket.OutboundNic == null) { - tPacket.AddMessage(DebugLevel.info, hostname + string.Format(NB.Translate("ND_PrepPackNICErr")) + " :"+ tPacket.OutboundIP.GetIP.ToIpString()); - tPacket.Tracking.Status = hostname + NB.Translate("ND_PrepPackNICErr"); + tPacket.AddMessage(DebugLevel.info, hostname + " " + string.Format(NB.Translate("ND_PrepPackNICErr")) + " :"+ tPacket.OutboundIP.GetIP.ToIpString()); + tPacket.Tracking.Status = hostname + " " + NB.Translate("ND_PrepPackNICErr"); tPacket.MyStatus = PacketStatus.finished_failed; return false; } @@ -2015,8 +2015,8 @@ namespace EduNetworkBuilder tPacket.OutboundIF = tPacket.OutboundNic.LocalInterface(tPacket.OutboundIP, tPacket.Tracking); if (tPacket.OutboundIF == null) { - tPacket.AddMessage(DebugLevel.info, hostname + string.Format(NB.Translate("ND_PrepPackRoutErr")) + " :" + tPacket.OutboundIP.GetIP.ToIpString()); - tPacket.Tracking.Status = hostname + NB.Translate("ND_PrepPackRoutErr"); + tPacket.AddMessage(DebugLevel.info, hostname + " " + string.Format(NB.Translate("ND_PrepPackRoutErr")) + " :" + tPacket.OutboundIP.GetIP.ToIpString()); + tPacket.Tracking.Status = hostname + " " + NB.Translate("ND_PrepPackRoutErr"); tPacket.MyStatus = PacketStatus.finished_failed; return false; } From 9475be36c386cbf898d1999592ef3a5da778816e Mon Sep 17 00:00:00 2001 From: Tim Young Date: Thu, 19 Nov 2015 15:14:46 -0500 Subject: [PATCH 5/5] Modified about message --- EduNetworkBuilder/Resources/about.rtf | Bin 986 -> 43026 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/EduNetworkBuilder/Resources/about.rtf b/EduNetworkBuilder/Resources/about.rtf index 2fbdb581ab35a4fb1a7f67be2d8694f39d602712..6b52da9da3fb6df6c9774be45dc4dba806dc9de4 100644 GIT binary patch literal 43026 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 beqPc5f4a#VSG|-0mQTK4ZFGS7@ZtXhI0~}q delta 491 zcmaJ;%Sr<=6crZ=mBF20H)bQ2R%$Y>iWC25mAKnnglg4JfK3 zf=8nqgwf6gs!A{jEft6`rZ(jcqYJ8JVCAGJyiN|GQN~s;QMt3d_1r*xh`8pKI%CnT z3}eoGj0hg$A;JC_7w{FA4+E=Dm|NzL7G$1R#kl^WgB zdDW%lisjG;p_tUE%gf!~=|)izirG|E_k$kkLZ&c;0vFZ!DXlRt9|n8n+u(JrRV>~9 gwEM64q@3bS4;8;GYIO9c&G%|r)pj6lUd?>v6GC&U>Hq)$