Annotation of embedaddon/miniupnpc/src/testportlistingparse.c, revision 1.1.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>