case TCP_Connection_Listen:\r
if (TCPHeaderIN->Flags == TCP_FLAG_SYN)\r
{\r
- /* SYN connection when closed starts a connection with a peer */\r
+ /* SYN connection starts a connection with a peer */\r
+ if (TCP_SetConnectionState(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress,\r
+ TCPHeaderIN->SourcePort, TCP_Connection_SYNReceived))\r
+ {\r
+ TCPHeaderOUT->Flags = (TCP_FLAG_SYN | TCP_FLAG_ACK); \r
\r
- TCPHeaderOUT->Flags = (TCP_FLAG_SYN | TCP_FLAG_ACK); \r
- PacketResponse = true;\r
- \r
- TCP_SetConnectionState(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress, TCPHeaderIN->SourcePort,\r
- TCP_Connection_SYNReceived);\r
- \r
- ConnectionInfo = TCP_GetConnectionInfo(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress, TCPHeaderIN->SourcePort);\r
+ ConnectionInfo = TCP_GetConnectionInfo(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress, TCPHeaderIN->SourcePort);\r
\r
- ConnectionInfo->SequenceNumberIn = (SwapEndian_32(TCPHeaderIN->SequenceNumber) + 1);\r
- ConnectionInfo->SequenceNumberOut = 0;\r
- ConnectionInfo->Buffer.InUse = false;\r
+ ConnectionInfo->SequenceNumberIn = (SwapEndian_32(TCPHeaderIN->SequenceNumber) + 1);\r
+ ConnectionInfo->SequenceNumberOut = 0;\r
+ ConnectionInfo->Buffer.InUse = false;\r
+ }\r
+ else\r
+ {\r
+ TCPHeaderOUT->Flags = TCP_FLAG_RST;\r
+ }\r
+ \r
+ PacketResponse = true;\r
}\r
\r
break;\r