diff --git a/source/Cosmos.System2/Network/IPv4/TCP/TCPClient.cs b/source/Cosmos.System2/Network/IPv4/TCP/TCPClient.cs
index 570cee12c..f8eb93c1f 100644
--- a/source/Cosmos.System2/Network/IPv4/TCP/TCPClient.cs
+++ b/source/Cosmos.System2/Network/IPv4/TCP/TCPClient.cs
@@ -119,15 +119,13 @@ namespace Cosmos.System.Network.IPv4.TCP
///
/// Destination address.
/// Destination port.
- public void Connect(Address dest, int destPort, int timeout = 5000)
+ public bool Connect(Address dest, int destPort, int timeout = 5000)
{
destination = dest;
destinationPort = destPort;
source = IPConfig.FindNetwork(dest);
- global::System.Console.WriteLine(source.ToString());
-
byte[] options = new byte[]
{
0x02, 0x04, 0x05, 0xB4, 0x01, 0x03, 0x03, 0x08, 0x01, 0x01, 0x04, 0x02
@@ -138,15 +136,15 @@ namespace Cosmos.System.Network.IPv4.TCP
ulong sequencenumber = (ulong)((rnd.Next(0, Int32.MaxValue)) << 32) | (ulong)(rnd.Next(0, Int32.MaxValue));
// Flags=0x02 -> Syn
- var packet = new TCPPacket(source, dest, (ushort)localPort, (ushort)destPort, sequencenumber, 0, (ushort)(20 + options.Length), 0x02, 0xFAF0, 0, (ushort)options.Length, options);
+ var packet = new TCPPacket(source, destination, (ushort)localPort, (ushort)destPort, sequencenumber, 0, (ushort)(20 + options.Length), 0x02, 0xFAF0, 0, (ushort)options.Length, options);
OutgoingBuffer.AddPacket(packet);
NetworkStack.Update();
- WaitForConnectionResponse(timeout);
+ return WaitForConnectionResponse(timeout);
}
- private void WaitForConnectionResponse(int timeout)
+ private bool WaitForConnectionResponse(int timeout)
{
int second = 0;
int _deltaT = 0;
@@ -155,7 +153,7 @@ namespace Cosmos.System.Network.IPv4.TCP
{
if (second > (timeout / 1000))
{
- return;
+ return false;
}
if (_deltaT != RTC.Second)
{
@@ -164,24 +162,30 @@ namespace Cosmos.System.Network.IPv4.TCP
}
}
- var packet = new TCPPacket(rxBuffer.Dequeue().RawData);
+ var packet = rxBuffer.Dequeue();
if (packet.Flags == 0x12) // SYN/ACK
{
SendAck(packet);
+
+ Global.mDebugger.Send("TCP Connection established!");
+
+ Connected = true;
+
+ return true;
+ }
+ else
+ {
+ return false;
}
}
private void SendAck(TCPPacket responsepacket)
{
- var packet = new TCPPacket(source, destination, (ushort)localPort, (ushort)localPort, responsepacket.AckNumber, responsepacket.SequenceNumber + 1, 20, 0x10, 0xFAF0, 0, 0);
+ var packet = new TCPPacket(source, destination, (ushort)localPort, (ushort)localPort, responsepacket.AckNumber, responsepacket.SequenceNumber + 1, 20, 0x10, 0xFAF0, 0);
OutgoingBuffer.AddPacket(packet);
NetworkStack.Update();
-
- Global.mDebugger.Send("TCP Connection established!");
-
- Connected = true;
}
///
diff --git a/source/Cosmos.System2/Network/IPv4/TCP/TCPPacket.cs b/source/Cosmos.System2/Network/IPv4/TCP/TCPPacket.cs
index f60521e54..f84031789 100644
--- a/source/Cosmos.System2/Network/IPv4/TCP/TCPPacket.cs
+++ b/source/Cosmos.System2/Network/IPv4/TCP/TCPPacket.cs
@@ -226,29 +226,25 @@ namespace Cosmos.System.Network.IPv4.TCP
/// byte array value.
internal byte[] MakeHeader()
{
- /* Pseudo Header */
byte[] header = new byte[12 + (RawData.Length - DataOffset)];
+ /* Pseudo Header */
//Addresses
for (int b = 0; b < 4; b++)
{
header[0 + b] = SourceIP.address[b];
header[4 + b] = DestinationIP.address[b];
}
-
//Reserved
header[8] = 0x00;
-
//Protocol (TCP)
header[9] = 0x06;
-
ushort tcplen = (ushort)(RawData.Length - DataOffset);
-
//TCP Length
header[10] = (byte)((tcplen >> 8) & 0xFF);
header[11] = (byte)((tcplen >> 0) & 0xFF);
- /** TCP Packet **/
+ /* TCP Packet */
for (int i = 0; i < RawData.Length - DataOffset; i++)
{
header[12 + i] = RawData[DataOffset + i];