MCPcopy Create free account
hub / github.com/amule-project/amule / SendControlData

Method SendControlData

src/MuleUDPSocket.cpp:256–294  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

254
255
256SocketSentBytes CMuleUDPSocket::SendControlData(uint32 maxNumberOfBytesToSend, uint32 WXUNUSED(minFragSize))
257{
258 wxMutexLocker lock(m_mutex);
259 uint32 sentBytes = 0;
260 while (!m_queue.empty() && !m_busy && (sentBytes < maxNumberOfBytesToSend)) {
261 UDPPack item = m_queue.front();
262 CPacket* packet = item.packet;
263 if (GetTickCount64() - item.time < UDPMAXQUEUETIME) {
264 uint32_t len = packet->GetPacketSize() + 2;
265 uint8_t *sendbuffer = new uint8_t [len];
266 memcpy(sendbuffer, packet->GetUDPHeader(), 2);
267 memcpy(sendbuffer + 2, packet->GetDataBuffer(), packet->GetPacketSize());
268
269 if (item.bEncrypt && (theApp->GetPublicIP() > 0 || item.bKad)) {
270 len = CEncryptedDatagramSocket::EncryptSendClient(&sendbuffer, len, item.pachTargetClientHashORKadID, item.bKad, item.nReceiverVerifyKey, (item.bKad ? Kademlia::CPrefs::GetUDPVerifyKey(item.IP) : 0));
271 }
272
273 if (SendTo(sendbuffer, len, item.IP, item.port)) {
274 sentBytes += len;
275 m_queue.pop_front();
276 delete packet;
277 delete [] sendbuffer;
278 } else {
279 // TODO: Needs better error handling, see SentTo
280 delete [] sendbuffer;
281 break;
282 }
283 } else {
284 m_queue.pop_front();
285 delete packet;
286 }
287 }
288 if (!m_busy && !m_queue.empty()) {
289 theApp->uploadBandwidthThrottler->QueueForSendingControlPacket(this);
290 }
291 SocketSentBytes returnVal = { true, 0, sentBytes };
292
293 return returnVal;
294}
295
296
297bool CMuleUDPSocket::SendTo(uint8_t *buffer, uint32_t length, uint32_t ip, uint16_t port)

Callers 1

EntryMethod · 0.45

Calls 7

GetTickCount64Function · 0.85
GetPacketSizeMethod · 0.80
GetUDPHeaderMethod · 0.80
GetDataBufferMethod · 0.80
emptyMethod · 0.45
GetPublicIPMethod · 0.45

Tested by

no test coverage detected