#include #include #include #include #include "network.h" struct dref_struct_in { int32_t dref_freq; int32_t dref_sender_index; // the index the customer is using to define this dataref char dref_string[400]; }; struct dref_struct_out { int32_t dref_sender_index; float dref_flt_value; }; int main(int argc, char *argv[]) { int xPlaneSocket; char *wtf; // check argument if (argc != 1 && (argc - 1) % 3 != 0) { fprintf(stderr, "Usage: %s [ [ ... ]]\n", argv[0]); exit(EXIT_FAILURE); } // network xPlaneSocket = createSocket(SRC_PORT); if (xPlaneSocket < 0) { exit(EXIT_FAILURE); } // char drefsToRead[413 * ((argc - 1) / 3)]; // memset(drefsToRead, 0, sizeof(drefsToRead)); for (int i = 1; i < argc; i = i + 3) { // prepare struct to send, make sure padding is with NULL bytes struct dref_struct_in drefToRead = { .dref_freq = strtoimax(argv[i + 1], &wtf, 10), .dref_sender_index = strtoimax(argv[i + 2], &wtf, 10) }; memset(drefToRead.dref_string, 0, sizeof(drefToRead.dref_string)); strcpy(drefToRead.dref_string, argv[i]); // send payload if (sendToXPlane(xPlaneSocket, DEST_SERVER, DEST_PORT, "RREF", (char *)&drefToRead, sizeof(drefToRead)) < 0) { exit(EXIT_FAILURE); } // memcpy(&drefsToRead[((i - 1) / 3) * 413], &drefToRead, sizeof(drefToRead)); } // read from network char msg[DGRAM_MSG_LENGTH + 1]; char payload[RECV_BUFFER]; while (1) { int payloadBytes = recvFromXPlane(xPlaneSocket, msg, payload, RECV_BUFFER); if (payloadBytes > 0) { printf("Received message type %s\n", msg); printf("Received message data (%d) ", payloadBytes); for (int i = 0; i < payloadBytes; i++) { printf("%02x", payload[i]); } printf("\n"); if (strcmp(msg, "RREF") == 0) { if ((payloadBytes - 1) % 8 == 0) { // XXX: loop struct dref_struct_out drefRead; memcpy(&drefRead, &payload[1], 8); printf("%d: %f\n", drefRead.dref_sender_index, drefRead.dref_flt_value); } else { exit(EXIT_FAILURE); } } else { // unknown to me } } else { exit(EXIT_FAILURE); } } // bye bye (and no, I don't care about error anymore; I'll exit anyway?!) closeSocket(xPlaneSocket); exit(EXIT_SUCCESS); }