X-Git-Url: http://mop.ddnsfree.com/gitweb/?p=brisk.git;a=blobdiff_plain;f=web%2FObj%2Fbrisk.phh;h=a171273782a7f67b33ce115c68d427d4db0638a3;hp=1fbfa0a927615fe182015a3779d624d41165f23c;hb=6d8db1ee47d3c0bb14133d3ab2e0a6bdc7ed60a0;hpb=2dc23b5fe6d39097b02a5ce367bb50b442498889 diff --git a/web/Obj/brisk.phh b/web/Obj/brisk.phh index 1fbfa0a..a171273 100644 --- a/web/Obj/brisk.phh +++ b/web/Obj/brisk.phh @@ -2,8 +2,8 @@ /* * brisk - brisk.phh * - * Copyright (C) 2006-2013 Matteo Nastasi - * mailto: nastasi@alternativeoutput.it + * Copyright (C) 2006-2015 Matteo Nastasi + * mailto: nastasi@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('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))); @@ -59,26 +60,28 @@ define('WAKEUP_TIME', 12); // BAN_TIME da allineare anche in commons.js define('BAN_TIME', 3600); define('GARBAGE_TIMEOUT', 5); -define('NICKSERV', "BriskServ"); +define('NICKSERV', "BriskServ"); define('LOCK_SHARE_MAX', 10000); -define('DBG_ONL2', 0x0001); -define('DBG_ONLY', 0x0002); -define('DBG_MAIN', 0x0004); -define('DBG_READ', 0x0008); -define('DBG_REA2', 0x0010); -define('DBG_SEND', 0x0020); -define('DBG_LOCK', 0x0040); -define('DBG_WRIT', 0x0080); -define('DBG_LOAD', 0x0100); -define('DBG_AUTH', 0x0200); -define('DBG_CRIT', 0x0400); -define('DBG_LMOP', 0x0800); -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_ONL2', 0x000001); +define('DBG_ONLY', 0x000002); +define('DBG_MAIN', 0x000004); +define('DBG_READ', 0x000008); +define('DBG_REA2', 0x000010); +define('DBG_SEND', 0x000020); +define('DBG_LOCK', 0x000040); +define('DBG_WRIT', 0x000080); +define('DBG_LOAD', 0x000100); +define('DBG_AUTH', 0x000200); +define('DBG_CRIT', 0x000400); +define('DBG_LMOP', 0x000800); +define('DBG_TRAC', 0x001000); +define('DBG_SHME', 0x002000); +define('DBG_ENGI', 0x004000); +define('DBG_CDS', 0x008000); +define('DBG_STEP', 0x010000); +// NOTE: BRISK DEBUG must be a numerical constant, not the result of operations on symbols define('BRISK_DEBUG', 0x0800); define('BRISK_SINGLE_DEBUG',0); @@ -86,6 +89,7 @@ define('BRISK_SINGLE_SESS', ""); define('DEBUGGING', "no-debugging"); require_once("$DOCUMENT_ROOT/Etc/".BRISK_CONF); +require_once("${G_base}Obj/ipclass.phh"); $mlang_brisk = array( 'btn_backstand'=> array( 'it' => 'torna in piedi', 'en' => 'back standing' ), @@ -95,7 +99,7 @@ $mlang_brisk = array( 'btn_backstand'=> array( 'it' => 'torna in piedi', 'tit_all' => array( 'it' => 'tutti', 'en' => 'all' ), - 'tabtout_a'=> array( 'it' => '
Sei stato inattivo per ', + 'tabtout_a'=> array( 'it' => '
Sei stato inattivo per ', 'en' => '
You are being idle for ' ), 'tabtout_b'=> array( 'it' => ' minuti.

Quindi ritorni tra i Giocatori in piedi.', 'en' => ' minutes.

Then you return with the standing players.'), @@ -107,10 +111,10 @@ $mlang_brisk = array( 'btn_backstand'=> array( 'it' => 'torna in piedi', 'en' => 'EN
The signalling message of the table
will be deactivated for %d second%s.

'), 'alarpass' => array( 'it' => '
La password digitata non è corretta.

', 'en' => '
The entered password is not correct.

'), - 'alarret' => array( 'it' => '"Alarm \\"%s\\" inviato a %s."', - 'en' => '"Alarm \\"%s\\" sent to %s."'), - 'authmust' => array( 'it' => 'Per autenticare qualcuno devi a tua volta essere autenticato.', - 'en' => 'To authenticate someone you have to be authenticated.'), // on your turn + 'alarret' => array( 'it' => 'Alarm \\"%s\\" inviato a %s.', + 'en' => 'Alarm \\"%s\\" sent to %s.'), + 'authmust' => array( 'it' => 'Per autenticare qualcuno devi a tua volta essere autenticato e certificato.', + 'en' => 'To authenticate someone you have to be authenticated and certified.'), // on your turn 'mesgmust' => array( 'it' => 'Per inviare un messaggio devi essere autenticato.', 'en' => 'To send a message you have to be authenticated.'), 'nickmust' => array( 'it' => 'Il nickname deve contenere almeno una lettera dell\'alfabeto o una cifra.', @@ -136,26 +140,24 @@ $mlang_brisk = array( 'btn_backstand'=> array( 'it' => 'torna in piedi', 'en' => 'Connection to the database failed
All authentications are suspended temporarly, you login as normal user.
We are about the limitation'), 'tos_old' => array( 'it' => '%s ha sottoscritto dei Termini del Servizio antecedenti a quelli necessari per poter richiedere questa funzionalità.', - 'en' => 'EN %s ha sottoscritto dei Termini del Servizio antecedenti a quelli necessari per poter richiedere questa funzionalità.'), - 'gua_nfd' => array( 'it' => 'Non è stato trovato un garante per %s.', + 'en' => 'EN %s ha sottoscritto dei Termini del Servizio antecedenti a quelli necessarig per poter richiedere questa funzionalità.'), + 'inf_self' => array( 'it' => 'Non puoi informarti su te stesso.', + 'en' => 'EN Non puoi informarti su te stesso.'), + 'inf_nfd' => array( 'it' => 'Non è stato trovato un garante per %s.', 'en' => 'EN Non è stato trovato un garante per %s.'), - 'gua_self' => array( 'it' => '%s si è auto-garantito.', - 'en' => 'EN %s si è auto-garantito.'), - 'gua_info' => array( 'it' => 'Il garante di %s è %s.', - 'en' => 'EN Il garante di %s è %s.'), - 'gua_err' => array( 'it' => 'Error %d. Utilizzo: /guar <login>.', - 'en' => 'Error %d. Usage: /guar <login>.') + 'inf_err' => array( 'it' => 'Error %d. Utilizzo: /info <login>.', + 'en' => 'Error %d. Usage: /info <login>.') ); $G_lng = langtolng($G_lang); $G_all_points = array( 11,10,4,3,2, 0,0,0,0,0 ); -$G_brisk_version = "4.12.4"; +$G_brisk_version = "4.18.5"; /* MLANG: ALL THE INFO STRINGS IN brisk.phh */ -$root_wellarr = array( 'it' => array ( 'Brisk (Ver. '.$G_brisk_version.'), NOVITA\': potenziato il sistema di debug.', +$root_wellarr = array( 'it' => array ( 'Brisk (Ver. '.$G_brisk_version.'), NOVITA\': Puffin riattivato, accessi da cloud disattivati, corretto bug sulla gestione di puffin, riabilitato blocco dei proxy.', 'Se vuoi iscriverti alla Mailing List, cliccala!' ), - 'en' => array ( 'Brisk (Ver. '.$G_brisk_version.'), NEWS: empowered logging system.', + 'en' => array ( 'Brisk (Ver. '.$G_brisk_version.'), NEWS: Puffin re-enabled, cloud accesses disabled, fixed puffin mgmt bug, re-enabled proxy access block.', 'If you want to subscribe our Mailing List, click it!' ) ); $G_room_help = array( 'it' => ' @@ -180,10 +182,10 @@ Dopo che è iniziata una partita per uscirne dovete chiedere agli altri gi
Comandi della chat
/nick <nuovo_nickname> - cambio di nickname -
/tav <frase di invito> - invito per gli altri giocatori al tavolo dove si è seduti +
/tav <frase di invito> - invito per gli altri giocatori al tavolo dove si è seduti
/st <stato> - cambia l\'icona associata al tuo user; stato può valere: \\"normale\\", \\"fuori\\", \\"pausa\\", \\"cibo\\", \\"cane\\", \\"lavoro\\", \\"presente\\" oppure \\"sigaretta\\"
/cont <id partita> - quando si è a un tavolo per garantiti, permette di proseguire una partita giocata in precedenza con gli stessi giocatori -
/guar <login> - mostra il garante dell\'utente con il login passato come argomento +
/info <login> - mostra lo stato corrente dell\'utente passato come argomento e in che relazione siete
/authreq - se si è autenticati permette di garantire per un utente fidato
/mesgtoadm - se si è autenticati permette di lasciare un messaggio all\'amministratore del sito
/listen <all or auth> - se si è autenticati permette leggere solo i messaggi degli altri autenticati (auth) o di tutti (all) @@ -213,10 +215,10 @@ Dopo che è iniziata una partita per uscirne dovete chiedere agli altri gi
Comandi della chat
/nick <nuovo_nickname> - cambio di nickname -
/tav <frase di invito> - invito per gli altri giocatori al tavolo dove si è seduti +
/tav <frase di invito> - invito per gli altri giocatori al tavolo dove si è seduti
/st <stato> - cambia l\'icona associata al tuo user; stato può valere: \\"normale\\", \\"fuori\\", \\"pausa\\", \\"cibo\\", \\"cane\\", \\"lavoro\\", \\"presente\\" oppure \\"sigaretta\\"
/cont <id partita> - quando si è a un tavolo per garantiti, permette di proseguire una partita giocata in precedenza con gli stessi giocatori -
/guar <login> - mostra il garante dell\'utente con il login passato come argomento +
/info <login> - mostra lo stato corrente dell\'utente passato come argomento e in che relazione siete
/authreq - se si è autenticati permette di garantire per un utente fidato
/mesgtoadm - se si è autenticati permette di lasciare un messaggio all\'amministratore del sito
/listen <all or auth> - se si è autenticati permette leggere solo i messaggi degli altri autenticati (auth) o di tutti (all) @@ -224,12 +226,12 @@ Dopo che è iniziata una partita per uscirne dovete chiedere agli altri gi '); -// +// $G_room_passwdhowto = array( 'it' => '

Come registrarsi su Brisk

Attualmente ci sono due metodi per ottenere una password sul sito:

-
  • Facendosi garantire da un utente di Brisk che già possidede una password

    +
  • Facendosi garantire da un utente di Brisk che sia certificato.

  • Auto-garantendosi utilizzando uno dei seguenti sistemi di identificazione digitale:

  • Carta Regionale dei Servizi della Lombardia (la tessera sanitaria) @@ -243,13 +245,12 @@ Attualmente ci sono due metodi per ottenere una password sul sito:

  • il lettore di smart-card per collegare la carta al PC (acquistabile di solito presso le edicole)

  • -Per effettuare la registrazione collegarsi al sito:

    -
    -
    https://brisk.mine.nu -
    -

    +Per effettuare la registrazione collegarsi al sito: https://brisk.mine.nu +
    Se sei in possesso di una carta che permette l\'identificazione via internet che non è nell\'elenco qui sopra -fai una segnalazione. +fai una segnalazione.

    +Le regole per ottenere la certificazione sono in via di definizione, l\' unica accettata è la conoscenza +diretta dell\' utente da parte dell\' amministratore.
  • @@ -271,13 +272,13 @@ EN Attualmente ci sono due metodi per ottenere una password sul sito:

  • il lettore di smart-card per collegare la carta al PC (acquistabile di solito presso le edicole)
    -Per effettuare la registrazione collegarsi al sito:

    -
    -
    https://brisk.mine.nu -
    -

    +Per effettuare la registrazione collegarsi al sito: https://brisk.mine.nu +
    Se sei in possesso di una carta che permette l\'identificazione via internet che non è nell\'elenco qui sopra -fai una segnalazione. +fai una segnalazione.

    +Le regole per ottenere la certificazione sono in via di definizione, l\' unica accettata è la conoscenza +diretta dell\' utente da parte dell\' amministratore. + @@ -302,6 +303,150 @@ Copyright 2006-2012 Matteo Nasta
    version '.$G_brisk_version.'

    Copyright 2006-2012
    Matteo Nastasi (aka mop)

    '); + +$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 ip2int($s) +{ + return (ip2long($s)); +} + +function int2ip($i) +{ + return (long2ip($i)); +} + +function int2four($l) +{ + if (PHP_INT_SIZE == 4) + return ($l); + + return ( ($l & 0x80000000 ? 0xffffffff00000000 : 0x00) | $l ); +} + +function four2int($s) +{ + return ($s & 0xffffffff); +} + +function ip2four($s) +{ + return int2four( ip2int($s) ); +} + +function four2ip($i) +{ + return int2ip( four2int($i) ); +} + +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 @@ -332,6 +477,7 @@ function versions_cmp($v1, $v2) return 0; } +// return string with IPV4 address function addrtoipv4($addr) { $ipv4addr_arr = explode(':' , $addr); @@ -364,7 +510,7 @@ function file_lock($fname, $is_exclusive) if (($res = @fopen($fname, "r+")) == FALSE) { return (FALSE); } - + if (flock($res, ($is_exclusive ? LOCK_EX : LOCK_SH)) == FALSE) { fclose($res); return (FALSE); @@ -396,13 +542,13 @@ $escinp_to = array( """ ); function escinput($s) { GLOBAL $escinp_from, $escinp_to; - + return str_replace($escinp_from, $escinp_to, $s); } function eschtml($s) { - return htmlentities($s); + return htmlentities($s, ENT_COMPAT, "UTF-8"); } function esclfhtml($s) @@ -475,24 +621,29 @@ class Vect { { $this->el = $a; } - + function getbyid($idx) { return ($this->el[$idx]); } - + 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; - var $auth_only; // se tavolo riservato o libero + var $auth_type; // required authorization to sit down var $wag_own; var $wag_com; @@ -503,11 +654,11 @@ class Table { var $wakeup_time; - function Table() + function Table() { } - - function create($idx) + + function create($idx) { if (($thiz = new Table()) == FALSE) return (FALSE); @@ -515,7 +666,13 @@ class Table { $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 = ""; @@ -523,7 +680,7 @@ class Table { $thiz->table_token = ""; $thiz->table_start = 0; - + $thiz->wakeup_time = 0; return ($thiz); @@ -538,8 +695,8 @@ class Table { $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; @@ -560,19 +717,19 @@ class Table { return ($thiz); } - + 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->auth_only = $from->auth_only; + $thiz->auth_type = $from->auth_type; $thiz->wag_own = $from->wag_own; $thiz->wag_com = $from->wag_com; @@ -619,22 +776,22 @@ class Table { { $this->player[$this->player_n] = $idx; $this->player_n++; - + return ($this->player_n - 1); } - + function user_rem($brisk, $user) { $tabpos = $user->table_pos; - + /* 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++) { - $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--; } @@ -643,12 +800,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 = ""; @@ -660,15 +812,23 @@ class Table { 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() && !$user->is_appr()) + $act = "sitcert"; + else + $act = 'resercert'; + break; + case TABLE_AUTH_TY_AUTH: + if ($user->is_auth() && !$user->is_appr()) + $act = "sitreser"; + else + $act = 'reserved'; + break; + default: + $act = 'sit'; + break; + } } else { $act = 'none'; @@ -680,10 +840,10 @@ class Table { else $act = 'none'; } - + if ($act != '') $ret = sprintf('j_tab_act_cont(%d, \'%s\');', $table, $act); - + return ($ret); } } // end class Table @@ -829,11 +989,78 @@ class Client_prefs { } } +define('GHOST_SESS_TOUT', 1800); +define('GHOST_SESS_REAS_LOUT', 1); // logout +define('GHOST_SESS_REAS_ANOT', 2); // another user get session +define('GHOST_SESS_REAS_TOUT', 3); // room timeout +define('GHOST_SESS_REAS_TTOT', 4); // table timeout +define('GHOST_SESS_REAS_ANON', 5); // anonymizer access +define('GHOST_SESS_REAS_PROX', 6); // proxy access + +class GhostSessEl +{ + var $time; + var $sess; + var $reas; + + function GhostSessEl($time, $sess, $reas) + { + $this->time = $time + GHOST_SESS_TOUT; + $this->sess = $sess; + $this->reas = $reas; + } +} + +class GhostSess +{ + var $gs; + + function GhostSess() + { + $this->gs = array(); + } + + // push or update for this session + function push($time, $sess, $reas) + { + foreach($this->gs as $el) { + if ($el->sess == "$sess") { + $el->reas = $reas; + $el->time = $time + GHOST_SESS_TOUT; + return TRUE; + } + } + + $this->gs[] = new GhostSessEl($time, $sess, $reas); + return TRUE; + } + + function pop($sess) + { + foreach($this->gs as $key => $el) { + if ($el->sess == "$sess") { + $ret = $this->gs[$key]; + unset($this->gs[$key]); + return ($ret); + } + } + return FALSE; + } + + function garbage_manager($curtime) + { + foreach($this->gs as $key => $el) { + if ($el->time < $curtime) { + unset($this->gs[$key]); + } + } + } +} class Brisk { static $delta_t; - + var $crystal_filename; var $user; var $table; @@ -842,44 +1069,159 @@ class Brisk 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 $cloud_smasher; // list of cloud ip ranges to be rejected + var $ghost_sess; var $delay_mgr; + var $cds; + 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, $cloud_smasher) { + 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, $cloud_smasher); + + 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 = IpClass::create(); + $thiz->black_list = IpClass::create(); + $thiz->cloud_smasher = IpClass::create(); + $thiz->ghost_sess = new GhostSess(); + 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++) { - $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; + + $thiz->reload(TRUE, $ban_list, $black_list, $cloud_smasher); + + return ($thiz); + } + + function reload($is_first, $ban_list, $black_list, $cloud_smasher) + { + fprintf(STDERR, "RELOAD STUFF (%d)(%d)(%d)\n", + count($ban_list), count($black_list), count($cloud_smasher)); + + if (defined('CURL_DE_SAC_VERS')) { + if (brisk_cds_reload($this) == FALSE) { + exit(12); + } + } + $this->ban_list->update($ban_list); + $this->black_list->update($black_list); + $this->cloud_smasher->update($cloud_smasher); + + 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->is_active() == FALSE) + continue; + + // check if the IP is blacklisted + if ($this->black_check($user_cur->ip) || + $this->cloud_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) + { + return ($this->ban_list->check($ip_str)); + } + + function black_check($ip_str) + { + return ($this->black_list->check($ip_str)); + } + + function cloud_check($ip_str) + { + return ($this->cloud_smasher->check($ip_str)); + } + + function users_cleanup() + { + for ($i = 0 ; $i < MAX_PLAYERS ; $i++) { + $user_cur = $this->user[$i]; + + if ($user_cur->the_end) { + $user_cur->reset(); // users_cleanup, OK + } + } } function garbage_manager($force) @@ -899,16 +1241,16 @@ class Brisk $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++) { - $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); - - + + $no_recovery = FALSE; if (isset($this->match[$table_idx])) { $bin5 = $this->match[$table_idx]; @@ -926,45 +1268,50 @@ class Brisk // log_main("garbage_manager: bri loaded successfully."); $bin5->garbage_manager(TRUE); - + $bin5_table = $bin5->table[0]; - + // 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."); - + $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]; - + $user_cur->subst = $bin5_user->subst; + $user_cur->rd_step = $bin5_user->rd_step; $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->the_end = $bin5_user->the_end; + if ($user_cur->the_end) { + $this->ghost_sess->push($curtime, $user_cur->sess, GHOST_SESS_REAS_TTOT); + } } - + 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; - + $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; } @@ -972,12 +1319,12 @@ class Brisk } // 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(); - + $ret = sprintf('stat = "%s"; subst = "%s";', $user_cur->stat, $user_cur->subst); $ret .= "gst.st = ".($user_cur->step+1)."; "; // MLANG
    I dati del tavolo n° ".$user_cur->table." sono inconsistenti, verranno resettati.

    Torni in piedi.

    @@ -986,40 +1333,41 @@ class Brisk $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); - - $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++) { - + log_rd2("out new loop."); - + 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->is_active() == FALSE) 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)); - + + $this->ghost_sess->push($curtime, $user_cur->sess, GHOST_SESS_REAS_TOUT); + $user_cur->the_end = TRUE; + + log_rd2("AUTO LOGOUT."); if ($user_cur->stat == 'table' || $user_cur->stat == 'room') { log_auth($user_cur->sess, "Autologout session."); - - $user_cur->reset(); - - log_rd2("AUTO LOGOUT."); + if ($user_cur->subst == 'sitdown' || $user_cur->stat == 'table') $this->room_wakeup($user_cur); else if ($user_cur->subst == 'standup') @@ -1027,9 +1375,9 @@ class Brisk 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)."; "; @@ -1037,13 +1385,15 @@ 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(); } - } + } } log_rd2("GARBAGE UPDATED!"); - + $this->garbage_timeout = $curtime + GARBAGE_TIMEOUT; $ismod = TRUE; + $this->ghost_sess->garbage_manager($curtime); + $this->delay_mgr->lastcheck_set($curtime); return ($ismod); } @@ -1052,7 +1402,7 @@ class Brisk { 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); @@ -1076,7 +1426,7 @@ class Brisk $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)."; "; @@ -1089,12 +1439,11 @@ class Brisk 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); - 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); - else + else $ret .= sprintf('tra.rem(%d); ', $i); } $ret .= $this->standup_content($user); @@ -1102,7 +1451,6 @@ class Brisk return ($ret); } - function room_wakeup($user) { @@ -1115,80 +1463,75 @@ class Brisk $from_table = ($user->stat == "table"); if ($from_table) { - 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; - } - } + 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->is_active()) { + $user_cur->stat_set("room"); + $user_cur->subst = "standup"; + $user_cur->laccwr = $curtime; + $user_cur->table = -1; + } + } } else { - $user->stat_set("room"); - $user->subst = "standup"; - $user->laccwr = $curtime; + $user->stat_set("room"); + $user->subst = "standup"; + $user->laccwr = $curtime; } - + $remove_wagon = FALSE; if($table->wag_own == $user->idx_get()) { - $table->wag_reset($curtime); - $remove_wagon = TRUE; + $table->wag_reset($curtime); + $remove_wagon = TRUE; } - /* aggiorna l'array dei giocatori al tavolo. */ $table->user_rem($this, $user); for ($i = 0 ; $i < MAX_PLAYERS ; $i++) { $user_cur = $this->user[$i]; - if ($user_cur->sess == '' || $user_cur->stat != 'room') - continue; - + if ($user_cur->is_active() == FALSE || $user_cur->stat != 'room') // is not active user or the stat isn't 'room' + 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)) { - $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") { - 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); } - } - } - 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); - } + } } log_wr("ROOM_WAKEUP: ".$ret); $user_cur->comm[$user_cur->step % COMM_N] = $ret; @@ -1200,7 +1543,7 @@ class Brisk { $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(); @@ -1209,33 +1552,34 @@ 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); - + 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; - - $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_cur = $this->user[$table->player[$i]]; + log_main("PREIMPOST INLOOP name: ".$user_cur->name); + if ($user_cur->is_empty()) { + continue; + } + 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); + } + } + $user_tab[$user_tab_n++] = $table->player[$i]; } for ($wup_idx = 0 ; $wup_idx < $user_wup_n ; $wup_idx++) @@ -1246,9 +1590,9 @@ class Brisk for ($i = 0 ; $i < MAX_PLAYERS ; $i++) { 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; + if ($user_cur->is_active() == FALSE || $user_cur->stat != 'room') { // is not active user or the stat isn't 'room' + log_main("name: ".$user_cur->name."skip subst: ".$user_cur->subst); + continue; } log_main("___"); @@ -1256,45 +1600,42 @@ class Brisk $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 .= $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 .= $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; - // 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 -// 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); - 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; @@ -1302,10 +1643,11 @@ class Brisk } } - function guarantee_show($user, $user_login, $dt) + function info_show($user, $user_login, $dt) { GLOBAL $G_lang, $mlang_brisk, $G_base; + $mesg = ""; $user_code = -1; $ret = 0; @@ -1322,6 +1664,11 @@ class Brisk $ret = 3; break; } + if ($user_login == $user->name) { + $ret = 4; + $mesg = sprintf($mlang_brisk['inf_self'][$G_lang]); + break; + } if (($guar_item = $bdb->getitem_bycode($user_item->guar_code_get())) != FALSE) { $guar_login = $guar_item->login_get(); } @@ -1331,58 +1678,51 @@ class Brisk $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 = sprintf($mlang_brisk['tos_old'][$G_lang], xcape($user_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))); - } - 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))); - } - 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 = sprintf($mlang_brisk['inf_nfd'][$G_lang], xcape($user_login)); } } while (0); - if ($ret > 0) { - $mesg = sprintf('chatt_sub("%s", [2, "%s"],"%s");', $dt, NICKSERV, sprintf($mlang_brisk['gua_err'][$G_lang], $ret)); + if ($ret > 0 && $mesg == "") { + $mesg = sprintf($mlang_brisk['inf_err'][$G_lang], $ret); } - $user->comm[$user->step % COMM_N] = "gst.st = ".($user->step+1)."; ".$mesg; - $user->step_inc(); + if ($ret != 0) { + $jret = json_encode(array("ret" => $ret, "mesg" => $mesg)); + } + else { + $jret = json_encode(array("ret" => 0, "mesg" => "", "guar" => $guar_login)); + } - return TRUE; + return $jret; } function room_outstandup($user) { $this->room_sitdown($user, -1); } - + 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]; - + for ($i = 0 ; $i < MAX_PLAYERS ; $i++) { $ret = ""; $user_cur = $this->user[$i]; - if ($user_cur->sess == '' || $user_cur->stat != 'room') - continue; - + if ($user_cur->is_active() == FALSE || $user_cur->stat != 'room') // is not active user or the stat isn't 'room' + continue; + $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(); } @@ -1396,35 +1736,35 @@ class Brisk function room_sitdown($user, $table_idx) { log_main("room_sitdown ".($user == FALSE ? "USER: FALSE" : "USER: ".$user->name)); - + $train_app = ""; - - if ($table_idx > -1 && $table_idx < TABLES_N) { + + if ($table_idx > -1 && $table_idx < TABLES_N) { $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]) { - $train_app = sprintf("tra.rem(%d); ", $table_idx); + $train_app = sprintf("tra.rem(%d); ", $table_idx); $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') + if ($user_cur->is_active() == FALSE || $user_cur->stat != 'room') // is not active user or the stat isn't '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); - + if ($user->idx_get() == $i) { $ret .= 'subst = "sitdown"; tra.hide(); '; // clean the action buttons in other tables @@ -1434,8 +1774,7 @@ class Brisk } 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); } } @@ -1444,11 +1783,75 @@ class Brisk } } + function kickuser($user, $out_reas) + { + $curtime = time(); + + fprintf(STDERR, "MOP: GHOST_SESS: %d\n", $out_reas); + + $this->ghost_sess->push($curtime, $user->sess, $out_reas); + + fprintf(STDERR, "MOP: status out: %s %s %d\n", $user->stat, $user->subst, $user->idx); + if ($user->stat == 'table' && $user->subst != 'sitdown') { + $bin5 = &$this->match[$user->table]; + $user_bin5 = &$bin5->user[$user->table_pos]; + fprintf(STDERR, "MOP: status in: %s %s %d\n", $user_bin5->stat, $user_bin5->subst, $user_bin5->idx); + $bin5->table_wakeup($user_bin5); + $user->the_end = TRUE; + $this->room_wakeup($user); + return; + } + + if ($user->stat == 'table' || $user->stat == 'room') { + $user->the_end = TRUE; + if ($user->subst == 'sitdown' || $user->stat == 'table') { + $this->room_wakeup($user); + } + else if ($user->subst == 'standup') { + fprintf(STDERR, "MOP: KICK here [%s]\n", btrace_line(debug_backtrace())); + $this->room_outstandup($user); + } + else { + log_rd2("LOGOUT FROM WHAT ???"); + } + } + } + + function kickuser_by_name($name, $out_reas) + { + for ($i = 0 ; $i < MAX_PLAYERS ; $i++) { + $user_out = $this->user[$i]; + if (strcmp($user_out->name, $name) == 0) { + return ($this->kickuser($user_out, $out_reas)); + } + } + return FALSE; + } + + function kickuser_by_sess($sess, $out_reas) + { + for ($i = 0 ; $i < MAX_PLAYERS ; $i++) { + $user_out = $this->user[$i]; + if (strcmp($user_out->sess, $sess) == 0) { + return ($this->kickuser($user_out, $out_reas)); + } + } + return FALSE; + } + + function kickuser_by_idx($idx, $out_reas) + { + $user_out = $this->user[$idx]; + return ($this->kickuser($user_out, $out_reas)); + } + function chatt_send($user, $mesg) { GLOBAL $G_base, $G_alarm_passwd, $mlang_brisk, $G_lang; $only_you = FALSE; - + + fprintf(STDERR, "WE ARE HERE: [%s]\n", $mesg); + // common settings $msg = mb_substr($mesg, 6, 128, "UTF-8"); $curtime = time(); @@ -1467,7 +1870,7 @@ class Brisk /* 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') { @@ -1479,9 +1882,9 @@ class Brisk } $table = $this->table[$user->table]; - + if ($table->wag_own != -1) { - // MLANG
    Il messaggio di segnalazione del tavolo è già attivato.

    + // MLANG
    Il messaggio di segnalazione del tavolo è già attivato.

    $msg = $mlang_brisk['tickjust'][$G_lang]; $to_user = show_notify($msg, 0, "chiudi", 400, 100); @@ -1497,16 +1900,21 @@ class Brisk break; } - + $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; /* for old isolation management $is_ticker = TRUE; */ } while (0); } // /tav chat command - + // just for development use currently + else if (FALSE && strncmp($msg, "/out ", 5) == 0) { + fprintf(STDERR, "MOP OUT\n"); + $target = substr($msg, 5); + $this->kickuser_by_name($target, GHOST_SESS_REAS_ANON); + } else if (strncmp($msg, "/alarm ", 7) == 0) { if (strncmp($msg, "/alarm to ", 10) == 0) { $sp_pos = strpos($msg, " ", 10); @@ -1527,10 +1935,9 @@ class Brisk } /* MLANG: "Alarm %s inviato a %s." */ - $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)) ); - $to_user = sprintf('chatt_sub("%s", [2, "%s"],%s);', - $dt, NICKSERV, $prestr); + $to_user = nickserv_msg($dt, $prestr); $msg = sprintf("
    %s

    %s


    ", $dt.NICKSERV, xcape(substr($msg, strlen($alarm_check)))); @@ -1545,8 +1952,8 @@ class Brisk $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; @@ -1564,38 +1971,38 @@ class Brisk $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); - + } } else if (strcmp($msg, "/authreq") == 0) { - if ($user->flags & USER_FLAG_AUTH) { - $to_user = sprintf('authbox(300,200);'); - } - else { - /* MLANG: "Per autenticare qualcuno devi a tua volta essere autenticato.", "Il nickname deve contenere almeno una lettera dell\'alfabeto o una cifra.", "Nickname %s già 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: "Per autenticare qualcuno devi a tua volta essere autenticato.", "Il nickname deve contenere almeno una lettera dell\'alfabeto o una cifra.", "Nickname %s già in uso." */ + $to_user = nickserv_msg($dt, $mlang_brisk['authmust'][$G_lang]); + } } 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: "Per inviare un messaggio devi essere autenticato." */ - $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 (FALSE && strncmp($msg, "/nick ", 6) == 0) { log_main("chatt_send BEGIN"); 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; } @@ -1603,23 +2010,23 @@ class Brisk for ($i = 0 ; $i < MAX_PLAYERS ; $i++) { $user_cur = $this->user[$i]; - if ($user_cur->sess == '') + if ($user_cur->is_active() == FALSE) continue; if (strcasecmp($user_cur->name,$name_new) == 0) break; } 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; } - + /* MLANG: "Non puoi cambiare nick a un tavolo per soli autenticati.", "Il nickname \'%s\' è già registrato, se il suo proprietario si autentificherà verrai rinominato d\'ufficio come ghostN." */ - 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) && - ($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 @@ -1628,20 +2035,20 @@ class Brisk } } 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; } } } - $user->name = $name_new; // OK - nick changed + $user->name = $name_new; // OK - nick changed /* 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 \'%s\' è già registrato, se il suo proprietario si autentificherà verrai rinominato d\'ufficio come ghostN." */ 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); } } } @@ -1651,17 +2058,18 @@ class Brisk $update_room = TRUE; } while (0); } // nick chat command - else if (strncmp($msg, "/guar ", 6) == 0 || $msg == "/guar") { + else if (strncmp($msg, "/info ", 6) == 0) { $guar_user = substr($msg, 6); - $this->guarantee_show($user, $guar_user, $dt); + error_log("here [" . $guar_user."]"); + echo $this->info_show($user, $guar_user, $dt); } else if (strncmp($msg, "/st ", 4) == 0) { log_main("chatt_send BEGIN"); do { $st_str = substr($msg, 4); - + if (strcasecmp($st_str, "normale") == 0) { $st = USER_FLAG_S_NORM; } @@ -1712,7 +2120,7 @@ class Brisk } 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; } @@ -1728,9 +2136,9 @@ class Brisk $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) - $user->chat_dlt = 120; + $user->chat_dlt = 120; } else if ($user->chat_lst == $msg) $only_you = TRUE; @@ -1745,18 +2153,37 @@ class Brisk } 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 { - $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; + if ( TRUE && (! $user->is_auth()) ) { + $to_user = nickserv_msg($dt, xcape("Visto l'elevato numero di molestatori che ultimamente hanno preso dimora su Brisk abbiamo deciso")); + $to_user .= nickserv_msg($dt, xcape("di disattivare temporaneamente la chat in room per i non registrati, non ce ne vogliate e buone feste.")); + if (FALSE) { + $aug_head = array("Tanti", "Tantissimi", "Un enormità", "Un milione", "Un' esagerazione"); + $aug_body = array("a tutti gli utenti", "a tutti gli uomini", "a tutte le donne", "a tutti gli utenti"); + $aug_tail = array("di Brisk", "del sito", "della ciurma", "della comitiva", "del gruppo"); + + $auguri = sprintf("%s auguri %s %s.", + $aug_head[mt_rand(0, count($aug_head)-1)], + $aug_body[mt_rand(0, count($aug_body)-1)], + $aug_tail[mt_rand(0, count($aug_tail)-1)]); + + $to_room = sprintf('chatt_sub("%s",[%d,"%s"],"%s");', $dt, $user->flags, xcape($user->name), + xcape($auguri)); + } + } + 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_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++; @@ -1782,15 +2209,17 @@ class Brisk $user_cur = $this->user[$i]; if ($target != "" && $user_cur->name != $target) continue; - if ($user_cur->sess == '' || $user_cur->stat == 'table' || $user->idx_get() == $i) + if ($user_cur->is_active() == FALSE // is not active user + || $user_cur->stat == 'table' // or stat is 'table' + || $user->idx_get() == $i) // or the $user idx is equal to current var continue; - + 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 +2231,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] .= $to_room; + $user_cur->comm[$user_cur->step % COMM_N] .= $to_room; $user_cur->step_inc(); } } - + if ($to_tabl) { // FIXME BRISK4: include for each kind of table require_once("${G_base}briskin5/Obj/briskin5.phh"); @@ -1819,7 +2248,7 @@ class Brisk 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); @@ -1847,30 +2276,32 @@ class Brisk function get_user($sess, &$idx) { - GLOBAL $PHP_SELF; + GLOBAL $PHP_SELF; - 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 (validate_sess($sess)) { + for ($i = 0 ; $i < MAX_PLAYERS ; $i++) { + if ($this->user[$i]->is_empty()) + continue; + 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)); + // 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 strlen [%s]",$sess)); } - log_main(sprintf("get_user: Wrong sess from page [%s]",$PHP_SELF)); - // 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 strlen [%s]",$sess)); - } - return (FALSE); + return (FALSE); } /* - * function add_user(&$brisk, &$sess, &$idx, $name, $pass, $ip) + * function add_user(&$brisk, &$sess, &$idx, $name, $pass, $ip, $header, $cookie) * * RETURN VALUE: * if ($idx > -1 && ret == FALSE) => duplicated nick @@ -1878,10 +2309,10 @@ class Brisk * if ($idx == -3 && ret == FALSE) => wrong password * if ($idx == -1 && ret == FALSE) => no space left * if ($idx == 0 && ret == user) => SUCCESS - * if ($idx == -$idx && ret == user) => SUCCESS (but the login exists in the auth db) + * if ($idx == -($idx + 1) && ret == user) => SUCCESS (but the login exists in the auth db) */ - function add_user(&$sess, &$idx, $name, $pass, $ip, $cookie) + function add_user(&$sess, &$idx, $name, $pass, $ip, $header, $cookie) { GLOBAL $G_base; @@ -1902,7 +2333,7 @@ class Brisk } 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 */ @@ -1914,7 +2345,7 @@ class Brisk 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(); } @@ -1932,25 +2363,28 @@ class Brisk // no actions at this moment } for ($i = 0 ; $i < MAX_PLAYERS ; $i++) { - /* free user ? */ - if (strcmp($sess, $this->user[$i]->sess) == 0) { - if ($idx == -1) - $idx = $i; - } - if ($idfree == -1 && strcmp($this->user[$i]->sess, "") == 0) { - $idfree = $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); - } - else { - $idx = $i; - break; - } - } + /* free user ? */ + if ($this->user[$i]->is_empty()) { + if ($idfree == -1) { + $idfree = $i; + } + continue; + } + if (strcmp($sess, $this->user[$i]->sess) == 0) { + if ($idx == -1) { + $idx = $i; + } + } + if (strcasecmp($this->user[$i]->name, $name_new) == 0) { + if ($authenticate != FALSE) { + $ghost = $i; + $ghost_auth = $this->user[$i]->is_auth(); + } + else { + $idx = $i; + break; + } + } } if ($idx == -1) $idx = $idfree; @@ -1964,16 +2398,17 @@ class Brisk $ghost_user = $this->user[$ghost]; $curtime = time(); + $this->ghost_sess->push($curtime, $ghost_user->sess, GHOST_SESS_REAS_ANOT); $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; } - + // 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 +2425,9 @@ class Brisk } $idx = $ghost; + if (defined('CURL_DE_SAC_VERS')) { + brisk_cds_execute($this, $ghost, $idx, $sess, $ip, $authenticate, $header); + } return ($this->user[$ghost]); } else if ($idx != -1 && $i == MAX_PLAYERS) { @@ -1997,10 +2435,10 @@ class Brisk $curtime = time(); if ($sess == "") { $sess = uniqid(""); - $this->user[$idx]->sess = $sess; + $this->user[$idx]->sess = $sess; } 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"); @@ -2013,12 +2451,11 @@ class Brisk $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)); - + if ($authenticate != FALSE) { $this->user[$idx]->code = $authenticate->code_get(); if (0 == 1) { @@ -2053,9 +2490,9 @@ class Brisk 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; - + if (strcasecmp($this->user[$i]->name, $ghostname) == 0) { $ghostname = ''; break; @@ -2064,9 +2501,9 @@ class Brisk if ($ghostname != '') break; } - + $ghost_user->name = $ghostname; - + if ($ghost_user->stat == 'room' && $ghost_user->subst == 'standup') { $this->standup_update($ghost_user); } @@ -2090,145 +2527,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]; + if (defined('CURL_DE_SAC_VERS')) { + brisk_cds_execute($this, $ghost, $real_idx, $sess, $ip, $authenticate, $header); + } return ($ret); } return (FALSE); } - + function standup_update($user) { for ($i = 0 ; $i < MAX_PLAYERS ; $i++) { $user_cur = $this->user[$i]; - if ($user_cur->sess == '') - continue; + if ($user_cur->is_active() == FALSE) + continue; log_main("STANDUP START: ".$user_cur->stat); - + 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(); - } - 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); + } + log_main("FROM STANDUP: NAME: ".$user_cur->name." SENDED: ".$user_cur->comm[$user_cur->step % COMM_N]); - 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; - } + $user_cur->step_inc(); } - - // - // 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); @@ -2236,104 +2564,26 @@ class Brisk 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); } - - 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 = ""; - + 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++; - } - - // $content .= sprintf('', $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 == "") + if ($this->user[$i]->is_active() == FALSE // is not active user + || $this->user[$i]->stat != "room" // or the stat isn't 'room' + || $this->user[$i]->name == "") // or the name is empty, happens when user is reset (TODO: check it) continue; - + $flags = $this->user[$i]->flags; // sql record exists AND last donate > 2013-01-01 @@ -2348,17 +2598,17 @@ class Brisk 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 .= ' ]);'; - + return ($content); } - + function table_content($user, $table_idx) { $content = ""; @@ -2367,23 +2617,23 @@ class Brisk // // Si possono usare i dati nella classe table // - + $sess = $user->sess; $table = $this->table[$table_idx]; - + 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]]; - + $flags = $user_cur->flags; - + 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()); @@ -2397,16 +2647,29 @@ class Brisk $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) { - GLOBAL $G_black_list; + GLOBAL $G_ban_list, $G_black_list, $G_cloud_smasher; printf("NEW_SOCKET (root): %d PATH [%s]\n", intval($new_socket), $path); + fprintf(STDERR, "\n\n\n PRE_BLACK [%s]\n\n\n", $addr); + if ($this->black_check($addr)) { + // TODO: waiting async 5 sec before close + fprintf(STDERR, "\n\n\n BLACK CHECK\n\n\n"); + return (FALSE); + } + if ($path != "" && $path != "index.php") { + if ($this->cloud_check($addr)) { + // TODO: waiting async 5 sec before close + return (FALSE); + } + } + $enc = get_encoding($header); if (isset($header['User-Agent'])) { if (strstr($header['User-Agent'], "MSIE")) { @@ -2425,7 +2688,7 @@ class Brisk case "": case "index.php": ob_start(); - index_main($this, $transp_type, $header_out, $addr, $get, $post, $cookie); + index_main($this, $transp_type, $header, $header_out, $addr, $get, $post, $cookie); $content = ob_get_contents(); ob_end_clean(); @@ -2444,7 +2707,7 @@ class Brisk 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; @@ -2458,7 +2721,7 @@ class Brisk 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); @@ -2479,7 +2742,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"); - + $wret = @fwrite($new_socket, $response, $response_l); if ($wret < $response_l) { printf("TROUBLES WITH FWRITE: %d\n", $wret); @@ -2489,14 +2752,14 @@ class Brisk $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); - + return FALSE; break; case 'test.php': @@ -2540,7 +2803,7 @@ class Brisk 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]); } @@ -2572,12 +2835,12 @@ function btrace_line($ar) 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'] : "")); } - + return ($ret); } @@ -2594,19 +2857,19 @@ function trace_ftok($id, $add) function log_mop($step, $log) { GLOBAL $PHP_SELF; - + if (BRISK_SINGLE_SESS == "" && (BRISK_DEBUG & DBG_LMOP) == 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_LMOP) == 0) return; - + if ((BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_TRAC) $btrace = btrace_line(debug_backtrace()); else @@ -2617,23 +2880,77 @@ function log_mop($step, $log) } } +function log_step($log) +{ + GLOBAL $PHP_SELF; + + if (BRISK_SINGLE_SESS == "" && (BRISK_DEBUG & DBG_STEP) == 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_STEP) == 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."/step.log", 'a')) != FALSE) { + fwrite($fp, sprintf("STEP: [%f] [%s] [%s]\n", gettimeofday(TRUE), $log, $btrace)); + fclose($fp); + } +} + + + +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; - + if (BRISK_SINGLE_SESS == "" && (BRISK_DEBUG & DBG_ONL2) == 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_ONL2) == 0) return; - + if ((BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_TRAC) $btrace = btrace_line(debug_backtrace()); else @@ -2647,19 +2964,19 @@ function log_only2($log) function log_crit($log) { GLOBAL $PHP_SELF; - + if (BRISK_SINGLE_SESS == "" && (BRISK_DEBUG & DBG_CRIT) == 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_CRIT) == 0) return; - + if ((BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_TRAC) $btrace = btrace_line(debug_backtrace()); else @@ -2673,19 +2990,19 @@ function log_crit($log) function log_only($log) { GLOBAL $PHP_SELF; - + if (BRISK_SINGLE_SESS == "" && (BRISK_DEBUG & DBG_ONLY) == 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_ONLY) == 0) return; - + if ((BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_TRAC) $btrace = btrace_line(debug_backtrace()); else @@ -2699,19 +3016,19 @@ function log_only($log) function log_main($log) { GLOBAL $PHP_SELF; - + if (BRISK_SINGLE_SESS == "" && (BRISK_DEBUG & DBG_MAIN) == 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_MAIN) == 0) return; - + if ((BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_TRAC) $btrace = btrace_line(debug_backtrace()); else @@ -2725,23 +3042,23 @@ function log_main($log) function log_rd($log) { GLOBAL $PHP_SELF; - + if (BRISK_SINGLE_SESS == "" && (BRISK_DEBUG & DBG_READ) == 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_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); @@ -2751,24 +3068,24 @@ function log_rd($log) function log_rd2($log) { GLOBAL $PHP_SELF; - + if (BRISK_SINGLE_SESS == "" && (BRISK_DEBUG & DBG_REA2) == 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_REA2) == 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."/brisk.log", 'a')) != FALSE) { fwrite($fp, sprintf("REA2: [%s] [%s] [%s]\n", $ssess, $log, $btrace)); fclose($fp); @@ -2778,20 +3095,20 @@ function log_rd2($log) function log_send($log) { GLOBAL $PHP_SELF; - + if (BRISK_SINGLE_SESS == "" && (BRISK_DEBUG & DBG_SEND) == 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_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 = ""; @@ -2804,19 +3121,19 @@ function log_send($log) function log_lock($log) { GLOBAL $PHP_SELF; - + if (BRISK_SINGLE_SESS == "" && (BRISK_DEBUG & DBG_LOCK) == 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_LOCK) == 0) return; - + if ((BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_TRAC) $btrace = btrace_line(debug_backtrace()); else @@ -2830,19 +3147,19 @@ function log_lock($log) function log_wr($log) { GLOBAL $PHP_SELF; - + if (BRISK_SINGLE_SESS == "" && (BRISK_DEBUG & DBG_WRIT) == 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_WRIT) == 0) return; - + if ((BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_TRAC) $btrace = btrace_line(debug_backtrace()); else @@ -2856,19 +3173,19 @@ function log_wr($log) function log_load($log) { GLOBAL $PHP_SELF; - + if (BRISK_SINGLE_SESS == "" && (BRISK_DEBUG & DBG_LOAD) == 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_LOAD) == 0) return; - + if ((BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_TRAC) $btrace = btrace_line(debug_backtrace()); else @@ -2885,10 +3202,10 @@ function log_auth($sess, $log) 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_TRAC) $btrace = btrace_line(debug_backtrace()); else @@ -2902,19 +3219,19 @@ function log_auth($sess, $log) function log_shme($log) { GLOBAL $PHP_SELF; - + if (BRISK_SINGLE_SESS == "" && (BRISK_DEBUG & DBG_SHME) == 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_SHME) == 0) return; - + if ((BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_TRAC) $btrace = btrace_line(debug_backtrace()); else @@ -2934,7 +3251,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, - ($user->flags & USER_FLAG_AUTH ? 'A' : 'N'), + ($user->is_auth() ? 'A' : 'N'), $user->name, $addr, $where , $mesg)); fclose($fp); } @@ -2998,28 +3315,28 @@ function root_welcome($user) $curtime = time(); $dt = date("H:i ", $curtime); - + 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); } -function validate_sess($sess) +function validate_sess($sess) { - if (strlen($sess) == SESS_LEN) + if (strlen($sess) == SESS_LEN) 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")); - for ($i = 0 ; $i < strlen($name_new) ; $i++) { + for ($i = 0 ; $i < mb_strlen($name_new) ; $i++) { $c = $name_new[$i]; if (($c >= "a" && $c <= "z") || ($c >= "A" && $c <= "Z") || ($c >= "0" && $c <= "9")) return ($name_new); @@ -3042,16 +3359,16 @@ function secstoword($secs) $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 " : "")); - + 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 " : "")); - + if ($secs > 0) $ret .= sprintf("%d second%s", $secs, ($secs > 1 ? "i" : "o")); } @@ -3066,10 +3383,10 @@ function sharedmem_sz($tok) } $shm_sz = shmop_size($shm_id); shmop_close($shm_id); - + // log_main("shm_sz: ".$shm_sz." SHM_DIMS: ".SHM_DIMS); return ($shm_sz); -} +} class Warrant { static $delta_t; @@ -3079,17 +3396,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."]"); - + return ($res); } return (FALSE); } - + static function unlock_data($res) { - GLOBAL $sess; - + GLOBAL $sess; + log_lock("UNLOCK warrant [".(microtime(TRUE) - (self::$delta_t))."]"); file_unlock($res); @@ -3104,21 +3421,34 @@ class Poll { 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); } - + static function unlock_data($res) { - GLOBAL $sess; - + GLOBAL $sess; + log_lock("UNLOCK poll [".(microtime(TRUE) - (self::$delta_t))."]"); - + file_unlock($res); } } +function carousel_top() +{ + $what = rand(1,2); + if ($what == 1) { + $rn = rand(1, 3); + return (sprintf('il negozio virtuale di Brisk', $rn)); + } + else { + return (sprintf('il nuovo blog di Brisk')); + } +} + + ?>