5 * Copyright (C) 2006-2013 Matteo Nastasi
6 * mailto: nastasi@alternativeoutput.it
7 * matteo.nastasi@milug.org
8 * web: http://www.alternativeoutput.it
10 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License as published by
12 * the Free Software Foundation; either version 2 of the License, or
13 * (at your option) any later version.
15 * This program is distributed in the hope that it will be useful, but
16 * WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABLILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 * General Public License for more details. You should have received a
19 * copy of the GNU General Public License along with this program; if
20 * not, write to the Free Software Foundation, Inc, 59 Temple Place -
21 * Suite 330, Boston, MA 02111-1307, USA.
26 define('BRISK_CONF', "brisk.conf.pho");
27 define('FTOK_PATH', "/var/lib/brisk");
28 define('LEGAL_PATH', "/tmp/legal_brisk");
29 define('PROXY_PATH', "/var/lib/brisk_proxy");
30 define('TABLES_N', 36);
31 define('TABLES_AUTH_N', 8);
32 define('TABLES_CERT_N', 4);
33 define('PLAYERS_N', 3);
34 define('MAX_POINTS', 5);
35 define('MAX_PLAYERS', (20 + (PLAYERS_N * TABLES_N)));
36 define('SHM_DIMS_MIN', (50000 + 10000 * TABLES_N + 15000 * MAX_PLAYERS));
37 define('SHM_DIMS_MAX', SHM_DIMS_MIN + 1048576);
38 define('SHM_DIMS_DLT', 65536);
40 define('SHM_DIMS_U_MIN', 4096);
41 define('SHM_DIMS_U_MAX', 65536);
42 define('SHM_DIMS_U_DLT', 4096);
45 define('COMM_GEN_N', 50);
48 define('CHAT_ILL_TIME', 6);
49 define('CHAT_ENABLED', TRUE);
51 define('SESS_LEN', 13);
52 define('STREAM_TIMEOUT', 60);
53 /* FIXME: move to sac-a-push .phh */
54 /* TIME_RD define the server-side timeout, after half of it a ping request
55 is sent to client, after this time the client is log out */
56 define('EXPIRE_TIME_RD', 180);
57 define('EXPIRE_TIME_SMAMMA', 360);
58 define('EXPIRE_TIME_WAG', 10);
59 define('WAKEUP_TIME', 12);
60 // BAN_TIME da allineare anche in commons.js
61 define('BAN_TIME', 3600);
62 define('GARBAGE_TIMEOUT', 5);
63 define('NICKSERV', "BriskServ");
65 define('LOCK_SHARE_MAX', 10000);
67 define('DBG_ONL2', 0x0001);
68 define('DBG_ONLY', 0x0002);
69 define('DBG_MAIN', 0x0004);
70 define('DBG_READ', 0x0008);
71 define('DBG_REA2', 0x0010);
72 define('DBG_SEND', 0x0020);
73 define('DBG_LOCK', 0x0040);
74 define('DBG_WRIT', 0x0080);
75 define('DBG_LOAD', 0x0100);
76 define('DBG_AUTH', 0x0200);
77 define('DBG_CRIT', 0x0400);
78 define('DBG_LMOP', 0x0800);
79 define('DBG_TRAC', 0x1000);
80 define('DBG_SHME', 0x2000);
81 define('DBG_ENGI', 0x4000);
82 define('DBG_CDS', 0x8000);
83 // NOTE: BRISK DEBUG must be a numerical constant, not the result of operations on symbols
84 define('BRISK_DEBUG', 0x0800);
86 define('BRISK_SINGLE_DEBUG',0);
87 define('BRISK_SINGLE_SESS', "");
88 define('DEBUGGING', "no-debugging");
90 require_once("$DOCUMENT_ROOT/Etc/".BRISK_CONF);
92 $mlang_brisk = array( 'btn_backstand'=> array( 'it' => 'torna in piedi',
93 'en' => 'back standing' ),
94 'btn_close' => array( 'it' => 'chiudi',
97 'tit_all' => array( 'it' => 'tutti',
100 'tabtout_a'=> array( 'it' => '<br>Sei stato inattivo per ',
101 'en' => '<br>You are being idle for ' ),
102 'tabtout_b'=> array( 'it' => ' minuti. <br><br>Quindi ritorni tra i <b>Giocatori in piedi</b>.',
103 'en' => ' minutes. <br><br>Then you return with the <b>standing players</b>.'),
104 'tickmust' => array( 'it' => '<br>Per attivare il messaggio di segnalazione del tavolo occorre essere seduti.<br><br>',
105 'en' => '<br>To activate the signalling message of the table it\'s necessary to be sitting<br><br>'),
106 'tickjust' => array( 'it' => '<br>Il messaggio di segnalazione del tavolo è già attivato.<br><br> ',
107 'en' => 'EN<br>Il messaggio di segnalazione del tavolo è già attivato.<br><br> '),
108 'tickwait' => array( 'it' => '<br>Il messaggio di segnalazione del tavolo<br>è disattivato ancora per %d second%s.<br><br>',
109 'en' => 'EN<br>The signalling message of the table<br>will be deactivated for %d second%s.<br><br>'),
110 'alarpass' => array( 'it' => '<br>La password digitata non è corretta.<br><br>',
111 'en' => '<br>The entered password is not correct.<br><br>'),
112 'alarret' => array( 'it' => 'Alarm \\"<b>%s</b>\\" inviato a <b>%s</b>.',
113 'en' => 'Alarm \\"<b>%s</b>\\" sent to <b>%s</b>.'),
114 'authmust' => array( 'it' => '<b>Per autenticare qualcuno devi a tua volta essere autenticato e certificato.</b>',
115 'en' => '<b>To authenticate someone you have to be authenticated and certified.</b>'), // on your turn
116 'mesgmust' => array( 'it' => '<b>Per inviare un messaggio devi essere autenticato.</b>',
117 'en' => '<b>To send a message you have to be authenticated.</b>'),
118 'nickmust' => array( 'it' => 'Il nickname deve contenere almeno una lettera dell\'alfabeto o una cifra.',
119 'en' => 'The nickname have to contain at least one letter or one number.'),
120 'nickdupl' => array( 'it' => 'Nickname <b>%s</b> già in uso.',
121 'en' => 'The nickname <b>%s</b> is already in use.'),
122 'authchan' => array( 'it' => '<b>Non puoi cambiare nick a un tavolo per soli autenticati o se sei in modalità isolata.</b>',
123 'en' => '<b>You can\'t change your nickname into a table for only authenticated or if you are in isolation mode.</b>'),
124 'nickjust' => array( 'it' => 'Il nickname <b>\'%s\'</b> è già registrato, <b>se il suo proprietario si autentificherà verrai rinominato d\'ufficio come ghost<i>N</i>.</b>',
125 'en' => 'The nickname <b>\'%s\'</b> is already registered, <b>if its proprietary will authenticate you will named again officially ghost<i>N</i>.</b>'), // FIXME: him ???
126 'statunkn' => array( 'it' => 'Questo stato non esiste.',
127 'en' => 'This state don\'t exists.'),
128 'tabincon' => array( 'it' => '<br>I dati del tavolo n° %d sono inconsistenti, verranno resettati.<br><br>Torni in piedi.<br><br>',
129 'en' => 'EN <br>I dati del tavolo n° %d sono inconsistenti, verranno resettati.<br><br>Torni in piedi.<br><br>'),
130 'listmust' => array( 'it' => '<b>Per andare in isolamento non bisogna essere seduti a tavoli non riservati.</b>',
131 'en' => '<b>To go to isolation you must don\'t stay on not reserved tables</b>'),
133 'tit_onauth'=>array( 'it' => '(solo aut.)',
134 'en' => '(only aut.)'),
135 'tit_onisol'=>array( 'it' => '(isolam.to)',
136 'en' => '(isolation)'),
137 'db_failed' =>array('it' => '<br>Il collegamento al database è fallito.<br>Temporaneamente tutte le autenticazioni verranno sospese, accederai a Brisk come un utente normale.<br><br>Ci scusiamo per il disagio.',
138 'en' => 'Connection to the database failed<br>All authentications are suspended temporarly, you login as normal user.<br>We are about the limitation'),
140 'tos_old' => array( 'it' => '<b>%s</b> ha sottoscritto dei Termini del Servizio antecedenti a quelli necessari per poter richiedere questa funzionalità.',
141 'en' => 'EN <b>%s</b> ha sottoscritto dei Termini del Servizio antecedenti a quelli necessari per poter richiedere questa funzionalità.'),
142 'gua_nfd' => array( 'it' => 'Non è stato trovato un garante per <b>%s</b>.',
143 'en' => 'EN Non è stato trovato un garante per <b>%s</b>.'),
144 'gua_self' => array( 'it' => '<b>%s</b> si è auto-garantito.',
145 'en' => 'EN <b>%s</b> si è auto-garantito.'),
146 'gua_info' => array( 'it' => 'Il garante di <b>%s</b> è <b>%s</b>.',
147 'en' => 'EN Il garante di <b>%s</b> è <b>%s</b>.'),
148 'gua_err' => array( 'it' => 'Error %d. Utilizzo: <b>/guar <i><login></i></b>.',
149 'en' => 'Error %d. Usage: <b>/guar <i><login></i></b>.')
152 $G_lng = langtolng($G_lang);
154 $G_all_points = array( 11,10,4,3,2, 0,0,0,0,0 );
155 $G_brisk_version = "4.14.5";
157 /* MLANG: ALL THE INFO STRINGS IN brisk.phh */
158 $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',
159 'Se vuoi iscriverti alla <a target="_blank" href="mailto:ml-briscola+subscribe@milug.org">Mailing List</a>, cliccala!' ),
160 'en' => array ( 'Brisk (Ver. '.$G_brisk_version.'), <b>NEWS</b>: new users subscription system, refactored sidebanner system.',
161 'If you want to subscribe our <a target="_blank" href="ml-briscola+subscribe@milug.org">Mailing List</a>, click it!' ) );
163 $G_room_help = array( 'it' => '
164 <div style=\\"text-align: left; padding: 8px;\\">
165 <b>Descrizione</b><br>
166 Questa è un\'implementazione della briscola in cinque, così come è spiegata su
167 <a target=\\"_blank\\" href=\\"http://it.wikipedia.org/wiki/Briscola#Gioco_a_5\\">Wikipedia</a>; in breve è la variante con l\'asta prima sulla carta e poi sui punti.<br><br>
168 <b>Configurazione del browser.</b><br>
169 Occorre abilitare i cookies.<br>
171 <b>Uso del sito</b><br>
172 Potete sedervi a un tavolo o rimanere in piedi.<br>
173 Se al vostro tavolo si raggiungono i 5 giocatori inizia automaticamente la partita.<br>
176 All\'inizio vengono distribuite le carte e parte l\'asta; per partecipare all\'asta, quando sarà il vostro turno, potrete scegliere se andare avanti o passare cliccando sulle icone corrispondenti. Se si arriva ai punti, scrivete nella textbox il vostro rilancio e cliccate PUNTI.<br><br>
177 Chi vince l\'asta dovrà decidere il seme della carta scelta e inizierà la mano.<br>
178 Per giocare le carte dovrete trascinarle nel quadrato al centro del vostro schermo.<br><br>
179 Il vostro turno è sempre segnalato da una cornice verde lampeggiante intorno al quadrato al centro del vostro schermo.<br><br>
180 Durante la partita, se vorrete ricaricare la pagina, usate l\'apposito bottone \\"reload\\" in basso a destra.<br>
181 Dopo che è iniziata una partita per uscirne dovete chiedere agli altri giocatori di sbloccarla cliccando sul lucchetto. Se non si segue questa prassi, una volta usciti, non vi potrete sedere a nessun tavolo per '.floor(BAN_TIME/60).' minuti.
183 <dt><b>Comandi della chat</b>
184 <dd><b>/nick <i><nuovo_nickname></i></b> - cambio di nickname
185 <dd><b>/tav <i><frase di invito></i></b> - invito per gli altri giocatori al tavolo dove si è seduti
186 <dd><b>/st <i><stato></i></b> - cambia l\'icona associata al tuo user; <i>stato</i> può valere: \\"normale\\", \\"fuori\\", \\"pausa\\", \\"cibo\\", \\"cane\\", \\"lavoro\\", \\"presente\\" oppure \\"sigaretta\\"
187 <dd><b>/cont <i><id partita></i></b> - quando si è a un tavolo per garantiti, permette di proseguire una partita giocata in precedenza con gli stessi giocatori
188 <dd><b>/guar <i><login></i></b> - mostra il garante dell\'utente con il login passato come argomento
189 <dd><b>/authreq</b> - se si è autenticati permette di garantire per un utente fidato
190 <dd><b>/mesgtoadm</b> - se si è autenticati permette di lasciare un messaggio all\'amministratore del sito
191 <dd><b>/listen <all or auth></b> - se si è autenticati permette leggere solo i messaggi degli altri autenticati (auth) o di tutti (all)
197 <div style=\\"text-align: left; padding: 8px;\\">
198 <b>EN Descrizione</b><br>
199 EN Questa è un\'implementazione della briscola in cinque, così come è spiegata su
200 <a target=\\"_blank\\" href=\\"http://it.wikipedia.org/wiki/Briscola#Gioco_a_5\\">Wikipedia</a>; in breve è la variante con l\'asta prima sulla carta e poi sui punti.<br><br>
201 <b>Configurazione del browser.</b><br>
202 Occorre abilitare i cookies.<br>
204 <b>Uso del sito</b><br>
205 Potete sedervi a un tavolo o rimanere in piedi.<br>
206 Se al vostro tavolo si raggiungono i 5 giocatori inizia automaticamente la partita.<br>
209 All\'inizio vengono distribuite le carte e parte l\'asta; per partecipare all\'asta, quando sarà il vostro turno, potrete scegliere se andare avanti o passare cliccando sulle icone corrispondenti. Se si arriva ai punti, scrivete nella textbox il vostro rilancio e cliccate PUNTI.<br><br>
210 Chi vince l\'asta dovrà decidere il seme della carta scelta e inizierà la mano.<br>
211 Per giocare le carte dovrete trascinarle nel quadrato al centro del vostro schermo.<br><br>
212 Il vostro turno è sempre segnalato da una cornice verde lampeggiante intorno al quadrato al centro del vostro schermo.<br><br>
213 Durante la partita, se vorrete ricaricare la pagina, usate l\'apposito bottone \\"reload\\" in basso a destra.<br>
214 Dopo che è iniziata una partita per uscirne dovete chiedere agli altri giocatori di sbloccarla cliccando sul lucchetto. Se non si segue questa prassi, una volta usciti, non vi potrete sedere a nessun tavolo per '.floor(BAN_TIME/60).' minuti.
216 <dt><b>Comandi della chat</b>
217 <dd><b>/nick <i><nuovo_nickname></i></b> - cambio di nickname
218 <dd><b>/tav <i><frase di invito></i></b> - invito per gli altri giocatori al tavolo dove si è seduti
219 <dd><b>/st <i><stato></i></b> - cambia l\'icona associata al tuo user; <i>stato</i> può valere: \\"normale\\", \\"fuori\\", \\"pausa\\", \\"cibo\\", \\"cane\\", \\"lavoro\\", \\"presente\\" oppure \\"sigaretta\\"
220 <dd><b>/cont <i><id partita></i></b> - quando si è a un tavolo per garantiti, permette di proseguire una partita giocata in precedenza con gli stessi giocatori
221 <dd><b>/guar <i><login></i></b> - mostra il garante dell\'utente con il login passato come argomento
222 <dd><b>/authreq</b> - se si è autenticati permette di garantire per un utente fidato
223 <dd><b>/mesgtoadm</b> - se si è autenticati permette di lasciare un messaggio all\'amministratore del sito
224 <dd><b>/listen <all or auth></b> - se si è autenticati permette leggere solo i messaggi degli altri autenticati (auth) o di tutti (all)
230 $G_room_passwdhowto = array( 'it' => '<br><h2>Come registrarsi su Brisk</h2>
231 <div style=\\"text-align: left; padding: 8px;\\">
232 Attualmente ci sono due metodi per ottenere una password sul sito:<br><br>
234 <li><b>Facendosi garantire da un utente di Brisk che sia certificato.</b><br><br>
235 <li><b>Auto-garantendosi utilizzando uno dei seguenti sistemi di identificazione digitale:</b><br><br>
237 <li>Carta Regionale dei Servizi della Lombardia (la tessera sanitaria)
238 <li>Carta Regionale dei Servizi del Friuli Venezia Giulia (la tessera sanitaria)
239 <li>Smart card di InfoCamere
242 <b>Per auto-garantisi occorre possedere:</b><br><br>
244 <li>il codice PIN della propria carta
245 <li>il lettore di smart-card per collegare la carta al PC (acquistabile di solito presso le edicole)
248 <b>Per effettuare la registrazione collegarsi al sito:</b> <a class=\\"flat\\" target=\\"_blank\\" href=\\"https://brisk.mine.nu\\">https://brisk.mine.nu</a>
250 Se sei in possesso di una carta che permette l\'identificazione via internet che non è nell\'elenco qui sopra
251 <a class=\\"flat\\" href=\\"mailto:authadmbrisk@alternativeoutput.it\\">fai una segnalazione</a>.<br><br>
252 Le regole per ottenere la certificazione sono in via di definizione, l\' unica accettata è la conoscenza
253 diretta dell\' utente da parte dell\' amministratore.
258 'en' => '<br><h2>EN Come registrarsi su Brisk</h2>
259 <div style=\\"text-align: left; padding: 8px;\\">
260 EN Attualmente ci sono due metodi per ottenere una password sul sito:<br><br>
262 <li><b>Facendosi garantire da un utente di Brisk che già possidede una password</b><br><br>
263 <li><b>Auto-garantendosi utilizzando uno dei seguenti sistemi di identificazione digitale:</b><br><br>
265 <li>Carta Regionale dei Servizi della Lombardia (la tessera sanitaria)
266 <li>Carta Regionale dei Servizi del Friuli Venezia Giulia (la tessera sanitaria)
269 <b>Per auto-garantisi occorre possedere:</b><br><br>
271 <li>il codice PIN della propria carta
272 <li>il lettore di smart-card per collegare la carta al PC (acquistabile di solito presso le edicole)
275 <b>Per effettuare la registrazione collegarsi al sito:</b> <a class=\\"flat\\" target=\\"_blank\\" href=\\"https://brisk.mine.nu\\">https://brisk.mine.nu</a>
277 Se sei in possesso di una carta che permette l\'identificazione via internet che non è nell\'elenco qui sopra
278 <a class=\\"flat\\" href=\\"mailto:authadmbrisk@alternativeoutput.it\\">fai una segnalazione</a>.<br><br>
279 Le regole per ottenere la certificazione sono in via di definizione, l\' unica accettata è la conoscenza
280 diretta dell\' utente da parte dell\' amministratore.
287 <dd>Seguendo la procedura di auto-garanzia all\'url: <a href="https://brisk.mine.nu">https://brisk.mine.nu</a>
291 $G_room_about = array( 'it' => '<br>
292 <div id=\\"header\\" class=\\"header\\">
293 <img class=\\"nobo\\" src=\\"img/brisk_logo64.png\\">
294 briscola chiamata in salsa ajax
296 <br><b>version '.$G_brisk_version.'</b><br><br>
297 Copyright 2006-2012 <a href=\\"mailto:brisk@alternativeoutput.it\\">Matteo Nastasi</a> (aka mop)<br><br>',
299 <div id=\\"header\\" class=\\"header\\">
300 <img class=\\"nobo\\" src=\\"img/brisk_logo64.png\\">
301 declaration briscola in ajax sauce <b>(Beta)</b>
303 <br><b>version '.$G_brisk_version.'</b><br><br>
304 Copyright 2006-2012 <a href=\\"mailto:brisk@alternativeoutput.it\\">Matteo Nastasi</a> (aka mop)<br><br>');
307 $G_PG_vow = array("a", "e", "i", "o", "u", "y");
310 "b", "bb", "bc", "bd", "bf", "bg", "bk", "bl", "bm", "bn", "bp", "br", "bs", "bt", "bv", "bw", "bz",
311 "c", "cb", "cc", "cd", "cf", "cg", "ck", "cl", "cm", "cn", "cp", "cq", "cr", "cs", "ct", "cv", "cw", "cx", "cz",
312 "d", "db", "dc", "dd", "df", "dg", "dk", "dl", "dm", "dn", "dp", "dr", "ds", "dt", "dv", "dw", "dx", "dz",
313 "f", "fb", "fc", "fd", "ff", "fg", "fk", "fl", "fm", "fn", "fp", "fr", "fs", "ft", "fv", "fw", "fx", "fz",
314 "g", "gb", "gc", "gd", "gf", "gg", "gk", "gl", "gm", "gn", "gp", "gr", "gs", "gt", "gv", "gw", "gx", "gz",
315 "j", "jb", "jc", "jd", "jf", "jg", "jk", "jl", "jm", "jn", "jp", "jq", "jr", "js", "jt", "jv", "jw", "jx", "jz",
316 "k", "kb", "kc", "kd", "kf", "kg", "kk", "kl", "km", "kn", "kp", "kr", "ks", "kt", "kv", "kw", "kx", "kz",
317 "l", "lb", "lc", "ld", "lf", "lg", "lk", "ll", "lm", "ln", "lp", "lr", "ls", "lt", "lv", "lw", "lx", "lz",
318 "m", "mb", "mc", "md", "mf", "mg", "mk", "ml", "mm", "mn", "mp", "mr", "ms", "mt", "mv", "mw", "mx", "mz",
319 "n", "nb", "nc", "nd", "nf", "ng", "nk", "nl", "nm", "nn", "np", "nr", "ns", "nt", "nv", "nw", "nx", "nz",
320 "p", "pb", "pc", "pd", "pf", "pg", "pk", "pl", "pm", "pn", "pp", "pr", "ps", "pt", "pv", "pw", "px", "pz",
321 "q", "qb", "qc", "qd", "qf", "qg", "qk", "ql", "qm", "qn", "qp", "qq", "qr", "qs", "qt", "qv", "qw", "qx", "qz",
322 "r", "rb", "rc", "rd", "rf", "rg", "rk", "rl", "rm", "rn", "rp", "rr", "rs", "rt", "rv", "rw", "rx", "rz",
323 "s", "sb", "sc", "sd", "sf", "sg", "sk", "sl", "sm", "sn", "sp", "sq", "sr", "ss", "st", "sv", "sw", "sx", "sz",
324 "t", "tb", "tc", "td", "tf", "tg", "tk", "tl", "tm", "tn", "tp", "tr", "ts", "tt", "tv", "tw", "tx", "tz",
325 "v", "vb", "vc", "vd", "vf", "vg", "vk", "vl", "vm", "vn", "vp", "vr", "vs", "vt", "vv", "vw", "vx", "vz",
326 "w", "wb", "wc", "wd", "wf", "wg", "wk", "wl", "wm", "wn", "wp", "wr", "ws", "wt", "wv", "ww", "wx", "wz",
327 "x", "xb", "xc", "xd", "xf", "xg", "xk", "xl", "xm", "xn", "xp", "xr", "xs", "xt", "xv", "xw", "xx", "xz",
328 "z", "zb", "zc", "zd", "zf", "zg", "zk", "zl", "zm", "zn", "zp", "zr", "zs", "zt", "zv", "zw", "zx", "zz",
330 // $G_PG_cons_n = count($G_PG_cons);
331 // printf("N CONS: %d\n", $G_PG_cons_n);
333 /* printf("%d %d\n", count($voc), count($cons)); */
334 /* for ($i = 0 ; $i < 26 ; $i++) { */
335 /* if (array_search(chr(ord('a') + $i), $voc) !== FALSE || $i == 7) */
337 /* printf(' "%s", ', chr(ord('a') + $i)); */
338 /* for ($e = 0 ; $e < 26 ; $e++) { */
339 /* if (array_search(chr(ord('a') + $e), $voc) !== FALSE || $e == 7) */
341 /* printf('"%s%s", ', chr(ord('a') + $i), chr(ord('a') + $e)); */
346 function nickserv_msg($dt, $msg) {
347 return sprintf('chatt_sub("%s",[0x040003,"%s"],"%s");', $dt, NICKSERV, $msg);
350 function passwd_gen($seed = NULL)
352 GLOBAL $G_PG_vow, $G_PG_vow_n, $G_PG_cons, $G_PG_cons_n;
361 for ($sil = 0 ; $sil < 7 ; $sil++) {
362 if (($sil % 2) == 0) {
364 for ($n = 0 ; $n < mt_rand(1,2) ; $n++) {
366 $old = mt_rand(0, $G_PG_vow_n-1);
367 $pw .= $G_PG_vow[$old];
370 $new = mt_rand(0, $G_PG_vow_n-1);
372 $new = ($new + mt_rand(0, $G_PG_vow_n-2)) % $G_PG_vow_n;
373 $pw .= $G_PG_vow[$new];
379 $pw .= $G_PG_cons[mt_rand(0, $G_PG_cons_n-1)];
386 function cmd_return($val, $desc)
388 return array('val' => $val, 'desc' => $desc);
391 function cmd_serialize($attrs)
396 foreach ($attrs as $key => $value) {
397 $ret .= $sep . $key . '=' . urlencode($value);
403 function cmd_deserialize($cmd)
406 $a = explode('&', $cmd);
408 while ($i < count($a)) {
409 $b = split('=', $a[$i]);
410 $ret[urldecode($b[0])] = urldecode($b[1]);
421 function versions_cmp($v1, $v2)
423 // printf("V1: [%s]\nV2: [%s]\n", $v1, $v2);
427 $v1_ar = split('\.', $v1);
428 $v2_ar = split('\.', $v2);
430 $v2_ct = count($v2_ar);
432 for ($i = 0 ; $i < count($v1_ar) ; $i++) {
433 if (($v2_ct - 1) < $i) {
436 // printf("here [%s] [%s]\n", $v1_ar[$i], $v2_ar[$i]);
437 if ($v1_ar[$i] != $v2_ar[$i]) {
438 if (strval($v1_ar[$i]) < strval($v2_ar[$i]))
447 function addrtoipv4($addr)
449 $ipv4addr_arr = explode(':' , $addr);
450 if (isset($ipv4addr_arr[3])) {
451 $ipv4addr = $ipv4addr_arr[3];
461 for ($i = 0; $i < ob_get_level(); $i++)
463 ob_implicit_flush(1);
467 function force_no_cache(&$header_out)
469 $header_out['Pragma'] = 'no-cache, must-revalidate';
470 $header_out['Cache-Control'] = 'no-cache';
471 $header_out['Expires'] = '-1';
474 function file_lock($fname, $is_exclusive)
476 if (($res = @fopen($fname, "r+")) == FALSE) {
480 if (flock($res, ($is_exclusive ? LOCK_EX : LOCK_SH)) == FALSE) {
488 function file_unlock($res)
491 flock($res, LOCK_UN);
496 $escpush_from = array("\\", "\"");
497 $escpush_to = array("\\\\", "\\\"");
500 GLOBAL $escpush_from, $escpush_to;
502 return str_replace($escpush_from, $escpush_to, $s);
505 $escinp_from = array( "\"" );
506 $escinp_to = array( """ );
508 function escinput($s)
510 GLOBAL $escinp_from, $escinp_to;
512 return str_replace($escinp_from, $escinp_to, $s);
517 return htmlentities($s, ENT_COMPAT, "UTF-8");
520 function esclfhtml($s)
522 return str_replace(" ", " ", str_replace("\n", "<br>", htmlspecialchars($s)));
525 function langtolng($lang)
529 return ($G_lang == 'en' ? '-en' : '');
532 function csplitter($in, $sep)
538 for ($i = 0 ; $i < strlen($in) ; $i++) {
539 $ini = substr($in, $i, 1);
543 else if ($ini == $sep) {
562 $from = array ( '\\', '@', '|' );
563 $to = array ( '\\\\', '@', '¦' );
565 return (str_replace($from, $to, htmlentities($s,ENT_COMPAT,"UTF-8")));
570 $from = array ( '\\', '|', "\t", "\n");
571 $to = array ( '\\\\', '\\|', "\\t", "\\n");
573 return (str_replace($from, $to, $s));
576 function xcapemesg($s)
578 $from = array ( "\n");
579 $to = array ( "\\n");
581 return (str_replace($from, $to, $s));
589 function IPClass($ipset)
592 $elem = split("/", $ipset, 2);
594 $mask = (int)$elem[1];
598 $this->mask = ((1<<($mask))-1) << (32 - $mask);
599 $this->addr = ip2long($addr) & $this->mask;
601 fprintf(STDERR, "New ipclass: %x (%x)\n", $this->addr, $this->mask);
606 fprintf(STDERR, "IP: %x, ADDR: %x, MASK: %x -> (%d)\n",
607 $ip, $this->addr, $this->mask, ((ip2long($ip) & $this->mask) == $this->addr));
608 return (($ip & $this->mask) == $this->addr);
618 function getbyid($idx)
620 return ($this->el[$idx]);
623 function setbyid($idx, $v)
625 $this->el[$idx] = $v;
629 define('TABLE_AUTH_TY_PUBL', 0);
630 define('TABLE_AUTH_TY_AUTH', 1);
631 define('TABLE_AUTH_TY_CERT', 2);
639 var $auth_type; // required authorization to sit down
646 var $table_start; // information field
654 function create($idx)
656 if (($thiz = new Table()) == FALSE)
660 $thiz->player = array();
663 if ($idx < TABLES_CERT_N)
664 $thiz->auth_type = TABLE_AUTH_TY_CERT;
665 else if ($idx < TABLES_AUTH_N)
666 $thiz->auth_type = TABLE_AUTH_TY_AUTH;
668 $thiz->auth_type = TABLE_AUTH_TY_PUBL;
674 $thiz->table_token = "";
675 $thiz->table_start = 0;
677 $thiz->wakeup_time = 0;
684 $this->idx = $from->idx;
685 $this->player = array();
686 for ($i = 0 ; $i < $from->player_n ; $i++)
687 $this->player[$i] = $from->player[$i];
688 $this->player_n = $from->player_n;
690 log_main("PLAYER_N - parent::copy.".$this->player_n);
692 $this->auth_type = $from->auth_type;
694 $this->wag_own = $from->wag_own;
695 $this->wag_com = $from->wag_com;
696 $this->wag_tout = $from->wag_tout;
698 $this->table_token = $from->table_token;
699 $this->table_start = $from->table_start;
701 $this->wakeup_time = $from->wakeup_time;
704 function myclone($from)
706 if (($thiz = new Table()) == FALSE)
714 function spawn($from)
716 if (($thiz = new Table()) == FALSE)
719 $thiz->idx = $from->idx;
720 $thiz->player = array();
721 for ($i = 0 ; $i < $from->player_n ; $i++)
722 $thiz->player[$i] = $i;
723 $thiz->player_n = $from->player_n;
725 $thiz->auth_type = $from->auth_type;
727 $thiz->wag_own = $from->wag_own;
728 $thiz->wag_com = $from->wag_com;
729 $thiz->wag_tout = $from->wag_tout;
731 $thiz->table_token = $from->table_token;
732 $thiz->table_start = $from->table_start;
734 $thiz->wakeup_time = $from->wakeup_time;
739 function wag_set($user_idx, $mesg)
743 $this->wag_own = $user_idx;
744 $this->wag_com = $mesg;
748 function wag_reset($timeout)
750 log_main("WAG_RESET");
752 unset($this->wag_own);
755 $this->wag_tout = $timeout;
758 function player_get($idx)
760 return ($this->player[$idx]);
763 function player_set($idx, $player)
765 $this->player[$idx] = $player;
768 function user_add($idx)
770 $this->player[$this->player_n] = $idx;
773 return ($this->player_n - 1);
776 function user_rem($brisk, $user)
778 $tabpos = $user->table_pos;
780 /* verifico la consistenza dei dati */
781 if ($brisk->user[$this->player[$tabpos]] == $user) {
783 /* aggiorna l'array dei giocatori al tavolo. */
784 for ($i = $tabpos ; $i < $this->player_n-1 ; $i++) {
785 $this->player[$i] = $this->player[$i+1];
786 $user_cur = $brisk->user[$this->player[$i]];
787 $user_cur->table_pos = $i;
792 log_main("INCONSISTENCY ON TABLE.");
796 // Table->act_content - return 'id' of type of output required for table button
797 function act_content($user)
800 $isstanding = ($user->subst == 'standup');
801 $sitted = $this->player_n;
803 $cur_table = $user->table;
807 if ($sitted < PLAYERS_N) {
808 switch ($this->auth_type) {
809 case TABLE_AUTH_TY_CERT:
810 if ($user->is_cert())
815 case TABLE_AUTH_TY_AUTH:
816 if ($user->is_auth())
831 if ($table == $cur_table)
838 $ret = sprintf('j_tab_act_cont(%d, \'%s\');', $table, $act);
851 function Delay_Manager($triglevel)
853 $this->triglevel = $triglevel;
854 $this->delta = array();
855 $this->lastcheck = 0;
858 function delta_get($curtime)
860 // clean too old delta items
861 for ($i = 0 ; $i < count($this->delta) ; $i++) {
862 if ($this->delta[$i][0] < $curtime) {
863 array_splice($this->delta, $i, 1);
868 // add new delta items if delay exceeded $this->triglevel sec
869 if ($curtime > $this->lastcheck + $this->triglevel && $curtime < $this->lastcheck + 1200.0) {
870 $delta = $curtime - $this->lastcheck - $this->triglevel;
871 array_push($this->delta, array($curtime + $delta , $delta));
872 // fprintf(STDERR, "DELTA: add new delta [%f] [%f] [%f]\n", $this->triglevel, $curtime + $delta, $delta);
875 // extract the maximum valid delta
877 for ($i = 0 ; $i < count($this->delta) ; $i++) {
878 $delta_cur = $this->delta[$i][1];
879 if ($delta_max < $delta_cur)
880 $delta_max = $delta_cur;
883 // fprintf(STDERR, "DELTA: status %d, delta_max: %f\n", count($this->delta), $delta_max);
888 function lastcheck_set($curtime)
890 $this->lastcheck = $curtime;
898 function Client_prefs()
902 static function from_user($user)
904 $thiz = new Client_prefs();
905 $thiz->user_load($user);
910 static function from_json($json)
912 $thiz = new Client_prefs();
913 if ($thiz->json_load($json) == FALSE) {
921 function user_load($user)
923 fprintf(STDERR, "QQ %s: %x\n", __FUNCTION__, $user->flags);
924 $this->listen = ($user->flags & USER_FLAG_MAP_AUTH) >> 2;
925 if ($user->rec != FALSE) {
926 $this->supp_comp = $user->rec->supp_comp_get();
929 $this->supp_comp = "000000000000";
932 fprintf(STDERR, "QQ %s: LISTEN: %d\n", __FUNCTION__, $this->listen);
935 function json_load($json_s)
940 if (gettype($json_s) == "string") {
941 if (($json = json_decode($json_s)) == FALSE)
947 if ($this->listen < 0 || $this->listen > 2)
949 $this->listen = $json->listen;
951 if (mb_strlen($json->supp_comp, "ASCII") != 12)
954 for ($i = 0, $idx = 0 ; $i < 12 ; $i++) {
955 if (($json->supp_comp[$i] >= '0' && $json->supp_comp[$i] <= '9') ||
956 ($json->supp_comp[$i] >= 'a' && $json->supp_comp[$i] <= 'f'))
962 $this->supp_comp = $json->supp_comp;
969 function store($user, $is_save)
972 fprintf(STDERR, "QQ %s::%s PRE: %x\n", __CLASS__, __FUNCTION__,
973 $user->flags & (~USER_FLAG_S_ALL & ~USER_FLAG_AUTH));
974 $user->flags_set(($this->listen << 2), USER_FLAG_MAP_AUTH);
975 fprintf(STDERR, "QQ %s::%s %x\n", __CLASS__, __FUNCTION__,
977 if ($user->is_supp_custom()) {
978 $user->rec->supp_comp_set($this->supp_comp);
981 $user->prefs_store();
990 var $crystal_filename;
994 var $comm; // commands for many people
995 var $step; // current step of the comm array
996 var $garbage_timeout;
999 var $ban_list; // ban list (authized allowed)
1000 var $black_list; // black list (anti-dos, noone allowed)
1006 public static $sess_cur;
1014 static function create($crystal_filename, $ban_list, $black_list) {
1015 if (($brisk_ser = @file_get_contents($crystal_filename)) != FALSE) {
1016 if (($brisk = unserialize($brisk_ser)) != FALSE) {
1017 fprintf(STDERR, "ROOM FROM FILE\n");
1018 rename($crystal_filename, $crystal_filename.".old");
1020 $brisk->reload(TRUE, $ban_list, $black_list);
1026 fprintf(STDERR, "NEW ROOM\n");
1027 $thiz = new Brisk();
1029 $thiz->crystal_filename = $crystal_filename;
1030 $thiz->user = array();
1031 $thiz->table = array();
1032 $thiz->match = array();
1034 $thiz->ban_list = NULL;
1035 $thiz->black_list = NULL;
1037 for ($i = 0 ; $i < MAX_PLAYERS ; $i++) {
1038 $thiz->user[$i] = User::create($thiz, $i, "", "");
1041 for ($i = 0 ; $i < TABLES_N ; $i++) {
1042 $thiz->table[$i] = Table::create($i);
1044 $thiz->garbage_timeout = 0;
1045 $thiz->shm_sz = SHM_DIMS_MIN;
1047 $thiz->delay_mgr = new Delay_Manager(1.5);
1049 static::$sess_cur = FALSE;
1051 $thiz->reload(TRUE, $ban_list, $black_list);
1056 function ipclass_update($ip_out_s, $ip_in)
1058 fprintf(STDERR, "N_IN: %d\n", count($ip_in));
1060 $ip_out = &$this->$ip_out_s;
1062 // if already set clean the ban_list property
1064 $ct = count($ip_out);
1065 for ($i = 0 ; $i < $ct ; $i++) {
1072 for ($i = 0 ; $i < count($ip_in) ; $i++) {
1073 $ip_out[$i] = new IPClass($ip_in[$i]);
1077 function reload($is_first, $ban_list, $black_list)
1079 fprintf(STDERR, "RELOAD STUFF (%d)(%d)\n", count($ban_list), count($black_list));
1081 $this->ipclass_update("ban_list", $ban_list);
1082 $this->ipclass_update("black_list", $black_list);
1085 $this->banned_kickoff();
1086 $this->garbage_manager(TRUE);
1090 function banned_kickoff()
1094 for ($table_idx = 0 ; $table_idx < TABLES_N ; $table_idx++) {
1095 $table_cur = $this->table[$table_idx];
1096 // if the table is complete and exists we check users IP
1098 if ($table_cur->player_n == PLAYERS_N) {
1099 if (isset($this->match[$table_idx]) &&
1100 $table_cur->table_token == $bin5->table_token) {
1101 log_main("PLAYERS == N TABLE ".$table_idx);
1103 $bin5 = $this->match[$table_idx];
1105 $is_ban |= $bin5->banned_kickoff();
1110 for ($i = 0 ; $i < MAX_PLAYERS ; $i++) {
1111 $user_cur = $this->user[$i];
1113 if ($user_cur->sess == "")
1116 // check if the IP is blacklisted
1117 if ($this->black_check($user_cur->ip)) {
1118 $user_cur->lacc = 0;
1123 // if authorized not check if banlisted
1124 if ($user_cur->is_auth()) {
1128 if ($this->ban_check($user_cur->ip)) {
1129 $user_cur->lacc = 0;
1137 function ban_check($ip_str)
1139 $ip = ip2long($ip_str);
1140 fprintf(STDERR, "Brisk::ban_check %d\n", count($this->ban_list));
1141 for ($i = 0 ; $i < count($this->ban_list) ; $i++) {
1142 fprintf(STDERR, "ban_list[%d] = %x (%x)\n", $i,
1143 $this->ban_list[$i]->addr, $this->ban_list[$i]->mask);
1144 if ($this->ban_list[$i]->match($ip)) {
1145 fprintf(STDERR, "\n\nMATCHA!\n\n");
1152 function black_check($ip_str)
1154 $ip = ip2long($ip_str);
1155 fprintf(STDERR, "Brisk::black_check %d\n", count($this->black_list));
1156 for ($i = 0 ; $i < count($this->black_list) ; $i++) {
1157 fprintf(STDERR, "black_list[%d] = %x (%x)\n", $i,
1158 $this->black_list[$i]->addr, $this->black_list[$i]->mask);
1159 if ($this->black_list[$i]->match($ip)) {
1160 fprintf(STDERR, "\n\nMATCHA!\n\n");
1167 function garbage_manager($force)
1169 GLOBAL $G_lang, $mlang_brisk, $G_base;
1173 log_rd2("garbage_manager START");
1175 /* Garbage collector degli utenti in timeout */
1176 $curtime = microtime(TRUE);
1178 $delta = $this->delay_mgr->delta_get($curtime);
1180 if (!$force && !($this->garbage_timeout < $curtime)) {
1181 $this->delay_mgr->lastcheck_set($curtime);
1185 // Before all align times with table timeout
1186 for ($table_idx = 0 ; $table_idx < TABLES_N ; $table_idx++) {
1187 $table_cur = $this->table[$table_idx];
1188 // if the table is complete and exists its shared mem we get the info about users lacc
1190 if ($table_cur->player_n == PLAYERS_N) {
1191 log_main("PLAYERS == N TABLE ".$table_idx);
1194 $no_recovery = FALSE;
1195 if (isset($this->match[$table_idx])) {
1196 $bin5 = $this->match[$table_idx];
1198 if ($table_cur->table_token != $bin5->table_token) {
1199 log_main("ERROR: not matching table_token. Brisk: ".$table_cur->table_token." Table: ".$bin5->table_token);
1200 log_main("ERROR: not matching table_start. Brisk: ".$table_cur->table_start." Table: ".$bin5->table_start);
1201 $no_recovery = TRUE;
1205 if ($bin5 != FALSE) {
1209 log_main("garbage_manager: bri loaded successfully.");
1210 $bin5->garbage_manager(TRUE);
1212 $bin5_table = $bin5->table[0];
1214 // is the end of the table
1216 if ($bin5->the_end == TRUE) {
1218 * DESTROY OF FINISHED TABLE && MOVE PLAYER TO ROOM AGAIN
1220 log_main("garbage_manager: INSIDE THE END.");
1222 $plist = "$table_cur->table_token|$table_cur->idx|$table_cur->player_n";
1223 for ($i = 0 ; $i < $table_cur->player_n ; $i++) {
1224 $plist .= '|'.$this->user[$table_cur->player[$i]]->sess;
1227 for ($i = 0 ; $i < $bin5_table->player_n ; $i++) {
1228 // stat must be "table" by definition
1229 $user_cur = $this->user[$table_cur->player[$i]];
1230 $bin5_user = $bin5->user[$i];
1232 $user_cur->subst = $bin5_user->subst;
1233 $user_cur->step = $bin5_user->step;
1234 $user_cur->lacc = $bin5_user->lacc;
1235 $user_cur->laccwr = $bin5_user->lacc;
1236 $user_cur->bantime = $bin5_user->bantime;
1239 log_legal($curtime, $user_cur->ip, $user_cur, "STAT:DESTROY_GAME", $plist);
1241 $this->room_join_wakeup($user_cur, FALSE, 0);
1242 $table_cur->table_token = "";
1243 $table_cur->wakeup_time = $curtime + WAKEUP_TIME;
1245 $this->match_del($table_idx);
1248 log_main("gm:: save_data");
1250 for ($i = 0 ; $i < $bin5_table->player_n ; $i++) {
1251 $this->user[$table_cur->player[$i]]->lacc = $bin5->user[$i]->lacc;
1254 } // if ($bin5 == FALSE
1255 else if ($no_recovery == FALSE) {
1256 log_crit("ERROR: table ".$table_idx." unrecoverable join");
1258 for ($i = 0 ; $i < $table_cur->player_n ; $i++) {
1259 $user_cur = $this->user[$table_cur->player[$i]];
1260 $user_cur->subst = "shutdowner";
1261 $user_cur->step_inc();
1263 $ret = sprintf('stat = "%s"; subst = "%s";', $user_cur->stat, $user_cur->subst);
1264 $ret .= "gst.st = ".($user_cur->step+1)."; ";
1265 // MLANG <br>I dati del tavolo n° ".$user_cur->table." sono inconsistenti, verranno resettati.<br><br>Torni in piedi.<br><br>
1266 $prestr = sprintf($mlang_brisk['tabincon'][$G_lang], $user_cur->table);
1267 $ret .= show_notify($prestr, 2000, $mlang_brisk['btn_close'][$G_lang], 400, 110);
1268 $user_cur->comm[$user_cur->step % COMM_N] = $ret;
1269 $user_cur->step_inc();
1272 $plist = "$table_cur->table_token|$user_cur->table|$table_cur->player_n";
1273 for ($i = 0 ; $i < $table_cur->player_n ; $i++) {
1274 $plist .= '|'.$this->user[$table_cur->player[$i]]->sess;
1276 log_legal($curtime, $user_cur->ip, $user_cur, "STAT:DESTROY_GAME(RECOVERY)", $plist);
1278 $this->room_join_wakeup($user_cur, TRUE, -2);
1279 $table_cur->table_token = "";
1282 } // if ($table_cur->player_n == PLAYERS_N) {
1283 } // for ($table_idx = 0 ; $table_idx < TABLES_N ; $table_idx++) {
1285 log_rd2("out new loop.");
1287 for ($i = 0 ; $i < MAX_PLAYERS ; $i++) {
1288 $user_cur = $this->user[$i];
1290 log_rd2("User: ".$user_cur->name." stat: ".$user_cur->stat." subst: ".$user_cur->subst);
1292 if ($user_cur->sess == "")
1295 if ($user_cur->lacc + EXPIRE_TIME_RD < ($curtime - $delta)) {
1296 // Auto logout dell'utente
1297 log_rd2("AUTO LOGOUT.".($user_cur->lacc + EXPIRE_TIME_RD)." curtime - delta ".($curtime - $delta));
1299 if ($user_cur->stat == 'table' || $user_cur->stat == 'room') {
1300 log_auth($user_cur->sess, "Autologout session.");
1304 log_rd2("AUTO LOGOUT.");
1305 if ($user_cur->subst == 'sitdown' || $user_cur->stat == 'table')
1306 $this->room_wakeup($user_cur);
1307 else if ($user_cur->subst == 'standup')
1308 $this->room_outstandup($user_cur);
1310 log_rd2("LOGOUT FROM WHAT ???");
1314 if ($user_cur->laccwr + EXPIRE_TIME_SMAMMA < ($curtime - $delta)) { // lo rimettiamo in piedi
1315 if ($user_cur->stat == 'room' && $user_cur->subst == 'sitdown') {
1316 $this->room_wakeup($user_cur);
1317 $user_cur->comm[$user_cur->step % COMM_N] = "gst.st = ".($user_cur->step+1)."; ";
1318 /* MLANG: <br>Sei stato inattivo per ".(EXPIRE_TIME_SMAMMA/60.0)." minuti. <br><br>Quindi ritorni tra i <b>Giocatori in piedi</b>.", "torna ai tavoli" */
1319 $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);
1320 $user_cur->step_inc();
1324 log_rd2("GARBAGE UPDATED!");
1326 $this->garbage_timeout = $curtime + GARBAGE_TIMEOUT;
1329 $this->delay_mgr->lastcheck_set($curtime);
1333 function show_room($user_step, $user)
1335 GLOBAL $G_lang, $mlang_brisk;
1336 log_main("show_room: username: ".$user->name);
1338 $ret = sprintf('gst.st = %d; ', $user_step);
1340 $prefs = Client_prefs::from_user($user);
1341 $ret .= sprintf('prefs_load(\'%s\', false, false);', json_encode($prefs));
1344 if ($user->flags & USER_FLAG_ISOLAUTH) {
1345 $ret .= 'list_set(\'isolation\', false, \''.$mlang_brisk['tit_onisol'][$G_lang].'\' ); ';
1347 else if ($user->flags & USER_FLAG_LISTAUTH) {
1348 $ret .= 'list_set(\'auth\', false, \''.$mlang_brisk['tit_onauth'][$G_lang].'\' ); ';
1351 $ret .= 'list_set(\'all\', false, \'\' ); ';
1355 if ($user->subst == 'standup')
1356 $ret .= "tra.show(); ";
1358 $ret .= "tra.hide(); ";
1360 $ret .= sprintf('stat = "%s";', $user->stat);
1362 $ret .= root_welcome($user);
1363 if ($user->flags & USER_FLAG_DBFAILED) {
1364 $ret .= "gst.st = ".($user->step+1)."; ";
1365 $ret .= show_notify($mlang_brisk['db_failed'][$G_lang], 0, $mlang_brisk['btn_close'][$G_lang], 400, 140);
1368 $ret .= sprintf('subst = "%s";', $user->subst);
1369 $ret .= $user->myname_innerHTML();
1371 for ($i = 0 ; $i < TABLES_N ; $i++) {
1373 $ret .= $this->table_content($user, $i);
1375 $ret .= $this->table[$i]->act_content($user);
1376 if ($this->table[$i]->wag_own != -1)
1377 $ret .= sprintf('tra.add(%d, "%s: %s"); ', $i, $this->user[$this->table[$i]->wag_own]->name, $this->table[$i]->wag_com);
1379 $ret .= sprintf('tra.rem(%d); ', $i);
1381 $ret .= $this->standup_content($user);
1382 $ret .= "setTimeout(preload_images, 0, g_preload_img_arr, g_imgct); ";
1388 function room_wakeup($user)
1390 $table_idx = $user->table;
1391 $table = $this->table[$table_idx];
1393 log_main("WAKEUP: begin function table:".$table_idx." stat: ".$user->stat." subst: ".$user->subst);
1397 $from_table = ($user->stat == "table");
1399 log_main("WAKEUP: from table [".$user->table."] nplayers_n: ".$this->table[$user->table]->player_n);
1401 for ($i = 0 ; $i < $table->player_n ; $i++) {
1402 $user_cur = $this->user[$table->player[$i]];
1403 log_main("PREIMPOST: INLOOP name: ".$user_cur->name);
1405 if ($user->idx_get() != $table->player[$i]) {
1406 $user_cur->stat_set("room");
1407 $user_cur->subst = "sitdown";
1408 $user_cur->laccwr = $curtime;
1410 else if ($user->sess != "") {
1411 $user_cur->stat_set("room");
1412 $user_cur->subst = "standup";
1413 $user_cur->laccwr = $curtime;
1414 $user_cur->table = -1;
1419 $user->stat_set("room");
1420 $user->subst = "standup";
1421 $user->laccwr = $curtime;
1424 $remove_wagon = FALSE;
1425 if($table->wag_own == $user->idx_get()) {
1426 $table->wag_reset($curtime);
1427 $remove_wagon = TRUE;
1431 /* aggiorna l'array dei giocatori al tavolo. */
1432 $table->user_rem($this, $user);
1434 for ($i = 0 ; $i < MAX_PLAYERS ; $i++) {
1435 $user_cur = $this->user[$i];
1436 if ($user_cur->sess == '' || $user_cur->stat != 'room')
1439 // log_main("VALORI: name: ".$user_cur->name."from_table: ".$from_table." tab: ".$user_cur->table." taix: ".$table_idx." ucur: ".$user_cur." us: ".$user);
1441 $ret = "gst.st = ".($user_cur->step+1)."; ".($remove_wagon ? sprintf("tra.rem(%d);",$table_idx) : "");
1442 if ($from_table && ($user_cur->table == $table_idx || $user->idx_get() == $i)) {
1443 $ret .= 'gst.st_loc++; xstm.stop(); window.onunload = null; window.onbeforeunload = null; document.location.assign("index.php");|';
1444 // $ret .= 'gst.st_loc++; document.location.assign("index.php");|';
1445 log_main("DOCUMENT.index.php: from table");
1447 else if ($user_cur->stat == "room") {
1448 log_main("DOCUMENT.index.php: from table");
1450 $ret .= $this->table_content($user_cur, $table_idx);
1451 $ret .= $this->standup_content($user_cur);
1453 // $ret .= table_act_content(FALSE, 0, $table_idx, $user->table, FALSE);
1454 $ret .= $table->act_content($user);
1456 if ($user->idx_get() == $i) {
1457 // set the new status
1458 $ret .= 'subst = "standup"; tra.show(); ';
1459 // clean the action buttons in other tables
1460 for ($e = 0 ; $e < TABLES_N ; $e++) {
1461 if ($this->table[$e]->player_n < PLAYERS_N) {
1462 $ret .= $this->table[$e]->act_content($user);
1467 $ret .= $table->act_content($user_cur);
1470 log_wr("ROOM_WAKEUP: ".$ret);
1471 $user_cur->comm[$user_cur->step % COMM_N] = $ret;
1472 $user_cur->step_inc();
1476 function room_join_wakeup($user, $update_lacc = FALSE, $trans_delta)
1478 $table_idx = $user->table;
1479 $table = $this->table[$table_idx];
1481 log_main("JOIN_WAKEUP: begin function table:".$table_idx." stat: ".$user->stat." subst: ".$user->subst);
1484 $user_wup = array();
1486 $user_tab = array();
1488 log_main("JOIN WAKEUP: from table [".$user->table."] nplayers_n: ".$this->table[$user->table]->player_n);
1490 for ($i = 0 ; $i < $table->player_n ; $i++) {
1491 $user_cur = $this->user[$table->player[$i]];
1492 log_main("PREIMPOST INLOOP name: ".$user_cur->name);
1493 if ($user_cur->sess != "") {
1494 if ($update_lacc == TRUE) {
1495 $user_cur->laccwr = $curtime;
1497 log_main("cur: ".$user_cur->name." subst: ".$user_cur->subst);
1498 if ($user_cur->subst == "shutdowned") {
1499 $user_cur->stat_set("room");
1500 $user_cur->subst = "sitdown";
1502 else if ($user_cur->subst == "shutdowner") {
1503 $user_cur->stat_set("room");
1504 $user_cur->subst = "standup";
1505 $user_cur->table = -1;
1506 $user_wup[$user_wup_n++] = $user_cur;
1508 $remove_wagon = FALSE;
1509 if($table->wag_own == $table->player[$i]) {
1510 $remove_wagon = TRUE;
1511 $table->wag_reset($curtime);
1514 $user_tab[$user_tab_n++] = $table->player[$i];
1518 for ($wup_idx = 0 ; $wup_idx < $user_wup_n ; $wup_idx++)
1519 $table->user_rem($this, $user_wup[$wup_idx]);
1521 /* aggiorna l'array dei giocatori al tavolo. */
1523 for ($i = 0 ; $i < MAX_PLAYERS ; $i++) {
1524 log_main("START LOOP");
1525 $user_cur = $this->user[$i];
1526 if ($user_cur->sess == '' || $user_cur->stat != 'room') {
1527 log_main("name: ".$user_cur->name."skip subst: ".$user_cur->subst);
1532 log_main("VALORI name: ".$user_cur->name." tab: ".$user_cur->table." taix: ".$table_idx);
1534 $ret = "gst.st = ".($user_cur->step+1)."; ".($remove_wagon ? sprintf("tra.rem(%d);",$table_idx) : "");
1535 if ($user_cur->stat == "room") {
1536 log_main("DOCUMENT.index.php from table");
1538 $ret .= $this->table_content($user_cur, $table_idx);
1539 $ret .= $this->standup_content($user_cur);
1541 $ret .= $table->act_content($user_cur);
1544 for ($tab_idx = 0 ; $tab_idx < $user_tab_n ; $tab_idx++)
1545 if ($user_tab[$tab_idx] == $i)
1548 // for users that wakeup the room will be reconstructed by index_rd.php
1549 if ($tab_idx < $user_tab_n) {
1550 log_main("PRE show_room username: ".$user_cur->name." STEP: ".$user_cur->step);
1552 // ARRAY_POP DISABLED
1553 // if ($trans_delta == 0)
1554 // while (array_pop($user_cur->comm) != NULL);
1556 $user_cur->trans_step = $user_cur->step + 1 + $trans_delta;
1557 $user_cur->comm[$user_cur->step % COMM_N] = "";
1558 $user_cur->step_inc();
1559 $user_cur->comm[$user_cur->step % COMM_N] = $this->show_room(($user_cur->step + 1), $user_cur);
1560 $user_cur->step_inc();
1561 log_main("POST show_room username: ".$user_cur->name." STEP: ".$user_cur->step);
1565 log_main("JOIN_WAKEUP wup_idx ".$wup_idx." wup_n ".$user_wup_n);
1567 log_main("JOIN_WAKEUP more");
1569 $ret .= $table->act_content($user_cur);
1571 log_main("JOIN_WAKEUP end more");
1573 log_wr("ROOM_JOIN_WAKEUP: ".$ret);
1574 $user_cur->comm[$user_cur->step % COMM_N] = $ret;
1575 $user_cur->step_inc();
1579 function guarantee_show($user, $user_login, $dt)
1581 GLOBAL $G_lang, $mlang_brisk, $G_base;
1587 if ($user_login == "") {
1591 if (($bdb = BriskDB::create()) == FALSE) {
1595 if (($user_item = $bdb->getitem_bylogin($user_login, $user_code)) == FALSE) {
1599 if (($guar_item = $bdb->getitem_bycode($user_item->guar_code_get())) != FALSE) {
1600 $guar_login = $guar_item->login_get();
1605 $user_tos_vers = $user_item->tos_vers_get();
1607 if (versions_cmp($user_tos_vers, "1.2") < 0) {
1608 $mesg = nickserv_msg($dt, sprintf($mlang_brisk['tos_old'][$G_lang], xcape($user_login)));
1610 else if ($guar_login == "") {
1611 $mesg = nickserv_msg($dt, sprintf($mlang_brisk['gua_nfd'][$G_lang], xcape($user_login)));
1613 else if ($guar_login == $user_login) {
1614 $mesg = nickserv_msg($dt, sprintf($mlang_brisk['gua_self'][$G_lang], xcape($user_login)));
1617 $mesg = nickserv_msg($dt, sprintf($mlang_brisk['gua_info'][$G_lang],
1618 xcape($user_login), xcape($guar_login)));
1623 $mesg = nickserv_msg($dt, sprintf($mlang_brisk['gua_err'][$G_lang], $ret));
1626 $user->comm[$user->step % COMM_N] = "gst.st = ".($user->step+1)."; ".$mesg;
1632 function room_outstandup($user)
1634 $this->room_sitdown($user, -1);
1637 function table_update($user)
1639 log_main("table_update: pre - USER: ".$user->name);
1641 $table_idx = $user->table;
1643 if ($table_idx > -1)
1644 $table = $this->table[$table_idx];
1646 for ($i = 0 ; $i < MAX_PLAYERS ; $i++) {
1648 $user_cur = $this->user[$i];
1649 if ($user_cur->sess == '' || $user_cur->stat != 'room')
1652 $ret = "gst.st = ".($user_cur->step+1)."; ";
1653 if ($table_idx > -1)
1654 $ret .= $this->table_content($user_cur, $table_idx);
1656 if ($user->idx_get() == $i) {
1657 $ret .= $user->myname_innerHTML();
1659 $user_cur->comm[$user_cur->step % COMM_N] = $ret;
1660 $user_cur->step_inc();
1663 log_main("table_update: post");
1666 function room_sitdown($user, $table_idx)
1668 log_main("room_sitdown ".($user == FALSE ? "USER: FALSE" : "USER: ".$user->name));
1672 if ($table_idx > -1 && $table_idx < TABLES_N) {
1673 $table = $this->table[$table_idx];
1676 if ($table->wag_own != -1 && $table->player_n == PLAYERS_N) {
1677 for ($i = 0 ; $i < TABLES_N ; $i++) {
1678 if ($table->wag_own == $table->player[$i]) {
1679 $train_app = sprintf("tra.rem(%d); ", $table_idx);
1680 $table->wag_reset(time());
1687 for ($i = 0 ; $i < MAX_PLAYERS ; $i++) {
1689 $user_cur = $this->user[$i];
1690 if ($user_cur->sess == '' || $user_cur->stat != 'room')
1693 $ret = "gst.st = ".($user_cur->step+1)."; ".$train_app;
1694 if ($table_idx > -1)
1695 $ret .= $this->table_content($user_cur, $table_idx);
1696 $ret .= $this->standup_content($user_cur);
1698 if ($user->idx_get() == $i) {
1699 $ret .= 'subst = "sitdown"; tra.hide(); ';
1700 // clean the action buttons in other tables
1701 for ($e = 0 ; $e < TABLES_N ; $e++) {
1702 $ret .= $this->table[$e]->act_content($user_cur);
1705 else if ($table_idx > -1) {
1706 if ($table->player_n == PLAYERS_N) {
1708 $ret .= $table->act_content($user_cur);
1711 $user_cur->comm[$user_cur->step % COMM_N] = $ret;
1712 $user_cur->step_inc();
1716 function chatt_send($user, $mesg)
1718 GLOBAL $G_base, $G_alarm_passwd, $mlang_brisk, $G_lang;
1722 $msg = mb_substr($mesg, 6, 128, "UTF-8");
1724 $dt = date("H:i ", $curtime);
1735 $is_normchat = FALSE;
1736 /* for old isolation management $is_ticker = FALSE; */
1737 $update_room = FALSE;
1739 if (strcmp($msg, "/tav") == 0 ||
1740 strncmp($msg, "/tav ", 5) == 0) {
1742 if ($user->stat != 'room' || $user->subst != 'sitdown') {
1743 /* MLANG: "<br>Per attivare il messaggio di segnalazione del tavolo occorre essere seduti.<br><br>", "<br>Il messaggio di segnalazione del tavolo è già attivato.<br><br>", "<br>Il messaggio di segnalazione del tavolo<br>è disattivato ancora per %d second%s.<br><br>" */
1744 $msg = $mlang_brisk['tickmust'][$G_lang];
1745 $to_user = show_notify($msg, 0, "chiudi", 400, 100);
1750 $table = $this->table[$user->table];
1752 if ($table->wag_own != -1) {
1753 // MLANG <br>Il messaggio di segnalazione del tavolo è già attivato.<br><br>
1754 $msg = $mlang_brisk['tickjust'][$G_lang];
1755 $to_user = show_notify($msg, 0, "chiudi", 400, 100);
1760 $dtime = $curtime - $table->wag_tout;
1761 if ($dtime < EXPIRE_TIME_WAG) {
1762 // MLANG - <br>Il messaggio di segnalazione del tavolo<br>è disattivato ancora per %d second%s.<br><br>
1763 $msg = sprintf($mlang_brisk['tickwait'][$G_lang],
1764 EXPIRE_TIME_WAG - $dtime, (EXPIRE_TIME_WAG - $dtime == 1 ? ($G_lang == 'en' ? "" : "o") : ($G_lang == 'en' ? "s" : "i")));
1765 $to_user = show_notify($msg, 0, $mlang_brisk['btn_close'][$G_lang] , 400, 100);
1770 $msg = substr($msg, 5);
1772 $table->wag_set($user->idx_get(), $msg);
1773 $to_user = sprintf('tra.add(%d, "%s");', $user->table, xcape(sprintf("%s: %s", $user->name, $msg)));
1774 $to_room = $to_user;
1775 /* for old isolation management $is_ticker = TRUE; */
1777 } // /tav chat command
1779 else if (strncmp($msg, "/alarm ", 7) == 0) {
1780 if (strncmp($msg, "/alarm to ", 10) == 0) {
1781 $sp_pos = strpos($msg, " ", 10);
1782 $target = substr($msg, 10, $sp_pos - 10);
1783 $alarm_check = "/alarm to ".$target." ".$G_alarm_passwd." ";
1787 $alarm_check = "/alarm ".$G_alarm_passwd." ";
1790 if (strncmp($msg, $alarm_check, strlen($alarm_check)) != 0) {
1791 /* MLANG: "<br>La password digitata non è corretta.<br><br>" */
1792 $msg = $mlang_brisk['alarpass'][$G_lang];
1793 $to_user = show_notify($msg, 0, $mlang_brisk['btn_close'][$G_lang], 400, 100);
1798 /* MLANG: "Alarm <b>%s</b> inviato a <b>%s</b>." */
1799 $prestr = sprintf($mlang_brisk['alarret'][$G_lang], xcape(substr($msg, strlen($alarm_check))),
1800 ($target == "" ? $mlang_brisk['tit_all'][$G_lang] : xcape($target)) );
1801 $to_user = nickserv_msg($dt, $prestr);
1803 $msg = sprintf("<br><b>%s<br><br>%s</b><br><br>",
1804 $dt.NICKSERV, xcape(substr($msg, strlen($alarm_check))));
1805 /* MLANG: "chiudi" */
1806 $to_all = show_notify($msg, 0, $mlang_brisk['btn_close'][$G_lang], 400, 120);
1808 } // /alarm chat command
1809 else if (strncmp($msg, "/listen ", 8) == 0) {
1810 $arg = substr($msg, 8);
1812 if (strcasecmp($arg, "isolation") == 0) {
1814 if ($user->stat == 'room' && $user->subst == 'sitdown' &&
1815 $user->table >= TABLES_AUTH_N) {
1816 $to_user = nickserv_msg($dt, $mlang_brisk['listmust'][$G_lang]);
1820 $user->flags &= ~USER_FLAG_MAP_AUTH;
1821 $user->flags |= USER_FLAG_ISOLAUTH;
1822 $to_user = 'list_set(\'isolation\', true, \''.$mlang_brisk['tit_onisol'][$G_lang].'\'); ';
1825 else if (strcasecmp($arg, "auth") == 0) {
1826 $flags_old = $user->flags;
1827 $user->flags &= ~USER_FLAG_MAP_AUTH;
1828 $user->flags |= USER_FLAG_LISTAUTH;
1829 $to_user = 'list_set(\'auth\', true, \''.$mlang_brisk['tit_onauth'][$G_lang].'\'); ';
1832 $flags_old = $user->flags;
1833 $user->flags &= ~USER_FLAG_MAP_AUTH;
1834 $to_user = 'list_set(\'all\', true, \'\'); ';
1837 // if from isolation redraw standup area
1838 if (($flags_old ^ $user->flags) & USER_FLAG_ISOLAUTH) {
1839 $to_user .= 'standup_data_old = null; '.$this->standup_content($user);
1843 else if (strcmp($msg, "/authreq") == 0) {
1844 if ($user->is_cert()) {
1845 $to_user = sprintf('authbox(300,200);');
1848 /* 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à in uso." */
1849 $to_user = nickserv_msg($dt, $mlang_brisk['authmust'][$G_lang]);
1852 else if (strncmp($msg, "/mesgtoadm", 8) == 0) {
1853 if ($user->is_auth()) {
1854 $to_user = sprintf('mesgtoadmbox(500,300);');
1857 /* MLANG: "<b>Per inviare un messaggio devi essere autenticato.</b>" */
1858 $to_user = nickserv_msg($dt, $mlang_brisk['mesgmust'][$G_lang]);
1861 else if (strncmp($msg, "/nick ", 6) == 0) {
1862 log_main("chatt_send BEGIN");
1865 if (($name_new = validate_name(substr($msg, 6))) == FALSE) {
1866 $to_user = nickserv_msg($dt, $mlang_brisk['nickmust'][$G_lang]);
1870 $msg = "COMMAND ".$msg;
1871 for ($i = 0 ; $i < MAX_PLAYERS ; $i++) {
1872 $user_cur = $this->user[$i];
1874 if ($user_cur->sess == '')
1876 if (strcasecmp($user_cur->name,$name_new) == 0)
1879 if ($i < MAX_PLAYERS) {
1880 $prestr = sprintf($mlang_brisk['nickdupl'][$G_lang], xcape($name_new));
1881 $to_user = nickserv_msg($dt, $prestr);
1885 /* MLANG: "<b>Non puoi cambiare nick a un tavolo per soli autenticati.</b>", "Il nickname <b>\'%s\'</b> è già registrato, <b>se il suo proprietario si autentificherà verrai rinominato d\'ufficio come ghost<i>N</i>.</b>" */
1886 if ($user->is_auth()) {
1887 if (strcasecmp($user->name,$name_new) != 0) {
1888 if (( ($user->flags & USER_FLAG_MAP_AUTH) != USER_FLAG_ISOLAUTH) &&
1889 ($user->subst == 'standup' ||
1890 ($user->subst != 'standup' && $this->table[$user->table]->auth_type == TABLE_AUTH_TY_PUBL)
1893 $user->flags &= ~(USER_FLAG_AUTH | USER_FLAG_TY_ALL); // Remove auth if name changed
1894 for ($i = 0 ; $i < TABLES_N ; $i++) {
1895 $to_user .= $this->table[$i]->act_content($user);
1899 $to_user = nickserv_msg($dt, $mlang_brisk['authchan'][$G_lang]);
1904 $user->name = $name_new; // OK - nick changed
1905 /* se nome gia' in uso, segnala cosa potrebbe capitare */
1906 if ( ! $user->is_auth() ) {
1907 if (($bdb = BriskDB::create()) != FALSE) {
1909 /* MLANG: "Il nickname <b>\'%s\'</b> è già registrato, <b>se il suo proprietario si autentificherà verrai rinominato d\'ufficio come ghost<i>N</i>.</b>" */
1910 if ($bdb->login_exists($name_new)) {
1911 $prestr = sprintf($mlang_brisk['nickjust'][$G_lang], xcape($name_new));
1912 $to_user .= nickserv_msg($dt, $prestr);
1917 log_main("chatt_send start set");
1919 $update_room = TRUE;
1921 } // nick chat command
1922 else if (strncmp($msg, "/guar ", 6) == 0 || $msg == "/guar") {
1923 $guar_user = substr($msg, 6);
1925 $this->guarantee_show($user, $guar_user, $dt);
1927 else if (strncmp($msg, "/st ", 4) == 0) {
1928 log_main("chatt_send BEGIN");
1931 $st_str = substr($msg, 4);
1933 if (strcasecmp($st_str, "normale") == 0) {
1934 $st = USER_FLAG_S_NORM;
1936 else if (strcasecmp($st_str, "pausa") == 0) {
1937 $st = USER_FLAG_S_PAU;
1939 else if (strcasecmp($st_str, "fuori") == 0) {
1940 $st = USER_FLAG_S_OUT;
1942 else if (strcasecmp($st_str, "cane") == 0) {
1943 $st = USER_FLAG_S_DOG;
1945 else if (strcasecmp($st_str, "cibo") == 0) {
1946 $st = USER_FLAG_S_EAT;
1948 else if (strcasecmp($st_str, "lavoro") == 0) {
1949 $st = USER_FLAG_S_WRK;
1951 else if (strcasecmp($st_str, "sigaretta") == 0) {
1952 $st = USER_FLAG_S_SMK;
1954 else if (strcasecmp($st_str, "presente") == 0) {
1955 $st = USER_FLAG_S_EYE;
1957 else if (strcasecmp($st_str, "coniglio") == 0) {
1958 $st = USER_FLAG_S_RABB;
1960 else if (strcasecmp($st_str, "calcio") == 0) {
1961 $st = USER_FLAG_S_SOCC;
1963 else if (strcasecmp($st_str, "pupo") == 0) {
1964 $st = USER_FLAG_S_BABY;
1966 else if (strcasecmp($st_str, "pulizie") == 0) {
1967 $st = USER_FLAG_S_MOP;
1969 else if (strcasecmp($st_str, "babbo") == 0) {
1970 $st = USER_FLAG_S_BABBO;
1972 else if (strcasecmp($st_str, "renna") == 0) {
1973 $st = USER_FLAG_S_RENNA;
1975 else if (strcasecmp($st_str, "pupazzo") == 0) {
1976 $st = USER_FLAG_S_PUPAZ;
1978 else if (strcasecmp($st_str, "vischio") == 0) {
1979 $st = USER_FLAG_S_VISCH;
1982 /* MLANG: "Questo stato non esiste." */
1983 $to_user = nickserv_msg($dt, $mlang_brisk['statunkn'][$G_lang]);
1987 log_main("chatt_send start set");
1988 if (($user->flags & USER_FLAG_S_ALL) != $st) {
1989 $update_room = TRUE;
1990 $user->flags = ($user->flags & ~USER_FLAG_S_ALL) | $st;
1993 } // nick chat command
1995 else { // normal chat line
1996 $is_normchat = TRUE;
1997 if (CHAT_ENABLED && $curtime < ($user->chat_ban + $user->chat_dlt)) {
1999 $user->chat_dlt = $user->chat_dlt * 2;
2000 if ($user->chat_dlt > 120)
2001 $user->chat_dlt = 120;
2003 else if ($user->chat_lst == $msg)
2005 else if (CHAT_ENABLED && $curtime - $user->chattime[($user->chat_cur + 1) % CHAT_N] < CHAT_ILL_TIME) {
2006 $user->chat_ban = $curtime;
2007 $user->chat_dlt = 5;
2011 $user->chat_ban = 0;
2012 $user->chat_dlt = 0;
2016 $to_user = sprintf('chatt_sub("%s",[%d,"%s"],"%s");', $dt, $user->flags, xcape($user->name), xcape("== chat ban =="));
2019 $to_user = sprintf('chatt_sub("%s",[%d,"%s"],"%s");', $dt, $user->flags, xcape($user->name), xcape($msg));
2020 // temporary silentiation for troll (will became array check)
2021 // if (strcasecmp($user->name,'JackRokka') != 0 && $user->sess != '47ea653f602e8')
2022 $to_room = $to_user;
2025 log_legal($curtime, $user->ip, $user,
2026 ($user->stat == 'room' ? 'room' : 'table '.$user->table),$msg);
2028 $user->chat_lst = "$msg";
2029 $user->chattime[$user->chat_cur % CHAT_N] = $curtime;
2039 // Output to clients
2042 if ($to_user != FALSE) {
2043 $user->comm[$user->step % COMM_N] = "gst.st = ".($user->step+1)."; ";
2044 $user->comm[$user->step % COMM_N] .= $to_user;
2048 if ($to_room != FALSE) {
2049 for ($i = 0 ; $i < MAX_PLAYERS ; $i++) {
2050 $user_cur = $this->user[$i];
2051 if ($target != "" && $user_cur->name != $target)
2053 if ($user_cur->sess == '' || $user_cur->stat == 'table' || $user->idx_get() == $i)
2056 if ($is_normchat == TRUE) {
2057 // use MAP_AUTH to check if auth or isolation
2058 if ($user_cur->flags & USER_FLAG_MAP_AUTH) {
2059 if ( ! $user->is_auth() ) {
2065 else if ($is_ticker) {
2066 if (($user_cur->flags & USER_FLAG_MAP_AUTH) == USER_FLAG_ISOLAUTH) {
2067 if ($user->table >= TABLES_AUTH_N)
2072 $user_cur->comm[$user_cur->step % COMM_N] = "gst.st = ".($user_cur->step+1)."; ";
2073 $user_cur->comm[$user_cur->step % COMM_N] .= $to_room;
2074 $user_cur->step_inc();
2079 // FIXME BRISK4: include for each kind of table
2080 require_once("${G_base}briskin5/Obj/briskin5.phh");
2081 // Before all align times with table timeout
2082 for ($table_idx = 0 ; $table_idx < TABLES_N ; $table_idx++) {
2083 if (isset($this->match[$table_idx])) {
2084 $bin5 = $this->match[$table_idx];
2086 $bin5_table = $bin5->table[0];
2087 for ($i = 0 ; $i < $bin5_table->player_n ; $i++) {
2088 // stat must be "table" by definition
2089 $bin5_user = $bin5->user[$i];
2091 if ($target != "" && $bin5_user->name != $target)
2093 log_main("writa: ".$user_mesg);
2094 $bin5_user->comm[$bin5_user->step % COMM_N] = "gst.st = ".($bin5_user->step+1)."; ";
2095 $bin5_user->comm[$bin5_user->step % COMM_N] .= $to_tabl;
2096 $bin5_user->step_inc();
2098 } // if (isset($this->match
2099 } // for ($table_idx = 0 ; $table_idx < TABLES_N ; $table_idx++) {
2100 } // if ($to_tabl == true ...
2103 if ($user->stat == 'room' && $user->subst == 'standup') {
2104 $this->standup_update($user);
2106 else if ($user->stat == 'room' && $user->subst == 'sitdown') {
2107 log_main("chatt_send pre table update");
2108 $this->table_update($user);
2109 log_main("chatt_send post table update");
2111 } // if ($update_room ...
2114 } // function chatt_send( ...
2116 function get_user($sess, &$idx)
2120 if (validate_sess($sess)) {
2121 for ($i = 0 ; $i < MAX_PLAYERS ; $i++) {
2122 if (strcmp($sess, $this->user[$i]->sess) == 0) {
2125 $ret = $this->user[$i];
2129 log_main(sprintf("get_user: Wrong sess from page [%s]",$PHP_SELF));
2130 // for ($i = 0 ; $i < MAX_PLAYERS ; $i++)
2131 // log_main(sprintf("get_user: Wrong sess compared with [%s]",$this->user[$i]->sess));
2134 log_main(sprintf("get_user: Wrong strlen [%s]",$sess));
2141 * function add_user(&$brisk, &$sess, &$idx, $name, $pass, $ip)
2144 * if ($idx > -1 && ret == FALSE) => duplicated nick
2145 * if ($idx == -2 && ret == FALSE) => invalid name
2146 * if ($idx == -3 && ret == FALSE) => wrong password
2147 * if ($idx == -1 && ret == FALSE) => no space left
2148 * if ($idx == 0 && ret == user) => SUCCESS
2149 * if ($idx == -$idx && ret == user) => SUCCESS (but the login exists in the auth db)
2152 function add_user(&$sess, &$idx, $name, $pass, $ip, $cookie)
2158 $authenticate = FALSE;
2160 $login_exists = FALSE;
2162 $ghost_auth = FALSE;
2167 if (($name_new = validate_name($name)) == FALSE) {
2172 log_auth("XXX", sprintf("ARRIVA: [%s] pass:[%s]", $sess, ($pass == FALSE ? "FALSE" : $pass)));
2173 if (validate_sess($sess) == FALSE)
2176 /* if pass != FALSE verify the login with pass */
2177 log_auth("XXX", "auth1");
2179 if (($bdb = BriskDB::create()) != FALSE) {
2181 if ($pass != FALSE) { // TODO: here add a method to $bdb to check if the db is available.
2182 log_auth("XXX", "auth2");
2183 $authenticate = $bdb->login_verify($name_new, $pass, $code);
2184 log_auth("XXX", "authenticate: ".($authenticate != FALSE ? "TRUE" : "FALSE"));
2186 if ($authenticate != FALSE) {
2187 $user_type = $authenticate->type_get();
2195 $login_exists = $bdb->login_exists($name_new);
2199 // if db is down, send a warning and verify only current users
2200 // no actions at this moment
2202 for ($i = 0 ; $i < MAX_PLAYERS ; $i++) {
2204 if (strcmp($sess, $this->user[$i]->sess) == 0) {
2208 if ($idfree == -1 && strcmp($this->user[$i]->sess, "") == 0) {
2210 continue; // NOTE: CHECK IT !!
2212 if (strcasecmp($this->user[$i]->name, $name_new) == 0) {
2213 if ($authenticate != FALSE) {
2215 $ghost_auth = $this->user[$i]->is_auth();
2226 log_auth("XXX", sprintf("TROVATO A QUESTO PUNTO [%d] sess [%s] name [%s]", $idx, $sess, $name_new));
2228 /* there is another user logged with your account and you and him have authenticated => new user
2229 get the session of the old user */
2230 if ($ghost > -1 && $ghost_auth && ($authenticate != FALSE)) {
2233 $ghost_user = $this->user[$ghost];
2235 $ghost_user->comm[$ghost_user->step % COMM_N] = "";
2236 $ghost_user->step_inc();
2239 $ghost_user->sess = $sess;
2242 $ghost_user->sess = $sess;
2245 // If user at the table we need to update the table data too
2246 $table_idx = $ghost_user->table;
2247 if ($ghost_user->stat == "table" && $this->table[$table_idx]->player_n == PLAYERS_N) {
2248 require_once("${G_base}briskin5/Obj/briskin5.phh");
2249 if (isset($this->match[$table_idx])) {
2250 $bin5 = $this->match[$table_idx];
2252 if ($bin5->the_end != TRUE) {
2253 $bin5->user[$ghost_user->table_pos]->comm[$bin5->user[$ghost_user->table_pos]->step % COMM_N] = "";
2254 $bin5->user[$ghost_user->table_pos]->step_inc();
2255 $bin5->user[$ghost_user->table_pos]->sess = $sess;
2261 return ($this->user[$ghost]);
2263 else if ($idx != -1 && $i == MAX_PLAYERS) {
2268 $this->user[$idx]->sess = $sess;
2271 $this->user[$idx]->sess = $sess;
2273 $this->user[$idx]->name = $name_new; // OK - add new user
2274 $this->user[$idx]->stat_set("room");
2275 $this->user[$idx]->step_set(0);
2276 while (array_pop($this->user[$idx]->comm) != NULL);
2277 $this->user[$idx]->subst = "standup";
2278 $this->user[$idx]->lacc = $curtime;
2279 $this->user[$idx]->laccwr = $curtime;
2280 $this->user[$idx]->bantime = 0;
2281 $this->user[$idx]->ip = $ip;
2283 $this->user[$idx]->rec = $authenticate;
2284 $this->user[$idx]->flags = $user_type;
2285 $this->user[$idx]->flags |= ($authenticate != FALSE ? USER_FLAG_AUTH : 0x00);
2286 $this->user[$idx]->flags |= ( ($pass != FALSE && $bdb == FALSE) ? USER_FLAG_DBFAILED : 0x00);
2287 log_auth("XXX", sprintf("FLAGS: [%x]", $this->user[$idx]->flags));
2289 if ($authenticate != FALSE) {
2290 $this->user[$idx]->code = $authenticate->code_get();
2292 // all this part is included in the db server
2293 $this->user[$idx]->flags |= USER_FLAG_LISTAUTH;
2295 if (isset($cookie['CO_list'])) {
2296 fprintf(STDERR, "QQ: %s CO_list: [%s]\n", __FUNCTION__, $cookie['CO_list']);
2297 if (strcmp($cookie['CO_list'], "auth") == 0) {
2298 $this->user[$idx]->flags &= ~USER_FLAG_MAP_AUTH;
2299 $this->user[$idx]->flags |= USER_FLAG_LISTAUTH;
2301 if (strcmp($cookie['CO_list'], "isolation") == 0) {
2302 $this->user[$idx]->flags &= ~USER_FLAG_MAP_AUTH;
2303 $this->user[$idx]->flags |= USER_FLAG_ISOLAUTH;
2306 $this->user[$idx]->flags &= ~USER_FLAG_MAP_AUTH;
2311 fprintf(STDERR, "QQ: CO_list not set flags: %x\n", __FUNCTION__, $this->user[$idx]->flags);
2314 fprintf(STDERR, "QQ %s: flag %x\n", __FUNCTION__, $this->user[$idx]->flags);
2316 log_main("ghost: rename!");
2317 $ghost_user = $this->user[$ghost];
2319 if ($ghost_auth == FALSE) {
2320 for ($sfx = 1 ; $sfx <= MAX_PLAYERS ; $sfx++) {
2321 $ghostname = 'ghost'.$sfx;
2322 for ($i = 0 ; $i < MAX_PLAYERS ; $i++) {
2323 if (strcmp("", $this->user[$i]->sess) == 0)
2326 if (strcasecmp($this->user[$i]->name, $ghostname) == 0) {
2331 if ($ghostname != '')
2335 $ghost_user->name = $ghostname;
2337 if ($ghost_user->stat == 'room' && $ghost_user->subst == 'standup') {
2338 $this->standup_update($ghost_user);
2341 log_main("chatt_send pre table update");
2342 $this->table_update($ghost_user);
2343 log_main("chatt_send post table update");
2345 } // if ($ghost_auth == FALSE
2347 // FIXME: cacciare il vecchio utente room && table (if needed)
2348 $ghost_user->the_end = TRUE;
2349 $ghost_user->lacc = 0;
2350 $this->garbage_manager(TRUE);
2352 } // if ($ghost > -1) {
2357 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));
2359 $ret = $this->user[$real_idx];
2360 if ($this->cds->execute("tor_chk", $this, $real_idx, $sess, $ip) == FALSE) {
2361 log_main("cds_execute failed");
2370 function standup_update($user)
2372 for ($i = 0 ; $i < MAX_PLAYERS ; $i++) {
2373 $user_cur = $this->user[$i];
2374 if ($user_cur->sess == '')
2377 log_main("STANDUP START: ".$user_cur->stat);
2379 if ($user_cur->stat == 'room') {
2380 $user_cur->comm[$user_cur->step % COMM_N] = "gst.st = ".($user_cur->step+1)."; ".$this->standup_content($user_cur);
2381 if ($user->idx_get() == $i) {
2382 $user_cur->comm[$user_cur->step % COMM_N] .= $user->myname_innerHTML();
2384 log_main("FROM STANDUP: NAME: ".$user_cur->name." SENDED: ".$user_cur->comm[$user_cur->step % COMM_N]);
2386 $user_cur->step_inc();
2391 function dump_data()
2393 $brisk_ser = serialize($this);
2394 $brisk_ser_len = mb_strlen($brisk_ser, "ASCII");
2395 if (file_put_contents($this->crystal_filename, $brisk_ser) == $brisk_ser_len) {
2402 function standup_content($user)
2407 if ($user->stat != 'room')
2410 for ($i = 0 , $ct = 0 ; $ct < 4 && $i < MAX_PLAYERS ; $i++) {
2411 if ($this->user[$i]->sess == "" || $this->user[$i]->stat != "room" || $this->user[$i]->name == "")
2416 // $content .= sprintf('<table cols=\\"%d\\" class=\\"table_standup\\">', $ct);
2418 $content = ' j_stand_cont( [ ';
2420 $user_cur_id = $user->idx_get();
2421 for ($i = 0 , $ct = 0 ; $i < MAX_PLAYERS ; $i++) {
2422 if ($this->user[$i]->sess == "" || $this->user[$i]->stat != "room" || $this->user[$i]->name == "")
2425 $flags = $this->user[$i]->flags;
2427 // sql record exists AND last donate > 2013-01-01
2428 if ($this->user[$i]->is_supp_custom()) {
2429 $supp_comp_s = sprintf(', "%s"', $this->user[$i]->rec->supp_comp_get());
2435 if ($this->user[$i]->subst == "standup") {
2436 if ($user_cur_id == $i) {
2440 $content .= sprintf('%s[ %d, "%s"%s ]',($ct > 0 ? ', ' : ''), $flags,
2441 xcape($this->user[$i]->name), $supp_comp_s);
2450 function table_content($user, $table_idx)
2456 // Si possono usare i dati nella classe table
2459 $sess = $user->sess;
2460 $table = $this->table[$table_idx];
2462 if ($user->stat != 'room')
2465 $user_cur_id = $user->idx_get();
2467 for ($i = 0 ; $i < $table->player_n ; $i++) {
2468 $user_cur = $this->user[$table->player[$i]];
2470 $flags = $user_cur->flags;
2472 if ($user_cur_id == $table->player[$i])
2475 log_main($user_cur->name. sprintf(" IN TABLE [%d]", $table_idx));
2476 if ($user_cur->is_supp_custom())
2477 $supp_comp_s = sprintf(', "%s"', $user_cur->rec->supp_comp_get());
2481 $content .= sprintf('%s[ %d, "%s"%s ]',($i == 0 ? '' : ', '), $flags,
2482 xcape($user_cur->name), $supp_comp_s);
2487 $ret .= sprintf('j_tab_cont(%d, %s);', $table_idx, $content);
2492 function request_mgr(&$s_a_p, $header, &$header_out, &$new_socket, $path, $addr, $get, $post, $cookie)
2494 GLOBAL $G_ban_list, $G_black_list;
2496 printf("NEW_SOCKET (root): %d PATH [%s]\n", intval($new_socket), $path);
2497 $remote_addr = addrtoipv4($addr);
2499 fprintf(STDERR, "\n\n\n PRE_BLACK_CHECK \n\n\n");
2500 if ($this->black_check($remote_addr)) {
2501 // TODO: waiting async 5 sec before close
2502 fprintf(STDERR, "\n\n\n BLACK_CHECK \n\n\n");
2506 $enc = get_encoding($header);
2507 if (isset($header['User-Agent'])) {
2508 if (strstr($header['User-Agent'], "MSIE")) {
2509 $transp_type = "htmlfile";
2512 $transp_type = "xhr";
2516 $transp_type = "iframe";
2518 force_no_cache($header_out);
2524 index_main($this, $transp_type, $header_out, $addr, $get, $post, $cookie);
2525 $content = ob_get_contents();
2528 // fprintf(STDERR, "\n\nCONTENT [%s]\n\n", $content);
2529 $s_a_p->pendpage_try_addflush($new_socket, 20, $enc, $header_out, $content);
2533 case "index_wr.php":
2535 // Enhance required: in the POST case, after the header you must get content
2536 // from the socket, waiting if necessary
2540 index_wr_main($this, $addr, $get, $post, $cookie);
2541 $content = ob_get_contents();
2544 $s_a_p->pendpage_try_addflush($new_socket, 20, $enc, $header_out, $content);
2548 case "index_rd.php":
2549 if (($transp = gpcs_var('transp', $get, $post, $cookie)) === FALSE)
2551 if ($transp == 'websocket')
2555 if (!isset($cookie['sess'])
2556 || (($user = $this->get_user($cookie['sess'], $idx)) == FALSE)) {
2558 $content = User::stream_fini($transp, $s_a_p->rndstr, TRUE);
2560 $s_a_p->pendpage_try_addflush($new_socket, 20, $enc, $header_out, $content);
2565 $this->sess_cur_set($user->sess);
2566 // close a previous opened index_read_ifra socket, if exists
2567 if (($prev = $user->rd_socket_get()) != NULL) {
2568 $s_a_p->socks_unset($user->rd_socket_get());
2569 fclose($user->rd_socket_get());
2570 printf("CLOSE AND OPEN AGAIN ON IFRA2\n");
2571 $user->rd_socket_set(NULL);
2575 $user->stream_init($s_a_p->rndstr, $enc, $header, $header_out, $content, $get, $post, $cookie);
2576 $response = headers_render($header_out, -1).$user->chunked_content($content);
2577 $response_l = mb_strlen($response, "ASCII");
2579 $wret = @fwrite($new_socket, $response, $response_l);
2580 if ($wret < $response_l) {
2581 printf("TROUBLES WITH FWRITE: %d\n", $wret);
2582 $user->rd_cache_set(mb_substr($content, $wret, $response_l - $wret, "ASCII"));
2585 $user->rd_cache_set("");
2587 fflush($new_socket);
2590 $s_a_p->socks_set($new_socket, $user, NULL);
2591 $user->rd_socket_set($new_socket);
2592 printf(" - qui ci siamo - ");
2599 if (!(BRISK_DEBUG & DBG_ENGI))
2601 fprintf(STDERR, "TEST.PHP running\n");
2602 if (isset($post['data'])) {
2603 $content = $post['data'];
2606 $content = "NO DATA AVAILABLE";
2608 $header_out['Content-Type'] = 'text/plain';
2609 $s_a_p->pendpage_try_addflush($new_socket, 20, $enc, $header_out, $content);
2613 /* FAR TODO: move all into an array of registered sub-apps */
2614 $subs = "briskin5/";
2615 $subs_l = strlen($subs);
2616 if (!strncmp($path, $subs, $subs_l)) {
2617 $ret = Bin5::request_mgr(&$s_a_p, $header, &$header_out, &$new_socket, substr($path, $subs_l) , $addr, $get, $post, $cookie);
2626 function match_add($idx, $match)
2628 $this->match[$idx] = $match;
2631 function match_del($idx)
2633 unset($this->match[$idx]);
2636 function match_get($idx, $token)
2638 if (isset($this->match[$idx])) {
2640 || $token == $this->match[$idx]->table_token) {
2641 return ($this->match[$idx]);
2646 function sess_cur_set($sess)
2648 static::$sess_cur = $sess;
2651 static function sess_cur_get()
2653 return(static::$sess_cur);
2655 } // end class Brisk
2657 function make_seed()
2659 list($usec, $sec) = explode(' ', microtime());
2660 return (float) $sec + ((float) $usec * 100000);
2663 function btrace_line($ar)
2665 GLOBAL $G_btrace_pref_sub;
2668 for ($i = 0 ; $i < count($ar) ; $i++) {
2669 $with_class = isset($ar[$i]['class']);
2670 $with_file = isset($ar[$i]['file']);
2671 $ret .= sprintf("%s%s%s (%s:%d)", ($i == 0 ? "" : ", "),
2672 ($with_class ? $ar[$i]['class'].$ar[$i]['type'] : ""),
2673 $ar[$i]['function'], ($with_file ? str_replace($G_btrace_pref_sub, "", $ar[$i]['file']) : ""),
2674 ($with_file ? $ar[$i]['line'] : ""));
2680 function trace_ftok($id, $add)
2682 // NOTE: without space to use sed to substitute "= @ftok(" with "= @ftok("
2683 $tok=@ftok($id, $add);
2685 log_shme($tok.": ".$id." + ".$add);
2690 function log_mop($step, $log)
2694 if (BRISK_SINGLE_SESS == "" && (BRISK_DEBUG & DBG_LMOP) == 0)
2697 $sess = Brisk::sess_cur_get();
2698 if (isset($sess) == FALSE)
2703 if (( (BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_LMOP) == 0)
2706 if ((BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_TRAC)
2707 $btrace = btrace_line(debug_backtrace());
2710 if (($fp = @fopen(LEGAL_PATH."/brisk.log", 'a')) != FALSE) {
2711 fwrite($fp, sprintf("LMOP: [%f] [%05d] [%s] [%s]\n", gettimeofday(TRUE), $step, $log, $btrace));
2717 function log_cds($log)
2721 if (BRISK_SINGLE_SESS == "" && (BRISK_DEBUG & DBG_CDS) == 0)
2724 $sess = Brisk::sess_cur_get();
2725 if (isset($sess) == FALSE)
2730 if (( (BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_CDS) == 0)
2733 if ((BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_TRAC)
2734 $btrace = btrace_line(debug_backtrace());
2737 if (($fp = @fopen(LEGAL_PATH."/cds.log", 'a')) != FALSE) {
2738 fwrite($fp, sprintf("CDS: [%f] [%s] [%s]\n", gettimeofday(TRUE), $log, $btrace));
2744 function log_only2($log)
2748 if (BRISK_SINGLE_SESS == "" && (BRISK_DEBUG & DBG_ONL2) == 0)
2751 $sess = Brisk::sess_cur_get();
2752 if (isset($sess) == FALSE)
2757 if (( (BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_ONL2) == 0)
2760 if ((BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_TRAC)
2761 $btrace = btrace_line(debug_backtrace());
2764 if (($fp = @fopen(LEGAL_PATH."/brisk.log", 'a')) != FALSE) {
2765 fwrite($fp, sprintf("ONL2: [%s] [%s] [%s]\n", $ssess, $log, $btrace));
2770 function log_crit($log)
2774 if (BRISK_SINGLE_SESS == "" && (BRISK_DEBUG & DBG_CRIT) == 0)
2777 $sess = Brisk::sess_cur_get();
2778 if (isset($sess) == FALSE)
2783 if (( (BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_CRIT) == 0)
2786 if ((BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_TRAC)
2787 $btrace = btrace_line(debug_backtrace());
2790 if (($fp = @fopen(LEGAL_PATH."/brisk.log", 'a')) != FALSE) {
2791 fwrite($fp, sprintf("CRIT: [%s] [%s] [%s]\n", $ssess, $log, $btrace));
2796 function log_only($log)
2800 if (BRISK_SINGLE_SESS == "" && (BRISK_DEBUG & DBG_ONLY) == 0)
2803 $sess = Brisk::sess_cur_get();
2804 if (isset($sess) == FALSE)
2809 if (( (BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_ONLY) == 0)
2812 if ((BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_TRAC)
2813 $btrace = btrace_line(debug_backtrace());
2816 if (($fp = @fopen(LEGAL_PATH."/brisk.log", 'a')) != FALSE) {
2817 fwrite($fp, sprintf("ONLY: [%s] [%s] [%s]\n", $ssess, $log, $btrace));
2822 function log_main($log)
2826 if (BRISK_SINGLE_SESS == "" && (BRISK_DEBUG & DBG_MAIN) == 0)
2829 $sess = Brisk::sess_cur_get();
2830 if (isset($sess) == FALSE)
2835 if (( (BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_MAIN) == 0)
2838 if ((BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_TRAC)
2839 $btrace = btrace_line(debug_backtrace());
2842 if (($fp = @fopen(LEGAL_PATH."/brisk.log", 'a')) != FALSE) {
2843 fwrite($fp, sprintf("MAIN: [%s] [%s] [%s]\n", $ssess, $log, $btrace));
2848 function log_rd($log)
2852 if (BRISK_SINGLE_SESS == "" && (BRISK_DEBUG & DBG_READ) == 0)
2855 $sess = Brisk::sess_cur_get();
2856 if (isset($sess) == FALSE)
2861 if (( (BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_READ) == 0)
2864 if ((BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_TRAC)
2865 $btrace = btrace_line(debug_backtrace());
2868 if (($fp = @fopen(LEGAL_PATH."/brisk.log", 'a')) != FALSE) {
2869 fwrite($fp, sprintf("READ: [%s] [%s] [%s]\n", $ssess, $log, $btrace));
2874 function log_rd2($log)
2878 if (BRISK_SINGLE_SESS == "" && (BRISK_DEBUG & DBG_REA2) == 0)
2881 $sess = Brisk::sess_cur_get();
2882 if (isset($sess) == FALSE)
2887 if (( (BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_REA2) == 0)
2890 if ((BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_TRAC)
2891 $btrace = btrace_line(debug_backtrace());
2895 if (($fp = @fopen(LEGAL_PATH."/brisk.log", 'a')) != FALSE) {
2896 fwrite($fp, sprintf("REA2: [%s] [%s] [%s]\n", $ssess, $log, $btrace));
2901 function log_send($log)
2905 if (BRISK_SINGLE_SESS == "" && (BRISK_DEBUG & DBG_SEND) == 0)
2908 $sess = Brisk::sess_cur_get();
2909 if (isset($sess) == FALSE)
2914 if (( (BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_SEND) == 0)
2917 if ((BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_TRAC)
2918 $btrace = btrace_line(debug_backtrace());
2921 if (($fp = @fopen(LEGAL_PATH."/brisk.log", 'a')) != FALSE) {
2922 fwrite($fp, sprintf("SEND: [%s] [%s] [%s]\n", $ssess, $log, $btrace));
2927 function log_lock($log)
2931 if (BRISK_SINGLE_SESS == "" && (BRISK_DEBUG & DBG_LOCK) == 0)
2934 $sess = Brisk::sess_cur_get();
2935 if (isset($sess) == FALSE)
2940 if (( (BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_LOCK) == 0)
2943 if ((BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_TRAC)
2944 $btrace = btrace_line(debug_backtrace());
2947 if (($fp = @fopen(LEGAL_PATH."/brisk.log", 'a')) != FALSE) {
2948 fwrite($fp, sprintf("LOCK: [%s] [%s] [%s]\n", $ssess, $log, $btrace));
2953 function log_wr($log)
2957 if (BRISK_SINGLE_SESS == "" && (BRISK_DEBUG & DBG_WRIT) == 0)
2960 $sess = Brisk::sess_cur_get();
2961 if (isset($sess) == FALSE)
2966 if (( (BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_WRIT) == 0)
2969 if ((BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_TRAC)
2970 $btrace = btrace_line(debug_backtrace());
2973 if (($fp = @fopen(LEGAL_PATH."/brisk.log", 'a')) != FALSE) {
2974 fwrite($fp, sprintf("WRIT: [%s] [%s] [%s]\n", $ssess, $log, $btrace));
2979 function log_load($log)
2983 if (BRISK_SINGLE_SESS == "" && (BRISK_DEBUG & DBG_LOAD) == 0)
2986 $sess = Brisk::sess_cur_get();
2987 if (isset($sess) == FALSE)
2992 if (( (BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_LOAD) == 0)
2995 if ((BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_TRAC)
2996 $btrace = btrace_line(debug_backtrace());
2999 if (($fp = @fopen(LEGAL_PATH."/brisk.log", 'a')) != FALSE) {
3000 fwrite($fp, sprintf("LOAD: [%s] [%s] [%s]\n", $ssess, $log, $btrace));
3005 function log_auth($sess, $log)
3009 if (BRISK_SINGLE_SESS == "" && (BRISK_DEBUG & DBG_AUTH) == 0)
3012 if (( (BRISK_DEBUG | ($sess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_AUTH) == 0)
3015 if ((BRISK_DEBUG | ($sess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_TRAC)
3016 $btrace = btrace_line(debug_backtrace());
3019 if (($fp = @fopen(LEGAL_PATH."/brisk.log", 'a')) != FALSE) {
3020 fwrite($fp, sprintf("LOAD: [%s] [%d] [%s] [%s]\n", $sess, time(), $log, $btrace));
3025 function log_shme($log)
3029 if (BRISK_SINGLE_SESS == "" && (BRISK_DEBUG & DBG_SHME) == 0)
3032 $sess = Brisk::sess_cur_get();
3033 if (isset($sess) == FALSE)
3038 if (( (BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_SHME) == 0)
3041 if ((BRISK_DEBUG | ($ssess == BRISK_SINGLE_SESS ? BRISK_SINGLE_DEBUG : 0) ) & DBG_TRAC)
3042 $btrace = btrace_line(debug_backtrace());
3045 if (($fp = @fopen(LEGAL_PATH."/brisk.log", 'a')) != FALSE) {
3046 fwrite($fp, sprintf("SHME: [%s] [%s] [%s]\n", $ssess, $log, $btrace));
3053 // function log_legal($curtime, $sess, $name, $where, $mesg)
3054 function log_legal($curtime, $addr, $user, $where, $mesg)
3057 if (($fp = @fopen(LEGAL_PATH."/legal.log", 'a')) != FALSE) {
3058 /* Unix time | session | nickname | IP | where was | mesg */
3059 fwrite($fp, sprintf("%ld|%s|%s|%s|%s|%s|%s|\n", $curtime, $user->sess,
3060 ($user->is_auth() ? 'A' : 'N'),
3061 $user->name, $addr, $where , $mesg));
3066 function table_act_content($isstanding, $sitted, $table, $cur_table, $allowed)
3071 if ($sitted < PLAYERS_N) {
3079 if ($table == $cur_table)
3086 $ret = sprintf('j_tab_act_cont(%d, \'%s\');', $table, $act);
3091 function show_notify($text, $tout, $butt, $w, $h)
3093 log_main("SHOW_NOTIFY: ".$text);
3094 return sprintf('var noti = new notify(gst,"%s",%d,"%s",%d,%d);', $text, $tout, $butt, $w, $h);
3097 function show_notify_ex($text, $tout, $butt, $w, $h, $is_opaque, $block_time)
3099 log_main("SHOW_NOTIFY OPAQUE: ".$text);
3100 return sprintf('var noti = new notify_ex(gst,"%s",%d,"%s",%d,%d, %s, %d);', $text, $tout, $butt, $w, $h, ($is_opaque ? "true" : "false"), $block_time);
3103 function show_notify_document($text, $tout, $butt_arr, $confirm_func, $confirm_func_args, $w, $h, $is_opaque, $block_time)
3105 log_main("SHOW_NOTIFY OPAQUE: ".$text);
3108 for ($i = 0 ; $i < count($butt_arr) ; $i++) {
3109 $butts .= sprintf("%s'%s'", ($i == 0 ? "" : ","), $butt_arr[$i]);
3112 return sprintf('g_nd = new notify_document(gst, "%s", %d, [ %s ], %s, %s, %d, %d, %s, %d);|',
3113 escpush($text), $tout, $butts, ($confirm_func == NULL ? "null" : $confirm_func), (($confirm_func == NULL|| $confirm_func_args == NULL) ? "[]" : $confirm_func_args), $w, $h, ($is_opaque ? "true" : "false"), $block_time);
3117 function root_welcome($user)
3119 GLOBAL $root_wellarr, $G_lang;
3123 $dt = date("H:i ", $curtime);
3125 for ($i = 0 ; $i < count($root_wellarr[$G_lang]) ; $i++)
3126 $ret .= nickserv_msg($dt, str_replace('"', '\"', $root_wellarr[$G_lang][$i]));
3133 function validate_sess($sess)
3135 if (strlen($sess) == SESS_LEN)
3141 function validate_name($name)
3143 $name_new = str_replace(' ', '_', mb_substr(trim($name),0,12, "UTF-8"));
3145 for ($i = 0 ; $i < strlen($name_new) ; $i++) {
3147 if (($c >= "a" && $c <= "z") || ($c >= "A" && $c <= "Z") || ($c >= "0" && $c <= "9"))
3154 function playsound($filename)
3156 return (sprintf('playsound("flasou", "%s");', $filename));
3159 function secstoword($secs)
3165 $mins = floor($secs / 60);
3167 if ($G_lang == 'en') {
3169 $ret = sprintf("%d minute%s%s", $mins, ($mins > 1 ? "s" : ""), ($secs > 0 ? " and " : ""));
3172 $ret .= sprintf("%d second%s", $secs, ($secs > 1 ? "s" : ""));
3176 $ret = sprintf("%d minut%s%s", $mins, ($mins > 1 ? "i" : "o"), ($secs > 0 ? " e " : ""));
3179 $ret .= sprintf("%d second%s", $secs, ($secs > 1 ? "i" : "o"));
3184 function sharedmem_sz($tok)
3186 if (($shm_id = @shmop_open($tok, 'a', 0, 0)) == FALSE) {
3187 log_main("shmop_open failed");
3190 $shm_sz = shmop_size($shm_id);
3191 shmop_close($shm_id);
3193 // log_main("shm_sz: ".$shm_sz." SHM_DIMS: ".SHM_DIMS);
3200 static function lock_data($is_exclusive)
3202 if (($res = file_lock(FTOK_PATH."/warrant", $is_exclusive)) != FALSE) {
3203 self::$delta_t = microtime(TRUE);
3204 log_lock("LOCK warrant [".self::$delta_t."]");
3212 static function unlock_data($res)
3216 log_lock("UNLOCK warrant [".(microtime(TRUE) - (self::$delta_t))."]");
3225 static function lock_data($is_exclusive)
3227 if (($res = file_lock(FTOK_PATH."/poll", $is_exclusive)) != FALSE) {
3228 self::$delta_t = microtime(TRUE);
3229 log_lock("LOCK poll [".self::$delta_t."]");
3237 static function unlock_data($res)
3241 log_lock("UNLOCK poll [".(microtime(TRUE) - (self::$delta_t))."]");
3247 function carousel_top()
3252 return (sprintf('<a target="_blank" href="http://shop.alternativeoutput.it"><img class="nobo" style="display: inline; border: 1px solid #808080;" alt="il negozio virtuale di Brisk" title="il negozio virtuale di Brisk" src="img/briskshop%d.gif"></a>', $rn));
3255 return (sprintf('<a target="_blank" href="http://www.alternativeoutput.it/briskblog"><img class="nobo" alt="il nuovo blog di Brisk" title="il nuovo blog di Brisk" style="display: inline; border: 1px solid #808080;" src="img/briskblog_bannersmall.png"></a>'));