X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Modules%2FIPStack%2Ftcp.c;h=1600bb46acd75e6f6b2f597c22f63af1233cb053;hb=9e4f0db5f7ccc535cb72d6ab2f96e201b050ef20;hp=8ebf0aee9fefe4f75af4689b994bf86d8e3a2312;hpb=de86ddb7cb10ee403732f9207aba756f267ef3de;p=tpg%2Facess2.git diff --git a/Modules/IPStack/tcp.c b/Modules/IPStack/tcp.c index 8ebf0aee..1600bb46 100644 --- a/Modules/IPStack/tcp.c +++ b/Modules/IPStack/tcp.c @@ -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 );