--- embedaddon/miniupnpd/upnpredirect.h 2012/02/21 23:16:02 1.1.1.1 +++ embedaddon/miniupnpd/upnpredirect.h 2012/05/29 12:55:57 1.1.1.2 @@ -1,17 +1,20 @@ -/* $Id: upnpredirect.h,v 1.1.1.1 2012/02/21 23:16:02 misho Exp $ */ +/* $Id: upnpredirect.h,v 1.1.1.2 2012/05/29 12:55:57 misho Exp $ */ /* MiniUPnP project * http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/ - * (c) 2006 Thomas Bernard + * (c) 2006-2011 Thomas Bernard * This software is subject to the conditions detailed * in the LICENCE file provided within the distribution */ #ifndef __UPNPREDIRECT_H__ #define __UPNPREDIRECT_H__ +/* for u_int64_t */ +#include + #include "config.h" #ifdef ENABLE_LEASEFILE -int reload_from_lease_file(); +int reload_from_lease_file(void); #endif /* upnp_redirect() @@ -23,30 +26,40 @@ int reload_from_lease_file(); * -3 permission check failed */ int -upnp_redirect(unsigned short eport, +upnp_redirect(const char * rhost, unsigned short eport, const char * iaddr, unsigned short iport, - const char * protocol, const char * desc); + const char * protocol, const char * desc, + unsigned int leaseduration); /* upnp_redirect_internal() * same as upnp_redirect() without any check */ int -upnp_redirect_internal(unsigned short eport, +upnp_redirect_internal(const char * rhost, unsigned short eport, const char * iaddr, unsigned short iport, - int proto, const char * desc); + int proto, const char * desc, + unsigned int timestamp); -/* upnp_get_redirection_infos() */ +/* upnp_get_redirection_infos() + * returns : 0 on success + * -1 failed to get the port mapping entry or no entry exists */ int upnp_get_redirection_infos(unsigned short eport, const char * protocol, unsigned short * iport, char * iaddr, int iaddrlen, - char * desc, int desclen); + char * desc, int desclen, + char * rhost, int rhostlen, + unsigned int * leaseduration); -/* upnp_get_redirection_infos_by_index */ +/* upnp_get_redirection_infos_by_index() + * returns : 0 on success + * -1 failed to get the port mapping or index out of range */ int upnp_get_redirection_infos_by_index(int index, unsigned short * eport, char * protocol, unsigned short * iport, char * iaddr, int iaddrlen, - char * desc, int desclen); + char * desc, int desclen, + char * rhost, int rhostlen, + unsigned int * leaseduration); /* upnp_delete_redirection() * returns: 0 on success @@ -67,19 +80,87 @@ struct rule_state u_int64_t bytes; struct rule_state * next; unsigned short eport; - short proto; + unsigned char proto; + unsigned char to_remove; }; +/* return a linked list of all rules + * or an empty list if there are not enough + * As a "side effect", delete rules which are expired */ struct rule_state * get_upnp_rules_state_list(int max_rules_number_target); +/* return the number of port mapping entries */ int -upnp_get_portmapping_number_of_entries(); +upnp_get_portmapping_number_of_entries(void); /* remove_unused_rules() : * also free the list */ void remove_unused_rules(struct rule_state * list); + +/* upnp_get_portmappings_in_range() + * return a list of all "external" ports for which a port + * mapping exists */ +unsigned short * +upnp_get_portmappings_in_range(unsigned short startport, + unsigned short endport, + const char * protocol, + unsigned int * number); + +#ifdef ENABLE_6FC_SERVICE +/* function to be used by WANIPv6_FirewallControl implementation */ + +/* retreive outbound pinhole timeout*/ +int +upnp_check_outbound_pinhole(int proto, int * timeout); + +/* add an inbound pinehole + * return value : + * 1 = success + * -1 = Pinhole space exhausted + * .. = error */ +int +upnp_add_inboundpinhole(const char * raddr, unsigned short rport, + const char * iaddr, unsigned short iport, + const char * protocol, const char * leaseTime, int * uid); + +int +upnp_add_inboundpinhole_internal(const char * raddr, unsigned short rport, + const char * iaddr, unsigned short iport, + const char * proto, int * uid); + +/* + * return values : + * -4 not found + * -5 in another table + * -6 in another chain + * -7 in a chain but not a rule. (chain policy) + * */ +int +upnp_get_pinhole_info(const char * raddr, unsigned short rport, char * iaddr, unsigned short * iport, char * proto, const char * uid, char * lt); + +/* update the lease time */ +int +upnp_update_inboundpinhole(const char * uid, const char * leasetime); + +/* remove the inbound pinhole */ +int +upnp_delete_inboundpinhole(const char * uid); + +/* ... */ +int +upnp_check_pinhole_working(const char * uid, char * eaddr, char * iaddr, unsigned short * eport, unsigned short * iport, char * protocol, int * rulenum_used); + +/* number of packets that went through the pinhole */ +int +upnp_get_pinhole_packets(const char * uid, int * packets); + +/* ? */ +int +upnp_clean_expiredpinhole(void); + +#endif /* ENABLE_6FC_SERVICE */ /* stuff for responding to miniupnpdctl */ #ifdef USE_MINIUPNPDCTL