summaryrefslogtreecommitdiff
path: root/release/src/router/httpd/ddns.c
blob: 2863cf724c66dbe5a19cee3e6882512c4ecef27a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
/*

	Tomato Firmware
	Copyright (C) 2006-2009 Jonathan Zarate

*/

#include "tomato.h"

#include <time.h>
#include <sys/stat.h>


void asp_ddnsx(int argc, char **argv)
{
	char *p, *q;
	int i;
	char s[256];
	char m[256];
	char name[64];
	time_t tt;
	struct stat st;

	switch (get_wan_proto()) {
	case WP_PPTP:
		p = "pptp_get_ip";
		break;
	case WP_L2TP:
		p = "l2tp_get_ip";
		break;
	default:
		p = "wan_ipaddr";
		break;
	}

	web_printf(
		"\nddnsx_ip = '%s';\n"
		"ddnsx_msg = [",
		nvram_safe_get(p));

	for (i = 0; i < 2; ++i) {
		web_puts(i ? "','" : "'");
		sprintf(name, "/var/lib/mdu/ddnsx%d.msg", i);
		f_read_string(name, m, sizeof(m));	// null term'd even on error
		if (m[0] != 0) {
			if ((stat(name, &st) == 0) && (st.st_mtime > Y2K)) {
				strftime(s, sizeof(s), "%a, %d %b %Y %H:%M:%S %z: ", localtime(&st.st_mtime));
				web_puts(s);
			}
			web_putj(m);
		}
	}

	web_puts("'];\nddnsx_last = [");

	for (i = 0; i < 2; ++i) {
		web_puts(i ? "','" : "'");
		sprintf(name, "ddnsx%d", i);
		if (!nvram_match(name, "")) {
			sprintf(name, "ddnsx%d_cache", i);
			if ((p = nvram_get(name)) == NULL) continue;
			tt = strtoul(p, &q, 10);
			if (*q++ != ',') continue;
			if (tt > Y2K) {
				strftime(s, sizeof(s), "%a, %d %b %Y %H:%M:%S %z: ", localtime(&tt));
				web_puts(s);
			}
			web_putj(q);
		}
	}
	web_puts("'];\n");
}

void asp_ddnsx_ip(int argc, char **argv)
{
	const char *p;

	switch (get_wan_proto()) {
	case WP_PPTP:
		p = "pptp_get_ip";
		break;
	case WP_L2TP:
		p = "l2tp_get_ip";
		break;
	default:
		p = "wan_ipaddr";
		break;
	}
	web_puts(nvram_safe_get(p));
}