Annotation of embedaddon/miniupnpd/miniupnpc-async/parsessdpreply.c, revision 1.1
1.1 ! misho 1: /* $Id: parsessdpreply.c,v 1.2 2009/11/14 10:37:55 nanard Exp $ */
! 2: /* Project : miniupnp
! 3: * website : http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/
! 4: * Author : Thomas Bernard
! 5: * copyright (c) 2005-2009 Thomas Bernard
! 6: *
! 7: * Permission to use, copy, modify, and/or distribute this software for any
! 8: * purpose with or without fee is hereby granted, provided that the above
! 9: * copyright notice and this permission notice appear in all copies.
! 10: *
! 11: * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
! 12: * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
! 13: * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
! 14: * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
! 15: * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
! 16: * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
! 17: * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
! 18: #include <strings.h>
! 19: #include "parsessdpreply.h"
! 20:
! 21: /* parseMSEARCHReply()
! 22: * the last 4 arguments are filled during the parsing :
! 23: * - location/locationsize : "location:" field of the SSDP reply packet
! 24: * - st/stsize : "st:" field of the SSDP reply packet.
! 25: * The strings are NOT null terminated */
! 26: void
! 27: parseMSEARCHReply(const char * reply, int size,
! 28: const char * * location, int * locationsize,
! 29: const char * * st, int * stsize)
! 30: {
! 31: int a, b, i;
! 32: i = 0;
! 33: a = i; /* start of the line */
! 34: b = 0;
! 35: while(i<size)
! 36: {
! 37: switch(reply[i])
! 38: {
! 39: case ':':
! 40: if(b==0)
! 41: {
! 42: b = i; /* end of the "header" */
! 43: /*for(j=a; j<b; j++)
! 44: {
! 45: putchar(reply[j]);
! 46: }
! 47: */
! 48: }
! 49: break;
! 50: case '\x0a':
! 51: case '\x0d':
! 52: if(b!=0)
! 53: {
! 54: /*for(j=b+1; j<i; j++)
! 55: {
! 56: putchar(reply[j]);
! 57: }
! 58: putchar('\n');*/
! 59: do { b++; } while(reply[b]==' ');
! 60: if(0==strncasecmp(reply+a, "location:", 9))
! 61: {
! 62: *location = reply+b;
! 63: *locationsize = i-b;
! 64: }
! 65: else if(0==strncasecmp(reply+a, "st:", 3))
! 66: {
! 67: *st = reply+b;
! 68: *stsize = i-b;
! 69: }
! 70: b = 0;
! 71: }
! 72: a = i+1;
! 73: break;
! 74: default:
! 75: break;
! 76: }
! 77: i++;
! 78: }
! 79: }
! 80:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>