make header_logger slightly less ugly
This commit is contained in:
parent
579a68c77a
commit
19a9af48ee
|
@ -15,63 +15,7 @@ void handle_error(const char *msg) {
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
int main(int argc, char **argv) {
|
bool log_command(struct Command command) {
|
||||||
//init_env_logger();
|
|
||||||
|
|
||||||
int udp_socket = socket(AF_INET, SOCK_DGRAM, 0);
|
|
||||||
if (udp_socket == -1)
|
|
||||||
handle_error("socket could not be created\n");
|
|
||||||
|
|
||||||
char *listen_addr_arg;
|
|
||||||
if (argc > 1) {
|
|
||||||
listen_addr_arg = argv[1];
|
|
||||||
} else {
|
|
||||||
listen_addr_arg = DEFAULT_LISTEN_IP;
|
|
||||||
}
|
|
||||||
|
|
||||||
struct in_addr addr;
|
|
||||||
if (inet_aton(listen_addr_arg, &addr) == 0)
|
|
||||||
handle_error("listen ip could not be parsed\n");
|
|
||||||
|
|
||||||
struct sockaddr_in sockaddrIn = {
|
|
||||||
.sin_addr = addr,
|
|
||||||
.sin_family = AF_INET,
|
|
||||||
.sin_port = htons(2342),
|
|
||||||
};
|
|
||||||
memset(sockaddrIn.sin_zero, 0, sizeof(sockaddrIn.sin_zero));
|
|
||||||
|
|
||||||
if (bind(udp_socket, (struct sockaddr *) &sockaddrIn, sizeof(sockaddrIn)) == -1)
|
|
||||||
handle_error("could not bind socket\n");
|
|
||||||
|
|
||||||
printf("socket ready to receive on %s\n", listen_addr_arg);
|
|
||||||
|
|
||||||
uint8_t buffer[10000];
|
|
||||||
bool done = false;
|
|
||||||
while (!done) {
|
|
||||||
memset(buffer, 0, sizeof(buffer));
|
|
||||||
printf("\n");
|
|
||||||
|
|
||||||
ssize_t num_bytes = recv(udp_socket, (void *) buffer, sizeof(buffer), 0);
|
|
||||||
if (num_bytes == -1)
|
|
||||||
handle_error("could not read from client");
|
|
||||||
|
|
||||||
Packet *packet = sp_packet_try_load((ByteSlice) {
|
|
||||||
.start = buffer,
|
|
||||||
.length = num_bytes,
|
|
||||||
});
|
|
||||||
if (packet == NULL) {
|
|
||||||
printf("received invalid packet\n");
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
struct Header *header = sp_packet_get_header(packet);
|
|
||||||
|
|
||||||
ByteSlice payload = sp_packet_get_payload(packet);
|
|
||||||
printf("Received packet: cc=%d, a=%d, b=%d, c=%d, d=%d, payload=%p (len %zu)\n",
|
|
||||||
header->command_code, header->a, header->b, header->c, header->d,
|
|
||||||
payload.start, payload.length);
|
|
||||||
|
|
||||||
struct Command command = sp_cmd_generic_try_from_packet(packet);
|
|
||||||
switch (command.tag) {
|
switch (command.tag) {
|
||||||
case COMMAND_TAG_INVALID: {
|
case COMMAND_TAG_INVALID: {
|
||||||
printf("-> this is an invalid command\n");
|
printf("-> this is an invalid command\n");
|
||||||
|
@ -79,8 +23,7 @@ int main(int argc, char **argv) {
|
||||||
}
|
}
|
||||||
case COMMAND_TAG_HARD_RESET: {
|
case COMMAND_TAG_HARD_RESET: {
|
||||||
printf("-> HardReset command - exiting\n");
|
printf("-> HardReset command - exiting\n");
|
||||||
done = true;
|
return true;
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
case COMMAND_TAG_BITMAP: {
|
case COMMAND_TAG_BITMAP: {
|
||||||
BitmapCommand *bitmapCommand = command.data.bitmap;
|
BitmapCommand *bitmapCommand = command.data.bitmap;
|
||||||
|
@ -196,6 +139,68 @@ int main(int argc, char **argv) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int argc, char **argv) {
|
||||||
|
//init_env_logger();
|
||||||
|
|
||||||
|
int udp_socket = socket(AF_INET, SOCK_DGRAM, 0);
|
||||||
|
if (udp_socket == -1)
|
||||||
|
handle_error("socket could not be created\n");
|
||||||
|
|
||||||
|
char *listen_addr_arg;
|
||||||
|
if (argc > 1) {
|
||||||
|
listen_addr_arg = argv[1];
|
||||||
|
} else {
|
||||||
|
listen_addr_arg = DEFAULT_LISTEN_IP;
|
||||||
|
}
|
||||||
|
|
||||||
|
struct in_addr addr;
|
||||||
|
if (inet_aton(listen_addr_arg, &addr) == 0)
|
||||||
|
handle_error("listen ip could not be parsed\n");
|
||||||
|
|
||||||
|
struct sockaddr_in sockaddrIn = {
|
||||||
|
.sin_addr = addr,
|
||||||
|
.sin_family = AF_INET,
|
||||||
|
.sin_port = htons(2342),
|
||||||
|
};
|
||||||
|
memset(sockaddrIn.sin_zero, 0, sizeof(sockaddrIn.sin_zero));
|
||||||
|
|
||||||
|
if (bind(udp_socket, (struct sockaddr *) &sockaddrIn, sizeof(sockaddrIn)) == -1)
|
||||||
|
handle_error("could not bind socket\n");
|
||||||
|
|
||||||
|
printf("socket ready to receive on %s\n", listen_addr_arg);
|
||||||
|
|
||||||
|
uint8_t buffer[10000];
|
||||||
|
bool done = false;
|
||||||
|
while (!done) {
|
||||||
|
memset(buffer, 0, sizeof(buffer));
|
||||||
|
printf("\n");
|
||||||
|
|
||||||
|
ssize_t num_bytes = recv(udp_socket, (void *) buffer, sizeof(buffer), 0);
|
||||||
|
if (num_bytes == -1)
|
||||||
|
handle_error("could not read from client");
|
||||||
|
|
||||||
|
Packet *packet = sp_packet_try_load((ByteSlice) {
|
||||||
|
.start = buffer,
|
||||||
|
.length = num_bytes,
|
||||||
|
});
|
||||||
|
if (packet == NULL) {
|
||||||
|
printf("received invalid packet\n");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
struct Header *header = sp_packet_get_header(packet);
|
||||||
|
|
||||||
|
ByteSlice payload = sp_packet_get_payload(packet);
|
||||||
|
printf("Received packet: cc=%d, a=%d, b=%d, c=%d, d=%d, payload=%p (len %zu)\n",
|
||||||
|
header->command_code, header->a, header->b, header->c, header->d,
|
||||||
|
payload.start, payload.length);
|
||||||
|
|
||||||
|
struct Command command = sp_cmd_generic_try_from_packet(packet);
|
||||||
|
done = log_command(command);
|
||||||
|
|
||||||
sp_cmd_generic_free(command);
|
sp_cmd_generic_free(command);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue