Skip to content
Snippets Groups Projects
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;
}