- added a bunch of null terminations to all char buffers in network protocol

This commit is contained in:
Mark Vejvoda 2010-08-20 23:53:10 +00:00
parent ff7828fa6f
commit 07cbcc0bec
6 changed files with 61 additions and 20 deletions

View File

@ -25,7 +25,6 @@
using namespace std;
using namespace Shared::Util;
//using namespace Shared::Platform;
namespace Glest{ namespace Game{
@ -209,7 +208,8 @@ void ConnectionSlot::update(bool checkForNewClients) {
if(checkForNewClients == true) {
SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s] BEFORE accept new client connection, serverInterface->getOpenSlotCount() = %d\n",__FILE__,__FUNCTION__,serverInterface->getOpenSlotCount());
bool hasOpenSlots = (serverInterface->getOpenSlotCount() > 0);
if(serverInterface->getServerSocket()->hasDataToRead() == true) {
if(serverInterface->getServerSocket() != NULL &&
serverInterface->getServerSocket()->hasDataToRead() == true) {
SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s Line: %d] playerIndex = %d\n",__FILE__,__FUNCTION__,__LINE__,playerIndex);
socket = serverInterface->getServerSocket()->accept();
SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s Line: %d] playerIndex = %d\n",__FILE__,__FUNCTION__,__LINE__,playerIndex);

View File

@ -107,8 +107,8 @@ public:
static void setDisplayMessageFunction(DisplayMessageFunction pDisplayMessage) { pCB_DisplayMessage = pDisplayMessage; }
static DisplayMessageFunction getDisplayMessageFunction() { return pCB_DisplayMessage; }
string getIp() const {return getSocket()->getIp();}
string getHostName() const {return getSocket()->getHostName();}
string getIp() const {return Socket::getIp();}
string getHostName() const {return Socket::getHostName();}
virtual void sendMessage(const NetworkMessage* networkMessage);
NetworkMessageType getNextMessageType(bool checkHasDataFirst = false);

View File

@ -136,7 +136,10 @@ NetworkMessageIntro::NetworkMessageIntro(const string &versionString, const stri
}
bool NetworkMessageIntro::receive(Socket* socket){
return NetworkMessage::receive(socket, &data, sizeof(data));
bool result = NetworkMessage::receive(socket, &data, sizeof(data));
data.name.nullTerminate();
data.versionString.nullTerminate();
return result;
}
void NetworkMessageIntro::send(Socket* socket) const{
@ -260,7 +263,17 @@ void NetworkMessageLaunch::buildGameSettings(GameSettings *gameSettings) const{
}
bool NetworkMessageLaunch::receive(Socket* socket){
return NetworkMessage::receive(socket, &data, sizeof(data));
bool result = NetworkMessage::receive(socket, &data, sizeof(data));
data.description.nullTerminate();
data.map.nullTerminate();
data.tileset.nullTerminate();
data.tech.nullTerminate();
for(int i= 0; i<GameConstants::maxPlayers; ++i){
data.factionTypeNames[i].nullTerminate();
data.networkPlayerNames[i].nullTerminate();
}
return result;
}
void NetworkMessageLaunch::send(Socket* socket) const{
@ -385,7 +398,12 @@ NetworkMessageText::NetworkMessageText(const string &text, const string &sender,
}
bool NetworkMessageText::receive(Socket* socket){
return NetworkMessage::receive(socket, &data, sizeof(data));
bool result = NetworkMessage::receive(socket, &data, sizeof(data));
data.text.nullTerminate();
data.sender.nullTerminate();
return result;
}
void NetworkMessageText::send(Socket* socket) const{
@ -460,9 +478,14 @@ NetworkMessageSynchNetworkGameData::NetworkMessageSynchNetworkGameData(const Gam
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d] data.mapCRC = %d, [%s]\n",__FILE__,__FUNCTION__,__LINE__, data.mapCRC,gameSettings->getMap().c_str());
}
bool NetworkMessageSynchNetworkGameData::receive(Socket* socket)
{
return NetworkMessage::receive(socket, &data, sizeof(data));
bool NetworkMessageSynchNetworkGameData::receive(Socket* socket) {
bool result = NetworkMessage::receive(socket, &data, sizeof(data));
data.map.nullTerminate();
data.tileset.nullTerminate();
data.tech.nullTerminate();
return result;
}
void NetworkMessageSynchNetworkGameData::send(Socket* socket) const {
@ -512,9 +535,12 @@ NetworkMessageSynchNetworkGameDataFileCRCCheck::NetworkMessageSynchNetworkGameDa
data.fileName = fileName;
}
bool NetworkMessageSynchNetworkGameDataFileCRCCheck::receive(Socket* socket)
{
return NetworkMessage::receive(socket, &data, sizeof(data));
bool NetworkMessageSynchNetworkGameDataFileCRCCheck::receive(Socket* socket) {
bool result = NetworkMessage::receive(socket, &data, sizeof(data));
data.fileName.nullTerminate();
return result;
}
void NetworkMessageSynchNetworkGameDataFileCRCCheck::send(Socket* socket) const {
@ -535,9 +561,12 @@ NetworkMessageSynchNetworkGameDataFileGet::NetworkMessageSynchNetworkGameDataFil
data.fileName = fileName;
}
bool NetworkMessageSynchNetworkGameDataFileGet::receive(Socket* socket)
{
return NetworkMessage::receive(socket, &data, sizeof(data));
bool NetworkMessageSynchNetworkGameDataFileGet::receive(Socket* socket) {
bool result = NetworkMessage::receive(socket, &data, sizeof(data));
data.fileName.nullTerminate();
return result;
}
void NetworkMessageSynchNetworkGameDataFileGet::send(Socket* socket) const {
@ -572,9 +601,12 @@ SwitchSetupRequest::SwitchSetupRequest(string selectedFactionName, int8 currentF
data.toTeam = toTeam;
}
bool SwitchSetupRequest::receive(Socket* socket)
{
return NetworkMessage::receive(socket, &data, sizeof(data));
bool SwitchSetupRequest::receive(Socket* socket) {
bool result = NetworkMessage::receive(socket, &data, sizeof(data));
data.selectedFactionName.nullTerminate();
return result;
}
void SwitchSetupRequest::send(Socket* socket) const

View File

@ -46,6 +46,11 @@ public:
int maxBufferSize = sizeof(buffer) / sizeof(buffer[0]);
strncpy(buffer, str.c_str(), min(S-1,maxBufferSize-1));
}
void nullTerminate() {
int maxBufferSize = sizeof(buffer) / sizeof(buffer[0]);
buffer[maxBufferSize-1] = '\0';
}
string getString() const {return buffer;}
};

View File

@ -1178,6 +1178,7 @@ void ServerInterface::updateListen() {
return;
}
MutexSafeWrapper safeMutex(&serverSynchAccessor);
int openSlotCount= 0;
for(int i= 0; i<GameConstants::maxPlayers; ++i) {
bool isSlotOpen = (slots[i] != NULL && slots[i]->isConnected() == false);
@ -1187,7 +1188,7 @@ void ServerInterface::updateListen() {
}
}
MutexSafeWrapper safeMutex(&serverSynchAccessor);
//MutexSafeWrapper safeMutex(&serverSynchAccessor);
serverSocket.listen(openSlotCount);
safeMutex.ReleaseLock();
}

View File

@ -1702,7 +1702,10 @@ Socket *ServerSocket::accept() {
struct sockaddr_in cli_addr;
socklen_t clilen = sizeof(cli_addr);
char client_host[100]="";
MutexSafeWrapper safeMutex(&dataSynchAccessor);
PLATFORM_SOCKET newSock= ::accept(sock, (struct sockaddr *) &cli_addr, &clilen);
safeMutex.ReleaseLock();
if(isSocketValid(&newSock) == false)
{
char szBuf[1024]="";