Compare commits

..

2 commits

Author SHA1 Message Date
Vinzenz Schroeter 42defc7732 force use of gcc
Some checks failed
Rust / build-gnu-apt (pull_request) Failing after 4m38s
Rust / build-size-gnu-unstable (pull_request) Failing after 1m0s
2025-06-03 17:22:12 +02:00
Vinzenz Schroeter 19a9af48ee make header_logger slightly less ugly 2025-06-02 23:28:40 +02:00
2 changed files with 129 additions and 124 deletions

View file

@ -15,63 +15,7 @@ void handle_error(const char *msg) {
exit(EXIT_FAILURE);
}
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);
bool log_command(struct Command command) {
switch (command.tag) {
case COMMAND_TAG_INVALID: {
printf("-> this is an invalid command\n");
@ -79,8 +23,7 @@ int main(int argc, char **argv) {
}
case COMMAND_TAG_HARD_RESET: {
printf("-> HardReset command - exiting\n");
done = true;
break;
return true;
}
case COMMAND_TAG_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);
}

View file

@ -51,7 +51,7 @@ let
});
mkExample =
{ name, servicepointBinding }:
pkgs.stdenv.mkDerivation {
pkgs.gccStdenv.mkDerivation {
inherit version;
pname = "servicepoint-c-example-${name}";
nativeBuildInputs = [ pkgs.pkg-config ];