a5c44d7787d69e40cf8821e0dc74d456890c251e
[packages.git] / net / ddns-scripts / files / usr / lib / ddns / dynamic_dns_functions.sh
1 # /usr/lib/dynamic_dns/dynamic_dns_functions.sh
2 #
3 # Written by Eric Paul Bishop, Janary 2008
4 # Distributed under the terms of the GNU General Public License (GPL) version 2.0
5 #
6 # This script is (loosely) based on the one posted by exobyte in the forums here:
7 # http://forum.openwrt.org/viewtopic.php?id=14040
8
9
10
11 . /etc/functions.sh
12 include /lib/network
13
14
15 #loads all options for a given package and section
16 #also, sets all_option_variables to a list of the variable names
17 load_all_config_options()
18 {
19         pkg_name="$1"
20         section_id="$2"
21
22         ALL_OPTION_VARIABLES=""
23         # this callback loads all the variables
24         # in the section_id section when we do
25         # config_load. We need to redefine
26         # the option_cb for different sections
27         # so that the active one isn't still active
28         # after we're done with it.  For reference
29         # the $1 variable is the name of the option
30         # and $2 is the name of the section
31         config_cb()
32         {
33                 if [ ."$2" = ."$section_id" ]; then
34                         option_cb()
35                         {
36                                 ALL_OPTION_VARIABLES="$ALL_OPTION_VARIABLES $1"
37                         }
38                 else
39                         option_cb() { return 0; }
40                 fi
41         }
42
43
44         config_load "$pkg_name"
45         for var in $ALL_OPTION_VARIABLES
46         do
47                 config_get "$var" "$section_id" "$var"
48         done
49 }
50
51
52 get_current_ip()
53 {
54
55         #if ip source is not defined, assume we want to get ip from wan 
56         if [ "$ip_source" != "interface" ] && [ "$ip_source" != "web" ] && [ "$ip_source" != "script" ]
57         then
58                 ip_source="network"
59                 ip_network="wan"
60         fi
61
62         if [ "$ip_source" = "network" ]
63         then
64                 if [ -z "$ip_network" ]
65                 then
66                         ip_network="wan"
67                 fi
68                 scan_interfaces
69                 config_load /var/state/network
70                 config_get ip_interface $ip_network ifname
71         fi
72
73         current_ip='';
74         if [ "$ip_source" = "network" ] || [ "$ip_source" = "interface" ]
75         then
76                 current_ip=$(ifconfig $ip_interface | grep -o 'inet addr:[0-9.]*' | grep -o "$ip_regex")
77         elif [ "$ip_source" = "script" ]
78         then
79                 # get ip from script
80                 current_ip=$($ip_script)
81         else
82                 # get ip from web
83                 # we check each url in order in ip_url variable, and if no ips are found we use dyndns ip checker
84                 # ip is set to FIRST expression in page that matches the ip_regex regular expression
85                 for addr in $ip_url
86                 do
87                         if [ -z "$current_ip" ]
88                         then
89                                 current_ip=$(echo $( wget -O - $addr 2>/dev/null) | grep -o "$ip_regex")
90                         fi
91                 done
92
93                 #here we hard-code the dyndns checkip url in case no url was specified
94                 if [ -z "$current_ip" ]
95                 then
96                         current_ip=$(echo $( wget -O - http://checkip.dyndns.org 2>/dev/null) | grep -o "$ip_regex")
97                 fi
98         fi
99
100         echo "$current_ip"
101 }
102
103
104 verbose_echo()
105 {
106         if [ "$verbose_mode" = 1 ]
107         then
108                 echo $1
109         fi
110 }
111
112 start_daemon_for_all_ddns_sections()
113 {
114         SECTIONS=""
115         config_cb() 
116         {
117                 SECTIONS="$SECTIONS $2"
118         }
119         config_load "ddns"
120
121         for section in $SECTIONS
122         do
123                 /usr/lib/ddns/dynamic_dns_updater.sh $section 0 > /dev/null 2>&1 &
124         done
125 }