Fix endian issues, byte & packet counts for the logging.

Info / modifications by Safety0ff & I

closes ticket:1936
2.3: r11065

git-svn-id: https://warzone2100.svn.sourceforge.net/svnroot/warzone2100/branches/qt-trunk@11067 4a71c877-e1ca-e34f-864e-861f7616d084
master
Buginator 2010-06-28 03:23:21 +00:00 committed by Git SVN Gateway
parent ca5814a331
commit 90bfae6480
3 changed files with 29 additions and 18 deletions

View File

@ -161,10 +161,10 @@ BOOL NETstopLogging(void)
for (i = 0; i < NUM_GAME_PACKETS; i++) for (i = 0; i < NUM_GAME_PACKETS; i++)
{ {
snprintf(buf, sizeof(buf), "%-24s:\t received %u times, %u bytes; sent %u times, %u bytes\n", packetname[i], snprintf(buf, sizeof(buf), "%-24s:\t received %u times, %u bytes; sent %u times, %u bytes\n", packetname[i],
packetcount[0][i], packetsize[0][i], packetcount[1][i], packetsize[1][i]); packetcount[1][i], packetsize[1][i], packetcount[0][i], packetsize[0][i]);
PHYSFS_write(pFileHandle, buf, strlen(buf), 1); PHYSFS_write(pFileHandle, buf, strlen(buf), 1);
totalBytessent += packetsize[1][i]; totalBytessent += packetsize[0][i];
totalBytesrecv += packetsize[0][i]; totalBytesrecv += packetsize[1][i];
totalPacketsent += packetcount[0][i]; totalPacketsent += packetcount[0][i];
totalPacketrecv += packetcount[1][i]; totalPacketrecv += packetcount[1][i];
} }
@ -218,14 +218,20 @@ BOOL NETstopLogging(void)
return true; return true;
} }
void NETlogPacket(NETMSG *msg, BOOL received)
/** log packet
* \param type, uint8_t, the packet's type.
* \param size, uint16_t, the packet's size
* \param received, BOOL, true if we are receiving a packet, false if we are sending a packet.
*/
void NETlogPacket( uint8_t type, uint16_t size, BOOL received)
{ {
if (msg->type >= NUM_GAME_PACKETS) if (type >= NUM_GAME_PACKETS)
{ {
return; return;
} }
packetcount[received][msg->type]++; packetcount[received][type]++;
packetsize[received][msg->type] += msg->size; packetsize[received][type] += size;
} }
BOOL NETlogEntry(const char *str,UDWORD a,UDWORD b) BOOL NETlogEntry(const char *str,UDWORD a,UDWORD b)

View File

@ -32,7 +32,7 @@ extern "C"
BOOL NETstartLogging(void); BOOL NETstartLogging(void);
BOOL NETstopLogging(void); BOOL NETstopLogging(void);
BOOL NETlogEntry( const char *str, UDWORD a, UDWORD b ); BOOL NETlogEntry( const char *str, UDWORD a, UDWORD b );
void NETlogPacket(NETMSG *msg, BOOL received); void NETlogPacket( uint8_t type, uint16_t size, BOOL received);
#ifdef __cplusplus #ifdef __cplusplus
} }

View File

@ -1270,8 +1270,8 @@ BOOL NETsend(NETMSG *msg, UDWORD player)
size = msg->size + sizeof(msg->size) + sizeof(msg->type) + sizeof(msg->destination) + sizeof(msg->source); size = msg->size + sizeof(msg->size) + sizeof(msg->type) + sizeof(msg->destination) + sizeof(msg->source);
NETlogPacket(msg, false); NETlogPacket(msg->type, msg->size, false); // log packet we are sending
msg->size = hton16(msg->size); msg->size = htons(msg->size); // convert it to network byte order
if (NetPlay.isHost) if (NetPlay.isHost)
{ {
@ -1330,8 +1330,8 @@ BOOL NETbcast(NETMSG *msg)
size = msg->size + sizeof(msg->size) + sizeof(msg->type) + sizeof(msg->destination) + sizeof(msg->source); size = msg->size + sizeof(msg->size) + sizeof(msg->type) + sizeof(msg->destination) + sizeof(msg->source);
NETlogPacket(msg, false); NETlogPacket(msg->type, msg->size, false); // log packet we are sending
msg->size = hton16(msg->size); msg->size = htons(msg->size); // convert it to network byte order
if (NetPlay.isHost) if (NetPlay.isHost)
{ {
@ -1699,7 +1699,7 @@ receive_message:
if (received == false) if (received == false)
{ {
return false; return false; // (Host | client) didn't get any data
} }
else else
{ {
@ -1712,8 +1712,7 @@ receive_message:
else if (pMsg->destination == NET_ALL_PLAYERS) else if (pMsg->destination == NET_ALL_PLAYERS)
{ {
unsigned int j; unsigned int j;
uint16_t Sbytes;
pMsg->size = ntoh16(pMsg->size);
if (pMsg->source != NET_HOST_ONLY && (pMsg->type == NET_KICK || pMsg->type == NET_PLAYER_LEAVING) ) if (pMsg->source != NET_HOST_ONLY && (pMsg->type == NET_KICK || pMsg->type == NET_PLAYER_LEAVING) )
{ {
@ -1729,6 +1728,10 @@ receive_message:
} }
NETlogPacket(pMsg->type, pMsg->size, true); // log packet that we received
Sbytes = pMsg->size;
pMsg->size = htons(pMsg->size); // convert back to network byte order when sending
// we are the host, and have received a broadcast packet; distribute it // we are the host, and have received a broadcast packet; distribute it
for (j = 0; j < MAX_CONNECTED_PLAYERS; ++j) for (j = 0; j < MAX_CONNECTED_PLAYERS; ++j)
{ {
@ -1742,6 +1745,7 @@ receive_message:
debug(LOG_ERROR, "Failed to send message (host broadcast): %s", strSockError(getSockErr())); debug(LOG_ERROR, "Failed to send message (host broadcast): %s", strSockError(getSockErr()));
NETplayerClientDisconnect(j); NETplayerClientDisconnect(j);
} }
NETlogPacket(pMsg->type, Sbytes, false); // and since we are sending it out again, log it.
} }
} }
} }
@ -1753,7 +1757,10 @@ receive_message:
&& connected_bsocket[pMsg->destination]->socket != NULL) && connected_bsocket[pMsg->destination]->socket != NULL)
{ {
debug(LOG_NET, "Reflecting message type %hhu to %hhu", pMsg->type, pMsg->destination); debug(LOG_NET, "Reflecting message type %hhu to %hhu", pMsg->type, pMsg->destination);
pMsg->size = ntoh16(pMsg->size);
NETlogPacket(pMsg->type, pMsg->size, true); // log packet that we received
NETlogPacket(pMsg->type, pMsg->size, false); // log packet that we are sending out
pMsg->size = htons(pMsg->size); // convert back to network byte order when sending
if (writeAll(connected_bsocket[pMsg->destination]->socket, pMsg, size) == SOCKET_ERROR) if (writeAll(connected_bsocket[pMsg->destination]->socket, pMsg, size) == SOCKET_ERROR)
{ {
@ -1776,8 +1783,6 @@ receive_message:
} while (NETprocessSystemMessage() == true); } while (NETprocessSystemMessage() == true);
NETlogPacket(pMsg, true);
*type = pMsg->type; *type = pMsg->type;
return true; return true;
} }