+
+ switch(AddrType)
+ {
+ case 4: {
+ Uint32 buf[3];
+ buf[0] = ((tIPv4*)LAddr)->L;
+ buf[1] = ((tIPv4*)RAddr)->L;
+ buf[2] = htonl( (packlen) | (IP4PROT_TCP<<16) | (0<<24) );
+ checksum[0] = htons( ~IPv4_Checksum(buf, sizeof(buf)) ); // Partial checksum
+ break; }
+ case 6: {
+ Uint32 buf[4+4+1+1];
+ memcpy(&buf[0], LAddr, 16);
+ memcpy(&buf[4], RAddr, 16);
+ buf[8] = htonl(packlen);
+ buf[9] = htonl(IP4PROT_TCP);
+ checksum[0] = htons( ~IPv4_Checksum(buf, sizeof(buf)) ); // Partial checksum
+ break; }
+ default:
+ return 0;
+ }
+ checksum[1] = htons( ~IPv4_Checksum(Header, HeaderLength) );
+ checksum[2] = htons( ~IPv4_Checksum(Data, DataLength) );
+
+ return htons( IPv4_Checksum(checksum, sizeof(checksum)) );
+}
+
+void TCP_int_SendPacket(tInterface *Interface, const void *Dest, tTCPHeader *Header, size_t Length, const void *Data )
+{
+ tIPStackBuffer *buffer = IPStack_Buffer_CreateBuffer(2 + IPV4_BUFFERS);
+ if( Length > 0 )