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

Method Recv

src/engine/shared/network_console_conn.cpp:94–155  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

92}
93
94int CConsoleNetConnection::Recv(char *pLine, int MaxLength)
95{
96 if(State() == EState::ONLINE)
97 {
98 if(m_BufferOffset)
99 {
100 // find message start
101 int StartOffset = 0;
102 while(m_aBuffer[StartOffset] == '\r' || m_aBuffer[StartOffset] == '\n')
103 {
104 // detect clients line ending format
105 if(!m_LineEndingDetected)
106 {
107 m_aLineEnding[0] = m_aBuffer[StartOffset];
108 if(StartOffset + 1 < m_BufferOffset && (m_aBuffer[StartOffset + 1] == '\r' || m_aBuffer[StartOffset + 1] == '\n') &&
109 m_aBuffer[StartOffset] != m_aBuffer[StartOffset + 1])
110 m_aLineEnding[1] = m_aBuffer[StartOffset + 1];
111 m_LineEndingDetected = true;
112 }
113
114 if(++StartOffset >= m_BufferOffset)
115 {
116 m_BufferOffset = 0;
117 return 0;
118 }
119 }
120
121 // find message end
122 int EndOffset = StartOffset;
123 while(m_aBuffer[EndOffset] != '\r' && m_aBuffer[EndOffset] != '\n')
124 {
125 if(++EndOffset >= m_BufferOffset)
126 {
127 if(StartOffset > 0)
128 {
129 mem_move(m_aBuffer, m_aBuffer + StartOffset, m_BufferOffset - StartOffset);
130 m_BufferOffset -= StartOffset;
131 }
132 return 0;
133 }
134 }
135
136 // extract message and update buffer
137 if(MaxLength - 1 < EndOffset - StartOffset)
138 {
139 if(StartOffset > 0)
140 {
141 mem_move(m_aBuffer, m_aBuffer + StartOffset, m_BufferOffset - StartOffset);
142 m_BufferOffset -= StartOffset;
143 }
144 return 0;
145 }
146 mem_copy(pLine, m_aBuffer + StartOffset, EndOffset - StartOffset);
147 pLine[EndOffset - StartOffset] = 0;
148 str_sanitize_cc(pLine);
149 mem_move(m_aBuffer, m_aBuffer + EndOffset, m_BufferOffset - EndOffset);
150 m_BufferOffset -= EndOffset;
151 return str_utf8_check(pLine);

Callers

nothing calls this directly

Calls 4

mem_moveFunction · 0.85
mem_copyFunction · 0.85
str_sanitize_ccFunction · 0.85
str_utf8_checkFunction · 0.85

Tested by

no test coverage detected