1/* $Id: upnppermissions.h,v 1.10 2014/03/07 10:43:29 nanard Exp $ */
2/* MiniUPnP project
3 * http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/
4 * (c) 2006-2014 Thomas Bernard
5 * This software is subject to the conditions detailed
6 * in the LICENCE file provided within the distribution */
7
8#ifndef UPNPPERMISSIONS_H_INCLUDED
9#define UPNPPERMISSIONS_H_INCLUDED
10
11#include <sys/types.h>
12#include <sys/socket.h>
13#include <netinet/in.h>
14#include "config.h"
15
16/* UPnP permission rule samples:
17 * allow 1024-65535 192.168.3.0/24 1024-65535
18 * deny 0-65535 192.168.1.125/32 0-65535 */
19struct upnpperm {
20	enum {UPNPPERM_ALLOW=1, UPNPPERM_DENY=2 } type;
21				/* is it an allow or deny permission rule ? */
22	u_short eport_min, eport_max;	/* external port range */
23	struct in_addr address, mask;	/* ip/mask */
24	u_short iport_min, iport_max;	/* internal port range */
25};
26
27/* read_permission_line()
28 * returns: 0 line read okay
29 *          -1 error reading line
30 *
31 * line sample :
32 *  allow 1024-65535 192.168.3.0/24 1024-65535
33 *  allow 22 192.168.4.33/32 22
34 *  deny 0-65535 0.0.0.0/0 0-65535 */
35int
36read_permission_line(struct upnpperm * perm,
37                     char * p);
38
39/* check_upnp_rule_against_permissions()
40 * returns: 0 if the upnp rule should be rejected,
41 *          1 if it could be accepted */
42int
43check_upnp_rule_against_permissions(const struct upnpperm * permary,
44                                    int n_perms,
45                                    u_short eport, struct in_addr address,
46                                    u_short iport);
47
48#ifdef USE_MINIUPNPDCTL
49void
50write_permlist(int fd, const struct upnpperm * permary,
51               int nperms);
52#endif
53
54#endif
55
56