]> git.gsnw.org Git - m0n0chwall.git/commitdiff
Add volume stats to the captiveportal status page, the radius accounting has been...
authorjdegraeve <jdegraeve@e36fee2c-cc09-0410-a7cc-ebac5c6737de>
Sun, 5 Mar 2006 12:10:59 +0000 (12:10 +0000)
committerjdegraeve <jdegraeve@e36fee2c-cc09-0410-a7cc-ebac5c6737de>
Sun, 5 Mar 2006 12:10:59 +0000 (12:10 +0000)
git-svn-id: https://svn.m0n0.ch/wall/trunk@96 e36fee2c-cc09-0410-a7cc-ebac5c6737de

captiveportal/radius_accounting.inc
webgui/status_captiveportal.php

index a01cb32f91f41c9e0ddddc538a395cf3488654ab..cc80553bba0ae6b273ab99912c6f733d12aa153a 100644 (file)
@@ -281,13 +281,12 @@ function gigawords($bytes) {
 
 
     /*
-     * RFC2866 Specifies a 32bit unsigned integer, so it should be 4294967295
-     * Note that most NAS actually wrap @ 32bit signed which means 2GB.
-     * The put_int function also is 32bit signed so we are forced to wrap @2GB
+     * RFC2866 Specifies a 32bit unsigned integer, which is a max of 4294967295
+     * Currently there is a fault in the PECL radius_put_int function which can handle only 32bit signed integer.
      */
 
     // We use BCMath functions since normal integers don't work with so large numbers
-    $gigawords = bcdiv( bcsub( $bytes, remainder($bytes) ) , 2147483647) ;
+    $gigawords = bcdiv( bcsub( $bytes, remainder($bytes) ) , 4294967295) ;
 
     // We need to manually set this to a zero instead of NULL for put_int() safety
     if (is_null($gigawords)) {
@@ -301,7 +300,7 @@ function gigawords($bytes) {
 function remainder($bytes) {
 
     // Calculate the bytes we are going to send to the radius
-    $bytes = bcmod($bytes, 2147483647);
+    $bytes = bcmod($bytes, 4294967295);
 
     if (is_null($bytes)) {
         $bytes = 0;
index 62467a9b8d1eebc7a2ba4ae71132034a78bf960b..582883e3898973994212df582a2a1bb23311af15 100755 (executable)
@@ -1,32 +1,32 @@
 #!/usr/local/bin/php
 <?php 
 /*
-       $Id$
-       part of m0n0wall (http://m0n0.ch/wall)
-       
-       Copyright (C) 2003-2006 Manuel Kasper <mk@neon1.net>.
-       All rights reserved.
-       
-       Redistribution and use in source and binary forms, with or without
-       modification, are permitted provided that the following conditions are met:
-       
-       1. Redistributions of source code must retain the above copyright notice,
-          this list of conditions and the following disclaimer.
-       
-       2. Redistributions in binary form must reproduce the above copyright
-          notice, this list of conditions and the following disclaimer in the
-          documentation and/or other materials provided with the distribution.
-       
-       THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
-       INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
-       AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-       AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
-       OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-       SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-       INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-       CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-       ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-       POSSIBILITY OF SUCH DAMAGE.
+    $Id$
+    part of m0n0wall (http://m0n0.ch/wall)
+    
+    Copyright (C) 2003-2006 Manuel Kasper <mk@neon1.net>.
+    All rights reserved.
+    
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+    
+    1. Redistributions of source code must retain the above copyright notice,
+       this list of conditions and the following disclaimer.
+    
+    2. Redistributions in binary form must reproduce the above copyright
+       notice, this list of conditions and the following disclaimer in the
+       documentation and/or other materials provided with the distribution.
+    
+    THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
+    INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
+    AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+    AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
+    OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+    SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+    INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+    CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+    ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+    POSSIBILITY OF SUCH DAMAGE.
 */
 
 $pgtitle = array("Status", "Captive portal");
@@ -36,14 +36,14 @@ require("guiconfig.inc");
 <?php
 
 if ($_GET['act'] == "del") {
-       captiveportal_disconnect_client($_GET['id'],6);
+    captiveportal_disconnect_client($_GET['id'],6);
 }
 
 flush();
 
 function clientcmp($a, $b) {
-       global $order;
-       return strcmp($a[$order], $b[$order]);
+    global $order;
+    return strcmp($a[$order], $b[$order]);
 }
 
 $cpdb = array();
@@ -51,31 +51,38 @@ captiveportal_lock();
 $fp = @fopen("{$g['vardb_path']}/captiveportal.db","r");
 
 if ($fp) {
-       while (!feof($fp)) {
-               $line = trim(fgets($fp));
-               if ($line) {
-                       $cpent = explode(",", $line);
-                       if ($_GET['showact'])
-                               $cpent[7] = captiveportal_get_last_activity($cpent[1]);
-                       $cpdb[] = $cpent;
-               }
-       }
-       
-       fclose($fp);
-       
-       if ($_GET['order']) {
-               if ($_GET['order'] == "ip")
-                       $order = 2;
-               else if ($_GET['order'] == "mac")
-                       $order = 3;
-               else if ($_GET['order'] == "user")
-                       $order = 4;
-               else if ($_GET['order'] == "lastact")
-                       $order = 7;
-               else
-                       $order = 0;
-               usort($cpdb, "clientcmp");
-       }
+    while (!feof($fp)) {
+        $line = trim(fgets($fp));
+        if ($line) {
+            $cpent = explode(",", $line);
+            $volume = getVolume($cpent[1]);
+            $cpent[7] = $volume['output_bytes'];
+            $cpent[8] = $volume['input_bytes'];
+            if ($_GET['showact'])
+                $cpent[9] = captiveportal_get_last_activity($cpent[1]);
+            $cpdb[] = $cpent;
+        }
+    }
+
+    fclose($fp);
+
+    if ($_GET['order']) {
+        if ($_GET['order'] == "ip")
+            $order = 2;
+        else if ($_GET['order'] == "mac")
+            $order = 3;
+        else if ($_GET['order'] == "user")
+            $order = 4;
+        else if ($_GET['order'] == "download")
+            $order = 7;
+        else if ($_GET['order'] == "upload")
+            $order = 8;
+        else if ($_GET['order'] == "lastact")
+            $order = 9;
+        else
+            $order = 0;
+        usort($cpdb, "clientcmp");
+    }
 }
 captiveportal_unlock();
 ?>
@@ -84,9 +91,11 @@ captiveportal_unlock();
     <td class="listhdrr"><a href="?order=ip&showact=<?=$_GET['showact'];?>">IP address</a></td>
     <td class="listhdrr"><a href="?order=mac&showact=<?=$_GET['showact'];?>">MAC address</a></td>
     <td class="listhdrr"><a href="?order=start&showact=<?=$_GET['showact'];?>">Session start</a></td>
-       <?php if ($_GET['showact']): ?>
+    <td class="listhdrr"><a href="?order=download&showact=<?=$_GET['showact'];?>">Download</a></td>
+    <td class="listhdrr"><a href="?order=upload&showact=<?=$_GET['showact'];?>">Upload</a></td>
+    <?php if ($_GET['showact']): ?>
     <td class="listhdrr"><a href="?order=lastact&showact=<?=$_GET['showact'];?>">Last activity</a></td>
-       <?php endif; ?>
+    <?php endif; ?>
     <td class="listhdr"><a href="?order=user&showact=<?=$_GET['showact'];?>">Username</a></td>
     <td class="list"></td>
   </tr>
@@ -95,12 +104,14 @@ captiveportal_unlock();
     <td class="listlr"><?=$cpent[2];?></td>
     <td class="listr"><?=$cpent[3];?>&nbsp;</td>
     <td class="listr"><?=htmlspecialchars(date("m/d/Y H:i:s", $cpent[0]));?></td>
-       <?php if ($_GET['showact']): ?>
-    <td class="listr"><?php if ($cpent[7]) echo htmlspecialchars(date("m/d/Y H:i:s", $cpent[7]));?></td>
-       <?php endif; ?>
+    <td class="listr"><?=format_bytes($cpent[7]);?></td>
+    <td class="listr"><?=format_bytes($cpent[8]);?></td>
+    <?php if ($_GET['showact']): ?>
+    <td class="listr"><?php if ($cpent[9]) echo htmlspecialchars(date("m/d/Y H:i:s", $cpent[9]));?></td>
+    <?php endif; ?>
     <td class="listr"><?=$cpent[4];?>&nbsp;</td>
-       <td valign="middle" class="list" nowrap>
-       <a href="?order=<?=$_GET['order'];?>&showact=<?=$_GET['showact'];?>&act=del&id=<?=$cpent[1];?>" onclick="return confirm('Do you really want to disconnect this client?')"><img src="x.gif" title="disconnect client" width="17" height="17" border="0"></a></td>
+    <td valign="middle" class="list" nowrap>
+    <a href="?order=<?=$_GET['order'];?>&showact=<?=$_GET['showact'];?>&act=del&id=<?=$cpent[1];?>" onclick="return confirm('Do you really want to disconnect this client?')"><img src="x.gif" title="disconnect client" width="17" height="17" border="0"></a></td>
   </tr>
 <?php endforeach; ?>
 </table>