provider_proxy management added
[brisk.git] / web / Obj / brisk.phh
index 3a8b43a..62b80a7 100644 (file)
@@ -90,6 +90,7 @@ define('DEBUGGING', "no-debugging");
 
 require_once("$DOCUMENT_ROOT/Etc/".BRISK_CONF);
 require_once("${G_base}Obj/ipclass.phh");
+require_once("${G_base}Obj/provider_proxy.phh");
 
 $mlang_brisk = array( 'btn_backstand'=> array( 'it' => 'torna in piedi',
                                                'en' => 'back standing' ),
@@ -446,6 +447,7 @@ function versions_cmp($v1, $v2)
     return 0;
 }
 
+// return string with IPV4 address
 function addrtoipv4($addr)
 {
     $ipv4addr_arr = explode(':' , $addr);
@@ -1039,6 +1041,7 @@ class Brisk
 
     var $ban_list;  // ban list (authized allowed)
     var $black_list;  // black list (anti-dos, noone allowed)
+    var $provider_proxy; // list of provider/browser that offer proxy service
     var $ghost_sess;
     var $delay_mgr;
 
@@ -1052,13 +1055,13 @@ class Brisk
     }
 
     // constructor
-    static function create($crystal_filename, $ban_list, $black_list) {
+    static function create($crystal_filename, $ban_list, $black_list, $prov_proxy) {
         if (($brisk_ser = @file_get_contents($crystal_filename)) != FALSE) {
             if (($brisk = unserialize($brisk_ser)) != FALSE) {
                 fprintf(STDERR, "ROOM FROM FILE\n");
                 rename($crystal_filename, $crystal_filename.".old");
 
-                $brisk->reload(TRUE, $ban_list, $black_list);
+                $brisk->reload(TRUE, $ban_list, $black_list, $prov_proxy);
 
                 return($brisk);
             }
@@ -1074,6 +1077,7 @@ class Brisk
 
         $thiz->ban_list = IpClass::create();
         $thiz->black_list = IpClass::create();
+        $thiz->provider_proxy = ProviderProxy::create();
         $thiz->ghost_sess = new GhostSess();
 
         for ($i = 0 ; $i < MAX_PLAYERS ; $i++) {
@@ -1090,14 +1094,14 @@ class Brisk
 
         static::$sess_cur = FALSE;
 
-        $thiz->reload(TRUE, $ban_list, $black_list);
+        $thiz->reload(TRUE, $ban_list, $black_list, $prov_proxy);
 
         return ($thiz);
     }
 
-    function reload($is_first, $ban_list, $black_list)
+    function reload($is_first, $ban_list, $black_list, $prov_proxy)
     {
-        fprintf(STDERR, "RELOAD STUFF (%d)(%d)\n", count($ban_list), count($black_list));
+        fprintf(STDERR, "RELOAD STUFF (%d)(%d)(%d)\n", count($ban_list), count($black_list), count($prov_proxy));
 
         if (defined('CURL_DE_SAC_VERS')) {
             if (brisk_cds_reload($this) == FALSE) {
@@ -1106,6 +1110,7 @@ class Brisk
         }
         $this->ban_list->update($ban_list);
         $this->black_list->update($black_list);
+        $this->provider_proxy->update($prov_proxy);
 
         if (!$is_first) {
             $this->banned_kickoff();
@@ -1170,6 +1175,11 @@ class Brisk
         return ($this->black_list->check($ip_str));
     }
 
+    function pproxy_realip($header, $ip_str)
+    {
+        return ($this->provider_proxy->realip($header, $ip_str));
+    }
+
     function users_cleanup()
     {
         for ($i = 0 ; $i < MAX_PLAYERS ; $i++) {
@@ -2604,15 +2614,16 @@ class Brisk
 
   function request_mgr(&$s_a_p, $header, &$header_out, &$new_socket, $path, $addr, $get, $post, $cookie)
   {
-      GLOBAL $G_ban_list, $G_black_list;
+      GLOBAL $G_ban_list, $G_black_list, $G_provider_proxy;
 
       printf("NEW_SOCKET (root): %d PATH [%s]\n", intval($new_socket), $path);
-      $remote_addr = addrtoipv4($addr);
+      // $remote_addr = addrtoipv4($addr);
+      $remote_addr = $this->pproxy_realip($header, addrtoipv4($addr));
 
       fprintf(STDERR, "\n\n\n PRE_BLACK_CHECK \n\n\n");
       if ($this->black_check($remote_addr)) {
           // TODO: waiting async 5 sec before close
-          fprintf(STDERR, "\n\n\n BLACK_CHECK \n\n\n");
+          fprintf(STDERR, "\n\n\n BLACK CHECK\n\n\n");
           return (FALSE);
       }