mirror of
https://github.com/overte-org/overte.git
synced 2025-08-10 21:43:13 +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* currentBufferPos;
|
||||||
unsigned char* startPointer;
|
unsigned char* startPointer;
|
||||||
int packetBytesWithoutLeadingChar;
|
|
||||||
|
|
||||||
sockaddr_in agentPublicAddress, agentLocalAddress;
|
sockaddr_in agentPublicAddress, agentLocalAddress;
|
||||||
agentLocalAddress.sin_family = AF_INET;
|
agentLocalAddress.sin_family = AF_INET;
|
||||||
|
@ -95,6 +94,8 @@ int main(int argc, const char * argv[])
|
||||||
|
|
||||||
agentList->startSilentAgentRemovalThread();
|
agentList->startSilentAgentRemovalThread();
|
||||||
|
|
||||||
|
uint16_t packetAgentID = 0;
|
||||||
|
|
||||||
while (true) {
|
while (true) {
|
||||||
if (agentList->getAgentSocket().receive((sockaddr *)&agentPublicAddress, packetData, &receivedBytes) &&
|
if (agentList->getAgentSocket().receive((sockaddr *)&agentPublicAddress, packetData, &receivedBytes) &&
|
||||||
(packetData[0] == PACKET_HEADER_DOMAIN_RFD || packetData[0] == PACKET_HEADER_DOMAIN_LIST_REQUEST)) {
|
(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 {
|
} else {
|
||||||
double timeNow = usecTimestampNow();
|
double timeNow = usecTimestampNow();
|
||||||
|
|
||||||
// this is the agent, just update last receive to now
|
// this is the agent, just update last receive to now
|
||||||
agent->setLastHeardMicrostamp(timeNow);
|
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
|
if (packetData[0] == PACKET_HEADER_DOMAIN_RFD
|
||||||
&& memchr(SOLO_AGENT_TYPES, agentType, sizeof(SOLO_AGENT_TYPES))) {
|
&& memchr(SOLO_AGENT_TYPES, agentType, sizeof(SOLO_AGENT_TYPES))) {
|
||||||
agent->setWakeMicrostamp(timeNow);
|
agent->setWakeMicrostamp(timeNow);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -160,11 +165,13 @@ int main(int argc, const char * argv[])
|
||||||
currentBufferPos = addAgentToBroadcastPacket(currentBufferPos, soloAgent->second);
|
currentBufferPos = addAgentToBroadcastPacket(currentBufferPos, soloAgent->second);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((packetBytesWithoutLeadingChar = (currentBufferPos - startPointer))) {
|
// add the agent ID to the end of the pointer
|
||||||
agentList->getAgentSocket().send((sockaddr*) &agentPublicAddress,
|
currentBufferPos += packAgentId(currentBufferPos, packetAgentID);
|
||||||
broadcastPacket,
|
|
||||||
packetBytesWithoutLeadingChar + 1);
|
// 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) {
|
void AgentList::processAgentData(sockaddr *senderAddress, unsigned char *packetData, size_t dataBytes) {
|
||||||
switch (((char *)packetData)[0]) {
|
switch (((char *)packetData)[0]) {
|
||||||
case PACKET_HEADER_DOMAIN: {
|
case PACKET_HEADER_DOMAIN: {
|
||||||
updateList(packetData, dataBytes);
|
processDomainServerList(packetData, dataBytes);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case PACKET_HEADER_PING: {
|
case PACKET_HEADER_PING: {
|
||||||
|
@ -200,7 +200,7 @@ void AgentList::increaseAgentId() {
|
||||||
++lastAgentId;
|
++lastAgentId;
|
||||||
}
|
}
|
||||||
|
|
||||||
int AgentList::updateList(unsigned char *packetData, size_t dataBytes) {
|
int AgentList::processDomainServerList(unsigned char *packetData, size_t dataBytes) {
|
||||||
int readAgents = 0;
|
int readAgents = 0;
|
||||||
|
|
||||||
char agentType;
|
char agentType;
|
||||||
|
@ -215,14 +215,17 @@ int AgentList::updateList(unsigned char *packetData, size_t dataBytes) {
|
||||||
unsigned char *readPtr = packetData + 1;
|
unsigned char *readPtr = packetData + 1;
|
||||||
unsigned char *startPtr = packetData;
|
unsigned char *startPtr = packetData;
|
||||||
|
|
||||||
while((readPtr - startPtr) < dataBytes) {
|
while((readPtr - startPtr) < dataBytes - sizeof(uint16_t)) {
|
||||||
agentType = *readPtr++;
|
agentType = *readPtr++;
|
||||||
readPtr += unpackAgentId(readPtr, (uint16_t *)&agentId);
|
readPtr += unpackAgentId(readPtr, (uint16_t *)&agentId);
|
||||||
readPtr += unpackSocket(readPtr, (sockaddr *)&agentPublicSocket);
|
readPtr += unpackSocket(readPtr, (sockaddr *)&agentPublicSocket);
|
||||||
readPtr += unpackSocket(readPtr, (sockaddr *)&agentLocalSocket);
|
readPtr += unpackSocket(readPtr, (sockaddr *)&agentLocalSocket);
|
||||||
|
|
||||||
addOrUpdateAgent((sockaddr *)&agentPublicSocket, (sockaddr *)&agentLocalSocket, agentType, agentId);
|
addOrUpdateAgent((sockaddr *)&agentPublicSocket, (sockaddr *)&agentLocalSocket, agentType, agentId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// read out our ID from the packet
|
||||||
|
unpackAgentId(readPtr, &_ownerID);
|
||||||
|
|
||||||
return readAgents;
|
return readAgents;
|
||||||
}
|
}
|
||||||
|
|
|
@ -56,7 +56,7 @@ public:
|
||||||
void lock() { pthread_mutex_lock(&mutex); }
|
void lock() { pthread_mutex_lock(&mutex); }
|
||||||
void unlock() { pthread_mutex_unlock(&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* agentWithAddress(sockaddr *senderAddress);
|
||||||
Agent* agentWithID(uint16_t agentID);
|
Agent* agentWithID(uint16_t agentID);
|
||||||
|
|
Loading…
Reference in a new issue