mirror of
https://github.com/danbulant/Cosmos
synced 2026-05-19 04:18:43 +00:00
Inhereit DHCPClient from UDPClient + remove static Client + Add more tests
This commit is contained in:
parent
854264457e
commit
c01d4b9f6a
4 changed files with 37 additions and 55 deletions
|
|
@ -1,4 +1,5 @@
|
|||
using Cosmos.HAL;
|
||||
using Cosmos.System.Network;
|
||||
using Cosmos.System.Network.ARP;
|
||||
using Cosmos.System.Network.Config;
|
||||
using Cosmos.System.Network.IPv4;
|
||||
|
|
@ -21,9 +22,31 @@ namespace NetworkTest
|
|||
|
||||
protected override void Run()
|
||||
{
|
||||
/**
|
||||
* Since DNS and DHCP are inherited and will call parent classes at creation. UDP, IP and EthernetFrame don't need tests
|
||||
**/
|
||||
/** Ethernet Packet Parsing Test **/
|
||||
byte[] ethernetPacketData = new byte[]
|
||||
{
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x0C, 0x29, 0xD5, 0xDB, 0x9D, 0x08, 0x00
|
||||
};
|
||||
EthernetPacket ethernetPacket = new EthernetPacket(ethernetPacketData);
|
||||
Equals(ethernetPacketData, ethernetPacket.RawData);
|
||||
|
||||
/** IP Packet Parsing Test **/
|
||||
byte[] ipPacketData = new byte[]
|
||||
{
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x0C, 0x29, 0xD5, 0xDB, 0x9D, 0x08, 0x00, 0x45, 0x00, 0x01, 0x16, 0x00, 0x00, 0x00, 0x00, 0x80, 0x11, 0x39,
|
||||
0xD8, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF
|
||||
};
|
||||
IPPacket ipPacket = new IPPacket(ipPacketData);
|
||||
Equals(ipPacketData, ipPacket.RawData);
|
||||
|
||||
/** UDP Packet Parsing Test **/
|
||||
byte[] udpPacketData = new byte[]
|
||||
{
|
||||
0x98, 0xFA, 0x9B, 0xD4, 0xEB, 0x29, 0xD8, 0xCE, 0x3A, 0x89, 0x3E, 0xD9, 0x08, 0x00, 0x45, 0x00, 0x00, 0x22, 0x0C, 0x74, 0x40, 0x00, 0x40, 0x11, 0xAA,
|
||||
0xBE, 0xC0, 0xA8, 0x01, 0x02, 0xC0, 0xA8, 0x01, 0x46, 0x10, 0x92, 0x10, 0x92, 0x00, 0x0E, 0x37, 0x22, 0x48, 0x65, 0x6C, 0x6C, 0x6F, 0x21
|
||||
};
|
||||
UDPPacket udpPacket = new UDPPacket(udpPacketData);
|
||||
Equals(udpPacketData, udpPacket.RawData);
|
||||
|
||||
/** DNS Packet Parsing Test **/
|
||||
byte[] dnsPacketData = new byte[]
|
||||
|
|
@ -35,15 +58,6 @@ namespace NetworkTest
|
|||
DNSPacket dnsPacket = new DNSPacket(dnsPacketData);
|
||||
Equals(dnsPacketData, dnsPacket.RawData);
|
||||
|
||||
/** UDP Packet Parsing Test **/
|
||||
byte[] udpPacketData = new byte[]
|
||||
{
|
||||
0x98, 0xFA, 0x9B, 0xD4, 0xEB, 0x29, 0xD8, 0xCE, 0x3A, 0x89, 0x3E, 0xD9, 0x08, 0x00, 0x45, 0x00, 0x00, 0x22, 0x0C, 0x74, 0x40, 0x00, 0x40, 0x11, 0xAA,
|
||||
0xBE, 0xC0, 0xA8, 0x01, 0x02, 0xC0, 0xA8, 0x01, 0x46, 0x10, 0x92, 0x10, 0x92, 0x00, 0x0E, 0x37, 0x22, 0x48, 0x65, 0x6C, 0x6C, 0x6F, 0x21
|
||||
};
|
||||
UDPPacket udpPacket = new UDPPacket(udpPacketData);
|
||||
Equals(udpPacketData, udpPacket.RawData);
|
||||
|
||||
/** DHCP Packet Parsing Test **/
|
||||
byte[] dhcpPacketData = new byte[]
|
||||
{
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@ namespace Cosmos.System.Network
|
|||
/// Create new instance of the <see cref="EthernetPacket"/> class, with specified raw data.
|
||||
/// </summary>
|
||||
/// <param name="rawData">Raw data.</param>
|
||||
protected EthernetPacket(byte[] rawData)
|
||||
public EthernetPacket(byte[] rawData)
|
||||
{
|
||||
RawData = rawData;
|
||||
InitFields();
|
||||
|
|
|
|||
|
|
@ -16,18 +16,8 @@ namespace Cosmos.System.Network.IPv4.UDP.DHCP
|
|||
/// <summary>
|
||||
/// DHCPClient class. Used to manage the DHCP connection to a server.
|
||||
/// </summary>
|
||||
public class DHCPClient
|
||||
public class DHCPClient : UdpClient
|
||||
{
|
||||
/// <summary>
|
||||
/// Current DHCPClient
|
||||
/// </summary>
|
||||
public static DHCPClient currentClient;
|
||||
|
||||
// <summary>
|
||||
/// RX buffer queue.
|
||||
/// </summary>
|
||||
protected Queue<DHCPPacket> rxBuffer;
|
||||
|
||||
// <summary>
|
||||
/// Is DHCP ascked check variable
|
||||
/// </summary>
|
||||
|
|
@ -43,34 +33,12 @@ namespace Cosmos.System.Network.IPv4.UDP.DHCP
|
|||
}
|
||||
|
||||
/// <summary>
|
||||
/// Create new instance of the <see cref="UdpClient"/> class.
|
||||
/// Create new instance of the <see cref="DHCPClient"/> class.
|
||||
/// </summary>
|
||||
/// <exception cref="ArgumentOutOfRangeException">Thrown on fatal error (contact support).</exception>
|
||||
/// <exception cref="ArgumentException">Thrown if UdpClient with localPort 0 exists.</exception>
|
||||
public DHCPClient()
|
||||
/// <exception cref="ArgumentException">Thrown if UdpClient with localPort 53 exists.</exception>
|
||||
public DHCPClient() : base(68)
|
||||
{
|
||||
rxBuffer = new Queue<DHCPPacket>(8);
|
||||
currentClient = this;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Close connection.
|
||||
/// </summary>
|
||||
/// <exception cref="ArgumentOutOfRangeException">Thrown on fatal error (contact support).</exception>
|
||||
public void Close()
|
||||
{
|
||||
currentClient = null;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Receive data from packet.
|
||||
/// </summary>
|
||||
/// <param name="packet">Packet to receive.</param>
|
||||
/// <exception cref="OverflowException">Thrown on fatal error (contact support).</exception>
|
||||
/// <exception cref="Sys.IO.IOException">Thrown on IO error.</exception>
|
||||
internal void ReceiveData(DHCPPacket packet)
|
||||
{
|
||||
rxBuffer.Enqueue(packet);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
|
@ -90,14 +58,14 @@ namespace Cosmos.System.Network.IPv4.UDP.DHCP
|
|||
{
|
||||
return -1;
|
||||
}
|
||||
if (_deltaT != Cosmos.HAL.RTC.Second)
|
||||
if (_deltaT != RTC.Second)
|
||||
{
|
||||
second++;
|
||||
_deltaT = Cosmos.HAL.RTC.Second;
|
||||
_deltaT = RTC.Second;
|
||||
}
|
||||
}
|
||||
|
||||
var packet = rxBuffer.Dequeue();
|
||||
var packet = new DHCPPacket(rxBuffer.Dequeue().RawData);
|
||||
|
||||
if (packet.MessageType == 2) //Boot Reply
|
||||
{
|
||||
|
|
@ -107,7 +75,7 @@ namespace Cosmos.System.Network.IPv4.UDP.DHCP
|
|||
}
|
||||
else if (packet.RawData[284] == 0x05 || packet.RawData[284] == 0x06) //ACK or NAK DHCP packet received
|
||||
{
|
||||
DHCPAck ack = new DHCPAck(packet.RawData);
|
||||
var ack = new DHCPAck(packet.RawData);
|
||||
if (asked)
|
||||
{
|
||||
Apply(ack, true);
|
||||
|
|
|
|||
|
|
@ -51,9 +51,9 @@ namespace Cosmos.System.Network.IPv4.UDP.DHCP
|
|||
/// <exception cref="sysIO.IOException">Thrown on IO error.</exception>
|
||||
public static void DHCPHandler(byte[] packetData)
|
||||
{
|
||||
DHCPPacket dhcp_packet = new DHCPPacket(packetData);
|
||||
var dhcp_packet = new DHCPPacket(packetData);
|
||||
|
||||
DHCPClient receiver = DHCPClient.currentClient;
|
||||
var receiver = UdpClient.GetClient(dhcp_packet.DestinationPort);
|
||||
if (receiver != null)
|
||||
{
|
||||
receiver.ReceiveData(dhcp_packet);
|
||||
|
|
|
|||
Loading…
Reference in a new issue