#include #include #include #include #include // BSD compatible #include #include #include #include #include "network.h" char* printable(char *str) { char *ret = strdup(str); for (int i = strlen(ret); i >= 0; i--) { if (ret[i] == '\r' || ret[i] == '\n') { ret[i] = '\0'; } } return ret; } int sendCommand(int sock, char *cmd) { char bytesToSend[COMMAND_BUFFER]; memset(bytesToSend, 0, COMMAND_BUFFER); strcpy(&bytesToSend[0], "CMND"); strcpy(&bytesToSend[5], cmd); int numBytesSend = send(sock, bytesToSend, 5 + strlen(cmd), 0); if (numBytesSend >= 0) { //printf("Send %d bytes to %s:%d: %s\n", numBytesSend, SERVER, PORT, printable(bytesToSend)); return numBytesSend; } else { fprintf(stderr, "Failed to send message to %s:%d (%d): %s", SERVER, PORT, errno, strerror(errno)); return -1; } } int connectXPlane(char *addr, int port) { int xPlaneSocket; struct sockaddr_in6 xPlaneAddress; int err; // create socket xPlaneSocket = socket(AF_INET6, SOCK_DGRAM, 0); if (xPlaneSocket == -1) { fprintf(stderr, "Error creating socket (%d): %s\n", errno, strerror(errno)); return -1; } // prepare address struct xPlaneAddress.sin6_family = AF_INET6; xPlaneAddress.sin6_port = htons(PORT); inet_pton(AF_INET6, SERVER, &xPlaneAddress.sin6_addr.s6_addr); // connect to xPlane err = connect(xPlaneSocket, (struct sockaddr *)&xPlaneAddress, sizeof(xPlaneAddress)); if (err) { fprintf(stderr, "Error connecting %s:%d (%d): %s\n", SERVER, PORT, err, gai_strerror(err)); return -1; } return xPlaneSocket; } int disconnectXPlane(int sock) { // bye bye (and no, I don't care about error anymore; I'll exit anyway?!) close(sock); }