MCPcopy Create free account
hub / github.com/cppla/ServerStatus / Recv

Method Recv

server/src/network_client.cpp:89–150  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

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

Callers

nothing calls this directly

Calls 3

mem_moveFunction · 0.85
mem_copyFunction · 0.85
str_sanitize_ccFunction · 0.85

Tested by

no test coverage detected