Annotation of embedaddon/miniupnpc/src/testportlistingparse.c, revision 1.1
1.1 ! misho 1: /* $Id: testportlistingparse.c,v 1.2 2014/11/01 10:37:32 nanard Exp $ */
! 2: /* Project : miniupnp
! 3: * http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/
! 4: * Author : Thomas Bernard
! 5: * Copyright (c) 2014 Thomas Bernard
! 6: * This software is subject to the conditions detailed in the
! 7: * LICENCE file provided in this distribution.
! 8: * */
! 9:
! 10: #include <string.h>
! 11: #include <stdio.h>
! 12: #include "portlistingparse.h"
! 13:
! 14: struct port_mapping {
! 15: unsigned int leasetime;
! 16: unsigned short externalport;
! 17: unsigned short internalport;
! 18: const char * remotehost;
! 19: const char * client;
! 20: const char * proto;
! 21: const char * desc;
! 22: unsigned char enabled;
! 23: };
! 24:
! 25: /* return the number of differences */
! 26: int test(const char * portListingXml, int portListingXmlLen,
! 27: const struct port_mapping * ref, int count)
! 28: {
! 29: int i;
! 30: int r = 0;
! 31: struct PortMappingParserData data;
! 32: struct PortMapping * pm;
! 33:
! 34: memset(&data, 0, sizeof(data));
! 35: ParsePortListing(portListingXml, portListingXmlLen, &data);
! 36: for(i = 0, pm = data.l_head;
! 37: (pm != NULL) && (i < count);
! 38: i++, pm = pm->l_next) {
! 39: printf("%2d %s %5hu->%s:%-5hu '%s' '%s' %u\n",
! 40: i, pm->protocol, pm->externalPort, pm->internalClient,
! 41: pm->internalPort,
! 42: pm->description, pm->remoteHost,
! 43: (unsigned)pm->leaseTime);
! 44: if(0 != strcmp(pm->protocol, ref[i].proto)) {
! 45: printf("protocol : '%s' != '%s'\n", pm->protocol, ref[i].proto);
! 46: r++;
! 47: }
! 48: if(pm->externalPort != ref[i].externalport) {
! 49: printf("externalPort : %hu != %hu\n",
! 50: pm->externalPort, ref[i].externalport);
! 51: r++;
! 52: }
! 53: if(0 != strcmp(pm->internalClient, ref[i].client)) {
! 54: printf("client : '%s' != '%s'\n",
! 55: pm->internalClient, ref[i].client);
! 56: r++;
! 57: }
! 58: if(pm->internalPort != ref[i].internalport) {
! 59: printf("internalPort : %hu != %hu\n",
! 60: pm->internalPort, ref[i].internalport);
! 61: r++;
! 62: }
! 63: if(0 != strcmp(pm->description, ref[i].desc)) {
! 64: printf("description : '%s' != '%s'\n",
! 65: pm->description, ref[i].desc);
! 66: r++;
! 67: }
! 68: if(0 != strcmp(pm->remoteHost, ref[i].remotehost)) {
! 69: printf("remoteHost : '%s' != '%s'\n",
! 70: pm->remoteHost, ref[i].remotehost);
! 71: r++;
! 72: }
! 73: if((unsigned)pm->leaseTime != ref[i].leasetime) {
! 74: printf("leaseTime : %u != %u\n",
! 75: (unsigned)pm->leaseTime, ref[i].leasetime);
! 76: r++;
! 77: }
! 78: if(pm->enabled != ref[i].enabled) {
! 79: printf("enabled : %d != %d\n",
! 80: (int)pm->enabled, (int)ref[i].enabled);
! 81: r++;
! 82: }
! 83: }
! 84: if((i != count) || (pm != NULL)) {
! 85: printf("count mismatch : i=%d count=%d pm=%p\n", i, count, pm);
! 86: r++;
! 87: }
! 88: FreePortListing(&data);
! 89: return r;
! 90: }
! 91:
! 92: const char test_document[] =
! 93: "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
! 94: "<p:PortMappingList xmlns:p=\"urn:schemas-upnp-org:gw:WANIPConnection\"\n"
! 95: "xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" \n"
! 96: "xsi:schemaLocation=\"urn:schemas-upnp-org:gw:WANIPConnection "
! 97: "http://www.upnp.org/schemas/gw/WANIPConnection-v2.xsd\">\n"
! 98: " <p:PortMappingEntry>\n"
! 99: " <p:NewRemoteHost></p:NewRemoteHost>\n"
! 100: " <p:NewExternalPort>5002</p:NewExternalPort>\n"
! 101: " <p:NewProtocol>UDP</p:NewProtocol>\n"
! 102: " <p:NewInternalPort>4001</p:NewInternalPort>\n"
! 103: " <p:NewInternalClient>192.168.1.123</p:NewInternalClient>\n"
! 104: " <p:NewEnabled>1</p:NewEnabled>\n"
! 105: " <p:NewDescription>xxx</p:NewDescription>\n"
! 106: " <p:NewLeaseTime>0</p:NewLeaseTime>\n"
! 107: " </p:PortMappingEntry>\n"
! 108: " <p:PortMappingEntry>\n"
! 109: " <p:NewRemoteHost>202.233.2.1</p:NewRemoteHost>\n"
! 110: " <p:NewExternalPort>2345</p:NewExternalPort>\n"
! 111: " <p:NewProtocol>TCP</p:NewProtocol>\n"
! 112: " <p:NewInternalPort>2349</p:NewInternalPort>\n"
! 113: " <p:NewInternalClient>192.168.1.137</p:NewInternalClient>\n"
! 114: " <p:NewEnabled>1</p:NewEnabled>\n"
! 115: " <p:NewDescription>dooom</p:NewDescription>\n"
! 116: " <p:NewLeaseTime>346</p:NewLeaseTime>\n"
! 117: " </p:PortMappingEntry>\n"
! 118: " <p:PortMappingEntry>\n"
! 119: " <p:NewRemoteHost>134.231.2.11</p:NewRemoteHost>\n"
! 120: " <p:NewExternalPort>12345</p:NewExternalPort>\n"
! 121: " <p:NewProtocol>TCP</p:NewProtocol>\n"
! 122: " <p:NewInternalPort>12345</p:NewInternalPort>\n"
! 123: " <p:NewInternalClient>192.168.1.137</p:NewInternalClient>\n"
! 124: " <p:NewEnabled>1</p:NewEnabled>\n"
! 125: " <p:NewDescription>dooom A</p:NewDescription>\n"
! 126: " <p:NewLeaseTime>347</p:NewLeaseTime>\n"
! 127: " </p:PortMappingEntry>\n"
! 128: "</p:PortMappingList>";
! 129:
! 130: #define PORT_MAPPINGS_COUNT 3
! 131: const struct port_mapping port_mappings[PORT_MAPPINGS_COUNT] = {
! 132: {347, 12345, 12345, "134.231.2.11", "192.168.1.137", "TCP", "dooom A", 1},
! 133: {346, 2345, 2349, "202.233.2.1", "192.168.1.137", "TCP", "dooom", 1},
! 134: {0, 5002, 4001, "", "192.168.1.123", "UDP", "xxx", 1}
! 135: };
! 136:
! 137: /* --- main --- */
! 138: int main(void)
! 139: {
! 140: int r;
! 141: r = test(test_document, sizeof(test_document) - 1,
! 142: port_mappings, PORT_MAPPINGS_COUNT);
! 143: if(r == 0) {
! 144: printf("test of portlistingparse OK\n");
! 145: return 0;
! 146: } else {
! 147: printf("test FAILED (%d differences counted)\n", r);
! 148: return 1;
! 149: }
! 150: }
! 151:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>