aboutsummaryrefslogtreecommitdiff
path: root/external/miniupnpc/testportlistingparse.c
diff options
context:
space:
mode:
Diffstat (limited to 'external/miniupnpc/testportlistingparse.c')
-rw-r--r--external/miniupnpc/testportlistingparse.c151
1 files changed, 151 insertions, 0 deletions
diff --git a/external/miniupnpc/testportlistingparse.c b/external/miniupnpc/testportlistingparse.c
new file mode 100644
index 000000000..bd9247dca
--- /dev/null
+++ b/external/miniupnpc/testportlistingparse.c
@@ -0,0 +1,151 @@
+/* $Id: testportlistingparse.c,v 1.2 2014/11/01 10:37:32 nanard Exp $ */
+/* Project : miniupnp
+ * http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/
+ * Author : Thomas Bernard
+ * Copyright (c) 2014 Thomas Bernard
+ * This software is subject to the conditions detailed in the
+ * LICENCE file provided in this distribution.
+ * */
+
+#include <string.h>
+#include <stdio.h>
+#include "portlistingparse.h"
+
+struct port_mapping {
+ unsigned int leasetime;
+ unsigned short externalport;
+ unsigned short internalport;
+ const char * remotehost;
+ const char * client;
+ const char * proto;
+ const char * desc;
+ unsigned char enabled;
+};
+
+/* return the number of differences */
+int test(const char * portListingXml, int portListingXmlLen,
+ const struct port_mapping * ref, int count)
+{
+ int i;
+ int r = 0;
+ struct PortMappingParserData data;
+ struct PortMapping * pm;
+
+ memset(&data, 0, sizeof(data));
+ ParsePortListing(portListingXml, portListingXmlLen, &data);
+ for(i = 0, pm = data.l_head;
+ (pm != NULL) && (i < count);
+ i++, pm = pm->l_next) {
+ printf("%2d %s %5hu->%s:%-5hu '%s' '%s' %u\n",
+ i, pm->protocol, pm->externalPort, pm->internalClient,
+ pm->internalPort,
+ pm->description, pm->remoteHost,
+ (unsigned)pm->leaseTime);
+ if(0 != strcmp(pm->protocol, ref[i].proto)) {
+ printf("protocol : '%s' != '%s'\n", pm->protocol, ref[i].proto);
+ r++;
+ }
+ if(pm->externalPort != ref[i].externalport) {
+ printf("externalPort : %hu != %hu\n",
+ pm->externalPort, ref[i].externalport);
+ r++;
+ }
+ if(0 != strcmp(pm->internalClient, ref[i].client)) {
+ printf("client : '%s' != '%s'\n",
+ pm->internalClient, ref[i].client);
+ r++;
+ }
+ if(pm->internalPort != ref[i].internalport) {
+ printf("internalPort : %hu != %hu\n",
+ pm->internalPort, ref[i].internalport);
+ r++;
+ }
+ if(0 != strcmp(pm->description, ref[i].desc)) {
+ printf("description : '%s' != '%s'\n",
+ pm->description, ref[i].desc);
+ r++;
+ }
+ if(0 != strcmp(pm->remoteHost, ref[i].remotehost)) {
+ printf("remoteHost : '%s' != '%s'\n",
+ pm->remoteHost, ref[i].remotehost);
+ r++;
+ }
+ if((unsigned)pm->leaseTime != ref[i].leasetime) {
+ printf("leaseTime : %u != %u\n",
+ (unsigned)pm->leaseTime, ref[i].leasetime);
+ r++;
+ }
+ if(pm->enabled != ref[i].enabled) {
+ printf("enabled : %d != %d\n",
+ (int)pm->enabled, (int)ref[i].enabled);
+ r++;
+ }
+ }
+ if((i != count) || (pm != NULL)) {
+ printf("count mismatch : i=%d count=%d pm=%p\n", i, count, pm);
+ r++;
+ }
+ FreePortListing(&data);
+ return r;
+}
+
+const char test_document[] =
+"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
+"<p:PortMappingList xmlns:p=\"urn:schemas-upnp-org:gw:WANIPConnection\"\n"
+"xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" \n"
+"xsi:schemaLocation=\"urn:schemas-upnp-org:gw:WANIPConnection "
+"http://www.upnp.org/schemas/gw/WANIPConnection-v2.xsd\">\n"
+" <p:PortMappingEntry>\n"
+" <p:NewRemoteHost></p:NewRemoteHost>\n"
+" <p:NewExternalPort>5002</p:NewExternalPort>\n"
+" <p:NewProtocol>UDP</p:NewProtocol>\n"
+" <p:NewInternalPort>4001</p:NewInternalPort>\n"
+" <p:NewInternalClient>192.168.1.123</p:NewInternalClient>\n"
+" <p:NewEnabled>1</p:NewEnabled>\n"
+" <p:NewDescription>xxx</p:NewDescription>\n"
+" <p:NewLeaseTime>0</p:NewLeaseTime>\n"
+" </p:PortMappingEntry>\n"
+" <p:PortMappingEntry>\n"
+" <p:NewRemoteHost>202.233.2.1</p:NewRemoteHost>\n"
+" <p:NewExternalPort>2345</p:NewExternalPort>\n"
+" <p:NewProtocol>TCP</p:NewProtocol>\n"
+" <p:NewInternalPort>2349</p:NewInternalPort>\n"
+" <p:NewInternalClient>192.168.1.137</p:NewInternalClient>\n"
+" <p:NewEnabled>1</p:NewEnabled>\n"
+" <p:NewDescription>dooom</p:NewDescription>\n"
+" <p:NewLeaseTime>346</p:NewLeaseTime>\n"
+" </p:PortMappingEntry>\n"
+" <p:PortMappingEntry>\n"
+" <p:NewRemoteHost>134.231.2.11</p:NewRemoteHost>\n"
+" <p:NewExternalPort>12345</p:NewExternalPort>\n"
+" <p:NewProtocol>TCP</p:NewProtocol>\n"
+" <p:NewInternalPort>12345</p:NewInternalPort>\n"
+" <p:NewInternalClient>192.168.1.137</p:NewInternalClient>\n"
+" <p:NewEnabled>1</p:NewEnabled>\n"
+" <p:NewDescription>dooom A</p:NewDescription>\n"
+" <p:NewLeaseTime>347</p:NewLeaseTime>\n"
+" </p:PortMappingEntry>\n"
+"</p:PortMappingList>";
+
+#define PORT_MAPPINGS_COUNT 3
+const struct port_mapping port_mappings[PORT_MAPPINGS_COUNT] = {
+{347, 12345, 12345, "134.231.2.11", "192.168.1.137", "TCP", "dooom A", 1},
+{346, 2345, 2349, "202.233.2.1", "192.168.1.137", "TCP", "dooom", 1},
+{0, 5002, 4001, "", "192.168.1.123", "UDP", "xxx", 1}
+};
+
+/* --- main --- */
+int main(void)
+{
+ int r;
+ r = test(test_document, sizeof(test_document) - 1,
+ port_mappings, PORT_MAPPINGS_COUNT);
+ if(r == 0) {
+ printf("test of portlistingparse OK\n");
+ return 0;
+ } else {
+ printf("test FAILED (%d differences counted)\n", r);
+ return 1;
+ }
+}
+