* tcp_header::urgent_offset must be set in network byte order as well.
* Cleanup. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25243 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -349,9 +349,11 @@ add_tcp_header(net_address_module_info *addressModule,
|
||||
buffer->protocol = IPPROTO_TCP;
|
||||
|
||||
uint8 optionsBuffer[kMaxOptionSize];
|
||||
uint32 optionsLength = add_options(segment, optionsBuffer, sizeof(optionsBuffer));
|
||||
uint32 optionsLength = add_options(segment, optionsBuffer,
|
||||
sizeof(optionsBuffer));
|
||||
|
||||
NetBufferPrepend<tcp_header> bufferHeader(buffer, sizeof(tcp_header) + optionsLength);
|
||||
NetBufferPrepend<tcp_header> bufferHeader(buffer,
|
||||
sizeof(tcp_header) + optionsLength);
|
||||
if (bufferHeader.Status() != B_OK)
|
||||
return bufferHeader.Status();
|
||||
|
||||
@@ -367,17 +369,20 @@ add_tcp_header(net_address_module_info *addressModule,
|
||||
header.flags = segment.flags;
|
||||
header.advertised_window = htons(segment.advertised_window);
|
||||
header.checksum = 0;
|
||||
header.urgent_offset = segment.urgent_offset;
|
||||
header.urgent_offset = htons(segment.urgent_offset);
|
||||
|
||||
// we must detach before calculating the checksum as we may
|
||||
// not have a contiguous buffer.
|
||||
bufferHeader.Sync();
|
||||
|
||||
if (optionsLength > 0)
|
||||
gBufferModule->write(buffer, sizeof(tcp_header), optionsBuffer, optionsLength);
|
||||
if (optionsLength > 0) {
|
||||
gBufferModule->write(buffer, sizeof(tcp_header), optionsBuffer,
|
||||
optionsLength);
|
||||
}
|
||||
|
||||
TRACE(("add_tcp_header(): buffer %p, flags 0x%x, seq %lu, ack %lu, win %u\n", buffer,
|
||||
segment.flags, segment.sequence, segment.acknowledge, segment.advertised_window));
|
||||
TRACE(("add_tcp_header(): buffer %p, flags 0x%x, seq %lu, ack %lu, up %lu, "
|
||||
"win %u\n", buffer, segment.flags, segment.sequence,
|
||||
segment.acknowledge, segment.urgent_offset, segment.advertised_window));
|
||||
|
||||
*TCPChecksumField(buffer) = Checksum::PseudoHeader(addressModule,
|
||||
gBufferModule, buffer, IPPROTO_TCP);
|
||||
@@ -729,15 +734,16 @@ tcp_init()
|
||||
if (status < B_OK)
|
||||
return status;
|
||||
|
||||
status = gStackModule->register_domain_protocols(AF_INET, SOCK_STREAM, IPPROTO_TCP,
|
||||
status = gStackModule->register_domain_protocols(AF_INET, SOCK_STREAM,
|
||||
IPPROTO_TCP,
|
||||
"network/protocols/tcp/v1",
|
||||
"network/protocols/ipv4/v1",
|
||||
NULL);
|
||||
if (status < B_OK)
|
||||
return status;
|
||||
|
||||
status = gStackModule->register_domain_receiving_protocol(AF_INET, IPPROTO_TCP,
|
||||
"network/protocols/tcp/v1");
|
||||
status = gStackModule->register_domain_receiving_protocol(AF_INET,
|
||||
IPPROTO_TCP, "network/protocols/tcp/v1");
|
||||
if (status < B_OK)
|
||||
return status;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user