#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
#include <string.h>
#include <netinet/ip.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <linux/un.h>
#include <unistd.h>
#include <sys/time.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <errno.h>
#include <time.h>
#include <ctype.h>
#include <limits.h>


struct sockaddr_un recv_un, send_un;
int recv_fd = -1, send_fd = -1;
char *fn = "/tmp/pwz";
char *fn2 = "/tmp/pwy";

void unix_recv_socket()
{
    if ((recv_fd = socket(AF_UNIX, SOCK_DGRAM, 0)) == -1)
        perror("socket");

    memset(&recv_un, 0, sizeof recv_un);

    recv_un.sun_family = AF_UNIX;
    strncpy(recv_un.sun_path, fn2, UNIX_PATH_MAX);
    unlink(recv_un.sun_path);

    if(bind(recv_fd, (struct sockaddr*)&recv_un, sizeof recv_un) < 0)
        perror("bind");

}
void unix_send_socket()
{
    if ((send_fd = socket(AF_UNIX, SOCK_DGRAM, 0)) == -1)
        perror("socket");

    memset(&send_un, 0, sizeof send_un);

    send_un.sun_family = AF_UNIX;
    strncpy(send_un.sun_path, fn, UNIX_PATH_MAX);

    if (connect(send_fd, (struct sockaddr*)&send_un, sizeof send_un) == -1) {
        perror("connect");
        shutdown(send_fd, SHUT_RDWR);
        close(send_fd);
        exit(1);
    }

}
void usage(char *arg0)
{
    fprintf(stderr, "Usage: %s [-q|-i interest|-a interest|-d interest]\n", arg0);
    exit(1);
}

int main(int argc, char **argv)
{
    unix_recv_socket();
    unix_send_socket();

    if (argc > 3)
        usage(argv[0]);

    char buf[1024] = "hi";

    if (argc > 1)
    {
        if (argv[1][0] != '-' ||
            (argv[1][1] != 'a' && argv[1][1] != 'q' && argv[1][1] != 'd' && argv[1][1] != 'i'))
            usage(argv[0]);
        
        if (argv[1][1] == 'q' && argc != 2)
            usage(argv[0]);
        else if (argv[1][1] != 'q' && argc != 3)
            usage(argv[0]);
        strcat(buf, argv[1]);
    }
    else
    {
        strcat(buf, "-n");
    }
    if (argc > 2)
    {
        strcat(buf, " ");
        strcat(buf, argv[2]);
    }
    buf[2] = ' ';

    if(send(send_fd, buf, strlen(buf)+1, 0) == -1)
        perror("send");

    int len;
    if ((len = recv(recv_fd, buf, 1024, 0)) == -1)
        perror("recv");

    printf("sup: %s\n", buf);

    return 0;
};
