/// <summary> /// Hardwarenode sends the package to specified destination. /// </summary> /// <param name="Destination">The destination.</param> /// <param name="Tags">Optional tags.</param> /// <param name="ValInfo"></param> /// <returns> /// The Hardwarenode which received the package or null if an error occured /// </returns> public override List <Hardwarenode> Send(Hardwarenode Destination, Dictionary <string, object> Tags, ValidationInfo ValInfo) { ValInfo.NextNodes = new List <Hardwarenode>(); ValInfo.Iface = null; for (int i = Layerstack.GetSize() - 1; i >= 0; i--) { int customLayerCount = 0; //Calculate the custom layer count before this layer for (int j = 0; j < i; j++) { if (Layerstack.GetLayer(j) is CustomLayer) { customLayerCount++; } } if (ValInfo.NextNodes == null) { continue; } Workstation dest = Destination as Workstation; if (dest != null) { Layerstack.GetLayer(i).ValidateSend(dest, this, ValInfo, Tags, i - customLayerCount); } else { throw new ArgumentException("Destination is no Workstation."); } } return(ValInfo.NextNodes); }
/// <summary> /// Initializes a new instance of the <see cref="Workstation" /> class. /// The IP address of the standardgateway must be set seperatly. /// </summary> /// <param name="Name">The Name.</param> public Workstation(string Name) : base(Name) { Layerstack.AddLayer(new PhysicalLayer(0)); Layerstack.AddLayer(new DataLinkLayer(1)); Layerstack.AddLayer(new NetworkLayer(2)); Layerstack.AddLayer(new TransportLayer(3)); Layerstack.AddLayer(new SessionLayer(4)); Layerstack.AddLayer(new PresentationLayer(5)); Layerstack.AddLayer(new ApplicationLayer(6)); Interfaces.Add(new Interface(new IPAddress(new byte[] { 192, 168, 0, 1 }), new IPAddress(new byte[] { 255, 255, 255, 0 }), getNewInterfaceNumber())); StandardGateway = null; StandardGatewayPort = null; }
/// <summary> /// Hardwarenode receives the package. /// </summary> /// <param name="Tags">Optional tags.</param> /// <param name="ValInfo">The validation Info</param> /// <param name="Destination">The destination</param> /// <returns> /// bool that indicates if the Hardwarenode received the package /// </returns> public override bool Receive(Dictionary <string, object> Tags, ValidationInfo ValInfo, Hardwarenode Destination) { bool res = true; int customLayerCount = 0; for (int i = 0; i < Layerstack.GetSize(); i++) { if (!res) { continue; } res = Layerstack.GetLayer(i).ValidateReceive(this, ValInfo, Tags, Destination, i - customLayerCount); if (Layerstack.GetLayer(i) is CustomLayer) { customLayerCount++; } } return(res); }