Lines Matching defs:segment

97 add_options(tcp_segment_header &segment, uint8 *buffer, size_t bufferSize)
105 if (segment.max_segment_size > 0 && length + 8 <= bufferSize) {
108 option->max_segment_size = htons(segment.max_segment_size);
112 if ((segment.options & TCP_HAS_TIMESTAMPS) != 0
114 if ((segment.options & TCP_SACK_PERMITTED) != 0) {
128 option->timestamp.value = htonl(segment.timestamp_value);
129 option->timestamp.reply = htonl(segment.timestamp_reply);
131 } else if ((segment.options & TCP_SACK_PERMITTED) != 0
143 if ((segment.options & TCP_HAS_WINDOW_SCALE) != 0
151 option->window_shift = segment.window_shift;
155 if (segment.sackCount > 0) {
157 if (sackCount > segment.sackCount)
158 sackCount = segment.sackCount;
167 memcpy(option->sack, segment.sacks, sackCount * sizeof(tcp_sack));
184 process_options(tcp_segment_header &segment, net_buffer *buffer, size_t size)
213 segment.max_segment_size = ntohs(option->max_segment_size);
217 segment.options |= TCP_HAS_WINDOW_SCALE;
218 segment.window_shift = option->window_shift;
223 segment.options |= TCP_HAS_TIMESTAMPS;
224 segment.timestamp_value = ntohl(option->timestamp.value);
225 segment.timestamp_reply =
231 segment.options |= TCP_SACK_PERMITTED;
235 segment.options |= TCP_HAS_SACK;
236 segment.sackCount = min_c((option->length - 2)
238 for(int i = 0; i < segment.sackCount; ++i) {
239 segment.sacks[i].left_edge = ntohl(
241 segment.sacks[i].right_edge = ntohl(
396 tcp_segment_header& segment, net_buffer* buffer)
401 uint32 optionsLength = add_options(segment, optionsBuffer,
413 header.sequence = htonl(segment.sequence);
414 header.acknowledge = (segment.flags & TCP_FLAG_ACKNOWLEDGE)
415 ? htonl(segment.acknowledge) : 0;
418 header.flags = segment.flags;
419 header.advertised_window = htons(segment.advertised_window);
421 header.urgent_offset = htons(segment.urgent_offset);
433 "win %u\n", buffer, segment.flags, segment.sequence,
434 segment.acknowledge, segment.urgent_offset, segment.advertised_window));
444 tcp_options_length(tcp_segment_header& segment)
448 if (segment.max_segment_size > 0)
451 if ((segment.options & TCP_HAS_TIMESTAMPS) != 0)
453 else if ((segment.options & TCP_SACK_PERMITTED) != 0)
456 if ((segment.options & TCP_HAS_WINDOW_SCALE) != 0)
459 if (segment.sackCount > 0) {
461 / sizeof(tcp_sack)), segment.sackCount);
714 tcp_segment_header segment(header.flags);
715 segment.sequence = header.Sequence();
716 segment.acknowledge = header.Acknowledge();
717 segment.advertised_window = header.AdvertisedWindow();
718 segment.urgent_offset = header.UrgentOffset();
719 process_options(segment, buffer, headerLength - sizeof(tcp_header));
735 segmentAction = endpoint->SegmentReceived(segment, buffer);
738 // while handling a segment. If this flag is set in segmentAction
744 } else if ((segment.flags & TCP_FLAG_RESET) == 0)
749 endpointManager->ReplyWithReset(segment, buffer);