MCPcopy Create free account
hub / github.com/PurpleI2P/i2pd / Get

Method Get

libi2pd/Streaming.cpp:31–72  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

29 }
30
31 size_t SendBufferQueue::Get (uint8_t * buf, size_t len)
32 {
33 if (!m_Size) return 0;
34 size_t offset = 0;
35 if (len >= m_Size)
36 {
37 for (auto& it: m_Buffers)
38 {
39 auto rem = it->GetRemainingSize ();
40 memcpy (buf + offset, it->GetRemaningBuffer (), rem);
41 offset += rem;
42 }
43 m_Buffers.clear ();
44 m_Size = 0;
45 return offset;
46 }
47 else
48 {
49 while (!m_Buffers.empty () && offset < len)
50 {
51 auto nextBuffer = m_Buffers.front ();
52 auto rem = nextBuffer->GetRemainingSize ();
53 if (offset + rem <= len)
54 {
55 // whole buffer
56 memcpy (buf + offset, nextBuffer->GetRemaningBuffer (), rem);
57 offset += rem;
58 m_Buffers.pop_front (); // delete it
59 }
60 else
61 {
62 // partially
63 rem = len - offset;
64 memcpy (buf + offset, nextBuffer->GetRemaningBuffer (), rem);
65 nextBuffer->offset += rem;
66 offset = len; // break
67 }
68 }
69 m_Size -= offset;
70 }
71 return offset;
72 }
73
74 void SendBufferQueue::CleanUp ()
75 {

Callers 1

SendBufferMethod · 0.45

Calls 2

GetRemainingSizeMethod · 0.80
GetRemaningBufferMethod · 0.80

Tested by

no test coverage detected