source IP address stored into log
[brisk.git] / web / Obj / user.phh
index d42d0de..b6efbcd 100644 (file)
@@ -21,6 +21,9 @@
  * Suite 330, Boston, MA 02111-1307, USA.
  */
 
+require_once("${G_base}Obj/transports.phh");
+
+
 // User flags
 define('USER_FLAG_AUTH',     0x02);
 
@@ -43,6 +46,10 @@ define('USER_FLAG_S_RABB',  0x800); // done
 define('USER_FLAG_S_SOCC',  0x900); // done
 define('USER_FLAG_S_BABY',  0xa00); // done
 define('USER_FLAG_S_MOP',   0xb00); // done
+define('USER_FLAG_S_BABBO',   0xc00); // done
+define('USER_FLAG_S_RENNA',   0xd00); // done
+define('USER_FLAG_S_PUPAZ',   0xe00); // done
+define('USER_FLAG_S_VISCH',   0xf00); // done
 
 define('USER_FLAG_S_ALL',   0xf00); // done
 
@@ -98,6 +105,7 @@ class User {
   var $rd_kalive;  // if no message are sent after RD_KEEPALIVE_TOUT secs we send a keepalive from server
   var $rd_cache;   // place where store failed fwrite data
   var $rd_zls;     // zlibstream object handle if compressed stream, else FALSE
+  var $rd_transp;  // class that define stream encapsulation type (iframe, xhr, ...)
 
   var $comm;       // commands array
   // var $asta_card;  // 
@@ -156,6 +164,7 @@ class User {
     $thiz->rd_kalive  = -1;
     $thiz->rd_cache   = "";
     $thiz->rd_zls     = FALSE;
+    $thiz->rd_transp  = NULL;
 
     $thiz->asta_card  = -2;
     $thiz->asta_pnt   = -1;
@@ -289,7 +298,7 @@ class User {
     return ($thiz);
   }
 
-  function rd_data_set($curtime, $enc, $stat, $subst, $step, $from)
+  function rd_data_set($curtime, $transp, $enc, $stat, $subst, $step, $from)
   {
       $this->rd_endtime = $curtime + RD_ENDTIME_DELTA;
       $this->rd_stat    = $stat;
@@ -299,6 +308,7 @@ class User {
       $this->rd_scristp = 0;
       $this->rd_kalive  = $curtime + RD_KEEPALIVE_TOUT;
       $this->rd_zls     = ZLibStream::create($enc);
+      $this->rd_transp  = Transport::create($transp);
   }
 
   function rd_socket_get() {
@@ -455,7 +465,7 @@ class User {
 
   function reset() {
     $curtime = time();
-    log_legal($curtime, 'xxx', $this, "STAT:LOGOUT", '');
+    log_legal($curtime, $this->ip, $this, "STAT:LOGOUT", '');
 
     $tmp_sess = $this->sess;
     $this->sess = "";
@@ -471,110 +481,6 @@ class User {
     $this->the_end = FALSE;
   }
 
-  static function load_data($id, $sess) 
-  {
-      log_main("load_data: id [".$id."] sess [".($sess == FALSE ? "FALSE" : $sess)."] ");
-      
-      do {
-          if (($tok = @ftok(FTOK_PATH."/user".$id, "C")) == -1) {
-              log_main("ftok failed");
-              break;
-          }
-          
-          if (($shm_sz = sharedmem_sz($tok)) == -1) {
-              log_main("shmop_open failed");
-          }
-          
-          if ($shm_sz == -1)
-              $shm_sz = SHM_DIMS_U_MIN;
-          
-          if ($shm = shm_attach($tok, $shm_sz)) {
-              if (($user = @shm_get_var($shm, $tok)) == FALSE) {
-                  break;
-              }
-              if ($sess != FALSE && $user->sess != $sess) {
-                  break;
-              }
-              log_only("user ==  ".($user == FALSE ?   "FALSE" : "TRUE")."  user ===  ".($user === FALSE ? "FALSE" : "TRUE")."  user isset ".(isset($user) ?   "TRUE" : "FALSE"));
-              
-              if ($user == FALSE) {
-                  log_only("INIT MAIN DATA");
-                  
-                  // SHSPLIT FIXME: init_data for User class ??
-                  $user = self::create($id, "", "");
-                  if (@shm_put_var($shm, $tok, $user) == FALSE) {
-                      log_only("PUT_VAR FALLITA ".strlen(serialize($user)));
-                      log_only(serialize($user));
-                  }
-                  log_shme("User::save_data2");
-              }
-              else {
-                  if ($sess != FALSE) {
-                      /*
-                       *  NOTE:  this part is for check only, theoretically 
-                       *         user->step anch proxy_step are set allways at the same value
-                       */
-                      $old_step = $user->step;
-                      $arr = self::load_step($sess);
-                      $user->step = $arr['s'];
-                      if ($old_step != $user->step) {
-                          log_crit("steps are diffetents User->step ".$user->step." Old_step: ".$old_step);
-                      }
-                  }
-              }
-              $user->shm_sz = $shm_sz;
-              
-              shm_detach($shm);
-          }
-          
-          //  
-          // SHSPLIT: load users from the shared memory
-          //
-          return ($user);
-      } while (0);
-      
-      return (FALSE);
-  }
-  
-
-  static function save_data($user, $id) 
-  {
-      GLOBAL $sess;
-      
-      $shm =   FALSE;
-      
-      if (($tok = @ftok(FTOK_PATH."/user".$id, "C")) == -1) {
-          return (FALSE);
-      }
-      while ($user->shm_sz < SHM_DIMS_U_MAX) {
-          if (($shm = shm_attach($tok, $user->shm_sz)) == FALSE)
-              break;
-          
-          // log_only("PUT_VAR DI ".strlen(serialize($user)));
-          if (@shm_put_var($shm, $tok, $user) != FALSE) {
-              shm_detach($shm);
-              if ($user->sess != "")
-                  $user->save_step();
-
-              log_shme("User::save_data");
-
-              log_main("User[".$id."] saved.");
-              return (TRUE);
-          }
-          if (shm_remove($shm) === FALSE) {
-              log_only("REMOVE FALLITA");
-              break;
-          }
-          shm_detach($shm);
-          $user->shm_sz += SHM_DIMS_U_DLT;
-      } 
-      
-      if ($shm)
-          shm_detach($shm);
-      
-      return (FALSE);
-  }
-
   function myname_innerHTML()
   {
       $class_id = ($this->flags & USER_FLAG_AUTH) + 1;
@@ -585,7 +491,7 @@ class User {
 
   /* INDEX_RD_IFRA PORT */
 
-  protected function blocking_error($is_unrecoverable)
+  static function blocking_error($is_unrecoverable)
   {
       log_crit("BLOCKING_ERROR UNREC: ".($is_unrecoverable ? "TRUE" : "FALSE"));
       return (sprintf(($is_unrecoverable ? 'xstm.stop(); ' : '').'window.onbeforeunload = null; window.onunload = null; document.location.assign("index.php");'));
@@ -749,26 +655,12 @@ class User {
 {
     printf("xXx user::stream_fini\n");
 
-    // IF IFRAME THEN:
-    $body = "";
-    $body .= sprintf("<html>
-<head>
-<script type=\"text/javascript\" src=\"%scommons.js\"></script>
-<script type=\"text/javascript\" src=\"%sxynt-streaming-ifra.js\"></script>
-<script type=\"text/javascript\">
-var xynt_streaming = \"ready\";", self::base_get(), self::base_get());
-    $body .= sprintf("
-window.onload = function () { if (xynt_streaming != \"ready\") { xynt_streaming.reload(); } };
-</script>
-</head>
-<body>");
-    $body .= sprintf("<!-- \n%s -->\n", $init_string);
-    $body .= sprintf("<script id='hs%d' type='text/javascript'><!--
-push(\"%s\");
-// -->
-</script>", 0, escpush(self::blocking_error($is_unrecoverable)) );
+    // FIXME: dynamic "Transport_" type
+    $tans_class = "Transport_iframe";
+    $body = $tans_class::fini($init_string, self::base_get(), static::blocking_error($is_unrecoverable));
+
     // ELSE IF XHR THEN:
-    // return (self::blocking_error($is_unrecoverable));
+    // return (static::blocking_error($is_unrecoverable));
     return ($body);
 }
 
@@ -790,12 +682,6 @@ function stream_init($init_string, $enc, &$header_out, &$body, $get, $post, $coo
     
     // (webservers_exceeded() || stristr($HTTP_USER_AGENT, "Mozilla/5.0 (Windows NT 6.1; rv:5.0)") || stristr($HTTP_USER_AGENT, "MSIE") || stristr($HTTP_USER_AGENT, "CHROME") ? TRUE : FALSE);
 
-    if ($enc != 'plain')
-        $header_out['Content-Encoding'] = $enc;
-    $header_out['Cache-Control'] = 'no-cache, must-revalidate';     // HTTP/1.1
-    $header_out['Expires']       = 'Mon, 26 Jul 1997 05:00:00 GMT'; // Date in the past
-    $header_out['Content-type']  = 'text/html; charset="utf-8"';
-    
     log_load("index_rd_ifra_init.php");
     
     if (($from  = gpcs_var('from', $get, $post, $cookie)) === FALSE)
@@ -806,25 +692,13 @@ function stream_init($init_string, $enc, &$header_out, &$body, $get, $post, $coo
         $subst = "";
     if (($step  = gpcs_var('step', $get, $post, $cookie)) === FALSE) 
         unset($step);
+    if (($transp  = gpcs_var('transp', $get, $post, $cookie)) === FALSE)
+        $transp = "iframe";
     
-    $this->rd_data_set($curtime, $enc, $stat, $subst, $step, $from);
-    $cc = get_called_class();
-    
-    $body .= sprintf("<html>
-<head>
-<script type=\"text/javascript\" src=\"%scommons.js\"></script>
-<script type=\"text/javascript\" src=\"%sxynt-streaming-ifra.js\"></script>
-<script type=\"text/javascript\">
-var xynt_streaming = \"ready\";", self::base_get(), self::base_get());
-    if ($this->rd_scristp > 0)
-        $body .= sprintf("last_clean = %d;\n", ($this->rd_scristp-1));
-    $body .= sprintf("
-window.onload = function () { if (xynt_streaming != \"ready\") { xynt_streaming.reload(); } };
-</script> 
-</head>
-<body>");
-    $body .= sprintf("<!-- \n%s -->\n", $init_string);
+    $this->rd_data_set($curtime, $transp, $enc, $stat, $subst, $step, $from);
     
+    $body .= $this->rd_transp->init($enc, &$header_out, $init_string, self::base_get(), $this->rd_scristp);
+
     return TRUE;
   }
 
@@ -850,11 +724,7 @@ function stream_main(&$body, $get, $post, $cookie)
     $old_step  = $this->rd_step;
     printf("xXx PRE : rd_step %d\n", $this->rd_step);
     if (($ret = $this->maincheck($old_stat, $old_subst, $old_step, $this->rd_stat, $this->rd_subst, $this->rd_step, $splashdate, $table_idx, $table_token)) != FALSE) {
-        $body .= sprintf("<script id='hs%d' type='text/javascript'><!--
-push(\"%s\");
-// -->
-</script>", $this->rd_scristp++, escpush($ret) );
-        
+        $body .= $this->rd_transp->chunk( $this->rd_scristp++, $ret);
         log_rd2(0, 'index_rd.php: after mop_flush (begin: '.sprintf("%f", $pre_main).')');
     }
     printf("xXx POST: rd_step %d\n", $this->rd_step);
@@ -864,12 +734,7 @@ push(\"%s\");
 
 function stream_keepalive($with_ping)
 {
-    $ret =  (sprintf("<script id='hs%d' type='text/javascript'><!--
-push(%s);
-// -->
-</script>", $this->rd_scristp++, ($with_ping ? "\"act_ping();\"" : "null")));
-
-    return ($ret);
+    return ($this->rd_transp->chunk( $this->rd_scristp++, ($with_ping ? "act_ping();" : NULL)));
 }
 
 static function base_get()