+ // If not a RST, send a RST
+ if( !(hdr->Flags & TCP_FLAG_RST) )
+ {
+ tTCPHeader out_hdr = {0};
+
+ out_hdr.DataOffset = (sizeof(out_hdr)/4) << 4;
+ out_hdr.DestPort = hdr->SourcePort;
+ out_hdr.SourcePort = hdr->DestPort;
+
+ size_t data_len = Length - (hdr->DataOffset>>4)*4;
+ out_hdr.AcknowlegementNumber = htonl( ntohl(hdr->SequenceNumber) + data_len );
+ if( hdr->Flags & TCP_FLAG_ACK ) {
+ out_hdr.Flags = TCP_FLAG_RST;
+ out_hdr.SequenceNumber = hdr->AcknowlegementNumber;
+ }
+ else {
+ out_hdr.Flags = TCP_FLAG_RST|TCP_FLAG_ACK;
+ out_hdr.SequenceNumber = 0;
+ }
+ TCP_int_SendPacket(Interface, Address, &out_hdr, 0, NULL);
+ }