File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / miniupnpd / minissdpd / printresponse.c
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Wed Sep 27 11:25:11 2023 UTC (14 months, 4 weeks ago) by misho
Branches: miniupnpd, MAIN
CVS tags: v2_3_3p0, HEAD
Version 2.3.3p0

    1: /* $Id: printresponse.c,v 1.1.1.1 2023/09/27 11:25:11 misho Exp $ */
    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>