1 <!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML
4.0//EN'
>
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.
12 <meta http-equiv='content-type' content='text/html;charset=utf-
8'
>
13 <meta name='robots' content='noindex,nofollow'
>
14 <title>[<%
ident(); %>] QoS: View Details
</title>
15 <link rel='stylesheet' type='text/css' href='tomato.css'
>
16 <link rel='stylesheet' type='text/css' href='color.css'
>
17 <script type='text/javascript' src='tomato.js'
></script>
20 <script type='text/javascript' src='debug.js'
></script>
21 <script type='text/javascript' src='protocols.js'
></script>
23 <script type='text/javascript'
>
24 // <% nvram(''); %> // http_id
26 var abc
= ['Unclassified', 'Highest', 'High', 'Medium', 'Low', 'Lowest', 'Class A','Class B','Class C','Class D','Class E'];
27 var colors
= ['F08080','E6E6FA','0066CC','8FBC8F','FAFAD2','ADD8E6','9ACD32','E0FFFF','90EE90','FF9933','FFF0F5'];
29 if ((viewClass
= '<% cgi_get("class"); %>') == '') {
32 else if ((isNaN(viewClass
*= 1)) || (viewClass
< 0) || (viewClass
> 10)) {
43 if ((queue
.length
== 0) || (xob
)) return;
46 xob
.onCompleted = function(text
, xml
) {
48 for (var i
= 0; i
< resolve_data
.length
; ++i
) {
49 var r
= resolve_data
[i
];
50 if (r
[1] == '') r
[1] = r
[0];
52 if (lock
== 0) grid
.setName(r
[0], r
[1]);
54 if (queue
.length
== 0) {
55 if ((lock
== 0) && (resolveCB
) && (grid
.sortColumn
== 3)) grid
.resort();
57 else setTimeout(resolve
, 500);
60 xob
.onError = function(ex
) {
64 xob
.post('resolve.cgi', 'ip=' + queue
.splice(0, 20).join(','));
69 function resolveChanged()
73 b
= E('resolve').checked
? 1 : 0;
76 cookie
.set('qos-resolve', b
);
77 if (b
) grid
.resolveAll();
81 var grid
= new TomatoGrid();
83 grid
.sortCompare = function(a
, b
) {
85 var col
= obj
.sortColumn
;
86 var da
= a
.getRowData();
87 var db
= b
.getRowData();
93 r
= cmpInt(da
[col
], db
[col
]);
97 var a
= fixIP(da
[col
]);
98 var b
= fixIP(db
[col
]);
99 if ((a
!= null) && (b
!= null)) {
100 r
= aton(a
) - aton(b
);
105 r
= cmpText(da
[col
], db
[col
]);
108 return obj
.sortAscending
? r
: -r
;
111 grid
.onClick = function(cell
) {
113 var ip
= row
.getRowData()[3];
114 if (this.lastClicked
!= row
) {
115 this.lastClicked
= row
;
116 if (ip
.indexOf('<') == -1) {
118 row
.style
.cursor
= 'wait';
127 grid
.resolveAll = function()
132 for (i
= 1; i
< this.tb
.rows
.length
; ++i
) {
133 row
= this.tb
.rows
[i
];
134 ip
= row
.getRowData()[3];
135 if (ip
.indexOf('<') == -1) {
140 row
.style
.cursor
= 'wait';
147 grid
.setName = function(ip
, name
) {
150 for (i
= this.tb
.rows
.length
- 1; i
> 0; --i
) {
151 row
= this.tb
.rows
[i
];
152 data
= row
.getRowData();
154 data
[3] = name
+ ' <small>(' + ip
+ ')</small>';
155 row
.setRowData(data
);
156 row
.cells
[3].innerHTML
= data
[3];
157 row
.style
.cursor
= 'default';
162 grid
.setup = function() {
163 this.init('grid', 'sort');
164 this.headerSet(['Proto', 'Source', 'S Port', 'Destination', 'D Port', 'Class']);
167 var ref
= new TomatoRefresh('update.cgi', '', 0, 'qos_detailed');
169 ref
.refresh = function(text
)
183 grid
.lastClicked
= null;
184 grid
.removeAllData();
191 for (i
= 0; i
< ctdump
.length
; ++i
) {
194 if (cache
[ip
] != null) {
196 b
[3] = cache
[ip
] + ' <small>(' + ip
+ ')</small>';
209 d
= [protocols
[b
[0]] || b
[0], b
[2], b
[4], b
[3], b
[5], abc
[b
[6]] || ('' + b
[6])];
210 var row
= grid
.insert(-1, d
, d
, false);
211 if (cursor
) row
.style
.cursor
= cursor
;
218 setTimeout(function() { E('loading').style
.visibility
= 'hidden'; }, 100);
222 if (resolveCB
) resolve();
229 if (((c
= cookie
.get('qos-resolve')) != null) && (c
== '1')) {
230 E('resolve').checked
= resolveCB
= 1;
233 if (viewClass
!= -1) E('stitle').innerHTML
= 'View Details: ' + abc
[viewClass
];
235 ref
.postData
= 'exec=ctdump&arg0=' + viewClass
;
240 <body onload='init()'
>
241 <form id='_fom' action='javascript:{}'
>
242 <table id='container' cellspacing=
0>
243 <tr><td colspan=
2 id='header'
>
244 <div class='title'
>Tomato
</div>
245 <div class='version'
>Version <%
version(); %></div>
247 <tr id='body'
><td id='navi'
><script type='text/javascript'
>navi()</script></td>
249 <div id='ident'
><%
ident(); %></div>
253 <div class='section-title' id='stitle' onclick='document.
location=
"qos-graphs.asp"' style='cursor:pointer'
>View Details
</div>
254 <div class='section'
>
255 <table id='grid' class='tomato-grid'
style=
"float:left" cellspacing=
1></table>
256 <input type='checkbox' id='resolve' onclick='resolveChanged()' onchange='resolveChanged()'
> Automatically Resolve Addresses
257 <div id='loading'
><br><b>Loading...
</b></div>
263 <tr><td id='footer' colspan=
2>
264 <script type='text/javascript'
>genStdRefresh(1,10,'ref.toggle()');</script>