mirror of
https://github.com/AleziaKurdis/overte.git
synced 2025-04-08 06:32:35 +02:00
expect domain server to append one's own ID to end of packet
This commit is contained in:
parent
43a3775633
commit
722205682e
3 changed files with 22 additions and 12 deletions
|
@ -86,7 +86,6 @@ int main(int argc, const char * argv[])
|
|||
|
||||
unsigned char* currentBufferPos;
|
||||
unsigned char* startPointer;
|
||||
int packetBytesWithoutLeadingChar;
|
||||
|
||||
sockaddr_in agentPublicAddress, agentLocalAddress;
|
||||
agentLocalAddress.sin_family = AF_INET;
|
||||
|
@ -95,6 +94,8 @@ int main(int argc, const char * argv[])
|
|||
|
||||
agentList->startSilentAgentRemovalThread();
|
||||
|
||||
uint16_t packetAgentID = 0;
|
||||
|
||||
while (true) {
|
||||
if (agentList->getAgentSocket().receive((sockaddr *)&agentPublicAddress, packetData, &receivedBytes) &&
|
||||
(packetData[0] == PACKET_HEADER_DOMAIN_RFD || packetData[0] == PACKET_HEADER_DOMAIN_LIST_REQUEST)) {
|
||||
|
@ -143,13 +144,17 @@ int main(int argc, const char * argv[])
|
|||
}
|
||||
} else {
|
||||
double timeNow = usecTimestampNow();
|
||||
|
||||
// this is the agent, just update last receive to now
|
||||
agent->setLastHeardMicrostamp(timeNow);
|
||||
|
||||
// grab the ID for this agent so we can send it back with the packet
|
||||
packetAgentID = agent->getAgentId();
|
||||
|
||||
if (packetData[0] == PACKET_HEADER_DOMAIN_RFD
|
||||
&& memchr(SOLO_AGENT_TYPES, agentType, sizeof(SOLO_AGENT_TYPES))) {
|
||||
agent->setWakeMicrostamp(timeNow);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -160,11 +165,13 @@ int main(int argc, const char * argv[])
|
|||
currentBufferPos = addAgentToBroadcastPacket(currentBufferPos, soloAgent->second);
|
||||
}
|
||||
|
||||
if ((packetBytesWithoutLeadingChar = (currentBufferPos - startPointer))) {
|
||||
agentList->getAgentSocket().send((sockaddr*) &agentPublicAddress,
|
||||
broadcastPacket,
|
||||
packetBytesWithoutLeadingChar + 1);
|
||||
}
|
||||
// add the agent ID to the end of the pointer
|
||||
currentBufferPos += packAgentId(currentBufferPos, packetAgentID);
|
||||
|
||||
// send the constructed list back to this agent
|
||||
agentList->getAgentSocket().send((sockaddr*) &agentPublicAddress,
|
||||
broadcastPacket,
|
||||
(currentBufferPos - startPointer) + 1);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -89,7 +89,7 @@ unsigned int AgentList::getSocketListenPort() {
|
|||
void AgentList::processAgentData(sockaddr *senderAddress, unsigned char *packetData, size_t dataBytes) {
|
||||
switch (((char *)packetData)[0]) {
|
||||
case PACKET_HEADER_DOMAIN: {
|
||||
updateList(packetData, dataBytes);
|
||||
processDomainServerList(packetData, dataBytes);
|
||||
break;
|
||||
}
|
||||
case PACKET_HEADER_PING: {
|
||||
|
@ -200,7 +200,7 @@ void AgentList::increaseAgentId() {
|
|||
++lastAgentId;
|
||||
}
|
||||
|
||||
int AgentList::updateList(unsigned char *packetData, size_t dataBytes) {
|
||||
int AgentList::processDomainServerList(unsigned char *packetData, size_t dataBytes) {
|
||||
int readAgents = 0;
|
||||
|
||||
char agentType;
|
||||
|
@ -215,14 +215,17 @@ int AgentList::updateList(unsigned char *packetData, size_t dataBytes) {
|
|||
unsigned char *readPtr = packetData + 1;
|
||||
unsigned char *startPtr = packetData;
|
||||
|
||||
while((readPtr - startPtr) < dataBytes) {
|
||||
while((readPtr - startPtr) < dataBytes - sizeof(uint16_t)) {
|
||||
agentType = *readPtr++;
|
||||
readPtr += unpackAgentId(readPtr, (uint16_t *)&agentId);
|
||||
readPtr += unpackSocket(readPtr, (sockaddr *)&agentPublicSocket);
|
||||
readPtr += unpackSocket(readPtr, (sockaddr *)&agentLocalSocket);
|
||||
|
||||
addOrUpdateAgent((sockaddr *)&agentPublicSocket, (sockaddr *)&agentLocalSocket, agentType, agentId);
|
||||
}
|
||||
}
|
||||
|
||||
// read out our ID from the packet
|
||||
unpackAgentId(readPtr, &_ownerID);
|
||||
|
||||
return readAgents;
|
||||
}
|
||||
|
|
|
@ -56,7 +56,7 @@ public:
|
|||
void lock() { pthread_mutex_lock(&mutex); }
|
||||
void unlock() { pthread_mutex_unlock(&mutex); }
|
||||
|
||||
int updateList(unsigned char *packetData, size_t dataBytes);
|
||||
int processDomainServerList(unsigned char *packetData, size_t dataBytes);
|
||||
|
||||
Agent* agentWithAddress(sockaddr *senderAddress);
|
||||
Agent* agentWithID(uint16_t agentID);
|
||||
|
|
Loading…
Reference in a new issue