- added a bunch of null terminations to all char buffers in network protocol
This commit is contained in:
parent
ff7828fa6f
commit
07cbcc0bec
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;}
|
||||
};
|
||||
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
|
|
@ -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]="";
|
||||
|
|
Loading…
Reference in New Issue
Block a user