MCPcopy Create free account
hub / github.com/ddnet/ddnet / SendPacket

Method SendPacket

src/engine/shared/network.cpp:172–249  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

170}
171
172void CNetBase::SendPacket(NETSOCKET Socket, NETADDR *pAddr, CNetPacketConstruct *pPacket, SECURITY_TOKEN SecurityToken, bool Sixup)
173{
174 dbg_assert(IsValidConnectionOrientedPacket(pPacket), "Invalid packet to send. Flags=%d Ack=%d NumChunks=%d Size=%d",
175 pPacket->m_Flags, pPacket->m_Ack, pPacket->m_NumChunks, pPacket->m_DataSize);
176 dbg_assert((pPacket->m_Flags & NET_PACKETFLAG_COMPRESSION) == 0, "Do not set NET_PACKETFLAG_COMPRESSION, it will be set automatically when appropriate");
177
178 unsigned char aBuffer[NET_MAX_PACKETSIZE];
179
180 // log the data
181 if(ms_DataLogSent)
182 {
183 int Type = 1;
184 io_write(ms_DataLogSent, &Type, sizeof(Type));
185 io_write(ms_DataLogSent, &pPacket->m_DataSize, sizeof(pPacket->m_DataSize));
186 io_write(ms_DataLogSent, &pPacket->m_aChunkData, pPacket->m_DataSize);
187 io_flush(ms_DataLogSent);
188 }
189
190 int HeaderSize = NET_PACKETHEADERSIZE;
191 if(Sixup)
192 {
193 HeaderSize += sizeof(SecurityToken);
194 WriteSecurityToken(aBuffer + 3, SecurityToken);
195 }
196 else if(SecurityToken != NET_SECURITY_TOKEN_UNSUPPORTED)
197 {
198 // append security token
199 // if SecurityToken is NET_SECURITY_TOKEN_UNKNOWN we will still append it hoping to negotiate it
200 WriteSecurityToken(pPacket->m_aChunkData + pPacket->m_DataSize, SecurityToken);
201 pPacket->m_DataSize += sizeof(SecurityToken);
202 }
203
204 // only compress non-control packets
205 int CompressedSize = -1;
206 if((pPacket->m_Flags & NET_PACKETFLAG_CONTROL) == 0)
207 {
208 CompressedSize = ms_Huffman.Compress(pPacket->m_aChunkData, pPacket->m_DataSize, &aBuffer[HeaderSize], NET_MAX_PACKETSIZE - HeaderSize);
209 }
210
211 // check if the compression was enabled, successful and good enough
212 int FinalSize;
213 if(CompressedSize > 0 && CompressedSize < pPacket->m_DataSize)
214 {
215 FinalSize = CompressedSize;
216 pPacket->m_Flags |= NET_PACKETFLAG_COMPRESSION;
217 }
218 else
219 {
220 // use uncompressed data
221 FinalSize = pPacket->m_DataSize;
222 mem_copy(&aBuffer[HeaderSize], pPacket->m_aChunkData, pPacket->m_DataSize);
223 }
224
225 if(Sixup)
226 {
227 pPacket->m_Flags = PacketFlags_SixToSeven(pPacket->m_Flags);
228 }
229

Callers

nothing calls this directly

Calls 7

io_writeFunction · 0.85
io_flushFunction · 0.85
WriteSecurityTokenFunction · 0.85
mem_copyFunction · 0.85
PacketFlags_SixToSevenFunction · 0.85
net_udp_sendFunction · 0.85
CompressMethod · 0.45

Tested by

no test coverage detected