IPStack - Changed IPv4_Checksum to use a word count
[tpg/acess2.git] / Modules / IPStack / tcp.c
index 8ebf0ae..1600bb4 100644 (file)
@@ -64,6 +64,7 @@ Uint32        gaTCP_PortBitmap[0x800];
  */
 void TCP_Initialise(void)
 {
+       giTCP_NextOutPort += rand()%32;
        IPStack_AddFile(&gTCP_ServerFile);
        IPStack_AddFile(&gTCP_ClientFile);
        IPv4_RegisterCallback(IP4PROT_TCP, TCP_GetPacket);
@@ -89,7 +90,9 @@ void TCP_SendPacket( tTCPConnection *Conn, size_t Length, tTCPHeader *Data )
                buf[2] = (htons(Length)<<16) | (6<<8) | 0;
                Data->Checksum = 0;
                memcpy( &buf[3], Data, Length );
-               Data->Checksum = htons( IPv4_Checksum( buf, buflen ) );
+               if(Length & 1)
+                       ((Uint8*)buf)[12+Length] = 0;
+               Data->Checksum = htons( IPv4_Checksum( (Uint16*)buf, buflen/2 ) );
                free(buf);
                IPv4_SendPacket(Conn->Interface, Conn->RemoteIP.v4, IP4PROT_TCP, 0, Length, Data);
                break;
@@ -134,7 +137,7 @@ void TCP_GetPacket(tInterface *Interface, void *Address, int Length, void *Buffe
        {
                Log_Log("TCP", "TCP_GetPacket: SequenceNumber = 0x%x", ntohl(hdr->SequenceNumber));
                Debug_HexDump(
-                       "[TCP  ] Packet Data = ",
+                       "TCP_GetPacket: Packet Data = ",
                        (Uint8*)hdr + (hdr->DataOffset >> 4)*4,
                        Length - (hdr->DataOffset >> 4)*4
                        );
@@ -1064,7 +1067,7 @@ void TCP_INT_SendDataPacket(tTCPConnection *Connection, size_t Length, void *Dat
        packet->SourcePort = htons(Connection->LocalPort);
        packet->DestPort = htons(Connection->RemotePort);
        packet->DataOffset = (sizeof(tTCPHeader)/4)*16;
-       packet->WindowSize = TCP_WINDOW_SIZE;
+       packet->WindowSize = htons(TCP_WINDOW_SIZE);
        
        packet->AcknowlegementNumber = htonl(Connection->NextSequenceRcv);
        packet->SequenceNumber = htonl(Connection->NextSequenceSend);
@@ -1073,8 +1076,7 @@ void TCP_INT_SendDataPacket(tTCPConnection *Connection, size_t Length, void *Dat
        memcpy(packet->Options, Data, Length);
        
        Log_Debug("TCP", "Send sequence 0x%08x", Connection->NextSequenceSend);
-       Debug_HexDump("[TCP     ] TCP_INT_SendDataPacket: Data = ",
-               Data, Length);
+       Debug_HexDump("TCP_INT_SendDataPacket: Data = ", Data, Length);
        
        TCP_SendPacket( Connection, sizeof(tTCPHeader)+Length, packet );
        

UCC git Repository :: git.ucc.asn.au