Something went wrong on our end
test_connection.c 2.66 KiB
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <err.h>
#include <unistd.h>
#define DEFAULT_ADAPTER_SOCKET "/home/bitcraze/projects/crazyflie_groundstation.socket"
//#define DEFAULT_ADAPTER_SOCKET "./crazyflie_groundstation.socket"
#define SOCKET_ENV "ADAPTER_SOCKET"
struct backend_conn {
FILE * socket;
size_t len;
char * buf;
};
int adapterWrite(struct backend_conn *conn, const char * line) {
return fputs(line, conn->socket);
}
int main() {
int s;
struct sockaddr_un remote;
char str[100];
if ((s = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) {
perror("socket");
exit(1);
}
struct backend_conn * conn = NULL;
printf("Trying to connect...");
remote.sun_family = AF_UNIX;
char * sock_env = getenv(SOCKET_ENV);
strcpy(remote.sun_path, sock_env ? sock_env : DEFAULT_ADAPTER_SOCKET);
if (connect(s, (struct sockaddr *)&remote, sizeof(remote)) == -1) {
perror("connect");
goto fail_final;
}
conn = malloc(sizeof(struct backend_conn));
if (conn == NULL) {
perror("malloc");
goto fail_sock;
}
conn->len = 0;
conn->buf = NULL;
conn->socket = fdopen(s, "r+");
if (conn->socket == NULL) {
perror("fdopen");
goto fail_malloc_conn;
}
if (setvbuf(conn->socket, NULL, _IONBF, 0)) {
warn("setvbuf");
printf("bad");
}
printf("Success\n");
/* success */
goto fail_final;
fail_malloc_conn:
free(conn);
conn = NULL;
fail_sock:
close(s);
printf("Failure\n");
return 1;
fail_final: ;
//return conn;
//User input to adapter
int userExit;
userExit = 0;
char buffer[64];
char msg[64];
while (!userExit) {
scanf("%s", buffer);
printf("Input: %s\n", buffer);
if (strcmp(buffer, "exit") == 0) {
userExit = 1;
} else {
snprintf(msg, 64, "%s\n", buffer);
if (adapterWrite(conn, msg) < 0) {
userExit = 1;
printf("Error writing to adapter\n");
}
}
}
//Disconnect from socket
fclose(conn->socket);
if (conn->buf) {
free(conn->buf);
}
free(conn);
return 0;
}