Commit | Line | Data |
---|---|---|
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 |