memcpy(&hdr->Options[0], Data, Length);
hdr->Version = 4;
- hdr->HeaderLength = htons( sizeof(tIPv4Header) );
+ hdr->HeaderLength = sizeof(tIPv4Header)/4;
hdr->DiffServices = 0; // TODO: Check
hdr->TotalLength = htons( bufSize );
hdr->Identifcation = htons( ID ); // TODO: Check
//Log("[IPv4 ] Version = %i", hdr->Version);
Log("[IPv4 ] HeaderLength = %i", hdr->HeaderLength);
Log("[IPv4 ] DiffServices = %i", hdr->DiffServices);
- //Log("[IPv4 ] TotalLength = %i", ntohs(hdr->TotalLength) );
+ Log("[IPv4 ] TotalLength = %i", ntohs(hdr->TotalLength) );
//Log("[IPv4 ] Identifcation = %i", ntohs(hdr->Identifcation) );
//Log("[IPv4 ] TTL = %i", hdr->TTL );
Log("[IPv4 ] Protocol = %i", hdr->Protocol );
// Check Packet length
if( ntohs(hdr->TotalLength) > Length) {
- Log("[IPv4 ] hdr->TotalLength(%i) > Length(%i)", hdr->TotalLength, Length);
+ Log("[IPv4 ] hdr->TotalLength(%i) > Length(%i)", ntohs(hdr->TotalLength), Length);
return;
}
// Defragment
//TODO
- dataLength = hdr->TotalLength - sizeof(tIPv4Header);
+ dataLength = ntohs(hdr->TotalLength) - sizeof(tIPv4Header);
data = &hdr->Options[0];
// Send it on
Uint16 *arr = Buf;
int i;
+ Log("IPv4_Checksum: (%p, %i)", Buf, Size);
+
Size = (Size + 1) >> 1;
for(i = 0; i < Size; i++ )
{
sum ++; // Simulate 1's complement
sum += arr[i];
}
- return ~sum;
+ return htons( ~sum );
}
/**