Update Rewind.h, TellusAgent.c
This commit is contained in:
parent
7c2ef72513
commit
b02587fd94
2 changed files with 170 additions and 42 deletions
|
@ -101,8 +101,8 @@ void print(const char* format, ...)
|
|||
int main(int argc, const char* argv[])
|
||||
{
|
||||
print("\n");
|
||||
print("TellusAgent for BrandMeister DMR Master Server\n");
|
||||
print("Copyright 2016 Artem Prilutskiy (R3ABM, cyanide.burnout@gmail.com)\n");
|
||||
print("TellusAgent for BrandMeister Core\n");
|
||||
print("Copyright 2016-2023 Artem Prilutskiy (R3ABM, cyanide.burnout@gmail.com)\n");
|
||||
print("Software revision " STRING(VERSION) " build " BUILD "\n");
|
||||
print("\n");
|
||||
|
||||
|
@ -185,7 +185,7 @@ int main(int argc, const char* argv[])
|
|||
if (serviceMode & MODE_SYSLOG)
|
||||
{
|
||||
// Set proper origin for syslog (required by OpenWRT)
|
||||
openlog("TellusAgent", LOG_NOWAIT | LOG_PID, LOG_USER);
|
||||
openlog("TellusAgent", LOG_NOWAIT | LOG_PID, LOG_USER);
|
||||
}
|
||||
|
||||
#ifdef __linux__
|
||||
|
@ -199,7 +199,7 @@ int main(int argc, const char* argv[])
|
|||
#ifdef __MACH__
|
||||
if (serviceMode & MODE_DAEMON)
|
||||
{
|
||||
launch_data_t request = launch_data_new_string(LAUNCH_KEY_CHECKIN);
|
||||
launch_data_t request = launch_data_new_string(LAUNCH_KEY_CHECKIN);
|
||||
launch_data_t response = launch_msg(request);
|
||||
launch_data_free(request);
|
||||
if (response == NULL)
|
||||
|
@ -231,11 +231,11 @@ int main(int argc, const char* argv[])
|
|||
hints.ai_socktype = SOCK_DGRAM;
|
||||
|
||||
#ifdef __linux__
|
||||
hints.ai_flags = AI_ADDRCONFIG;
|
||||
hints.ai_flags = AI_ADDRCONFIG;
|
||||
hints.ai_family = AF_UNSPEC;
|
||||
#endif
|
||||
#ifdef __MACH__
|
||||
hints.ai_flags = AI_V4MAPPED;
|
||||
hints.ai_flags = AI_V4MAPPED;
|
||||
hints.ai_family = AF_INET6;
|
||||
#endif
|
||||
|
||||
|
@ -260,7 +260,7 @@ int main(int argc, const char* argv[])
|
|||
int handle;
|
||||
|
||||
proxySocketAddress.sin_port = proxyPorts[selection];
|
||||
handle = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
|
||||
handle = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP);
|
||||
|
||||
if ((handle < 0) ||
|
||||
(bind(handle, (struct sockaddr*)&proxySocketAddress, proxySocketLength) < 0))
|
||||
|
@ -277,12 +277,12 @@ int main(int argc, const char* argv[])
|
|||
int uplinkHandle;
|
||||
struct sockaddr_in6 uplinkSocketAddress;
|
||||
|
||||
uplinkSocketAddress.sin6_family = AF_INET6;
|
||||
uplinkSocketAddress.sin6_addr = in6addr_any;
|
||||
uplinkSocketAddress.sin6_port = 0;
|
||||
uplinkSocketAddress.sin6_family = AF_INET6;
|
||||
uplinkSocketAddress.sin6_addr = in6addr_any;
|
||||
uplinkSocketAddress.sin6_port = 0;
|
||||
uplinkSocketAddress.sin6_scope_id = 0;
|
||||
|
||||
uplinkHandle = socket(AF_INET6, SOCK_DGRAM, IPPROTO_UDP);
|
||||
uplinkHandle = socket(PF_INET6, SOCK_DGRAM, IPPROTO_UDP);
|
||||
if ((uplinkHandle < 0) ||
|
||||
(bind(uplinkHandle, (struct sockaddr*)&uplinkSocketAddress, sizeof(uplinkSocketAddress)) < 0))
|
||||
{
|
||||
|
@ -310,7 +310,7 @@ int main(int argc, const char* argv[])
|
|||
|
||||
int pollHandle;
|
||||
struct epoll_event event;
|
||||
|
||||
|
||||
pollHandle = epoll_create(EVENT_LIST_LENGTH);
|
||||
|
||||
event.events = EPOLLIN;
|
||||
|
@ -419,7 +419,7 @@ int main(int argc, const char* argv[])
|
|||
if (watchDog > WATCH_THRESHOLD)
|
||||
{
|
||||
print("Server connection timed out\n");
|
||||
break;
|
||||
break;
|
||||
}
|
||||
|
||||
for (size_t index = 0; index < count; index ++)
|
||||
|
@ -437,7 +437,7 @@ int main(int argc, const char* argv[])
|
|||
{
|
||||
struct sockaddr_in6 address;
|
||||
socklen_t size = sizeof(address);
|
||||
size_t length = recvfrom(uplinkHandle, incomingBuffer, BUFFER_SIZE, 0, (struct sockaddr*)&address, &size);
|
||||
size_t length = recvfrom(uplinkHandle, incomingBuffer, BUFFER_SIZE, 0, (struct sockaddr*)&address, &size);
|
||||
|
||||
if ((length >= sizeof(struct RewindData)) &&
|
||||
((serverAddress->ai_addr->sa_family == AF_INET) || /* Work-around for Linux */
|
||||
|
@ -456,13 +456,28 @@ int main(int argc, const char* argv[])
|
|||
struct sockaddr_in* address;
|
||||
|
||||
selection = type - REWIND_TYPE_PEER_DATA;
|
||||
address = repeaterSocketAddresses + selection;
|
||||
handle = proxyHandles[selection];
|
||||
address = repeaterSocketAddresses + selection;
|
||||
handle = proxyHandles[selection];
|
||||
|
||||
sendto(handle, incomingBuffer->data, length, 0, (struct sockaddr*)address, sizeof(struct sockaddr_in));
|
||||
continue;
|
||||
}
|
||||
|
||||
if (type == REWIND_TYPE_XNMS_DATA)
|
||||
{
|
||||
struct sockaddr_in* address;
|
||||
struct RewindForwardData* data;
|
||||
|
||||
data = (struct RewindForwardData*)incomingBuffer->data;
|
||||
length -= sizeof(struct RewindForwardData);
|
||||
address = repeaterSocketAddresses + 1;
|
||||
|
||||
address->sin_port = data->port;
|
||||
|
||||
sendto(proxyHandles[1], data->data, length, 0, (struct sockaddr*)address, sizeof(struct sockaddr_in));
|
||||
continue;
|
||||
}
|
||||
|
||||
if (type == REWIND_TYPE_REPORT)
|
||||
{
|
||||
incomingBuffer->data[length] = '\0';
|
||||
|
@ -488,7 +503,7 @@ int main(int argc, const char* argv[])
|
|||
|
||||
watchDog ++;
|
||||
|
||||
outgoingBuffer->type = htole16(REWIND_TYPE_BINDING_NOTICE);
|
||||
outgoingBuffer->type = htole16(REWIND_TYPE_BINDING_NOTICE);
|
||||
outgoingBuffer->length = htole16(sizeof(proxyPorts));
|
||||
|
||||
vectors[0].iov_base = outgoingBuffer;
|
||||
|
@ -511,12 +526,12 @@ int main(int argc, const char* argv[])
|
|||
int handle = proxyHandles[selection];
|
||||
if (CHECK(event, handle))
|
||||
{
|
||||
socklen_t size = sizeof(struct sockaddr_in);
|
||||
uint8_t* buffer = (uint8_t*)outgoingBuffer->data;
|
||||
socklen_t size = sizeof(struct sockaddr_in);
|
||||
uint8_t* buffer = (uint8_t*)outgoingBuffer->data;
|
||||
struct sockaddr_in* address = repeaterSocketAddresses + selection;
|
||||
size_t length = recvfrom(handle, buffer, BUFFER_SIZE, 0, (struct sockaddr*)address, &size);
|
||||
size_t length = recvfrom(handle, buffer, BUFFER_SIZE, 0, (struct sockaddr*)address, &size);
|
||||
|
||||
outgoingBuffer->type = htole16(REWIND_CLASS_HYTERA_DATA + selection);
|
||||
outgoingBuffer->type = htole16(REWIND_CLASS_HYTERA_DATA + selection);
|
||||
outgoingBuffer->length = htole16(length);
|
||||
|
||||
length += sizeof(struct RewindData);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue