New network simulation projectmaster
authorS. Persikov <[email protected]>
Sun, 18 Jul 2010 21:28:29 +0000 (19 00:28 +0300)
committerS. Persikov <[email protected]>
Sun, 18 Jul 2010 21:28:29 +0000 (19 00:28 +0300)
tracert and mtu discovery

Signed-off-by: S. Persikov <[email protected]>
102 files changed:
.classpath [new file with mode: 0644]
.project [new file with mode: 0644]
META-INF/MANIFEST.MF [new file with mode: 0644]
envelope.gif [new file with mode: 0644]
frag.gif [new file with mode: 0644]
host.gif [new file with mode: 0644]
ipv6/network/BaseNetworkElement.java [new file with mode: 0644]
ipv6/network/Host.java [new file with mode: 0644]
ipv6/network/INetworkElement.java [new file with mode: 0644]
ipv6/network/Network.java [new file with mode: 0644]
ipv6/network/NetworkSimulator.java [new file with mode: 0644]
ipv6/network/Router.java [new file with mode: 0644]
ipv6/network/datagram/Datagram.java [new file with mode: 0644]
ipv6/network/datagram/ICMPDatagram.java [new file with mode: 0644]
ipv6/network/datagram/ICMPMessageType.java [new file with mode: 0644]
ipv6/network/datagram/IDatagram.java [new file with mode: 0644]
ipv6/network/datagram/UDPDatagram.java [new file with mode: 0644]
java.policy.applet [new file with mode: 0644]
mtutr/.p4ignore [new file with mode: 0644]
mtutr/MainDrawBoard.java [new file with mode: 0644]
mtutr/MtuTr.java [new file with mode: 0644]
mtutr/common/.p4ignore [new file with mode: 0644]
mtutr/common/BoardCleaner.java [new file with mode: 0644]
mtutr/common/IPAddress.java [new file with mode: 0644]
mtutr/listeners/.p4ignore [new file with mode: 0644]
mtutr/listeners/MainMouseListener.java [new file with mode: 0644]
mtutr/listeners/MenuListener.java [new file with mode: 0644]
mtutr/listeners/NetworkPlacementListener.java [new file with mode: 0644]
mtutr/listeners/NetworkTypeButtonListener.java [new file with mode: 0644]
mtutr/listeners/SelectionMouseListener.java [new file with mode: 0644]
mtutr/messages/AnimationMonitor.java [new file with mode: 0644]
mtutr/messages/HostSelectionMessage.java [new file with mode: 0644]
mtutr/messages/NetworkSelectionMessage.java [new file with mode: 0644]
mtutr/messages/RouterSelectionMessage.java [new file with mode: 0644]
mtutr/objects/.p4ignore [new file with mode: 0644]
mtutr/objects/Datagram.java [new file with mode: 0644]
mtutr/objects/Host.java [new file with mode: 0644]
mtutr/objects/IPKitItem.java [new file with mode: 0644]
mtutr/objects/Network.java [new file with mode: 0644]
mtutr/objects/RouteTestResult.java [new file with mode: 0644]
mtutr/objects/Router.java [new file with mode: 0644]
mtutr/objects/RoutingTable.java [new file with mode: 0644]
mtutr/objects/RoutingTableEntry.java [new file with mode: 0644]
mtutr/windows/.p4ignore [new file with mode: 0644]
mtutr/windows/ChooseDefaultGateway.java [new file with mode: 0644]
mtutr/windows/DatagramProperties.java [new file with mode: 0644]
mtutr/windows/IPInputVerifier.java [new file with mode: 0644]
mtutr/windows/JExtendedTable.java [new file with mode: 0644]
mtutr/windows/NetworkProperties.java [new file with mode: 0644]
mtutr/windows/RouterProperties.java [new file with mode: 0644]
mtutr/windows/buttonhandlers/.p4ignore [new file with mode: 0644]
mtutr/windows/buttonhandlers/ButtonEditor.java [new file with mode: 0644]
mtutr/windows/buttonhandlers/ButtonRenderer.java [new file with mode: 0644]
network2.gif [new file with mode: 0644]
router.gif [new file with mode: 0644]
site/1.jpg [new file with mode: 0644]
site/10.gif [new file with mode: 0644]
site/11.jpg [new file with mode: 0644]
site/12.jpg [new file with mode: 0644]
site/13.jpg [new file with mode: 0644]
site/14.jpg [new file with mode: 0644]
site/15.jpg [new file with mode: 0644]
site/16.jpg [new file with mode: 0644]
site/17.jpg [new file with mode: 0644]
site/18.jpg [new file with mode: 0644]
site/19.gif [new file with mode: 0644]
site/2.jpg [new file with mode: 0644]
site/20.jpg [new file with mode: 0644]
site/21.gif [new file with mode: 0644]
site/22.jpg [new file with mode: 0644]
site/23.jpg [new file with mode: 0644]
site/24.jpg [new file with mode: 0644]
site/25.jpg [new file with mode: 0644]
site/26.jpg [new file with mode: 0644]
site/27.jpg [new file with mode: 0644]
site/28.jpg [new file with mode: 0644]
site/29.gif [new file with mode: 0644]
site/3.jpg [new file with mode: 0644]
site/30.jpg [new file with mode: 0644]
site/31.jpg [new file with mode: 0644]
site/32.jpg [new file with mode: 0644]
site/33.jpg [new file with mode: 0644]
site/34.jpg [new file with mode: 0644]
site/35.jpg [new file with mode: 0644]
site/36.jpg [new file with mode: 0644]
site/37.jpg [new file with mode: 0644]
site/38.jpg [new file with mode: 0644]
site/39.jpg [new file with mode: 0644]
site/4.jpg [new file with mode: 0644]
site/40.jpg [new file with mode: 0644]
site/41.jpg [new file with mode: 0644]
site/42.jpg [new file with mode: 0644]
site/43.jpg [new file with mode: 0644]
site/44.gif [new file with mode: 0644]
site/45.jpg [new file with mode: 0644]
site/46.jpg [new file with mode: 0644]
site/5.jpg [new file with mode: 0644]
site/6.jpg [new file with mode: 0644]
site/7.jpg [new file with mode: 0644]
site/8.jpg [new file with mode: 0644]
site/9.jpg [new file with mode: 0644]
site/main.htm [new file with mode: 0644]

diff --git a/.classpath b/.classpath
new file mode 100644 (file)
index 0000000..3baf1bd
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<classpath>\r
+       <classpathentry kind="src" path=""/>\r
+       <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>\r
+       <classpathentry kind="output" path="bin"/>\r
+</classpath>\r
diff --git a/.project b/.project
new file mode 100644 (file)
index 0000000..dedbbe7
--- /dev/null
+++ b/.project
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<projectDescription>\r
+       <name>IPKit</name>\r
+       <comment></comment>\r
+       <projects>\r
+       </projects>\r
+       <buildSpec>\r
+               <buildCommand>\r
+                       <name>org.eclipse.jdt.core.javabuilder</name>\r
+                       <arguments>\r
+                       </arguments>\r
+               </buildCommand>\r
+               <buildCommand>\r
+                       <name>org.eclipse.ve.java.core.vebuilder</name>\r
+                       <arguments>\r
+                       </arguments>\r
+               </buildCommand>\r
+       </buildSpec>\r
+       <natures>\r
+               <nature>org.eclipse.jem.workbench.JavaEMFNature</nature>\r
+               <nature>org.eclipse.jdt.core.javanature</nature>\r
+               <nature>org.eclipse.jem.beaninfo.BeanInfoNature</nature>\r
+       </natures>\r
+</projectDescription>\r
diff --git a/META-INF/MANIFEST.MF b/META-INF/MANIFEST.MF
new file mode 100644 (file)
index 0000000..58630c0
--- /dev/null
@@ -0,0 +1,2 @@
+Manifest-Version: 1.0\r
+\r
diff --git a/envelope.gif b/envelope.gif
new file mode 100644 (file)
index 0000000..d9ad97a
Binary files /dev/null and b/envelope.gif differ
diff --git a/frag.gif b/frag.gif
new file mode 100644 (file)
index 0000000..4462999
Binary files /dev/null and b/frag.gif differ
diff --git a/host.gif b/host.gif
new file mode 100644 (file)
index 0000000..94bac9a
Binary files /dev/null and b/host.gif differ
diff --git a/ipv6/network/BaseNetworkElement.java b/ipv6/network/BaseNetworkElement.java
new file mode 100644 (file)
index 0000000..b9e94ac
--- /dev/null
@@ -0,0 +1,32 @@
+package ipv6.network;\r
+\r
+import java.net.InetAddress;\r
+\r
+public abstract class BaseNetworkElement implements INetworkElement {\r
+\r
+       private InetAddress inetAddress;\r
+       private int mtu;\r
+\r
+       public BaseNetworkElement() {\r
+               super();\r
+       }\r
+\r
+       public InetAddress getInetAddress() {\r
+               return inetAddress;\r
+       }\r
+\r
+       public void setInetAddress(InetAddress inetAddress) {\r
+               this.inetAddress = inetAddress;\r
+               \r
+       }\r
+\r
+       public int getMTU() {\r
+               return mtu;\r
+       }\r
+\r
+       public void setMTU(int mtu) {\r
+               this.mtu = mtu;\r
+               \r
+       }\r
+\r
+}
\ No newline at end of file
diff --git a/ipv6/network/Host.java b/ipv6/network/Host.java
new file mode 100644 (file)
index 0000000..4ae63c4
--- /dev/null
@@ -0,0 +1,42 @@
+/**\r
+ * \r
+ */\r
+package ipv6.network;\r
+\r
+import ipv6.network.datagram.IDatagram;\r
+\r
+\r
+/**\r
+ * @author New user\r
+ *\r
+ */\r
+public class Host extends BaseNetworkElement {\r
+\r
+       private Network network;\r
+\r
+       /**\r
+        * \r
+        */\r
+       public Host() {\r
+       }\r
+\r
+       public void receiveDatagram(IDatagram datagram) {\r
+               // TODO Auto-generated method stub\r
+       }\r
+\r
+       public void sendDatagram(IDatagram datagram) {\r
+               if (datagram.getDestination().getInetAddress().equals(this.getInetAddress())){\r
+                       return;\r
+               }\r
+               network.sendDatagram(datagram);\r
+       }\r
+\r
+       public void setNetwork(Network network) {\r
+               this.network = network;\r
+       }\r
+\r
+       public Network getNetwork() {\r
+               return network;\r
+       }\r
+\r
+}\r
diff --git a/ipv6/network/INetworkElement.java b/ipv6/network/INetworkElement.java
new file mode 100644 (file)
index 0000000..8e6412d
--- /dev/null
@@ -0,0 +1,16 @@
+package ipv6.network;\r
+\r
+import ipv6.network.datagram.IDatagram;\r
+\r
+import java.net.InetAddress;\r
+\r
+public interface INetworkElement {\r
+       public void sendDatagram(IDatagram datagram);\r
+       public void receiveDatagram(IDatagram datagram);\r
+       public InetAddress getInetAddress();\r
+       public void setInetAddress(InetAddress inetAddress);\r
+       \r
+       public void setMTU(int mtu);\r
+       public int getMTU();\r
+\r
+}\r
diff --git a/ipv6/network/Network.java b/ipv6/network/Network.java
new file mode 100644 (file)
index 0000000..c4eaa3f
--- /dev/null
@@ -0,0 +1,29 @@
+package ipv6.network;\r
+\r
+import ipv6.network.datagram.IDatagram;\r
+\r
+import java.net.InetAddress;\r
+import java.util.HashMap;\r
+import java.util.Map;\r
+\r
+public class Network extends BaseNetworkElement {\r
+\r
+       private final Map<InetAddress, Host> hosts = new HashMap<InetAddress, Host>();\r
+       private final Map<InetAddress, Router> routers = new HashMap<InetAddress, Router>();\r
+       \r
+\r
+       public void receiveDatagram(IDatagram datagram) {\r
+               // TODO Auto-generated method stub\r
+               \r
+       }\r
+\r
+       public void sendDatagram(IDatagram datagram) {\r
+               Host host = hosts.get(datagram.getDestination().getInetAddress());\r
+               if ( host != null){\r
+                       host.sendDatagram(datagram);\r
+               } else {\r
+                       \r
+               }\r
+               \r
+       }\r
+}\r
diff --git a/ipv6/network/NetworkSimulator.java b/ipv6/network/NetworkSimulator.java
new file mode 100644 (file)
index 0000000..de2cea8
--- /dev/null
@@ -0,0 +1,14 @@
+package ipv6.network;\r
+\r
+import ipv6.network.datagram.IDatagram;\r
+\r
+public class NetworkSimulator {\r
+       \r
+       public void startSimulation(IDatagram datagram){\r
+               \r
+               Host sourceHost = datagram.getSource();\r
+               sourceHost.sendDatagram(datagram);\r
+               \r
+       }\r
+\r
+}\r
diff --git a/ipv6/network/Router.java b/ipv6/network/Router.java
new file mode 100644 (file)
index 0000000..d0652ce
--- /dev/null
@@ -0,0 +1,25 @@
+package ipv6.network;\r
+\r
+import ipv6.network.datagram.IDatagram;\r
+\r
+import java.net.InetAddress;\r
+import java.util.HashMap;\r
+import java.util.Map;\r
+\r
+public class Router extends BaseNetworkElement {\r
+\r
+       private final Map<InetAddress, Network> hosts = new HashMap<InetAddress, Network>();\r
+\r
+       @Override\r
+       public void receiveDatagram(IDatagram datagram) {\r
+               // TODO Auto-generated method stub\r
+\r
+       }\r
+\r
+       @Override\r
+       public void sendDatagram(IDatagram datagram) {\r
+               // TODO Auto-generated method stub\r
+\r
+       }\r
+\r
+}\r
diff --git a/ipv6/network/datagram/Datagram.java b/ipv6/network/datagram/Datagram.java
new file mode 100644 (file)
index 0000000..d636c7c
--- /dev/null
@@ -0,0 +1,56 @@
+package ipv6.network.datagram;\r
+\r
+import ipv6.network.Host;\r
+\r
+public class Datagram implements IDatagram {\r
+\r
+       private Host source;\r
+       private Host destination;\r
+\r
+       private int ttl;\r
+       private boolean doNotFragment;\r
+       private int size;\r
+\r
+       \r
+       \r
+       public Datagram(Host source, Host destination, int ttl,\r
+                       boolean doNotFragment, int size) {\r
+               super();\r
+               this.source = source;\r
+               this.destination = destination;\r
+               this.ttl = ttl;\r
+               this.doNotFragment = doNotFragment;\r
+               this.size = size;\r
+       }\r
+       public Host getSource() {\r
+               return source;\r
+       }\r
+       public void setSource(Host source) {\r
+               this.source = source;\r
+       }\r
+       public Host getDestination() {\r
+               return destination;\r
+       }\r
+       public void setDestination(Host destination) {\r
+               this.destination = destination;\r
+       }\r
+       public int getTtl() {\r
+               return ttl;\r
+       }\r
+       public void setTtl(int ttl) {\r
+               this.ttl = ttl;\r
+       }\r
+       public boolean isDoNotFragment() {\r
+               return doNotFragment;\r
+       }\r
+       public void setDoNotFragment(boolean doNotFragment) {\r
+               this.doNotFragment = doNotFragment;\r
+       }\r
+       public int getSize() {\r
+               return size;\r
+       }\r
+       public void setSize(int size) {\r
+               this.size = size;\r
+       }\r
+\r
+}\r
diff --git a/ipv6/network/datagram/ICMPDatagram.java b/ipv6/network/datagram/ICMPDatagram.java
new file mode 100644 (file)
index 0000000..98bfe1d
--- /dev/null
@@ -0,0 +1,31 @@
+/**\r
+ * \r
+ */\r
+package ipv6.network.datagram;\r
+\r
+import ipv6.network.Host;\r
+\r
+\r
+/**\r
+ * @author New user\r
+ *\r
+ */\r
+public class ICMPDatagram extends Datagram {\r
+       \r
+       private int mtuSize;\r
+\r
+       public ICMPDatagram(Host source, Host destination, int ttl,\r
+                       boolean doNotFragment, int size) {\r
+               super(source, destination, ttl, doNotFragment, size);\r
+       }\r
+\r
+       public int getMtuSize() {\r
+               return mtuSize;\r
+       }\r
+\r
+       public void setMtuSize(int mtuSize) {\r
+               this.mtuSize = mtuSize;\r
+       }\r
+\r
+\r
+}\r
diff --git a/ipv6/network/datagram/ICMPMessageType.java b/ipv6/network/datagram/ICMPMessageType.java
new file mode 100644 (file)
index 0000000..6dedb33
--- /dev/null
@@ -0,0 +1,10 @@
+package ipv6.network.datagram;\r
+\r
+public enum ICMPMessageType {\r
+       \r
+       ECHO_REQUEST,\r
+       ECHO_REPLY,\r
+       DESTINATION_UNREACHABLE,\r
+       IPv6_PACKET_TOO_BIG\r
+\r
+}\r
diff --git a/ipv6/network/datagram/IDatagram.java b/ipv6/network/datagram/IDatagram.java
new file mode 100644 (file)
index 0000000..0aee4ae
--- /dev/null
@@ -0,0 +1,27 @@
+package ipv6.network.datagram;\r
+\r
+import ipv6.network.Host;\r
+\r
+public interface IDatagram {\r
+\r
+       public abstract Host getSource();\r
+\r
+       public abstract void setSource(Host source);\r
+\r
+       public abstract Host getDestination();\r
+\r
+       public abstract void setDestination(Host destination);\r
+\r
+       public abstract int getTtl();\r
+\r
+       public abstract void setTtl(int ttl);\r
+\r
+       public abstract boolean isDoNotFragment();\r
+\r
+       public abstract void setDoNotFragment(boolean doNotFragment);\r
+\r
+       public abstract int getSize();\r
+\r
+       public abstract void setSize(int size);\r
+\r
+}
\ No newline at end of file
diff --git a/ipv6/network/datagram/UDPDatagram.java b/ipv6/network/datagram/UDPDatagram.java
new file mode 100644 (file)
index 0000000..9a616e6
--- /dev/null
@@ -0,0 +1,13 @@
+package ipv6.network.datagram;\r
+\r
+import ipv6.network.Host;\r
+\r
+\r
+public class UDPDatagram extends Datagram {\r
+\r
+       public UDPDatagram(Host source, Host destination, int ttl,\r
+                       boolean doNotFragment, int size) {\r
+               super(source, destination, ttl, doNotFragment, size);\r
+       }\r
+\r
+}\r
diff --git a/java.policy.applet b/java.policy.applet
new file mode 100644 (file)
index 0000000..35527af
--- /dev/null
@@ -0,0 +1,7 @@
+/* AUTOMATICALLY GENERATED ON Tue Apr 16 17:20:59 EDT 2002*/\r
+/* DO NOT EDIT */\r
+\r
+grant {\r
+  permission java.security.AllPermission;\r
+};\r
+\r
diff --git a/mtutr/.p4ignore b/mtutr/.p4ignore
new file mode 100644 (file)
index 0000000..8666da2
--- /dev/null
@@ -0,0 +1,7 @@
+Host.JPG
+HostSelectionMessage.java
+IPKit.java
+MainDrawBoard.java
+Network.JPG
+NetworkSelectionMessage.java
+Router.jpg
diff --git a/mtutr/MainDrawBoard.java b/mtutr/MainDrawBoard.java
new file mode 100644 (file)
index 0000000..b3761a1
--- /dev/null
@@ -0,0 +1,575 @@
+package mtutr;\r
+\r
+import java.awt.Color;\r
+import java.awt.Component;\r
+import java.awt.Cursor;\r
+import java.awt.FlowLayout;\r
+import java.awt.Font;\r
+import java.awt.Graphics;\r
+import java.awt.Toolkit;\r
+import java.io.BufferedInputStream;\r
+import java.io.IOException;\r
+import java.util.Iterator;\r
+import java.util.LinkedList;\r
+import java.util.List;\r
+import java.util.ListIterator;\r
+\r
+import javax.swing.BorderFactory;\r
+import javax.swing.ImageIcon;\r
+import javax.swing.JButton;\r
+import javax.swing.JLabel;\r
+import javax.swing.JMenu;\r
+import javax.swing.JMenuItem;\r
+import javax.swing.JOptionPane;\r
+import javax.swing.JPanel;\r
+import javax.swing.JPopupMenu;\r
+\r
+import mtutr.listeners.MainMouseListener;\r
+import mtutr.listeners.MenuListener;\r
+import mtutr.listeners.NetworkPlacementListener;\r
+import mtutr.listeners.NetworkTypeButtonListener;\r
+import mtutr.listeners.SelectionMouseListener;\r
+import mtutr.messages.HostSelectionMessage;\r
+import mtutr.messages.NetworkSelectionMessage;\r
+import mtutr.messages.RouterSelectionMessage;\r
+import mtutr.objects.Datagram;\r
+import mtutr.objects.Host;\r
+import mtutr.objects.Network;\r
+import mtutr.objects.Router;\r
+import mtutr.windows.ChooseDefaultGateway;\r
+\r
+public class MainDrawBoard extends JPanel {\r
+       public static MainDrawBoard staticInstance = null;\r
+       public MtuTr ipKit = null;\r
+       int MAX_IMAGE_SIZE = 3868;\r
+       byte[] buf = new byte[this.MAX_IMAGE_SIZE];\r
+       private static final long serialVersionUID = 1L;\r
+       private ImageIcon networkImage = null;\r
+       private ImageIcon hostImage = null;\r
+       private ImageIcon envelopeImage = null;\r
+       private ImageIcon fragImage = null;\r
+       private ImageIcon routerImage = null;\r
+\r
+       int x = 10;\r
+       int y = 20;\r
+\r
+       public JPopupMenu main_menu = null;\r
+       public JPopupMenu network_menu = null;\r
+       public JPopupMenu host_menu = null;\r
+       public JPopupMenu router_menu = null;\r
+       public JPopupMenu datagram_menu = null;\r
+\r
+       public MenuListener menuListener = null;\r
+       public NetworkPlacementListener networkPlacementListener = null;\r
+       public MainMouseListener mouseListener = null;\r
+       public SelectionMouseListener selMouseListener = null;\r
+       public JPanel messagePanel;\r
+       public List networks = new LinkedList();\r
+       public List routers = new LinkedList();\r
+       public List datagrams = new LinkedList();\r
+       public JMenuItem addHost = null;\r
+       public JMenuItem sendDatagram = null;\r
+       private Datagram datagram;\r
+       public boolean sourceAndTarget = false;\r
+       public boolean firstClick;\r
+       private boolean isIPv6;\r
+\r
+       public JButton btnIPv6;\r
+       public JButton btnIPv4;\r
+\r
+       public MainDrawBoard(JPanel theMsgPanel, MtuTr frame) {\r
+               staticInstance = this;\r
+               this.messagePanel = theMsgPanel;\r
+\r
+               this.messagePanel.setBackground(new Color(222, 231, 254));\r
+               this.messagePanel.setVisible(true);\r
+               ((FlowLayout) this.messagePanel.getLayout()).setAlignment(0);\r
+               this.ipKit = frame;\r
+\r
+               if (frame.firstClick) {\r
+                       this.firstClick = frame.firstClick;\r
+                       \r
+                       this.btnIPv6 = new JButton("IPv6");\r
+                       Font font = new Font("Arial", 1, 40);\r
+                       this.btnIPv6.setFont(font);\r
+                       this.btnIPv6.setSize(this.btnIPv6.getPreferredSize());\r
+                       this.btnIPv6.setLocation(120, 250);\r
+                       this.btnIPv6.addActionListener(new NetworkTypeButtonListener(this, true));\r
+\r
+                       this.btnIPv4 = new JButton("IPv4");\r
+                       this.btnIPv4.setFont(font);\r
+                       this.btnIPv4.setSize(this.btnIPv4.getPreferredSize());\r
+                       this.btnIPv4.setLocation(350, 250);\r
+                       this.btnIPv4.addActionListener(new NetworkTypeButtonListener(this, false));\r
+\r
+                       add(this.btnIPv6);\r
+                       add(this.btnIPv4);\r
+               }\r
+\r
+               this.mouseListener = new MainMouseListener(this);\r
+               this.selMouseListener = new SelectionMouseListener(this);\r
+\r
+               addMouseListener(this.mouseListener);\r
+               addMouseMotionListener(this.mouseListener);\r
+\r
+               this.menuListener = new MenuListener(this);\r
+               this.main_menu = new JPopupMenu("Main Menu");\r
+               JMenuItem m_item = new JMenuItem("Add Network");\r
+               m_item.addActionListener(this.menuListener);\r
+               this.main_menu.add(m_item);\r
+               m_item = new JMenuItem("Add Router");\r
+               m_item.addActionListener(this.menuListener);\r
+               this.main_menu.add(m_item);\r
+               m_item = new JMenuItem("Add Datagram");\r
+               m_item.addActionListener(this.menuListener);\r
+               this.main_menu.add(m_item);\r
+               this.main_menu.addSeparator();\r
+\r
+               this.networkPlacementListener = new NetworkPlacementListener(this,\r
+                               this.menuListener);\r
+               JMenu place_networks = new JMenu("Place Networks");\r
+               m_item = new JMenuItem("Star");\r
+               m_item.addActionListener(this.networkPlacementListener);\r
+               place_networks.add(m_item);\r
+               m_item = new JMenuItem("Loop");\r
+               m_item.addActionListener(this.networkPlacementListener);\r
+               place_networks.add(m_item);\r
+               m_item = new JMenuItem("Long");\r
+               m_item.addActionListener(this.networkPlacementListener);\r
+               place_networks.add(m_item);\r
+               this.main_menu.add(place_networks);\r
+\r
+               this.main_menu.addSeparator();\r
+               m_item = new JMenuItem("Remove All");\r
+               m_item.addActionListener(this.menuListener);\r
+               this.main_menu.add(m_item);\r
+\r
+               this.network_menu = new JPopupMenu("Network menu");\r
+               this.addHost = new JMenuItem("Add Host");\r
+               this.addHost.addActionListener(this.menuListener);\r
+               this.network_menu.add(this.addHost);\r
+               this.network_menu.addSeparator();\r
+               m_item = new JMenuItem("Set Default Gateway");\r
+               m_item.addActionListener(this.menuListener);\r
+               this.network_menu.add(m_item);\r
+               this.network_menu.addSeparator();\r
+               m_item = new JMenuItem("Edit Network");\r
+               m_item.addActionListener(this.menuListener);\r
+               this.network_menu.add(m_item);\r
+               m_item = new JMenuItem("Remove Network");\r
+               m_item.addActionListener(this.menuListener);\r
+               this.network_menu.add(m_item);\r
+\r
+               this.router_menu = new JPopupMenu("Router menu");\r
+               m_item = new JMenuItem("Connect to Networks");\r
+               m_item.addActionListener(this.menuListener);\r
+               this.router_menu.add(m_item);\r
+               this.router_menu.addSeparator();\r
+               m_item = new JMenuItem("Edit Routing Table");\r
+               m_item.addActionListener(this.menuListener);\r
+               this.router_menu.add(m_item);\r
+               m_item = new JMenuItem("Remove Router");\r
+               m_item.addActionListener(this.menuListener);\r
+               this.router_menu.add(m_item);\r
+\r
+               this.host_menu = new JPopupMenu("Host menu");\r
+               m_item = new JMenuItem("Remove Host");\r
+               m_item.addActionListener(this.menuListener);\r
+               this.host_menu.add(m_item);\r
+\r
+               this.datagram_menu = new JPopupMenu("Datagram menu");\r
+               this.sendDatagram = new JMenuItem("Send Datagram");\r
+               this.sendDatagram.addActionListener(this.menuListener);\r
+               this.datagram_menu.add(this.sendDatagram);\r
+               this.datagram_menu.addSeparator();\r
+               m_item = new JMenuItem("Set Source & Target");\r
+               m_item.addActionListener(this.menuListener);\r
+               this.datagram_menu.add(m_item);\r
+               m_item = new JMenuItem("Set Source Only");\r
+               m_item.addActionListener(this.menuListener);\r
+               this.datagram_menu.add(m_item);\r
+               m_item = new JMenuItem("Set Target Only");\r
+               m_item.addActionListener(this.menuListener);\r
+               this.datagram_menu.add(m_item);\r
+               this.datagram_menu.addSeparator();\r
+               m_item = new JMenuItem("Edit Datagram");\r
+               m_item.addActionListener(this.menuListener);\r
+               this.datagram_menu.add(m_item);\r
+               m_item = new JMenuItem("Remove Datagram");\r
+               m_item.addActionListener(this.menuListener);\r
+               this.datagram_menu.add(m_item);\r
+       }\r
+\r
+       @Override\r
+       protected void paintComponent(Graphics graphics) {\r
+               super.paintComponent(graphics);\r
+               Iterator it = this.networks.iterator();\r
+               Network net = null;\r
+               Host host = null;\r
+               while (it.hasNext()) {\r
+                       net = (Network) it.next();\r
+                       Iterator hIt = net.hosts.iterator();\r
+                       while (hIt.hasNext()) {\r
+                               host = (Host) hIt.next();\r
+                               graphics.drawLine(getCenterX(net), getCenterY(net),\r
+                                               getCenterX(host), getCenterY(host));\r
+                               graphics.drawString(host.getIP().getIPStr(),\r
+                                               getCenterX(host) - 23, getCenterY(host) + 25);\r
+                       }\r
+\r
+               }\r
+\r
+               it = this.routers.iterator();\r
+               while (it.hasNext()) {\r
+                       Router router = (Router) it.next();\r
+                       Iterator nIt = router.networks.iterator();\r
+                       while (nIt.hasNext()) {\r
+                               net = (Network) nIt.next();\r
+                               graphics.drawLine(getCenterX(net), getCenterY(net),\r
+                                               getCenterX(router), getCenterY(router));\r
+                               graphics.drawString(router.getIP(net).getIPStr(),\r
+                                               getCenterX(net)\r
+                                                               + (getCenterX(router) - getCenterX(net)) / 5\r
+                                                               * 4, getCenterY(net)\r
+                                                               + (getCenterY(router) - getCenterY(net)) / 5\r
+                                                               * 4);\r
+\r
+                               if ((net.defaultGateway != null)\r
+                                               && (net.defaultGateway.equals(router)))\r
+                                       graphics.drawString("d", getCenterX(net)\r
+                                                       + (getCenterX(router) - getCenterX(net)) / 2,\r
+                                                       getCenterY(net)\r
+                                                                       + (getCenterY(router) - getCenterY(net))\r
+                                                                       / 2);\r
+                       }\r
+               }\r
+       }\r
+\r
+       private int getCenterX(Component c) {\r
+               return c.getX() + c.getWidth() / 2;\r
+       }\r
+\r
+       private int getCenterY(Component c) {\r
+               return c.getY() + c.getHeight() / 2;\r
+       }\r
+\r
+       public void exitSelectionMode() {\r
+               removeMouseListener(this.selMouseListener);\r
+               addMouseListener(this.mouseListener);\r
+               setCursor(new Cursor(0));\r
+               Iterator it = this.networks.iterator();\r
+               this.messagePanel.remove(NetworkSelectionMessage.getInstance());\r
+\r
+               updateUI();\r
+               this.messagePanel.updateUI();\r
+               while (it.hasNext()) {\r
+                       ((Network) it.next()).setBorder(BorderFactory.createEmptyBorder());\r
+               }\r
+\r
+               if (((Router) this.selMouseListener.selectedObject).cleanRoutingTable()) {\r
+                       JOptionPane.showMessageDialog(this,\r
+                                       "Router's routing table has been changed.", "Warning", 2);\r
+               }\r
+\r
+               it = this.networks.iterator();\r
+               Network net = null;\r
+               while (it.hasNext()) {\r
+                       net = (Network) it.next();\r
+                       if ((net.defaultGateway != null)\r
+                                       && (!net.routers.contains(net.defaultGateway))) {\r
+                               net.defaultGateway = null;\r
+                               new ChooseDefaultGateway(net, net.defaultGateway);\r
+                       }\r
+               }\r
+\r
+               this.selMouseListener.selectedObject = null;\r
+               this.selMouseListener.selectionClass = null;\r
+       }\r
+\r
+       public void exitHostSelectionMode() {\r
+               removeMouseListener(this.selMouseListener);\r
+               this.selMouseListener.selectedObject = null;\r
+               this.selMouseListener.selectionClass = null;\r
+               addMouseListener(this.mouseListener);\r
+               setCursor(new Cursor(0));\r
+               this.messagePanel.remove(HostSelectionMessage.getInstance(true));\r
+\r
+               updateUI();\r
+               this.messagePanel.updateUI();\r
+               if (this.datagram.getSource() != null) {\r
+                       this.datagram.getSource().setBorder(\r
+                                       BorderFactory.createEmptyBorder());\r
+               }\r
+               if (this.datagram.getTarget() != null) {\r
+                       this.datagram.getTarget().setBorder(\r
+                                       BorderFactory.createEmptyBorder());\r
+               }\r
+\r
+               if (this.sourceAndTarget) {\r
+                       enterSelectionMode(this.datagram, false);\r
+                       this.sourceAndTarget = false;\r
+               } else {\r
+                       this.datagram = null;\r
+               }\r
+       }\r
+\r
+       public void exitRouterSelectionMode() {\r
+               removeMouseListener(this.selMouseListener);\r
+               this.selMouseListener.selectedObject = null;\r
+               this.selMouseListener.selectionClass = null;\r
+               addMouseListener(this.mouseListener);\r
+               setCursor(new Cursor(0));\r
+               this.messagePanel.remove(RouterSelectionMessage.getInstance(this));\r
+\r
+               updateUI();\r
+               this.messagePanel.updateUI();\r
+\r
+               Iterator it = this.routers.iterator();\r
+               while (it.hasNext())\r
+                       ((Router) it.next()).setBorder(BorderFactory.createEmptyBorder());\r
+       }\r
+\r
+       public void enterSelectionMode(Router router) {\r
+               setCursor(new Cursor(12));\r
+               removeMouseListener(this.mouseListener);\r
+               addMouseListener(this.selMouseListener);\r
+               this.selMouseListener.selectionClass = Network.class;\r
+               this.selMouseListener.selectedObject = router;\r
+               this.messagePanel.add(NetworkSelectionMessage.getInstance());\r
+\r
+               updateUI();\r
+               this.messagePanel.updateUI();\r
+               Iterator it = router.networks.iterator();\r
+               while (it.hasNext())\r
+                       ((JLabel) it.next()).setBorder(BorderFactory\r
+                                       .createLineBorder(Color.GREEN));\r
+       }\r
+\r
+       public void enterSelectionMode(Network net) {\r
+               Iterator it = net.routers.iterator();\r
+\r
+               if (net.routers.size() == 1) {\r
+                       net.defaultGateway = ((Router) it.next());\r
+                       return;\r
+               }\r
+               if (net.routers.size() == 0) {\r
+                       JOptionPane\r
+                                       .showMessageDialog(\r
+                                                       this,\r
+                                                       "First connect routers to network.\nOnly then you will be able to choose a default gateway for the network.");\r
+\r
+                       return;\r
+               }\r
+\r
+               Router r = null;\r
+               while (it.hasNext()) {\r
+                       r = (Router) it.next();\r
+                       r.setBorder(BorderFactory.createLineBorder(Color.BLUE));\r
+               }\r
+\r
+               if (net.defaultGateway != null) {\r
+                       net.defaultGateway.setBorder(BorderFactory\r
+                                       .createLineBorder(Color.GREEN));\r
+               }\r
+\r
+               setCursor(new Cursor(12));\r
+               removeMouseListener(this.mouseListener);\r
+               addMouseListener(this.selMouseListener);\r
+               this.selMouseListener.selectionClass = Router.class;\r
+               this.selMouseListener.selectedObject = net;\r
+               this.messagePanel.add(RouterSelectionMessage.getInstance(this));\r
+\r
+               updateUI();\r
+               this.messagePanel.updateUI();\r
+       }\r
+\r
+       public void enterSelectionMode(Datagram datagram, boolean source) {\r
+               this.datagram = datagram;\r
+               setCursor(new Cursor(12));\r
+               removeMouseListener(this.mouseListener);\r
+               addMouseListener(this.selMouseListener);\r
+               this.selMouseListener.selectionClass = Host.class;\r
+               this.selMouseListener.selectedObject = datagram;\r
+               this.selMouseListener.source = source;\r
+               this.messagePanel.add(HostSelectionMessage.getInstance(source));\r
+\r
+               updateUI();\r
+               this.messagePanel.updateUI();\r
+\r
+               Host h = (source) ? datagram.getSource() : datagram.getTarget();\r
+               if (h != null)\r
+                       h.setBorder(BorderFactory.createLineBorder(Color.GREEN));\r
+       }\r
+\r
+       public Network createNewNetwork() {\r
+               Network network = new Network(this);\r
+               network.setHorizontalAlignment(10);\r
+               if (this.networkImage == null) {\r
+                       this.networkImage = loadImage("network2.gif");\r
+               }\r
+\r
+               while (this.networkImage.getImageLoadStatus() != 8)\r
+                       ;\r
+               network.setIconTextGap(11 - this.networkImage.getIconWidth());\r
+\r
+               network.setIcon(this.networkImage);\r
+               network.setSize(network.getPreferredSize());\r
+               return network;\r
+       }\r
+\r
+       public void removeNetwork(Network network) {\r
+               remove(network);\r
+               this.networks.remove(network);\r
+               removeNetworkConnections(network);\r
+       }\r
+\r
+       public void removeNetworkConnections(Network network) {\r
+               ListIterator it = network.hosts.listIterator();\r
+\r
+               while (it.hasNext()) {\r
+                       Host host = (Host) it.next();\r
+                       removeFromDatagrams(host);\r
+                       remove(host);\r
+               }\r
+\r
+               network.hosts.clear();\r
+\r
+               it = network.routers.listIterator();\r
+               boolean rtChanged = false;\r
+               while (it.hasNext()) {\r
+                       Router router = (Router) it.next();\r
+                       if (router.detachFromNetwork(network)) {\r
+                               rtChanged = true;\r
+                       }\r
+               }\r
+\r
+               if (rtChanged)\r
+                       JOptionPane.showMessageDialog(this,\r
+                                       "One or more connected routers' routing tables affected.",\r
+                                       "Warning", 2);\r
+       }\r
+\r
+       public void removeRouter(Router router) {\r
+               remove(router);\r
+               this.routers.remove(router);\r
+\r
+               Iterator it1 = this.networks.listIterator();\r
+               while (it1.hasNext()) {\r
+                       Network net = (Network) it1.next();\r
+                       if (router.equals(net.defaultGateway)) {\r
+                               net.defaultGateway = null;\r
+                               new ChooseDefaultGateway(net, router);\r
+                       }\r
+\r
+                       if (net.routers.contains(router)) {\r
+                               net.routers.remove(router);\r
+                               net.deAllocateIP(router);\r
+                       }\r
+               }\r
+       }\r
+\r
+       public void removeHost(Host host) {\r
+               remove(host);\r
+\r
+               Iterator it = this.networks.iterator();\r
+               while (it.hasNext()) {\r
+                       Network net = (Network) it.next();\r
+                       if (net.hosts.contains(host)) {\r
+                               removeFromDatagrams(host);\r
+                               net.hosts.remove(host);\r
+                               net.deAllocateIP(host);\r
+                       }\r
+               }\r
+       }\r
+\r
+       public void removeFromDatagrams(Host host) {\r
+               Iterator it = this.datagrams.iterator();\r
+               while (it.hasNext()) {\r
+                       Datagram datagram = (Datagram) it.next();\r
+                       if (host == datagram.getSource()) {\r
+                               datagram.setSource(null);\r
+                       }\r
+\r
+                       if (host == datagram.getTarget())\r
+                               datagram.setTarget(null);\r
+               }\r
+       }\r
+\r
+       public void removeDatagram(Datagram datagram) {\r
+               remove(datagram);\r
+       }\r
+\r
+       public Router createNewRouter() {\r
+               Router router = new Router("");\r
+               router.setHorizontalAlignment(10);\r
+               if (this.routerImage == null) {\r
+                       this.routerImage = loadImage("router.gif");\r
+               }\r
+\r
+               router.setIconTextGap(5 - this.routerImage.getIconWidth());\r
+               router.setIcon(this.routerImage);\r
+               router.setSize(router.getPreferredSize());\r
+               return router;\r
+       }\r
+\r
+       public Host createNewHost(Network net) {\r
+               Host host = new Host("", net);\r
+               host.setHorizontalAlignment(10);\r
+               if (this.hostImage == null) {\r
+                       this.hostImage = loadImage("host.gif");\r
+               }\r
+\r
+               host.setIconTextGap(5 - this.hostImage.getIconWidth());\r
+               host.setIcon(this.hostImage);\r
+               host.setSize(host.getPreferredSize());\r
+               return host;\r
+       }\r
+\r
+       public Datagram createNewDatagram() {\r
+               Datagram dg = new Datagram("");\r
+               dg.setHorizontalAlignment(10);\r
+               if (this.envelopeImage == null) {\r
+                       this.envelopeImage = loadImage("envelope.gif");\r
+               }\r
+\r
+               dg.main = this.envelopeImage;\r
+               if (this.fragImage == null) {\r
+                       this.fragImage = loadImage("frag.gif");\r
+               }\r
+               dg.frag = this.fragImage;\r
+               dg.setIconTextGap(5 - this.envelopeImage.getIconWidth());\r
+               dg.setIcon(this.envelopeImage);\r
+               dg.setSize(dg.getPreferredSize());\r
+               return dg;\r
+       }\r
+\r
+       public ImageIcon loadImage(String path) {\r
+               int count = 0;\r
+               BufferedInputStream imgStream = new BufferedInputStream(super\r
+                               .getClass().getClassLoader().getResourceAsStream(path));\r
+               if (imgStream != null) {\r
+                       try {\r
+                               count = imgStream.read(this.buf);\r
+                               imgStream.close();\r
+                       } catch (IOException ioe) {\r
+                               System.err.println("Couldn't read stream from file: " + path);\r
+                               return null;\r
+                       }\r
+                       if (count <= 0) {\r
+                               System.err.println("Empty file: " + path);\r
+                               return null;\r
+                       }\r
+                       return new ImageIcon(Toolkit.getDefaultToolkit().createImage(\r
+                                       this.buf));\r
+               }\r
+               System.err.println("Couldn't find file: " + path);\r
+               return null;\r
+       }\r
+       public boolean isIPv6() {\r
+               return isIPv6;\r
+       }\r
+\r
+       public void setIPv6(boolean isIPv6) {\r
+               this.isIPv6 = isIPv6;\r
+       }\r
+}\r
diff --git a/mtutr/MtuTr.java b/mtutr/MtuTr.java
new file mode 100644 (file)
index 0000000..6a4b664
--- /dev/null
@@ -0,0 +1,78 @@
+package mtutr;\r
+\r
+import java.awt.Color;\r
+import java.awt.Component;\r
+import java.awt.Dimension;\r
+import javax.swing.BoxLayout;\r
+import javax.swing.ImageIcon;\r
+import javax.swing.JApplet;\r
+import javax.swing.JPanel;\r
+import javax.swing.SwingUtilities;\r
+\r
+public class MtuTr extends JApplet\r
+{\r
+  private static final long serialVersionUID = 1L;\r
+  private JPanel jContentPane = null;\r
+  private JPanel north = null;\r
+  public boolean firstClick = true;\r
+  public ImageIcon m = null;\r
+\r
+  public void init()\r
+  {\r
+    setSize(750, 640);\r
+    try\r
+    {\r
+      SwingUtilities.invokeAndWait(new Runnable() {\r
+        public void run() {\r
+          MtuTr.this.createGUI();\r
+        } } );\r
+    }\r
+    catch (Exception e) {\r
+      System.err.println("createGUI didn't successfully complete");\r
+    }\r
+  }\r
+\r
+  public void createGUI() {\r
+    setContentPane(getJContentPane());\r
+  }\r
+\r
+  private JPanel getJContentPane()\r
+  {\r
+    if (this.jContentPane == null) {\r
+      this.jContentPane = new JPanel();\r
+      this.jContentPane.setLayout(new BoxLayout(this.jContentPane, 1));\r
+\r
+      this.north = new JPanel();\r
+      this.north.setAlignmentY(0.0F);\r
+      this.north.setAlignmentX(0.0F);\r
+      this.north.setVisible(false);\r
+      this.north.setBackground(new Color(255, 255, 128));\r
+      this.north.setMaximumSize(new Dimension(getSize().width, 45));\r
+      this.north.setPreferredSize(new Dimension(getSize().width, 45));\r
+\r
+      JPanel south = new MainDrawBoard(this.north, this);\r
+\r
+      if (this.firstClick) {\r
+        this.firstClick = false;\r
+      }\r
+\r
+      south.setLayout(null);\r
+\r
+      this.jContentPane.add(this.north);\r
+      this.jContentPane.add(south);\r
+    }\r
+    return this.jContentPane;\r
+  }\r
+\r
+  public MainDrawBoard setNewMainBoard(Component comp) {\r
+    this.jContentPane.remove(comp);\r
+    MainDrawBoard south = new MainDrawBoard(this.north, this);\r
+    MainDrawBoard.staticInstance = south;\r
+    south.setLayout(null);\r
+    south.setSize(comp.getSize());\r
+    this.jContentPane.add(south);\r
+\r
+    return south;\r
+  }\r
+}\r
+\r
diff --git a/mtutr/common/.p4ignore b/mtutr/common/.p4ignore
new file mode 100644 (file)
index 0000000..5417d0e
--- /dev/null
@@ -0,0 +1 @@
+IPAddress.java
diff --git a/mtutr/common/BoardCleaner.java b/mtutr/common/BoardCleaner.java
new file mode 100644 (file)
index 0000000..fe4e73a
--- /dev/null
@@ -0,0 +1,34 @@
+/*    */ package mtutr.common;\r
+/*    */ \r
+/*    */ import mtutr.MtuTr;\r
+import mtutr.MainDrawBoard;\r
+/*    */ \r
+/*    */ public class BoardCleaner\r
+/*    */   implements Runnable\r
+/*    */ {\r
+/*    */   private MtuTr kit;\r
+/*    */   private MainDrawBoard board;\r
+/*    */ \r
+/*    */   public BoardCleaner(MainDrawBoard _board)\r
+/*    */   {\r
+/* 11 */     this.kit = _board.ipKit;\r
+/* 12 */     this.board = _board;\r
+/*    */   }\r
+/*    */ \r
+/*    */   public void run() {\r
+/*    */     try {\r
+/* 17 */       Thread.sleep(100L);\r
+/*    */     }\r
+/*    */     catch (InterruptedException e) {\r
+/* 20 */       e.printStackTrace();\r
+/*    */     }\r
+/*    */ \r
+/* 23 */     this.kit.setNewMainBoard(this.board);\r
+/* 24 */     this.kit.repaint();\r
+/*    */   }\r
+/*    */ }\r
+\r
+/* Location:           C:\Users\MT\Desktop\mtutr.jar\r
+ * Qualified Name:     mtutr.common.BoardCleaner\r
+ * JD-Core Version:    0.5.4\r
+ */
\ No newline at end of file
diff --git a/mtutr/common/IPAddress.java b/mtutr/common/IPAddress.java
new file mode 100644 (file)
index 0000000..ed68cb6
--- /dev/null
@@ -0,0 +1,328 @@
+package mtutr.common;\r
+\r
+import java.util.StringTokenizer;\r
+import java.util.regex.Pattern;\r
+\r
+public class IPAddress {\r
+       public static final int CLASS_A = 8;\r
+       public static final int CLASS_B = 16;\r
+       public static final int CLASS_C = 24;\r
+       public static final int CLASS_D = 32;\r
+       private static Pattern pattern = Pattern\r
+                       .compile("(\\d{1,3}+\\.){3}+\\d{1,3}+");\r
+       private long ip;\r
+\r
+       public static boolean isValidAddress(String ip) {\r
+               if (pattern.matcher(ip).matches()) {\r
+                       StringTokenizer st = new StringTokenizer(ip, ".");\r
+                       while (st.hasMoreTokens()) {\r
+                               try {\r
+                                       int val = Integer.parseInt(st.nextToken());\r
+                                       if ((val > 255) || (val < 0))\r
+                                               return false;\r
+                               } catch (Throwable e) {\r
+                                       return false;\r
+                               }\r
+                       }\r
+                       return true;\r
+               }\r
+               return false;\r
+       }\r
+\r
+       public IPAddress(long val) {\r
+               this.ip = val;\r
+       }\r
+\r
+       public IPAddress(String val) throws Exception {\r
+               String[] str = new String[4];\r
+               StringTokenizer tokens = new StringTokenizer(val, ".");\r
+               str[3] = tokens.nextToken();\r
+               str[2] = tokens.nextToken();\r
+               str[1] = tokens.nextToken();\r
+               str[0] = tokens.nextToken();\r
+\r
+               setIP(Integer.parseInt(str[3]), Integer.parseInt(str[2]), Integer\r
+                               .parseInt(str[1]), Integer.parseInt(str[0]));\r
+       }\r
+\r
+       public void setIP(Integer i1, Integer i2, Integer i3, Integer i4) {\r
+               setIP(i1.intValue(), i2.intValue(), i3.intValue(), i4.intValue());\r
+       }\r
+\r
+       public void setIP(long i1, long i2, long i3, long i4) {\r
+               this.ip = (i1 << 24 | i2 << 16 | i3 << 8 | i4);\r
+       }\r
+\r
+       public void setIP(long newIP) {\r
+               this.ip = newIP;\r
+       }\r
+\r
+       public long getIPLong() {\r
+               return this.ip;\r
+       }\r
+\r
+       public long getIPByte(int b) {\r
+               return this.ip >> b * 8 & 0xFF;\r
+       }\r
+\r
+       public Integer getIPByteInt(int b) {\r
+               return new Integer((int) (this.ip >> b * 8 & 0xFF));\r
+       }\r
+\r
+       public String getIPByteStr(int b) {\r
+               return String.valueOf(this.ip >> b * 8 & 0xFF);\r
+       }\r
+\r
+       public String getIPStr() {\r
+               StringBuffer sb = new StringBuffer(20);\r
+               for (int i = 3; i >= 0; --i) {\r
+                       sb.append(getIPByte(i));\r
+                       if (i == 0)\r
+                               continue;\r
+                       sb.append('.');\r
+               }\r
+               return sb.toString();\r
+       }\r
+\r
+       public int getIPClass() {\r
+               return getIPClass(this.ip);\r
+       }\r
+\r
+       private static final int getIPClass(long ip) {\r
+               long reg = 0L;\r
+\r
+               reg = 14L;\r
+               if ((ip & reg << 28) == reg << 28) {\r
+                       return 32;\r
+               }\r
+\r
+               reg = 6L;\r
+               if ((ip & reg << 29) == reg << 29) {\r
+                       return 24;\r
+               }\r
+\r
+               reg = 2L;\r
+               if ((ip & reg << 30) == reg << 30) {\r
+                       return 16;\r
+               }\r
+\r
+               reg = 1L;\r
+               if ((ip & reg << 31) == 0L) {\r
+                       return 8;\r
+               }\r
+\r
+               return -1;\r
+       }\r
+\r
+       public IPAddress getNetworkIPByClass() {\r
+               long reg = 0L;\r
+\r
+               reg = 14L;\r
+               if ((this.ip & reg << 28) == reg << 28) {\r
+                       return new IPAddress(this.ip);\r
+               }\r
+\r
+               reg = 6L;\r
+               if ((this.ip & reg << 29) == reg << 29) {\r
+                       return new IPAddress(this.ip & 0xFFFFFF00);\r
+               }\r
+\r
+               reg = 2L;\r
+               if ((this.ip & reg << 30) == reg << 30) {\r
+                       return new IPAddress(this.ip & 0xFFFF0000);\r
+               }\r
+\r
+               reg = 1L;\r
+               if ((this.ip & reg << 31) == reg << 31) {\r
+                       return new IPAddress(this.ip & 0xFF000000);\r
+               }\r
+\r
+               return null;\r
+       }\r
+\r
+       public IPAddress getNetworkIPByCIDR(int cidr) {\r
+               long reg = -1L;\r
+               return new IPAddress(this.ip & reg >>> 32 - cidr << 32 - cidr);\r
+       }\r
+\r
+       public boolean isLegalHostWithCIDR(long _ip, int _cidr) {\r
+               long reg = -1L;\r
+               reg = reg >>> 32 - _cidr << 32 - _cidr;\r
+               return (_ip & reg) == (this.ip & reg);\r
+       }\r
+\r
+       public boolean isLegalHostWithClasses(long _ip) {\r
+               long mask = 32L;\r
+               switch (getIPClass(_ip)) {\r
+               case 8:\r
+                       mask = 8L;\r
+                       break;\r
+               case 16:\r
+                       mask = 16L;\r
+                       break;\r
+               case 24:\r
+                       mask = 24L;\r
+                       break;\r
+               case 32:\r
+                       mask = 32L;\r
+               }\r
+\r
+               long reg = -1L;\r
+               return (_ip & reg >>> (int) (32L - mask) << (int) (32L - mask)) == this.ip;\r
+       }\r
+\r
+       @Override\r
+       public String toString() {\r
+               return getIPStr();\r
+       }\r
+\r
+       @Override\r
+       public boolean equals(Object obj) {\r
+               if (obj instanceof IPAddress) {\r
+                       return ((IPAddress) obj).getIPLong() == this.ip;\r
+               }\r
+               if (obj instanceof String) {\r
+                       return obj.equals(toString());\r
+               }\r
+               return false;\r
+       }\r
+\r
+       private int getLastBitAppearanceOnByte(int i) {\r
+               long l = getIPByte(i);\r
+\r
+               if (l == 0L) {\r
+                       return 0;\r
+               }\r
+               int bit = 8;\r
+               for (; bit > 0; --bit) {\r
+                       long mod = l % 2L;\r
+                       l /= 2L;\r
+\r
+                       if (mod == 1L) {\r
+                               break;\r
+                       }\r
+               }\r
+               return bit;\r
+       }\r
+\r
+       public int getMinimalMask() {\r
+               int mask = 0;\r
+\r
+               int mask3 = getLastBitAppearanceOnByte(3);\r
+               int mask2 = getLastBitAppearanceOnByte(2);\r
+               int mask1 = getLastBitAppearanceOnByte(1);\r
+               int mask0 = getLastBitAppearanceOnByte(0);\r
+\r
+               boolean b3 = mask3 == 0;\r
+               boolean b2 = mask2 == 0;\r
+               boolean b1 = mask1 == 0;\r
+               boolean b0 = mask0 == 0;\r
+\r
+               if ((b3) && (b2) && (b1) && (b0)) {\r
+                       return 0;\r
+               }\r
+\r
+               if ((b3) && (b2) && (b1) && (!b0)) {\r
+                       return 24 + mask0;\r
+               }\r
+\r
+               if ((b3) && (b2) && (!b1) && (b0)) {\r
+                       return 16 + mask1;\r
+               }\r
+\r
+               if ((b3) && (b2) && (!b1) && (!b0)) {\r
+                       return 24 + mask0;\r
+               }\r
+\r
+               if ((b3) && (!b2) && (b1) && (b0)) {\r
+                       return 8 + mask2;\r
+               }\r
+\r
+               if ((b3) && (!b2) && (b1) && (!b0)) {\r
+                       return 24 + mask0;\r
+               }\r
+\r
+               if ((b3) && (!b2) && (!b1) && (b0)) {\r
+                       return 16 + mask1;\r
+               }\r
+\r
+               if ((b3) && (!b2) && (!b1) && (!b0)) {\r
+                       return 24 + mask0;\r
+               }\r
+\r
+               if ((!b3) && (b2) && (b1) && (b0)) {\r
+                       return mask3;\r
+               }\r
+\r
+               if ((!b3) && (b2) && (b1) && (!b0)) {\r
+                       return 24 + mask0;\r
+               }\r
+\r
+               if ((!b3) && (b2) && (!b1) && (b0)) {\r
+                       return 16 + mask1;\r
+               }\r
+\r
+               if ((!b3) && (b2) && (!b1) && (!b0)) {\r
+                       return 24 + mask0;\r
+               }\r
+\r
+               if ((!b3) && (!b2) && (b1) && (b0)) {\r
+                       return 8 + mask2;\r
+               }\r
+\r
+               if ((!b3) && (!b2) && (b1) && (!b0)) {\r
+                       return 24 + mask0;\r
+               }\r
+\r
+               if ((!b3) && (!b2) && (!b1) && (b0)) {\r
+                       return 16 + mask1;\r
+               }\r
+\r
+               if ((!b3) && (!b2) && (!b1) && (!b0)) {\r
+                       return 24 + mask0;\r
+               }\r
+\r
+               return mask;\r
+       }\r
+\r
+       private String getBinStrByte(int i) {\r
+               long l = getIPByte(i);\r
+               long[] ip = new long[9];\r
+\r
+               if (l == 0L) {\r
+                       return "00000000";\r
+               }\r
+               int numOfZeros = 8;\r
+               for (; numOfZeros > 0; --numOfZeros) {\r
+                       ip[numOfZeros] = (l % 2L);\r
+                       l /= 2L;\r
+\r
+                       if (l == 0L) {\r
+                               break;\r
+                       }\r
+               }\r
+\r
+               --numOfZeros;\r
+\r
+               String s = "";\r
+               for (int j = 1; j <= numOfZeros; ++j) {\r
+                       s = s + "0";\r
+               }\r
+\r
+               for (int j = numOfZeros + 1; j <= 8; ++j) {\r
+                       s = s + ip[j];\r
+               }\r
+\r
+               return s;\r
+       }\r
+\r
+       public String getBinStrIP() {\r
+               return getBinStrByte(3) + "." + getBinStrByte(2) + "."\r
+                               + getBinStrByte(1) + "." + getBinStrByte(0);\r
+       }\r
+}\r
+\r
+/*\r
+ * Location: C:\Users\MT\Desktop\mtutr.jar Qualified Name:\r
+ * mtutr.common.IPAddress JD-Core Version: 0.5.4\r
+ */
\ No newline at end of file
diff --git a/mtutr/listeners/.p4ignore b/mtutr/listeners/.p4ignore
new file mode 100644 (file)
index 0000000..1eb6b9d
--- /dev/null
@@ -0,0 +1,3 @@
+MainMouseListener.java
+MenuListener.java
+SelectionMouseListener.java
diff --git a/mtutr/listeners/MainMouseListener.java b/mtutr/listeners/MainMouseListener.java
new file mode 100644 (file)
index 0000000..274cd18
--- /dev/null
@@ -0,0 +1,129 @@
+package mtutr.listeners;\r
+\r
+import java.awt.Component;\r
+import java.awt.Point;\r
+import java.awt.event.MouseEvent;\r
+import java.awt.event.MouseListener;\r
+import java.awt.event.MouseMotionListener;\r
+\r
+import javax.swing.JLabel;\r
+\r
+import mtutr.MainDrawBoard;\r
+import mtutr.objects.Datagram;\r
+import mtutr.objects.Host;\r
+import mtutr.objects.Network;\r
+import mtutr.objects.Router;\r
+import mtutr.windows.DatagramProperties;\r
+import mtutr.windows.NetworkProperties;\r
+import mtutr.windows.RouterProperties;\r
+\r
+public class MainMouseListener implements MouseListener, MouseMotionListener {\r
+       private boolean inDrag = false;\r
+       int dX;\r
+       int dY;\r
+       MainDrawBoard board;\r
+       Component draggedComp = null;\r
+       boolean selectMode;\r
+       Class selectionClass;\r
+\r
+       public MainMouseListener(MainDrawBoard val) {\r
+               this.board = val;\r
+       }\r
+\r
+       public void mouseClicked(MouseEvent event) {\r
+               if (event.getButton() == 3) {\r
+                       if (this.board.firstClick) {\r
+                               this.board.firstClick = false;\r
+//                             this.board.remove(this.board.startLabel);\r
+                               this.board.updateUI();\r
+                       }\r
+\r
+                       this.board.menuListener.setSelectedComponent(event);\r
+                       Component comp = this.board.getComponentAt(event.getPoint());\r
+\r
+                       if (comp instanceof Network) {\r
+                               if (((Network) comp).getIP() == null) {\r
+                                       this.board.addHost.setEnabled(false);\r
+                               } else {\r
+                                       this.board.addHost.setEnabled(true);\r
+                               }\r
+                               this.board.network_menu.show(this.board, event.getX(), event\r
+                                               .getY());\r
+                       } else if (comp instanceof Datagram) {\r
+                               if ((((Datagram) comp).getTarget() == null)\r
+                                               || (((Datagram) comp).getSource() == null))\r
+                                       this.board.sendDatagram.setEnabled(false);\r
+                               else {\r
+                                       this.board.sendDatagram.setEnabled(true);\r
+                               }\r
+                               this.board.datagram_menu.show(this.board, event.getX(), event\r
+                                               .getY());\r
+                       } else if (comp instanceof Router) {\r
+                               this.board.router_menu.show(this.board, event.getX(), event\r
+                                               .getY());\r
+                       } else if (comp instanceof Host) {\r
+                               this.board.host_menu.show(this.board, event.getX(), event\r
+                                               .getY());\r
+                       } else {\r
+                               this.board.main_menu.show(this.board, event.getX(), event\r
+                                               .getY());\r
+                       }\r
+               } else if ((event.getButton() == 1) && (event.getClickCount() == 2)) {\r
+                       Component comp = this.board.getComponentAt(event.getPoint());\r
+                       if (comp instanceof Network) {\r
+                               new NetworkProperties((Network) comp).setVisible(true);\r
+                       }\r
+\r
+                       if (comp instanceof Datagram) {\r
+                               new DatagramProperties((Datagram) comp).setVisible(true);\r
+                       }\r
+\r
+                       if (comp instanceof Router) {\r
+                               new RouterProperties((Router) comp).setVisible(true);\r
+                       }\r
+               }\r
+       }\r
+\r
+       public void mouseEntered(MouseEvent arg0) {\r
+       }\r
+\r
+       public void mouseExited(MouseEvent arg0) {\r
+       }\r
+\r
+       public void mousePressed(MouseEvent event) {\r
+               Point p = event.getPoint();\r
+               Component comp = this.board.getComponentAt(event.getPoint());\r
+\r
+               if ((comp instanceof JLabel)\r
+                               && (((JLabel) comp).getText()\r
+                                               .equals("Right-click to get started"))) {\r
+                       return;\r
+               }\r
+\r
+               if ((!this.inDrag) && (comp != null) && (comp != this.board)) {\r
+                       this.inDrag = true;\r
+                       this.draggedComp = comp;\r
+                       this.board.remove(comp);\r
+                       this.board.add(comp, 0);\r
+                       this.dX = (comp.getX() - p.x);\r
+                       this.dY = (comp.getY() - p.y);\r
+               }\r
+       }\r
+\r
+       public void mouseReleased(MouseEvent arg0) {\r
+               this.inDrag = false;\r
+               this.draggedComp = null;\r
+       }\r
+\r
+       public void mouseDragged(MouseEvent event) {\r
+               Point p = event.getPoint();\r
+               if ((!this.inDrag) || (p.x <= 0) || (p.x >= this.board.getWidth())\r
+                               || (p.y <= 0) || (p.y >= this.board.getHeight()))\r
+                       return;\r
+               this.draggedComp.setLocation(this.dX + p.x, this.dY + p.y);\r
+               this.board.repaint();\r
+       }\r
+\r
+       public void mouseMoved(MouseEvent arg0) {\r
+       }\r
+}\r
diff --git a/mtutr/listeners/MenuListener.java b/mtutr/listeners/MenuListener.java
new file mode 100644 (file)
index 0000000..1692a00
--- /dev/null
@@ -0,0 +1,138 @@
+/*     */ package mtutr.listeners;\r
+/*     */ \r
+/*     */ /*     */ import java.awt.Component;\r
+/*     */ import java.awt.event.ActionEvent;\r
+/*     */ import java.awt.event.ActionListener;\r
+/*     */ import java.awt.event.MouseEvent;\r
+/*     */ import java.util.List;\r
+import javax.swing.JOptionPane;\r
+\r
+import mtutr.MainDrawBoard;\r
+import mtutr.common.BoardCleaner;\r
+import mtutr.objects.Datagram;\r
+import mtutr.objects.Host;\r
+import mtutr.objects.IPKitItem;\r
+import mtutr.objects.Network;\r
+import mtutr.objects.Router;\r
+import mtutr.windows.DatagramProperties;\r
+import mtutr.windows.NetworkProperties;\r
+import mtutr.windows.RouterProperties;\r
+/*     */ \r
+/*     */ public class MenuListener\r
+/*     */   implements ActionListener\r
+/*     */ {\r
+/*     */   private MainDrawBoard board;\r
+/*     */   private MouseEvent mouseEvent;\r
+/*  24 */   private Component selectedComponent = null;\r
+/*  25 */   private IPKitItem item = null;\r
+/*     */ \r
+/*     */   public MenuListener(MainDrawBoard newBoard) {\r
+/*  28 */     this.board = newBoard;\r
+/*     */   }\r
+/*     */ \r
+/*     */   public void setSelectedComponent(MouseEvent newItem) {\r
+/*  32 */     this.mouseEvent = newItem;\r
+/*  33 */     this.selectedComponent = this.board.getComponentAt(this.mouseEvent.getPoint());\r
+/*     */   }\r
+/*     */ \r
+/*     */   public void actionPerformed(ActionEvent event) {\r
+/*  37 */     if (event.getActionCommand().equalsIgnoreCase("Add Network")) {\r
+/*  38 */       Network network = this.board.createNewNetwork();\r
+/*  39 */       this.item = network;\r
+/*  40 */       this.board.networks.add(network);\r
+/*  41 */       network.setLocation(this.mouseEvent.getPoint());\r
+/*  42 */       this.board.add(network, 0);\r
+/*     */     }\r
+/*  44 */     else if (event.getActionCommand().equalsIgnoreCase("Remove Network")) {\r
+/*  45 */       this.board.removeNetwork((Network)this.selectedComponent);\r
+/*     */     }\r
+/*  47 */     else if (event.getActionCommand().equalsIgnoreCase("Add Router")) {\r
+/*  48 */       Router router = this.board.createNewRouter();\r
+/*  49 */       this.item = router;\r
+/*  50 */       router.setLocation(this.mouseEvent.getPoint());\r
+/*  51 */       this.board.routers.add(router);\r
+/*  52 */       this.board.add(router, 0);\r
+/*  53 */     }if (event.getActionCommand().equalsIgnoreCase("Add Host")) {\r
+/*  54 */       Network net = (Network)this.selectedComponent;\r
+/*  55 */       if (net.getIP() == null) {\r
+/*  56 */         JOptionPane.showMessageDialog(this.board, "Unable adding a host while network's IP addresses haven't defined.\nDefine network's IP addresses before adding a host to it.");\r
+/*     */ \r
+/*  58 */         return;\r
+/*     */       }\r
+/*  60 */       Host host = this.board.createNewHost(net);\r
+/*  61 */       this.item = host;\r
+/*  62 */       if (net.allocateIP(host) == null) {\r
+/*  63 */         JOptionPane.showMessageDialog(this.board, "Unable adding new host: IP addresses pool is empty.");\r
+/*     */       }\r
+/*     */       else\r
+/*     */       {\r
+/*  67 */         ((Network)this.selectedComponent).hosts.add(host);\r
+/*  68 */         host.setLocation(this.mouseEvent.getPoint());\r
+/*  69 */         this.board.add(host, 0);\r
+/*     */       }\r
+/*     */     }\r
+/*  72 */     else if (event.getActionCommand().equalsIgnoreCase("Edit Network")) {\r
+/*  73 */       NetworkProperties tmp = new NetworkProperties((Network)this.selectedComponent);\r
+/*  74 */       tmp.show();\r
+/*     */     }\r
+/*  76 */     else if (event.getActionCommand().equalsIgnoreCase("Edit Routing Table")) {\r
+/*  77 */       RouterProperties tmp = new RouterProperties((Router)this.selectedComponent);\r
+/*  78 */       tmp.show();\r
+/*     */     }\r
+/*  80 */     else if (event.getActionCommand().equalsIgnoreCase("Set Default Gateway")) {\r
+/*  81 */       this.board.enterSelectionMode((Network)this.selectedComponent);\r
+/*     */     }\r
+/*  83 */     else if (event.getActionCommand().equalsIgnoreCase("Remove Router")) {\r
+/*  84 */       this.board.removeRouter((Router)this.selectedComponent);\r
+/*     */     }\r
+/*  86 */     else if (event.getActionCommand().equalsIgnoreCase("Remove Host")) {\r
+/*  87 */       this.board.removeHost((Host)this.selectedComponent);\r
+/*     */     }\r
+/*  89 */     else if (event.getActionCommand().equalsIgnoreCase("Connect to networks")) {\r
+/*  90 */       this.board.enterSelectionMode((Router)this.selectedComponent);\r
+/*     */     }\r
+/*  92 */     else if (event.getActionCommand().equalsIgnoreCase("Add Datagram")) {\r
+/*  93 */       Datagram datagram = this.board.createNewDatagram();\r
+/*  94 */       this.item = datagram;\r
+/*  95 */       this.board.datagrams.add(datagram);\r
+/*  96 */       datagram.setLocation(this.mouseEvent.getPoint());\r
+/*  97 */       this.board.add(datagram, 0);\r
+/*     */     }\r
+/*  99 */     else if (event.getActionCommand().equalsIgnoreCase("Send Datagram")) {\r
+/* 100 */       Datagram d = (Datagram)this.selectedComponent;\r
+/* 101 */       d.send();\r
+/*     */     }\r
+/* 103 */     else if (event.getActionCommand().equalsIgnoreCase("Edit Datagram")) {\r
+/* 104 */       new DatagramProperties((Datagram)this.selectedComponent);\r
+/*     */     }\r
+/* 106 */     else if (event.getActionCommand().equalsIgnoreCase("Remove Datagram")) {\r
+/* 107 */       this.board.removeDatagram((Datagram)this.selectedComponent);\r
+/*     */     }\r
+/* 109 */     else if (event.getActionCommand().equalsIgnoreCase("Set Source & Target")) {\r
+/* 110 */       this.board.sourceAndTarget = true;\r
+/* 111 */       this.board.enterSelectionMode((Datagram)this.selectedComponent, true);\r
+/*     */     }\r
+/* 113 */     else if (event.getActionCommand().equalsIgnoreCase("Set Source Only")) {\r
+/* 114 */       this.board.enterSelectionMode((Datagram)this.selectedComponent, true);\r
+/*     */     }\r
+/* 116 */     else if (event.getActionCommand().equalsIgnoreCase("Set Target Only")) {\r
+/* 117 */       this.board.enterSelectionMode((Datagram)this.selectedComponent, false);\r
+/*     */     }\r
+/* 119 */     else if (event.getActionCommand().equalsIgnoreCase("Remove All"))\r
+/*     */     {\r
+/* 121 */       new Thread(new BoardCleaner(this.board)).start();\r
+/* 122 */       return;\r
+/*     */     }\r
+/*     */ \r
+/* 125 */     this.board.repaint();\r
+/*     */   }\r
+/*     */ \r
+/*     */   public IPKitItem getLastItem() {\r
+/* 129 */     return this.item;\r
+/*     */   }\r
+/*     */ }\r
+\r
+/* Location:           C:\Users\MT\Desktop\mtutr.jar\r
+ * Qualified Name:     mtutr.listeners.MenuListener\r
+ * JD-Core Version:    0.5.4\r
+ */
\ No newline at end of file
diff --git a/mtutr/listeners/NetworkPlacementListener.java b/mtutr/listeners/NetworkPlacementListener.java
new file mode 100644 (file)
index 0000000..4972975
--- /dev/null
@@ -0,0 +1,324 @@
+/*     */ package mtutr.listeners;\r
+/*     */ \r
+/*     */ /*     */ import java.awt.Component;\r
+/*     */ import java.awt.Point;\r
+/*     */ import java.awt.event.ActionEvent;\r
+/*     */ import java.awt.event.ActionListener;\r
+/*     */ import java.awt.event.MouseEvent;\r
+/*     */ import java.util.LinkedList;\r
+/*     */ import java.util.List;\r
+import javax.swing.JOptionPane;\r
+\r
+import mtutr.MainDrawBoard;\r
+import mtutr.common.IPAddress;\r
+import mtutr.objects.Datagram;\r
+import mtutr.objects.Host;\r
+import mtutr.objects.Network;\r
+import mtutr.objects.Router;\r
+import mtutr.objects.RoutingTable;\r
+import mtutr.objects.RoutingTableEntry;\r
+/*     */ \r
+/*     */ public class NetworkPlacementListener\r
+/*     */   implements ActionListener\r
+/*     */ {\r
+/*     */   private MainDrawBoard board;\r
+/*     */   private MouseEvent mouseEvent;\r
+/*  22 */   private Component selectedComponent = null;\r
+/*  23 */   private MenuListener menuListener = null;\r
+/*     */ \r
+/*     */   public NetworkPlacementListener(MainDrawBoard newBoard, MenuListener newMenuListener) {\r
+/*  26 */     this.board = newBoard;\r
+/*  27 */     this.menuListener = newMenuListener;\r
+/*     */   }\r
+/*     */ \r
+/*     */   public void setSelectedComponent(MouseEvent newItem) {\r
+/*  31 */     this.mouseEvent = newItem;\r
+/*  32 */     this.selectedComponent = this.board.getComponentAt(this.mouseEvent.getPoint());\r
+/*     */   }\r
+/*     */ \r
+/*     */   public void actionPerformed(ActionEvent event) {\r
+/*  36 */     if (event.getActionCommand().equalsIgnoreCase("Star")) {\r
+/*  37 */       placeNetwork1();\r
+/*     */     }\r
+/*  39 */     else if (event.getActionCommand().equalsIgnoreCase("Loop")) {\r
+/*  40 */       placeNetwork2();\r
+/*     */     }\r
+/*  42 */     else if (event.getActionCommand().equalsIgnoreCase("Long"))\r
+/*  43 */       placeNetwork3();\r
+/*     */   }\r
+/*     */ \r
+/*     */   public void placeNetwork1()\r
+/*     */   {\r
+/*     */     try {\r
+/*  49 */       Router mainRouter = placeRouter(215, 320);\r
+/*     */ \r
+/*  51 */       RoutingTableEntry rte = new RoutingTableEntry();\r
+/*  52 */       rte.net = "1.0.0.0"; rte.cidr = "8"; rte.gateway = "1.0.0.2"; rte.ifc = "1.0.0.0"; rte.isNew = false;\r
+/*  53 */       mainRouter.routingTable.entries.add(rte);\r
+/*     */ \r
+/*  55 */       rte = new RoutingTableEntry();\r
+/*  56 */       rte.net = "2.0.0.0"; rte.cidr = "8"; rte.gateway = "2.0.0.2"; rte.ifc = "2.0.0.0"; rte.isNew = false;\r
+/*  57 */       mainRouter.routingTable.entries.add(rte);\r
+/*     */ \r
+/*  59 */       rte = new RoutingTableEntry();\r
+/*  60 */       rte.net = "3.0.0.0"; rte.cidr = "8"; rte.gateway = "3.0.0.2"; rte.ifc = "3.0.0.0"; rte.isNew = false;\r
+/*  61 */       mainRouter.routingTable.entries.add(rte);\r
+/*     */ \r
+/*  63 */       Network net1 = placeNetwork(70, 250);\r
+/*  64 */       net1.setCIDR_IP(new IPAddress("1.0.0.0"), 16);\r
+/*  65 */       Router router1 = placeRouter(85, 150);\r
+/*  66 */       Network net11 = placeNetwork(0, 0);\r
+/*  67 */       net11.setCIDR_IP(new IPAddress("1.1.0.0"), 24);\r
+/*  68 */       Network net12 = placeNetwork(140, 0);\r
+/*  69 */       net12.setCIDR_IP(new IPAddress("1.2.0.0"), 24);\r
+/*  70 */       connectNetworkToRouter(net1, mainRouter);\r
+/*  71 */       connectNetworkToRouter(net1, router1);\r
+/*  72 */       connectNetworkToRouter(net11, router1);\r
+/*  73 */       connectNetworkToRouter(net12, router1);\r
+/*  74 */       placeHost(net11, 11, 58);\r
+/*  75 */       placeHost(net11, 100, 58);\r
+/*  76 */       placeHost(net12, 201, 58);\r
+/*     */ \r
+/*  78 */       rte = new RoutingTableEntry();\r
+/*  79 */       rte.net = "1.1.0.0"; rte.cidr = "24"; rte.gateway = "1.1.0.1"; rte.ifc = "1.1.0.0"; rte.isNew = false;\r
+/*  80 */       router1.routingTable.entries.add(rte);\r
+/*     */ \r
+/*  82 */       rte = new RoutingTableEntry();\r
+/*  83 */       rte.net = "1.2.0.0"; rte.cidr = "24"; rte.gateway = "1.2.0.1"; rte.ifc = "1.2.0.0"; rte.isNew = false;\r
+/*  84 */       router1.routingTable.entries.add(rte);\r
+/*     */ \r
+/*  86 */       rte = new RoutingTableEntry();\r
+/*  87 */       rte.net = "0.0.0.0"; rte.cidr = "0"; rte.gateway = "1.0.0.1"; rte.ifc = "1.0.0.0"; rte.isNew = false;\r
+/*  88 */       router1.routingTable.entries.add(rte);\r
+/*     */ \r
+/*  92 */       Network net2 = placeNetwork(330, 250);\r
+/*  93 */       net2.setCIDR_IP(new IPAddress("2.0.0.0"), 16);\r
+/*  94 */       Router router2 = placeRouter(340, 150);\r
+/*  95 */       Network net21 = placeNetwork(260, 0);\r
+/*  96 */       net21.setCIDR_IP(new IPAddress("2.1.0.0"), 24);\r
+/*  97 */       Network net22 = placeNetwork(380, 0);\r
+/*  98 */       net22.setCIDR_IP(new IPAddress("2.2.0.0"), 24);\r
+/*  99 */       connectNetworkToRouter(net2, mainRouter);\r
+/* 100 */       connectNetworkToRouter(net2, router2);\r
+/* 101 */       connectNetworkToRouter(net21, router2);\r
+/* 102 */       connectNetworkToRouter(net22, router2);\r
+/* 103 */       placeHost(net21, 291, 58);\r
+/* 104 */       placeHost(net22, 455, 58);\r
+/*     */ \r
+/* 107 */       rte = new RoutingTableEntry();\r
+/* 108 */       rte.net = "2.1.0.0"; rte.cidr = "24"; rte.gateway = "2.1.0.1"; rte.ifc = "2.1.0.0"; rte.isNew = false;\r
+/* 109 */       router2.routingTable.entries.add(rte);\r
+/*     */ \r
+/* 111 */       rte = new RoutingTableEntry();\r
+/* 112 */       rte.net = "2.2.0.0"; rte.cidr = "24"; rte.gateway = "2.2.0.1"; rte.ifc = "2.2.0.0"; rte.isNew = false;\r
+/* 113 */       router2.routingTable.entries.add(rte);\r
+/*     */ \r
+/* 115 */       rte = new RoutingTableEntry();\r
+/* 116 */       rte.net = "0.0.0.0"; rte.cidr = "0"; rte.gateway = "2.0.0.1"; rte.ifc = "2.0.0.0"; rte.isNew = false;\r
+/* 117 */       router2.routingTable.entries.add(rte);\r
+/*     */ \r
+/* 120 */       Network net3 = placeNetwork(195, 389);\r
+/* 121 */       net3.setCIDR_IP(new IPAddress("3.0.0.0"), 16);\r
+/* 122 */       Router router3 = placeRouter(210, 480);\r
+/* 123 */       Network net31 = placeNetwork(13, 529);\r
+/* 124 */       net31.setCIDR_IP(new IPAddress("3.1.0.0"), 24);\r
+/* 125 */       Network net32 = placeNetwork(378, 529);\r
+/* 126 */       net32.setCIDR_IP(new IPAddress("3.2.0.0"), 24);\r
+/* 127 */       connectNetworkToRouter(net3, mainRouter);\r
+/* 128 */       connectNetworkToRouter(net3, router3);\r
+/* 129 */       connectNetworkToRouter(net31, router3);\r
+/* 130 */       connectNetworkToRouter(net32, router3);\r
+/* 131 */       placeHost(net31, 139, 549);\r
+/* 132 */       placeHost(net31, 13, 484);\r
+/* 133 */       placeHost(net32, 318, 549);\r
+/* 134 */       placeHost(net32, 443, 484);\r
+/*     */ \r
+/* 136 */       rte = new RoutingTableEntry();\r
+/* 137 */       rte.net = "3.1.0.0"; rte.cidr = "24"; rte.gateway = "3.1.0.1"; rte.ifc = "3.1.0.0"; rte.isNew = false;\r
+/* 138 */       router3.routingTable.entries.add(rte);\r
+/*     */ \r
+/* 140 */       rte = new RoutingTableEntry();\r
+/* 141 */       rte.net = "3.2.0.0"; rte.cidr = "24"; rte.gateway = "3.2.0.1"; rte.ifc = "3.2.0.0"; rte.isNew = false;\r
+/* 142 */       router3.routingTable.entries.add(rte);\r
+/*     */ \r
+/* 144 */       rte = new RoutingTableEntry();\r
+/* 145 */       rte.net = "0.0.0.0"; rte.cidr = "0"; rte.gateway = "3.0.0.1"; rte.ifc = "3.0.0.0"; rte.isNew = false;\r
+/* 146 */       router3.routingTable.entries.add(rte);\r
+/*     */ \r
+/* 148 */       placeDatagram(221, 221);\r
+/*     */ \r
+/* 150 */       this.board.repaint();\r
+/* 151 */       JOptionPane.showMessageDialog(this.board, \r
+/* 152 */         "<html><b>Star</b> - This network is constructed of three main networks connected using<br> \t\t<br>a router to each other. Each of these main networks is connected to another two<br> \t\t<br>\"sub-networks\".<br> \t\t<br>Hosts are allocated only in the \"sub-networks\".<br> \t\t<br>All routers are already configured to transfer datagrams between the hosts.<br> \t\t<br>Determine datagram's source and target, and send it</html>");\r
+/*     */     }\r
+/*     */     catch (Throwable e)\r
+/*     */     {\r
+/* 160 */       return;\r
+/*     */     }\r
+/*     */   }\r
+/*     */ \r
+/*     */   public void placeNetwork2() {\r
+/*     */     try {\r
+/* 166 */       Network net1 = placeNetwork(22, 292);\r
+/* 167 */       net1.setCIDR_IP(new IPAddress("1.0.0.0"), 16);\r
+/* 168 */       Network net2 = placeNetwork(324, 292);\r
+/* 169 */       net2.setCIDR_IP(new IPAddress("2.0.0.0"), 16);\r
+/* 170 */       Router router1 = placeRouter(206, 84);\r
+/* 171 */       Router router2 = placeRouter(206, 489);\r
+/* 172 */       Host h1 = placeHost(net1, 162, 310);\r
+/* 173 */       Host h2 = placeHost(net2, 264, 310);\r
+/* 174 */       connectNetworkToRouter(net1, router1);\r
+/* 175 */       connectNetworkToRouter(net2, router2);\r
+/* 176 */       connectNetworkToRouter(net1, router2);\r
+/* 177 */       connectNetworkToRouter(net2, router1);\r
+/*     */ \r
+/* 179 */       RoutingTableEntry rte = new RoutingTableEntry();\r
+/* 180 */       rte.net = "2.0.0.0";\r
+/* 181 */       rte.cidr = "255.0.0.0";\r
+/* 182 */       rte.gateway = "2.0.0.2";\r
+/* 183 */       rte.ifc = "2.0.0.0";\r
+/* 184 */       rte.isNew = false;\r
+/* 185 */       router1.routingTable.entries.add(rte);\r
+/* 186 */       rte = new RoutingTableEntry();\r
+/* 187 */       rte.net = "1.0.0.0";\r
+/* 188 */       rte.cidr = "255.0.0.0";\r
+/* 189 */       rte.gateway = "1.0.0.3";\r
+/* 190 */       rte.ifc = "1.0.0.0";\r
+/* 191 */       rte.isNew = false;\r
+/* 192 */       router1.routingTable.entries.add(rte);\r
+/*     */ \r
+/* 195 */       rte = new RoutingTableEntry();\r
+/* 196 */       rte.net = "1.0.0.0";\r
+/* 197 */       rte.cidr = "255.0.0.0";\r
+/* 198 */       rte.gateway = "1.0.0.2";\r
+/* 199 */       rte.ifc = "1.0.0.0";\r
+/* 200 */       rte.isNew = false;\r
+/* 201 */       router2.routingTable.entries.add(rte);\r
+/* 202 */       rte = new RoutingTableEntry();\r
+/* 203 */       rte.net = "2.0.0.0";\r
+/* 204 */       rte.cidr = "255.0.0.0";\r
+/* 205 */       rte.gateway = "2.0.0.3";\r
+/* 206 */       rte.ifc = "2.0.0.0";\r
+/* 207 */       rte.isNew = false;\r
+/* 208 */       router2.routingTable.entries.add(rte);\r
+/*     */ \r
+/* 210 */       Datagram d = placeDatagram(221, 221);\r
+/* 211 */       d.setTTL(3);\r
+/* 212 */       d.setSource(h1);\r
+/* 213 */       d.setTarget(h2);\r
+/*     */ \r
+/* 215 */       this.board.repaint();\r
+/* 216 */       JOptionPane.showMessageDialog(this.board, \r
+/* 217 */         "<html><b>Loop</b> - This network simulates an error in the configuration of the routers.<br> \t\t<br>The source and the target of the datagram are already determined.<br> \t\t<br>Simply send the datagram and watch what happens.<br></html>");\r
+/*     */     }\r
+/*     */     catch (Throwable e)\r
+/*     */     {\r
+/* 223 */       return;\r
+/*     */     }\r
+/*     */   }\r
+/*     */ \r
+/*     */   public void placeNetwork3() {\r
+/*     */     try {\r
+/* 228 */       Network net1 = placeNetwork(0, 0);\r
+/* 229 */       net1.setCIDR_IP(new IPAddress("1.0.0.0"), 8);\r
+/* 230 */       Router router1 = placeRouter(32, 120);\r
+/* 231 */       connectNetworkToRouter(net1, router1);\r
+/* 232 */       placeHost(net1, 150, 12);\r
+/*     */ \r
+/* 234 */       Network net2 = placeNetwork(0, 215);\r
+/* 235 */       net2.setCIDR_IP(new IPAddress("2.0.0.0"), 8);\r
+/* 236 */       Router router2 = placeRouter(32, 335);\r
+/* 237 */       connectNetworkToRouter(net2, router2);\r
+/* 238 */       connectNetworkToRouter(net2, router1);\r
+/* 239 */       placeHost(net2, 150, 225);\r
+/*     */ \r
+/* 241 */       Network net3 = placeNetwork(0, 430);\r
+/* 242 */       net3.setCIDR_IP(new IPAddress("3.0.0.0"), 8);\r
+/* 243 */       Router router3 = placeRouter(32, 550);\r
+/* 244 */       connectNetworkToRouter(net3, router3);\r
+/* 245 */       connectNetworkToRouter(net3, router2);\r
+/* 246 */       placeHost(net3, 150, 438);\r
+/*     */ \r
+/* 248 */       Network net4 = placeNetwork(202, 540);\r
+/* 249 */       net4.setCIDR_IP(new IPAddress("4.0.0.0"), 8);\r
+/* 250 */       Router router4 = placeRouter(412, 550);\r
+/* 251 */       connectNetworkToRouter(net4, router4);\r
+/* 252 */       connectNetworkToRouter(net4, router3);\r
+/* 253 */       placeHost(net4, 242, 483);\r
+/*     */ \r
+/* 255 */       Network net5 = placeNetwork(380, 430);\r
+/* 256 */       net5.setCIDR_IP(new IPAddress("5.0.0.0"), 8);\r
+/* 257 */       Router router5 = placeRouter(412, 335);\r
+/* 258 */       connectNetworkToRouter(net5, router5);\r
+/* 259 */       connectNetworkToRouter(net5, router4);\r
+/* 260 */       placeHost(net5, 312, 438);\r
+/*     */ \r
+/* 262 */       Network net6 = placeNetwork(380, 215);\r
+/* 263 */       net6.setCIDR_IP(new IPAddress("6.0.0.0"), 8);\r
+/* 264 */       Router router6 = placeRouter(412, 120);\r
+/* 265 */       connectNetworkToRouter(net6, router6);\r
+/* 266 */       connectNetworkToRouter(net6, router5);\r
+/* 267 */       placeHost(net6, 312, 225);\r
+/*     */ \r
+/* 269 */       Network net7 = placeNetwork(380, 0);\r
+/* 270 */       net7.setCIDR_IP(new IPAddress("7.0.0.0"), 8);\r
+/* 271 */       connectNetworkToRouter(net7, router6);\r
+/* 272 */       placeHost(net7, 312, 12);\r
+/*     */ \r
+/* 274 */       placeDatagram(241, 120);\r
+/*     */ \r
+/* 276 */       this.board.repaint();\r
+/* 277 */       JOptionPane.showMessageDialog(this.board, \r
+/* 278 */         "<html><b>Long</b> - This network is constructed of a list of routers and networks.<br><br>Routers are not configured.<br><br>You may add networks, hosts, routers, datagrams and configure them as you like.<br></html>");\r
+/*     */     }\r
+/*     */     catch (Throwable e)\r
+/*     */     {\r
+/* 285 */       return;\r
+/*     */     }\r
+/*     */   }\r
+/*     */ \r
+/*     */   public Network placeNetwork(int x, int y) {\r
+/* 290 */     x += 125;\r
+/* 291 */     this.menuListener.setSelectedComponent(new MouseEvent(this.board, 0, 0L, 0, x, y, 1, false));\r
+/* 292 */     this.menuListener.actionPerformed(new ActionEvent(this, 1001, "Add Network"));\r
+/* 293 */     Network net = (Network)this.menuListener.getLastItem();\r
+/* 294 */     net.setMTU(500);\r
+/* 295 */     return net;\r
+/*     */   }\r
+/*     */ \r
+/*     */   public Router placeRouter(int x, int y) {\r
+/* 299 */     x += 125;\r
+/* 300 */     this.menuListener.setSelectedComponent(new MouseEvent(this.board, 0, 0L, 0, x, y, 1, false));\r
+/* 301 */     this.menuListener.actionPerformed(new ActionEvent(this, 1001, "Add Router"));\r
+/* 302 */     return (Router)this.menuListener.getLastItem();\r
+/*     */   }\r
+/*     */ \r
+/*     */   public Datagram placeDatagram(int x, int y) {\r
+/* 306 */     x += 125;\r
+/* 307 */     this.menuListener.setSelectedComponent(new MouseEvent(this.board, 0, 0L, 0, x, y, 1, false));\r
+/* 308 */     this.menuListener.actionPerformed(new ActionEvent(this, 1001, "Add Datagram"));\r
+/* 309 */     return (Datagram)this.menuListener.getLastItem();\r
+/*     */   }\r
+/*     */ \r
+/*     */   public Host placeHost(Network net, int x, int y) {\r
+/* 313 */     x += 125;\r
+/* 314 */     this.menuListener.setSelectedComponent(new MouseEvent(net, 0, 0L, 0, (int)net.getLocation().getX(), (int)net.getLocation().getY(), 1, false));\r
+/* 315 */     this.menuListener.actionPerformed(new ActionEvent(net, 1001, "Add Host"));\r
+/* 316 */     Host host = (Host)this.menuListener.getLastItem();\r
+/* 317 */     host.setLocation(x, y);\r
+/* 318 */     return host;\r
+/*     */   }\r
+/*     */ \r
+/*     */   public void connectNetworkToRouter(Network net, Router router) {\r
+/* 322 */     router.networks.add(net);\r
+/* 323 */     router.getIP(net);\r
+/* 324 */     net.routers.add(router);\r
+/* 325 */     if (net.defaultGateway == null)\r
+/* 326 */       net.defaultGateway = router;\r
+/*     */   }\r
+/*     */ }\r
+\r
+/* Location:           C:\Users\MT\Desktop\mtutr.jar\r
+ * Qualified Name:     mtutr.listeners.NetworkPlacementListener\r
+ * JD-Core Version:    0.5.4\r
+ */
\ No newline at end of file
diff --git a/mtutr/listeners/NetworkTypeButtonListener.java b/mtutr/listeners/NetworkTypeButtonListener.java
new file mode 100644 (file)
index 0000000..e3dc6c2
--- /dev/null
@@ -0,0 +1,38 @@
+/**\r
+ * \r
+ */\r
+package mtutr.listeners;\r
+\r
+import java.awt.event.ActionEvent;\r
+import java.awt.event.ActionListener;\r
+\r
+import mtutr.MainDrawBoard;\r
+\r
+/**\r
+ * @author New user\r
+ *\r
+ */\r
+public class NetworkTypeButtonListener implements ActionListener {\r
+\r
+\r
+       private final MainDrawBoard mainDrawBoard;\r
+       private final boolean isIPv6;\r
+       \r
+       public NetworkTypeButtonListener(MainDrawBoard mainDrawBoard, boolean isIPv6) {\r
+               super();\r
+               this.mainDrawBoard = mainDrawBoard;\r
+               this.isIPv6 = isIPv6;\r
+       }\r
+\r
+       /* (non-Javadoc)\r
+        * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)\r
+        */\r
+       @Override\r
+       public void actionPerformed(ActionEvent e) {\r
+               mainDrawBoard.setIPv6(isIPv6);\r
+               this.mainDrawBoard.removeAll();\r
+               this.mainDrawBoard.updateUI();\r
+\r
+       }\r
+\r
+}\r
diff --git a/mtutr/listeners/SelectionMouseListener.java b/mtutr/listeners/SelectionMouseListener.java
new file mode 100644 (file)
index 0000000..8aa14ec
--- /dev/null
@@ -0,0 +1,132 @@
+/*    */ package mtutr.listeners;\r
+/*    */ \r
+/*    */ /*    */ import java.awt.Color;\r
+/*    */ import java.awt.Component;\r
+/*    */ import java.awt.event.MouseEvent;\r
+/*    */ import java.awt.event.MouseListener;\r
+/*    */ import java.util.List;\r
+/*    */ import javax.swing.BorderFactory;\r
+/*    */ import javax.swing.JLabel;\r
+import javax.swing.JOptionPane;\r
+\r
+import mtutr.MainDrawBoard;\r
+import mtutr.objects.Datagram;\r
+import mtutr.objects.Host;\r
+import mtutr.objects.IPKitItem;\r
+import mtutr.objects.Network;\r
+import mtutr.objects.Router;\r
+/*    */ \r
+/*    */ public class SelectionMouseListener\r
+/*    */   implements MouseListener\r
+/*    */ {\r
+/* 20 */   MainDrawBoard board = null;\r
+/*    */   public Class selectionClass;\r
+/* 22 */   public IPKitItem selectedObject = null;\r
+/*    */   public boolean source;\r
+/*    */ \r
+/*    */   public SelectionMouseListener(MainDrawBoard theBoard)\r
+/*    */   {\r
+/* 26 */     this.board = theBoard;\r
+/*    */   }\r
+/*    */ \r
+/*    */   public void mouseClicked(MouseEvent event) {\r
+/* 30 */     Component comp = this.board.getComponentAt(event.getPoint());\r
+/* 31 */     if (this.selectedObject instanceof Router) {\r
+/* 32 */       Router router = (Router)this.selectedObject;\r
+/* 33 */       if (comp.getClass().equals(this.selectionClass)) {\r
+/* 34 */         Network net = (Network)comp;\r
+/* 35 */         if (net.getIP() == null) {\r
+/* 36 */           JOptionPane.showMessageDialog(this.board, "Unable connecting to router while network's IP addresses haven't defined.\nDefine network's IP addresses before connecting it to a router.", \r
+/* 37 */             "Warning", 2);\r
+/* 38 */           return;\r
+/*    */         }\r
+/*    */ \r
+/* 41 */         if (router.networks.contains(comp)) {\r
+/* 42 */           ((JLabel)comp).setBorder(BorderFactory.createEmptyBorder());\r
+/* 43 */           router.networks.remove(comp);\r
+/* 44 */           net.routers.remove(this.selectedObject);\r
+/* 45 */           net.deAllocateIP(this.selectedObject);\r
+/*    */         }\r
+/* 48 */         else if (net.allocateIP(this.selectedObject) != null) {\r
+/* 49 */           net.setBorder(BorderFactory.createLineBorder(Color.GREEN));\r
+/* 50 */           router.networks.add(comp);\r
+/* 51 */           net.routers.add(this.selectedObject);\r
+/* 52 */           if (net.routers.size() == 1)\r
+/* 53 */             net.defaultGateway = ((Router)this.selectedObject);\r
+/*    */         }\r
+/*    */         else\r
+/*    */         {\r
+/* 57 */           JOptionPane.showMessageDialog(this.board, "Unable to connect router to selected network: IP addresses pool is empty.");\r
+/*    */         }\r
+/*    */ \r
+/*    */       }\r
+/*    */ \r
+/*    */     }\r
+/* 63 */     else if (this.selectedObject instanceof Datagram) {\r
+/* 64 */       if (comp instanceof Host) {\r
+/* 65 */         Datagram dg = (Datagram)this.selectedObject;\r
+/*    */ \r
+/* 67 */         Host host1 = (this.source) ? dg.getSource() : dg.getTarget();\r
+/* 68 */         if (host1 != null) {\r
+/* 69 */           host1.setBorder(BorderFactory.createEmptyBorder());\r
+/*    */         }\r
+/*    */ \r
+/* 72 */         Host host2 = (Host)comp;\r
+/* 73 */         if (host2.equals(host1))\r
+/*    */         {\r
+/* 75 */           host2.setBorder(BorderFactory.createEmptyBorder());\r
+/* 76 */           host2 = null;\r
+/*    */         }\r
+/*    */         else\r
+/*    */         {\r
+/* 80 */           host2.setBorder(BorderFactory.createLineBorder(Color.GREEN));\r
+/*    */         }\r
+/*    */ \r
+/* 83 */         if (this.source) {\r
+/* 84 */           dg.setSource(host2);\r
+/*    */         }\r
+/*    */         else {\r
+/* 87 */           dg.setTarget(host2);\r
+/*    */         }\r
+/*    */       }\r
+/*    */     }\r
+/* 91 */     else if (this.selectedObject instanceof Network) {\r
+/* 92 */       Network net = (Network)this.selectedObject;\r
+/* 93 */       Router defaultGateway = net.defaultGateway;\r
+/* 94 */       if (defaultGateway != null) {\r
+/* 95 */         defaultGateway.setBorder(BorderFactory.createLineBorder(Color.GREEN));\r
+/*    */       }\r
+/* 97 */       if (comp instanceof Router) {\r
+/* 98 */         Router r = (Router)comp;\r
+/* 99 */         if (net.routers.contains(r)) {\r
+/* 100 */           if (defaultGateway != null) {\r
+/* 101 */             defaultGateway.setBorder(BorderFactory.createLineBorder(Color.BLUE));\r
+/*    */           }\r
+/* 103 */           r.setBorder(BorderFactory.createLineBorder(Color.GREEN));\r
+/* 104 */           net.defaultGateway = r;\r
+/*    */         }\r
+/*    */       }\r
+/*    */     }\r
+/*    */   }\r
+/*    */ \r
+/*    */   public void mouseEntered(MouseEvent arg0)\r
+/*    */   {\r
+/*    */   }\r
+/*    */ \r
+/*    */   public void mouseExited(MouseEvent arg0)\r
+/*    */   {\r
+/*    */   }\r
+/*    */ \r
+/*    */   public void mousePressed(MouseEvent arg0)\r
+/*    */   {\r
+/*    */   }\r
+/*    */ \r
+/*    */   public void mouseReleased(MouseEvent arg0)\r
+/*    */   {\r
+/*    */   }\r
+/*    */ }\r
+\r
+/* Location:           C:\Users\MT\Desktop\mtutr.jar\r
+ * Qualified Name:     mtutr.listeners.SelectionMouseListener\r
+ * JD-Core Version:    0.5.4\r
+ */
\ No newline at end of file
diff --git a/mtutr/messages/AnimationMonitor.java b/mtutr/messages/AnimationMonitor.java
new file mode 100644 (file)
index 0000000..2877a51
--- /dev/null
@@ -0,0 +1,165 @@
+package mtutr.messages;\r
+\r
+import java.awt.Color;\r
+import java.awt.Component;\r
+import java.awt.FlowLayout;\r
+import java.awt.Font;\r
+import java.awt.event.ActionEvent;\r
+import java.awt.event.ActionListener;\r
+import java.util.Iterator;\r
+import java.util.Map;\r
+\r
+import javax.swing.JLabel;\r
+import javax.swing.JPanel;\r
+import javax.swing.JToggleButton;\r
+\r
+import mtutr.objects.Datagram;\r
+import mtutr.objects.Network;\r
+import mtutr.objects.RouteTestResult;\r
+import mtutr.objects.Router;\r
+\r
+public class AnimationMonitor extends JPanel implements ActionListener {\r
+       private static final long serialVersionUID = 1L;\r
+       private static AnimationMonitor instance = null;\r
+       private final JLabel MTULabel;\r
+       private final JLabel ttlLabel;\r
+       private final JLabel errLabel;\r
+       private final JToggleButton stopAnimn;\r
+       public boolean shouldStop = false;\r
+       public JLabel legendLabel;\r
+\r
+       public static AnimationMonitor getInstance() {\r
+               if (instance == null) {\r
+                       instance = new AnimationMonitor();\r
+               }\r
+               return instance;\r
+       }\r
+\r
+       public void updateTTL(int ttl) {\r
+               this.ttlLabel.setText("TTL: " + ttl + "   ");\r
+               this.ttlLabel.updateUI();\r
+       }\r
+\r
+       public void updateMTU(int mtu) {\r
+               this.MTULabel.setText("Datagram size: " + mtu + "   ");\r
+       }\r
+\r
+       public void updateMTUs(Map fragments) {\r
+               StringBuffer sb = new StringBuffer();\r
+               sb\r
+                               .append("<html>Datagram fragments: fragment size(num of fragments)&nbsp;&nbsp;&nbsp;<table border=\"1\" CELLSPACING=\"0\"><tr>");\r
+               Iterator it = fragments.keySet().iterator();\r
+               while (it.hasNext()) {\r
+                       Object o = it.next();\r
+                       sb.append("<td>").append(o).append(" (x").append(fragments.get(o))\r
+                                       .append(")</td>");\r
+               }\r
+               sb.append("</tr></table></html>");\r
+               this.MTULabel.setText(sb.toString());\r
+       }\r
+\r
+       public void setError(String err) {\r
+               this.errLabel.setText(err);\r
+               this.errLabel.updateUI();\r
+       }\r
+\r
+       public void enableStop() {\r
+               this.shouldStop = false;\r
+               this.stopAnimn.setVisible(true);\r
+               this.stopAnimn.setText("Stop Simulation");\r
+               this.stopAnimn.setEnabled(true);\r
+               this.stopAnimn.setSelected(false);\r
+               this.stopAnimn.setForeground(Color.black);\r
+               repaint();\r
+       }\r
+\r
+       public void enableStopping() {\r
+               this.shouldStop = true;\r
+               this.stopAnimn.setVisible(true);\r
+               this.stopAnimn.setText("Stopping Simulation...");\r
+               this.stopAnimn.setSelected(true);\r
+               repaint();\r
+       }\r
+\r
+       public void hideStopSim() {\r
+               this.stopAnimn.setVisible(false);\r
+               repaint();\r
+       }\r
+\r
+       public void setLegend(Component obj, Datagram d) {\r
+               if (obj == null) {\r
+                       this.legendLabel.setText("");\r
+                       return;\r
+               }\r
+\r
+               String str = "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";\r
+\r
+               if (obj instanceof Router) {\r
+                       RouteTestResult rtr = ((Router) obj).routingTable.findMatch(d\r
+                                       .getTarget().getIP());\r
+                       if (rtr == null) {\r
+                               this.legendLabel.setText("");\r
+                               return;\r
+                       }\r
+\r
+                       str = str + "Current Router: matched routing entry<br>";\r
+                       str = str\r
+                                       + "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"\r
+                                       + rtr.rte.toString();\r
+                       this.legendLabel.setText("<HTML>" + str + "</HTML>");\r
+               } else if (obj instanceof Network) {\r
+                       str = str + "Current Network<br>";\r
+                       str = str\r
+                                       + "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MTU size:&nbsp;&nbsp;"\r
+                                       + ((Network) obj).getMTU();\r
+                       this.legendLabel.setText("<HTML>" + str + "</HTML>");\r
+               }\r
+       }\r
+\r
+       private AnimationMonitor() {\r
+               FlowLayout fl = new FlowLayout();\r
+               fl.setAlignment(0);\r
+               setLayout(fl);\r
+\r
+               setOpaque(false);\r
+\r
+               this.MTULabel = new JLabel("");\r
+               this.MTULabel.setHorizontalAlignment(10);\r
+               this.MTULabel.setFont(new Font("Tahoma", 0, 11));\r
+               add(this.MTULabel);\r
+\r
+               this.ttlLabel = new JLabel("");\r
+               this.ttlLabel.setHorizontalAlignment(10);\r
+               this.ttlLabel.setFont(new Font("Tahoma", 0, 11));\r
+               add(this.ttlLabel);\r
+\r
+               this.errLabel = new JLabel("");\r
+               this.errLabel.setHorizontalAlignment(10);\r
+               this.errLabel.setFont(new Font("Tahoma", 0, 11));\r
+               this.errLabel.setForeground(Color.RED);\r
+               add(this.errLabel);\r
+\r
+               this.stopAnimn = new JToggleButton("Stop Simulation");\r
+               this.stopAnimn.setHorizontalAlignment(10);\r
+               this.stopAnimn.setFont(new Font("Tahoma", 0, 11));\r
+               this.stopAnimn.setBackground(new Color(188, 213, 254));\r
+               this.stopAnimn.addActionListener(this);\r
+               add(this.stopAnimn);\r
+\r
+               this.legendLabel = new JLabel("");\r
+               this.legendLabel.setHorizontalAlignment(10);\r
+               this.legendLabel.setFont(new Font("Tahoma", 0, 11));\r
+               add(this.legendLabel);\r
+\r
+               repaint();\r
+       }\r
+\r
+       public void actionPerformed(ActionEvent arg0) {\r
+               enableStopping();\r
+       }\r
+}\r
+\r
+/*\r
+ * Location: C:\Users\MT\Desktop\mtutr.jar Qualified Name:\r
+ * mtutr.messages.AnimationMonitor JD-Core Version: 0.5.4\r
+ */
\ No newline at end of file
diff --git a/mtutr/messages/HostSelectionMessage.java b/mtutr/messages/HostSelectionMessage.java
new file mode 100644 (file)
index 0000000..a3af246
--- /dev/null
@@ -0,0 +1,56 @@
+/*    */ package mtutr.messages;\r
+/*    */ \r
+/*    */ /*    */ import java.awt.Color;\r
+/*    */ import java.awt.FlowLayout;\r
+/*    */ import java.awt.Font;\r
+/*    */ import java.awt.event.ActionEvent;\r
+/*    */ import java.awt.event.ActionListener;\r
+/*    */ import javax.swing.JButton;\r
+/*    */ import javax.swing.JLabel;\r
+import javax.swing.JPanel;\r
+\r
+import mtutr.MainDrawBoard;\r
+/*    */ \r
+/*    */ public class HostSelectionMessage extends JPanel\r
+/*    */ {\r
+/*    */   private static final long serialVersionUID = 1L;\r
+/* 17 */   private static HostSelectionMessage instance = null;\r
+/* 18 */   private static JLabel label = null;\r
+/*    */ \r
+/*    */   public static HostSelectionMessage getInstance(boolean source) {\r
+/* 21 */     if (instance == null) {\r
+/* 22 */       instance = new HostSelectionMessage(source);\r
+/*    */     }\r
+/*    */ \r
+/* 25 */     label.setText("<html>Select <b>" + ((source) ? "source" : "target") + "</b> host of datagram      <html>");\r
+/*    */ \r
+/* 27 */     return instance;\r
+/*    */   }\r
+/*    */ \r
+/*    */   private HostSelectionMessage(boolean source) {\r
+/* 31 */     FlowLayout fl = new FlowLayout();\r
+/* 32 */     fl.setAlignment(0);\r
+/* 33 */     setLayout(fl);\r
+/*    */ \r
+/* 35 */     setOpaque(false);\r
+/*    */ \r
+/* 37 */     label = new JLabel("<html>Select <b>" + ((source) ? "source" : "target") + "</b> host of datagram      <html>");\r
+/* 38 */     label.setHorizontalAlignment(10);\r
+/* 39 */     label.setFont(new Font("Tahoma", 0, 11));\r
+/* 40 */     add(label);\r
+/* 41 */     JButton button = new JButton("Done");\r
+/* 42 */     button.setBackground(new Color(188, 213, 254));\r
+/* 43 */     button.setFont(new Font("Tahoma", 0, 11));\r
+/* 44 */     button.addActionListener(new ActionListener() {\r
+/*    */       public void actionPerformed(ActionEvent event) {\r
+/* 46 */         MainDrawBoard.staticInstance.exitHostSelectionMode();\r
+/*    */       }\r
+/*    */     });\r
+/* 49 */     add(button);\r
+/*    */   }\r
+/*    */ }\r
+\r
+/* Location:           C:\Users\MT\Desktop\mtutr.jar\r
+ * Qualified Name:     mtutr.messages.HostSelectionMessage\r
+ * JD-Core Version:    0.5.4\r
+ */
\ No newline at end of file
diff --git a/mtutr/messages/NetworkSelectionMessage.java b/mtutr/messages/NetworkSelectionMessage.java
new file mode 100644 (file)
index 0000000..9c7fbfc
--- /dev/null
@@ -0,0 +1,52 @@
+/*    */ package mtutr.messages;\r
+/*    */ \r
+/*    */ /*    */ import java.awt.Color;\r
+/*    */ import java.awt.FlowLayout;\r
+/*    */ import java.awt.Font;\r
+/*    */ import java.awt.event.ActionEvent;\r
+/*    */ import java.awt.event.ActionListener;\r
+/*    */ import javax.swing.JButton;\r
+/*    */ import javax.swing.JLabel;\r
+import javax.swing.JPanel;\r
+\r
+import mtutr.MainDrawBoard;\r
+/*    */ \r
+/*    */ public class NetworkSelectionMessage extends JPanel\r
+/*    */ {\r
+/*    */   private static final long serialVersionUID = 1L;\r
+/* 17 */   private static NetworkSelectionMessage instance = null;\r
+/*    */ \r
+/*    */   public static NetworkSelectionMessage getInstance() {\r
+/* 20 */     if (instance == null) {\r
+/* 21 */       instance = new NetworkSelectionMessage();\r
+/*    */     }\r
+/* 23 */     return instance;\r
+/*    */   }\r
+/*    */ \r
+/*    */   private NetworkSelectionMessage() {\r
+/* 27 */     FlowLayout fl = new FlowLayout();\r
+/* 28 */     fl.setAlignment(0);\r
+/* 29 */     setLayout(fl);\r
+/*    */ \r
+/* 31 */     setOpaque(false);\r
+/*    */ \r
+/* 33 */     JLabel label = new JLabel("Select networks by mouse left button                ");\r
+/* 34 */     label.setHorizontalAlignment(10);\r
+/* 35 */     label.setFont(new Font("Tahoma", 0, 11));\r
+/* 36 */     add(label);\r
+/* 37 */     JButton button = new JButton("Done");\r
+/* 38 */     button.setBackground(new Color(188, 213, 254));\r
+/* 39 */     button.setFont(new Font("Tahoma", 0, 11));\r
+/* 40 */     button.addActionListener(new ActionListener() {\r
+/*    */       public void actionPerformed(ActionEvent event) {\r
+/* 42 */         MainDrawBoard.staticInstance.exitSelectionMode();\r
+/*    */       }\r
+/*    */     });\r
+/* 45 */     add(button);\r
+/*    */   }\r
+/*    */ }\r
+\r
+/* Location:           C:\Users\MT\Desktop\mtutr.jar\r
+ * Qualified Name:     mtutr.messages.NetworkSelectionMessage\r
+ * JD-Core Version:    0.5.4\r
+ */
\ No newline at end of file
diff --git a/mtutr/messages/RouterSelectionMessage.java b/mtutr/messages/RouterSelectionMessage.java
new file mode 100644 (file)
index 0000000..1039208
--- /dev/null
@@ -0,0 +1,52 @@
+/*    */ package mtutr.messages;\r
+/*    */ \r
+/*    */ /*    */ import java.awt.Color;\r
+/*    */ import java.awt.FlowLayout;\r
+/*    */ import java.awt.Font;\r
+/*    */ import java.awt.event.ActionEvent;\r
+/*    */ import java.awt.event.ActionListener;\r
+/*    */ import javax.swing.JButton;\r
+/*    */ import javax.swing.JLabel;\r
+import javax.swing.JPanel;\r
+\r
+import mtutr.MainDrawBoard;\r
+/*    */ \r
+/*    */ public class RouterSelectionMessage extends JPanel\r
+/*    */ {\r
+/*    */   private static final long serialVersionUID = 1L;\r
+/* 17 */   private static RouterSelectionMessage instance = null;\r
+/*    */ \r
+/*    */   public static RouterSelectionMessage getInstance(MainDrawBoard board) {\r
+/* 20 */     if (instance == null) {\r
+/* 21 */       instance = new RouterSelectionMessage(board);\r
+/*    */     }\r
+/* 23 */     return instance;\r
+/*    */   }\r
+/*    */ \r
+/*    */   private RouterSelectionMessage(MainDrawBoard theBoard) {\r
+/* 27 */     FlowLayout fl = new FlowLayout();\r
+/* 28 */     fl.setAlignment(0);\r
+/* 29 */     setLayout(fl);\r
+/*    */ \r
+/* 31 */     setOpaque(false);\r
+/*    */ \r
+/* 33 */     JLabel label = new JLabel("Select network's default gateway                ");\r
+/* 34 */     label.setHorizontalAlignment(10);\r
+/* 35 */     label.setFont(new Font("Tahoma", 0, 11));\r
+/* 36 */     add(label);\r
+/* 37 */     JButton button = new JButton("Done");\r
+/* 38 */     button.setBackground(new Color(188, 213, 254));\r
+/* 39 */     button.setFont(new Font("Tahoma", 0, 11));\r
+/* 40 */     button.addActionListener(new ActionListener() {\r
+/*    */       public void actionPerformed(ActionEvent event) {\r
+/* 42 */         MainDrawBoard.staticInstance.exitRouterSelectionMode();\r
+/*    */       }\r
+/*    */     });\r
+/* 45 */     add(button);\r
+/*    */   }\r
+/*    */ }\r
+\r
+/* Location:           C:\Users\MT\Desktop\mtutr.jar\r
+ * Qualified Name:     mtutr.messages.RouterSelectionMessage\r
+ * JD-Core Version:    0.5.4\r
+ */
\ No newline at end of file
diff --git a/mtutr/objects/.p4ignore b/mtutr/objects/.p4ignore
new file mode 100644 (file)
index 0000000..af8fd8b
--- /dev/null
@@ -0,0 +1,8 @@
+Datagram.java
+Host.java
+IPKitItem.java
+Network.java
+RouteTestResult.java
+Router.java
+RoutingTable.java
+RoutingTableEntry.java
diff --git a/mtutr/objects/Datagram.java b/mtutr/objects/Datagram.java
new file mode 100644 (file)
index 0000000..553b38d
--- /dev/null
@@ -0,0 +1,365 @@
+package mtutr.objects;\r
+\r
+import java.awt.Color;\r
+import java.awt.Component;\r
+import java.awt.Font;\r
+import java.awt.Point;\r
+import java.util.HashMap;\r
+import java.util.Iterator;\r
+import java.util.LinkedList;\r
+\r
+import javax.swing.ImageIcon;\r
+import javax.swing.JLabel;\r
+import javax.swing.JOptionPane;\r
+\r
+import mtutr.MainDrawBoard;\r
+import mtutr.messages.AnimationMonitor;\r
+\r
+public class Datagram extends JLabel implements IPKitItem, Runnable {\r
+       private static final long serialVersionUID = 1L;\r
+       private int ttl;\r
+       private int length;\r
+       private Host source;\r
+       private Host target;\r
+       private final LinkedList path = new LinkedList();\r
+       public ImageIcon main = null;\r
+       public ImageIcon frag = null;\r
+\r
+       private int largets_fragment = 0;\r
+       public HashMap fragments = null;\r
+\r
+       public Datagram(String string) {\r
+               super(string);\r
+               this.ttl = 10;\r
+               this.length = 500;\r
+       }\r
+\r
+       public void dispatchEvent() {\r
+       }\r
+\r
+       public Component getjComponent() {\r
+               return this;\r
+       }\r
+\r
+       public void setTTL(int i) {\r
+               this.ttl = i;\r
+       }\r
+\r
+       public int getTTL() {\r
+               return this.ttl;\r
+       }\r
+\r
+       public void setLength(int i) {\r
+               this.length = i;\r
+       }\r
+\r
+       public int getLength() {\r
+               return this.length;\r
+       }\r
+\r
+       public Host getSource() {\r
+               return this.source;\r
+       }\r
+\r
+       public void setSource(Host source) {\r
+               this.source = source;\r
+       }\r
+\r
+       public Host getTarget() {\r
+               return this.target;\r
+       }\r
+\r
+       public void setTarget(Host target) {\r
+               this.target = target;\r
+       }\r
+\r
+       public void send() {\r
+               this.path.clear();\r
+               this.path.add(this.source);\r
+               this.path.add(this.source.network);\r
+               if (this.source.network.equals(this.target.network)) {\r
+                       this.path.add(this.target);\r
+               } else if (this.source.network.defaultGateway != null) {\r
+                       calculateRoute();\r
+               }\r
+\r
+               new Thread(this).start();\r
+       }\r
+\r
+       protected void calculateRoute() {\r
+               int routers_count = 0;\r
+               Router router = this.source.network.defaultGateway;\r
+               this.path.add(router);\r
+               RouteTestResult rtr = null;\r
+               Network net = null;\r
+               while (true) {\r
+                       rtr = router.routingTable.findMatch(this.target.getIP());\r
+                       if (rtr == null) {\r
+                               break;\r
+                       }\r
+\r
+                       if (rtr.nextHop.equals(router.getIP(rtr.network))) {\r
+                               this.path.add(rtr.network);\r
+                               if (!rtr.network.hosts.contains(this.target))\r
+                                       break;\r
+                               this.path.add(this.target);\r
+\r
+                               break;\r
+                       }\r
+\r
+                       net = rtr.network;\r
+                       router = net.getRouter(rtr.nextHop);\r
+                       this.path.add(net);\r
+\r
+                       if (router == null) {\r
+                               break;\r
+                       }\r
+                       this.path.add(router);\r
+                       ++routers_count;\r
+                       if (routers_count > this.ttl + 1) {\r
+                               break;\r
+                       }\r
+\r
+               }\r
+       }\r
+\r
+       public void runAnimation() {\r
+               Point origLoc = getLocation();\r
+               int localTTL = this.ttl;\r
+\r
+               this.fragments = new HashMap();\r
+               this.fragments.put(new Integer(this.length), new Integer(1));\r
+               this.largets_fragment = this.length;\r
+\r
+               MainDrawBoard board = MainDrawBoard.staticInstance;\r
+               AnimationMonitor animMonitor = AnimationMonitor.getInstance();\r
+               animMonitor.updateTTL(localTTL);\r
+               animMonitor.updateMTU(this.length);\r
+               animMonitor.setError("");\r
+               animMonitor.setLegend(null, this);\r
+               animMonitor.enableStop();\r
+               animMonitor.repaint();\r
+               board.removeMouseListener(board.mouseListener);\r
+               board.messagePanel.add(animMonitor);\r
+\r
+               board.updateUI();\r
+               board.messagePanel.updateUI();\r
+\r
+               Component src = null;\r
+               Component trg = null;\r
+               boolean err = false;\r
+\r
+               if (this.path.size() < 3) {\r
+                       animMonitor\r
+                                       .setError("Datagram can not be sent: no default router available.");\r
+               } else {\r
+                       for (int i = 1; i < this.path.size(); ++i) {\r
+                               if (animMonitor.shouldStop) {\r
+                                       break;\r
+                               }\r
+                               src = (Component) this.path.get(i - 1);\r
+                               trg = (Component) this.path.get(i);\r
+\r
+                               if (src instanceof Router) {\r
+                                       if (localTTL == 0) {\r
+                                               animMonitor.setError("Datagram expired");\r
+                                               err = true;\r
+                                               break;\r
+                                       }\r
+\r
+                                       --localTTL;\r
+                                       animMonitor.updateTTL(localTTL);\r
+                               }\r
+\r
+                               if (trg instanceof Network) {\r
+                                       int mtu = ((Network) trg).getMTU();\r
+                                       if (mtu < this.largets_fragment) {\r
+                                               setIcon(this.frag);\r
+\r
+                                               this.largets_fragment = mtu;\r
+\r
+                                               HashMap newFragments = new HashMap();\r
+\r
+                                               Iterator it = this.fragments.keySet().iterator();\r
+                                               Integer size = null;\r
+                                               Integer count = null;\r
+\r
+                                               Integer tmpVal = null;\r
+                                               while (it.hasNext()) {\r
+                                                       size = (Integer) it.next();\r
+                                                       count = (Integer) this.fragments.get(size);\r
+                                                       if (size.intValue() > mtu) {\r
+                                                               int s1 = size.intValue() % mtu;\r
+                                                               int s2 = mtu;\r
+\r
+                                                               int c1 = (size.intValue() % mtu == 0) ? 0\r
+                                                                               : count.intValue();\r
+                                                               int c2 = size.intValue() / mtu\r
+                                                                               * count.intValue();\r
+\r
+                                                               if ((s1 != 0) && (c1 != 0)) {\r
+                                                                       tmpVal = (Integer) newFragments\r
+                                                                                       .get(new Integer(s1));\r
+                                                                       if (tmpVal == null) {\r
+                                                                               newFragments.put(new Integer(s1),\r
+                                                                                               new Integer(c1));\r
+                                                                       } else {\r
+                                                                               newFragments.put(new Integer(s1),\r
+                                                                                               new Integer(c1\r
+                                                                                                               + tmpVal.intValue()));\r
+                                                                       }\r
+                                                               }\r
+\r
+                                                               tmpVal = (Integer) newFragments\r
+                                                                               .get(new Integer(s2));\r
+                                                               if (tmpVal == null) {\r
+                                                                       newFragments.put(new Integer(s2),\r
+                                                                                       new Integer(c2));\r
+                                                               } else\r
+                                                                       newFragments\r
+                                                                                       .put(new Integer(s2), new Integer(\r
+                                                                                                       c2 + tmpVal.intValue()));\r
+                                                       } else {\r
+                                                               tmpVal = (Integer) newFragments.get(size);\r
+                                                               if (tmpVal == null) {\r
+                                                                       newFragments.put(size, count);\r
+                                                               } else {\r
+                                                                       newFragments.put(size, new Integer(count\r
+                                                                                       .intValue()\r
+                                                                                       + tmpVal.intValue()));\r
+                                                               }\r
+                                                       }\r
+                                               }\r
+                                               this.fragments = newFragments;\r
+                                               it = this.fragments.values().iterator();\r
+                                               int acc = 0;\r
+                                               while (it.hasNext()) {\r
+                                                       acc += ((Integer) it.next()).intValue();\r
+                                               }\r
+\r
+                                               setFont(new Font("Tahoma", 1, 15));\r
+                                               setForeground(Color.blue);\r
+                                               setText("   (" + acc + ")");\r
+                                               setSize(getPreferredSize());\r
+\r
+                                               animMonitor.updateMTUs(this.fragments);\r
+                                       }\r
+                               }\r
+                               runAnimation(src, trg, animMonitor);\r
+                       }\r
+               }\r
+\r
+               if (!err) {\r
+                       if (animMonitor.shouldStop) {\r
+                               animMonitor.setError("Simulation stopped due to user request");\r
+                       } else if (this.path.get(this.path.size() - 1) instanceof Network) {\r
+                               animMonitor\r
+                                               .setError("Host can not be reached: check routing tables settings.");\r
+                               err = true;\r
+                       } else if (this.path.get(this.path.size() - 1) instanceof Router) {\r
+                               animMonitor\r
+                                               .setError("Message dropped by router: no matching lines in routing table");\r
+                               err = true;\r
+                       }\r
+\r
+               }\r
+\r
+               animMonitor.hideStopSim();\r
+               animMonitor.setLegend(null, this);\r
+\r
+               JOptionPane.showMessageDialog(board, "Simulation"\r
+                               + ((animMonitor.shouldStop) ? " interrupted" : " completed")\r
+                               + ((err) ? " with errors" : ""), "Message", (err) ? 0 : 1);\r
+\r
+               setText("");\r
+               setIcon(this.main);\r
+               setSize(getPreferredSize());\r
+\r
+               setLocation(origLoc);\r
+               board.repaint();\r
+               board.messagePanel.remove(animMonitor);\r
+\r
+               board.messagePanel.updateUI();\r
+               board.updateUI();\r
+               board.addMouseListener(board.mouseListener);\r
+       }\r
+\r
+       public void runAnimation(Component src, Component trg,\r
+                       AnimationMonitor animMonitor) {\r
+               MainDrawBoard board = MainDrawBoard.staticInstance;\r
+\r
+               boolean overItem = false;\r
+\r
+               int sourceX = src.getX() + src.getWidth() / 2;\r
+               int sourceY = src.getY() + src.getHeight() / 2;\r
+               int targetX = trg.getX() + trg.getWidth() / 2;\r
+               int targetY = trg.getY() + trg.getHeight() / 2;\r
+\r
+               double x = sourceX;\r
+               double y = sourceY;\r
+\r
+               if (targetX != sourceX) {\r
+                       double a = (targetY - sourceY) / (targetX - sourceX);\r
+                       double b = sourceY - a * sourceX;\r
+\r
+                       int sign = (targetX > sourceX) ? 1 : -1;\r
+                       do {\r
+                               do {\r
+                                       x += 1 * sign;\r
+                                       y = (int) (a * x + b);\r
+\r
+                                       Component overComp = board.getComponentAt((int) x, (int) y);\r
+                                       if ((overComp instanceof Router)\r
+                                                       || (overComp instanceof Network)) {\r
+                                               if (!overItem) {\r
+                                                       overItem = true;\r
+                                                       animMonitor.setLegend(overComp, this);\r
+                                                       animMonitor.repaint();\r
+                                               }\r
+\r
+                                       } else if (overItem) {\r
+                                               overItem = false;\r
+                                       }\r
+\r
+                                       setLocation((int) x, (int) y);\r
+                                       board.repaint();\r
+                                       try {\r
+                                               Thread.sleep(30L);\r
+                                       } catch (InterruptedException e) {\r
+                                               e.printStackTrace();\r
+                                       }\r
+                               } while ((sign == 1) && (x <= targetX));\r
+                               if (sign != -1)\r
+                                       return;\r
+                       } while (x >= targetX);\r
+               } else {\r
+                       int sign = (targetY > sourceY) ? 1 : -1;\r
+                       while (((sign == 1) && (y <= targetY))\r
+                                       || ((sign == -1) && (y >= targetY))) {\r
+                               y += 1 * sign;\r
+\r
+                               setLocation((int) x, (int) y);\r
+                               board.repaint();\r
+                               try {\r
+                                       Thread.sleep(40L);\r
+                               } catch (InterruptedException e) {\r
+                                       e.printStackTrace();\r
+                               }\r
+                       }\r
+               }\r
+       }\r
+\r
+       public void run() {\r
+               try {\r
+                       Thread.sleep(500L);\r
+               } catch (InterruptedException e) {\r
+                       e.printStackTrace();\r
+               }\r
+               runAnimation();\r
+       }\r
+}\r
+\r
+/*\r
+ * Location: C:\Users\MT\Desktop\mtutr.jar Qualified Name:\r
+ * mtutr.objects.Datagram JD-Core Version: 0.5.4\r
+ */
\ No newline at end of file
diff --git a/mtutr/objects/Host.java b/mtutr/objects/Host.java
new file mode 100644 (file)
index 0000000..7e97538
--- /dev/null
@@ -0,0 +1,33 @@
+package mtutr.objects;\r
+\r
+import java.awt.Component;\r
+\r
+import javax.swing.JLabel;\r
+\r
+import mtutr.common.IPAddress;\r
+\r
+public class Host extends JLabel implements IPKitItem {\r
+       private static final long serialVersionUID = 1L;\r
+       public Network network = null;\r
+\r
+       public Host(String string, Network net) {\r
+               super(string);\r
+               this.network = net;\r
+       }\r
+\r
+       public IPAddress getIP() {\r
+               return this.network.allocateIP(this);\r
+       }\r
+\r
+       public void dispatchEvent() {\r
+       }\r
+\r
+       public Component getjComponent() {\r
+               return this;\r
+       }\r
+}\r
+\r
+/*\r
+ * Location: C:\Users\MT\Desktop\mtutr.jar Qualified Name: mtutr.objects.Host\r
+ * JD-Core Version: 0.5.4\r
+ */
\ No newline at end of file
diff --git a/mtutr/objects/IPKitItem.java b/mtutr/objects/IPKitItem.java
new file mode 100644 (file)
index 0000000..84bd740
--- /dev/null
@@ -0,0 +1,15 @@
+package mtutr.objects;\r
+\r
+import java.awt.Component;\r
+\r
+public abstract interface IPKitItem\r
+{\r
+  public abstract void dispatchEvent();\r
+\r
+  public abstract Component getjComponent();\r
+}\r
+\r
+/* Location:           C:\Users\MT\Desktop\mtutr.jar\r
+ * Qualified Name:     mtutr.objects.IPKitItem\r
+ * JD-Core Version:    0.5.4\r
+ */
\ No newline at end of file
diff --git a/mtutr/objects/Network.java b/mtutr/objects/Network.java
new file mode 100644 (file)
index 0000000..54a5a1b
--- /dev/null
@@ -0,0 +1,191 @@
+package mtutr.objects;\r
+\r
+import java.awt.Component;\r
+import java.awt.Font;\r
+import java.util.Hashtable;\r
+import java.util.Iterator;\r
+import java.util.LinkedList;\r
+import java.util.List;\r
+import java.util.Map;\r
+\r
+import javax.swing.JLabel;\r
+\r
+import mtutr.MainDrawBoard;\r
+import mtutr.common.IPAddress;\r
+\r
+public class Network extends JLabel implements IPKitItem {\r
+       private static final long serialVersionUID = 1L;\r
+       public List hosts = new LinkedList();\r
+       public List routers = new LinkedList();\r
+       private IPAddress netAddress;\r
+       private int cidr = 0;\r
+       private int mtu = 0;\r
+       private boolean isCIDR = false;\r
+       private boolean isAssigned = false;\r
+       public Router defaultGateway = null;\r
+       private final MainDrawBoard board;\r
+       private final Map dhcp = new Hashtable();\r
+       long nextHostIP = -1L;\r
+\r
+       private IPAddress findNextValidHostIP() {\r
+               long current = this.nextHostIP++;\r
+               IPAddress ipAddr = new IPAddress(0L);\r
+               while (this.nextHostIP != current) {\r
+                       if ((this.nextHostIP == -2147483648L)\r
+                                       || ((this.isCIDR) && (!this.netAddress.isLegalHostWithCIDR(\r
+                                                       this.nextHostIP, this.cidr)))\r
+                                       || ((!this.isCIDR) && (!this.netAddress\r
+                                                       .isLegalHostWithClasses(this.nextHostIP)))) {\r
+                               this.nextHostIP = (this.netAddress.getIPLong() + 1L);\r
+                       } else {\r
+                               ipAddr.setIP(this.nextHostIP);\r
+                               if (this.dhcp.containsValue(ipAddr)) {\r
+                                       this.nextHostIP += 1L;\r
+                               } else\r
+                                       return ipAddr;\r
+                       }\r
+               }\r
+               return null;\r
+       }\r
+\r
+       public IPAddress allocateIP(Object obj) {\r
+               if (!this.dhcp.containsKey(obj)) {\r
+                       IPAddress ip = findNextValidHostIP();\r
+                       if (ip == null) {\r
+                               return null;\r
+                       }\r
+\r
+                       this.dhcp.put(obj, ip);\r
+                       return ip;\r
+               }\r
+\r
+               return (IPAddress) this.dhcp.get(obj);\r
+       }\r
+\r
+       public void deAllocateIP(Object obj) {\r
+               if (this.dhcp.containsKey(obj))\r
+                       this.nextHostIP = (((IPAddress) this.dhcp.remove(obj)).getIPLong() - 1L);\r
+       }\r
+\r
+       public Router getRouter(IPAddress ip) {\r
+               Iterator it = this.routers.iterator();\r
+               Router r = null;\r
+               while (it.hasNext()) {\r
+                       r = (Router) it.next();\r
+                       if (this.dhcp.get(r).equals(ip)) {\r
+                               return r;\r
+                       }\r
+               }\r
+\r
+               return null;\r
+       }\r
+\r
+       public Network(MainDrawBoard theBoard) {\r
+               super("<HTML>&nbsp;&nbsp;&nbsp;&nbsp;Not assigned</HTML>");\r
+               setFont(new Font("Tahoma", 1, 11));\r
+               this.board = theBoard;\r
+       }\r
+\r
+       public void setCIDR_IP(IPAddress newIP, int _cidr) {\r
+               if ((!this.isAssigned) || (this.netAddress == null) || (!this.isCIDR)\r
+                               || (this.cidr != _cidr) || (!newIP.equals(this.netAddress))) {\r
+                       this.netAddress = newIP;\r
+                       this.isAssigned = true;\r
+                       setText("<HTML><br>"\r
+                                       + newIP.getIPStr()\r
+                                       + "<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/"\r
+                                       + _cidr + "</HTML>");\r
+\r
+                       this.isCIDR = true;\r
+                       this.cidr = _cidr;\r
+                       this.dhcp.clear();\r
+                       this.nextHostIP = newIP.getIPLong();\r
+               }\r
+\r
+               MainDrawBoard.staticInstance.repaint();\r
+       }\r
+\r
+       public static String getClassName(int className) {\r
+               switch (className) {\r
+               case 8:\r
+                       return "A";\r
+               case 16:\r
+                       return "B";\r
+               case 24:\r
+                       return "C";\r
+               case 32:\r
+                       return "D";\r
+               }\r
+               return "undefined";\r
+       }\r
+\r
+       public void setCLASS_IP(IPAddress newIP) {\r
+               if ((!this.isAssigned) || (this.netAddress == null) || (this.isCIDR)\r
+                               || (newIP.getIPClass() == this.netAddress.getIPClass())\r
+                               || (!newIP.equals(this.netAddress))) {\r
+                       this.netAddress = newIP;\r
+                       this.isAssigned = true;\r
+                       setText("<HTML><br>"\r
+                                       + newIP.getIPStr()\r
+                                       + "<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;("\r
+                                       + getClassName(this.netAddress.getIPClass())\r
+                                       + ")</body></HTML>");\r
+                       this.isCIDR = false;\r
+                       this.dhcp.clear();\r
+                       this.nextHostIP = newIP.getIPLong();\r
+               }\r
+               MainDrawBoard.staticInstance.repaint();\r
+       }\r
+\r
+       public IPAddress getIP() {\r
+               return this.netAddress;\r
+       }\r
+\r
+       public int getCIDR() {\r
+               return this.cidr;\r
+       }\r
+\r
+       public void setCIDR(Integer theCIDR) {\r
+               this.cidr = theCIDR.intValue();\r
+       }\r
+\r
+       public void setCIDR(int theCIDR) {\r
+               this.cidr = theCIDR;\r
+       }\r
+\r
+       public void dispatchEvent() {\r
+       }\r
+\r
+       public void setMTU(Integer theMTU) {\r
+               this.mtu = theMTU.intValue();\r
+       }\r
+\r
+       public void setMTU(int theMTU) {\r
+               this.mtu = theMTU;\r
+       }\r
+\r
+       public int getMTU() {\r
+               return this.mtu;\r
+       }\r
+\r
+       public boolean getIsCIDR() {\r
+               return this.isCIDR;\r
+       }\r
+\r
+       public boolean isAssigned() {\r
+               return this.isAssigned;\r
+       }\r
+\r
+       public Component getjComponent() {\r
+               return this;\r
+       }\r
+\r
+       public void removeAllConnections() {\r
+               this.board.removeNetworkConnections(this);\r
+       }\r
+}\r
+\r
+/*\r
+ * Location: C:\Users\MT\Desktop\mtutr.jar Qualified Name: mtutr.objects.Network\r
+ * JD-Core Version: 0.5.4\r
+ */
\ No newline at end of file
diff --git a/mtutr/objects/RouteTestResult.java b/mtutr/objects/RouteTestResult.java
new file mode 100644 (file)
index 0000000..bd8ba7b
--- /dev/null
@@ -0,0 +1,30 @@
+package mtutr.objects;\r
+\r
+import mtutr.common.IPAddress;\r
+\r
+public class RouteTestResult implements Comparable {\r
+       public int bits;\r
+       public IPAddress ifc;\r
+       public IPAddress nextHop;\r
+       public Network network;\r
+       public RoutingTableEntry rte;\r
+\r
+       public RouteTestResult(RoutingTableEntry r) {\r
+               this.rte = r;\r
+       }\r
+\r
+       public int compareTo(Object o) {\r
+               if (o instanceof RouteTestResult) {\r
+                       RouteTestResult r = (RouteTestResult) o;\r
+                       return this.bits - r.bits;\r
+               }\r
+\r
+               System.out.print("Invalid object");\r
+               return -1;\r
+       }\r
+}\r
+\r
+/*\r
+ * Location: C:\Users\MT\Desktop\mtutr.jar Qualified Name:\r
+ * mtutr.objects.RouteTestResult JD-Core Version: 0.5.4\r
+ */
\ No newline at end of file
diff --git a/mtutr/objects/Router.java b/mtutr/objects/Router.java
new file mode 100644 (file)
index 0000000..11cc610
--- /dev/null
@@ -0,0 +1,112 @@
+package mtutr.objects;\r
+\r
+import java.awt.Component;\r
+import java.util.Iterator;\r
+import java.util.LinkedList;\r
+import java.util.List;\r
+import java.util.ListIterator;\r
+\r
+import javax.swing.JLabel;\r
+\r
+import mtutr.common.IPAddress;\r
+\r
+public class Router extends JLabel implements IPKitItem {\r
+       private static final long serialVersionUID = 1L;\r
+       public List networks = new LinkedList();\r
+       public RoutingTable routingTable = new RoutingTable(this);\r
+\r
+       public Router(String string) {\r
+               super(string);\r
+       }\r
+\r
+       public IPAddress getIP(Network net) {\r
+               return net.allocateIP(this);\r
+       }\r
+\r
+       public void dispatchEvent() {\r
+       }\r
+\r
+       private Network findNetworkByIP(String a) {\r
+               try {\r
+                       IPAddress ip = new IPAddress(a);\r
+                       Iterator it = this.networks.iterator();\r
+                       while (it.hasNext()) {\r
+                               Network net = null;\r
+                               net = (Network) it.next();\r
+                               if (net.getIP().equals(ip)) {\r
+                                       return net;\r
+                               }\r
+                       }\r
+                       return null;\r
+               } catch (Throwable e) {\r
+               }\r
+               return null;\r
+       }\r
+\r
+       public boolean cleanRoutingTable() {\r
+               if ((this.networks.size() == 0)\r
+                               && (this.routingTable.entries.size() != 0)) {\r
+                       this.routingTable.entries.clear();\r
+                       return true;\r
+               }\r
+\r
+               boolean rtChanged = false;\r
+               Iterator it = this.routingTable.entries.iterator();\r
+               RoutingTableEntry rte = null;\r
+               while (it.hasNext()) {\r
+                       rte = (RoutingTableEntry) it.next();\r
+                       if (findNetworkByIP(rte.ifc) == null) {\r
+                               it.remove();\r
+                               rtChanged = true;\r
+                       }\r
+               }\r
+\r
+               return rtChanged;\r
+       }\r
+\r
+       private boolean cleanRoutingTableByNet(Network net) {\r
+               boolean rtChanged = false;\r
+               IPAddress netIP = net.getIP();\r
+               if (netIP == null) {\r
+                       return false;\r
+               }\r
+               ListIterator it = this.routingTable.entries.listIterator();\r
+               while (it.hasNext()) {\r
+                       RoutingTableEntry rte = (RoutingTableEntry) it.next();\r
+                       if (netIP.equals(rte.ifc)) {\r
+                               it.remove();\r
+                               rtChanged = true;\r
+                       }\r
+               }\r
+               return rtChanged;\r
+       }\r
+\r
+       public boolean detachFromNetwork(Network net) {\r
+               if (this.networks.contains(net)) {\r
+                       this.networks.remove(net);\r
+               }\r
+\r
+               return cleanRoutingTableByNet(net);\r
+       }\r
+\r
+       public Network getNetwork(IPAddress ifc) {\r
+               Iterator it = this.networks.iterator();\r
+\r
+               while (it.hasNext()) {\r
+                       Network network = (Network) it.next();\r
+                       if (network.getIP().equals(ifc)) {\r
+                               return network;\r
+                       }\r
+               }\r
+               return null;\r
+       }\r
+\r
+       public Component getjComponent() {\r
+               return this;\r
+       }\r
+}\r
+\r
+/*\r
+ * Location: C:\Users\MT\Desktop\mtutr.jar Qualified Name: mtutr.objects.Router\r
+ * JD-Core Version: 0.5.4\r
+ */
\ No newline at end of file
diff --git a/mtutr/objects/RoutingTable.java b/mtutr/objects/RoutingTable.java
new file mode 100644 (file)
index 0000000..6aec3b0
--- /dev/null
@@ -0,0 +1,248 @@
+package mtutr.objects;\r
+\r
+import java.util.Collections;\r
+import java.util.Iterator;\r
+import java.util.LinkedList;\r
+import java.util.List;\r
+import java.util.ListIterator;\r
+\r
+import javax.swing.JLabel;\r
+import javax.swing.table.AbstractTableModel;\r
+\r
+import mtutr.common.IPAddress;\r
+\r
+public class RoutingTable extends AbstractTableModel {\r
+       private static final long serialVersionUID = 1L;\r
+       public LinkedList entries = new LinkedList();\r
+       public LinkedList backupDeletedEntries = null;\r
+       boolean val;\r
+       Router router;\r
+       JLabel errMsgContainer;\r
+\r
+       public void addDefaultEntry() {\r
+               RoutingTableEntry rte = new RoutingTableEntry();\r
+               rte.net = "0.0.0.0";\r
+               rte.cidr = "0";\r
+               this.entries.add(rte);\r
+               fireTableRowsInserted(1, 1);\r
+       }\r
+\r
+       public void addEntriesForInterface() {\r
+               Iterator it = this.router.networks.iterator();\r
+               Network net = null;\r
+               RoutingTableEntry rte = null;\r
+               while (it.hasNext()) {\r
+                       net = (Network) it.next();\r
+                       rte = new RoutingTableEntry();\r
+                       rte.net = net.getIP().toString();\r
+                       if (net.getIsCIDR()) {\r
+                               rte.cidr = Integer.toString(net.getCIDR());\r
+                       } else {\r
+                               rte.cidr = Integer.toString(net.getIP().getIPClass());\r
+                       }\r
+                       rte.gateway = this.router.getIP(net).toString();\r
+                       rte.ifc = net.getIP().toString();\r
+                       this.entries.add(rte);\r
+               }\r
+\r
+               if (this.router.networks.size() != 0)\r
+                       fireTableRowsInserted(1, this.router.networks.size());\r
+       }\r
+\r
+       public void clear() {\r
+               if (this.backupDeletedEntries == null) {\r
+                       this.backupDeletedEntries = this.entries;\r
+               }\r
+               this.entries = new LinkedList();\r
+               fireTableRowsDeleted(0, 0);\r
+       }\r
+\r
+       public void openedInEditor(JLabel comp) {\r
+               this.errMsgContainer = comp;\r
+               backupBeforeEdit();\r
+       }\r
+\r
+       public void backupBeforeEdit() {\r
+               Iterator it = this.entries.iterator();\r
+               RoutingTableEntry rte = null;\r
+               while (it.hasNext()) {\r
+                       rte = (RoutingTableEntry) it.next();\r
+                       rte.backup();\r
+               }\r
+       }\r
+\r
+       public void rollbackAfterChange() {\r
+               if (this.backupDeletedEntries != null) {\r
+                       this.entries = this.backupDeletedEntries;\r
+                       this.backupDeletedEntries = null;\r
+               }\r
+               ListIterator it = this.entries.listIterator();\r
+               RoutingTableEntry rte = null;\r
+               while (it.hasNext()) {\r
+                       rte = (RoutingTableEntry) it.next();\r
+                       if (rte.isNew) {\r
+                               it.remove();\r
+                       } else\r
+                               rte.rollback();\r
+               }\r
+       }\r
+\r
+       public void commitData() {\r
+               this.backupDeletedEntries = null;\r
+               Iterator it = this.entries.iterator();\r
+               while (it.hasNext())\r
+                       ((RoutingTableEntry) it.next()).isNew = false;\r
+       }\r
+\r
+       public RoutingTable(Router r) {\r
+               this.router = r;\r
+       }\r
+\r
+       public int getColumnCount() {\r
+               return 5;\r
+       }\r
+\r
+       public int getRowCount() {\r
+               return this.entries.size();\r
+       }\r
+\r
+       public Object getValueAt(int row, int col) {\r
+               switch (col) {\r
+               case 0:\r
+                       return ((RoutingTableEntry) this.entries.get(row)).net;\r
+               case 1:\r
+                       return ((RoutingTableEntry) this.entries.get(row)).cidr;\r
+               case 2:\r
+                       return ((RoutingTableEntry) this.entries.get(row)).gateway;\r
+               case 3:\r
+                       return ((RoutingTableEntry) this.entries.get(row)).ifc;\r
+               case 4:\r
+                       return "Remove";\r
+               }\r
+               return null;\r
+       }\r
+\r
+       @Override\r
+       public Class getColumnClass(int c) {\r
+               return getValueAt(0, c).getClass();\r
+       }\r
+\r
+       @Override\r
+       public boolean isCellEditable(int row, int col) {\r
+               return true;\r
+       }\r
+\r
+       @Override\r
+       public void setValueAt(Object value, int row, int col) {\r
+               if (value == null) {\r
+                       return;\r
+               }\r
+\r
+               switch (col) {\r
+               case 0:\r
+                       ((RoutingTableEntry) this.entries.get(row)).net = ((String) value);\r
+                       break;\r
+               case 1:\r
+                       ((RoutingTableEntry) this.entries.get(row)).cidr = ((String) value);\r
+                       break;\r
+               case 2:\r
+                       ((RoutingTableEntry) this.entries.get(row)).gateway = ((String) value);\r
+                       break;\r
+               case 3:\r
+                       ((RoutingTableEntry) this.entries.get(row)).ifc = ((String) value);\r
+               case 4:\r
+               }\r
+       }\r
+\r
+       public void addRow() {\r
+               this.entries.add(new RoutingTableEntry());\r
+               fireTableRowsInserted(1, 1);\r
+       }\r
+\r
+       public void selectionChanged(int from, int to) {\r
+               if (this.entries.size() == 0) {\r
+                       return;\r
+               }\r
+\r
+               RoutingTableEntry entry = (RoutingTableEntry) this.entries.get(from);\r
+               boolean cidrError = false;\r
+               try {\r
+                       Integer.parseInt(entry.cidr);\r
+               } catch (Throwable e) {\r
+                       if (!IPAddress.isValidAddress(entry.cidr)) {\r
+                               cidrError = true;\r
+                       }\r
+               }\r
+\r
+               if ((entry.net.equals("")) || (!IPAddress.isValidAddress(entry.net))) {\r
+                       this.errMsgContainer.setText("Invalid network entry in row "\r
+                                       + (from + 1));\r
+               } else if ((entry.cidr.equals("")) || (cidrError)) {\r
+                       this.errMsgContainer.setText("Invalid netmask entry in row "\r
+                                       + (from + 1));\r
+               } else if ((entry.ifc.equals(""))\r
+                               || (!IPAddress.isValidAddress(entry.ifc))) {\r
+                       this.errMsgContainer.setText("Invalid interface entry in row "\r
+                                       + (from + 1));\r
+               } else if ((entry.gateway.equals(""))\r
+                               || (!IPAddress.isValidAddress(entry.gateway)))\r
+                       this.errMsgContainer.setText("Invalid gateway entry in row "\r
+                                       + (from + 1));\r
+       }\r
+\r
+       public String validateData() {\r
+               StringBuffer msg = new StringBuffer();\r
+               int pos = 0;\r
+               Iterator it = this.entries.iterator();\r
+               while (it.hasNext()) {\r
+                       if (!((RoutingTableEntry) it.next()).isValid()) {\r
+                               msg.append("Invalid syntax in line ");\r
+                               msg.append(pos + 1);\r
+                               msg.append("\n");\r
+                       }\r
+                       ++pos;\r
+               }\r
+\r
+               return (msg.length() == 0) ? null : msg.toString();\r
+       }\r
+\r
+       public RouteTestResult findMatch(IPAddress ip) {\r
+               List results = new LinkedList();\r
+               Iterator it = this.entries.iterator();\r
+               RoutingTableEntry rte = null;\r
+               RouteTestResult rtr = null;\r
+               while (it.hasNext()) {\r
+                       rte = (RoutingTableEntry) it.next();\r
+                       rtr = rte.findMatch(ip);\r
+                       if (rtr != null) {\r
+                               results.add(rtr);\r
+                       }\r
+               }\r
+\r
+               if (results.size() == 0) {\r
+                       return null;\r
+               }\r
+\r
+               Collections.sort(results);\r
+               rtr = (RouteTestResult) results.get(results.size() - 1);\r
+               rtr.network = this.router.getNetwork(rtr.ifc);\r
+               if (rtr.network == null) {\r
+                       return null;\r
+               }\r
+               return rtr;\r
+       }\r
+\r
+       public void deleteRow(int row) {\r
+               if (this.entries.size() > row) {\r
+                       if (this.backupDeletedEntries == null) {\r
+                               this.backupDeletedEntries = new LinkedList(this.entries);\r
+                       }\r
+                       this.entries.remove(row);\r
+               }\r
+       }\r
+}\r
+\r
+/*\r
+ * Location: C:\Users\MT\Desktop\mtutr.jar Qualified Name:\r
+ * mtutr.objects.RoutingTable JD-Core Version: 0.5.4\r
+ */
\ No newline at end of file
diff --git a/mtutr/objects/RoutingTableEntry.java b/mtutr/objects/RoutingTableEntry.java
new file mode 100644 (file)
index 0000000..087fefa
--- /dev/null
@@ -0,0 +1,109 @@
+package mtutr.objects;\r
+\r
+import mtutr.common.IPAddress;\r
+\r
+public class RoutingTableEntry {\r
+       public String net = "";\r
+       public String ifc = "";\r
+       public String gateway = "";\r
+       public String cidr = "";\r
+\r
+       public String net_backup = "";\r
+       public String ifc_backup = "";\r
+       public String gateway_backup = "";\r
+       public String cidr_backup = "";\r
+\r
+       public boolean isNew = true;\r
+\r
+       public boolean isValid() {\r
+               try {\r
+                       Integer.parseInt(this.cidr);\r
+               } catch (Throwable e) {\r
+                       if (!IPAddress.isValidAddress(this.cidr)) {\r
+                               return false;\r
+                       }\r
+\r
+               }\r
+\r
+               return (IPAddress.isValidAddress(this.net))\r
+                               && (IPAddress.isValidAddress(this.ifc))\r
+                               && (IPAddress.isValidAddress(this.gateway));\r
+       }\r
+\r
+       public void backup() {\r
+               this.net_backup = this.net;\r
+               this.ifc_backup = this.ifc;\r
+               this.gateway_backup = this.gateway;\r
+               this.cidr_backup = this.cidr;\r
+       }\r
+\r
+       public void rollback() {\r
+               this.net = this.net_backup;\r
+               this.ifc = this.ifc_backup;\r
+               this.gateway = this.gateway_backup;\r
+               this.cidr = this.cidr_backup;\r
+       }\r
+\r
+       public void commit() {\r
+               this.isNew = false;\r
+       }\r
+\r
+       public RouteTestResult findMatch(IPAddress ip) {\r
+               IPAddress netIP = null;\r
+               try {\r
+                       netIP = new IPAddress(this.net);\r
+               } catch (Throwable e) {\r
+                       return null;\r
+               }\r
+\r
+               int intCIDR = -1;\r
+               boolean cont = false;\r
+               try {\r
+                       intCIDR = Integer.parseInt(this.cidr);\r
+                       if (ip.getNetworkIPByCIDR(intCIDR).equals(netIP))\r
+                               cont = true;\r
+               } catch (Throwable e) {\r
+                       long netmask = -1L;\r
+                       try {\r
+                               netmask = new IPAddress(this.cidr).getIPLong();\r
+                       } catch (Throwable ee) {\r
+                               return null;\r
+                       }\r
+\r
+                       if (new IPAddress(ip.getIPLong() & netmask).equals(netIP)) {\r
+                               cont = true;\r
+                               try {\r
+                                       intCIDR = new IPAddress(this.cidr).getMinimalMask();\r
+                               } catch (Throwable ee) {\r
+                                       return null;\r
+                               }\r
+                       }\r
+\r
+               }\r
+\r
+               if (cont) {\r
+                       RouteTestResult rtr = new RouteTestResult(this);\r
+                       try {\r
+                               rtr.ifc = new IPAddress(this.ifc);\r
+                               rtr.nextHop = new IPAddress(this.gateway);\r
+                       } catch (Throwable e) {\r
+                               return null;\r
+                       }\r
+                       rtr.bits = intCIDR;\r
+                       return rtr;\r
+               }\r
+\r
+               return null;\r
+       }\r
+\r
+       @Override\r
+       public String toString() {\r
+               return this.net + " / " + this.cidr + " / " + this.gateway + " / "\r
+                               + this.net;\r
+       }\r
+}\r
+\r
+/*\r
+ * Location: C:\Users\MT\Desktop\mtutr.jar Qualified Name:\r
+ * mtutr.objects.RoutingTableEntry JD-Core Version: 0.5.4\r
+ */
\ No newline at end of file
diff --git a/mtutr/windows/.p4ignore b/mtutr/windows/.p4ignore
new file mode 100644 (file)
index 0000000..7a88f71
--- /dev/null
@@ -0,0 +1,5 @@
+DatagramProperties.java
+IPInputVerifier.java
+JExtendedTable.java
+NetworkProperties.java
+RouterProperties.java
diff --git a/mtutr/windows/ChooseDefaultGateway.java b/mtutr/windows/ChooseDefaultGateway.java
new file mode 100644 (file)
index 0000000..af40610
--- /dev/null
@@ -0,0 +1,76 @@
+/*    */ package mtutr.windows;\r
+/*    */ \r
+/*    */ /*    */ import java.awt.event.ActionEvent;\r
+/*    */ import java.awt.event.ActionListener;\r
+/*    */ import java.util.Iterator;\r
+/*    */ import java.util.List;\r
+import javax.swing.JOptionPane;\r
+\r
+import mtutr.common.IPAddress;\r
+import mtutr.objects.Network;\r
+import mtutr.objects.Router;\r
+/*    */ \r
+/*    */ public class ChooseDefaultGateway\r
+/*    */   implements ActionListener\r
+/*    */ {\r
+/*    */   public ChooseDefaultGateway(Network net, Router r)\r
+/*    */   {\r
+/* 18 */     if (net.routers.size() == 2)\r
+/*    */     {\r
+/* 20 */       if (r.equals(net.routers.get(0)))\r
+/* 21 */         net.defaultGateway = ((Router)net.routers.get(1));\r
+/*    */       else {\r
+/* 23 */         net.defaultGateway = ((Router)net.routers.get(0));\r
+/*    */       }\r
+/*    */     }\r
+/* 26 */     else if (net.routers.size() > 1)\r
+/*    */     {\r
+/* 28 */       String[] box = new String[net.routers.size() - 1];\r
+/*    */ \r
+/* 30 */       Iterator it = net.routers.iterator();\r
+/* 31 */       int i = 0;\r
+/* 32 */       while (it.hasNext()) {\r
+/* 33 */         Router router = (Router)it.next();\r
+/* 34 */         if (!router.equals(r)) {\r
+/* 35 */           box[i] = router.getIP(net).getIPStr();\r
+/* 36 */           ++i;\r
+/*    */         }\r
+/*    */ \r
+/*    */       }\r
+/*    */ \r
+/* 41 */       String st = (String)JOptionPane.showInputDialog(null, \r
+/* 42 */         "<HTML>The Router you are removing is a default gateway for<BR>network " + \r
+/* 43 */         net.getIP().getIPStr() + ".<BR><BR>" + \r
+/* 44 */         "Please choose an alternative default gateway for the network:</HTML>", \r
+/* 45 */         "Default Gateway Removal", 3, null, box, box[0]);\r
+/*    */ \r
+/* 47 */       i = 0;\r
+/* 48 */       it = net.routers.iterator();\r
+/* 49 */       while (it.hasNext()) {\r
+/* 50 */         Router router = (Router)it.next();\r
+/* 51 */         if (router.getIP(net).getIPStr().equals(st)) {\r
+/* 52 */           net.defaultGateway = router;\r
+/* 53 */           return;\r
+/*    */         }\r
+/*    */       }\r
+/*    */ \r
+/*    */     }\r
+/*    */     else\r
+/*    */     {\r
+/* 60 */       JOptionPane.showMessageDialog(null, \r
+/* 61 */         "<HTML>Attention: You have just removed the default gateway of<BR>network " + \r
+/* 62 */         net.getIP().getIPStr() + ".<BR><BR>" + \r
+/* 63 */         "Notice that the network now has no default gateway.</HTML>", \r
+/* 64 */         "Default Gateway Removal", 1, null);\r
+/*    */     }\r
+/*    */   }\r
+/*    */ \r
+/*    */   public void actionPerformed(ActionEvent e)\r
+/*    */   {\r
+/*    */   }\r
+/*    */ }\r
+\r
+/* Location:           C:\Users\MT\Desktop\mtutr.jar\r
+ * Qualified Name:     mtutr.windows.ChooseDefaultGateway\r
+ * JD-Core Version:    0.5.4\r
+ */
\ No newline at end of file
diff --git a/mtutr/windows/DatagramProperties.java b/mtutr/windows/DatagramProperties.java
new file mode 100644 (file)
index 0000000..b29eacb
--- /dev/null
@@ -0,0 +1,101 @@
+/*    */ package mtutr.windows;\r
+/*    */ \r
+/*    */ /*    */ import java.awt.Container;\r
+/*    */ import java.awt.Dimension;\r
+/*    */ import java.awt.GridLayout;\r
+/*    */ import java.awt.event.ActionEvent;\r
+/*    */ import java.awt.event.ActionListener;\r
+/*    */ import javax.swing.JButton;\r
+/*    */ import javax.swing.JFrame;\r
+/*    */ import javax.swing.JLabel;\r
+/*    */ import javax.swing.JPanel;\r
+/*    */ import javax.swing.JSpinner;\r
+import javax.swing.SpinnerNumberModel;\r
+\r
+import mtutr.common.IPAddress;\r
+import mtutr.objects.Datagram;\r
+import mtutr.objects.Host;\r
+/*    */ \r
+/*    */ public class DatagramProperties extends JFrame\r
+/*    */   implements ActionListener\r
+/*    */ {\r
+/*    */   private static final long serialVersionUID = 1L;\r
+/*    */   private Datagram datagram;\r
+/*    */   private JSpinner ttl;\r
+/*    */   private JSpinner length;\r
+/*    */ \r
+/*    */   public DatagramProperties(Datagram thedatagram)\r
+/*    */   {\r
+/* 29 */     this.datagram = thedatagram;\r
+/*    */ \r
+/* 31 */     setTitle("Datagram Properties");\r
+/* 32 */     Container c = getContentPane();\r
+/* 33 */     c.setLayout(new GridLayout(0, 1));\r
+/* 34 */     setSize(new Dimension(250, 200));\r
+/* 35 */     setResizable(false);\r
+/*    */ \r
+/* 37 */     JPanel sourcePanel = new JPanel();\r
+/* 38 */     c.add(sourcePanel);\r
+/* 39 */     String s = (this.datagram.getSource() == null) ? "Not Assigned" : this.datagram.getSource().getIP().getIPStr();\r
+/* 40 */     sourcePanel.add(new JLabel("Source Host:   " + s));\r
+/*    */ \r
+/* 42 */     JPanel targetPanel = new JPanel();\r
+/* 43 */     c.add(targetPanel);\r
+/* 44 */     s = (this.datagram.getTarget() == null) ? "Not Assigned" : this.datagram.getTarget().getIP().getIPStr();\r
+/* 45 */     targetPanel.add(new JLabel("Target Host:   " + s));\r
+/*    */ \r
+/* 47 */     JPanel lengthPanel = new JPanel();\r
+/* 48 */     c.add(lengthPanel);\r
+/* 49 */     lengthPanel.add(new JLabel("Length: "));\r
+/* 50 */     this.length = new JSpinner(new SpinnerNumberModel(this.datagram.getLength(), 1, 2147483647, 1));\r
+/* 51 */     this.length.setPreferredSize(new Dimension(80, 20));\r
+/* 52 */     lengthPanel.add(this.length);\r
+/*    */ \r
+/* 54 */     JPanel ttlPanel = new JPanel();\r
+/* 55 */     c.add(ttlPanel);\r
+/* 56 */     ttlPanel.add(new JLabel("TTL: "));\r
+/* 57 */     this.ttl = new JSpinner(new SpinnerNumberModel(this.datagram.getTTL(), 1, 2147483647, 1));\r
+/* 58 */     this.ttl.setPreferredSize(new Dimension(50, 20));\r
+/* 59 */     ttlPanel.add(this.ttl);\r
+/*    */ \r
+/* 61 */     JPanel buttons = new JPanel();\r
+/* 62 */     JButton ok = new JButton("OK");\r
+/* 63 */     ok.addActionListener(this);\r
+/* 64 */     buttons.add(ok);\r
+/* 65 */     JButton cancel = new JButton("Cancel");\r
+/* 66 */     cancel.addActionListener(this);\r
+/* 67 */     buttons.add(cancel);\r
+/*    */ \r
+/* 69 */     c.add(buttons);\r
+/* 70 */     show();\r
+/*    */   }\r
+/*    */ \r
+/*    */   public void actionPerformed(ActionEvent e)\r
+/*    */   {\r
+/* 75 */     if (e.getActionCommand().equals("OK"))\r
+/*    */     {\r
+/* 77 */       okPressed();\r
+/*    */     }\r
+/*    */     else\r
+/*    */     {\r
+/* 81 */       cancelPressed();\r
+/*    */     }\r
+/*    */   }\r
+/*    */ \r
+/*    */   public void okPressed()\r
+/*    */   {\r
+/* 87 */     this.datagram.setTTL(((Integer)this.ttl.getValue()).intValue());\r
+/* 88 */     this.datagram.setLength(((Integer)this.length.getValue()).intValue());\r
+/* 89 */     dispose();\r
+/*    */   }\r
+/*    */ \r
+/*    */   public void cancelPressed()\r
+/*    */   {\r
+/* 94 */     dispose();\r
+/*    */   }\r
+/*    */ }\r
+\r
+/* Location:           C:\Users\MT\Desktop\mtutr.jar\r
+ * Qualified Name:     mtutr.windows.DatagramProperties\r
+ * JD-Core Version:    0.5.4\r
+ */
\ No newline at end of file
diff --git a/mtutr/windows/IPInputVerifier.java b/mtutr/windows/IPInputVerifier.java
new file mode 100644 (file)
index 0000000..c320b6e
--- /dev/null
@@ -0,0 +1,27 @@
+/*    */ package mtutr.windows;\r
+/*    */ \r
+/*    */ import javax.swing.InputVerifier;\r
+/*    */ import javax.swing.JComponent;\r
+/*    */ import javax.swing.JTextField;\r
+/*    */ \r
+/*    */ public class IPInputVerifier extends InputVerifier\r
+/*    */ {\r
+/*    */   public boolean verify(JComponent comp)\r
+/*    */   {\r
+/* 10 */     JTextField field = (JTextField)comp;\r
+/* 11 */     String strValue = field.getText();\r
+/*    */     try\r
+/*    */     {\r
+/* 14 */       int value = Integer.parseInt(strValue);\r
+/*    */ \r
+/* 16 */       return (value >= 0) && (value <= 255);\r
+/*    */     } catch (NumberFormatException e) {\r
+/*    */     }\r
+/* 19 */     return false;\r
+/*    */   }\r
+/*    */ }\r
+\r
+/* Location:           C:\Users\MT\Desktop\mtutr.jar\r
+ * Qualified Name:     mtutr.windows.IPInputVerifier\r
+ * JD-Core Version:    0.5.4\r
+ */
\ No newline at end of file
diff --git a/mtutr/windows/JExtendedTable.java b/mtutr/windows/JExtendedTable.java
new file mode 100644 (file)
index 0000000..5463b9e
--- /dev/null
@@ -0,0 +1,41 @@
+/*    */ package mtutr.windows;\r
+/*    */ \r
+/*    */ /*    */ import javax.swing.JTable;\r
+import javax.swing.event.ListSelectionEvent;\r
+\r
+import mtutr.objects.RoutingTable;\r
+/*    */ \r
+/*    */ public class JExtendedTable extends JTable\r
+/*    */ {\r
+/*    */   private static final long serialVersionUID = 1L;\r
+/*    */   private RoutingTable routingTable;\r
+/*    */ \r
+/*    */   public JExtendedTable(RoutingTable theRoutingTable)\r
+/*    */   {\r
+/* 13 */     super(theRoutingTable);\r
+/* 14 */     this.routingTable = theRoutingTable;\r
+/*    */   }\r
+/*    */ \r
+/*    */   public void valueChanged(ListSelectionEvent e) {\r
+/* 18 */     super.valueChanged(e);\r
+/* 19 */     if (e.getFirstIndex() == e.getLastIndex())\r
+/* 20 */       return;\r
+/*    */     int trg;\r
+/*    */     int src;\r
+/* 24 */     if (e.getFirstIndex() == getSelectedRow()) {\r
+/* 25 */       src = e.getLastIndex();\r
+/* 26 */       trg = e.getFirstIndex();\r
+/*    */     }\r
+/*    */     else {\r
+/* 29 */       trg = e.getLastIndex();\r
+/* 30 */       src = e.getFirstIndex();\r
+/*    */     }\r
+/*    */ \r
+/* 33 */     this.routingTable.selectionChanged(src, trg);\r
+/*    */   }\r
+/*    */ }\r
+\r
+/* Location:           C:\Users\MT\Desktop\mtutr.jar\r
+ * Qualified Name:     mtutr.windows.JExtendedTable\r
+ * JD-Core Version:    0.5.4\r
+ */
\ No newline at end of file
diff --git a/mtutr/windows/NetworkProperties.java b/mtutr/windows/NetworkProperties.java
new file mode 100644 (file)
index 0000000..3bd5a35
--- /dev/null
@@ -0,0 +1,351 @@
+/*     */ package mtutr.windows;\r
+/*     */ \r
+/*     */ /*     */ import java.awt.Container;\r
+/*     */ import java.awt.Dimension;\r
+/*     */ import java.awt.GridLayout;\r
+/*     */ import java.awt.event.ActionEvent;\r
+/*     */ import java.awt.event.ActionListener;\r
+/*     */ import java.util.Iterator;\r
+/*     */ import java.util.List;\r
+/*     */ import javax.swing.ButtonGroup;\r
+/*     */ import javax.swing.JButton;\r
+/*     */ import javax.swing.JFrame;\r
+/*     */ import javax.swing.JLabel;\r
+/*     */ import javax.swing.JOptionPane;\r
+/*     */ import javax.swing.JPanel;\r
+/*     */ import javax.swing.JRadioButton;\r
+/*     */ import javax.swing.JSpinner;\r
+/*     */ import javax.swing.SpinnerNumberModel;\r
+/*     */ import javax.swing.event.ChangeEvent;\r
+import javax.swing.event.ChangeListener;\r
+\r
+import mtutr.MainDrawBoard;\r
+import mtutr.common.IPAddress;\r
+import mtutr.objects.Network;\r
+/*     */ \r
+/*     */ public class NetworkProperties extends JFrame\r
+/*     */   implements ActionListener\r
+/*     */ {\r
+/*     */   private static final long serialVersionUID = 1L;\r
+/*  30 */   private JSpinner mask = null;\r
+/*  31 */   private SpinnerNumberModel maskModel = null;\r
+/*  32 */   private JLabel slash = null;\r
+/*  33 */   private JSpinner ip1 = null;\r
+/*  34 */   private JSpinner ip2 = null;\r
+/*  35 */   private JSpinner ip3 = null;\r
+/*  36 */   private JSpinner ip4 = null;\r
+/*  37 */   private ButtonGroup group = null;\r
+/*  38 */   private JRadioButton _CIDR = null;\r
+/*  39 */   private JRadioButton _class = null;\r
+/*  40 */   private JSpinner MTU = null;\r
+/*  41 */   private JLabel bin = null;\r
+/*     */   private Network network;\r
+/*     */ \r
+/*     */   public NetworkProperties(Network theNetwork)\r
+/*     */   {\r
+/*  46 */     this.network = theNetwork;\r
+/*     */ \r
+/*  48 */     setTitle("Network Properties");\r
+/*  49 */     Container c = getContentPane();\r
+/*  50 */     c.setLayout(new GridLayout(0, 1));\r
+/*  51 */     setSize(new Dimension(450, 200));\r
+/*  52 */     setResizable(false);\r
+/*     */ \r
+/*  54 */     JPanel addressing_panel = new JPanel();\r
+/*  55 */     c.add(addressing_panel);\r
+/*     */ \r
+/*  57 */     JLabel addressing = new JLabel("Addressing Type: ");\r
+/*  58 */     addressing_panel.add(addressing);\r
+/*  59 */     this._class = new JRadioButton("Class Based", true);\r
+/*  60 */     addressing_panel.add(this._class);\r
+/*  61 */     this._class.addActionListener(new ActionListener()\r
+/*     */     {\r
+/*     */       public void actionPerformed(ActionEvent e) {\r
+/*  64 */         if (NetworkProperties.this.mask != null)\r
+/*     */         {\r
+/*  66 */           NetworkProperties.this.mask.setEnabled(false);\r
+/*     */         }\r
+/*  68 */         if (NetworkProperties.this.slash == null)\r
+/*     */           return;\r
+/*  70 */         NetworkProperties.this.slash.setEnabled(false);\r
+/*     */       }\r
+/*     */     });\r
+/*  74 */     this._CIDR = new JRadioButton("CIDR Based");\r
+/*  75 */     addressing_panel.add(this._CIDR);\r
+/*  76 */     this._CIDR.addActionListener(new ActionListener()\r
+/*     */     {\r
+/*     */       public void actionPerformed(ActionEvent e) {\r
+/*  79 */         if (NetworkProperties.this.mask != null)\r
+/*     */         {\r
+/*  81 */           NetworkProperties.this.mask.setEnabled(true);\r
+/*     */         }\r
+/*  83 */         if (NetworkProperties.this.slash == null)\r
+/*     */           return;\r
+/*  85 */         NetworkProperties.this.slash.setEnabled(true);\r
+/*     */       }\r
+/*     */     });\r
+/*  89 */     this.group = new ButtonGroup();\r
+/*  90 */     this.group.add(this._CIDR);\r
+/*  91 */     this.group.add(this._class);\r
+/*     */ \r
+/*  93 */     JPanel IPPanel = new JPanel();\r
+/*  94 */     c.add(IPPanel);\r
+/*  95 */     IPPanel.add(new JLabel("Network IP Address:"));\r
+/*  96 */     this.ip1 = new JSpinner(new SpinnerNumberModel(1, 1, 255, 1));\r
+/*  97 */     this.ip1.setPreferredSize(new Dimension(40, 20));\r
+/*  98 */     this.ip2 = new JSpinner(new SpinnerNumberModel(0, 0, 255, 1));\r
+/*  99 */     this.ip2.setPreferredSize(new Dimension(40, 20));\r
+/* 100 */     this.ip3 = new JSpinner(new SpinnerNumberModel(0, 0, 255, 1));\r
+/* 101 */     this.ip3.setPreferredSize(new Dimension(40, 20));\r
+/* 102 */     this.ip4 = new JSpinner(new SpinnerNumberModel(0, 0, 255, 1));\r
+/* 103 */     this.ip4.setPreferredSize(new Dimension(40, 20));\r
+/*     */ \r
+/* 105 */     this.ip1.addChangeListener(new ChangeListener() {\r
+/*     */       public void stateChanged(ChangeEvent e) {\r
+/* 107 */         NetworkProperties.this.updateMaskSpinner();\r
+/*     */       }\r
+/*     */     });\r
+/* 111 */     this.ip2.addChangeListener(new ChangeListener() {\r
+/*     */       public void stateChanged(ChangeEvent e) {\r
+/* 113 */         NetworkProperties.this.updateMaskSpinner();\r
+/*     */       }\r
+/*     */     });\r
+/* 117 */     this.ip3.addChangeListener(new ChangeListener() {\r
+/*     */       public void stateChanged(ChangeEvent e) {\r
+/* 119 */         NetworkProperties.this.updateMaskSpinner();\r
+/*     */       }\r
+/*     */     });\r
+/* 123 */     this.ip4.addChangeListener(new ChangeListener() {\r
+/*     */       public void stateChanged(ChangeEvent e) {\r
+/* 125 */         NetworkProperties.this.updateMaskSpinner();\r
+/*     */       }\r
+/*     */     });\r
+/* 130 */     IPPanel.add(this.ip1);\r
+/* 131 */     IPPanel.add(new JLabel("."));\r
+/* 132 */     IPPanel.add(this.ip2);\r
+/* 133 */     IPPanel.add(new JLabel("."));\r
+/* 134 */     IPPanel.add(this.ip3);\r
+/* 135 */     IPPanel.add(new JLabel("."));\r
+/* 136 */     IPPanel.add(this.ip4);\r
+/* 137 */     this.slash = new JLabel("/");\r
+/* 138 */     this.slash.setEnabled(false);\r
+/* 139 */     this.maskModel = new SpinnerNumberModel(1, 1, 31, 1);\r
+/* 140 */     this.mask = new JSpinner(this.maskModel);\r
+/* 141 */     this.mask.setPreferredSize(new Dimension(40, 20));\r
+/* 142 */     this.mask.setEnabled(false);\r
+/* 143 */     IPPanel.add(this.slash);\r
+/* 144 */     IPPanel.add(this.mask);\r
+/*     */ \r
+/* 146 */     JPanel binPresentation = new JPanel();\r
+/* 147 */     this.bin = new JLabel("Binary Representation: 00000001.00000000.00000000.00000000");\r
+/* 148 */     binPresentation.add(this.bin);\r
+/* 149 */     c.add(binPresentation);\r
+/*     */ \r
+/* 151 */     JPanel MTUPanel = new JPanel();\r
+/* 152 */     MTUPanel.add(new JLabel("MTU: "));\r
+/* 153 */     this.MTU = new JSpinner(new SpinnerNumberModel(500, 1, 2147483647, 1));\r
+/* 154 */     this.MTU.setPreferredSize(new Dimension(70, 20));\r
+/* 155 */     MTUPanel.add(this.MTU);\r
+/* 156 */     c.add(MTUPanel);\r
+/*     */ \r
+/* 158 */     JPanel buttons = new JPanel();\r
+/* 159 */     JButton ok = new JButton("OK");\r
+/* 160 */     ok.addActionListener(this);\r
+/* 161 */     buttons.add(ok);\r
+/* 162 */     JButton cancel = new JButton("Cancel");\r
+/* 163 */     cancel.addActionListener(this);\r
+/* 164 */     buttons.add(cancel);\r
+/*     */ \r
+/* 166 */     c.add(buttons);\r
+/*     */ \r
+/* 168 */     if (this.network.isAssigned()) {\r
+/* 169 */       IPAddress netIP = this.network.getIP();\r
+/* 170 */       this.ip1.setValue(netIP.getIPByteInt(3));\r
+/* 171 */       this.ip2.setValue(netIP.getIPByteInt(2));\r
+/* 172 */       this.ip3.setValue(netIP.getIPByteInt(1));\r
+/* 173 */       this.ip4.setValue(netIP.getIPByteInt(0));\r
+/*     */ \r
+/* 175 */       this.MTU.setValue(new Integer(this.network.getMTU()));\r
+/* 176 */       if (this.network.getIsCIDR()) {\r
+/* 177 */         this._CIDR.setSelected(true);\r
+/* 178 */         this.mask.setValue(new Integer(this.network.getCIDR()));\r
+/* 179 */         this.mask.setEnabled(true);\r
+/*     */       }\r
+/*     */     }\r
+/*     */   }\r
+/*     */ \r
+/*     */   public void updateMaskSpinner() {\r
+/* 185 */     IPAddress ip = new IPAddress(0L);\r
+/* 186 */     ip.setIP(\r
+/* 187 */       (Integer)this.ip1.getValue(), \r
+/* 188 */       (Integer)this.ip2.getValue(), \r
+/* 189 */       (Integer)this.ip3.getValue(), \r
+/* 190 */       (Integer)this.ip4.getValue());\r
+/*     */ \r
+/* 192 */     int minimalMask = ip.getMinimalMask();\r
+/* 193 */     if (minimalMask == 32) {\r
+/* 194 */       minimalMask = 31;\r
+/*     */     }\r
+/*     */ \r
+/* 197 */     this.maskModel.setMinimum(new Integer(minimalMask));\r
+/* 198 */     if (((Integer)this.maskModel.getValue()).intValue() < minimalMask) {\r
+/* 199 */       this.maskModel.setValue(new Integer(minimalMask));\r
+/*     */     }\r
+/*     */ \r
+/* 202 */     this.bin.setText("Binary Representation: " + ip.getBinStrIP());\r
+/*     */   }\r
+/*     */ \r
+/*     */   public void actionPerformed(ActionEvent e)\r
+/*     */   {\r
+/* 207 */     if (e.getActionCommand().equals("OK"))\r
+/*     */     {\r
+/* 209 */       okPressed();\r
+/*     */     }\r
+/*     */     else\r
+/*     */     {\r
+/* 213 */       cancelPressed();\r
+/*     */     }\r
+/*     */   }\r
+/*     */ \r
+/*     */   public void okPressed()\r
+/*     */   {\r
+/* 219 */     IPAddress ip = new IPAddress(0L);\r
+/* 220 */     ip.setIP(\r
+/* 221 */       (Integer)this.ip1.getValue(), \r
+/* 222 */       (Integer)this.ip2.getValue(), \r
+/* 223 */       (Integer)this.ip3.getValue(), \r
+/* 224 */       (Integer)this.ip4.getValue());\r
+/*     */ \r
+/* 228 */     boolean invalidAddress = false;\r
+/* 229 */     String msg = null;\r
+/*     */ \r
+/* 231 */     if (this._CIDR.isSelected()) {\r
+/* 232 */       int cidr = ((Integer)this.mask.getValue()).intValue();\r
+/*     */ \r
+/* 234 */       if (ip.getNetworkIPByCIDR(cidr).getIPLong() == 0L) {\r
+/* 235 */         invalidAddress = true;\r
+/* 236 */         msg = "Network address consist of all zeros";\r
+/*     */       }\r
+/* 238 */       else if (ip.getNetworkIPByCIDR(cidr).getIPLong() != ip.getIPLong()) {\r
+/* 239 */         invalidAddress = true;\r
+/* 240 */         msg = "Network IP does not fit to CIDR \n(CIDR mask does not cover network IP)";\r
+/*     */       }\r
+/*     */ \r
+/*     */     }\r
+/* 245 */     else if (((Integer)this.ip1.getValue()).intValue() >= 224) {\r
+/* 246 */       invalidAddress = true;\r
+/* 247 */       msg = "Class D is not supported";\r
+/*     */     }\r
+/* 249 */     else if (ip.getNetworkIPByCIDR(ip.getIPClass()).getIPLong() != ip.getIPLong()) {\r
+/* 250 */       invalidAddress = true;\r
+/* 251 */       String className = Network.getClassName(ip.getIPClass());\r
+/* 252 */       msg = "Network address does not fit class " + className + "\n" + \r
+/* 253 */         "Maximum number of bits alloscated for network at class " + className + " is " + \r
+/* 254 */         ip.getIPClass() + " bits";\r
+/*     */     }\r
+/*     */ \r
+/* 257 */     if (invalidAddress) {\r
+/* 258 */       JOptionPane.showMessageDialog(this, "Address is not valid: " + msg, "Error", 0);\r
+/* 259 */       return;\r
+/*     */     }\r
+/*     */ \r
+/* 263 */     Iterator it = MainDrawBoard.staticInstance.networks.iterator();\r
+/* 264 */     Network compNet = null;\r
+/* 265 */     while (it.hasNext()) {\r
+/* 266 */       compNet = (Network)it.next();\r
+/* 267 */       if (compNet == this.network) continue; if (!compNet.isAssigned()) {\r
+/*     */         continue;\r
+/*     */       }\r
+/*     */ \r
+/* 271 */       if (!ip.equals(compNet.getIP()))\r
+/*     */         continue;\r
+/*     */       int c1;\r
+/* 273 */       if (this._CIDR.isSelected()) {\r
+/* 274 */         c1 = ((Integer)this.mask.getValue()).intValue();\r
+/*     */       }\r
+/*     */       else\r
+/* 277 */         c1 = ip.getIPClass();\r
+/*     */       int c2;\r
+/* 280 */       if (compNet.getIsCIDR()) {\r
+/* 281 */         c2 = compNet.getCIDR();\r
+/*     */       }\r
+/*     */       else {\r
+/* 284 */         c2 = compNet.getIP().getIPClass();\r
+/*     */       }\r
+/*     */ \r
+/* 287 */       if (c1 == c2) {\r
+/* 288 */         JOptionPane.showMessageDialog(this, "Address is not valid: network with same address already exists", "Error", 0);\r
+/* 289 */         return;\r
+/*     */       }\r
+/*     */ \r
+/*     */     }\r
+/*     */ \r
+/* 296 */     if (this.network.isAssigned())\r
+/*     */     {\r
+/* 298 */       int maxHosts = 0;\r
+/*     */ \r
+/* 300 */       if (this._CIDR.isSelected()) {\r
+/* 301 */         maxHosts = (0x2 ^ 32 - ((Integer)this.mask.getValue()).intValue()) - 1;\r
+/*     */       }\r
+/*     */       else {\r
+/* 304 */         switch (ip.getIPClass())\r
+/*     */         {\r
+/*     */         case 8:\r
+/* 306 */           maxHosts = 16777214;\r
+/* 307 */           break;\r
+/*     */         case 16:\r
+/* 309 */           maxHosts = 65534;\r
+/* 310 */           break;\r
+/*     */         case 24:\r
+/* 312 */           maxHosts = 254;\r
+/* 313 */           break;\r
+/*     */         case 32:\r
+/* 316 */           maxHosts = 0;\r
+/*     */         }\r
+/*     */ \r
+/*     */       }\r
+/*     */ \r
+/* 323 */       if (maxHosts < this.network.hosts.size() + this.network.routers.size()) {\r
+/* 324 */         String[] options = { "Use previous configuration", \r
+/* 325 */           "Use new configuration", \r
+/* 326 */           "Edit current configuration" };\r
+/*     */ \r
+/* 328 */         int selected = JOptionPane.showOptionDialog(null, \r
+/* 329 */           "The new configuration of the network doesn't allow connecting\nall the hosts \\ routers that were already allocated.\n\nWarning: Using the new configuration will result in deleting all the\nnetwork's hosts and disconnecting from all its routers!\n\nWhat would you like to do?", \r
+/* 334 */           "Properties Update Confirmation", \r
+/* 335 */           1, \r
+/* 336 */           3, null, options, null);\r
+/*     */ \r
+/* 338 */         if (selected == 0) {\r
+/* 339 */           dispose();\r
+/* 340 */           return;\r
+/* 341 */         }if (selected == 1)\r
+/* 342 */           this.network.removeAllConnections();\r
+/*     */         else {\r
+/* 344 */           return;\r
+/*     */         }\r
+/*     */       }\r
+/*     */ \r
+/*     */     }\r
+/*     */ \r
+/* 350 */     if (this._CIDR.isSelected()) {\r
+/* 351 */       this.network.setCIDR_IP(ip, ((Integer)this.mask.getValue()).intValue());\r
+/*     */     }\r
+/*     */     else {\r
+/* 354 */       this.network.setCLASS_IP(ip);\r
+/*     */     }\r
+/*     */ \r
+/* 357 */     this.network.setMTU((Integer)this.MTU.getValue());\r
+/* 358 */     dispose();\r
+/*     */   }\r
+/*     */ \r
+/*     */   public void cancelPressed()\r
+/*     */   {\r
+/* 363 */     dispose();\r
+/*     */   }\r
+/*     */ }\r
+\r
+/* Location:           C:\Users\MT\Desktop\mtutr.jar\r
+ * Qualified Name:     mtutr.windows.NetworkProperties\r
+ * JD-Core Version:    0.5.4\r
+ */
\ No newline at end of file
diff --git a/mtutr/windows/RouterProperties.java b/mtutr/windows/RouterProperties.java
new file mode 100644 (file)
index 0000000..fff9a84
--- /dev/null
@@ -0,0 +1,234 @@
+/*     */ package mtutr.windows;\r
+/*     */ \r
+/*     */ /*     */ import java.awt.Color;\r
+/*     */ import java.awt.Container;\r
+/*     */ import java.awt.Dimension;\r
+/*     */ import java.awt.Font;\r
+/*     */ import java.awt.GridLayout;\r
+/*     */ import java.awt.event.ActionEvent;\r
+/*     */ import java.awt.event.ActionListener;\r
+/*     */ import java.awt.event.WindowEvent;\r
+/*     */ import java.awt.event.WindowListener;\r
+/*     */ import java.util.Iterator;\r
+/*     */ import java.util.List;\r
+/*     */ import javax.swing.DefaultCellEditor;\r
+/*     */ import javax.swing.JButton;\r
+/*     */ import javax.swing.JCheckBox;\r
+/*     */ import javax.swing.JComboBox;\r
+/*     */ import javax.swing.JFrame;\r
+/*     */ import javax.swing.JLabel;\r
+/*     */ import javax.swing.JOptionPane;\r
+/*     */ import javax.swing.JPanel;\r
+/*     */ import javax.swing.JScrollPane;\r
+/*     */ import javax.swing.JTable;\r
+/*     */ import javax.swing.table.TableCellEditor;\r
+/*     */ import javax.swing.table.TableColumn;\r
+import javax.swing.table.TableColumnModel;\r
+\r
+import mtutr.common.IPAddress;\r
+import mtutr.objects.Network;\r
+import mtutr.objects.Router;\r
+import mtutr.objects.RoutingTable;\r
+import mtutr.windows.buttonhandlers.ButtonEditor;\r
+import mtutr.windows.buttonhandlers.ButtonRenderer;\r
+/*     */ \r
+/*     */ public class RouterProperties extends JFrame\r
+/*     */   implements ActionListener, WindowListener\r
+/*     */ {\r
+/*     */   private static final long serialVersionUID = 1L;\r
+/*     */   private Router router;\r
+/*     */   private JComboBox intefaces;\r
+/*     */   private JComboBox gateways;\r
+/*     */   private JTable routing_table;\r
+/*     */   private RoutingTable tableModel;\r
+/*  41 */   private JLabel errMsg = null;\r
+/*     */ \r
+/*     */   public RouterProperties(Router theRouter)\r
+/*     */   {\r
+/*  46 */     init(theRouter);\r
+/*     */   }\r
+/*     */ \r
+/*     */   private void init(Router theRouter) {\r
+/*  50 */     this.router = theRouter;\r
+/*     */ \r
+/*  52 */     setTitle("Router Properties");\r
+/*  53 */     Container c = getContentPane();\r
+/*  54 */     c.setLayout(new GridLayout(0, 1));\r
+/*  55 */     setSize(new Dimension(480, 310));\r
+/*  56 */     setResizable(false);\r
+/*     */ \r
+/*  58 */     JPanel routing_table_panel = new JPanel();\r
+/*  59 */     routing_table_panel.setSize(new Dimension(480, 270));\r
+/*  60 */     c.add(routing_table_panel);\r
+/*     */ \r
+/*  62 */     this.errMsg = new JLabel("");\r
+/*  63 */     Font font = new Font("Tahoma", 1, 12);\r
+/*  64 */     this.errMsg.setFont(font);\r
+/*  65 */     this.errMsg.setForeground(Color.red);\r
+/*  66 */     this.errMsg.setSize(this.errMsg.getPreferredSize());\r
+/*  67 */     this.errMsg.setLocation(1, 1);\r
+/*  68 */     routing_table_panel.add(this.errMsg);\r
+/*     */ \r
+/*  70 */     this.tableModel = this.router.routingTable;\r
+/*  71 */     this.tableModel.openedInEditor(this.errMsg);\r
+/*  72 */     this.routing_table = new JExtendedTable(this.tableModel);\r
+/*  73 */     JScrollPane scrollpane = new JScrollPane(this.routing_table);\r
+/*  74 */     scrollpane.setPreferredSize(new Dimension(450, 180));\r
+/*  75 */     scrollpane.setMaximumSize(new Dimension(450, 180));\r
+/*  76 */     routing_table_panel.add(scrollpane);\r
+/*  77 */     TableColumn column = null;\r
+/*  78 */     column = this.routing_table.getColumnModel().getColumn(0);\r
+/*     */ \r
+/*  80 */     column.setHeaderValue("Network Destination");\r
+/*     */ \r
+/*  82 */     column = this.routing_table.getColumnModel().getColumn(1);\r
+/*     */ \r
+/*  84 */     column.setHeaderValue("Netmask");\r
+/*     */ \r
+/*  88 */     this.gateways = new JComboBox();\r
+/*  89 */     this.intefaces = new JComboBox();\r
+/*     */ \r
+/*  91 */     Iterator it = this.router.networks.iterator();\r
+/*     */ \r
+/*  94 */     while (it.hasNext())\r
+/*     */     {\r
+/*  96 */       Network net = (Network)it.next();\r
+/*  97 */       this.intefaces.addItem(net.getIP().getIPStr());\r
+/*  98 */       Iterator rIt = net.routers.iterator();\r
+/*  99 */       while (rIt.hasNext()) {\r
+/* 100 */         Router tmpRouter = (Router)rIt.next();\r
+/* 101 */         if (this.router != tmpRouter) {\r
+/* 102 */           this.gateways.addItem(net.allocateIP(tmpRouter).getIPStr());\r
+/*     */         }\r
+/*     */         else\r
+/*     */         {\r
+/* 106 */           this.gateways.addItem(net.allocateIP(tmpRouter).getIPStr());\r
+/*     */         }\r
+/*     */       }\r
+/*     */     }\r
+/*     */ \r
+/* 111 */     column = this.routing_table.getColumnModel().getColumn(2);\r
+/* 112 */     column.setHeaderValue("Next Hop");\r
+/* 113 */     column.setCellEditor(new DefaultCellEditor(this.gateways));\r
+/*     */ \r
+/* 115 */     column = this.routing_table.getColumnModel().getColumn(3);\r
+/* 116 */     column.setHeaderValue("Interface");\r
+/* 117 */     column.setCellEditor(new DefaultCellEditor(this.intefaces));\r
+/*     */ \r
+/* 119 */     column = this.routing_table.getColumnModel().getColumn(4);\r
+/* 120 */     column.setHeaderValue("Remove line");\r
+/* 121 */     column.setCellEditor(new ButtonEditor(new JCheckBox(), this.routing_table, this.tableModel));\r
+/* 122 */     column.setCellRenderer(new ButtonRenderer());\r
+/*     */ \r
+/* 124 */     JButton saveBtn = new JButton("Save");\r
+/* 125 */     saveBtn.addActionListener(this);\r
+/* 126 */     routing_table_panel.add(saveBtn);\r
+/*     */ \r
+/* 128 */     JButton cancelBtn = new JButton("Cancel");\r
+/* 129 */     cancelBtn.addActionListener(this);\r
+/* 130 */     routing_table_panel.add(cancelBtn);\r
+/*     */ \r
+/* 132 */     JButton clearBtn = new JButton("Clear");\r
+/* 133 */     clearBtn.addActionListener(this);\r
+/* 134 */     routing_table_panel.add(clearBtn);\r
+/*     */ \r
+/* 136 */     JButton newLineBtn = new JButton("Add new Line");\r
+/* 137 */     newLineBtn.addActionListener(this);\r
+/* 138 */     routing_table_panel.add(newLineBtn);\r
+/*     */ \r
+/* 140 */     if (this.router.networks.size() != 0) {\r
+/* 141 */       JButton basicConfigBtn = new JButton("Add entries for each interface");\r
+/* 142 */       basicConfigBtn.addActionListener(this);\r
+/* 143 */       routing_table_panel.add(basicConfigBtn);\r
+/*     */ \r
+/* 145 */       JButton defEntryBtn = new JButton("Add default entry");\r
+/* 146 */       defEntryBtn.addActionListener(this);\r
+/* 147 */       routing_table_panel.add(defEntryBtn);\r
+/*     */     }\r
+/*     */ \r
+/* 150 */     addWindowListener(this);\r
+/* 151 */     setDefaultCloseOperation(0);\r
+/*     */   }\r
+/*     */ \r
+/*     */   public void actionPerformed(ActionEvent e)\r
+/*     */   {\r
+/* 156 */     String command = e.getActionCommand();\r
+/* 157 */     if (command.equalsIgnoreCase("Add new Line")) {\r
+/* 158 */       this.tableModel.addRow();\r
+/*     */     }\r
+/* 160 */     else if (command.equalsIgnoreCase("Cancel")) {\r
+/* 161 */       this.tableModel.rollbackAfterChange();\r
+/* 162 */       dispose();\r
+/*     */     }\r
+/* 164 */     else if (command.equalsIgnoreCase("Save"))\r
+/*     */     {\r
+/* 166 */       if (this.routing_table.isEditing()) {\r
+/* 167 */         int row = this.routing_table.getSelectedRow();\r
+/* 168 */         int column = this.routing_table.getSelectedColumn();\r
+/* 169 */         TableCellEditor tce = this.routing_table.getCellEditor(row, column);\r
+/* 170 */         tce.stopCellEditing();\r
+/*     */       }\r
+/*     */ \r
+/* 173 */       String msg = this.tableModel.validateData();\r
+/* 174 */       if (msg != null) {\r
+/* 175 */         JOptionPane.showMessageDialog(this, msg, "Error", 0);\r
+/*     */       }\r
+/*     */       else {\r
+/* 178 */         this.tableModel.commitData();\r
+/* 179 */         dispose();\r
+/*     */       }\r
+/*     */     }\r
+/* 182 */     else if (command.equalsIgnoreCase("Clear")) {\r
+/* 183 */       this.router.routingTable.clear();\r
+/*     */     }\r
+/* 185 */     else if (command.equalsIgnoreCase("Add entries for each interface")) {\r
+/* 186 */       this.router.routingTable.addEntriesForInterface();\r
+/*     */     }\r
+/* 188 */     else if (command.equalsIgnoreCase("Add default entry")) {\r
+/* 189 */       this.router.routingTable.addDefaultEntry();\r
+/*     */     }\r
+/*     */   }\r
+/*     */ \r
+/*     */   public void windowOpened(WindowEvent arg0)\r
+/*     */   {\r
+/*     */   }\r
+/*     */ \r
+/*     */   public void windowClosing(WindowEvent event)\r
+/*     */   {\r
+/* 203 */     if (JOptionPane.showConfirmDialog(this, \r
+/* 204 */       "All changes are going to be discarted. Are you sure?", \r
+/* 205 */       "Close window", \r
+/* 206 */       0) == 0) {\r
+/* 207 */       this.tableModel.rollbackAfterChange();\r
+/* 208 */       dispose();\r
+/*     */     }\r
+/*     */     else {\r
+/* 211 */       event.setSource(null);\r
+/*     */     }\r
+/*     */   }\r
+/*     */ \r
+/*     */   public void windowClosed(WindowEvent arg0)\r
+/*     */   {\r
+/*     */   }\r
+/*     */ \r
+/*     */   public void windowIconified(WindowEvent arg0)\r
+/*     */   {\r
+/*     */   }\r
+/*     */ \r
+/*     */   public void windowDeiconified(WindowEvent arg0)\r
+/*     */   {\r
+/*     */   }\r
+/*     */ \r
+/*     */   public void windowActivated(WindowEvent arg0)\r
+/*     */   {\r
+/*     */   }\r
+/*     */ \r
+/*     */   public void windowDeactivated(WindowEvent arg0)\r
+/*     */   {\r
+/*     */   }\r
+/*     */ }\r
+\r
+/* Location:           C:\Users\MT\Desktop\mtutr.jar\r
+ * Qualified Name:     mtutr.windows.RouterProperties\r
+ * JD-Core Version:    0.5.4\r
+ */
\ No newline at end of file
diff --git a/mtutr/windows/buttonhandlers/.p4ignore b/mtutr/windows/buttonhandlers/.p4ignore
new file mode 100644 (file)
index 0000000..c9179a5
--- /dev/null
@@ -0,0 +1,2 @@
+ButtonEditor.java
+ButtonRenderer.java
diff --git a/mtutr/windows/buttonhandlers/ButtonEditor.java b/mtutr/windows/buttonhandlers/ButtonEditor.java
new file mode 100644 (file)
index 0000000..f447960
--- /dev/null
@@ -0,0 +1,74 @@
+/*    */ package mtutr.windows.buttonhandlers;\r
+/*    */ \r
+/*    */ /*    */ import java.awt.Component;\r
+/*    */ import java.awt.event.ActionEvent;\r
+/*    */ import java.awt.event.ActionListener;\r
+/*    */ import javax.swing.DefaultCellEditor;\r
+/*    */ import javax.swing.JButton;\r
+/*    */ import javax.swing.JCheckBox;\r
+import javax.swing.JTable;\r
+\r
+import mtutr.objects.RoutingTable;\r
+/*    */ \r
+/*    */ public class ButtonEditor extends DefaultCellEditor\r
+/*    */ {\r
+/*    */   private static final long serialVersionUID = 1L;\r
+/*    */   protected JButton button;\r
+/*    */   private String label;\r
+/*    */   private boolean isPushed;\r
+/*    */   private JTable uiTable;\r
+/*    */   private RoutingTable routingTable;\r
+/*    */ \r
+/*    */   public ButtonEditor(JCheckBox checkBox, JTable jt, RoutingTable rt)\r
+/*    */   {\r
+/* 22 */     super(checkBox);\r
+/* 23 */     this.uiTable = jt;\r
+/* 24 */     this.routingTable = rt;\r
+/* 25 */     this.button = new JButton();\r
+/* 26 */     this.button.setOpaque(true);\r
+/* 27 */     this.button.addActionListener(new ActionListener() {\r
+/*    */       public void actionPerformed(ActionEvent e) {\r
+/* 29 */         ButtonEditor.this.fireEditingStopped();\r
+/*    */       }\r
+/*    */     });\r
+/*    */   }\r
+/*    */ \r
+/*    */   public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column)\r
+/*    */   {\r
+/* 36 */     if (isSelected) {\r
+/* 37 */       this.button.setForeground(table.getSelectionForeground());\r
+/* 38 */       this.button.setBackground(table.getSelectionBackground());\r
+/*    */     } else {\r
+/* 40 */       this.button.setForeground(table.getForeground());\r
+/* 41 */       this.button.setBackground(table.getBackground());\r
+/*    */     }\r
+/* 43 */     this.label = ((value == null) ? "" : value.toString());\r
+/* 44 */     this.button.setText(this.label);\r
+/* 45 */     this.isPushed = true;\r
+/* 46 */     return this.button;\r
+/*    */   }\r
+/*    */ \r
+/*    */   public Object getCellEditorValue() {\r
+/* 50 */     if (this.isPushed) {\r
+/* 51 */       int selected = this.uiTable.getSelectedRow();\r
+/* 52 */       this.routingTable.deleteRow(this.uiTable.getSelectedRow());\r
+/* 53 */       this.routingTable.fireTableRowsDeleted(selected, selected);\r
+/*    */     }\r
+/* 55 */     this.isPushed = false;\r
+/* 56 */     return new String(this.label);\r
+/*    */   }\r
+/*    */ \r
+/*    */   public boolean stopCellEditing() {\r
+/* 60 */     this.isPushed = false;\r
+/* 61 */     return super.stopCellEditing();\r
+/*    */   }\r
+/*    */ \r
+/*    */   protected void fireEditingStopped() {\r
+/* 65 */     super.fireEditingStopped();\r
+/*    */   }\r
+/*    */ }\r
+\r
+/* Location:           C:\Users\MT\Desktop\mtutr.jar\r
+ * Qualified Name:     mtutr.windows.buttonhandlers.ButtonEditor\r
+ * JD-Core Version:    0.5.4\r
+ */
\ No newline at end of file
diff --git a/mtutr/windows/buttonhandlers/ButtonRenderer.java b/mtutr/windows/buttonhandlers/ButtonRenderer.java
new file mode 100644 (file)
index 0000000..3e88400
--- /dev/null
@@ -0,0 +1,36 @@
+/*    */ package mtutr.windows.buttonhandlers;\r
+/*    */ \r
+/*    */ import java.awt.Component;\r
+/*    */ import javax.swing.JButton;\r
+/*    */ import javax.swing.JTable;\r
+/*    */ import javax.swing.UIManager;\r
+/*    */ import javax.swing.table.TableCellRenderer;\r
+/*    */ \r
+/*    */ public class ButtonRenderer extends JButton\r
+/*    */   implements TableCellRenderer\r
+/*    */ {\r
+/*    */   private static final long serialVersionUID = 1L;\r
+/*    */ \r
+/*    */   public ButtonRenderer()\r
+/*    */   {\r
+/* 14 */     setOpaque(true);\r
+/*    */   }\r
+/*    */ \r
+/*    */   public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)\r
+/*    */   {\r
+/* 19 */     if (isSelected) {\r
+/* 20 */       setForeground(table.getSelectionForeground());\r
+/* 21 */       setBackground(table.getSelectionBackground());\r
+/*    */     } else {\r
+/* 23 */       setForeground(table.getForeground());\r
+/* 24 */       setBackground(UIManager.getColor("Button.background"));\r
+/*    */     }\r
+/* 26 */     setText((value == null) ? "" : value.toString());\r
+/* 27 */     return this;\r
+/*    */   }\r
+/*    */ }\r
+\r
+/* Location:           C:\Users\MT\Desktop\mtutr.jar\r
+ * Qualified Name:     mtutr.windows.buttonhandlers.ButtonRenderer\r
+ * JD-Core Version:    0.5.4\r
+ */
\ No newline at end of file
diff --git a/network2.gif b/network2.gif
new file mode 100644 (file)
index 0000000..925de9e
Binary files /dev/null and b/network2.gif differ
diff --git a/router.gif b/router.gif
new file mode 100644 (file)
index 0000000..699b583
Binary files /dev/null and b/router.gif differ
diff --git a/site/1.jpg b/site/1.jpg
new file mode 100644 (file)
index 0000000..5d67b09
Binary files /dev/null and b/site/1.jpg differ
diff --git a/site/10.gif b/site/10.gif
new file mode 100644 (file)
index 0000000..d9ad97a
Binary files /dev/null and b/site/10.gif differ
diff --git a/site/11.jpg b/site/11.jpg
new file mode 100644 (file)
index 0000000..2d866ca
Binary files /dev/null and b/site/11.jpg differ
diff --git a/site/12.jpg b/site/12.jpg
new file mode 100644 (file)
index 0000000..3203041
Binary files /dev/null and b/site/12.jpg differ
diff --git a/site/13.jpg b/site/13.jpg
new file mode 100644 (file)
index 0000000..f3cbcd8
Binary files /dev/null and b/site/13.jpg differ
diff --git a/site/14.jpg b/site/14.jpg
new file mode 100644 (file)
index 0000000..5e0a0fe
Binary files /dev/null and b/site/14.jpg differ
diff --git a/site/15.jpg b/site/15.jpg
new file mode 100644 (file)
index 0000000..66de452
Binary files /dev/null and b/site/15.jpg differ
diff --git a/site/16.jpg b/site/16.jpg
new file mode 100644 (file)
index 0000000..b91211f
Binary files /dev/null and b/site/16.jpg differ
diff --git a/site/17.jpg b/site/17.jpg
new file mode 100644 (file)
index 0000000..6638b9d
Binary files /dev/null and b/site/17.jpg differ
diff --git a/site/18.jpg b/site/18.jpg
new file mode 100644 (file)
index 0000000..6b3fdf1
Binary files /dev/null and b/site/18.jpg differ
diff --git a/site/19.gif b/site/19.gif
new file mode 100644 (file)
index 0000000..94bac9a
Binary files /dev/null and b/site/19.gif differ
diff --git a/site/2.jpg b/site/2.jpg
new file mode 100644 (file)
index 0000000..b3d15af
Binary files /dev/null and b/site/2.jpg differ
diff --git a/site/20.jpg b/site/20.jpg
new file mode 100644 (file)
index 0000000..05cd987
Binary files /dev/null and b/site/20.jpg differ
diff --git a/site/21.gif b/site/21.gif
new file mode 100644 (file)
index 0000000..925de9e
Binary files /dev/null and b/site/21.gif differ
diff --git a/site/22.jpg b/site/22.jpg
new file mode 100644 (file)
index 0000000..94fd930
Binary files /dev/null and b/site/22.jpg differ
diff --git a/site/23.jpg b/site/23.jpg
new file mode 100644 (file)
index 0000000..74cb3b3
Binary files /dev/null and b/site/23.jpg differ
diff --git a/site/24.jpg b/site/24.jpg
new file mode 100644 (file)
index 0000000..cfea26d
Binary files /dev/null and b/site/24.jpg differ
diff --git a/site/25.jpg b/site/25.jpg
new file mode 100644 (file)
index 0000000..c2d18d8
Binary files /dev/null and b/site/25.jpg differ
diff --git a/site/26.jpg b/site/26.jpg
new file mode 100644 (file)
index 0000000..3b5bbd2
Binary files /dev/null and b/site/26.jpg differ
diff --git a/site/27.jpg b/site/27.jpg
new file mode 100644 (file)
index 0000000..be0110c
Binary files /dev/null and b/site/27.jpg differ
diff --git a/site/28.jpg b/site/28.jpg
new file mode 100644 (file)
index 0000000..f2990eb
Binary files /dev/null and b/site/28.jpg differ
diff --git a/site/29.gif b/site/29.gif
new file mode 100644 (file)
index 0000000..699b583
Binary files /dev/null and b/site/29.gif differ
diff --git a/site/3.jpg b/site/3.jpg
new file mode 100644 (file)
index 0000000..4b2c505
Binary files /dev/null and b/site/3.jpg differ
diff --git a/site/30.jpg b/site/30.jpg
new file mode 100644 (file)
index 0000000..1dac636
Binary files /dev/null and b/site/30.jpg differ
diff --git a/site/31.jpg b/site/31.jpg
new file mode 100644 (file)
index 0000000..742e808
Binary files /dev/null and b/site/31.jpg differ
diff --git a/site/32.jpg b/site/32.jpg
new file mode 100644 (file)
index 0000000..7a2bdbc
Binary files /dev/null and b/site/32.jpg differ
diff --git a/site/33.jpg b/site/33.jpg
new file mode 100644 (file)
index 0000000..c35d2d0
Binary files /dev/null and b/site/33.jpg differ
diff --git a/site/34.jpg b/site/34.jpg
new file mode 100644 (file)
index 0000000..faa80b5
Binary files /dev/null and b/site/34.jpg differ
diff --git a/site/35.jpg b/site/35.jpg
new file mode 100644 (file)
index 0000000..15aab1f
Binary files /dev/null and b/site/35.jpg differ
diff --git a/site/36.jpg b/site/36.jpg
new file mode 100644 (file)
index 0000000..13f5282
Binary files /dev/null and b/site/36.jpg differ
diff --git a/site/37.jpg b/site/37.jpg
new file mode 100644 (file)
index 0000000..c3f51e1
Binary files /dev/null and b/site/37.jpg differ
diff --git a/site/38.jpg b/site/38.jpg
new file mode 100644 (file)
index 0000000..fa6684f
Binary files /dev/null and b/site/38.jpg differ
diff --git a/site/39.jpg b/site/39.jpg
new file mode 100644 (file)
index 0000000..83df2f4
Binary files /dev/null and b/site/39.jpg differ
diff --git a/site/4.jpg b/site/4.jpg
new file mode 100644 (file)
index 0000000..fdb3717
Binary files /dev/null and b/site/4.jpg differ
diff --git a/site/40.jpg b/site/40.jpg
new file mode 100644 (file)
index 0000000..dd880a9
Binary files /dev/null and b/site/40.jpg differ
diff --git a/site/41.jpg b/site/41.jpg
new file mode 100644 (file)
index 0000000..0980d57
Binary files /dev/null and b/site/41.jpg differ
diff --git a/site/42.jpg b/site/42.jpg
new file mode 100644 (file)
index 0000000..d4e1f25
Binary files /dev/null and b/site/42.jpg differ
diff --git a/site/43.jpg b/site/43.jpg
new file mode 100644 (file)
index 0000000..265d7ea
Binary files /dev/null and b/site/43.jpg differ
diff --git a/site/44.gif b/site/44.gif
new file mode 100644 (file)
index 0000000..4462999
Binary files /dev/null and b/site/44.gif differ
diff --git a/site/45.jpg b/site/45.jpg
new file mode 100644 (file)
index 0000000..a0ef011
Binary files /dev/null and b/site/45.jpg differ
diff --git a/site/46.jpg b/site/46.jpg
new file mode 100644 (file)
index 0000000..30be49e
Binary files /dev/null and b/site/46.jpg differ
diff --git a/site/5.jpg b/site/5.jpg
new file mode 100644 (file)
index 0000000..1ad8f5d
Binary files /dev/null and b/site/5.jpg differ
diff --git a/site/6.jpg b/site/6.jpg
new file mode 100644 (file)
index 0000000..1da96f6
Binary files /dev/null and b/site/6.jpg differ
diff --git a/site/7.jpg b/site/7.jpg
new file mode 100644 (file)
index 0000000..d127f7b
Binary files /dev/null and b/site/7.jpg differ
diff --git a/site/8.jpg b/site/8.jpg
new file mode 100644 (file)
index 0000000..9b9d0fb
Binary files /dev/null and b/site/8.jpg differ
diff --git a/site/9.jpg b/site/9.jpg
new file mode 100644 (file)
index 0000000..a05d8bb
Binary files /dev/null and b/site/9.jpg differ
diff --git a/site/main.htm b/site/main.htm
new file mode 100644 (file)
index 0000000..45cfd96
--- /dev/null
@@ -0,0 +1,565 @@
+<HTML>\r
+<a name="Top"></a>\r
+\r
+<HEAD>\r
+<TITLE>IP Routing Simulation</TITLE>\r
+</HEAD>\r
+\r
+<BODY bgcolor="#DEE7FE">\r
+<font color="black" size="4" face="arial"><h1>IP Routing Simulation</h1></font>\r
+<font color="black" size="3" face="arial">\r
+<a href="http://www.raduniversity.com">Back to Rad University</a>&nbsp;&nbsp;&nbsp;\r
+<a href="#Questions">How to Use This Applet</a><br><br>\r
+\r
+<APPLET CODE="mtutr/IPKit.class" ARCHIVE="mtutr.jar" width=750 height=640>\r
+\r
+</APPLET>\r
+\r
+<br><br>\r
+Written by:\r
+<ul type="disc">\r
+<li>Gil Messerman</li>\r
+<li>Gilad Karni</li>\r
+<li>Uri Braun</li>\r
+</ul>\r
+\r
+Written for "Protocols and Computer Networks" course at Tel Aviv University.\r
+\r
+<br><br>\r
+-------------------------------------------------------------------------------\r
+<br><br>\r
+<a name="Questions"></a><h2>Questions: How do I...</h2>\r
+\r
+<a name="Network"></a><img src="21.gif" width = 70 height = 48>\r
+<br><b>Network</b> <ul type="disc">\r
+<li><a href="#Adding a network">Add a network</a></li>\r
+<li><a href="#Adding a host to a network">Add a host to a network</a></li>\r
+<li><a href="#Editing a network">Edit a network</a></li>\r
+       <ul type="disc">\r
+       <li><a href="#Defining network's address pool">Define network's address pool</a></li>\r
+       <li><a href="#Defining network's MTU">Define network's MTU</a></li>\r
+       </ul>\r
+\r
+<li><a href="#Set network's default gateway">Set network's default gateway</a></li>\r
+<li><a href="#Connecting a router to a network">Connect a network to a router \ Disconnect a network from a router</a></li>\r
+<li><a href="#Removing a network">Remove a network</a></li>\r
+</ul>\r
+\r
+<a href="#"></a>\r
+\r
+<a name="Router"></a><img src="29.gif">\r
+<br><b>Router</b> <ul type="disc">\r
+<li><a href="#Adding a router">Add a router</a></li>\r
+<li><a href="#Editing a router">Edit a router</a></li>\r
+<li><a href="#Connecting a router to a network">Disconnect a router from a network \ Disconnect a router from a network</a></li>\r
+<li><a href="#Removing a router">Remove a router</a></li>\r
+</ul>\r
+\r
+<a name="Host"></a><img src="19.gif">\r
+<br><b>Host</b> <ul type="disc">\r
+<li><a href="#Adding a host to a network">Add a host to a network</a></li>\r
+<li><a href="#Removing a host">Remove a host</a></li>\r
+</ul>\r
+\r
+<a name="Datagram"></a><img src="10.gif">\r
+<br><b>Datagram</b> <ul type="disc">\r
+<li><a href="#Adding a datagram">Add a datagram</a></li>\r
+<li><a href="#Editing a datagram">Edit a datagram</a></li>\r
+       <ul type="disc">\r
+       <li><a href="#Setting a datagram's source & target hosts">Set a datagram's source & target hosts</a></li>\r
+       <li><a href="#Setting a datagram's source host">Set a datagram's source host</a></li>\r
+       <li><a href="#Setting a datagram's target host">Set a datagram's target host</a></li>\r
+       <li><a href="#Setting a datagram's length">Set a datagram's length</a></li>\r
+       <li><a href="#Setting a datagram's TTL">Set a datagram's TTL</a></li>\r
+       </ul>\r
+<li><a href="#Sending a datagram">Send a datagram</a></li>\r
+<li><a href="#Removing a datagram">Remove a datagram</a></li>\r
+</ul>\r
+\r
+<a name="FAQ"></a><b>FAQ</b> <ul type="disc">\r
+<li><a href="#PlaceNetworks">What is the purpose of "<b><i>Place Networks</i></b>"?</a></li>\r
+<li><a href="#Why can't I add a host to a network?">Why can't I add a host to a network?</a></li>\r
+<li><a href="#RemoveAll">How can I remove all objects from main panel?</a></li>\r
+<li><a href="#Why can't I send a datagram?">Why can't I send a datagram?</a></li>\r
+<li><a href="#How does a host gets its IP address?">How does a host get its IP address?</a></li>\r
+</ul>\r
+\r
+\r
+\r
+\r
+<br>---------------------------------------------------------------------------<br>\r
+\r
+<h2>Answers: How do you...</h2>\r
+<a name=""></a>\r
+\r
+<img src="21.gif" width = 70 height = 48>\r
+<br><b>Network</b> <ul type="disc">\r
+<li><a name="Adding a network"></a><u>Add a network</u>\r
+<br><font color="black" size="2" face="arial">Back to: <a href="#Top">Top</a> | <a href="#Questions">Questions</a> | <a href="#Network">Network</a></font></li>\r
+       <br>\r
+       <br><ul type="disc">Right clicking on the main panel will cause a menu to pop up.\r
+       <br>Choose "<i><b>Add Network</b></i>" and a new network will show up on the main panel.<br><img src="3.jpg"></ul>\r
+       <br>\r
+<li><a name="Adding a host to a network"></a><u>Add a host to a network</u>\r
+<br><font color="black" size="2" face="arial">Back to: <a href="#Top">Top</a> | <a href="#Questions">Questions</a> | <a href="#Network">Network</a></font></li>\r
+       <ul type="disc">\r
+       <br>Right clicking on the network will cause a menu to pop up.\r
+       <br>Choose "<i><b>Add Host</b></i>" and a host will be added to the network.\r
+       <br><img src="2.jpg"><br>\r
+       <br><a href="#Why can't I add a host to a network?"><b>FAQ</b></a> - "<i><b>Add Host</b></i>" is disabled. Why can't I add a host to a network?\r
+       <br><a href="#How does a host gets its IP address?"><b>FAQ</b></a> - How does a host gets its IP address?</ul>\r
+       <br>\r
+<li><a name="Editing a network"></a><u>Edit a network</u>\r
+<br><font color="black" size="2" face="arial">Back to: <a href="#Top">Top</a> | <a href="#Questions">Questions</a> | <a href="#Network">Network</a></font></li>\r
+       <ul type="disc">\r
+       <br>\r
+       <a name="IPPoolDefine"></a>\r
+       <li><a name="Defining network's address pool"></a><u>Define network's address pool</u>\r
+       <br><font color="black" size="2" face="arial">Back to: <a href="#Top">Top</a> | <a href="#Questions">Questions</a> | <a href="#Network">Network</a></font></li>\r
+               <ul type="disc">\r
+               <br>Right click on the network you want to edit.\r
+               <br>A menu will pop up. Choose "<i><b>Edit Network</b></i>" and a window with the network properties will be opened.\r
+               <br><img src="15.jpg">\r
+               <br>You can also double-click on the network in order to open the same window.\r
+               <br>\r
+               <br>In that window you can define the network's address pool (Class based or CIDR based).\r
+               <br><img src="5.jpg">\r
+               <br>\r
+               <br>After defining a network's address pool the network's address\r
+               <br>pool will appear on the network's icon:\r
+               <br><img src="22.jpg">\r
+               <br>\r
+               <br></ul>\r
+       <li><a name="Defining network's MTU"></a><u>Define network's MTU</u>\r
+       <br><font color="black" size="2" face="arial">Back to: <a href="#Top">Top</a> | <a href="#Questions">Questions</a> | <a href="#Network">Network</a></font></li>\r
+               <ul type="disc">\r
+               <br>Right click on the network you want to edit.\r
+               <br>A menu will pop up. Choose "<i><b>Edit Network</b></i>" and a window with the network properties will be opened.\r
+               <br><img src="15.jpg">\r
+               <br>You can also double-click on the network in order to open the same window.\r
+               <br>\r
+               <br>In that window you can define the network's MTU.\r
+               <br><img src="20.jpg">\r
+               <br></ul>\r
+       </ul>\r
+       <br>\r
+<li><a name="Set network's default gateway"></a><u>Set network's default gateway</u>\r
+<br><font color="black" size="2" face="arial">Back to: <a href="#Top">Top</a> | <a href="#Questions">Questions</a> | <a href="#Network">Network</a></font></li>\r
+       <ul type="disc">\r
+       <br>When connecting a network to a router for the first time,\r
+       <br>the router is automatically set to be the network's default gateway.\r
+       <br>\r
+       <br>The default gateway of a network is denoted with a "<b>d</b>" on the line\r
+       <br>connecting the network and the default gateway.\r
+       <br><img src="13.jpg"><br>\r
+       <br>\r
+       <br>However, if your network is connected to more than one router and you\r
+       <br>want to change the default gateway of network, you need to perform\r
+       <br>a right click on the selected network and choose "<i><b>Set Default Gateway</b></i>"\r
+       <br>on the menu that will pop up.\r
+       <br><img src="32.jpg">\r
+       <br>\r
+       <br>A bar indicating you are now choosing the default gateway will appear at the head of the main panel.\r
+       <br><img src="17.jpg">\r
+       <br>\r
+       <br>Then, all possible default gateways will be marked with a <font color="blue" size="3" face="arial">blue</font> rectangle.\r
+       <br>You can choose any of them to be the default gateway of the network.\r
+       <br>The Chosen default gateway will be marked with a <font color="green" size="3" face="arial">green</font> rectangle.\r
+       <br><img src="6.jpg">\r
+       <br>\r
+       <br>When you're done choosing the default gateway, click the button "<i><b>Done</b></i>" at the bar at the head of the panel.\r
+       <br>The default gateway will be set.\r
+       <br>\r
+       <br>Read more about removing default gateways <a href="#removedg">here</a>.\r
+       </ul>\r
+       <br>\r
+<li><u>Connect a network to a router \ Disconnect a network from a router</u>\r
+<br><font color="black" size="2" face="arial">Back to: <a href="#Top">Top</a> | <a href="#Questions">Questions</a> | <a href="#Network">Network</a></font></li>\r
+       <ul type="disc">\r
+       <br>\r
+       <a href="#Connecting a router to a network">Click Here</a></ul>\r
+       <br>\r
+<li><a name="Removing a network"></a><u>Remove a network</u>\r
+<br><font color="black" size="2" face="arial">Back to: <a href="#Top">Top</a> | <a href="#Questions">Questions</a> | <a href="#Network">Network</a></font></li>\r
+       <ul type="disc">\r
+       <br>Right clicking on a network will cause a menu to pop up.\r
+       <br>Choose "<i><b>Remove Network</b></i>".\r
+       <br><img src="27.jpg">\r
+       <br>\r
+       <br>The network will be removed from the main panel along with its hosts.\r
+       <br>\r
+       </ul>\r
+</ul>\r
+\r
+<br><br>---------------------------------------------------------------------------<br><br>\r
+\r
+\r
+<img src="29.gif"><br>\r
+<b>Router</b> <ul type="disc">\r
+<li><a name="Adding a router"></a><u>Add a router</u>\r
+<br><font color="black" size="2" face="arial">Back to: <a href="#Top">Top</a> | <a href="#Questions">Questions</a> | <a href="#Router">Router</a></font></li>\r
+       <ul type="disc"><br>Right clicking on the main panel will cause a menu to pop up.\r
+       <br>Choose "<i><b>Add Router</b></i>" and a new router will show up on the main panel.\r
+       <br><img src="4.jpg">\r
+       <br>\r
+       <br></u></ul>\r
+\r
+<li><a name="Editing a router"></a><u>Edit a router</u>\r
+<br><font color="black" size="2" face="arial">Back to: <a href="#Top">Top</a> | <a href="#Questions">Questions</a> | <a href="#Router">Router</a></font></li>\r
+       <br>\r
+       <br>Right clicking on the router will cause a menu to pop up.\r
+       <br>Choose "<i><b>Edit Routing Table</b></i>".\r
+       <br><img src="16.jpg"><br>\r
+       <br>\r
+       <br>This will cause an opening of a new window:\r
+       <br><img src="43.jpg">\r
+       <br>\r
+       <br>This window allows the user to define a routing table for the selected router.\r
+       <br>The structure of a routing table is a list of lines where each line contains 4 elements:\r
+       <br>\r
+       <table cellpadding="14">\r
+               <tr>\r
+                       <td valign="top"><b>Network destination</b></td>\r
+                       <td>Used to define destination network. This value is compared with part of datagram's target\r
+                               <br>IP address according to <b>Netmask</b> value. The network destination value might be either\r
+                               <br>IP address of one of the defined networks or an address that aggregates several networks\r
+                               <br>(supernet).\r
+                               <br>For example in order to route a datagram to either network 192.168.10.0 or\r
+                               <br>192.168.11.0 using same <b>Interface</b> of selected router, the user may define network\r
+                               <br>destination to be 192.168.0.0 with appropriate <b>Netmask</b> (255.255.0.0).</td>\r
+               </tr>\r
+               <tr>\r
+                       <td valign="top"><b>Netmask</b></td>\r
+                       <td>Used to differ the prefix of datagram's target IP, which should be compared with the current\r
+                               <br>entry's <b>Network destination</b> value.</td>\r
+               </tr>\r
+               <tr>\r
+                       <td valign="top"><b>Next hop</b></td>\r
+                       <td>Used to define a router to which a datagram will be forwarded from current router in case\r
+                               <br><b>Network Destination</b> matches to defined prefix of datagram's target IP address.\r
+                               <br>Two different cases of selection are available for this field:\r
+                               <ol type="i" start="1">\r
+                                       <li>In case the datagram's destination network is not one of the networks that selected router\r
+                                               <br>is connected to, the user should select the next hop to be a router's IP address that will\r
+                                               <br>handle this datagram further.</li>\r
+                                       <li>In case the router is connected directly to datagram's destination network,\r
+                                       <br>then the user should select the IP address of the selected router (on this network).\r
+                                       <br>In other words, in case the value of this field is an address of the selected router\r
+                                       <br>itself, the system will attempt to send the datagram directly to the target host.</li>\r
+                               </ol></td>\r
+               </tr>\r
+               <tr>\r
+                       <td valign="top"><b>Interface</b></td>\r
+                       <td>Used to select router's network connection to which datagram will be forwarded if this routing table entry\r
+                               <br>will match the datagram's target IP address.</td>\r
+               </tr>\r
+       </table>\r
+       <br> In addition, to the right of each line, there is a "<b><i>Remove</i></b>" button that, when pressed, deletes the appropriate line from the table.\r
+       <br>\r
+       <br> To add a new empty line to routing table the user should click "<b><i>Add new line</i></b>" button. The empty line will appear\r
+       <br> and it must be properly configured, before saving the table or moving to another line in routing table.\r
+       <br>\r
+       <br> In order to create basic routing table, which will be based on current configuration, the user may click, "<b><i>Add entries for\r
+       <br> each interface</i></b>" button. This will add a line for each connected network, which configures the ability to\r
+       <br> forward datagrams directly to hosts that are connected to selected router's network.\r
+       <br>\r
+       <br> In order to create a default routing entry in routing table (to indicate where to forward a datagram that does not\r
+       <br> match any of other entries) the user may click "<b><i>Add default entry</i></b>" button. This will add a line where\r
+       <br> network destination and netmask will match to any datagram and all user has to do is to configure where the datagram\r
+       <br> should be forwarded.\r
+       <br>\r
+       <br>\r
+<li><a name="Connecting a router to a network"></a><u>Connect a router to networks \ Disconnect a router from networks</u>\r
+<br><font color="black" size="2" face="arial">Back to: <a href="#Top">Top</a> | <a href="#Questions">Questions</a> | <a href="#Router">Router</a></font></li>\r
+       <ul type="disc">\r
+       <br>Right clicking on the router will cause a menu to pop up.\r
+       <br>Choose "<i><b>Connect to Networks</b></i>".\r
+       <br><img src="9.jpg"><br>\r
+       <br>A bar will show up in the head of the applet indicating you are now connecting the router to a network.\r
+       <br><img src="30.jpg">\r
+       <br>\r
+       <br>A click on a network will mark it with a <font color="green" size="3" face="arial">green</font> rectangle.\r
+       <br>Another click will unmark the <font color="green" size="3" face="arial">green</font> rectangle.\r
+       <br>The <font color="green" size="3" face="arial">green</font> rectangle indicates that the router is connected to the\r
+       <br>network.\r
+       <br><img src="8.jpg">\r
+       <br>\r
+       <br>When you finish connecting \ disconnecting, click the button "<i><b>Done</b></i>" at the bar at the head of the panel.\r
+       <br>The connections you chose to make will be performed.\r
+       <br><img src="7.jpg">\r
+       <br>\r
+       <br></u></ul>\r
+<li><a name="Removing a router"></a><u>Remove a router</u>\r
+<br><font color="black" size="2" face="arial">Back to: <a href="#Top">Top</a> | <a href="#Questions">Questions</a> | <a href="#Router">Router</a></font></li>\r
+       <ul type="disc">\r
+       <br>Right clicking on a router will cause a menu to pop up.\r
+       <br>Choose "<i><b>Remove Router</b></i>".\r
+       <br><img src="28.jpg">\r
+       <br>\r
+       <br>The router will be removed from the main panel.\r
+       <br>\r
+       <br><a name="removedg"></a>If you'll choose to remove a router that is happen to be a default gateway\r
+       <br>of a certain network, three cases are possible:\r
+               <ol type="i" start="1">\r
+               <li><u>The network is not connected to other routers besides the default gateway</u>:\r
+               <br>In this case, a message notifying that the default gateway has been removed\r
+               <br>will be presented on the screen.</li>\r
+               <li><u>There's exactly one more router connected to the network besides the default gateway</u>:\r
+               <br>In this case, the other router will be automatically set to be the default gateway.</li>\r
+               <li><u>The network is connected to more than one router besides the default gateway</u>:\r
+               <br>In this case, the user will have the option to choose the default gateway of the network.</li>\r
+       </ol>\r
+       </ul>\r
+</ul>\r
+\r
+<br><br>---------------------------------------------------------------------------<br><br>\r
+\r
+<img src="19.gif"><br>\r
+<b>Host</b> <ul type="disc">\r
+<li><a name="Adding a host to a network"></a><u>Add a host to a network</u>\r
+<br><font color="black" size="2" face="arial">Back to: <a href="#Top">Top</a> | <a href="#Questions">Questions</a> | <a href="#Host">Host</a></font></li>\r
+       <ul type="disc">\r
+       <br>Right clicking on a network will cause a menu to pop up.\r
+       <br>Choose "<i><b>Add Host</b></i>" and a host will be added to the network.\r
+       <br><img src="2.jpg">\r
+       <br>\r
+       <br><a href="#Why can't I add a host to a network?"><b>FAQ</b></a> - "<i><b>Add Host</b></i>" is disabled. Why can't I add a host to a network?\r
+       <br><a href="#How does a host gets its IP address?"><b>FAQ</b></a> - How does a host gets its IP address?\r
+       <br>\r
+       <br></ul>\r
+<li><a name="Removing a host"></a><u>Remove a host</u>\r
+<br><font color="black" size="2" face="arial">Back to: <a href="#Top">Top</a> | <a href="#Questions">Questions</a> | <a href="#Host">Host</a></font></li>\r
+       <ul type="disc">\r
+       <br>Right clicking on a host will cause a menu to pop up.\r
+       <br>Choose "<i><b>Remove Host</b></i>". The host will be removed from the main panel.\r
+       <br><img src="26.jpg"><br></ul>\r
+</ul>\r
+\r
+<br><br>---------------------------------------------------------------------------<br><br>\r
+\r
+<img src="10.gif"><br>\r
+<b>Datagram</b> <ul type="disc">\r
+<li><a name="Adding a datagram"></a><u>Add a datagram</u>\r
+<br><font color="black" size="2" face="arial">Back to: <a href="#Top">Top</a> | <a href="#Questions">Questions</a> | <a href="#Datagram">Datagram</a></font></li>\r
+       <ul type="disc">\r
+       <br>Right clicking on the main panel will cause a menu to pop up.\r
+       <br>Choose "<i><b>Add Datagram</b></i>" and a new datagram will show up on the main panel.\r
+       <br><img src="1.jpg">\r
+       <br>\r
+       <br></ul>\r
+<li><a name="Editing a datagram"></a><u>Edit a datagram</u>\r
+<br><font color="black" size="2" face="arial">Back to: <a href="#Top">Top</a> | <a href="#Questions">Questions</a> | <a href="#Datagram">Datagram</a></font></li>\r
+       <ul type="disc"><br>\r
+       <li><a name="Setting a datagram's source & target hosts"></a><u>Set a datagram's source & target hosts</u></li>\r
+               <ul type="disc">\r
+               <br>Right clicking on a datagram will cause a menu to pop up.\r
+               <br>Choose "<i><b>Set Source & Target</b></i>".\r
+               <br><img src="34.jpg">\r
+               <br>\r
+               <br>A bar saying you now have to select the source host will appear\r
+               <br>at the head of the panel.\r
+               <br><img src="36.jpg">\r
+               <br>\r
+               <br>You can, obviously, select only one source.\r
+               <br>Select the source host by clicking it.\r
+               <br>A successful selection will result in marking the host with a green rectangle.\r
+               <br><img src="18.jpg">\r
+               <br>\r
+               <br>When finishing selecting the source host, click "<i><b>Done</b></i>" at the bar at the head of the panel.\r
+               <br>The bar will then instruct you to select the target host.\r
+               <br><img src="37.jpg">\r
+               <br>\r
+               <br>Repeat the process above for the target host.\r
+               <br>\r
+               <br></ul>\r
+       <li><a name="Setting a datagram's source host"></a><u>Set a datagram's source host</u>\r
+       <br><font color="black" size="2" face="arial">Back to: <a href="#Top">Top</a> | <a href="#Questions">Questions</a> | <a href="#Datagram">Datagram</a></font></li>\r
+               <ul type="disc">\r
+               <br>Right clicking on a datagram will cause a menu to pop up.\r
+               <br>Choose "<i><b>Set Source Only</b></i>".\r
+               <br><img src="33.jpg">\r
+               <br>\r
+               <br>A bar saying you now have to select the source host will appear\r
+               <br>at the head of the panel.\r
+               <br><img src="36.jpg">\r
+               <br>\r
+               <br>You can, obviously, select only one source.\r
+               <br>Select the source host by clicking it.\r
+               <br>A successful selection will result in marking the host with a green rectangle.\r
+               <br><img src="18.jpg">\r
+               <br>\r
+               <br>When finishing selecting the source host, click "<i><b>Done</b></i>" at the bar at the head of the panel.\r
+               <br>\r
+               <br></ul>\r
+       <li><a name="Setting a datagram's target host"></a><u>Set a datagram's target host</u>\r
+       <br><font color="black" size="2" face="arial">Back to: <a href="#Top">Top</a> | <a href="#Questions">Questions</a> | <a href="#Datagram">Datagram</a></font></li>\r
+               <ul type="disc">\r
+               <br>Right clicking on a datagram will cause a menu to pop up.\r
+               <br>Choose "<i><b>Set Target Only</b></i>".\r
+               <br><img src="35.jpg">\r
+               <br>\r
+               <br>A bar saying you now have to select the target host will appear\r
+               <br>at the head of the panel.\r
+               <br><img src="37.jpg">\r
+               <br>\r
+               <br>You can, obviously, select only one target.\r
+               <br>Select the target host by clicking it.\r
+               <br>A successful selection will result in marking the host with a green rectangle.\r
+               <br><img src="18.jpg">\r
+               <br>\r
+               <br>When finishing selecting the target host, click "<i><b>Done</b></i>" at the bar at the head of the panel.\r
+               <br>\r
+               <br></ul>\r
+       <li><a name="Setting a datagram's length"></a><u>Set a datagram's length</u>\r
+       <br><font color="black" size="2" face="arial">Back to: <a href="#Top">Top</a> | <a href="#Questions">Questions</a> | <a href="#Datagram">Datagram</a></font></li>\r
+               <ul type="disc">\r
+               <br>Right clicking on a datagram will cause a menu to pop up.\r
+               <br>Choose "<i><b>Edit Datagram</b></i>". A window with the datagram properties will be opened.\r
+               <br><img src="14.jpg">\r
+               <br>\r
+               <br>Double-clicking on a datagram will also open the same window.\r
+               <br>\r
+               <br>In that window you can select the datagram's length at the appropriate field.\r
+               <br><img src="11.jpg">\r
+               <br>\r
+               <br></ul>\r
+       <li><a name="Setting a datagram's TTL"></a><u>Set a datagram's TTL</u>\r
+       <br><font color="black" size="2" face="arial">Back to: <a href="#Top">Top</a> | <a href="#Questions">Questions</a> | <a href="#Datagram">Datagram</a></font></li>\r
+               <ul type="disc">\r
+               <br>Right clicking on a datagram will cause a menu to pop up.\r
+               <br>Choose "<i><b>Edit Datagram</b></i>". A window with the datagram properties will be opened.\r
+               <br><img src="14.jpg">\r
+               <br>\r
+               <br>Double-clicking on a datagram will also open the same window.\r
+               <br>\r
+               <br>In that window you can select the datagram's TTL at the appropriate field.\r
+               <br><img src="12.jpg">\r
+               <br>\r
+               <br></ul>\r
+       </ul>\r
+<li><a name="Sending a datagram"></a><u>Send a datagram</u>\r
+<br><font color="black" size="2" face="arial">Back to: <a href="#Top">Top</a> | <a href="#Questions">Questions</a> | <a href="#Datagram">Datagram</a></font></li>\r
+       <ul type="disc">\r
+       <br>Right clicking on a datagram will cause a menu to pop up.\r
+       <br>Choose "<i><b>Send Datagram</b></i>" and the datagram will be sent.\r
+       <br><img src="31.jpg">\r
+       <br>\r
+       <br>While sending a datagram a bar appears at the head of the main panel.\r
+       <br>This bar gives information concerning the datagram traveling through the network.\r
+       <br><img src="38.jpg">\r
+       <br>\r
+       <br>The "<b><i>Stop Simulation</i></b>" button will stop the simulation a short time after pressing it.\r
+       <br>\r
+       <br>When arriving a network, the bar will show the network's MTU:\r
+       <br><img src="39.jpg">\r
+       <br>\r
+       <br>When arriving a router, the bar will show the entry in the router routing table that was chosen:\r
+       <br><img src="40.jpg">\r
+       <br>\r
+       <br>The bar is also used for error reporting in the sending process.\r
+       <br>For example:\r
+       <br><img src="41.jpg">\r
+       <br><img src="42.jpg">\r
+       <br>And more...\r
+       <br>\r
+       <br><u>Datagram Fragmentation</u>\r
+       <br>In case the datagram has to be fragmented, the datagram icon will be changed from &nbsp; <img src="10.gif"> &nbsp; to &nbsp;<img src="44.gif">.\r
+       <br>Also, the number of fragments will be shown in the brackets, next to the fragmented datagram icon:\r
+       <br><img src="45.jpg">\r
+       <br>\r
+       <br>More information concerning the number of fragments, and the length of each fragment can be found\r
+       <br>in the bar at the head of the main panel:\r
+       <br><img src="46.jpg">\r
+       <br>\r
+       <br><a href="#Why can't I send a datagram?"><b>FAQ</b></a> - "<i><b>Send Datagram</b></i>" is disabled. Why can't I send my datagram?\r
+       <br>\r
+       <br></ul>\r
+<li><a name="Removing a datagram"></a><u>Remove a datagram</u>\r
+<br><font color="black" size="2" face="arial">Back to: <a href="#Top">Top</a> | <a href="#Questions">Questions</a> | <a href="#Datagram">Datagram</a></font></li>\r
+       <ul type="disc">\r
+       <br>Right clicking on a datagram will cause a menu to pop up.\r
+       <br>Choose "<i><b>Remove Datagram</b></i>". The datagram will be removed from the main panel.\r
+       <br><img src="25.jpg">\r
+       <br>\r
+       <br></ul>\r
+</ul>\r
+\r
+<br><br>---------------------------------------------------------------------------<br><br>\r
+\r
+\r
+<b>FAQ</b> <ul type="disc">\r
+<li><a name="PlaceNetworks"></a><u>What is the purpose of "<b><i>Place Networks</i></b>"?</u>\r
+<br><font color="black" size="2" face="arial">Back to: <a href="#Top">Top</a> | <a href="#Questions">Questions</a> | <a href="#FAQ">FAQ</a></font></li>\r
+       <ul type="disc">\r
+       <br>"<b><i>Place Networks</i></b>" menu item allows you to use predefined networks.\r
+       <br>These networks are built-in in the applet.\r
+       <br>After placing them on the panel, you may edit them as you like.\r
+       <br><img src="23.jpg">\r
+       <br>\r
+       <br>Three networks are available in the "<b><i>Place Networks</i></b>" menu:\r
+       <br>\r
+       <br>\r
+       <ol type="i" start="1">\r
+               <li><b>Star</b> - This network is constructed of three main networks connected using\r
+               <br>a router to each other. Each of these main networks is connected to another two\r
+               <br>"sub-networks".\r
+               <br>Hosts are allocated only in the "sub-networks".\r
+               <br>All routers are already configured to transfer datagrams between the hosts.\r
+               <br>Determine datagram's source and target, and send it.\r
+               <br>\r
+               <br>\r
+               </li>\r
+               <li><b>Loop</b> - This network simulates an error in the configuration of the routers.\r
+               <br>The source and the target of the datagram are already determined.\r
+               <br>Simply send the datagram and watch what happens.\r
+               <br>\r
+               <br>\r
+               </li>\r
+               <li><b>Long</b> - This network is constructed of a list of routers and networks.\r
+               <br>Routers are not configured.\r
+               <br>You may add networks, hosts, routers, datagrams and configure them as you like.\r
+               <br>\r
+               <br>\r
+               </li>\r
+       </ol>\r
+</ul>\r
+<li><a name="Why can't I add a host to a network?"></a><u>Why can't I add a host to a network?</u>\r
+<br><font color="black" size="2" face="arial">Back to: <a href="#Top">Top</a> | <a href="#Questions">Questions</a> | <a href="#FAQ">FAQ</a></font></li>\r
+       <ul type="disc">\r
+       <br>First <a href="#IPPoolDefine">define an IP address for your network</a>.\r
+       <br>Then, you will be able to add hosts to your network.\r
+       <br>\r
+       <br></ul>\r
+<li><a name="RemoveAll"></a><u>How can I remove all objects from main panel?</u>\r
+<br><font color="black" size="2" face="arial">Back to: <a href="#Top">Top</a> | <a href="#Questions">Questions</a> | <a href="#FAQ">FAQ</a></font></li>\r
+       <ul type="disc">\r
+       <br>A right click on the main panel will open a pop-up menu.\r
+       <br>Select "<i><b>Remove All</b></i>" and the main panel will be cleaned of objects.\r
+       <br><img src="24.jpg">\r
+       <br>\r
+<br></ul>\r
+<li><a name="Why can't I send a datagram?"></a><u>Why can't I send a datagram?</u>\r
+<br><font color="black" size="2" face="arial">Back to: <a href="#Top">Top</a> | <a href="#Questions">Questions</a> | <a href="#FAQ">FAQ</a></font></li>\r
+       <ul type="disc">\r
+       <br>First <a href="#Setting a datagram's source & target hosts">define the datagram's source and target</a>.\r
+       <br>Then, you will be able to send the datagram.\r
+       <br>\r
+       <br></ul>\r
+<li><a name="How does a host gets its IP address?"></a><u>How does a host get its IP address?</u>\r
+<br><font color="black" size="2" face="arial">Back to: <a href="#Top">Top</a> | <a href="#Questions">Questions</a> | <a href="#FAQ">FAQ</a></font></li>\r
+       <ul type="disc">\r
+       <br> After the user has defined an IP address for a network, the network is responsible for allocating IP\r
+       <br> addresses for any peripherals (hosts and routers) that are connected to it. The pool of addresses\r
+       <br> is defined by network address. When creating a new host or connecting a router to the network, a free\r
+       <br> address from the pool is allocated. When a host is being removed or a router is being disconnected\r
+       <br> from a network, its IP address is deallocated and returned to pool.\r
+       <br>\r
+       <br> Please note that allocation of addresses is not necessarily successive (e.g. for class C network\r
+       <br> 192.168.2.0 allocation of addresses for 2 hosts might return 192.168.2.1 and 192.168.2.3).\r
+       </ul>\r
+</ul>\r
+\r
+</font>\r
+\r
+</BODY>\r
+</HTML>
\ No newline at end of file