fix crash for NULL agent sockets

This commit is contained in:
Stephen Birarda 2013-04-22 18:36:13 -07:00
parent 4956370d52
commit 8201b963d1
3 changed files with 24 additions and 18 deletions

View file

@ -264,23 +264,27 @@ void Agent::printLog(Agent const& agent) {
sockaddr_in *agentPublicSocket = (sockaddr_in *) agent.publicSocket;
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",
agent.agentId,
agent.getTypeName(),
agent.type,
inet_ntoa(agentPublicSocket->sin_addr),
ntohs(agentPublicSocket->sin_port),
inet_ntoa(agentLocalSocket->sin_addr),
ntohs(agentLocalSocket->sin_port));
}
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;
publicAddressString,
publicAddressPort,
localAddressString,
localAddressPort);
}

View file

@ -63,7 +63,6 @@ public:
float getAveragePacketsPerSecond();
static void printLog(Agent const&);
friend std::ostream& operator<<(std::ostream& os, const Agent* agent);
private:
void swap(Agent &first, Agent &second);

View file

@ -157,14 +157,17 @@ int AgentList::updateAgentWithData(sockaddr *senderAddress, unsigned char *packe
int AgentList::updateAgentWithData(Agent *agent, unsigned char *packetData, int dataBytes) {
agent->setLastRecvTimeUsecs(usecTimestampNow());
agent->recordBytesReceived(dataBytes);
if (agent->getActiveSocket() != NULL) {
agent->recordBytesReceived(dataBytes);
}
if (agent->getLinkedData() == NULL) {
if (linkedDataCreateCallback != NULL) {
linkedDataCreateCallback(agent);
}
}
return agent->getLinkedData()->parseData(packetData, dataBytes);
}
@ -180,7 +183,7 @@ int AgentList::indexOfMatchingAgent(sockaddr *senderAddress) {
int AgentList::indexOfMatchingAgent(uint16_t agentID) {
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();
}
}