Add refresh peers binary

This commit is contained in:
Melon 2021-04-24 11:18:56 +01:00
parent 267ba7a5aa
commit f44cfcb1ce

View File

@ -0,0 +1,93 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <errno.h>
#include <stddef.h>
#include "mjson.h"
#include "unix_sockets.h"
#include "melon_vpn_sock.h"
#define JBUF_SIZE 5000
#define NAME_MAX 25
#define IP_MAX 15
#define DEV_MAX 25
struct dev_t {
char name[NAME_MAX];
char ip[IP_MAX];
};
struct devlist_t {
int ndevices;
struct dev_t list[DEV_MAX];
};
static struct devlist_t devicelist;
static int json_devicelist_read(const char *buf) {
const struct json_attr_t json_attrs_subdevice[] = {
{"Name",t_string,STRUCTOBJECT(struct dev_t,name),.len=NAME_MAX},
{"IP",t_string,STRUCTOBJECT(struct dev_t,ip),.len=IP_MAX},
{NULL},
};
const struct json_attr_t json_attrs_devices[] = {
{"devices", t_array, STRUCTARRAY(devicelist.list,json_attrs_subdevice,&devicelist.ndevices)},
{NULL},
};
int status;
memset(&devicelist, '\0', sizeof(devicelist));
status = json_read_object(buf, json_attrs_devices, NULL);
if (status != 0) return status;
return 0;
}
void send_to_daemon(char*, ssize_t);
int main(int argc, char *argv[]) {
char jbuf[JBUF_SIZE];
char ibuf[JBUF_SIZE];
strcpy(jbuf, "{\"devices\":");
read(STDIN_FILENO, ibuf, JBUF_SIZE);
strcat(jbuf, ibuf);
strcat(jbuf, "}");
int status = json_devicelist_read(jbuf);
if (status != 0) {
puts(json_error_string(status));
} else {
ssize_t l=0;
char obuf[JBUF_SIZE];
obuf[JBUF_SIZE-1]=0;
strcpy(obuf, "");
for (int i = 0; i < devicelist.ndevices; i++) {
l += strlen(devicelist.list[i].name)+strlen(devicelist.list[i].ip)+2;
strcat(obuf, devicelist.list[i].name);
strcat(obuf, "\t");
strcat(obuf, devicelist.list[i].ip);
strcat(obuf, "\n");
obuf[l]=0;
fprintf(stderr, "l: %d\nobuf: %d\n",l,strlen(obuf));
}
send_to_daemon(obuf,l);
}
}
void send_to_daemon(char *buf, ssize_t n) {
int sfd = unix_socket_client_start(SV_RPEERS_SOCK_PATH);
if(sfd==-1) {
return;
}
write(sfd, buf, n);
// Closes our socket; server sees EOF.
exit(EXIT_SUCCESS);
fprintf(stderr, "Closed connection to socket");
}