Make Control Endpoint stream transfers more reliable by adding in early aborts for...
[pub/USBasp.git] / Demos / Device / ClassDriver / RNDISEthernet / Lib / TCP.c
index 6746433..c94495d 100644 (file)
@@ -381,19 +381,24 @@ int16_t TCP_ProcessTCPPacket(void* IPHeaderInStart, void* TCPHeaderInStart, void
                                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