1/* $Id: upnputils.h,v 1.6 2014/03/31 12:32:57 nanard Exp $ */
2/* MiniUPnP project
3 * http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/
4 * (c) 2011-2013 Thomas Bernard
5 * This software is subject to the conditions detailed
6 * in the LICENCE file provided within the distribution */
7
8#ifndef UPNPUTILS_H_INCLUDED
9#define UPNPUTILS_H_INCLUDED
10
11/**
12 * convert a struct sockaddr to a human readable string.
13 * [ipv6]:port or ipv4:port
14 * return the number of characters used (as snprintf)
15 */
16int
17sockaddr_to_string(const struct sockaddr * addr, char * str, size_t size);
18
19/**
20 * set the file description as non blocking
21 * return 0 in case of failure, 1 in case of success
22 */
23int
24set_non_blocking(int fd);
25
26/**
27 * get the LAN which the peer belongs to
28 */
29struct lan_addr_s *
30get_lan_for_peer(const struct sockaddr * peer);
31
32
33/**
34 * define portability macros
35 */
36#if defined(__sun)
37static size_t _sa_len(const struct sockaddr *addr)
38{
39        if (addr->sa_family == AF_INET)
40                return (sizeof(struct sockaddr_in));
41        else if (addr->sa_family == AF_INET6)
42                return (sizeof(struct sockaddr_in6));
43        else
44                return (sizeof(struct sockaddr));
45}
46# define SA_LEN(sa) (_sa_len(sa))
47#else
48#if !defined(SA_LEN)
49# define SA_LEN(sa) ((sa)->sa_len)
50#endif
51#endif
52
53#ifndef MAX
54# define MAX(a,b) (((a)>(b))?(a):(b))
55#endif
56
57#endif
58
59