mirror of
https://github.com/overte-org/overte.git
synced 2025-08-08 14:18:24 +02:00
fix crash for NULL agent sockets
This commit is contained in:
parent
4956370d52
commit
8201b963d1
3 changed files with 24 additions and 18 deletions
|
@ -265,22 +265,26 @@ void Agent::printLog(Agent const& agent) {
|
||||||
sockaddr_in *agentPublicSocket = (sockaddr_in *) agent.publicSocket;
|
sockaddr_in *agentPublicSocket = (sockaddr_in *) agent.publicSocket;
|
||||||
sockaddr_in *agentLocalSocket = (sockaddr_in *) agent.localSocket;
|
sockaddr_in *agentLocalSocket = (sockaddr_in *) agent.localSocket;
|
||||||
|
|
||||||
|
const char* publicAddressString = (agentPublicSocket == NULL)
|
||||||
|
? "Unknown"
|
||||||
|
: inet_ntoa(agentPublicSocket->sin_addr);
|
||||||
|
unsigned short publicAddressPort = (agentPublicSocket == NULL)
|
||||||
|
? 0
|
||||||
|
: ntohs(agentPublicSocket->sin_port);
|
||||||
|
|
||||||
|
const char* localAddressString = (agentLocalSocket == NULL)
|
||||||
|
? "Unknown"
|
||||||
|
: inet_ntoa(agentLocalSocket->sin_addr);
|
||||||
|
unsigned short localAddressPort = (agentLocalSocket == NULL)
|
||||||
|
? 0
|
||||||
|
: ntohs(agentPublicSocket->sin_port);
|
||||||
|
|
||||||
::printLog("ID: %d T: %s (%c) PA: %s:%d LA: %s:%d\n",
|
::printLog("ID: %d T: %s (%c) PA: %s:%d LA: %s:%d\n",
|
||||||
agent.agentId,
|
agent.agentId,
|
||||||
agent.getTypeName(),
|
agent.getTypeName(),
|
||||||
agent.type,
|
agent.type,
|
||||||
inet_ntoa(agentPublicSocket->sin_addr),
|
publicAddressString,
|
||||||
ntohs(agentPublicSocket->sin_port),
|
publicAddressPort,
|
||||||
inet_ntoa(agentLocalSocket->sin_addr),
|
localAddressString,
|
||||||
ntohs(agentLocalSocket->sin_port));
|
localAddressPort);
|
||||||
}
|
|
||||||
|
|
||||||
std::ostream& operator<<(std::ostream& os, const Agent* agent) {
|
|
||||||
sockaddr_in *agentPublicSocket = (sockaddr_in *)agent->publicSocket;
|
|
||||||
sockaddr_in *agentLocalSocket = (sockaddr_in *)agent->localSocket;
|
|
||||||
|
|
||||||
os << "T: " << agent->getTypeName() << " (" << agent->type << ") PA: " << inet_ntoa(agentPublicSocket->sin_addr) <<
|
|
||||||
":" << ntohs(agentPublicSocket->sin_port) << " LA: " << inet_ntoa(agentLocalSocket->sin_addr) <<
|
|
||||||
":" << ntohs(agentLocalSocket->sin_port);
|
|
||||||
return os;
|
|
||||||
}
|
}
|
|
@ -63,7 +63,6 @@ public:
|
||||||
float getAveragePacketsPerSecond();
|
float getAveragePacketsPerSecond();
|
||||||
|
|
||||||
static void printLog(Agent const&);
|
static void printLog(Agent const&);
|
||||||
friend std::ostream& operator<<(std::ostream& os, const Agent* agent);
|
|
||||||
private:
|
private:
|
||||||
void swap(Agent &first, Agent &second);
|
void swap(Agent &first, Agent &second);
|
||||||
|
|
||||||
|
|
|
@ -157,7 +157,10 @@ int AgentList::updateAgentWithData(sockaddr *senderAddress, unsigned char *packe
|
||||||
|
|
||||||
int AgentList::updateAgentWithData(Agent *agent, unsigned char *packetData, int dataBytes) {
|
int AgentList::updateAgentWithData(Agent *agent, unsigned char *packetData, int dataBytes) {
|
||||||
agent->setLastRecvTimeUsecs(usecTimestampNow());
|
agent->setLastRecvTimeUsecs(usecTimestampNow());
|
||||||
|
|
||||||
|
if (agent->getActiveSocket() != NULL) {
|
||||||
agent->recordBytesReceived(dataBytes);
|
agent->recordBytesReceived(dataBytes);
|
||||||
|
}
|
||||||
|
|
||||||
if (agent->getLinkedData() == NULL) {
|
if (agent->getLinkedData() == NULL) {
|
||||||
if (linkedDataCreateCallback != NULL) {
|
if (linkedDataCreateCallback != NULL) {
|
||||||
|
@ -180,7 +183,7 @@ int AgentList::indexOfMatchingAgent(sockaddr *senderAddress) {
|
||||||
|
|
||||||
int AgentList::indexOfMatchingAgent(uint16_t agentID) {
|
int AgentList::indexOfMatchingAgent(uint16_t agentID) {
|
||||||
for(std::vector<Agent>::iterator agent = agents.begin(); agent != agents.end(); agent++) {
|
for(std::vector<Agent>::iterator agent = agents.begin(); agent != agents.end(); agent++) {
|
||||||
if (agent->getActiveSocket() != NULL && agent->getAgentId() == agentID) {
|
if (agent->getAgentId() == agentID) {
|
||||||
return agent - agents.begin();
|
return agent - agents.begin();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue