reduced log
[brisk.git] / web / Obj / hardban.phh
index 61ddb91..c59deb3 100644 (file)
@@ -2,7 +2,7 @@
 /*
  *  brisk - auth.phh
  *
- *  Copyright (C) 2006-2008 Matteo Nastasi
+ *  Copyright (C) 2006-2012 Matteo Nastasi
  *                          mailto: nastasi@alternativeoutput.it 
  *                                  matteo.nastasi@milug.org
  *                          web: http://www.alternativeoutput.it
  *
  */
 
-define(HBAN_SHM_DIMS_MIN, 16384);
-define(HBAN_SHM_DIMS_MAX, 65536);
-define(HBAN_SHM_DIMS_DLT, 16384);
-define(HBAN_VALID_TIME,      15);
-define(HBAN_GARBAGE_TIMEOUT,  5);
+define('HBAN_SHM_DIMS_MIN', 16384);
+define('HBAN_SHM_DIMS_MAX', 65536);
+define('HBAN_SHM_DIMS_DLT', 16384);
+define('HBAN_VALID_TIME',      15);
+define('HBAN_GARBAGE_TIMEOUT',  5);
 
 class Hardban {
   var $login;
@@ -44,6 +44,8 @@ class Hardban {
 }
 
 class Hardbans {
+    static $delta_t;
+
   var $item;
   var $item_n;
   var $mod;
@@ -66,8 +68,8 @@ class Hardbans {
 
     log_auth("xxx", sprintf("Hardbans::add [%s]\n", $login));
 
-    if (($chal = new Hardban($login, $ip, $session, $timeout)) == null) {
-      return ($G_false);
+    if (($chal = new Hardban($login, $ip, $session, $timeout)) == FALSE) {
+      return (FALSE);
     }
 
     $this->item[$this->item_n] = $chal;
@@ -143,7 +145,7 @@ class Hardbans {
   }
 
   // Static functions
-  function &init_data()
+  static function create()
   {
     $chal =& new Hardbans();
     
@@ -152,17 +154,16 @@ class Hardbans {
     return $chal;
   }
 
-  function &load_data() 
+  function load_data() 
   {
-    GLOBAL $G_false, $sess;
-    $doexit = FALSE;
+    GLOBAL $sess;
+
     do {
-      if (($tok = @ftok(FTOK_PATH."/hardbans", "B")) == -1) {
+      if (($tok = @ftok(FTOK_PATH."/hardbans", "C")) == -1) {
        log_main("ftok failed");
-       $doexit = TRUE;
        break;
       }
-    
+      // fprintf(STDERR, "hardpans: %x\n", $tok);
       if (($shm_sz = sharedmem_sz($tok)) == -1) {
        log_main("shmop_open failed");
       }
@@ -171,18 +172,20 @@ class Hardbans {
        $shm_sz = HBAN_SHM_DIMS_MIN;
 
       if ($shm = shm_attach($tok, $shm_sz)) {
-       $hban = @shm_get_var($shm, $tok);
+          $hban = @shm_get_var($shm, $tok); // CHECKED BELOW
        
        log_only("hardban ==  ".($hban == FALSE ?   "FALSE" : "TRUE")."  hardban ===  ".($hban === FALSE ? "FALSE" : "TRUE")."  hardban isset ".(isset($hban) ?   "TRUE" : "FALSE"));
        
        if ($hban == FALSE) {
          log_only("INIT HARDBAN DATA");
          
-         $hban =& Hardbans::init_data();
+         $hban =& Hardbans::create();
          if (@shm_put_var($shm, $tok, $hban) == FALSE) {
            log_only("PUT_VAR FALLITA ".strlen(serialize($hban)));
            log_only(serialize($hban));
          }
+          log_shme("Hardban::save_data2");
+
        }
        $hban->shm_sz = $shm_sz;
        
@@ -191,23 +194,19 @@ class Hardbans {
 
       $hban->garbage_manager(TRUE);
 
-      $ret = &$hban;
-      return ($ret);
+      return ($hban);
     } while (0);
     
-    if ($doexit)
-      exit();
-    
-    return ($G_false);
+    return (FALSE);
   }
   
 
-  function save_data(&$hban) 
+  function save_data($hban) 
   {
     $shm =   FALSE;
     $oldmod = $hban->mod;
 
-    if (($tok = @ftok(FTOK_PATH."/hardbans", "B")) == -1) 
+    if (($tok = @ftok(FTOK_PATH."/hardbans", "C")) == -1) 
       return (FALSE);
     
     while ($hban->shm_sz < HBAN_SHM_DIMS_MAX) {
@@ -218,8 +217,9 @@ class Hardbans {
         log_only("hardban count ".count($hban->item)."  _n: ".$hban->item_n);
 
       $hban->mod = FALSE;
-      if (shm_put_var($shm, $tok, $hban) != FALSE) {
+      if (@shm_put_var($shm, $tok, $hban) != FALSE) {
        shm_detach($shm);
+        log_shme("Hardban::save_data");
        return (TRUE);
       }
       $hban->mod = $oldmod;
@@ -238,32 +238,25 @@ class Hardbans {
     return (FALSE);
   }
 
-  function lock_data()
+  static function lock_data($is_exclusive)
   {
-    if (($tok = @ftok(FTOK_PATH."/hardbans", "B")) == -1) {
-      echo "FTOK FAILED";
-      exit;
-    }
-    // echo "FTOK ".$tok."<br>";
-    if (($res = sem_get($tok)) == FALSE) {
-      echo "SEM_GET FAILED";
-      exit;
-    }
-    if (sem_acquire($res)) {   
-      log_lock("LOCK hardbans");
-      return ($res);
-    }
-    else
+      if (($res = file_lock(FTOK_PATH."/hardbans", $is_exclusive)) != FALSE) {
+          self::$delta_t = microtime(TRUE);
+          log_lock("LOCK   hardbans     [".self::$delta_t."]");
+          
+          return ($res);
+      }
+
       return (FALSE);
   }
   
-  function unlock_data($res)
+  static function unlock_data($res)
   {
     GLOBAL $sess; 
     
-    log_lock("UNLOCK hardbans");
+    log_lock("UNLOCK hardbans     [".(microtime(TRUE) - (self::$delta_t))."]");
 
-    return (sem_release($res));
+    file_unlock($res);
   }
 
 
@@ -271,7 +264,7 @@ class Hardbans {
   {
     $bantime = -1;
     /* if it exists check for a valid challenge */
-    if (($a_sem = Hardbans::lock_data()) != FALSE) { 
+    if (($a_sem = Hardbans::lock_data(TRUE)) != FALSE) { 
       
       if (($hban = &Hardbans::load_data()) != FALSE) {
         for ($e = 0 ; $e < $hban->item_n ; $e++) {
@@ -290,7 +283,7 @@ class Hardbans {
           }
         } // for (...
         if ($hban->ismod()) {
-          Hardbans::save_data(&$hban);
+          Hardbans::save_data($hban);
         }
       } // if (load_data
       Hardbans::unlock_data($a_sem);
@@ -305,14 +298,14 @@ class Hardbans {
   {
     $found = FALSE;
     /* if it exists check for a valid challenge */
-    if (($a_sem = Hardbans::lock_data()) != FALSE) { 
+    if (($a_sem = Hardbans::lock_data(TRUE)) != FALSE) { 
       
       if (($hban = &Hardbans::load_data()) != FALSE) {
 
         $hban->add_item($login, $ip, $session, $timeout);
 
         if ($hban->ismod()) {
-          Hardbans::save_data(&$hban);
+          Hardbans::save_data($hban);
         }
       } // if (load_data
       Hardbans::unlock_data($a_sem);
@@ -323,4 +316,4 @@ class Hardbans {
 
 } // End CLASS Hardbans
 
-?>
\ No newline at end of file
+?>