led
This commit is contained in:
108
src/sinkSender.c
108
src/sinkSender.c
@ -56,6 +56,64 @@ void sinkSenderInit(config_t *pCfg) {
|
|||||||
secondOfMinute = 0;
|
secondOfMinute = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void sinkSenderSendMinute() {
|
||||||
|
led(E_BLUE, true);
|
||||||
|
led(E_RED, false);
|
||||||
|
|
||||||
|
struct sysinfo info;
|
||||||
|
sysinfo(&info);
|
||||||
|
|
||||||
|
minuteBuffer.s.totalRunningHours = info.uptime / 3600;
|
||||||
|
minuteBuffer.s.totalPowercycles = 0;
|
||||||
|
minuteBuffer.s.totalWatchdogResets = 0;
|
||||||
|
minuteBuffer.s.version = strtol(VERSION, NULL, 16);
|
||||||
|
|
||||||
|
memset(minuteBuffer.s.deviceId, 0, sizeof(minuteBuffer.s.deviceId));
|
||||||
|
strcpy(minuteBuffer.s.deviceId, deviceId);
|
||||||
|
|
||||||
|
memcpy(minuteBuffer.s.hash, sharedSecret, SHA256_BLOCK_SIZE);
|
||||||
|
SHA256_CTX ctx;
|
||||||
|
sha256_init(&ctx);
|
||||||
|
sha256_update(&ctx, minuteBuffer.b, sizeof(minuteBuffer.b));
|
||||||
|
sha256_final(&ctx, minuteBuffer.s.hash);
|
||||||
|
|
||||||
|
struct hostent *hptr = gethostbyname(sinkServer);
|
||||||
|
if (hptr) {
|
||||||
|
if (hptr->h_addrtype == AF_INET) {
|
||||||
|
char *sinkAddr = hptr->h_addr_list[0];
|
||||||
|
logmsg(LOG_DEBUG, "sink addr: %d.%d.%d.%d",
|
||||||
|
sinkAddr[0], sinkAddr[1], sinkAddr[2], sinkAddr[3]);
|
||||||
|
|
||||||
|
int sockfd = socket(AF_INET, SOCK_DGRAM, 0);
|
||||||
|
if (sockfd != -1) {
|
||||||
|
struct sockaddr_in servaddr;
|
||||||
|
memset(&servaddr, 0, sizeof(servaddr));
|
||||||
|
servaddr.sin_family = AF_INET;
|
||||||
|
servaddr.sin_port = htons(sinkPort);
|
||||||
|
memcpy(&servaddr.sin_addr.s_addr, sinkAddr, 4);
|
||||||
|
|
||||||
|
ssize_t res = sendto(sockfd, minuteBuffer.b, sizeof(minuteBuffer.b),
|
||||||
|
0, (struct sockaddr*)&servaddr,
|
||||||
|
sizeof(servaddr));
|
||||||
|
logmsg(LOG_DEBUG, "%d octets sent", res);
|
||||||
|
} else {
|
||||||
|
led(E_RED, true);
|
||||||
|
logmsg(LOG_ERR, "unable to get socket: %s", strerror(errno));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
led(E_RED, true);
|
||||||
|
logmsg(LOG_ERR, "unknown address type: %d", hptr->h_addrtype);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
led(E_RED, true);
|
||||||
|
logmsg(LOG_ERR, "sinkserver %s couldn't be resolved: %s", sinkServer, hstrerror(h_errno));
|
||||||
|
}
|
||||||
|
|
||||||
|
led(E_BLUE, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void sinkSenderPut(uint32_t seconds, uint32_t frequency) {
|
void sinkSenderPut(uint32_t seconds, uint32_t frequency) {
|
||||||
led(E_GREEN, false);
|
led(E_GREEN, false);
|
||||||
logmsg(LOG_DEBUG, "s: %lu, f: %lu", seconds, frequency);
|
logmsg(LOG_DEBUG, "s: %lu, f: %lu", seconds, frequency);
|
||||||
@ -69,55 +127,9 @@ void sinkSenderPut(uint32_t seconds, uint32_t frequency) {
|
|||||||
if (secondOfMinute == SECONDS_PER_MINUTE) {
|
if (secondOfMinute == SECONDS_PER_MINUTE) {
|
||||||
logmsg(LOG_DEBUG, "minute is full");
|
logmsg(LOG_DEBUG, "minute is full");
|
||||||
secondOfMinute = 0;
|
secondOfMinute = 0;
|
||||||
|
|
||||||
struct sysinfo info;
|
sinkSenderSendMinute();
|
||||||
sysinfo(&info);
|
|
||||||
|
|
||||||
minuteBuffer.s.totalRunningHours = info.uptime / 3600;
|
|
||||||
minuteBuffer.s.totalPowercycles = 0;
|
|
||||||
minuteBuffer.s.totalWatchdogResets = 0;
|
|
||||||
minuteBuffer.s.version = strtol(VERSION, NULL, 16);
|
|
||||||
|
|
||||||
memset(minuteBuffer.s.deviceId, 0, sizeof(minuteBuffer.s.deviceId));
|
|
||||||
strcpy(minuteBuffer.s.deviceId, deviceId);
|
|
||||||
|
|
||||||
memcpy(minuteBuffer.s.hash, sharedSecret, SHA256_BLOCK_SIZE);
|
|
||||||
SHA256_CTX ctx;
|
|
||||||
sha256_init(&ctx);
|
|
||||||
sha256_update(&ctx, minuteBuffer.b, sizeof(minuteBuffer.b));
|
|
||||||
sha256_final(&ctx, minuteBuffer.s.hash);
|
|
||||||
|
|
||||||
struct hostent *hptr = gethostbyname(sinkServer);
|
|
||||||
if (hptr) {
|
|
||||||
if (hptr->h_addrtype == AF_INET) {
|
|
||||||
char *sinkAddr = hptr->h_addr_list[0];
|
|
||||||
logmsg(LOG_DEBUG, "sink addr: %d.%d.%d.%d",
|
|
||||||
sinkAddr[0], sinkAddr[1], sinkAddr[2], sinkAddr[3]);
|
|
||||||
|
|
||||||
int sockfd = socket(AF_INET, SOCK_DGRAM, 0);
|
|
||||||
if (sockfd != -1) {
|
|
||||||
struct sockaddr_in servaddr;
|
|
||||||
memset(&servaddr, 0, sizeof(servaddr));
|
|
||||||
servaddr.sin_family = AF_INET;
|
|
||||||
servaddr.sin_port = htons(sinkPort);
|
|
||||||
memcpy(&servaddr.sin_addr.s_addr, sinkAddr, 4);
|
|
||||||
|
|
||||||
ssize_t res = sendto(sockfd, minuteBuffer.b, sizeof(minuteBuffer.b),
|
|
||||||
0, (struct sockaddr*)&servaddr,
|
|
||||||
sizeof(servaddr));
|
|
||||||
logmsg(LOG_DEBUG, "%d octets sent", res);
|
|
||||||
} else {
|
|
||||||
logmsg(LOG_ERR, "unable to get socket: %s", strerror(errno));
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
logmsg(LOG_ERR, "unknown address type: %d", hptr->h_addrtype);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
logmsg(LOG_ERR, "sinkserver %s couldn't be resolved: %s", sinkServer, hstrerror(h_errno));
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
led(E_GREEN, true);
|
led(E_GREEN, true);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user