1/* $Id: portlistingparse.h,v 1.10 2014/11/01 10:37:32 nanard Exp $ */
2/* MiniUPnP project
3 * http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/
4 * (c) 2011-2012 Thomas Bernard
5 * This software is subject to the conditions detailed
6 * in the LICENCE file provided within the distribution */
7#ifndef PORTLISTINGPARSE_H_INCLUDED
8#define PORTLISTINGPARSE_H_INCLUDED
9
10#include "declspec.h"
11/* for the definition of UNSIGNED_INTEGER */
12#include "miniupnpctypes.h"
13
14#ifdef __cplusplus
15extern "C" {
16#endif
17
18/* sample of PortMappingEntry :
19  <p:PortMappingEntry>
20    <p:NewRemoteHost>202.233.2.1</p:NewRemoteHost>
21    <p:NewExternalPort>2345</p:NewExternalPort>
22    <p:NewProtocol>TCP</p:NewProtocol>
23    <p:NewInternalPort>2345</p:NewInternalPort>
24    <p:NewInternalClient>192.168.1.137</p:NewInternalClient>
25    <p:NewEnabled>1</p:NewEnabled>
26    <p:NewDescription>dooom</p:NewDescription>
27    <p:NewLeaseTime>345</p:NewLeaseTime>
28  </p:PortMappingEntry>
29 */
30typedef enum { PortMappingEltNone,
31       PortMappingEntry, NewRemoteHost,
32       NewExternalPort, NewProtocol,
33       NewInternalPort, NewInternalClient,
34       NewEnabled, NewDescription,
35       NewLeaseTime } portMappingElt;
36
37struct PortMapping {
38	struct PortMapping * l_next;	/* list next element */
39	UNSIGNED_INTEGER leaseTime;
40	unsigned short externalPort;
41	unsigned short internalPort;
42	char remoteHost[64];
43	char internalClient[64];
44	char description[64];
45	char protocol[4];
46	unsigned char enabled;
47};
48
49struct PortMappingParserData {
50	struct PortMapping * l_head;	/* list head */
51	portMappingElt curelt;
52};
53
54MINIUPNP_LIBSPEC void
55ParsePortListing(const char * buffer, int bufsize,
56                 struct PortMappingParserData * pdata);
57
58MINIUPNP_LIBSPEC void
59FreePortListing(struct PortMappingParserData * pdata);
60
61#ifdef __cplusplus
62}
63#endif
64
65#endif
66