Annotation of embedaddon/miniupnpd/minissdpd/showminissdpdnotif.c, revision 1.1

1.1     ! misho       1: /* $Id: $ */
        !             2: /* vim: shiftwidth=4 tabstop=4 noexpandtab
        !             3:  * MiniUPnP project
        !             4:  * (c) 2016 Thomas Bernard
        !             5:  * website : http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/
        !             6:  * This software is subject to the conditions detailed
        !             7:  * in the LICENCE file provided within the distribution */
        !             8: 
        !             9: #include <stdio.h>
        !            10: #include <string.h>
        !            11: #include <unistd.h>
        !            12: #include <errno.h>
        !            13: #include <signal.h>
        !            14: #include <sys/types.h>
        !            15: #include <sys/socket.h>
        !            16: #include <sys/un.h>
        !            17: 
        !            18: #include "codelength.h"
        !            19: #include "printresponse.h"
        !            20: 
        !            21: static volatile sig_atomic_t quitting = 0;
        !            22: 
        !            23: static void sighandler(int sig)
        !            24: {
        !            25:    (void)sig;
        !            26:    quitting = 1;
        !            27: }
        !            28: 
        !            29: int main(int argc, char * * argv)
        !            30: {
        !            31:    int i;
        !            32:    int s;
        !            33:    struct sockaddr_un addr;
        !            34:    const char * sockpath = "/var/run/minissdpd.sock";
        !            35:    unsigned char buffer[4096];
        !            36:    ssize_t n;
        !            37:    const char command5[] = { 0x05, 0x00 };
        !            38:    struct sigaction sa;
        !            39: 
        !            40:    for(i=0; i<argc-1; i++) {
        !            41:        if(0==strcmp(argv[i], "-s"))
        !            42:            sockpath = argv[++i];
        !            43:    }
        !            44: 
        !            45:    /* set signal handlers */
        !            46:    memset(&sa, 0, sizeof(struct sigaction));
        !            47:    sa.sa_handler = sighandler;
        !            48:    if(sigaction(SIGINT, &sa, NULL)) {
        !            49:        fprintf(stderr, "Failed to set SIGINT handler.\n");
        !            50:    }
        !            51:    sa.sa_handler = sighandler;
        !            52:    if(sigaction(SIGTERM, &sa, NULL)) {
        !            53:        fprintf(stderr, "Failed to set SIGTERM handler.\n");
        !            54:    }
        !            55: 
        !            56:    s = socket(AF_UNIX, SOCK_STREAM, 0);
        !            57:    addr.sun_family = AF_UNIX;
        !            58:    strncpy(addr.sun_path, sockpath, sizeof(addr.sun_path));
        !            59:    if(connect(s, (struct sockaddr *)&addr, sizeof(struct sockaddr_un)) < 0) {
        !            60:        fprintf(stderr, "connecting to %s : ", addr.sun_path);
        !            61:        perror("connect");
        !            62:        return 1;
        !            63:    }
        !            64:    printf("connected to %s\n", addr.sun_path);
        !            65:    n = write(s, command5, sizeof(command5));   /* NOTIF command */
        !            66:    printf("%d bytes written\n", (int)n);
        !            67: 
        !            68:    while(!quitting) {
        !            69:        n = read(s, buffer, sizeof(buffer));
        !            70:        if(n < 0) {
        !            71:            if(errno == EINTR) continue;
        !            72:            perror("read");
        !            73:            break;
        !            74:        } else if(n == 0) {
        !            75:            printf("Socket closed\n");
        !            76:            break;
        !            77:        }
        !            78:        printf("%d bytes read\n", (int)n);
        !            79:        printresponse(buffer, (int)n);
        !            80:    }
        !            81:    printf("Quit...\n");
        !            82:    close(s);
        !            83:    return 0;
        !            84: }
        !            85: 

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>