Passes jslint with regexp: true, confusion: true, undef: false, node: true, sloppy...
[KiwiIRC.git] / class_session.php
CommitLineData
54f4a22e
D
1<?php\r
2\r
3 class SESSIONS {\r
4 static function exists($session_id){\r
5 global $config;\r
6 \r
7 if($config['memcache_use']){\r
8 $ret = GLOB::$mc->get('sid_'.$session_id) ? true : false;\r
9 return $ret;\r
10 } else {\r
11 $session_sok = $config['sok_dir'].$config['sok_prefix'].$session_id;\r
12 return file_exists($session_sok);\r
13 }\r
14 }\r
15 \r
16 \r
17 \r
18 static function create($client_key){\r
19 global $config;\r
20 \r
21 $temp_id = md5(microtime().rand());\r
22 \r
23 if($config['memcache_use']){\r
24 $host_key = 'hostcount_'.$client_key;\r
25 $count = (int)GLOB::$mc->get($host_key);\r
26 if($count > $config['connections_per_host']) return false;\r
27 \r
28 // Save the sid into memcached for the ircbot to pick up\r
29 GLOB::$mc->add('sid_'.$temp_id, $temp_id);\r
30 }\r
31 \r
32 $session_cmd = "{$config['php_path']} {$config['session_script_path']} $temp_id $host_key -h$client_key";\r
33 //die($session_cmd);\r
34 $session_status = `$session_cmd`;\r
35 \r
36 if($session_status != 'ok'){\r
37 debug("Failed creating session socket with: $session_status");\r
38 GLOB::$mc->delete('sid_'.$temp_id);\r
39 return false;\r
40 }\r
41 \r
42 if($config['memcache_use']){\r
43 GLOB::$mc->add($host_key, 0);\r
44 GLOB::$mc->increment($host_key);\r
45 }\r
46 \r
47 return $temp_id;\r
48 }\r
49 \r
50 \r
51 \r
52 static function open($session_id){\r
53 global $config;\r
54 \r
55 if($config['memcache_use']){\r
56 $session_sok = GLOB::$mc->get('sid_'.$session_id);\r
57 if(!$session_sok) return false;\r
58 } else {\r
59 $session_sok = $session_id;\r
60 }\r
61 $session_sok = $config['sok_dir'].$config['sok_prefix'].$session_sok;\r
62 \r
63 $sok = @stream_socket_client('unix://'.$session_sok, $errno, $errstr);\r
64 \r
65 if(!$sok) return false;\r
66 return $sok;\r
67 }\r
68 \r
69 \r
70 \r
71 static function close($session){\r
72 fclose($session);\r
73 }\r
74 \r
75 \r
76 static function read($session, $block=true){\r
77 fwrite($session, json_encode(array('method'=>'read')));\r
78 \r
79 if(!$block){\r
80 stream_set_timeout($session, 0, 100000);\r
81 } else {\r
82 stream_set_timeout($session, 120, 0);\r
83 }\r
84 $data = fgets($session);\r
85 \r
86 return $data;\r
87 }\r
88 \r
89 \r
90 \r
91 \r
92 \r
93 static function clStart($session_id){\r
94 global $config;\r
95 \r
96 if($config['memcache_use']){\r
97 $session_sok = GLOB::$mc->get('sid_'.$session_id);\r
98 if(!$session_sok) return false;\r
99 } else {\r
100 $session_sok = $session_id;\r
101 }\r
102 $session_sok = $config['sok_dir'].$config['sok_prefix'].$session_sok;\r
103 \r
104 $sok = stream_socket_server('unix://'.$session_sok, $errno, $errstr);\r
105 if(!$sok) return false;\r
106 \r
107 return $sok;\r
108 \r
109 }\r
110 \r
111 \r
112 static function clStop($session){\r
113 fclose($session);\r
114 }\r
115 }\r