Busybox: Upgrade to 1.21.1 (stable). lsof active.
[tomato.git] / release / src / router / www / forward-upnp.asp
blobb0ce2409474a2f4ef9cf9e0503d7d4923433966d
1 <!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.0//EN'>
2 <!--
3 Tomato GUI
4 Copyright (C) 2006-2010 Jonathan Zarate
5 http://www.polarcloud.com/tomato/
7 For use with Tomato Firmware only.
8 No part of this file may be used without permission.
9 -->
10 <html>
11 <head>
12 <meta http-equiv='content-type' content='text/html;charset=utf-8'>
13 <meta name='robots' content='noindex,nofollow'>
14 <title>[<% ident(); %>] Forwarding: UPnP / NAT-PMP</title>
15 <link rel='stylesheet' type='text/css' href='tomato.css'>
16 <% css(); %>
17 <script type='text/javascript' src='tomato.js'></script>
19 <!-- / / / -->
21 <style type='text/css'>
22 #upnp-grid .co1, #upnp-grid .co2 {
23 width: 12%;
25 #upnp-grid .co3 {
26 width: 15%;
28 #upnp-grid .co4 {
29 width: 8%;
31 #upnp-grid .co5 {
32 width: 53%;
34 </style>
36 <script type='text/javascript' src='debug.js'></script>
38 <script type='text/javascript'>
40 /* REMOVE-BEGIN
41 !!TB - additional miniupnp settings
42 REMOVE-END */
43 // <% nvram("upnp_enable,upnp_mnp,upnp_clean,upnp_secure,upnp_clean_interval,upnp_clean_threshold,upnp_custom,upnp_lan,upnp_lan1,upnp_lan2,upnp_lan3,lan_ifname,lan1_ifname,lan2_ifname,lan3_ifname,"); %>
45 // <% upnpinfo(); %>
47 nvram.upnp_enable = fixInt(nvram.upnp_enable, 0, 3, 0);
50 function submitDelete(proto, eport)
52 form.submitHidden('upnp.cgi', {
53 remove_proto: proto,
54 remove_eport: eport,
55 _redirect: 'forward-upnp.asp' });
58 function deleteData(data)
60 if (!confirm('Delete ' + data[3] + ' ' + data[0] + ' -> ' + data[2] + ':' + data[1] + ' ?')) return;
61 submitDelete(data[3], data[0]);
64 var ug = new TomatoGrid();
66 ug.onClick = function(cell) {
67 deleteData(cell.parentNode.getRowData());
70 ug.rpDel = function(e) {
71 deleteData(PR(e).getRowData());
75 ug.setup = function() {
76 this.init('upnp-grid', 'sort delete');
77 this.headerSet(['External', 'Internal', 'Internal Address', 'Protocol', 'Description']);
78 ug.populate();
81 ug.populate = function() {
82 var i, j, r, row, data;
84 if (nvram.upnp_enable != 0) {
85 var data = mupnp_data.split('\n');
86 for (i = 0; i < data.length; ++i) {
87 r = data[i].match(/^(UDP|TCP)\s+(\d+)\s+(.+?)\s+(\d+)\s+\[(.*)\](.*)$/);
88 if (r == null) continue;
89 row = this.insertData(-1, [r[2], r[4], r[3], r[1], r[5]]);
91 if (!r[0]) {
92 for (j = 0; j < 5; ++j) {
93 elem.addClass(row.cells[j], 'disabled');
96 for (j = 0; j < 5; ++j) {
97 row.cells[j].title = 'Click to delete';
100 this.sort(2);
102 E('upnp-delete-all').disabled = (ug.getDataCount() == 0);
105 function deleteAll()
107 if (!confirm('Delete all entries?')) return;
108 submitDelete('*', '0');
111 function toggleFiltersVisibility(){
112 if(E('upnpsettings').style.display=='')
113 E('upnpsettings').style.display='none';
114 else
115 E('upnpsettings').style.display='';
118 function verifyFields(focused, quiet)
120 /* REMOVE-BEGIN
121 !!TB - additional miniupnp settings
122 REMOVE-END */
123 var enable = E('_f_enable_upnp').checked || E('_f_enable_natpmp').checked;
124 var bc = E('_f_upnp_clean').checked;
126 E('_f_upnp_clean').disabled = (enable == 0);
127 E('_f_upnp_secure').disabled = (enable == 0);
128 E('_upnp_custom').disabled = (enable == 0);
129 E('_f_upnp_mnp').disabled = (E('_f_enable_upnp').checked == 0);
130 E('_upnp_clean_interval').disabled = (enable == 0) || (bc == 0);
131 E('_upnp_clean_threshold').disabled = (enable == 0) || (bc == 0);
132 elem.display(PR(E('_upnp_clean_interval')), (enable != 0) && (bc != 0));
133 elem.display(PR(E('_upnp_clean_threshold')), (enable != 0) && (bc != 0));
135 if ((enable != 0) && (bc != 0)) {
136 if (!v_range('_upnp_clean_interval', quiet, 60, 65535)) return 0;
137 if (!v_range('_upnp_clean_threshold', quiet, 0, 9999)) return 0;
139 else {
140 ferror.clear(E('_upnp_clean_interval'));
141 ferror.clear(E('_upnp_clean_threshold'));
143 /* VLAN-BEGIN */
144 E('_f_upnp_lan').disabled = ((nvram.lan_ifname.length < 1) || (enable == 0));
145 if (E('_f_upnp_lan').disabled)
146 E('_f_upnp_lan').checked = false;
147 E('_f_upnp_lan1').disabled = ((nvram.lan1_ifname.length < 1) || (enable == 0));
148 if (E('_f_upnp_lan1').disabled)
149 E('_f_upnp_lan1').checked = false;
150 E('_f_upnp_lan2').disabled = ((nvram.lan2_ifname.length < 1) || (enable == 0));
151 if (E('_f_upnp_lan2').disabled)
152 E('_f_upnp_lan2').checked = false;
153 E('_f_upnp_lan3').disabled = ((nvram.lan3_ifname.length < 1) || (enable == 0));
154 if (E('_f_upnp_lan3').disabled)
155 E('_f_upnp_lan3').checked = false;
156 if ((enable) && (!E('_f_upnp_lan').checked) && (!E('_f_upnp_lan1').checked) && (!E('_f_upnp_lan2').checked) && (!E('_f_upnp_lan3').checked)) {
157 if ((E('_f_enable_natpmp').checked) || (E('_f_enable_upnp').checked)) {
158 var m = 'NAT-PMP or UPnP must be enabled in least one LAN bridge';
159 ferror.set('_f_enable_natpmp', m, quiet);
160 ferror.set('_f_enable_upnp', m, 1);
161 ferror.set('_f_upnp_lan', m, 1);
162 ferror.set('_f_upnp_lan1', m, 1);
163 ferror.set('_f_upnp_lan2', m, 1);
164 ferror.set('_f_upnp_lan3', m, 1);
166 return 0;
167 } else {
168 ferror.clear('_f_enable_natpmp');
169 ferror.clear('_f_enable_upnp');
170 ferror.clear('_f_upnp_lan');
171 ferror.clear('_f_upnp_lan1');
172 ferror.clear('_f_upnp_lan2');
173 ferror.clear('_f_upnp_lan3');
175 /* VLAN-END */
176 return 1;
179 function save()
181 /* REMOVE-BEGIN
182 !!TB - miniupnp
183 REMOVE-END */
184 if (!verifyFields(null, 0)) return;
186 var fom = E('_fom');
187 fom.upnp_enable.value = 0;
188 if (fom.f_enable_upnp.checked) fom.upnp_enable.value = 1;
189 if (fom.f_enable_natpmp.checked) fom.upnp_enable.value |= 2;
191 /* REMOVE-BEGIN
192 !!TB - additional miniupnp settings
193 REMOVE-END */
194 fom.upnp_mnp.value = E('_f_upnp_mnp').checked ? 1 : 0;
195 fom.upnp_clean.value = E('_f_upnp_clean').checked ? 1 : 0;
196 fom.upnp_secure.value = E('_f_upnp_secure').checked ? 1 : 0;
198 /* VLAN-BEGIN */
199 fom.upnp_lan.value = E('_f_upnp_lan').checked ? 1 : 0;
200 fom.upnp_lan1.value = E('_f_upnp_lan1').checked ? 1 : 0;
201 fom.upnp_lan2.value = E('_f_upnp_lan2').checked ? 1 : 0;
202 fom.upnp_lan3.value = E('_f_upnp_lan3').checked ? 1 : 0;
203 /* VLAN-END */
204 form.submit(fom, 0);
207 function init()
209 ug.recolor();
212 /* REMOVE-BEGIN
213 !!TB - miniupnp
214 REMOVE-END */
215 function submit_complete()
217 reloadPage();
219 </script>
221 </head>
222 <body onload='init()'>
223 <form id='_fom' method='post' action='tomato.cgi'>
224 <table id='container' cellspacing=0>
225 <tr><td colspan=2 id='header'>
226 <div class='title'>Tomato</div>
227 <div class='version'>Version <% version(); %></div>
228 </td></tr>
229 <tr id='body'><td id='navi'><script type='text/javascript'>navi()</script></td>
230 <td id='content'>
231 <div id='ident'><% ident(); %></div>
233 <!-- / / / -->
235 <input type='hidden' name='_nextpage' value='forward-upnp.asp'>
236 <input type='hidden' name='_service' value='upnp-restart'>
238 <input type='hidden' name='upnp_enable'>
239 /* REMOVE-BEGIN
240 !!TB - additional miniupnp settings
241 REMOVE-END */
242 <input type='hidden' name='upnp_mnp'>
243 <input type='hidden' name='upnp_clean'>
244 <input type='hidden' name='upnp_secure'>
245 <!-- VLAN-BEGIN -->
246 <input type='hidden' name='upnp_lan'>
247 <input type='hidden' name='upnp_lan1'>
248 <input type='hidden' name='upnp_lan2'>
249 <input type='hidden' name='upnp_lan3'>
250 <!-- VLAN-END -->
252 <div class='section-title'>Forwarded Ports</div>
253 <div class='section'>
254 <table id='upnp-grid' class='tomato-grid'></table>
255 <div style='width: 100%; text-align: right'><input type='button' value='Delete All' onclick='deleteAll()' id='upnp-delete-all'> <input type='button' value='Refresh' onclick='javascript:reloadPage();'></div>
256 </div>
258 <div class='section-title'>Settings <small><i><a href='javascript:toggleFiltersVisibility();'>(Toggle Visibility)</a></i></small></div>
259 <div class='section' id='upnpsettings' style='display:none'>
260 <script type='text/javascript'>
261 createFieldTable('', [
262 { title: 'Enable UPnP', name: 'f_enable_upnp', type: 'checkbox', value: (nvram.upnp_enable & 1) },
263 { title: 'Enable NAT-PMP', name: 'f_enable_natpmp', type: 'checkbox', value: (nvram.upnp_enable & 2) },
264 /* REMOVE-BEGIN
265 !!TB - additional miniupnp settings
266 REMOVE-END */
267 { title: 'Inactive Rules Cleaning', name: 'f_upnp_clean', type: 'checkbox', value: (nvram.upnp_clean == '1') },
268 { title: 'Cleaning Interval', indent: 2, name: 'upnp_clean_interval', type: 'text', maxlen: 5, size: 7,
269 suffix: ' <small>seconds</small>', value: nvram.upnp_clean_interval },
270 { title: 'Cleaning Threshold', indent: 2, name: 'upnp_clean_threshold', type: 'text', maxlen: 4, size: 7,
271 suffix: ' <small>redirections</small>', value: nvram.upnp_clean_threshold },
272 { title: 'Secure Mode', name: 'f_upnp_secure', type: 'checkbox',
273 suffix: ' <small>(when enabled, UPnP clients are allowed to add mappings only to their IP)</small>',
274 value: (nvram.upnp_secure == '1') },
275 /* VLAN-BEGIN */
276 { title: 'Listen on' },
277 { title: 'LAN', indent: 2, name: 'f_upnp_lan', type: 'checkbox', value: (nvram.upnp_lan == '1') },
278 { title: 'LAN1', indent: 2, name: 'f_upnp_lan1', type: 'checkbox', value: (nvram.upnp_lan1 == '1') },
279 { title: 'LAN2', indent: 2, name: 'f_upnp_lan2', type: 'checkbox', value: (nvram.upnp_lan2 == '1') },
280 { title: 'LAN3', indent: 2, name: 'f_upnp_lan3', type: 'checkbox', value: (nvram.upnp_lan3 == '1') },
281 /* VLAN-END */
282 { title: 'Show In My Network Places', name: 'f_upnp_mnp', type: 'checkbox', value: (nvram.upnp_mnp == '1')},
283 null,
284 { title: 'Miniupnpd</a><br>Custom configuration', name: 'upnp_custom', type: 'textarea', value: nvram.upnp_custom }
286 </script>
287 </div>
290 <!-- / / / -->
292 </td></tr>
293 <tr><td id='footer' colspan=2>
294 <span id='footer-msg'></span>
295 <input type='button' value='Save' id='save-button' onclick='save()'>
296 <input type='button' value='Cancel' id='cancel-button' onclick='javascript:reloadPage();'>
297 </td></tr>
298 </table>
299 </form>
300 /* REMOVE-BEGIN
301 !!TB - added verifyFields
302 REMOVE-END */
303 <script type='text/javascript'>ug.setup();verifyFields(null, 1);</script>
304 </body>
305 </html>