@@ -45,7 +45,10 @@ bool TransmissionControlProtocolSocket::HandleTransmissionControlProtocolMessage
45
45
46
46
void TransmissionControlProtocolSocket::Send (uint8_t * data, uint16_t size)
47
47
{
48
- backend->Send (this , data, size);
48
+ while (state != ESTABLISHED)
49
+ {
50
+ }
51
+ backend->Send (this , data, size, PSH|ACK);
49
52
}
50
53
51
54
void TransmissionControlProtocolSocket::Disconnect ()
@@ -78,10 +81,10 @@ TransmissionControlProtocolProvider::~TransmissionControlProtocolProvider()
78
81
79
82
uint32_t bigEndian32 (uint32_t x)
80
83
{
81
- return (x & 0xFF000000 ) >> 24
82
- | (x & 0x00FF0000 ) >> 8
83
- | (x & 0x0000FF00 ) << 8
84
- | (x & 0x000000FF ) << 24 ;
84
+ return (( x & 0xFF000000 ) >> 24 )
85
+ | (( x & 0x00FF0000 ) >> 8 )
86
+ | (( x & 0x0000FF00 ) << 8 )
87
+ | (( x & 0x000000FF ) << 24 ) ;
85
88
}
86
89
87
90
@@ -103,7 +106,7 @@ bool TransmissionControlProtocolProvider::OnInternetProtocolReceived(uint32_t sr
103
106
if ( sockets[i]->localPort == msg->dstPort
104
107
&& sockets[i]->localIP == dstIP_BE
105
108
&& sockets[i]->state == LISTEN
106
- && ((msg -> flags) & (SYN | ACK) == SYN))
109
+ && ((( msg -> flags) & (SYN | ACK) ) == SYN))
107
110
socket = sockets[i];
108
111
else if ( sockets[i]->localPort == msg->dstPort
109
112
&& sockets[i]->localIP == dstIP_BE
@@ -198,7 +201,7 @@ bool TransmissionControlProtocolProvider::OnInternetProtocolReceived(uint32_t sr
198
201
else if (socket->state == CLOSE_WAIT)
199
202
{
200
203
socket->state = CLOSED;
201
- return false ;
204
+ break ;
202
205
}
203
206
204
207
if (msg->flags == ACK)
@@ -214,7 +217,11 @@ bool TransmissionControlProtocolProvider::OnInternetProtocolReceived(uint32_t sr
214
217
size - msg->headerSize32 *4 ));
215
218
if (!reset)
216
219
{
217
- socket->acknowledgementNumber += size-msg->headerSize32 *4 ;
220
+ int x = 0 ;
221
+ for (int i = msg->headerSize32 *4 ; i < size; i++)
222
+ if (internetprotocolPayload[i] != 0 )
223
+ x = i;
224
+ socket->acknowledgementNumber += x - msg->headerSize32 *4 + 1 ;
218
225
Send (socket, 0 ,0 , ACK);
219
226
}
220
227
}
@@ -230,8 +237,21 @@ bool TransmissionControlProtocolProvider::OnInternetProtocolReceived(uint32_t sr
230
237
231
238
if (reset)
232
239
{
233
-
234
- return true ;
240
+ if (socket != 0 )
241
+ {
242
+ Send (socket, 0 ,0 , RST);
243
+ }
244
+ else
245
+ {
246
+ TransmissionControlProtocolSocket socket (this );
247
+ socket.remotePort = msg->srcPort ;
248
+ socket.remoteIP = srcIP_BE;
249
+ socket.localPort = msg->dstPort ;
250
+ socket.localIP = dstIP_BE;
251
+ socket.sequenceNumber = bigEndian32 (msg->acknowledgementNumber );
252
+ socket.acknowledgementNumber = bigEndian32 (msg->sequenceNumber ) + 1 ;
253
+ Send (&socket, 0 ,0 , RST);
254
+ }
235
255
}
236
256
237
257
0 commit comments