mirror of
https://github.com/glest/glest-source.git
synced 2025-08-16 05:13:59 +02:00
- added a bunch of null terminations to all char buffers in network protocol
This commit is contained in:
@@ -25,7 +25,6 @@
|
|||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
using namespace Shared::Util;
|
using namespace Shared::Util;
|
||||||
//using namespace Shared::Platform;
|
|
||||||
|
|
||||||
namespace Glest{ namespace Game{
|
namespace Glest{ namespace Game{
|
||||||
|
|
||||||
@@ -209,7 +208,8 @@ void ConnectionSlot::update(bool checkForNewClients) {
|
|||||||
if(checkForNewClients == true) {
|
if(checkForNewClients == true) {
|
||||||
SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s] BEFORE accept new client connection, serverInterface->getOpenSlotCount() = %d\n",__FILE__,__FUNCTION__,serverInterface->getOpenSlotCount());
|
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);
|
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);
|
SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s Line: %d] playerIndex = %d\n",__FILE__,__FUNCTION__,__LINE__,playerIndex);
|
||||||
socket = serverInterface->getServerSocket()->accept();
|
socket = serverInterface->getServerSocket()->accept();
|
||||||
SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s Line: %d] playerIndex = %d\n",__FILE__,__FUNCTION__,__LINE__,playerIndex);
|
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 void setDisplayMessageFunction(DisplayMessageFunction pDisplayMessage) { pCB_DisplayMessage = pDisplayMessage; }
|
||||||
static DisplayMessageFunction getDisplayMessageFunction() { return pCB_DisplayMessage; }
|
static DisplayMessageFunction getDisplayMessageFunction() { return pCB_DisplayMessage; }
|
||||||
|
|
||||||
string getIp() const {return getSocket()->getIp();}
|
string getIp() const {return Socket::getIp();}
|
||||||
string getHostName() const {return getSocket()->getHostName();}
|
string getHostName() const {return Socket::getHostName();}
|
||||||
|
|
||||||
virtual void sendMessage(const NetworkMessage* networkMessage);
|
virtual void sendMessage(const NetworkMessage* networkMessage);
|
||||||
NetworkMessageType getNextMessageType(bool checkHasDataFirst = false);
|
NetworkMessageType getNextMessageType(bool checkHasDataFirst = false);
|
||||||
|
@@ -136,7 +136,10 @@ NetworkMessageIntro::NetworkMessageIntro(const string &versionString, const stri
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool NetworkMessageIntro::receive(Socket* socket){
|
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{
|
void NetworkMessageIntro::send(Socket* socket) const{
|
||||||
@@ -260,7 +263,17 @@ void NetworkMessageLaunch::buildGameSettings(GameSettings *gameSettings) const{
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool NetworkMessageLaunch::receive(Socket* socket){
|
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{
|
void NetworkMessageLaunch::send(Socket* socket) const{
|
||||||
@@ -385,7 +398,12 @@ NetworkMessageText::NetworkMessageText(const string &text, const string &sender,
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool NetworkMessageText::receive(Socket* socket){
|
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{
|
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());
|
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)
|
bool NetworkMessageSynchNetworkGameData::receive(Socket* socket) {
|
||||||
{
|
bool result = NetworkMessage::receive(socket, &data, sizeof(data));
|
||||||
return NetworkMessage::receive(socket, &data, sizeof(data));
|
|
||||||
|
data.map.nullTerminate();
|
||||||
|
data.tileset.nullTerminate();
|
||||||
|
data.tech.nullTerminate();
|
||||||
|
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
void NetworkMessageSynchNetworkGameData::send(Socket* socket) const {
|
void NetworkMessageSynchNetworkGameData::send(Socket* socket) const {
|
||||||
@@ -512,9 +535,12 @@ NetworkMessageSynchNetworkGameDataFileCRCCheck::NetworkMessageSynchNetworkGameDa
|
|||||||
data.fileName = fileName;
|
data.fileName = fileName;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool NetworkMessageSynchNetworkGameDataFileCRCCheck::receive(Socket* socket)
|
bool NetworkMessageSynchNetworkGameDataFileCRCCheck::receive(Socket* socket) {
|
||||||
{
|
bool result = NetworkMessage::receive(socket, &data, sizeof(data));
|
||||||
return NetworkMessage::receive(socket, &data, sizeof(data));
|
|
||||||
|
data.fileName.nullTerminate();
|
||||||
|
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
void NetworkMessageSynchNetworkGameDataFileCRCCheck::send(Socket* socket) const {
|
void NetworkMessageSynchNetworkGameDataFileCRCCheck::send(Socket* socket) const {
|
||||||
@@ -535,9 +561,12 @@ NetworkMessageSynchNetworkGameDataFileGet::NetworkMessageSynchNetworkGameDataFil
|
|||||||
data.fileName = fileName;
|
data.fileName = fileName;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool NetworkMessageSynchNetworkGameDataFileGet::receive(Socket* socket)
|
bool NetworkMessageSynchNetworkGameDataFileGet::receive(Socket* socket) {
|
||||||
{
|
bool result = NetworkMessage::receive(socket, &data, sizeof(data));
|
||||||
return NetworkMessage::receive(socket, &data, sizeof(data));
|
|
||||||
|
data.fileName.nullTerminate();
|
||||||
|
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
void NetworkMessageSynchNetworkGameDataFileGet::send(Socket* socket) const {
|
void NetworkMessageSynchNetworkGameDataFileGet::send(Socket* socket) const {
|
||||||
@@ -572,9 +601,12 @@ SwitchSetupRequest::SwitchSetupRequest(string selectedFactionName, int8 currentF
|
|||||||
data.toTeam = toTeam;
|
data.toTeam = toTeam;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool SwitchSetupRequest::receive(Socket* socket)
|
bool SwitchSetupRequest::receive(Socket* socket) {
|
||||||
{
|
bool result = NetworkMessage::receive(socket, &data, sizeof(data));
|
||||||
return NetworkMessage::receive(socket, &data, sizeof(data));
|
|
||||||
|
data.selectedFactionName.nullTerminate();
|
||||||
|
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SwitchSetupRequest::send(Socket* socket) const
|
void SwitchSetupRequest::send(Socket* socket) const
|
||||||
|
@@ -46,6 +46,11 @@ public:
|
|||||||
int maxBufferSize = sizeof(buffer) / sizeof(buffer[0]);
|
int maxBufferSize = sizeof(buffer) / sizeof(buffer[0]);
|
||||||
strncpy(buffer, str.c_str(), min(S-1,maxBufferSize-1));
|
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;}
|
string getString() const {return buffer;}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -1178,6 +1178,7 @@ void ServerInterface::updateListen() {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
MutexSafeWrapper safeMutex(&serverSynchAccessor);
|
||||||
int openSlotCount= 0;
|
int openSlotCount= 0;
|
||||||
for(int i= 0; i<GameConstants::maxPlayers; ++i) {
|
for(int i= 0; i<GameConstants::maxPlayers; ++i) {
|
||||||
bool isSlotOpen = (slots[i] != NULL && slots[i]->isConnected() == false);
|
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);
|
serverSocket.listen(openSlotCount);
|
||||||
safeMutex.ReleaseLock();
|
safeMutex.ReleaseLock();
|
||||||
}
|
}
|
||||||
|
@@ -1702,7 +1702,10 @@ Socket *ServerSocket::accept() {
|
|||||||
struct sockaddr_in cli_addr;
|
struct sockaddr_in cli_addr;
|
||||||
socklen_t clilen = sizeof(cli_addr);
|
socklen_t clilen = sizeof(cli_addr);
|
||||||
char client_host[100]="";
|
char client_host[100]="";
|
||||||
|
MutexSafeWrapper safeMutex(&dataSynchAccessor);
|
||||||
PLATFORM_SOCKET newSock= ::accept(sock, (struct sockaddr *) &cli_addr, &clilen);
|
PLATFORM_SOCKET newSock= ::accept(sock, (struct sockaddr *) &cli_addr, &clilen);
|
||||||
|
safeMutex.ReleaseLock();
|
||||||
|
|
||||||
if(isSocketValid(&newSock) == false)
|
if(isSocketValid(&newSock) == false)
|
||||||
{
|
{
|
||||||
char szBuf[1024]="";
|
char szBuf[1024]="";
|
||||||
|
Reference in New Issue
Block a user