Annotation of embedaddon/miniupnpd/minissdpd/showminissdpdnotif.c, revision 1.1.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>