* 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:
Axel Dörfler
2008-04-29 12:31:57 +00:00
parent b18927737f
commit 63cf342664
@@ -349,9 +349,11 @@ add_tcp_header(net_address_module_info *addressModule,
buffer->protocol = IPPROTO_TCP; buffer->protocol = IPPROTO_TCP;
uint8 optionsBuffer[kMaxOptionSize]; 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) if (bufferHeader.Status() != B_OK)
return bufferHeader.Status(); return bufferHeader.Status();
@@ -367,17 +369,20 @@ add_tcp_header(net_address_module_info *addressModule,
header.flags = segment.flags; header.flags = segment.flags;
header.advertised_window = htons(segment.advertised_window); header.advertised_window = htons(segment.advertised_window);
header.checksum = 0; 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 // we must detach before calculating the checksum as we may
// not have a contiguous buffer. // not have a contiguous buffer.
bufferHeader.Sync(); bufferHeader.Sync();
if (optionsLength > 0) if (optionsLength > 0) {
gBufferModule->write(buffer, sizeof(tcp_header), optionsBuffer, optionsLength); 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, TRACE(("add_tcp_header(): buffer %p, flags 0x%x, seq %lu, ack %lu, up %lu, "
segment.flags, segment.sequence, segment.acknowledge, segment.advertised_window)); "win %u\n", buffer, segment.flags, segment.sequence,
segment.acknowledge, segment.urgent_offset, segment.advertised_window));
*TCPChecksumField(buffer) = Checksum::PseudoHeader(addressModule, *TCPChecksumField(buffer) = Checksum::PseudoHeader(addressModule,
gBufferModule, buffer, IPPROTO_TCP); gBufferModule, buffer, IPPROTO_TCP);
@@ -729,15 +734,16 @@ tcp_init()
if (status < B_OK) if (status < B_OK)
return status; 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/tcp/v1",
"network/protocols/ipv4/v1", "network/protocols/ipv4/v1",
NULL); NULL);
if (status < B_OK) if (status < B_OK)
return status; return status;
status = gStackModule->register_domain_receiving_protocol(AF_INET, IPPROTO_TCP, status = gStackModule->register_domain_receiving_protocol(AF_INET,
"network/protocols/tcp/v1"); IPPROTO_TCP, "network/protocols/tcp/v1");
if (status < B_OK) if (status < B_OK)
return status; return status;