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

1.1     ! misho       1: /* $Id: $ */
        !             2: /* vim: tabstop=4 shiftwidth=4 noexpandtab
        !             3:  * Project : miniupnp
        !             4:  * website : http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/
        !             5:  * Author : Thomas BERNARD
        !             6:  * copyright (c) 2005-2016 Thomas Bernard
        !             7:  * This software is subjet to the conditions detailed in the
        !             8:  * provided LICENCE file. */
        !             9: 
        !            10: #include <stdio.h>
        !            11: #include "codelength.h"
        !            12: 
        !            13: #define NOTIF_NEW    1
        !            14: #define NOTIF_UPDATE 2
        !            15: #define NOTIF_REMOVE 3
        !            16: 
        !            17: void printresponse(const unsigned char * resp, int n)
        !            18: {
        !            19:    int i, l;
        !            20:    int notif_type;
        !            21:    unsigned int nresp;
        !            22:    const unsigned char * p;
        !            23: 
        !            24:    if(n == 0)
        !            25:        return;
        !            26:    /* first, hexdump the response : */
        !            27:    for(i = 0; i < n; i += 16) {
        !            28:        printf("%06x | ", i);
        !            29:        for(l = i; l < n && l < (i + 16); l++)
        !            30:            printf("%02x ", resp[l]);
        !            31:        while(l < (i + 16)) {
        !            32:            printf("   ");
        !            33:            l++;
        !            34:        }
        !            35:        printf("| ");
        !            36:        for(l = i; l < n && l < (i + 16); l++)
        !            37:            putchar((resp[l] >= ' ' && resp[l] < 128) ? resp[l] : '.');
        !            38:        putchar('\n');
        !            39:    }
        !            40:    for(p = resp; p < resp + n; ) {
        !            41:        /* now parse and display all devices of response */
        !            42:        nresp = p[0]; /* 1st byte : number of devices in response */
        !            43:        if(nresp == 0xff) {
        !            44:            /* notification */
        !            45:            notif_type = p[1];
        !            46:            nresp = p[2];
        !            47:            printf("Notification : ");
        !            48:            switch(notif_type) {
        !            49:            case NOTIF_NEW: printf("new\n"); break;
        !            50:            case NOTIF_UPDATE:  printf("update\n"); break;
        !            51:            case NOTIF_REMOVE:  printf("remove\n"); break;
        !            52:            default:    printf("**UNKNOWN**\n");
        !            53:            }
        !            54:            p += 3;
        !            55:        } else {
        !            56:            p++;
        !            57:        }
        !            58:        for(i = 0; i < (int)nresp; i++) {
        !            59:            if(p >= resp + n)
        !            60:                goto error;
        !            61:            /*l = *(p++);*/
        !            62:            DECODELENGTH(l, p);
        !            63:            if(p + l > resp + n)
        !            64:                goto error;
        !            65:            printf("%d - %.*s\n", i, l, p); /* URL */
        !            66:            p += l;
        !            67:            if(p >= resp + n)
        !            68:                goto error;
        !            69:            /*l = *(p++);*/
        !            70:            DECODELENGTH(l, p);
        !            71:            if(p + l > resp + n)
        !            72:                goto error;
        !            73:            printf("    %.*s\n", l, p); /* ST */
        !            74:            p += l;
        !            75:            if(p >= resp + n)
        !            76:                goto error;
        !            77:            /*l = *(p++);*/
        !            78:            DECODELENGTH(l, p);
        !            79:            if(p + l > resp + n)
        !            80:                goto error;
        !            81:            printf("    %.*s\n", l, p); /* USN */
        !            82:            p += l;
        !            83:        }
        !            84:    }
        !            85:    return;
        !            86: error:
        !            87:    printf("*** WARNING : TRUNCATED RESPONSE ***\n");
        !            88: }
        !            89: 
        !            90: 

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