update Window Scaling variables when a simultaneous open is ACKed.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20730 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -802,13 +802,7 @@ TCPEndpoint::Spawn(TCPEndpoint *parent, tcp_segment_header &segment,
|
||||
fSendMaxSegmentSize = segment.max_segment_size;
|
||||
else
|
||||
fReceiveMaxSegmentSize = TCP_DEFAULT_MAX_SEGMENT_SIZE;
|
||||
if (segment.has_window_shift) {
|
||||
fFlags |= FLAG_OPTION_WINDOW_SCALE;
|
||||
fSendWindowShift = segment.window_shift;
|
||||
} else {
|
||||
fFlags &= ~FLAG_OPTION_WINDOW_SCALE;
|
||||
fReceiveWindowShift = 0;
|
||||
}
|
||||
_CheckWindowScale(segment);
|
||||
}
|
||||
|
||||
_UpdateTimestamps(segment, 0, false);
|
||||
@@ -859,13 +853,8 @@ TCPEndpoint::_SynchronizeSentReceive(tcp_segment_header &segment, net_buffer *bu
|
||||
fSendMaxSegmentSize = segment.max_segment_size;
|
||||
else
|
||||
fReceiveMaxSegmentSize = TCP_DEFAULT_MAX_SEGMENT_SIZE;
|
||||
if (segment.has_window_shift) {
|
||||
fFlags |= FLAG_OPTION_WINDOW_SCALE;
|
||||
fSendWindowShift = segment.window_shift;
|
||||
} else {
|
||||
fFlags &= ~FLAG_OPTION_WINDOW_SCALE;
|
||||
fReceiveWindowShift = 0;
|
||||
}
|
||||
|
||||
_CheckWindowScale(segment);
|
||||
|
||||
if (segment.flags & TCP_FLAG_ACKNOWLEDGE) {
|
||||
_MarkEstablished();
|
||||
@@ -1394,8 +1383,8 @@ TCPEndpoint::_Receive(tcp_segment_header &segment, net_buffer *buffer)
|
||||
if ((segment.flags & TCP_FLAG_ACKNOWLEDGE) != 0) {
|
||||
// process acknowledged data
|
||||
if (fState == SYNCHRONIZE_RECEIVED) {
|
||||
// TODO: window scaling!
|
||||
_MarkEstablished();
|
||||
_CheckWindowScale(segment);
|
||||
}
|
||||
|
||||
if (fSendMax < segment.acknowledge || fState == TIME_WAIT)
|
||||
@@ -1589,6 +1578,19 @@ TCPEndpoint::_AddData(tcp_segment_header &segment, net_buffer *buffer)
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
TCPEndpoint::_CheckWindowScale(tcp_segment_header &segment)
|
||||
{
|
||||
if (segment.has_window_shift) {
|
||||
fFlags |= FLAG_OPTION_WINDOW_SCALE;
|
||||
fSendWindowShift = segment.window_shift;
|
||||
} else {
|
||||
fFlags &= ~FLAG_OPTION_WINDOW_SCALE;
|
||||
fReceiveWindowShift = 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// #pragma mark - timer
|
||||
|
||||
|
||||
|
||||
@@ -102,6 +102,7 @@ class TCPEndpoint : public net_protocol {
|
||||
void _MarkEstablished();
|
||||
status_t _WaitForEstablished(RecursiveLocker &lock, bigtime_t timeout);
|
||||
void _AddData(tcp_segment_header &segment, net_buffer *buffer);
|
||||
void _CheckWindowScale(tcp_segment_header &segment);
|
||||
|
||||
static void _TimeWaitTimer(net_timer *timer, void *data);
|
||||
static void _RetransmitTimer(net_timer *timer, void *data);
|
||||
|
||||
Reference in New Issue
Block a user