move curl-de-sac stuff optionally included
[brisk.git] / web / Obj / brisk.phh
index c20fedc..3af8a15 100644 (file)
@@ -2,8 +2,8 @@
 /*
  *  brisk - brisk.phh
  *
 /*
  *  brisk - brisk.phh
  *
- *  Copyright (C) 2006-2013 Matteo Nastasi
- *                          mailto: nastasi@alternativeoutput.it 
+ *  Copyright (C) 2006-2014 Matteo Nastasi
+ *                          mailto: nastasi@alternativeoutput.it
  *                                  matteo.nastasi@milug.org
  *                          web: http://www.alternativeoutput.it
  *
  *                                  matteo.nastasi@milug.org
  *                          web: http://www.alternativeoutput.it
  *
@@ -28,7 +28,8 @@ define('FTOK_PATH', "/var/lib/brisk");
 define('LEGAL_PATH', "/tmp/legal_brisk");
 define('PROXY_PATH', "/var/lib/brisk_proxy");
 define('TABLES_N', 36);
 define('LEGAL_PATH', "/tmp/legal_brisk");
 define('PROXY_PATH', "/var/lib/brisk_proxy");
 define('TABLES_N', 36);
-define('TABLES_AUTH_N', 4);
+define('TABLES_AUTH_N', 8);
+define('TABLES_CERT_N', 4);
 define('PLAYERS_N', 3);
 define('MAX_POINTS', 5);
 define('MAX_PLAYERS', (20 + (PLAYERS_N * TABLES_N)));
 define('PLAYERS_N', 3);
 define('MAX_POINTS', 5);
 define('MAX_PLAYERS', (20 + (PLAYERS_N * TABLES_N)));
@@ -59,7 +60,7 @@ define('WAKEUP_TIME', 12);
 // BAN_TIME da allineare anche in commons.js
 define('BAN_TIME', 3600);
 define('GARBAGE_TIMEOUT', 5);
 // BAN_TIME da allineare anche in commons.js
 define('BAN_TIME', 3600);
 define('GARBAGE_TIMEOUT', 5);
-define('NICKSERV', "<i>BriskServ</i>");
+define('NICKSERV', "BriskServ");
 
 define('LOCK_SHARE_MAX', 10000);
 
 
 define('LOCK_SHARE_MAX', 10000);
 
@@ -78,7 +79,8 @@ define('DBG_LMOP', 0x0800);
 define('DBG_TRAC', 0x1000);
 define('DBG_SHME', 0x2000);
 define('DBG_ENGI', 0x4000);
 define('DBG_TRAC', 0x1000);
 define('DBG_SHME', 0x2000);
 define('DBG_ENGI', 0x4000);
-// NOTE: BRISK DEBUG must be a numerical constant, not the result of operations on symbols 
+define('DBG_CDS',  0x8000);
+// NOTE: BRISK DEBUG must be a numerical constant, not the result of operations on symbols
 define('BRISK_DEBUG', 0x0800);
 
 define('BRISK_SINGLE_DEBUG',0);
 define('BRISK_DEBUG', 0x0800);
 
 define('BRISK_SINGLE_DEBUG',0);
@@ -95,7 +97,7 @@ $mlang_brisk = array( 'btn_backstand'=> array( 'it' => 'torna in piedi',
                       'tit_all' => array( 'it' => 'tutti',
                                           'en' => 'all' ),
 
                       'tit_all' => array( 'it' => 'tutti',
                                           'en' => 'all' ),
 
-                      'tabtout_a'=> array( 'it' => '<br>Sei stato inattivo per ', 
+                      'tabtout_a'=> array( 'it' => '<br>Sei stato inattivo per ',
                                            'en' => '<br>You are being idle for ' ),
                       'tabtout_b'=> array( 'it' => ' minuti. <br><br>Quindi ritorni tra i <b>Giocatori in piedi</b>.',
                                            'en' => ' minutes. <br><br>Then you return with the <b>standing players</b>.'),
                                            'en' => '<br>You are being idle for ' ),
                       'tabtout_b'=> array( 'it' => ' minuti. <br><br>Quindi ritorni tra i <b>Giocatori in piedi</b>.',
                                            'en' => ' minutes. <br><br>Then you return with the <b>standing players</b>.'),
@@ -107,10 +109,10 @@ $mlang_brisk = array( 'btn_backstand'=> array( 'it' => 'torna in piedi',
                                            'en' => 'EN<br>The signalling message of the table<br>will be deactivated for %d second%s.<br><br>'),
                       'alarpass' => array( 'it' => '<br>La password digitata non &egrave; corretta.<br><br>',
                                            'en' => '<br>The entered password is not correct.<br><br>'),
                                            'en' => 'EN<br>The signalling message of the table<br>will be deactivated for %d second%s.<br><br>'),
                       'alarpass' => array( 'it' => '<br>La password digitata non &egrave; corretta.<br><br>',
                                            'en' => '<br>The entered password is not correct.<br><br>'),
-                      'alarret'  => array( 'it' => '"Alarm \\"<b>%s</b>\\" inviato a <b>%s</b>."',
-                                           'en' => '"Alarm \\"<b>%s</b>\\" sent to <b>%s</b>."'),
-                      'authmust' => array( 'it' => '<b>Per autenticare qualcuno devi a tua volta essere autenticato.</b>',
-                                           'en' => '<b>To authenticate someone you have to be authenticated.</b>'), // on your turn
+                      'alarret'  => array( 'it' => 'Alarm \\"<b>%s</b>\\" inviato a <b>%s</b>.',
+                                           'en' => 'Alarm \\"<b>%s</b>\\" sent to <b>%s</b>.'),
+                      'authmust' => array( 'it' => '<b>Per autenticare qualcuno devi a tua volta essere autenticato e certificato.</b>',
+                                           'en' => '<b>To authenticate someone you have to be authenticated and certified.</b>'), // on your turn
                       'mesgmust' => array( 'it' => '<b>Per inviare un messaggio devi essere autenticato.</b>',
                                            'en' => '<b>To send a message you have to be authenticated.</b>'),
                       'nickmust' => array( 'it' => 'Il nickname deve contenere almeno una lettera dell\'alfabeto o una cifra.',
                       'mesgmust' => array( 'it' => '<b>Per inviare un messaggio devi essere autenticato.</b>',
                                            'en' => '<b>To send a message you have to be authenticated.</b>'),
                       'nickmust' => array( 'it' => 'Il nickname deve contenere almeno una lettera dell\'alfabeto o una cifra.',
@@ -150,12 +152,12 @@ $mlang_brisk = array( 'btn_backstand'=> array( 'it' => 'torna in piedi',
 $G_lng = langtolng($G_lang);
 
 $G_all_points = array( 11,10,4,3,2, 0,0,0,0,0 );
 $G_lng = langtolng($G_lang);
 
 $G_all_points = array( 11,10,4,3,2, 0,0,0,0,0 );
-$G_brisk_version = "4.13.0";
+$G_brisk_version = "4.14.5";
 
 /* MLANG: ALL THE INFO STRINGS IN brisk.phh */
 
 /* MLANG: ALL THE INFO STRINGS IN brisk.phh */
-$root_wellarr = array( 'it' => array ( 'Brisk (Ver. '.$G_brisk_version.'), <b>NOVITA\'</b>: nuovo sistema per calcolare le classifiche, corretto bug nel comando cont',
+$root_wellarr = array( 'it' => array ( 'Brisk (Ver. '.$G_brisk_version.'), <b>NOVITA\'</b>: nuovo sistema di registrazione degli utenti, aggiunto reinvio dell\' email di verifica, ban con classi di IP, nuovi colori, nuovo sistema bi banner laterali per gli eventi',
                                        'Se vuoi iscriverti alla <a target="_blank" href="mailto:ml-briscola+subscribe@milug.org">Mailing List</a>, cliccala!' ),
                                        'Se vuoi iscriverti alla <a target="_blank" href="mailto:ml-briscola+subscribe@milug.org">Mailing List</a>, cliccala!' ),
-                       'en' => array ( 'Brisk (Ver. '.$G_brisk_version.'), <b>NEWS</b>: new placements calculation system, cont command fixed.',
+                       'en' => array ( 'Brisk (Ver. '.$G_brisk_version.'), <b>NEWS</b>: new users subscription system, refactored sidebanner system.',
                                        'If you want to subscribe our <a target="_blank" href="ml-briscola+subscribe@milug.org">Mailing List</a>, click it!' ) );
 
 $G_room_help = array( 'it' => '
                                        'If you want to subscribe our <a target="_blank" href="ml-briscola+subscribe@milug.org">Mailing List</a>, click it!' ) );
 
 $G_room_help = array( 'it' => '
@@ -180,7 +182,7 @@ Dopo che &egrave; iniziata una partita per uscirne dovete chiedere agli altri gi
 <dl>
 <dt><b>Comandi della chat</b>
 <dd><b>/nick <i>&lt;nuovo_nickname&gt;</i></b> - cambio di nickname
 <dl>
 <dt><b>Comandi della chat</b>
 <dd><b>/nick <i>&lt;nuovo_nickname&gt;</i></b> - cambio di nickname
-<dd><b>/tav <i>&lt;frase di invito&gt;</i></b> - invito per gli altri giocatori al tavolo dove si &egrave; seduti 
+<dd><b>/tav <i>&lt;frase di invito&gt;</i></b> - invito per gli altri giocatori al tavolo dove si &egrave; seduti
 <dd><b>/st <i>&lt;stato&gt;</i></b> - cambia l\'icona associata al tuo user; <i>stato</i> pu&ograve; valere: \\"normale\\", \\"fuori\\", \\"pausa\\", \\"cibo\\", \\"cane\\", \\"lavoro\\", \\"presente\\" oppure \\"sigaretta\\"
 <dd><b>/cont <i>&lt;id partita&gt;</i></b> - quando si è a un tavolo per garantiti, permette di proseguire una partita giocata in precedenza con gli stessi giocatori
 <dd><b>/guar <i>&lt;login&gt;</i></b> - mostra il garante dell\'utente con il login passato come argomento
 <dd><b>/st <i>&lt;stato&gt;</i></b> - cambia l\'icona associata al tuo user; <i>stato</i> pu&ograve; valere: \\"normale\\", \\"fuori\\", \\"pausa\\", \\"cibo\\", \\"cane\\", \\"lavoro\\", \\"presente\\" oppure \\"sigaretta\\"
 <dd><b>/cont <i>&lt;id partita&gt;</i></b> - quando si è a un tavolo per garantiti, permette di proseguire una partita giocata in precedenza con gli stessi giocatori
 <dd><b>/guar <i>&lt;login&gt;</i></b> - mostra il garante dell\'utente con il login passato come argomento
@@ -213,7 +215,7 @@ Dopo che &egrave; iniziata una partita per uscirne dovete chiedere agli altri gi
 <dl>
 <dt><b>Comandi della chat</b>
 <dd><b>/nick <i>&lt;nuovo_nickname&gt;</i></b> - cambio di nickname
 <dl>
 <dt><b>Comandi della chat</b>
 <dd><b>/nick <i>&lt;nuovo_nickname&gt;</i></b> - cambio di nickname
-<dd><b>/tav <i>&lt;frase di invito&gt;</i></b> - invito per gli altri giocatori al tavolo dove si &egrave; seduti 
+<dd><b>/tav <i>&lt;frase di invito&gt;</i></b> - invito per gli altri giocatori al tavolo dove si &egrave; seduti
 <dd><b>/st <i>&lt;stato&gt;</i></b> - cambia l\'icona associata al tuo user; <i>stato</i> pu&ograve; valere: \\"normale\\", \\"fuori\\", \\"pausa\\", \\"cibo\\", \\"cane\\", \\"lavoro\\", \\"presente\\" oppure \\"sigaretta\\"
 <dd><b>/cont <i>&lt;id partita&gt;</i></b> - quando si è a un tavolo per garantiti, permette di proseguire una partita giocata in precedenza con gli stessi giocatori
 <dd><b>/guar <i>&lt;login&gt;</i></b> - mostra il garante dell\'utente con il login passato come argomento
 <dd><b>/st <i>&lt;stato&gt;</i></b> - cambia l\'icona associata al tuo user; <i>stato</i> pu&ograve; valere: \\"normale\\", \\"fuori\\", \\"pausa\\", \\"cibo\\", \\"cane\\", \\"lavoro\\", \\"presente\\" oppure \\"sigaretta\\"
 <dd><b>/cont <i>&lt;id partita&gt;</i></b> - quando si è a un tavolo per garantiti, permette di proseguire una partita giocata in precedenza con gli stessi giocatori
 <dd><b>/guar <i>&lt;login&gt;</i></b> - mostra il garante dell\'utente con il login passato come argomento
@@ -224,12 +226,12 @@ Dopo che &egrave; iniziata una partita per uscirne dovete chiedere agli altri gi
 </div>
 ');
 
 </div>
 ');
 
-//  
+//
 $G_room_passwdhowto = array( 'it' => '<br><h2>Come registrarsi su Brisk</h2>
 <div style=\\"text-align: left; padding: 8px;\\">
 Attualmente ci sono due metodi per ottenere una password sul sito:<br><br>
 <dir>
 $G_room_passwdhowto = array( 'it' => '<br><h2>Come registrarsi su Brisk</h2>
 <div style=\\"text-align: left; padding: 8px;\\">
 Attualmente ci sono due metodi per ottenere una password sul sito:<br><br>
 <dir>
-<li><b>Facendosi garantire da un utente di Brisk che gi&agrave; possidede una password</b><br><br>
+<li><b>Facendosi garantire da un utente di Brisk che sia certificato.</b><br><br>
 <li><b>Auto-garantendosi utilizzando uno dei seguenti sistemi di identificazione digitale:</b><br><br>
 <dir>
 <li>Carta Regionale dei Servizi della Lombardia (la tessera sanitaria)
 <li><b>Auto-garantendosi utilizzando uno dei seguenti sistemi di identificazione digitale:</b><br><br>
 <dir>
 <li>Carta Regionale dei Servizi della Lombardia (la tessera sanitaria)
@@ -243,13 +245,12 @@ Attualmente ci sono due metodi per ottenere una password sul sito:<br><br>
 <li>il lettore di smart-card per collegare la carta al PC (acquistabile di solito presso le edicole)
 </dir>
 <br>
 <li>il lettore di smart-card per collegare la carta al PC (acquistabile di solito presso le edicole)
 </dir>
 <br>
-<b>Per effettuare la registrazione collegarsi al sito:</b><br><br>
-<dl>
-<dd><a class=\\"flat\\"  target=\\"_blank\\" href=\\"https://brisk.mine.nu\\">https://brisk.mine.nu</a>
-</dl>
-<br><br>
+<b>Per effettuare la registrazione collegarsi al sito:</b> <a class=\\"flat\\"  target=\\"_blank\\" href=\\"https://brisk.mine.nu\\">https://brisk.mine.nu</a>
+<br>
 Se sei in possesso di una carta che permette l\'identificazione via internet che non è nell\'elenco qui sopra
 Se sei in possesso di una carta che permette l\'identificazione via internet che non è nell\'elenco qui sopra
-<a class=\\"flat\\" href=\\"mailto:authadmbrisk@alternativeoutput.it\\">fai una segnalazione</a>.
+<a class=\\"flat\\" href=\\"mailto:authadmbrisk@alternativeoutput.it\\">fai una segnalazione</a>.<br><br>
+Le regole per ottenere la certificazione sono in via di definizione, l\' unica accettata è la conoscenza
+diretta dell\' utente da parte dell\' amministratore.
 
 </dir>
 </div>
 
 </dir>
 </div>
@@ -271,13 +272,13 @@ EN Attualmente ci sono due metodi per ottenere una password sul sito:<br><br>
 <li>il lettore di smart-card per collegare la carta al PC (acquistabile di solito presso le edicole)
 </dir>
 <br>
 <li>il lettore di smart-card per collegare la carta al PC (acquistabile di solito presso le edicole)
 </dir>
 <br>
-<b>Per effettuare la registrazione collegarsi al sito:</b><br><br>
-<dl>
-<dd><a class=\\"flat\\"  target=\\"_blank\\" href=\\"https://brisk.mine.nu\\">https://brisk.mine.nu</a>
-</dl>
-<br><br>
+<b>Per effettuare la registrazione collegarsi al sito:</b> <a class=\\"flat\\"  target=\\"_blank\\" href=\\"https://brisk.mine.nu\\">https://brisk.mine.nu</a>
+<br>
 Se sei in possesso di una carta che permette l\'identificazione via internet che non è nell\'elenco qui sopra
 Se sei in possesso di una carta che permette l\'identificazione via internet che non è nell\'elenco qui sopra
-<a class=\\"flat\\" href=\\"mailto:authadmbrisk@alternativeoutput.it\\">fai una segnalazione</a>.
+<a class=\\"flat\\" href=\\"mailto:authadmbrisk@alternativeoutput.it\\">fai una segnalazione</a>.<br><br>
+Le regole per ottenere la certificazione sono in via di definizione, l\' unica accettata è la conoscenza
+diretta dell\' utente da parte dell\' amministratore.
+
 
 </dir>
 </div>
 
 </dir>
 </div>
@@ -302,6 +303,117 @@ Copyright 2006-2012 <a href=\\"mailto:brisk@alternativeoutput.it\\">Matteo Nasta
 <br><b>version '.$G_brisk_version.'</b><br><br>
 Copyright 2006-2012 <a href=\\"mailto:brisk@alternativeoutput.it\\">Matteo Nastasi</a> (aka mop)<br><br>');
 
 <br><b>version '.$G_brisk_version.'</b><br><br>
 Copyright 2006-2012 <a href=\\"mailto:brisk@alternativeoutput.it\\">Matteo Nastasi</a> (aka mop)<br><br>');
 
+
+$G_PG_vow = array("a", "e", "i", "o", "u", "y");
+$G_PG_vow_n = 6;
+$G_PG_cons = array(
+      "b", "bb", "bc", "bd", "bf", "bg", "bk", "bl", "bm", "bn", "bp",       "br", "bs", "bt", "bv", "bw",       "bz",
+      "c", "cb", "cc", "cd", "cf", "cg", "ck", "cl", "cm", "cn", "cp", "cq", "cr", "cs", "ct", "cv", "cw", "cx", "cz",
+      "d", "db", "dc", "dd", "df", "dg", "dk", "dl", "dm", "dn", "dp",       "dr", "ds", "dt", "dv", "dw", "dx", "dz",
+      "f", "fb", "fc", "fd", "ff", "fg", "fk", "fl", "fm", "fn", "fp",       "fr", "fs", "ft", "fv", "fw", "fx", "fz",
+      "g", "gb", "gc", "gd", "gf", "gg", "gk", "gl", "gm", "gn", "gp",       "gr", "gs", "gt", "gv", "gw", "gx", "gz",
+      "j", "jb", "jc", "jd", "jf", "jg", "jk", "jl", "jm", "jn", "jp", "jq", "jr", "js", "jt", "jv", "jw", "jx", "jz",
+      "k", "kb", "kc", "kd", "kf", "kg", "kk", "kl", "km", "kn", "kp",       "kr", "ks", "kt", "kv", "kw", "kx", "kz",
+      "l", "lb", "lc", "ld", "lf", "lg", "lk", "ll", "lm", "ln", "lp",       "lr", "ls", "lt", "lv", "lw", "lx", "lz",
+      "m", "mb", "mc", "md", "mf", "mg", "mk", "ml", "mm", "mn", "mp",       "mr", "ms", "mt", "mv", "mw", "mx", "mz",
+      "n", "nb", "nc", "nd", "nf", "ng", "nk", "nl", "nm", "nn", "np",       "nr", "ns", "nt", "nv", "nw", "nx", "nz",
+      "p", "pb", "pc", "pd", "pf", "pg", "pk", "pl", "pm", "pn", "pp",       "pr", "ps", "pt", "pv", "pw", "px", "pz",
+      "q", "qb", "qc", "qd", "qf", "qg", "qk", "ql", "qm", "qn", "qp", "qq", "qr", "qs", "qt", "qv", "qw", "qx", "qz",
+      "r", "rb", "rc", "rd", "rf", "rg", "rk", "rl", "rm", "rn", "rp",       "rr", "rs", "rt", "rv", "rw", "rx", "rz",
+      "s", "sb", "sc", "sd", "sf", "sg", "sk", "sl", "sm", "sn", "sp", "sq", "sr", "ss", "st", "sv", "sw", "sx", "sz",
+      "t", "tb", "tc", "td", "tf", "tg", "tk", "tl", "tm", "tn", "tp",       "tr", "ts", "tt", "tv", "tw", "tx", "tz",
+      "v", "vb", "vc", "vd", "vf", "vg", "vk", "vl", "vm", "vn", "vp",       "vr", "vs", "vt", "vv", "vw", "vx", "vz",
+      "w", "wb", "wc", "wd", "wf", "wg", "wk", "wl", "wm", "wn", "wp",       "wr", "ws", "wt", "wv", "ww", "wx", "wz",
+      "x", "xb", "xc", "xd", "xf", "xg", "xk", "xl", "xm", "xn", "xp",       "xr", "xs", "xt", "xv", "xw", "xx", "xz",
+      "z", "zb", "zc", "zd", "zf", "zg", "zk", "zl", "zm", "zn", "zp",       "zr", "zs", "zt", "zv", "zw", "zx", "zz",
+                  );
+// $G_PG_cons_n = count($G_PG_cons);
+// printf("N CONS: %d\n", $G_PG_cons_n);
+$G_PG_cons_n = 345;
+    /*     printf("%d %d\n", count($voc), count($cons)); */
+    /* for ($i = 0 ; $i < 26 ; $i++) { */
+    /*     if (array_search(chr(ord('a') + $i), $voc) !== FALSE || $i == 7) */
+    /*         continue; */
+    /*     printf('      "%s", ', chr(ord('a') + $i)); */
+    /*     for ($e = 0 ; $e < 26 ; $e++) { */
+    /*         if (array_search(chr(ord('a') + $e), $voc) !== FALSE || $e == 7) */
+    /*             continue; */
+    /*         printf('"%s%s", ', chr(ord('a') + $i), chr(ord('a') + $e)); */
+    /*     } */
+    /*     printf("\n"); */
+    /* } */
+
+function nickserv_msg($dt, $msg) {
+    return sprintf('chatt_sub("%s",[0x040003,"%s"],"%s");', $dt, NICKSERV, $msg);
+}
+
+function passwd_gen($seed = NULL)
+{
+    GLOBAL $G_PG_vow, $G_PG_vow_n, $G_PG_cons, $G_PG_cons_n;
+
+    $pw = "";
+
+    if ($seed != NULL)
+        mt_srand($seed);
+    else
+        mt_srand();
+
+    for ($sil = 0 ; $sil < 7 ; $sil++) {
+        if (($sil % 2) == 0) {
+            // vowels
+            for ($n = 0 ; $n < mt_rand(1,2) ; $n++) {
+                if ($n == 0) {
+                    $old = mt_rand(0, $G_PG_vow_n-1);
+                    $pw .= $G_PG_vow[$old];
+                }
+                else {
+                    $new = mt_rand(0, $G_PG_vow_n-1);
+                    if ($new == $old)
+                        $new = ($new + mt_rand(0, $G_PG_vow_n-2)) % $G_PG_vow_n;
+                    $pw .= $G_PG_vow[$new];
+                }
+            }
+        }
+        else {
+            // consonants
+            $pw .= $G_PG_cons[mt_rand(0, $G_PG_cons_n-1)];
+        }
+    }
+
+    return $pw;
+}
+
+function cmd_return($val, $desc)
+{
+    return array('val' => $val, 'desc' => $desc);
+}
+
+function cmd_serialize($attrs)
+{
+    $ret = "";
+
+    $sep = "";
+    foreach ($attrs as $key => $value) {
+        $ret .= $sep . $key . '=' . urlencode($value);
+        $sep = "&";
+    }
+    return $ret;
+}
+
+function cmd_deserialize($cmd)
+{
+    $ret = array();
+    $a = explode('&', $cmd);
+    $i = 0;
+    while ($i < count($a)) {
+        $b = split('=', $a[$i]);
+        $ret[urldecode($b[0])] = urldecode($b[1]);
+        $i++;
+    }
+
+    return $ret;
+}
+
 //  return values
 // -1 v1 < v2
 //  0 equal
 //  return values
 // -1 v1 < v2
 //  0 equal
@@ -364,7 +476,7 @@ function file_lock($fname, $is_exclusive)
     if (($res = @fopen($fname, "r+")) == FALSE) {
         return (FALSE);
     }
     if (($res = @fopen($fname, "r+")) == FALSE) {
         return (FALSE);
     }
-        
+
     if (flock($res, ($is_exclusive ? LOCK_EX : LOCK_SH)) == FALSE) {
         fclose($res);
         return (FALSE);
     if (flock($res, ($is_exclusive ? LOCK_EX : LOCK_SH)) == FALSE) {
         fclose($res);
         return (FALSE);
@@ -396,13 +508,13 @@ $escinp_to = array(   "&quot;" );
 function escinput($s)
 {
     GLOBAL $escinp_from, $escinp_to;
 function escinput($s)
 {
     GLOBAL $escinp_from, $escinp_to;
-    
+
     return str_replace($escinp_from, $escinp_to, $s);
 }
 
 function eschtml($s)
 {
     return str_replace($escinp_from, $escinp_to, $s);
 }
 
 function eschtml($s)
 {
-    return htmlentities($s);
+    return htmlentities($s, ENT_COMPAT, "UTF-8");
 }
 
 function esclfhtml($s)
 }
 
 function esclfhtml($s)
@@ -470,29 +582,61 @@ function xcapemesg($s)
 }
 
 
 }
 
 
+class IPClass {
+    var $addr;
+    var $mask;
+
+    function IPClass($ipset)
+    {
+        //split
+        $elem = split("/", $ipset, 2);
+        $addr = $elem[0];
+        $mask = (int)$elem[1];
+
+        //convert mask
+
+        $this->mask = ((1<<($mask))-1) << (32 - $mask);
+        $this->addr = ip2long($addr) & $this->mask;
+
+        fprintf(STDERR, "New ipclass: %x (%x)\n", $this->addr, $this->mask);
+    }
+
+    function match($ip)
+    {
+        fprintf(STDERR, "IP: %x, ADDR: %x, MASK: %x -> (%d)\n",
+                $ip, $this->addr, $this->mask, ((ip2long($ip) & $this->mask) == $this->addr));
+        return (($ip & $this->mask) == $this->addr);
+    }
+}
+
 class Vect {
     function Vect($a)
     {
         $this->el = $a;
     }
 class Vect {
     function Vect($a)
     {
         $this->el = $a;
     }
-    
+
     function getbyid($idx)
     {
         return ($this->el[$idx]);
     }
     function getbyid($idx)
     {
         return ($this->el[$idx]);
     }
-    
+
     function setbyid($idx, $v)
     {
         $this->el[$idx] = $v;
     }
 }
 
     function setbyid($idx, $v)
     {
         $this->el[$idx] = $v;
     }
 }
 
+define('TABLE_AUTH_TY_PUBL', 0);
+define('TABLE_AUTH_TY_AUTH', 1);
+define('TABLE_AUTH_TY_CERT', 2);
+
+
 class Table {
   var $idx;
   var $player;
   var $player_n;
 
 class Table {
   var $idx;
   var $player;
   var $player_n;
 
-  var $auth_only;     // se tavolo riservato o libero
+  var $auth_type;     // required authorization to sit down
 
   var $wag_own;
   var $wag_com;
 
   var $wag_own;
   var $wag_com;
@@ -503,11 +647,11 @@ class Table {
 
   var $wakeup_time;
 
 
   var $wakeup_time;
 
-  function Table() 
+  function Table()
   {
   }
   {
   }
-  
-  function create($idx) 
+
+  function create($idx)
   {
     if (($thiz = new Table()) == FALSE)
       return (FALSE);
   {
     if (($thiz = new Table()) == FALSE)
       return (FALSE);
@@ -515,7 +659,13 @@ class Table {
     $thiz->idx       =   $idx;
     $thiz->player    =   array();
     $thiz->player_n  =   0;
     $thiz->idx       =   $idx;
     $thiz->player    =   array();
     $thiz->player_n  =   0;
-    $thiz->auth_only =   FALSE;
+
+    if ($idx < TABLES_CERT_N)
+        $thiz->auth_type =   TABLE_AUTH_TY_CERT;
+    else if ($idx < TABLES_AUTH_N)
+        $thiz->auth_type =   TABLE_AUTH_TY_AUTH;
+    else
+        $thiz->auth_type =   TABLE_AUTH_TY_PUBL;
 
     $thiz->wag_own   =  -1;
     $thiz->wag_com   =  "";
 
     $thiz->wag_own   =  -1;
     $thiz->wag_com   =  "";
@@ -523,7 +673,7 @@ class Table {
 
     $thiz->table_token  = "";
     $thiz->table_start  = 0;
 
     $thiz->table_token  = "";
     $thiz->table_start  = 0;
-    
+
     $thiz->wakeup_time = 0;
 
     return ($thiz);
     $thiz->wakeup_time = 0;
 
     return ($thiz);
@@ -538,8 +688,8 @@ class Table {
     $this->player_n = $from->player_n;
 
     log_main("PLAYER_N - parent::copy.".$this->player_n);
     $this->player_n = $from->player_n;
 
     log_main("PLAYER_N - parent::copy.".$this->player_n);
-    
-    $this->auth_only =  $from->auth_only;
+
+    $this->auth_type =  $from->auth_type;
 
     $this->wag_own   =  $from->wag_own;
     $this->wag_com   =  $from->wag_com;
 
     $this->wag_own   =  $from->wag_own;
     $this->wag_com   =  $from->wag_com;
@@ -560,19 +710,19 @@ class Table {
 
     return ($thiz);
   }
 
     return ($thiz);
   }
-  
+
   function spawn($from)
   {
     if (($thiz = new Table()) == FALSE)
       return (FALSE);
   function spawn($from)
   {
     if (($thiz = new Table()) == FALSE)
       return (FALSE);
-    
+
     $thiz->idx = $from->idx;
     $thiz->player = array();
     for ($i = 0 ; $i < $from->player_n ; $i++)
       $thiz->player[$i] = $i;
     $thiz->player_n = $from->player_n;
 
     $thiz->idx = $from->idx;
     $thiz->player = array();
     for ($i = 0 ; $i < $from->player_n ; $i++)
       $thiz->player[$i] = $i;
     $thiz->player_n = $from->player_n;
 
-    $thiz->auth_only =  $from->auth_only;
+    $thiz->auth_type =  $from->auth_type;
 
     $thiz->wag_own = $from->wag_own;
     $thiz->wag_com = $from->wag_com;
 
     $thiz->wag_own = $from->wag_own;
     $thiz->wag_com = $from->wag_com;
@@ -619,22 +769,22 @@ class Table {
   {
     $this->player[$this->player_n] = $idx;
     $this->player_n++;
   {
     $this->player[$this->player_n] = $idx;
     $this->player_n++;
-    
+
     return ($this->player_n - 1);
   }
     return ($this->player_n - 1);
   }
-  
+
   function user_rem($brisk, $user)
   {
     $tabpos = $user->table_pos;
   function user_rem($brisk, $user)
   {
     $tabpos = $user->table_pos;
-    
+
     /* verifico la consistenza dei dati */
     if ($brisk->user[$this->player[$tabpos]] == $user) {
     /* verifico la consistenza dei dati */
     if ($brisk->user[$this->player[$tabpos]] == $user) {
-      
+
       /* aggiorna l'array dei giocatori al tavolo. */
       for ($i = $tabpos ; $i < $this->player_n-1 ; $i++) {
       /* aggiorna l'array dei giocatori al tavolo. */
       for ($i = $tabpos ; $i < $this->player_n-1 ; $i++) {
-       $this->player[$i] = $this->player[$i+1];
-       $user_cur = $brisk->user[$this->player[$i]];
-       $user_cur->table_pos = $i;
+        $this->player[$i] = $this->player[$i+1];
+        $user_cur = $brisk->user[$this->player[$i]];
+        $user_cur->table_pos = $i;
       }
       $this->player_n--;
     }
       }
       $this->player_n--;
     }
@@ -643,12 +793,7 @@ class Table {
     }
   }
 
     }
   }
 
-
-
-  //      $ret .= table_act_content(($user->subst == 'standup'), $this->table[$i]->player_n, $i, $user->table, 
-  //                              ($this->table[$i]->auth_only == FALSE ? TRUE : $user->flags & USER_FLAG_AUTH));
-
-  // function act_content($isstanding, $sitted, $table, $cur_table, $allowed)
+  // Table->act_content - return 'id' of type of output required for table button
   function act_content($user)
   {
     $ret = "";
   function act_content($user)
   {
     $ret = "";
@@ -660,15 +805,23 @@ class Table {
 
     if ($isstanding) {
       if ($sitted < PLAYERS_N) {
 
     if ($isstanding) {
       if ($sitted < PLAYERS_N) {
-        if ($this->auth_only) {
-          if ($user->flags & USER_FLAG_AUTH) 
-            $act = "sitreser";
-          else
-            $act = 'reserved';
-        }
-        else {
-          $act = 'sit';
-        }
+          switch ($this->auth_type) {
+          case TABLE_AUTH_TY_CERT:
+              if ($user->is_cert())
+                  $act = "sitcert";
+              else
+                  $act = 'resercert';
+              break;
+          case TABLE_AUTH_TY_AUTH:
+              if ($user->is_auth())
+                  $act = "sitreser";
+              else
+                  $act = 'reserved';
+              break;
+          default:
+              $act = 'sit';
+              break;
+          }
       }
       else {
         $act = 'none';
       }
       else {
         $act = 'none';
@@ -680,10 +833,10 @@ class Table {
       else
         $act = 'none';
     }
       else
         $act = 'none';
     }
-    
+
     if ($act != '')
       $ret = sprintf('j_tab_act_cont(%d, \'%s\');', $table, $act);
     if ($act != '')
       $ret = sprintf('j_tab_act_cont(%d, \'%s\');', $table, $act);
-    
+
     return ($ret);
   }
 } // end class Table
     return ($ret);
   }
 } // end class Table
@@ -833,7 +986,7 @@ class Client_prefs {
 class Brisk
 {
     static $delta_t;
 class Brisk
 {
     static $delta_t;
-    
+
     var $crystal_filename;
     var $user;
     var $table;
     var $crystal_filename;
     var $user;
     var $table;
@@ -842,44 +995,178 @@ class Brisk
     var $step; // current step of the comm array
     var $garbage_timeout;
     var $shm_sz;
     var $step; // current step of the comm array
     var $garbage_timeout;
     var $shm_sz;
-    
+
+    var $ban_list;  // ban list (authized allowed)
+    var $black_list;  // black list (anti-dos, noone allowed)
+
     var $delay_mgr;
 
     var $delay_mgr;
 
+    var $cds;
+
     public static $sess_cur;
 
     public static $sess_cur;
 
-    function Brisk($crystal_filename) {
-        $this->crystal_filename = $crystal_filename;
-        $this->user  = array();
-        $this->table = array();
-        $this->match = array();
-        
+    function Brisk()
+    {
+        $this->cds = NULL;
+    }
+
+    // constructor
+    static function create($crystal_filename, $ban_list, $black_list) {
+        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);
+
+                return($brisk);
+            }
+        }
+
+        fprintf(STDERR, "NEW ROOM\n");
+        $thiz = new Brisk();
+
+        $thiz->crystal_filename = $crystal_filename;
+        $thiz->user  = array();
+        $thiz->table = array();
+        $thiz->match = array();
+
+        $thiz->ban_list = NULL;
+        $thiz->black_list = NULL;
+
         for ($i = 0 ; $i < MAX_PLAYERS ; $i++) {
         for ($i = 0 ; $i < MAX_PLAYERS ; $i++) {
-            $this->user[$i] = User::create($this, $i, "", "");
+            $thiz->user[$i] = User::create($thiz, $i, "", "");
         }
         }
-        
+
         for ($i = 0 ; $i < TABLES_N ; $i++) {
         for ($i = 0 ; $i < TABLES_N ; $i++) {
-            $this->table[$i] = Table::create($i);
-            /* OLD METHOD
-               if ($i < 12) {
-               $row = ( (((int)($i / 4)) % 2) == 0 );
-               $col = ($i % 2 == 0);
-               $this->table[$i]->auth_only = (($row && $col) || (!$row && !$col));
-               }
-               else {
-               $this->table[$i]->auth_only = FALSE;
-               }
-            */
-            if ($i < TABLES_AUTH_N) 
-                $this->table[$i]->auth_only = TRUE;
-            else
-                $this->table[$i]->auth_only = FALSE;
+            $thiz->table[$i] = Table::create($i);
         }
         }
-        $this->garbage_timeout = 0;
-        $this->shm_sz = SHM_DIMS_MIN;
+        $thiz->garbage_timeout = 0;
+        $thiz->shm_sz = SHM_DIMS_MIN;
 
 
-        $this->delay_mgr = new Delay_Manager(1.5);
+        $thiz->delay_mgr = new Delay_Manager(1.5);
 
         static::$sess_cur = FALSE;
 
         static::$sess_cur = FALSE;
+
+        $thiz->reload(TRUE, $ban_list, $black_list);
+
+        return ($thiz);
+    }
+
+    function ipclass_update($ip_out_s, $ip_in)
+    {
+        fprintf(STDERR, "N_IN: %d\n", count($ip_in));
+
+        $ip_out = &$this->$ip_out_s;
+
+        // if already set clean the ban_list property
+        if ($ip_out) {
+            $ct = count($ip_out);
+            for ($i = 0 ; $i < $ct ; $i++) {
+                unset($ip_out[$i]);
+            }
+            unset($ip_out);
+        }
+
+        $ip_out = array();
+        for ($i = 0 ; $i < count($ip_in) ; $i++) {
+            $ip_out[$i] = new IPClass($ip_in[$i]);
+        }
+    }
+
+    function reload($is_first, $ban_list, $black_list)
+    {
+        fprintf(STDERR, "RELOAD STUFF (%d)(%d)\n", count($ban_list), count($black_list));
+
+        if (defined('CURL_DE_SAC_VERS')) {
+            if (brisk_cds_reload($this) == FALSE) {
+                exit(12);
+            }
+        }
+        $this->ipclass_update("ban_list", $ban_list);
+        $this->ipclass_update("black_list", $black_list);
+
+        if (!$is_first) {
+            $this->banned_kickoff();
+            $this->garbage_manager(TRUE);
+        }
+    }
+
+    function banned_kickoff()
+    {
+        $is_ban = FALSE;
+
+        for ($table_idx = 0 ; $table_idx < TABLES_N ; $table_idx++) {
+            $table_cur = $this->table[$table_idx];
+            // if the table is complete and exists we check users IP
+
+            if ($table_cur->player_n == PLAYERS_N) {
+                if (isset($this->match[$table_idx]) &&
+                    $table_cur->table_token == $bin5->table_token) {
+                    log_main("PLAYERS == N TABLE ".$table_idx);
+
+                    $bin5 = $this->match[$table_idx];
+
+                    $is_ban |= $bin5->banned_kickoff();
+                }
+            }
+        }
+
+        for ($i = 0 ; $i < MAX_PLAYERS ; $i++) {
+            $user_cur = $this->user[$i];
+
+            if ($user_cur->sess == "")
+                continue;
+
+            // check if the IP is blacklisted
+            if ($this->black_check($user_cur->ip)) {
+                $user_cur->lacc = 0;
+                $is_ban = TRUE;
+                continue;
+            }
+
+            // if authorized not check if banlisted
+            if ($user_cur->is_auth()) {
+                continue;
+            }
+
+            if ($this->ban_check($user_cur->ip)) {
+                $user_cur->lacc = 0;
+                $is_ban = TRUE;
+            }
+        }
+
+        return $is_ban;
+    }
+
+    function ban_check($ip_str)
+    {
+        $ip = ip2long($ip_str);
+        fprintf(STDERR, "Brisk::ban_check %d\n", count($this->ban_list));
+        for ($i = 0 ; $i < count($this->ban_list) ; $i++) {
+            fprintf(STDERR, "ban_list[%d] = %x (%x)\n", $i,
+                    $this->ban_list[$i]->addr, $this->ban_list[$i]->mask);
+            if ($this->ban_list[$i]->match($ip)) {
+                fprintf(STDERR, "\n\nMATCHA!\n\n");
+                return(TRUE);
+            }
+        }
+        return (FALSE);
+    }
+
+    function black_check($ip_str)
+    {
+        $ip = ip2long($ip_str);
+        fprintf(STDERR, "Brisk::black_check %d\n", count($this->black_list));
+        for ($i = 0 ; $i < count($this->black_list) ; $i++) {
+            fprintf(STDERR, "black_list[%d] = %x (%x)\n", $i,
+                   $this->black_list[$i]->addr, $this->black_list[$i]->mask);
+            if ($this->black_list[$i]->match($ip)) {
+                fprintf(STDERR, "\n\nMATCHA!\n\n");
+                return(TRUE);
+            }
+        }
+        return (FALSE);
     }
 
   function garbage_manager($force)
     }
 
   function garbage_manager($force)
@@ -899,16 +1186,16 @@ class Brisk
         $this->delay_mgr->lastcheck_set($curtime);
         return ($ismod);
     }
         $this->delay_mgr->lastcheck_set($curtime);
         return ($ismod);
     }
-      
+
     // Before all align times with table timeout
     for ($table_idx = 0 ; $table_idx < TABLES_N ; $table_idx++) {
     // Before all align times with table timeout
     for ($table_idx = 0 ; $table_idx < TABLES_N ; $table_idx++) {
-       $table_cur = $this->table[$table_idx];
-       // if the table is complete and exists its shared mem we get the info about users lacc
-        
-       if ($table_cur->player_n == PLAYERS_N) {
+        $table_cur = $this->table[$table_idx];
+        // if the table is complete and exists its shared mem we get the info about users lacc
+
+        if ($table_cur->player_n == PLAYERS_N) {
             log_main("PLAYERS == N TABLE ".$table_idx);
             log_main("PLAYERS == N TABLE ".$table_idx);
-            
-            
+
+
             $no_recovery = FALSE;
             if (isset($this->match[$table_idx])) {
                 $bin5 = $this->match[$table_idx];
             $no_recovery = FALSE;
             if (isset($this->match[$table_idx])) {
                 $bin5 = $this->match[$table_idx];
@@ -926,45 +1213,45 @@ class Brisk
                     //
                     log_main("garbage_manager: bri loaded successfully.");
                     $bin5->garbage_manager(TRUE);
                     //
                     log_main("garbage_manager: bri loaded successfully.");
                     $bin5->garbage_manager(TRUE);
-                    
+
                     $bin5_table = $bin5->table[0];
                     $bin5_table = $bin5->table[0];
-                    
+
                     // is the end of the table
                     // is the end of the table
-                    
+
                     if ($bin5->the_end == TRUE) {
                         /*
                          *  DESTROY OF FINISHED TABLE && MOVE PLAYER TO ROOM AGAIN
                          */
                         log_main("garbage_manager: INSIDE THE END.");
                     if ($bin5->the_end == TRUE) {
                         /*
                          *  DESTROY OF FINISHED TABLE && MOVE PLAYER TO ROOM AGAIN
                          */
                         log_main("garbage_manager: INSIDE THE END.");
-                        
+
                         $plist = "$table_cur->table_token|$table_cur->idx|$table_cur->player_n";
                         for ($i = 0 ; $i < $table_cur->player_n ; $i++) {
                             $plist .= '|'.$this->user[$table_cur->player[$i]]->sess;
                         }
                         $plist = "$table_cur->table_token|$table_cur->idx|$table_cur->player_n";
                         for ($i = 0 ; $i < $table_cur->player_n ; $i++) {
                             $plist .= '|'.$this->user[$table_cur->player[$i]]->sess;
                         }
-                        
+
                         for ($i = 0 ; $i < $bin5_table->player_n ; $i++) {
                             // stat must be "table" by definition
                             $user_cur = $this->user[$table_cur->player[$i]];
                             $bin5_user = $bin5->user[$i];
                         for ($i = 0 ; $i < $bin5_table->player_n ; $i++) {
                             // stat must be "table" by definition
                             $user_cur = $this->user[$table_cur->player[$i]];
                             $bin5_user = $bin5->user[$i];
-                            
+
                             $user_cur->subst      = $bin5_user->subst;
                             $user_cur->step       = $bin5_user->step;
                             $user_cur->lacc       = $bin5_user->lacc;
                             $user_cur->laccwr     = $bin5_user->lacc;
                             $user_cur->bantime    = $bin5_user->bantime;
                         }
                             $user_cur->subst      = $bin5_user->subst;
                             $user_cur->step       = $bin5_user->step;
                             $user_cur->lacc       = $bin5_user->lacc;
                             $user_cur->laccwr     = $bin5_user->lacc;
                             $user_cur->bantime    = $bin5_user->bantime;
                         }
-                        
+
                         log_legal($curtime, $user_cur->ip, $user_cur, "STAT:DESTROY_GAME", $plist);
                         log_legal($curtime, $user_cur->ip, $user_cur, "STAT:DESTROY_GAME", $plist);
-                        
-                        $this->room_join_wakeup($user_cur, FALSE, 0); 
+
+                        $this->room_join_wakeup($user_cur, FALSE, 0);
                         $table_cur->table_token = "";
                         $table_cur->wakeup_time = $curtime + WAKEUP_TIME;
                         $table_cur->table_token = "";
                         $table_cur->wakeup_time = $curtime + WAKEUP_TIME;
-                        
+
                         $this->match_del($table_idx);
                     }
                     else {
                         log_main("gm:: save_data");
                         $this->match_del($table_idx);
                     }
                     else {
                         log_main("gm:: save_data");
-                        
+
                         for ($i = 0 ; $i < $bin5_table->player_n ; $i++) {
                             $this->user[$table_cur->player[$i]]->lacc = $bin5->user[$i]->lacc;
                         }
                         for ($i = 0 ; $i < $bin5_table->player_n ; $i++) {
                             $this->user[$table_cur->player[$i]]->lacc = $bin5->user[$i]->lacc;
                         }
@@ -972,12 +1259,12 @@ class Brisk
                 } // if ($bin5 == FALSE
                 else if ($no_recovery == FALSE) {
                     log_crit("ERROR: table ".$table_idx." unrecoverable join");
                 } // if ($bin5 == FALSE
                 else if ($no_recovery == FALSE) {
                     log_crit("ERROR: table ".$table_idx." unrecoverable join");
-                    
+
                     for ($i = 0 ; $i < $table_cur->player_n ; $i++) {
                         $user_cur = $this->user[$table_cur->player[$i]];
                         $user_cur->subst = "shutdowner";
                         $user_cur->step_inc();
                     for ($i = 0 ; $i < $table_cur->player_n ; $i++) {
                         $user_cur = $this->user[$table_cur->player[$i]];
                         $user_cur->subst = "shutdowner";
                         $user_cur->step_inc();
-                        
+
                         $ret = sprintf('stat = "%s"; subst = "%s";',  $user_cur->stat, $user_cur->subst);
                         $ret .= "gst.st = ".($user_cur->step+1)."; ";
                         // MLANG <br>I dati del tavolo n&deg; ".$user_cur->table." sono inconsistenti, verranno resettati.<br><br>Torni in piedi.<br><br>
                         $ret = sprintf('stat = "%s"; subst = "%s";',  $user_cur->stat, $user_cur->subst);
                         $ret .= "gst.st = ".($user_cur->step+1)."; ";
                         // MLANG <br>I dati del tavolo n&deg; ".$user_cur->table." sono inconsistenti, verranno resettati.<br><br>Torni in piedi.<br><br>
@@ -986,39 +1273,39 @@ class Brisk
                         $user_cur->comm[$user_cur->step % COMM_N] = $ret;
                         $user_cur->step_inc();
                     }
                         $user_cur->comm[$user_cur->step % COMM_N] = $ret;
                         $user_cur->step_inc();
                     }
-                    
+
                     $plist = "$table_cur->table_token|$user_cur->table|$table_cur->player_n";
                     for ($i = 0 ; $i < $table_cur->player_n ; $i++) {
                         $plist .= '|'.$this->user[$table_cur->player[$i]]->sess;
                     }
                     log_legal($curtime, $user_cur->ip, $user_cur, "STAT:DESTROY_GAME(RECOVERY)", $plist);
                     $plist = "$table_cur->table_token|$user_cur->table|$table_cur->player_n";
                     for ($i = 0 ; $i < $table_cur->player_n ; $i++) {
                         $plist .= '|'.$this->user[$table_cur->player[$i]]->sess;
                     }
                     log_legal($curtime, $user_cur->ip, $user_cur, "STAT:DESTROY_GAME(RECOVERY)", $plist);
-                    
-                    $this->room_join_wakeup($user_cur, TRUE, -2); 
+
+                    $this->room_join_wakeup($user_cur, TRUE, -2);
                     $table_cur->table_token = "";
                 }
             }
         } //  if ($table_cur->player_n == PLAYERS_N) {
     } //  for ($table_idx = 0 ; $table_idx < TABLES_N ; $table_idx++) {
                     $table_cur->table_token = "";
                 }
             }
         } //  if ($table_cur->player_n == PLAYERS_N) {
     } //  for ($table_idx = 0 ; $table_idx < TABLES_N ; $table_idx++) {
-    
+
     log_rd2("out new loop.");
     log_rd2("out new loop.");
-    
+
     for ($i = 0 ; $i < MAX_PLAYERS ; $i++) {
     for ($i = 0 ; $i < MAX_PLAYERS ; $i++) {
-       $user_cur = $this->user[$i];
-       
-       log_rd2("User: ".$user_cur->name."  stat: ".$user_cur->stat."  subst: ".$user_cur->subst);
-       
-       if ($user_cur->sess == "") 
+        $user_cur = $this->user[$i];
+        
+        log_rd2("User: ".$user_cur->name."  stat: ".$user_cur->stat."  subst: ".$user_cur->subst);
+        
+        if ($user_cur->sess == "")
             continue;
             continue;
-       
-       if ($user_cur->lacc + EXPIRE_TIME_RD < ($curtime - $delta)) {
+        
+        if ($user_cur->lacc + EXPIRE_TIME_RD < ($curtime - $delta)) {
             // Auto logout dell'utente
             log_rd2("AUTO LOGOUT.".($user_cur->lacc + EXPIRE_TIME_RD)." curtime - delta ".($curtime - $delta));
             // Auto logout dell'utente
             log_rd2("AUTO LOGOUT.".($user_cur->lacc + EXPIRE_TIME_RD)." curtime - delta ".($curtime - $delta));
-            
+
             if ($user_cur->stat == 'table' || $user_cur->stat == 'room') {
                 log_auth($user_cur->sess, "Autologout session.");
             if ($user_cur->stat == 'table' || $user_cur->stat == 'room') {
                 log_auth($user_cur->sess, "Autologout session.");
-                
+
                 $user_cur->reset();
                 $user_cur->reset();
-           
+        
                 log_rd2("AUTO LOGOUT.");
                 if ($user_cur->subst == 'sitdown' || $user_cur->stat == 'table')
                     $this->room_wakeup($user_cur);
                 log_rd2("AUTO LOGOUT.");
                 if ($user_cur->subst == 'sitdown' || $user_cur->stat == 'table')
                     $this->room_wakeup($user_cur);
@@ -1027,9 +1314,9 @@ class Brisk
                 else
                     log_rd2("LOGOUT FROM WHAT ???");
             }
                 else
                     log_rd2("LOGOUT FROM WHAT ???");
             }
-       }
+        }
 
 
-       if ($user_cur->laccwr + EXPIRE_TIME_SMAMMA < ($curtime - $delta)) { // lo rimettiamo in piedi
+        if ($user_cur->laccwr + EXPIRE_TIME_SMAMMA < ($curtime - $delta)) { // lo rimettiamo in piedi
             if ($user_cur->stat == 'room' && $user_cur->subst == 'sitdown') {
                 $this->room_wakeup($user_cur);
                 $user_cur->comm[$user_cur->step % COMM_N] = "gst.st = ".($user_cur->step+1)."; ";
             if ($user_cur->stat == 'room' && $user_cur->subst == 'sitdown') {
                 $this->room_wakeup($user_cur);
                 $user_cur->comm[$user_cur->step % COMM_N] = "gst.st = ".($user_cur->step+1)."; ";
@@ -1037,10 +1324,10 @@ class Brisk
                 $user_cur->comm[$user_cur->step % COMM_N] .=  show_notify($mlang_brisk['tabtout_a'][$G_lang].(EXPIRE_TIME_SMAMMA/60.0).$mlang_brisk['tabtout_b'][$G_lang], 0, $mlang_brisk['btn_backstand'][$G_lang], 400, 100);
                 $user_cur->step_inc();
             }
                 $user_cur->comm[$user_cur->step % COMM_N] .=  show_notify($mlang_brisk['tabtout_a'][$G_lang].(EXPIRE_TIME_SMAMMA/60.0).$mlang_brisk['tabtout_b'][$G_lang], 0, $mlang_brisk['btn_backstand'][$G_lang], 400, 100);
                 $user_cur->step_inc();
             }
-       }
+        }
     }
     log_rd2("GARBAGE UPDATED!");
     }
     log_rd2("GARBAGE UPDATED!");
-    
+
     $this->garbage_timeout = $curtime + GARBAGE_TIMEOUT;
     $ismod = TRUE;
 
     $this->garbage_timeout = $curtime + GARBAGE_TIMEOUT;
     $ismod = TRUE;
 
@@ -1052,7 +1339,7 @@ class Brisk
   {
     GLOBAL $G_lang, $mlang_brisk;
     log_main("show_room: username: ".$user->name);
   {
     GLOBAL $G_lang, $mlang_brisk;
     log_main("show_room: username: ".$user->name);
-    
+
     $ret = sprintf('gst.st = %d; ',  $user_step);
 
     $prefs = Client_prefs::from_user($user);
     $ret = sprintf('gst.st = %d; ',  $user_step);
 
     $prefs = Client_prefs::from_user($user);
@@ -1076,7 +1363,7 @@ class Brisk
       $ret .= "tra.hide(); ";
 
     $ret .= sprintf('stat = "%s";',  $user->stat);
       $ret .= "tra.hide(); ";
 
     $ret .= sprintf('stat = "%s";',  $user->stat);
-    
+
     $ret .= root_welcome($user);
     if ($user->flags & USER_FLAG_DBFAILED) {
         $ret .= "gst.st = ".($user->step+1)."; ";
     $ret .= root_welcome($user);
     if ($user->flags & USER_FLAG_DBFAILED) {
         $ret .= "gst.st = ".($user->step+1)."; ";
@@ -1089,12 +1376,11 @@ class Brisk
     for ($i = 0 ; $i < TABLES_N ; $i++) {
 
       $ret .= $this->table_content($user, $i);
     for ($i = 0 ; $i < TABLES_N ; $i++) {
 
       $ret .= $this->table_content($user, $i);
-      // $ret .= table_act_content(($user->subst == 'standup'), $this->table[$i]->player_n, $i, $user->table, 
-      //                          ($this->table[$i]->auth_only == FALSE ? TRUE : $user->flags & USER_FLAG_AUTH));
+
       $ret .=  $this->table[$i]->act_content($user);
       $ret .=  $this->table[$i]->act_content($user);
-      if ($this->table[$i]->wag_own != -1) 
+      if ($this->table[$i]->wag_own != -1)
         $ret .= sprintf('tra.add(%d, "%s: %s"); ', $i,  $this->user[$this->table[$i]->wag_own]->name, $this->table[$i]->wag_com);
         $ret .= sprintf('tra.add(%d, "%s: %s"); ', $i,  $this->user[$this->table[$i]->wag_own]->name, $this->table[$i]->wag_com);
-      else 
+      else
         $ret .= sprintf('tra.rem(%d); ', $i);
     }
     $ret .= $this->standup_content($user);
         $ret .= sprintf('tra.rem(%d); ', $i);
     }
     $ret .= $this->standup_content($user);
@@ -1102,7 +1388,7 @@ class Brisk
 
     return ($ret);
   }
 
     return ($ret);
   }
-  
+
 
   function room_wakeup($user)
   {
 
   function room_wakeup($user)
   {
@@ -1118,20 +1404,20 @@ class Brisk
       log_main("WAKEUP: from table [".$user->table."] nplayers_n: ".$this->table[$user->table]->player_n);
 
       for ($i = 0 ; $i < $table->player_n ; $i++) {
       log_main("WAKEUP: from table [".$user->table."] nplayers_n: ".$this->table[$user->table]->player_n);
 
       for ($i = 0 ; $i < $table->player_n ; $i++) {
-       $user_cur = $this->user[$table->player[$i]];
-       log_main("PREIMPOST: INLOOP name: ".$user_cur->name);
-
-       if ($user->idx_get() != $table->player[$i]) {
-         $user_cur->stat_set("room");
-         $user_cur->subst = "sitdown";
-         $user_cur->laccwr = $curtime;
-       }
-       else if ($user->sess != "") {
-         $user_cur->stat_set("room");
-         $user_cur->subst = "standup";
-         $user_cur->laccwr = $curtime;
-         $user_cur->table = -1;
-       }
+        $user_cur = $this->user[$table->player[$i]];
+        log_main("PREIMPOST: INLOOP name: ".$user_cur->name);
+
+        if ($user->idx_get() != $table->player[$i]) {
+          $user_cur->stat_set("room");
+          $user_cur->subst = "sitdown";
+          $user_cur->laccwr = $curtime;
+        }
+        else if ($user->sess != "") {
+          $user_cur->stat_set("room");
+          $user_cur->subst = "standup";
+          $user_cur->laccwr = $curtime;
+          $user_cur->table = -1;
+        }
       }
     }
     else {
       }
     }
     else {
@@ -1139,13 +1425,13 @@ class Brisk
       $user->subst = "standup";
       $user->laccwr = $curtime;
     }
       $user->subst = "standup";
       $user->laccwr = $curtime;
     }
-    
+
     $remove_wagon = FALSE;
     if($table->wag_own == $user->idx_get()) {
       $table->wag_reset($curtime);
       $remove_wagon = TRUE;
     }
     $remove_wagon = FALSE;
     if($table->wag_own == $user->idx_get()) {
       $table->wag_reset($curtime);
       $remove_wagon = TRUE;
     }
-    
+
 
     /* aggiorna l'array dei giocatori al tavolo. */
     $table->user_rem($this, $user);
 
     /* aggiorna l'array dei giocatori al tavolo. */
     $table->user_rem($this, $user);
@@ -1153,42 +1439,38 @@ class Brisk
     for ($i = 0 ; $i < MAX_PLAYERS ; $i++) {
       $user_cur = $this->user[$i];
       if ($user_cur->sess == '' || $user_cur->stat != 'room')
     for ($i = 0 ; $i < MAX_PLAYERS ; $i++) {
       $user_cur = $this->user[$i];
       if ($user_cur->sess == '' || $user_cur->stat != 'room')
-       continue;
-      
+        continue;
+
       // log_main("VALORI: name: ".$user_cur->name."from_table: ".$from_table."  tab: ".$user_cur->table." taix: ".$table_idx."  ucur: ".$user_cur."  us: ".$user);
 
       $ret = "gst.st = ".($user_cur->step+1)."; ".($remove_wagon ? sprintf("tra.rem(%d);",$table_idx) : "");
       if ($from_table && ($user_cur->table == $table_idx || $user->idx_get() == $i)) {
       // log_main("VALORI: name: ".$user_cur->name."from_table: ".$from_table."  tab: ".$user_cur->table." taix: ".$table_idx."  ucur: ".$user_cur."  us: ".$user);
 
       $ret = "gst.st = ".($user_cur->step+1)."; ".($remove_wagon ? sprintf("tra.rem(%d);",$table_idx) : "");
       if ($from_table && ($user_cur->table == $table_idx || $user->idx_get() == $i)) {
-       $ret .= 'gst.st_loc++; xstm.stop(); window.onunload = null; window.onbeforeunload = null; document.location.assign("index.php");|';
-       // $ret .= 'gst.st_loc++; document.location.assign("index.php");|';
-       log_main("DOCUMENT.index.php: from table");
+        $ret .= 'gst.st_loc++; xstm.stop(); window.onunload = null; window.onbeforeunload = null; document.location.assign("index.php");|';
+        // $ret .= 'gst.st_loc++; document.location.assign("index.php");|';
+        log_main("DOCUMENT.index.php: from table");
       }
       else if ($user_cur->stat == "room") {
       }
       else if ($user_cur->stat == "room") {
-       log_main("DOCUMENT.index.php: from table");
-
-       $ret .= $this->table_content($user_cur, $table_idx);
-       $ret .= $this->standup_content($user_cur);
-       
-       // $ret .= table_act_content(FALSE, 0, $table_idx, $user->table, FALSE);
-       $ret .= $table->act_content($user);
-
-       if ($user->idx_get() == $i) {
-         // set the new status 
-         $ret .=  'subst = "standup"; tra.show(); ';
-         // clean the action buttons in other tables
-         for ($e = 0 ; $e < TABLES_N ; $e++) {
-           if ($this->table[$e]->player_n < PLAYERS_N) {
-             // $ret .= table_act_content(TRUE, 0, $e, $user->table, 
-              //                           ($this->table[$e]->auth_only == FALSE ? TRUE : $user->flags & USER_FLAG_AUTH));
+        log_main("DOCUMENT.index.php: from table");
+
+        $ret .= $this->table_content($user_cur, $table_idx);
+        $ret .= $this->standup_content($user_cur);
+        
+        // $ret .= table_act_content(FALSE, 0, $table_idx, $user->table, FALSE);
+        $ret .= $table->act_content($user);
+
+        if ($user->idx_get() == $i) {
+          // set the new status
+          $ret .=  'subst = "standup"; tra.show(); ';
+          // clean the action buttons in other tables
+          for ($e = 0 ; $e < TABLES_N ; $e++) {
+            if ($this->table[$e]->player_n < PLAYERS_N) {
               $ret .= $this->table[$e]->act_content($user);
             }
               $ret .= $this->table[$e]->act_content($user);
             }
-         }
-       }
-       else {
-         // $ret .= table_act_content(($user_cur->subst == 'standup'), $table->player_n, $table_idx, $user_cur->table,
-          //                           ($table->auth_only == FALSE ? TRUE : $user_cur->flags & USER_FLAG_AUTH));
+          }
+        }
+        else {
           $ret .= $table->act_content($user_cur);
           $ret .= $table->act_content($user_cur);
-       }
+        }
       }
       log_wr("ROOM_WAKEUP: ".$ret);
       $user_cur->comm[$user_cur->step % COMM_N] = $ret;
       }
       log_wr("ROOM_WAKEUP: ".$ret);
       $user_cur->comm[$user_cur->step % COMM_N] = $ret;
@@ -1200,7 +1482,7 @@ class Brisk
   {
     $table_idx = $user->table;
     $table = $this->table[$table_idx];
   {
     $table_idx = $user->table;
     $table = $this->table[$table_idx];
-    
+
     log_main("JOIN_WAKEUP: begin function table:".$table_idx."  stat: ".$user->stat."  subst: ".$user->subst);
 
     $curtime = time();
     log_main("JOIN_WAKEUP: begin function table:".$table_idx."  stat: ".$user->stat."  subst: ".$user->subst);
 
     $curtime = time();
@@ -1209,32 +1491,32 @@ class Brisk
     $user_tab = array();
     $user_tab_n = 0;
     log_main("JOIN WAKEUP: from table [".$user->table."] nplayers_n: ".$this->table[$user->table]->player_n);
     $user_tab = array();
     $user_tab_n = 0;
     log_main("JOIN WAKEUP: from table [".$user->table."] nplayers_n: ".$this->table[$user->table]->player_n);
-    
+
     for ($i = 0 ; $i < $table->player_n ; $i++) {
       $user_cur = $this->user[$table->player[$i]];
       log_main("PREIMPOST INLOOP name: ".$user_cur->name);
       if ($user_cur->sess != "") {
     for ($i = 0 ; $i < $table->player_n ; $i++) {
       $user_cur = $this->user[$table->player[$i]];
       log_main("PREIMPOST INLOOP name: ".$user_cur->name);
       if ($user_cur->sess != "") {
-       if ($update_lacc == TRUE) {
-         $user_cur->laccwr = $curtime;
-       }
-       log_main("cur: ".$user_cur->name."  subst: ".$user_cur->subst);
-       if ($user_cur->subst == "shutdowned") {
-         $user_cur->stat_set("room");
-         $user_cur->subst = "sitdown";
-       }
-       else if ($user_cur->subst == "shutdowner") {
-         $user_cur->stat_set("room");
-         $user_cur->subst = "standup";
-         $user_cur->table = -1;
-         $user_wup[$user_wup_n++] = $user_cur;
-          
+        if ($update_lacc == TRUE) {
+          $user_cur->laccwr = $curtime;
+        }
+        log_main("cur: ".$user_cur->name."  subst: ".$user_cur->subst);
+        if ($user_cur->subst == "shutdowned") {
+          $user_cur->stat_set("room");
+          $user_cur->subst = "sitdown";
+        }
+        else if ($user_cur->subst == "shutdowner") {
+          $user_cur->stat_set("room");
+          $user_cur->subst = "standup";
+          $user_cur->table = -1;
+          $user_wup[$user_wup_n++] = $user_cur;
+
           $remove_wagon = FALSE;
           if($table->wag_own == $table->player[$i]) {
             $remove_wagon = TRUE;
             $table->wag_reset($curtime);
           }
           $remove_wagon = FALSE;
           if($table->wag_own == $table->player[$i]) {
             $remove_wagon = TRUE;
             $table->wag_reset($curtime);
           }
-       }
-       $user_tab[$user_tab_n++] = $table->player[$i];
+        }
+        $user_tab[$user_tab_n++] = $table->player[$i];
       }
     }
 
       }
     }
 
@@ -1247,8 +1529,8 @@ class Brisk
       log_main("START LOOP");
       $user_cur = $this->user[$i];
       if ($user_cur->sess == '' || $user_cur->stat != 'room') {
       log_main("START LOOP");
       $user_cur = $this->user[$i];
       if ($user_cur->sess == '' || $user_cur->stat != 'room') {
-       log_main("name: ".$user_cur->name."skip   subst: ".$user_cur->subst);
-       continue;
+        log_main("name: ".$user_cur->name."skip   subst: ".$user_cur->subst);
+        continue;
       }
 
       log_main("___");
       }
 
       log_main("___");
@@ -1256,45 +1538,42 @@ class Brisk
 
       $ret = "gst.st = ".($user_cur->step+1)."; ".($remove_wagon ? sprintf("tra.rem(%d);",$table_idx) : "");
       if ($user_cur->stat == "room") {
 
       $ret = "gst.st = ".($user_cur->step+1)."; ".($remove_wagon ? sprintf("tra.rem(%d);",$table_idx) : "");
       if ($user_cur->stat == "room") {
-       log_main("DOCUMENT.index.php from table");
+        log_main("DOCUMENT.index.php from table");
 
 
-       $ret .= $this->table_content($user_cur, $table_idx);
-       $ret .= $this->standup_content($user_cur);
-       
-       // $ret .= table_act_content(FALSE, 0, $table_idx, $user_cur->table,
-        //                           ($table->auth_only == FALSE ? TRUE : $user_cur->flags & USER_FLAG_AUTH));
+        $ret .= $this->table_content($user_cur, $table_idx);
+        $ret .= $this->standup_content($user_cur);
+        
         $ret .= $table->act_content($user_cur);
 
 
         $ret .= $table->act_content($user_cur);
 
 
-       for ($tab_idx = 0 ; $tab_idx < $user_tab_n  ; $tab_idx++)
-            if ($user_tab[$tab_idx] == $i) 
+        for ($tab_idx = 0 ; $tab_idx < $user_tab_n  ; $tab_idx++)
+            if ($user_tab[$tab_idx] == $i)
                 break;
 
                 break;
 
-       // for users that wakeup the room will be reconstructed by index_rd.php
-       if ($tab_idx < $user_tab_n) {
-         log_main("PRE show_room username: ".$user_cur->name."  STEP: ".$user_cur->step);
+        // for users that wakeup the room will be reconstructed by index_rd.php
+        if ($tab_idx < $user_tab_n) {
+          log_main("PRE show_room username: ".$user_cur->name."  STEP: ".$user_cur->step);
 
 //        ARRAY_POP DISABLED
 
 //        ARRAY_POP DISABLED
-//       if ($trans_delta == 0)
-//         while (array_pop($user_cur->comm) != NULL);
-
-         $user_cur->trans_step = $user_cur->step + 1 + $trans_delta;
-         $user_cur->comm[$user_cur->step % COMM_N] = "";
-         $user_cur->step_inc();
-         $user_cur->comm[$user_cur->step % COMM_N] = $this->show_room(($user_cur->step + 1), $user_cur);
-         $user_cur->step_inc();
-         log_main("POST show_room username: ".$user_cur->name."  STEP: ".$user_cur->step);
-
-         continue;
-       }
-       log_main("JOIN_WAKEUP wup_idx ".$wup_idx."  wup_n ".$user_wup_n);
-
-       log_main("JOIN_WAKEUP more");
-       // $ret .= table_act_content(($user_cur->subst == 'standup'), $table->player_n, $table_idx, $user_cur->table,
-        //                           ($table->auth_only == FALSE ? TRUE : $user_cur->flags & USER_FLAG_AUTH));
+//           if ($trans_delta == 0)
+//             while (array_pop($user_cur->comm) != NULL);
+
+          $user_cur->trans_step = $user_cur->step + 1 + $trans_delta;
+          $user_cur->comm[$user_cur->step % COMM_N] = "";
+          $user_cur->step_inc();
+          $user_cur->comm[$user_cur->step % COMM_N] = $this->show_room(($user_cur->step + 1), $user_cur);
+          $user_cur->step_inc();
+          log_main("POST show_room username: ".$user_cur->name."  STEP: ".$user_cur->step);
+
+          continue;
+        }
+        log_main("JOIN_WAKEUP wup_idx ".$wup_idx."  wup_n ".$user_wup_n);
+
+        log_main("JOIN_WAKEUP more");
+
         $ret .= $table->act_content($user_cur);
 
         $ret .= $table->act_content($user_cur);
 
-       log_main("JOIN_WAKEUP end more");
+        log_main("JOIN_WAKEUP end more");
       }
       log_wr("ROOM_JOIN_WAKEUP: ".$ret);
       $user_cur->comm[$user_cur->step % COMM_N] = $ret;
       }
       log_wr("ROOM_JOIN_WAKEUP: ".$ret);
       $user_cur->comm[$user_cur->step % COMM_N] = $ret;
@@ -1331,26 +1610,22 @@ class Brisk
           $user_tos_vers = $user_item->tos_vers_get();
 
           if (versions_cmp($user_tos_vers, "1.2") < 0) {
           $user_tos_vers = $user_item->tos_vers_get();
 
           if (versions_cmp($user_tos_vers, "1.2") < 0) {
-              $mesg = sprintf('chatt_sub("%s", [2, "%s"],"%s");',
-                              $dt, NICKSERV, sprintf($mlang_brisk['tos_old'][$G_lang], xcape($user_login)));
+              $mesg = nickserv_msg($dt, sprintf($mlang_brisk['tos_old'][$G_lang], xcape($user_login)));
           }
           else if ($guar_login == "") {
           }
           else if ($guar_login == "") {
-              $mesg = sprintf('chatt_sub("%s", [2, "%s"],"%s");',
-                              $dt, NICKSERV, sprintf($mlang_brisk['gua_nfd'][$G_lang], xcape($user_login)));
+              $mesg = nickserv_msg($dt, sprintf($mlang_brisk['gua_nfd'][$G_lang], xcape($user_login)));
           }
           else if ($guar_login == $user_login) {
           }
           else if ($guar_login == $user_login) {
-              $mesg = sprintf('chatt_sub("%s", [2, "%s"],"%s");',
-                              $dt, NICKSERV, sprintf($mlang_brisk['gua_self'][$G_lang], xcape($user_login)));
+              $mesg = nickserv_msg($dt, sprintf($mlang_brisk['gua_self'][$G_lang], xcape($user_login)));
           }
           else {
           }
           else {
-              $mesg = sprintf('chatt_sub("%s", [2, "%s"],"%s");',
-                              $dt, NICKSERV, sprintf($mlang_brisk['gua_info'][$G_lang],
-                                                     xcape($user_login), xcape($guar_login)));
+              $mesg = nickserv_msg($dt, sprintf($mlang_brisk['gua_info'][$G_lang],
+                                                xcape($user_login), xcape($guar_login)));
           }
       } while (0);
 
       if ($ret > 0) {
           }
       } while (0);
 
       if ($ret > 0) {
-          $mesg = sprintf('chatt_sub("%s", [2, "%s"],"%s");', $dt, NICKSERV, sprintf($mlang_brisk['gua_err'][$G_lang], $ret));
+          $mesg = nickserv_msg($dt, sprintf($mlang_brisk['gua_err'][$G_lang], $ret));
       }
 
       $user->comm[$user->step % COMM_N] = "gst.st = ".($user->step+1)."; ".$mesg;
       }
 
       $user->comm[$user->step % COMM_N] = "gst.st = ".($user->step+1)."; ".$mesg;
@@ -1363,26 +1638,26 @@ class Brisk
   {
     $this->room_sitdown($user, -1);
   }
   {
     $this->room_sitdown($user, -1);
   }
-  
+
   function table_update($user)
   {
     log_main("table_update: pre - USER: ".$user->name);
 
     $table_idx = $user->table;
 
   function table_update($user)
   {
     log_main("table_update: pre - USER: ".$user->name);
 
     $table_idx = $user->table;
 
-    if ($table_idx > -1) 
+    if ($table_idx > -1)
       $table = $this->table[$table_idx];
       $table = $this->table[$table_idx];
-    
+
     for ($i = 0 ; $i < MAX_PLAYERS ; $i++) {
       $ret = "";
       $user_cur = $this->user[$i];
       if ($user_cur->sess == '' || $user_cur->stat != 'room')
       continue;
     for ($i = 0 ; $i < MAX_PLAYERS ; $i++) {
       $ret = "";
       $user_cur = $this->user[$i];
       if ($user_cur->sess == '' || $user_cur->stat != 'room')
       continue;
-      
+
       $ret = "gst.st = ".($user_cur->step+1)."; ";
       if ($table_idx > -1)
       $ret = "gst.st = ".($user_cur->step+1)."; ";
       if ($table_idx > -1)
-       $ret .= $this->table_content($user_cur, $table_idx);
-      
+        $ret .= $this->table_content($user_cur, $table_idx);
+
       if ($user->idx_get() == $i) {
           $ret .= $user->myname_innerHTML();
       }
       if ($user->idx_get() == $i) {
           $ret .= $user->myname_innerHTML();
       }
@@ -1396,35 +1671,35 @@ class Brisk
   function room_sitdown($user, $table_idx)
   {
       log_main("room_sitdown ".($user == FALSE ? "USER: FALSE" : "USER: ".$user->name));
   function room_sitdown($user, $table_idx)
   {
       log_main("room_sitdown ".($user == FALSE ? "USER: FALSE" : "USER: ".$user->name));
-      
+
       $train_app = "";
       $train_app = "";
-      
-      if ($table_idx > -1 && $table_idx < TABLES_N) { 
+
+      if ($table_idx > -1 && $table_idx < TABLES_N) {
           $table = $this->table[$table_idx];
           $table = $this->table[$table_idx];
-          
-          // wagon shutdown 
-          if ($table->wag_own != -1 && $table->player_n == PLAYERS_N) {        
+
+          // wagon shutdown
+          if ($table->wag_own != -1 && $table->player_n == PLAYERS_N) {
               for ($i = 0 ; $i < TABLES_N ; $i++) {
                   if ($table->wag_own == $table->player[$i]) {
               for ($i = 0 ; $i < TABLES_N ; $i++) {
                   if ($table->wag_own == $table->player[$i]) {
-                      $train_app = sprintf("tra.rem(%d); ", $table_idx); 
+                      $train_app = sprintf("tra.rem(%d); ", $table_idx);
                       $table->wag_reset(time());
                       break;
                   }
               }
           }
       }
                       $table->wag_reset(time());
                       break;
                   }
               }
           }
       }
-      
+
       for ($i = 0 ; $i < MAX_PLAYERS ; $i++) {
           $ret = "";
           $user_cur = $this->user[$i];
           if ($user_cur->sess == '' || $user_cur->stat != 'room')
               continue;
       for ($i = 0 ; $i < MAX_PLAYERS ; $i++) {
           $ret = "";
           $user_cur = $this->user[$i];
           if ($user_cur->sess == '' || $user_cur->stat != 'room')
               continue;
-          
+
           $ret = "gst.st = ".($user_cur->step+1)."; ".$train_app;
           if ($table_idx > -1)
               $ret .= $this->table_content($user_cur, $table_idx);
           $ret .= $this->standup_content($user_cur);
           $ret = "gst.st = ".($user_cur->step+1)."; ".$train_app;
           if ($table_idx > -1)
               $ret .= $this->table_content($user_cur, $table_idx);
           $ret .= $this->standup_content($user_cur);
-          
+
           if ($user->idx_get() == $i) {
               $ret .=  'subst = "sitdown"; tra.hide(); ';
               // clean the action buttons in other tables
           if ($user->idx_get() == $i) {
               $ret .=  'subst = "sitdown"; tra.hide(); ';
               // clean the action buttons in other tables
@@ -1434,8 +1709,7 @@ class Brisk
           }
           else if ($table_idx > -1) {
               if ($table->player_n == PLAYERS_N) {
           }
           else if ($table_idx > -1) {
               if ($table->player_n == PLAYERS_N) {
-                  // $ret .= table_act_content(($user_cur->subst == 'standup'), PLAYERS_N, $table_idx, $user_cur->table,
-                  ///                      ($table->auth_only == FALSE ? TRUE : $user_cur->flags & USER_FLAG_AUTH));
+
                   $ret .= $table->act_content($user_cur);
               }
           }
                   $ret .= $table->act_content($user_cur);
               }
           }
@@ -1448,7 +1722,7 @@ class Brisk
   {
     GLOBAL $G_base, $G_alarm_passwd, $mlang_brisk, $G_lang;
     $only_you = FALSE;
   {
     GLOBAL $G_base, $G_alarm_passwd, $mlang_brisk, $G_lang;
     $only_you = FALSE;
-    
+
     // common settings
     $msg = mb_substr($mesg, 6, 128, "UTF-8");
     $curtime = time();
     // common settings
     $msg = mb_substr($mesg, 6, 128, "UTF-8");
     $curtime = time();
@@ -1467,7 +1741,7 @@ class Brisk
     /* for old isolation management $is_ticker   = FALSE; */
     $update_room = FALSE;
 
     /* for old isolation management $is_ticker   = FALSE; */
     $update_room = FALSE;
 
-    if (strcmp($msg,  "/tav") == 0 || 
+    if (strcmp($msg,  "/tav") == 0 ||
         strncmp($msg, "/tav ", 5) == 0) {
       do {
         if ($user->stat != 'room' || $user->subst != 'sitdown') {
         strncmp($msg, "/tav ", 5) == 0) {
       do {
         if ($user->stat != 'room' || $user->subst != 'sitdown') {
@@ -1479,9 +1753,9 @@ class Brisk
         }
 
         $table = $this->table[$user->table];
         }
 
         $table = $this->table[$user->table];
-        
+
         if ($table->wag_own != -1) {
         if ($table->wag_own != -1) {
-          // MLANG <br>Il messaggio di segnalazione del tavolo &egrave; gi&agrave; attivato.<br><br> 
+          // MLANG <br>Il messaggio di segnalazione del tavolo &egrave; gi&agrave; attivato.<br><br>
           $msg = $mlang_brisk['tickjust'][$G_lang];
           $to_user = show_notify($msg, 0, "chiudi", 400, 100);
 
           $msg = $mlang_brisk['tickjust'][$G_lang];
           $to_user = show_notify($msg, 0, "chiudi", 400, 100);
 
@@ -1497,9 +1771,9 @@ class Brisk
 
           break;
         }
 
           break;
         }
-        
+
         $msg = substr($msg, 5);
         $msg = substr($msg, 5);
-        
+
         $table->wag_set($user->idx_get(), $msg);
         $to_user = sprintf('tra.add(%d, "%s");', $user->table, xcape(sprintf("%s: %s", $user->name, $msg)));
         $to_room = $to_user;
         $table->wag_set($user->idx_get(), $msg);
         $to_user = sprintf('tra.add(%d, "%s");', $user->table, xcape(sprintf("%s: %s", $user->name, $msg)));
         $to_room = $to_user;
@@ -1527,10 +1801,9 @@ class Brisk
         }
 
         /* MLANG: "Alarm <b>%s</b> inviato a <b>%s</b>." */
         }
 
         /* MLANG: "Alarm <b>%s</b> inviato a <b>%s</b>." */
-        $prestr = sprintf($mlang_brisk['alarret'][$G_lang], xcape(substr($msg, strlen($alarm_check))), 
+        $prestr = sprintf($mlang_brisk['alarret'][$G_lang], xcape(substr($msg, strlen($alarm_check))),
                            ($target == "" ? $mlang_brisk['tit_all'][$G_lang] : xcape($target)) );
                            ($target == "" ? $mlang_brisk['tit_all'][$G_lang] : xcape($target)) );
-        $to_user = sprintf('chatt_sub("%s", [2, "%s"],%s);', 
-                           $dt, NICKSERV, $prestr);
+        $to_user = nickserv_msg($dt, $prestr);
 
         $msg = sprintf("<br><b>%s<br><br>%s</b><br><br>",
                        $dt.NICKSERV, xcape(substr($msg, strlen($alarm_check))));
 
         $msg = sprintf("<br><b>%s<br><br>%s</b><br><br>",
                        $dt.NICKSERV, xcape(substr($msg, strlen($alarm_check))));
@@ -1545,8 +1818,8 @@ class Brisk
         $flags_old = 0;
         if ($user->stat == 'room' && $user->subst == 'sitdown' &&
             $user->table >= TABLES_AUTH_N) {
         $flags_old = 0;
         if ($user->stat == 'room' && $user->subst == 'sitdown' &&
             $user->table >= TABLES_AUTH_N) {
-          $to_user = sprintf('chatt_sub("%s", [2, "%s"],"%s");', $dt, NICKSERV, $mlang_brisk['listmust'][$G_lang]);
-          
+          $to_user = nickserv_msg($dt, $mlang_brisk['listmust'][$G_lang]);
+
         }
         else {
           $user->flags &= ~USER_FLAG_MAP_AUTH;
         }
         else {
           $user->flags &= ~USER_FLAG_MAP_AUTH;
@@ -1564,30 +1837,30 @@ class Brisk
         $flags_old = $user->flags;
         $user->flags &= ~USER_FLAG_MAP_AUTH;
         $to_user = 'list_set(\'all\', true, \'\'); ';
         $flags_old = $user->flags;
         $user->flags &= ~USER_FLAG_MAP_AUTH;
         $to_user = 'list_set(\'all\', true, \'\'); ';
-        
+
       }
       // if from isolation redraw standup area
       if (($flags_old ^ $user->flags) & USER_FLAG_ISOLAUTH) {
         $to_user .= 'standup_data_old = null; '.$this->standup_content($user);
       }
       // if from isolation redraw standup area
       if (($flags_old ^ $user->flags) & USER_FLAG_ISOLAUTH) {
         $to_user .= 'standup_data_old = null; '.$this->standup_content($user);
-        
+
       }
     }
     else if (strcmp($msg, "/authreq") == 0) {
       }
     }
     else if (strcmp($msg, "/authreq") == 0) {
-      if ($user->flags & USER_FLAG_AUTH) {
-        $to_user = sprintf('authbox(300,200);');
-      }
-      else {
-        /* MLANG: "<b>Per autenticare qualcuno devi a tua volta essere autenticato.</b>", "Il nickname deve contenere almeno una lettera dell\'alfabeto o una cifra.", "Nickname <b>%s</b> gi&agrave; in uso." */
-        $to_user = sprintf('chatt_sub("%s", [2, "%s"],"%s");', $dt, NICKSERV, $mlang_brisk['authmust'][$G_lang]);
-      }
+        if ($user->is_cert()) {
+            $to_user = sprintf('authbox(300,200);');
+        }
+        else {
+            /* MLANG: "<b>Per autenticare qualcuno devi a tua volta essere autenticato.</b>", "Il nickname deve contenere almeno una lettera dell\'alfabeto o una cifra.", "Nickname <b>%s</b> gi&agrave; in uso." */
+            $to_user = nickserv_msg($dt, $mlang_brisk['authmust'][$G_lang]);
+        }
     }
     else if (strncmp($msg, "/mesgtoadm", 8) == 0) {
     }
     else if (strncmp($msg, "/mesgtoadm", 8) == 0) {
-      if ($user->flags & USER_FLAG_AUTH) {
+        if ($user->is_auth()) {
         $to_user = sprintf('mesgtoadmbox(500,300);');
       }
       else {
         /* MLANG: "<b>Per inviare un messaggio devi essere autenticato.</b>" */
         $to_user = sprintf('mesgtoadmbox(500,300);');
       }
       else {
         /* MLANG: "<b>Per inviare un messaggio devi essere autenticato.</b>" */
-        $to_user = sprintf('chatt_sub("%s", [2, "%s"],"%s");', $dt, NICKSERV, $mlang_brisk['mesgmust'][$G_lang]);
+        $to_user = nickserv_msg($dt, $mlang_brisk['mesgmust'][$G_lang]);
       }
     }
     else if (strncmp($msg, "/nick ", 6) == 0) {
       }
     }
     else if (strncmp($msg, "/nick ", 6) == 0) {
@@ -1595,7 +1868,7 @@ class Brisk
 
       do {
         if (($name_new = validate_name(substr($msg, 6))) == FALSE) {
 
       do {
         if (($name_new = validate_name(substr($msg, 6))) == FALSE) {
-          $to_user = sprintf('chatt_sub("%s", [2,"%s"],"%s");', $dt, NICKSERV, $mlang_brisk['nickmust'][$G_lang]);
+          $to_user = nickserv_msg($dt, $mlang_brisk['nickmust'][$G_lang]);
           break;
         }
 
           break;
         }
 
@@ -1610,16 +1883,16 @@ class Brisk
           }
         if ($i <  MAX_PLAYERS) {
           $prestr = sprintf($mlang_brisk['nickdupl'][$G_lang], xcape($name_new));
           }
         if ($i <  MAX_PLAYERS) {
           $prestr = sprintf($mlang_brisk['nickdupl'][$G_lang], xcape($name_new));
-          $to_user = sprintf('chatt_sub("%s", [2, "%s"],"%s");', $dt, NICKSERV, $prestr);
+          $to_user = nickserv_msg($dt, $prestr);
           break;
         }
           break;
         }
-        
+
         /* MLANG: "<b>Non puoi cambiare nick a un tavolo per soli autenticati.</b>", "Il nickname <b>\'%s\'</b> &egrave; gi&agrave; registrato, <b>se il suo proprietario si autentificher&agrave; verrai rinominato d\'ufficio come ghost<i>N</i>.</b>" */
         /* MLANG: "<b>Non puoi cambiare nick a un tavolo per soli autenticati.</b>", "Il nickname <b>\'%s\'</b> &egrave; gi&agrave; registrato, <b>se il suo proprietario si autentificher&agrave; verrai rinominato d\'ufficio come ghost<i>N</i>.</b>" */
-        if ($user->flags & USER_FLAG_AUTH) {
+        if ($user->is_auth()) {
           if (strcasecmp($user->name,$name_new) != 0) {
              if (( ($user->flags & USER_FLAG_MAP_AUTH) != USER_FLAG_ISOLAUTH) &&
           if (strcasecmp($user->name,$name_new) != 0) {
              if (( ($user->flags & USER_FLAG_MAP_AUTH) != USER_FLAG_ISOLAUTH) &&
-                ($user->subst == 'standup' || 
-                 ($user->subst != 'standup' && $this->table[$user->table]->auth_only == FALSE)
+                ($user->subst == 'standup' ||
+                 ($user->subst != 'standup' && $this->table[$user->table]->auth_type == TABLE_AUTH_TY_PUBL)
                  )
                 ) {
               $user->flags &= ~(USER_FLAG_AUTH | USER_FLAG_TY_ALL); // Remove auth if name changed
                  )
                 ) {
               $user->flags &= ~(USER_FLAG_AUTH | USER_FLAG_TY_ALL); // Remove auth if name changed
@@ -1628,20 +1901,20 @@ class Brisk
               }
             }
             else {
               }
             }
             else {
-              $to_user = sprintf('chatt_sub("%s", [2, "%s"],"%s");', $dt, NICKSERV, $mlang_brisk['authchan'][$G_lang]);
+              $to_user = nickserv_msg($dt, $mlang_brisk['authchan'][$G_lang]);
               break;
             }
           }
         }
               break;
             }
           }
         }
-       $user->name = $name_new; // OK - nick changed
+        $user->name = $name_new; // OK - nick changed
         /* se nome gia' in uso, segnala cosa potrebbe capitare */
         /* se nome gia' in uso, segnala cosa potrebbe capitare */
-        if (($user->flags & USER_FLAG_AUTH) == 0) {
+        if ( ! $user->is_auth() ) {
             if (($bdb = BriskDB::create()) != FALSE) {
                 $bdb->users_load();
                 /* MLANG: "Il nickname <b>\'%s\'</b> &egrave; gi&agrave; registrato, <b>se il suo proprietario si autentificher&agrave; verrai rinominato d\'ufficio come ghost<i>N</i>.</b>" */
                 if ($bdb->login_exists($name_new)) {
                     $prestr = sprintf($mlang_brisk['nickjust'][$G_lang], xcape($name_new));
             if (($bdb = BriskDB::create()) != FALSE) {
                 $bdb->users_load();
                 /* MLANG: "Il nickname <b>\'%s\'</b> &egrave; gi&agrave; registrato, <b>se il suo proprietario si autentificher&agrave; verrai rinominato d\'ufficio come ghost<i>N</i>.</b>" */
                 if ($bdb->login_exists($name_new)) {
                     $prestr = sprintf($mlang_brisk['nickjust'][$G_lang], xcape($name_new));
-                    $to_user .= sprintf('chatt_sub("%s", [2, "%s"],"%s");', $dt, NICKSERV, $prestr);
+                    $to_user .= nickserv_msg($dt, $prestr);
                 }
             }
         }
                 }
             }
         }
@@ -1661,7 +1934,7 @@ class Brisk
 
       do {
         $st_str = substr($msg, 4);
 
       do {
         $st_str = substr($msg, 4);
-        
+
         if (strcasecmp($st_str, "normale") == 0) {
           $st = USER_FLAG_S_NORM;
         }
         if (strcasecmp($st_str, "normale") == 0) {
           $st = USER_FLAG_S_NORM;
         }
@@ -1712,7 +1985,7 @@ class Brisk
         }
         else {
           /* MLANG: "Questo stato non esiste." */
         }
         else {
           /* MLANG: "Questo stato non esiste." */
-          $to_user = sprintf('chatt_sub("%s", [2,"%s"],"%s");', $dt, NICKSERV, $mlang_brisk['statunkn'][$G_lang]);
+          $to_user = nickserv_msg($dt, $mlang_brisk['statunkn'][$G_lang]);
           break;
         }
 
           break;
         }
 
@@ -1728,9 +2001,9 @@ class Brisk
       $is_normchat = TRUE;
       if (CHAT_ENABLED && $curtime < ($user->chat_ban + $user->chat_dlt)) {
         $only_you = TRUE;
       $is_normchat = TRUE;
       if (CHAT_ENABLED && $curtime < ($user->chat_ban + $user->chat_dlt)) {
         $only_you = TRUE;
-        $user->chat_dlt = $user->chat_dlt * 2; 
+        $user->chat_dlt = $user->chat_dlt * 2;
         if ($user->chat_dlt > 120)
         if ($user->chat_dlt > 120)
-          $user->chat_dlt = 120; 
+          $user->chat_dlt = 120;
       }
       else if ($user->chat_lst == $msg)
         $only_you = TRUE;
       }
       else if ($user->chat_lst == $msg)
         $only_you = TRUE;
@@ -1745,18 +2018,18 @@ class Brisk
       }
 
       if ($only_you) {
       }
 
       if ($only_you) {
-        $to_user = sprintf('chatt_sub("%s", [%d, "%s"],"%s");', $dt, $user->flags, xcape($user->name), xcape("== chat ban =="));
+        $to_user = sprintf('chatt_sub("%s",[%d,"%s"],"%s");', $dt, $user->flags, xcape($user->name), xcape("== chat ban =="));
       }
       else {
       }
       else {
-        $to_user = sprintf('chatt_sub("%s", [%d, "%s"],"%s");', $dt, $user->flags, xcape($user->name), xcape($msg));
-       // temporary silentiation for troll (will became array check)
-       // if (strcasecmp($user->name,'JackRokka') != 0 && $user->sess != '47ea653f602e8')
+        $to_user = sprintf('chatt_sub("%s",[%d,"%s"],"%s");', $dt, $user->flags, xcape($user->name), xcape($msg));
+        // temporary silentiation for troll (will became array check)
+        // if (strcasecmp($user->name,'JackRokka') != 0 && $user->sess != '47ea653f602e8')
         $to_room = $to_user;
       }
 
       log_legal($curtime, $user->ip, $user,
         $to_room = $to_user;
       }
 
       log_legal($curtime, $user->ip, $user,
-               ($user->stat == 'room' ? 'room' : 'table '.$user->table),$msg);
-      
+                ($user->stat == 'room' ? 'room' : 'table '.$user->table),$msg);
+
       $user->chat_lst = "$msg";
       $user->chattime[$user->chat_cur % CHAT_N] = $curtime;
       $user->chat_cur++;
       $user->chat_lst = "$msg";
       $user->chattime[$user->chat_cur % CHAT_N] = $curtime;
       $user->chat_cur++;
@@ -1784,13 +2057,13 @@ class Brisk
           continue;
         if ($user_cur->sess == '' || $user_cur->stat == 'table' || $user->idx_get() == $i)
           continue;
           continue;
         if ($user_cur->sess == '' || $user_cur->stat == 'table' || $user->idx_get() == $i)
           continue;
-        
+
         if ($is_normchat == TRUE) {
           // use MAP_AUTH to check if auth or isolation
           if ($user_cur->flags & USER_FLAG_MAP_AUTH) {
         if ($is_normchat == TRUE) {
           // use MAP_AUTH to check if auth or isolation
           if ($user_cur->flags & USER_FLAG_MAP_AUTH) {
-            if (($user->flags & USER_FLAG_AUTH) == 0) {
-              continue;
-            }
+              if ( ! $user->is_auth() ) {
+                  continue;
+              }
           }
         }
         /*
           }
         }
         /*
@@ -1802,11 +2075,11 @@ class Brisk
         }
         */
         $user_cur->comm[$user_cur->step % COMM_N] =  "gst.st = ".($user_cur->step+1)."; ";
         }
         */
         $user_cur->comm[$user_cur->step % COMM_N] =  "gst.st = ".($user_cur->step+1)."; ";
-        $user_cur->comm[$user_cur->step % COMM_N] .= $to_room; 
+        $user_cur->comm[$user_cur->step % COMM_N] .= $to_room;
         $user_cur->step_inc();
       }
     }
         $user_cur->step_inc();
       }
     }
-    
+
     if ($to_tabl) {
         // FIXME BRISK4: include for each kind of table
         require_once("${G_base}briskin5/Obj/briskin5.phh");
     if ($to_tabl) {
         // FIXME BRISK4: include for each kind of table
         require_once("${G_base}briskin5/Obj/briskin5.phh");
@@ -1819,7 +2092,7 @@ class Brisk
                 for ($i = 0 ; $i < $bin5_table->player_n ; $i++) {
                     // stat must be "table" by definition
                     $bin5_user = $bin5->user[$i];
                 for ($i = 0 ; $i < $bin5_table->player_n ; $i++) {
                     // stat must be "table" by definition
                     $bin5_user = $bin5->user[$i];
-              
+
                     if ($target != "" && $bin5_user->name != $target)
                         continue;
                     log_main("writa: ".$user_mesg);
                     if ($target != "" && $bin5_user->name != $target)
                         continue;
                     log_main("writa: ".$user_mesg);
@@ -1851,15 +2124,15 @@ class Brisk
 
     if (validate_sess($sess)) {
       for ($i = 0 ; $i < MAX_PLAYERS ; $i++) {
 
     if (validate_sess($sess)) {
       for ($i = 0 ; $i < MAX_PLAYERS ; $i++) {
-       if (strcmp($sess, $this->user[$i]->sess) == 0) {
-         // find it
-         $idx = $i;
-         $ret = $this->user[$i];
-         return ($ret);
-       }
+        if (strcmp($sess, $this->user[$i]->sess) == 0) {
+          // find it
+          $idx = $i;
+          $ret = $this->user[$i];
+          return ($ret);
+        }
       }
       log_main(sprintf("get_user: Wrong sess from page [%s]",$PHP_SELF));
       }
       log_main(sprintf("get_user: Wrong sess from page [%s]",$PHP_SELF));
-      // for ($i = 0 ; $i < MAX_PLAYERS ; $i++) 
+      // for ($i = 0 ; $i < MAX_PLAYERS ; $i++)
       // log_main(sprintf("get_user: Wrong sess compared with [%s]",$this->user[$i]->sess));
     }
     else {
       // log_main(sprintf("get_user: Wrong sess compared with [%s]",$this->user[$i]->sess));
     }
     else {
@@ -1902,7 +2175,7 @@ class Brisk
     }
 
     log_auth("XXX", sprintf("ARRIVA: [%s] pass:[%s]", $sess, ($pass == FALSE ? "FALSE" : $pass)));
     }
 
     log_auth("XXX", sprintf("ARRIVA: [%s] pass:[%s]", $sess, ($pass == FALSE ? "FALSE" : $pass)));
-    if (validate_sess($sess) == FALSE) 
+    if (validate_sess($sess) == FALSE)
       $sess = "";
 
     /* if pass != FALSE verify the login with pass */
       $sess = "";
 
     /* if pass != FALSE verify the login with pass */
@@ -1914,7 +2187,7 @@ class Brisk
             log_auth("XXX", "auth2");
             $authenticate = $bdb->login_verify($name_new, $pass, $code);
             log_auth("XXX", "authenticate: ".($authenticate != FALSE ? "TRUE" : "FALSE"));
             log_auth("XXX", "auth2");
             $authenticate = $bdb->login_verify($name_new, $pass, $code);
             log_auth("XXX", "authenticate: ".($authenticate != FALSE ? "TRUE" : "FALSE"));
-            
+
             if ($authenticate != FALSE) {
                 $user_type = $authenticate->type_get();
             }
             if ($authenticate != FALSE) {
                 $user_type = $authenticate->type_get();
             }
@@ -1934,17 +2207,17 @@ class Brisk
     for ($i = 0 ; $i < MAX_PLAYERS ; $i++) {
       /* free user ? */
       if (strcmp($sess, $this->user[$i]->sess) == 0) {
     for ($i = 0 ; $i < MAX_PLAYERS ; $i++) {
       /* free user ? */
       if (strcmp($sess, $this->user[$i]->sess) == 0) {
-       if ($idx == -1)
-         $idx = $i;
+        if ($idx == -1)
+          $idx = $i;
       }
       if ($idfree == -1 && strcmp($this->user[$i]->sess, "") == 0) {
       }
       if ($idfree == -1 && strcmp($this->user[$i]->sess, "") == 0) {
-       $idfree = $i;
+        $idfree = $i;
         continue; // NOTE: CHECK IT !!
       }
       if (strcasecmp($this->user[$i]->name, $name_new) == 0) {
           if ($authenticate != FALSE) {
               $ghost = $i;
         continue; // NOTE: CHECK IT !!
       }
       if (strcasecmp($this->user[$i]->name, $name_new) == 0) {
           if ($authenticate != FALSE) {
               $ghost = $i;
-              $ghost_auth = ($this->user[$i]->flags & USER_FLAG_AUTH);
+              $ghost_auth = $this->user[$i]->is_auth();
           }
           else {
               $idx = $i;
           }
           else {
               $idx = $i;
@@ -1967,13 +2240,13 @@ class Brisk
       $ghost_user->comm[$ghost_user->step % COMM_N] = "";
       $ghost_user->step_inc();
       if ($sess == "") {
       $ghost_user->comm[$ghost_user->step % COMM_N] = "";
       $ghost_user->step_inc();
       if ($sess == "") {
-        $sess = uniqid(""); 
+        $sess = uniqid("");
         $ghost_user->sess = $sess;
       }
       else {
         $ghost_user->sess = $sess;
       }
         $ghost_user->sess = $sess;
       }
       else {
         $ghost_user->sess = $sess;
       }
-      
+
       // If user at the table we need to update the table data too
       $table_idx = $ghost_user->table;
       if ($ghost_user->stat == "table" && $this->table[$table_idx]->player_n == PLAYERS_N) {
       // If user at the table we need to update the table data too
       $table_idx = $ghost_user->table;
       if ($ghost_user->stat == "table" && $this->table[$table_idx]->player_n == PLAYERS_N) {
@@ -1990,6 +2263,9 @@ class Brisk
       }
 
       $idx = $ghost;
       }
 
       $idx = $ghost;
+      if (defined('CURL_DE_SAC_VERS')) {
+          brisk_cds_execute($this, $real_idx, $sess, $ip, $authenticate);
+      }
       return ($this->user[$ghost]);
     }
     else if ($idx != -1 && $i == MAX_PLAYERS) {
       return ($this->user[$ghost]);
     }
     else if ($idx != -1 && $i == MAX_PLAYERS) {
@@ -1997,10 +2273,10 @@ class Brisk
       $curtime = time();
       if ($sess == "") {
         $sess = uniqid("");
       $curtime = time();
       if ($sess == "") {
         $sess = uniqid("");
-       $this->user[$idx]->sess = $sess;
+        $this->user[$idx]->sess = $sess;
       }
       else {
       }
       else {
-       $this->user[$idx]->sess = $sess;
+        $this->user[$idx]->sess = $sess;
       }
       $this->user[$idx]->name = $name_new; // OK - add new user
       $this->user[$idx]->stat_set("room");
       }
       $this->user[$idx]->name = $name_new; // OK - add new user
       $this->user[$idx]->stat_set("room");
@@ -2013,12 +2289,11 @@ class Brisk
       $this->user[$idx]->ip = $ip;
 
       $this->user[$idx]->rec = $authenticate;
       $this->user[$idx]->ip = $ip;
 
       $this->user[$idx]->rec = $authenticate;
-      fprintf(STDERR, "MOP: [%s]\n", $authenticate->supp_comp);
       $this->user[$idx]->flags = $user_type;
       $this->user[$idx]->flags |= ($authenticate != FALSE ? USER_FLAG_AUTH : 0x00);
       $this->user[$idx]->flags |= ( ($pass != FALSE && $bdb == FALSE) ? USER_FLAG_DBFAILED : 0x00);
       log_auth("XXX", sprintf("FLAGS: [%x]", $this->user[$idx]->flags));
       $this->user[$idx]->flags = $user_type;
       $this->user[$idx]->flags |= ($authenticate != FALSE ? USER_FLAG_AUTH : 0x00);
       $this->user[$idx]->flags |= ( ($pass != FALSE && $bdb == FALSE) ? USER_FLAG_DBFAILED : 0x00);
       log_auth("XXX", sprintf("FLAGS: [%x]", $this->user[$idx]->flags));
-      
+
       if ($authenticate != FALSE) {
           $this->user[$idx]->code = $authenticate->code_get();
           if (0 == 1) {
       if ($authenticate != FALSE) {
           $this->user[$idx]->code = $authenticate->code_get();
           if (0 == 1) {
@@ -2053,9 +2328,9 @@ class Brisk
           for ($sfx = 1 ; $sfx <= MAX_PLAYERS ; $sfx++) {
             $ghostname = 'ghost'.$sfx;
             for ($i = 0 ; $i < MAX_PLAYERS ; $i++) {
           for ($sfx = 1 ; $sfx <= MAX_PLAYERS ; $sfx++) {
             $ghostname = 'ghost'.$sfx;
             for ($i = 0 ; $i < MAX_PLAYERS ; $i++) {
-              if (strcmp("", $this->user[$i]->sess) == 0) 
+              if (strcmp("", $this->user[$i]->sess) == 0)
                 continue;
                 continue;
-              
+
               if (strcasecmp($this->user[$i]->name, $ghostname) == 0) {
                 $ghostname = '';
                 break;
               if (strcasecmp($this->user[$i]->name, $ghostname) == 0) {
                 $ghostname = '';
                 break;
@@ -2064,9 +2339,9 @@ class Brisk
             if ($ghostname != '')
               break;
           }
             if ($ghostname != '')
               break;
           }
-          
+
           $ghost_user->name = $ghostname;
           $ghost_user->name = $ghostname;
-          
+
           if ($ghost_user->stat == 'room' && $ghost_user->subst == 'standup') {
             $this->standup_update($ghost_user);
           }
           if ($ghost_user->stat == 'room' && $ghost_user->subst == 'standup') {
             $this->standup_update($ghost_user);
           }
@@ -2090,145 +2365,36 @@ class Brisk
       log_main(sprintf("TROVATO LIBERO A [%d] sess [%s] name [%s] count [%d] name [%s] code [%s]", $idx, $sess, $name_new, count($this->user),$this->user[$real_idx]->name, $this->user[$real_idx]->code));
 
       $ret = $this->user[$real_idx];
       log_main(sprintf("TROVATO LIBERO A [%d] sess [%s] name [%s] count [%d] name [%s] code [%s]", $idx, $sess, $name_new, count($this->user),$this->user[$real_idx]->name, $this->user[$real_idx]->code));
 
       $ret = $this->user[$real_idx];
+      if (defined('CURL_DE_SAC_VERS')) {
+          brisk_cds_execute($this, $real_idx, $sess, $ip, $authenticate);
+      }
       return ($ret);
     }
 
     return (FALSE);
   }
       return ($ret);
     }
 
     return (FALSE);
   }
-  
+
   function standup_update($user)
   {
     for ($i = 0 ; $i < MAX_PLAYERS ; $i++) {
       $user_cur = $this->user[$i];
       if ($user_cur->sess == '')
   function standup_update($user)
   {
     for ($i = 0 ; $i < MAX_PLAYERS ; $i++) {
       $user_cur = $this->user[$i];
       if ($user_cur->sess == '')
-       continue;
+        continue;
 
       log_main("STANDUP START: ".$user_cur->stat);
 
       log_main("STANDUP START: ".$user_cur->stat);
-      
+
       if ($user_cur->stat == 'room') {
       if ($user_cur->stat == 'room') {
-       $user_cur->comm[$user_cur->step % COMM_N] = "gst.st = ".($user_cur->step+1)."; ".$this->standup_content($user_cur);
-       if ($user->idx_get() == $i) {
+        $user_cur->comm[$user_cur->step % COMM_N] = "gst.st = ".($user_cur->step+1)."; ".$this->standup_content($user_cur);
+        if ($user->idx_get() == $i) {
           $user_cur->comm[$user_cur->step % COMM_N] .= $user->myname_innerHTML();
           $user_cur->comm[$user_cur->step % COMM_N] .= $user->myname_innerHTML();
-       }
-       log_main("FROM STANDUP: NAME: ".$user_cur->name." SENDED: ".$user_cur->comm[$user_cur->step % COMM_N]);
-       
-       $user_cur->step_inc();
+        }
+        log_main("FROM STANDUP: NAME: ".$user_cur->name." SENDED: ".$user_cur->comm[$user_cur->step % COMM_N]);
+        
+        $user_cur->step_inc();
       }
     }
   }
 
       }
     }
   }
 
-  // Static functions
-  static function create($crystal_filename)
-  {
-      if (($brisk_ser = @file_get_contents($crystal_filename)) == FALSE ||
-          ($brisk = unserialize($brisk_ser)) == FALSE) {
-          fprintf(STDERR, "NEW ROOM\n");
-          $brisk = new Brisk($crystal_filename);
-      }
-      else {
-          fprintf(STDERR, "ROOM FROM FILE\n");
-          rename($crystal_filename, $crystal_filename.".old");
-      }
-
-    return $brisk;
-  }
-  
-  
-  function load_data() 
-  {
-    GLOBAL $sess;
-
-    do {
-      if (($tok = @ftok(FTOK_PATH."/main", "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_MIN;
-
-      if ($shm = shm_attach($tok, $shm_sz)) {
-          $brisk = @shm_get_var($shm, $tok); // CHECKED BELOW
-          
-          log_only("bri ==  ".($brisk == FALSE ?   "FALSE" : "TRUE")."  bri ===  ".($brisk === FALSE ? "FALSE" : "TRUE")."  bri isset ".(isset($brisk) ?   "TRUE" : "FALSE"));
-          if (isset($brisk)) 
-              log_only("bri count ".count($brisk));
-          
-          if ($brisk == FALSE) {
-              log_only("INIT MAIN DATA");
-              shm_detach($shm);
-              
-              $brisk = Brisk::create();
-              
-              log_shme("Brisk::create");
-
-              if (Brisk::save_data($brisk) == FALSE)
-                  return FALSE;
-
-              return $brisk;
-          }
-          $brisk->shm_sz = $shm_sz;
-          
-          shm_detach($shm);
-
-          for ($i = 0 ; $i < MAX_PLAYERS ; $i++) {
-              if (($brisk->user[$i] = User::load_data($i, FALSE)) == FALSE) {
-                  log_crit("User::load_data failed");
-                  break;
-              }
-          }
-          if ($i < MAX_PLAYERS) {
-              break;
-          }
-      }
-      
-      //  
-      // SHSPLIT: load users from the shared memory
-      //
-      return ($brisk);
-    } while (0);
-    
-    return (FALSE);
-  }
-  
-
-  function save_data_orig($brisk) 
-  {
-    GLOBAL $sess;
-    
-    $shm =   FALSE;
-    
-    // var_dump($brisk);
-    
-    if (($tok = @ftok(FTOK_PATH."/main", "C")) == -1) 
-      return (FALSE);
-    
-    while ($brisk->shm_sz < SHM_DIMS_MAX) {
-      if (($shm = shm_attach($tok, $brisk->shm_sz)) == FALSE)
-       break;
-      
-      // log_only("PUT_VAR DI ".strlen(serialize($brisk)));
-      if (@shm_put_var($shm, $tok, $brisk) != FALSE) {
-       shm_detach($shm);
-       return (TRUE);
-      }
-      if (shm_remove($shm) === FALSE) {
-       log_only("REMOVE FALLITA");
-       break;
-      }
-      shm_detach($shm);
-      $brisk->shm_sz += SHM_DIMS_DLT;
-    } 
-
-    if ($shm)
-      shm_detach($shm);
-    
-    return (FALSE);
-  }
   function dump_data()
   {
       $brisk_ser = serialize($this);
   function dump_data()
   {
       $brisk_ser = serialize($this);
@@ -2236,104 +2402,33 @@ class Brisk
       if (file_put_contents($this->crystal_filename, $brisk_ser) == $brisk_ser_len) {
           return (TRUE);
       }
       if (file_put_contents($this->crystal_filename, $brisk_ser) == $brisk_ser_len) {
           return (TRUE);
       }
-      
-      return (FALSE);
-  }
-
-  function save_data($brisk) 
-  {
-      GLOBAL $sess;
-    
-      $ret =   FALSE;
-      $shm =   FALSE;
-    
-      if (($tok = @ftok(FTOK_PATH."/main", "C")) == -1) 
-          return (FALSE);
-    
-      // SHSPLIT: before save the $brisk you must save users, 
-      //          detach from main struct and (then) reattach
-      $user_park = array();
-      for ($i = 0 ; $i < MAX_PLAYERS ; $i++) {
-          $user_park[$i]  = $brisk->user[$i];
-          $brisk->user[$i] = FALSE;
-      }
-
-      while ($brisk->shm_sz < SHM_DIMS_MAX) {
-          if (($shm = shm_attach($tok, $brisk->shm_sz)) == FALSE)
-              break;
-      
-          // log_only("PUT_VAR DI ".strlen(serialize($brisk)));
-          if (@shm_put_var($shm, $tok, $brisk) != FALSE) {
-              log_shme("Brisk::save_data");
-              $ret = TRUE;
-              break;
-          }
-          if (shm_remove($shm) === FALSE) {
-              log_only("REMOVE FALLITA");
-              break;
-          }
-          shm_detach($shm);
-          $brisk->shm_sz += SHM_DIMS_DLT;
-      } 
-
-      if ($shm)
-          shm_detach($shm);
-    
-      // SHSPLIT: reattach users to the room class
-      for ($i = 0 ; $i < MAX_PLAYERS ; $i++) {
-          User::save_data($user_park[$i], $i);
-          $brisk->user[$i] = $user_park[$i];
-      }
-      log_load("FINISH: ".($ret == TRUE ? "TRUE" : "FALSE"));
-
-      return ($ret);
-  }
-
-  static function lock_data($is_exclusive)
-  {
-      if (($res = file_lock(FTOK_PATH."/main", $is_exclusive)) != FALSE) {
-          self::$delta_t = microtime(TRUE);
-          log_lock("LOCK   room         [".self::$delta_t."]");
-          
-          return ($res);
-      }
 
       return (FALSE);
   }
 
       return (FALSE);
   }
-  
-  static function unlock_data($res)
-  {
-    GLOBAL $sess; 
-    
-    log_lock("UNLOCK room         [".(microtime(TRUE) - (self::$delta_t))."]");
-
-    file_unlock($res);
-  }
-
 
   function standup_content($user)
   {
     $ret = "";
     $content = "";
 
   function standup_content($user)
   {
     $ret = "";
     $content = "";
-    
+
     if ($user->stat != 'room')
       return;
     if ($user->stat != 'room')
       return;
-    
+
     for ($i = 0 , $ct = 0 ; $ct < 4 && $i < MAX_PLAYERS ; $i++) {
       if ($this->user[$i]->sess == "" || $this->user[$i]->stat != "room" || $this->user[$i]->name == "")
         continue;
       $ct++;
     }
     for ($i = 0 , $ct = 0 ; $ct < 4 && $i < MAX_PLAYERS ; $i++) {
       if ($this->user[$i]->sess == "" || $this->user[$i]->stat != "room" || $this->user[$i]->name == "")
         continue;
       $ct++;
     }
-    
+
     // $content .= sprintf('<table cols=\\"%d\\" class=\\"table_standup\\">', $ct);
     // $content .= sprintf('<table cols=\\"%d\\" class=\\"table_standup\\">', $ct);
-    
+
     $content = ' j_stand_cont( [ ';
 
     $user_cur_id = $user->idx_get();
     for ($i = 0 , $ct = 0 ; $i < MAX_PLAYERS ; $i++) {
       if ($this->user[$i]->sess == "" || $this->user[$i]->stat != "room" || $this->user[$i]->name == "")
         continue;
     $content = ' j_stand_cont( [ ';
 
     $user_cur_id = $user->idx_get();
     for ($i = 0 , $ct = 0 ; $i < MAX_PLAYERS ; $i++) {
       if ($this->user[$i]->sess == "" || $this->user[$i]->stat != "room" || $this->user[$i]->name == "")
         continue;
-      
+
       $flags = $this->user[$i]->flags;
 
       // sql record exists AND last donate > 2013-01-01
       $flags = $this->user[$i]->flags;
 
       // sql record exists AND last donate > 2013-01-01
@@ -2348,17 +2443,17 @@ class Brisk
           if ($user_cur_id == $i) {
               $flags |= 1;
           }
           if ($user_cur_id == $i) {
               $flags |= 1;
           }
-          
+
           $content .= sprintf('%s[ %d, "%s"%s ]',($ct > 0 ? ', ' : ''), $flags,
                               xcape($this->user[$i]->name), $supp_comp_s);
           $ct++;
       }
     }
     $content .= ' ]);';
           $content .= sprintf('%s[ %d, "%s"%s ]',($ct > 0 ? ', ' : ''), $flags,
                               xcape($this->user[$i]->name), $supp_comp_s);
           $ct++;
       }
     }
     $content .= ' ]);';
-    
+
     return ($content);
   }
     return ($content);
   }
-  
+
   function table_content($user, $table_idx)
   {
     $content = "";
   function table_content($user, $table_idx)
   {
     $content = "";
@@ -2367,23 +2462,23 @@ class Brisk
     //
     //   Si possono usare i dati nella classe table
     //
     //
     //   Si possono usare i dati nella classe table
     //
-    
+
     $sess = $user->sess;
     $table = $this->table[$table_idx];
     $sess = $user->sess;
     $table = $this->table[$table_idx];
-    
+
     if ($user->stat != 'room')
       return;
     if ($user->stat != 'room')
       return;
-    
+
     $user_cur_id = $user->idx_get();
     $content = "[ ";
     for ($i = 0 ; $i < $table->player_n ; $i++) {
         $user_cur = $this->user[$table->player[$i]];
     $user_cur_id = $user->idx_get();
     $content = "[ ";
     for ($i = 0 ; $i < $table->player_n ; $i++) {
         $user_cur = $this->user[$table->player[$i]];
-        
+
         $flags = $user_cur->flags;
         $flags = $user_cur->flags;
-        
+
         if ($user_cur_id == $table->player[$i])
             $flags |= 1;
         if ($user_cur_id == $table->player[$i])
             $flags |= 1;
-        
+
         log_main($user_cur->name. sprintf(" IN TABLE [%d]", $table_idx));
         if ($user_cur->is_supp_custom())
             $supp_comp_s = sprintf(', "%s"', $user_cur->rec->supp_comp_get());
         log_main($user_cur->name. sprintf(" IN TABLE [%d]", $table_idx));
         if ($user_cur->is_supp_custom())
             $supp_comp_s = sprintf(', "%s"', $user_cur->rec->supp_comp_get());
@@ -2397,15 +2492,23 @@ class Brisk
     $content .= ' ]';
 
     $ret .= sprintf('j_tab_cont(%d, %s);', $table_idx, $content);
     $content .= ' ]';
 
     $ret .= sprintf('j_tab_cont(%d, %s);', $table_idx, $content);
-    
+
     return ($ret);
   }
 
   function request_mgr(&$s_a_p, $header, &$header_out, &$new_socket, $path, $addr, $get, $post, $cookie)
   {
     return ($ret);
   }
 
   function request_mgr(&$s_a_p, $header, &$header_out, &$new_socket, $path, $addr, $get, $post, $cookie)
   {
-      GLOBAL $G_black_list;
+      GLOBAL $G_ban_list, $G_black_list;
 
       printf("NEW_SOCKET (root): %d PATH [%s]\n", intval($new_socket), $path);
 
       printf("NEW_SOCKET (root): %d PATH [%s]\n", intval($new_socket), $path);
+      $remote_addr = 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");
+          return (FALSE);
+      }
 
       $enc = get_encoding($header);
       if (isset($header['User-Agent'])) {
 
       $enc = get_encoding($header);
       if (isset($header['User-Agent'])) {
@@ -2444,7 +2547,7 @@ class Brisk
           index_wr_main($this, $addr, $get, $post, $cookie);
           $content = ob_get_contents();
           ob_end_clean();
           index_wr_main($this, $addr, $get, $post, $cookie);
           $content = ob_get_contents();
           ob_end_clean();
-          
+
           $s_a_p->pendpage_try_addflush($new_socket, 20, $enc, $header_out, $content);
           return TRUE;
 
           $s_a_p->pendpage_try_addflush($new_socket, 20, $enc, $header_out, $content);
           return TRUE;
 
@@ -2458,7 +2561,7 @@ class Brisk
           do {
               if (!isset($cookie['sess'])
                   || (($user = $this->get_user($cookie['sess'], $idx)) == FALSE)) {
           do {
               if (!isset($cookie['sess'])
                   || (($user = $this->get_user($cookie['sess'], $idx)) == FALSE)) {
-                  
+
                   $content = User::stream_fini($transp, $s_a_p->rndstr, TRUE);
 
                   $s_a_p->pendpage_try_addflush($new_socket, 20, $enc, $header_out, $content);
                   $content = User::stream_fini($transp, $s_a_p->rndstr, TRUE);
 
                   $s_a_p->pendpage_try_addflush($new_socket, 20, $enc, $header_out, $content);
@@ -2479,7 +2582,7 @@ class Brisk
               $user->stream_init($s_a_p->rndstr, $enc, $header, $header_out, $content, $get, $post, $cookie);
               $response = headers_render($header_out, -1).$user->chunked_content($content);
               $response_l = mb_strlen($response, "ASCII");
               $user->stream_init($s_a_p->rndstr, $enc, $header, $header_out, $content, $get, $post, $cookie);
               $response = headers_render($header_out, -1).$user->chunked_content($content);
               $response_l = mb_strlen($response, "ASCII");
-              
+
               $wret = @fwrite($new_socket, $response, $response_l);
               if ($wret < $response_l) {
                   printf("TROUBLES WITH FWRITE: %d\n", $wret);
               $wret = @fwrite($new_socket, $response, $response_l);
               if ($wret < $response_l) {
                   printf("TROUBLES WITH FWRITE: %d\n", $wret);
@@ -2489,14 +2592,14 @@ class Brisk
                   $user->rd_cache_set("");
               }
               fflush($new_socket);
                   $user->rd_cache_set("");
               }
               fflush($new_socket);
-              
-              
+
+
               $s_a_p->socks_set($new_socket, $user, NULL);
               $user->rd_socket_set($new_socket);
               printf(" - qui ci siamo - ");
               return TRUE;
           } while (FALSE);
               $s_a_p->socks_set($new_socket, $user, NULL);
               $user->rd_socket_set($new_socket);
               printf(" - qui ci siamo - ");
               return TRUE;
           } while (FALSE);
-          
+
           return FALSE;
           break;
       case 'test.php':
           return FALSE;
           break;
       case 'test.php':
@@ -2540,7 +2643,7 @@ class Brisk
   function match_get($idx, $token)
   {
       if (isset($this->match[$idx])) {
   function match_get($idx, $token)
   {
       if (isset($this->match[$idx])) {
-          if (   $token == NULL 
+          if (   $token == NULL
               || $token == $this->match[$idx]->table_token) {
               return ($this->match[$idx]);
           }
               || $token == $this->match[$idx]->table_token) {
               return ($this->match[$idx]);
           }
@@ -2572,12 +2675,12 @@ function btrace_line($ar)
     for ($i = 0 ; $i < count($ar) ; $i++) {
         $with_class = isset($ar[$i]['class']);
         $with_file  = isset($ar[$i]['file']);
     for ($i = 0 ; $i < count($ar) ; $i++) {
         $with_class = isset($ar[$i]['class']);
         $with_file  = isset($ar[$i]['file']);
-        $ret .= sprintf("%s%s%s (%s:%d)", ($i == 0 ? "" : ", "), 
-                        ($with_class ?  $ar[$i]['class'].$ar[$i]['type'] : ""), 
-                        $ar[$i]['function'], ($with_file ? str_replace($G_btrace_pref_sub, "", $ar[$i]['file']) : ""), 
+        $ret .= sprintf("%s%s%s (%s:%d)", ($i == 0 ? "" : ", "),
+                        ($with_class ?  $ar[$i]['class'].$ar[$i]['type'] : ""),
+                        $ar[$i]['function'], ($with_file ? str_replace($G_btrace_pref_sub, "", $ar[$i]['file']) : ""),
                         ($with_file ? $ar[$i]['line'] : ""));
     }
                         ($with_file ? $ar[$i]['line'] : ""));
     }
-    
+
     return ($ret);
 }
 
     return ($ret);
 }
 
@@ -2594,19 +2697,19 @@ function trace_ftok($id, $add)
 function log_mop($step, $log)
 {
     GLOBAL $PHP_SELF;
 function log_mop($step, $log)
 {
     GLOBAL $PHP_SELF;
-    
+
     if (BRISK_SINGLE_SESS == "" && (BRISK_DEBUG & DBG_LMOP) == 0)
         return;
     if (BRISK_SINGLE_SESS == "" && (BRISK_DEBUG & DBG_LMOP) == 0)
         return;
-    
+
     $sess = Brisk::sess_cur_get();
     if (isset($sess) == FALSE)
         $ssess = "XXXX";
     else
         $ssess = $sess;
     $sess = Brisk::sess_cur_get();
     if (isset($sess) == FALSE)
         $ssess = "XXXX";
     else
         $ssess = $sess;
-    
+
     if (( (BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_LMOP) == 0)
         return;
     if (( (BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_LMOP) == 0)
         return;
-    
+
     if ((BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_TRAC)
         $btrace = btrace_line(debug_backtrace());
     else
     if ((BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_TRAC)
         $btrace = btrace_line(debug_backtrace());
     else
@@ -2618,22 +2721,49 @@ function log_mop($step, $log)
 }
 
 
 }
 
 
+function log_cds($log)
+{
+    GLOBAL $PHP_SELF;
+
+    if (BRISK_SINGLE_SESS == "" && (BRISK_DEBUG & DBG_CDS) == 0)
+        return;
+
+    $sess = Brisk::sess_cur_get();
+    if (isset($sess) == FALSE)
+        $ssess = "XXXX";
+    else
+        $ssess = $sess;
+
+    if (( (BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_CDS) == 0)
+        return;
+
+    if ((BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_TRAC)
+        $btrace = btrace_line(debug_backtrace());
+    else
+        $btrace = "";
+    if (($fp = @fopen(LEGAL_PATH."/cds.log", 'a')) != FALSE) {
+        fwrite($fp, sprintf("CDS: [%f] [%s] [%s]\n", gettimeofday(TRUE), $log, $btrace));
+        fclose($fp);
+    }
+}
+
+
 function log_only2($log)
 {
     GLOBAL $PHP_SELF;
 function log_only2($log)
 {
     GLOBAL $PHP_SELF;
-    
+
     if (BRISK_SINGLE_SESS == "" && (BRISK_DEBUG & DBG_ONL2) == 0)
         return;
     if (BRISK_SINGLE_SESS == "" && (BRISK_DEBUG & DBG_ONL2) == 0)
         return;
-    
+
     $sess = Brisk::sess_cur_get();
     if (isset($sess) == FALSE)
         $ssess = "XXXX";
     else
         $ssess = $sess;
     $sess = Brisk::sess_cur_get();
     if (isset($sess) == FALSE)
         $ssess = "XXXX";
     else
         $ssess = $sess;
-    
+
     if (( (BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_ONL2) == 0)
         return;
     if (( (BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_ONL2) == 0)
         return;
-    
+
     if ((BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_TRAC)
         $btrace = btrace_line(debug_backtrace());
     else
     if ((BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_TRAC)
         $btrace = btrace_line(debug_backtrace());
     else
@@ -2647,19 +2777,19 @@ function log_only2($log)
 function log_crit($log)
 {
     GLOBAL $PHP_SELF;
 function log_crit($log)
 {
     GLOBAL $PHP_SELF;
-    
+
     if (BRISK_SINGLE_SESS == "" && (BRISK_DEBUG & DBG_CRIT) == 0)
         return;
     if (BRISK_SINGLE_SESS == "" && (BRISK_DEBUG & DBG_CRIT) == 0)
         return;
-    
+
     $sess = Brisk::sess_cur_get();
     if (isset($sess) == FALSE)
         $ssess = "XXXX";
     else
         $ssess = $sess;
     $sess = Brisk::sess_cur_get();
     if (isset($sess) == FALSE)
         $ssess = "XXXX";
     else
         $ssess = $sess;
-    
+
     if (( (BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_CRIT) == 0)
         return;
     if (( (BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_CRIT) == 0)
         return;
-    
+
     if ((BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_TRAC)
         $btrace = btrace_line(debug_backtrace());
     else
     if ((BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_TRAC)
         $btrace = btrace_line(debug_backtrace());
     else
@@ -2673,19 +2803,19 @@ function log_crit($log)
 function log_only($log)
 {
     GLOBAL $PHP_SELF;
 function log_only($log)
 {
     GLOBAL $PHP_SELF;
-    
+
     if (BRISK_SINGLE_SESS == "" && (BRISK_DEBUG & DBG_ONLY) == 0)
         return;
     if (BRISK_SINGLE_SESS == "" && (BRISK_DEBUG & DBG_ONLY) == 0)
         return;
-    
+
     $sess = Brisk::sess_cur_get();
     if (isset($sess) == FALSE)
         $ssess = "XXXX";
     else
         $ssess = $sess;
     $sess = Brisk::sess_cur_get();
     if (isset($sess) == FALSE)
         $ssess = "XXXX";
     else
         $ssess = $sess;
-    
+
     if (( (BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_ONLY) == 0)
         return;
     if (( (BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_ONLY) == 0)
         return;
-    
+
     if ((BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_TRAC)
         $btrace = btrace_line(debug_backtrace());
     else
     if ((BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_TRAC)
         $btrace = btrace_line(debug_backtrace());
     else
@@ -2699,19 +2829,19 @@ function log_only($log)
 function log_main($log)
 {
     GLOBAL $PHP_SELF;
 function log_main($log)
 {
     GLOBAL $PHP_SELF;
-    
+
     if (BRISK_SINGLE_SESS == "" && (BRISK_DEBUG & DBG_MAIN) == 0)
         return;
     if (BRISK_SINGLE_SESS == "" && (BRISK_DEBUG & DBG_MAIN) == 0)
         return;
-    
+
     $sess = Brisk::sess_cur_get();
     if (isset($sess) == FALSE)
         $ssess = "XXXX";
     else
         $ssess = $sess;
     $sess = Brisk::sess_cur_get();
     if (isset($sess) == FALSE)
         $ssess = "XXXX";
     else
         $ssess = $sess;
-    
+
     if (( (BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_MAIN) == 0)
         return;
     if (( (BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_MAIN) == 0)
         return;
-    
+
     if ((BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_TRAC)
         $btrace = btrace_line(debug_backtrace());
     else
     if ((BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_TRAC)
         $btrace = btrace_line(debug_backtrace());
     else
@@ -2725,23 +2855,23 @@ function log_main($log)
 function log_rd($log)
 {
     GLOBAL $PHP_SELF;
 function log_rd($log)
 {
     GLOBAL $PHP_SELF;
-    
+
     if (BRISK_SINGLE_SESS == "" && (BRISK_DEBUG & DBG_READ) == 0)
         return;
     if (BRISK_SINGLE_SESS == "" && (BRISK_DEBUG & DBG_READ) == 0)
         return;
-    
+
     $sess = Brisk::sess_cur_get();
     if (isset($sess) == FALSE)
         $ssess = "XXXX";
     else
         $ssess = $sess;
     $sess = Brisk::sess_cur_get();
     if (isset($sess) == FALSE)
         $ssess = "XXXX";
     else
         $ssess = $sess;
-    
+
     if (( (BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_READ) == 0)
         return;
 
     if ((BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_TRAC)
         $btrace = btrace_line(debug_backtrace());
     else
     if (( (BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_READ) == 0)
         return;
 
     if ((BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_TRAC)
         $btrace = btrace_line(debug_backtrace());
     else
-        $btrace = "";    
+        $btrace = "";
     if (($fp = @fopen(LEGAL_PATH."/brisk.log", 'a')) != FALSE) {
         fwrite($fp, sprintf("READ: [%s] [%s] [%s]\n", $ssess, $log, $btrace));
         fclose($fp);
     if (($fp = @fopen(LEGAL_PATH."/brisk.log", 'a')) != FALSE) {
         fwrite($fp, sprintf("READ: [%s] [%s] [%s]\n", $ssess, $log, $btrace));
         fclose($fp);
@@ -2751,24 +2881,24 @@ function log_rd($log)
 function log_rd2($log)
 {
     GLOBAL $PHP_SELF;
 function log_rd2($log)
 {
     GLOBAL $PHP_SELF;
-    
+
     if (BRISK_SINGLE_SESS == "" && (BRISK_DEBUG & DBG_REA2) == 0)
         return;
     if (BRISK_SINGLE_SESS == "" && (BRISK_DEBUG & DBG_REA2) == 0)
         return;
-    
+
     $sess = Brisk::sess_cur_get();
     if (isset($sess) == FALSE)
         $ssess = "XXXX";
     else
         $ssess = $sess;
     $sess = Brisk::sess_cur_get();
     if (isset($sess) == FALSE)
         $ssess = "XXXX";
     else
         $ssess = $sess;
-    
+
     if (( (BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_REA2) == 0)
         return;
     if (( (BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_REA2) == 0)
         return;
-    
+
     if ((BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_TRAC)
         $btrace = btrace_line(debug_backtrace());
     else
         $btrace = "";
     if ((BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_TRAC)
         $btrace = btrace_line(debug_backtrace());
     else
         $btrace = "";
-    
+
     if (($fp = @fopen(LEGAL_PATH."/brisk.log", 'a')) != FALSE) {
         fwrite($fp, sprintf("REA2: [%s] [%s] [%s]\n", $ssess, $log, $btrace));
         fclose($fp);
     if (($fp = @fopen(LEGAL_PATH."/brisk.log", 'a')) != FALSE) {
         fwrite($fp, sprintf("REA2: [%s] [%s] [%s]\n", $ssess, $log, $btrace));
         fclose($fp);
@@ -2778,20 +2908,20 @@ function log_rd2($log)
 function log_send($log)
 {
     GLOBAL $PHP_SELF;
 function log_send($log)
 {
     GLOBAL $PHP_SELF;
-    
+
     if (BRISK_SINGLE_SESS == "" && (BRISK_DEBUG & DBG_SEND) == 0)
         return;
     if (BRISK_SINGLE_SESS == "" && (BRISK_DEBUG & DBG_SEND) == 0)
         return;
-    
+
     $sess = Brisk::sess_cur_get();
     if (isset($sess) == FALSE)
         $ssess = "XXXX";
     else
         $ssess = $sess;
     $sess = Brisk::sess_cur_get();
     if (isset($sess) == FALSE)
         $ssess = "XXXX";
     else
         $ssess = $sess;
-    
+
     if (( (BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_SEND) == 0)
         return;
 
     if (( (BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_SEND) == 0)
         return;
 
-    if ((BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_TRAC)    
+    if ((BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_TRAC)
         $btrace = btrace_line(debug_backtrace());
     else
         $btrace = "";
         $btrace = btrace_line(debug_backtrace());
     else
         $btrace = "";
@@ -2804,19 +2934,19 @@ function log_send($log)
 function log_lock($log)
 {
     GLOBAL $PHP_SELF;
 function log_lock($log)
 {
     GLOBAL $PHP_SELF;
-    
+
     if (BRISK_SINGLE_SESS == "" && (BRISK_DEBUG & DBG_LOCK) == 0)
         return;
     if (BRISK_SINGLE_SESS == "" && (BRISK_DEBUG & DBG_LOCK) == 0)
         return;
-    
+
     $sess = Brisk::sess_cur_get();
     if (isset($sess) == FALSE)
         $ssess = "XXXX";
     else
         $ssess = $sess;
     $sess = Brisk::sess_cur_get();
     if (isset($sess) == FALSE)
         $ssess = "XXXX";
     else
         $ssess = $sess;
-    
+
     if (( (BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_LOCK) == 0)
         return;
     if (( (BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_LOCK) == 0)
         return;
-    
+
     if ((BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_TRAC)
         $btrace = btrace_line(debug_backtrace());
     else
     if ((BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_TRAC)
         $btrace = btrace_line(debug_backtrace());
     else
@@ -2830,19 +2960,19 @@ function log_lock($log)
 function log_wr($log)
 {
     GLOBAL $PHP_SELF;
 function log_wr($log)
 {
     GLOBAL $PHP_SELF;
-    
+
     if (BRISK_SINGLE_SESS == "" && (BRISK_DEBUG & DBG_WRIT) == 0)
         return;
     if (BRISK_SINGLE_SESS == "" && (BRISK_DEBUG & DBG_WRIT) == 0)
         return;
-    
+
     $sess = Brisk::sess_cur_get();
     if (isset($sess) == FALSE)
         $ssess = "XXXX";
     else
         $ssess = $sess;
     $sess = Brisk::sess_cur_get();
     if (isset($sess) == FALSE)
         $ssess = "XXXX";
     else
         $ssess = $sess;
-    
+
     if (( (BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_WRIT) == 0)
         return;
     if (( (BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_WRIT) == 0)
         return;
-    
+
     if ((BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_TRAC)
         $btrace = btrace_line(debug_backtrace());
     else
     if ((BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_TRAC)
         $btrace = btrace_line(debug_backtrace());
     else
@@ -2856,19 +2986,19 @@ function log_wr($log)
 function log_load($log)
 {
     GLOBAL $PHP_SELF;
 function log_load($log)
 {
     GLOBAL $PHP_SELF;
-    
+
     if (BRISK_SINGLE_SESS == "" && (BRISK_DEBUG & DBG_LOAD) == 0)
         return;
     if (BRISK_SINGLE_SESS == "" && (BRISK_DEBUG & DBG_LOAD) == 0)
         return;
-    
+
     $sess = Brisk::sess_cur_get();
     if (isset($sess) == FALSE)
         $ssess = "XXXX";
     else
         $ssess = $sess;
     $sess = Brisk::sess_cur_get();
     if (isset($sess) == FALSE)
         $ssess = "XXXX";
     else
         $ssess = $sess;
-    
+
     if (( (BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_LOAD) == 0)
         return;
     if (( (BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_LOAD) == 0)
         return;
-    
+
     if ((BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_TRAC)
         $btrace = btrace_line(debug_backtrace());
     else
     if ((BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_TRAC)
         $btrace = btrace_line(debug_backtrace());
     else
@@ -2885,10 +3015,10 @@ function log_auth($sess, $log)
 
     if (BRISK_SINGLE_SESS == "" && (BRISK_DEBUG & DBG_AUTH) == 0)
         return;
 
     if (BRISK_SINGLE_SESS == "" && (BRISK_DEBUG & DBG_AUTH) == 0)
         return;
-    
+
     if (( (BRISK_DEBUG | ($sess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_AUTH) == 0)
         return;
     if (( (BRISK_DEBUG | ($sess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_AUTH) == 0)
         return;
-    
+
     if ((BRISK_DEBUG | ($sess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_TRAC)
         $btrace = btrace_line(debug_backtrace());
     else
     if ((BRISK_DEBUG | ($sess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_TRAC)
         $btrace = btrace_line(debug_backtrace());
     else
@@ -2902,19 +3032,19 @@ function log_auth($sess, $log)
 function log_shme($log)
 {
     GLOBAL $PHP_SELF;
 function log_shme($log)
 {
     GLOBAL $PHP_SELF;
-    
+
     if (BRISK_SINGLE_SESS == "" && (BRISK_DEBUG & DBG_SHME) == 0)
         return;
     if (BRISK_SINGLE_SESS == "" && (BRISK_DEBUG & DBG_SHME) == 0)
         return;
-    
+
     $sess = Brisk::sess_cur_get();
     if (isset($sess) == FALSE)
         $ssess = "XXXX";
     else
         $ssess = $sess;
     $sess = Brisk::sess_cur_get();
     if (isset($sess) == FALSE)
         $ssess = "XXXX";
     else
         $ssess = $sess;
-    
+
     if (( (BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_SHME) == 0)
         return;
     if (( (BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_SHME) == 0)
         return;
-    
+
     if ((BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_TRAC)
         $btrace = btrace_line(debug_backtrace());
     else
     if ((BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_TRAC)
         $btrace = btrace_line(debug_backtrace());
     else
@@ -2934,7 +3064,7 @@ function log_legal($curtime, $addr, $user, $where, $mesg)
   if (($fp = @fopen(LEGAL_PATH."/legal.log", 'a')) != FALSE) {
     /* Unix time | session | nickname | IP | where was | mesg */
     fwrite($fp, sprintf("%ld|%s|%s|%s|%s|%s|%s|\n", $curtime, $user->sess,
   if (($fp = @fopen(LEGAL_PATH."/legal.log", 'a')) != FALSE) {
     /* Unix time | session | nickname | IP | where was | mesg */
     fwrite($fp, sprintf("%ld|%s|%s|%s|%s|%s|%s|\n", $curtime, $user->sess,
-                        ($user->flags & USER_FLAG_AUTH ? 'A' : 'N'),
+                        ($user->is_auth() ? 'A' : 'N'),
                         $user->name, $addr, $where , $mesg));
     fclose($fp);
   }
                         $user->name, $addr, $where , $mesg));
     fclose($fp);
   }
@@ -2998,24 +3128,24 @@ function root_welcome($user)
 
   $curtime = time();
   $dt = date("H:i ", $curtime);
 
   $curtime = time();
   $dt = date("H:i ", $curtime);
-    
+
   for ($i = 0 ; $i < count($root_wellarr[$G_lang]) ; $i++)
   for ($i = 0 ; $i < count($root_wellarr[$G_lang]) ; $i++)
-    $ret .= sprintf('chatt_sub("%s", [2, "%s"],"%s");', $dt, NICKSERV, str_replace('"', '\"', $root_wellarr[$G_lang][$i]));
+      $ret .= nickserv_msg($dt, str_replace('"', '\"', $root_wellarr[$G_lang][$i]));
 
   return ($ret);
 }
 
 
 
 
   return ($ret);
 }
 
 
 
-function validate_sess($sess) 
+function validate_sess($sess)
 {
 {
-  if (strlen($sess) == SESS_LEN) 
+  if (strlen($sess) == SESS_LEN)
     return (TRUE);
   else
     return (FALSE);
 }
 
     return (TRUE);
   else
     return (FALSE);
 }
 
-function validate_name($name) 
+function validate_name($name)
 {
     $name_new = str_replace(' ', '_', mb_substr(trim($name),0,12, "UTF-8"));
 
 {
     $name_new = str_replace(' ', '_', mb_substr(trim($name),0,12, "UTF-8"));
 
@@ -3042,16 +3172,16 @@ function secstoword($secs)
   $mins = floor($secs / 60);
   $secs = $secs % 60;
   if ($G_lang == 'en') {
   $mins = floor($secs / 60);
   $secs = $secs % 60;
   if ($G_lang == 'en') {
-    if ($mins > 0) 
+    if ($mins > 0)
       $ret = sprintf("%d minute%s%s", $mins, ($mins > 1 ? "s" : ""), ($secs > 0 ? " and " : ""));
       $ret = sprintf("%d minute%s%s", $mins, ($mins > 1 ? "s" : ""), ($secs > 0 ? " and " : ""));
-    
+
     if ($secs > 0)
       $ret .= sprintf("%d second%s", $secs, ($secs > 1 ? "s" : ""));
   }
   else {
     if ($secs > 0)
       $ret .= sprintf("%d second%s", $secs, ($secs > 1 ? "s" : ""));
   }
   else {
-    if ($mins > 0) 
+    if ($mins > 0)
       $ret = sprintf("%d minut%s%s", $mins, ($mins > 1 ? "i" : "o"), ($secs > 0 ? " e " : ""));
       $ret = sprintf("%d minut%s%s", $mins, ($mins > 1 ? "i" : "o"), ($secs > 0 ? " e " : ""));
-    
+
     if ($secs > 0)
       $ret .= sprintf("%d second%s", $secs, ($secs > 1 ? "i" : "o"));
   }
     if ($secs > 0)
       $ret .= sprintf("%d second%s", $secs, ($secs > 1 ? "i" : "o"));
   }
@@ -3066,10 +3196,10 @@ function sharedmem_sz($tok)
   }
   $shm_sz = shmop_size($shm_id);
   shmop_close($shm_id);
   }
   $shm_sz = shmop_size($shm_id);
   shmop_close($shm_id);
-  
+
   // log_main("shm_sz: ".$shm_sz."   SHM_DIMS: ".SHM_DIMS);
   return ($shm_sz);
   // log_main("shm_sz: ".$shm_sz."   SHM_DIMS: ".SHM_DIMS);
   return ($shm_sz);
-}    
+}
 
 class Warrant {
     static $delta_t;
 
 class Warrant {
     static $delta_t;
@@ -3079,17 +3209,17 @@ class Warrant {
       if (($res = file_lock(FTOK_PATH."/warrant", $is_exclusive)) != FALSE) {
           self::$delta_t = microtime(TRUE);
           log_lock("LOCK   warrant      [".self::$delta_t."]");
       if (($res = file_lock(FTOK_PATH."/warrant", $is_exclusive)) != FALSE) {
           self::$delta_t = microtime(TRUE);
           log_lock("LOCK   warrant      [".self::$delta_t."]");
-          
+
           return ($res);
       }
 
       return (FALSE);
   }
           return ($res);
       }
 
       return (FALSE);
   }
-  
+
   static function unlock_data($res)
   {
   static function unlock_data($res)
   {
-    GLOBAL $sess; 
-    
+    GLOBAL $sess;
+
     log_lock("UNLOCK warrant      [".(microtime(TRUE) - (self::$delta_t))."]");
 
     file_unlock($res);
     log_lock("UNLOCK warrant      [".(microtime(TRUE) - (self::$delta_t))."]");
 
     file_unlock($res);
@@ -3104,19 +3234,19 @@ class Poll {
       if (($res = file_lock(FTOK_PATH."/poll", $is_exclusive)) != FALSE) {
           self::$delta_t = microtime(TRUE);
           log_lock("LOCK   poll         [".self::$delta_t."]");
       if (($res = file_lock(FTOK_PATH."/poll", $is_exclusive)) != FALSE) {
           self::$delta_t = microtime(TRUE);
           log_lock("LOCK   poll         [".self::$delta_t."]");
-          
+
           return ($res);
       }
 
       return (FALSE);
   }
           return ($res);
       }
 
       return (FALSE);
   }
-  
+
   static function unlock_data($res)
   {
   static function unlock_data($res)
   {
-    GLOBAL $sess; 
-    
+    GLOBAL $sess;
+
     log_lock("UNLOCK poll         [".(microtime(TRUE) - (self::$delta_t))."]");
     log_lock("UNLOCK poll         [".(microtime(TRUE) - (self::$delta_t))."]");
-    
+
     file_unlock($res);
   }
 }
     file_unlock($res);
   }
 }