1/* $Id: getconnstatus.c,v 1.6 2013/03/23 10:46:54 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#include <stdio.h>
9#include <sys/types.h>
10#include <netinet/in.h>
11#include "getconnstatus.h"
12#include "getifaddr.h"
13
14#define STATUS_UNCONFIGURED (0)
15#define STATUS_CONNECTING (1)
16#define STATUS_CONNECTED (2)
17#define STATUS_PENDINGDISCONNECT (3)
18#define STATUS_DISCONNECTING (4)
19#define STATUS_DISCONNECTED (5)
20
21/**
22 * get the connection status
23 * return values :
24 *  0 - Unconfigured
25 *  1 - Connecting
26 *  2 - Connected
27 *  3 - PendingDisconnect
28 *  4 - Disconnecting
29 *  5 - Disconnected */
30int
31get_wan_connection_status(const char * ifname)
32{
33	char addr[INET_ADDRSTRLEN];
34	int r;
35
36	/* we need a better implementation here.
37	 * I'm afraid it should be device specific */
38	r = getifaddr(ifname, addr, INET_ADDRSTRLEN, NULL, NULL);
39	return (r < 0) ? STATUS_DISCONNECTED : STATUS_CONNECTED;
40}
41
42/**
43 * return the same value as get_wan_connection_status()
44 * as a C string */
45const char *
46get_wan_connection_status_str(const char * ifname)
47{
48	int status;
49	const char * str = NULL;
50
51	status = get_wan_connection_status(ifname);
52	switch(status) {
53	case 0:
54		str = "Unconfigured";
55		break;
56	case 1:
57		str = "Connecting";
58		break;
59	case 2:
60		str = "Connected";
61		break;
62	case 3:
63		str = "PendingDisconnect";
64		break;
65	case 4:
66		str = "Disconnecting";
67		break;
68	case 5:
69		str = "Disconnected";
70		break;
71	}
72	return str;
73}
74
75