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

Method ProcessPacket

src/ServerSocket.cpp:138–577  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

136}
137
138bool CServerSocket::ProcessPacket(const uint8_t* packet, uint32 size, int8 opcode)
139{
140 try {
141 AddDebugLogLineN( logServer, "Processing Server Packet: " );
142
143 switch(opcode) {
144 case OP_SERVERMESSAGE: {
145 /* Kry import of lugdunum 16.40 new features */
146 AddDebugLogLineN( logServer, "Server: OP_SERVERMESSAGE" );
147
148 if (size < 3) {
149 throw wxString("Corrupt or invalid server message received (size too small)");
150 }
151
152 theStats::AddDownOverheadServer(size);
153 char* buffer = new char[size-1];
154 memcpy(buffer,&packet[2],size-2);
155 buffer[size-2] = 0;
156
157 wxString strMessages(char2unicode(buffer));
158
159 delete[] buffer;
160
161 // 16.40 servers do not send separate OP_SERVERMESSAGE packets for each line;
162 // instead of this they are sending all text lines with one OP_SERVERMESSAGE packet.
163
164 wxStringTokenizer token(strMessages,"\r\n",wxTOKEN_DEFAULT );
165
166 while (token.HasMoreTokens()) {
167 wxString message = token.GetNextToken();
168
169 bool bOutputMessage = true;
170 if (message.StartsWith("server version")) {
171 wxString strVer = message.Mid(15,64); // truncate string to avoid misuse by servers in showing ads
172 strVer.Trim();
173 CServer* eserver = theApp->serverlist->GetServerByAddress(cur_server->GetAddress(),cur_server->GetPort());
174 if (eserver) {
175 eserver->SetVersion(strVer);
176 Notify_ServerRefresh(eserver);
177 }
178 } else if (message.StartsWith("ERROR")) {
179 CServer* pServer = theApp->serverlist->GetServerByAddress(cur_server->GetAddress(),cur_server->GetPort());
180 wxString servername;
181 if (pServer) {
182 servername = pServer->GetListName();
183 } else {
184 servername = _("Server");
185 }
186 AddLogLineN(CFormat( _("ERROR: %s (%s) - %s") )
187 % servername
188 % Uint32_16toStringIP_Port(cur_server->GetIP(), cur_server->GetPort())
189 % message.Mid(5,message.Len()).Trim(" :"));
190 bOutputMessage = false;
191
192 } else if (message.StartsWith("WARNING")) {
193
194 CServer* pServer = theApp->serverlist->GetServerByAddress(cur_server->GetAddress(),cur_server->GetPort());
195 wxString servername;

Callers

nothing calls this directly

Calls 15

char2unicodeFunction · 0.85
CFormatClass · 0.85
Uint32_16toStringIP_PortFunction · 0.85
IsLowIDFunction · 0.85
RawPeekUInt32Function · 0.85
Uint32toStringIPFunction · 0.85
StartsWithMethod · 0.80
LengthMethod · 0.80
SetDynIPMethod · 0.80
ReadUInt32Method · 0.80
GetConnPortMethod · 0.80
SetTCPFlagsMethod · 0.80

Tested by

no test coverage detected