annotate msession.inc.php @ 51:7bdf89601ba0

Work on session stuff.
author Matti Hamalainen <ccr@tnsp.org>
date Sat, 05 Oct 2013 06:55:58 +0300
parents 5bf22431176c
children 70c0b21f0781
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
33
5bf22431176c Modularize.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1 <?
5bf22431176c Modularize.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
2 //
5bf22431176c Modularize.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
3 // FAPWEB - Demo Party Website System System
5bf22431176c Modularize.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
4 // Session management and authentication
5bf22431176c Modularize.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
5 // (C) Copyright 2012 Matti 'ccr' Hamalainen <ccr@tnsp.org>
5bf22431176c Modularize.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
6 //
5bf22431176c Modularize.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
7
51
7bdf89601ba0 Work on session stuff.
Matti Hamalainen <ccr@tnsp.org>
parents: 33
diff changeset
8 function stDebug($msg)
7bdf89601ba0 Work on session stuff.
Matti Hamalainen <ccr@tnsp.org>
parents: 33
diff changeset
9 {
7bdf89601ba0 Work on session stuff.
Matti Hamalainen <ccr@tnsp.org>
parents: 33
diff changeset
10 if (stGetSetting("debug"))
7bdf89601ba0 Work on session stuff.
Matti Hamalainen <ccr@tnsp.org>
parents: 33
diff changeset
11 error_log($msg);
7bdf89601ba0 Work on session stuff.
Matti Hamalainen <ccr@tnsp.org>
parents: 33
diff changeset
12 }
7bdf89601ba0 Work on session stuff.
Matti Hamalainen <ccr@tnsp.org>
parents: 33
diff changeset
13
7bdf89601ba0 Work on session stuff.
Matti Hamalainen <ccr@tnsp.org>
parents: 33
diff changeset
14
7bdf89601ba0 Work on session stuff.
Matti Hamalainen <ccr@tnsp.org>
parents: 33
diff changeset
15 function stGetSpecSessionItem($stype, $name, $default = "")
7bdf89601ba0 Work on session stuff.
Matti Hamalainen <ccr@tnsp.org>
parents: 33
diff changeset
16 {
7bdf89601ba0 Work on session stuff.
Matti Hamalainen <ccr@tnsp.org>
parents: 33
diff changeset
17 if (isset($stype))
7bdf89601ba0 Work on session stuff.
Matti Hamalainen <ccr@tnsp.org>
parents: 33
diff changeset
18 return (isset($_SESSION[$stype]) && isset($_SESSION[$stype][$name])) ? $_SESSION[$stype][$name] : $default;
7bdf89601ba0 Work on session stuff.
Matti Hamalainen <ccr@tnsp.org>
parents: 33
diff changeset
19 else
7bdf89601ba0 Work on session stuff.
Matti Hamalainen <ccr@tnsp.org>
parents: 33
diff changeset
20 return $default;
7bdf89601ba0 Work on session stuff.
Matti Hamalainen <ccr@tnsp.org>
parents: 33
diff changeset
21 }
7bdf89601ba0 Work on session stuff.
Matti Hamalainen <ccr@tnsp.org>
parents: 33
diff changeset
22
7bdf89601ba0 Work on session stuff.
Matti Hamalainen <ccr@tnsp.org>
parents: 33
diff changeset
23
33
5bf22431176c Modularize.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
24 function stGetSessionItem($name, $default = "")
5bf22431176c Modularize.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
25 {
5bf22431176c Modularize.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
26 global $sessionType;
51
7bdf89601ba0 Work on session stuff.
Matti Hamalainen <ccr@tnsp.org>
parents: 33
diff changeset
27 return stGetSpecSessionItem($sessionType, $name, $default);
33
5bf22431176c Modularize.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
28 }
5bf22431176c Modularize.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
29
5bf22431176c Modularize.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
30
5bf22431176c Modularize.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
31 function stSetSessionItem($name, $value)
5bf22431176c Modularize.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
32 {
5bf22431176c Modularize.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
33 global $sessionType;
5bf22431176c Modularize.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
34 if (!isset($sessionType))
5bf22431176c Modularize.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
35 die("Session type not set.");
5bf22431176c Modularize.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
36
5bf22431176c Modularize.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
37 $_SESSION[$sessionType][$name] = $value;
5bf22431176c Modularize.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
38 }
5bf22431176c Modularize.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
39
5bf22431176c Modularize.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
40
51
7bdf89601ba0 Work on session stuff.
Matti Hamalainen <ccr@tnsp.org>
parents: 33
diff changeset
41 function stSessionExpire($stype)
33
5bf22431176c Modularize.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
42 {
5bf22431176c Modularize.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
43 // Check for session expiration
51
7bdf89601ba0 Work on session stuff.
Matti Hamalainen <ccr@tnsp.org>
parents: 33
diff changeset
44 if (!isset($_SESSION[$stype]) || !isset($_SESSION[$stype]["expires"]))
33
5bf22431176c Modularize.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
45 {
51
7bdf89601ba0 Work on session stuff.
Matti Hamalainen <ccr@tnsp.org>
parents: 33
diff changeset
46 stDebug("Session ".$stype." expires due to expire time not set.");
7bdf89601ba0 Work on session stuff.
Matti Hamalainen <ccr@tnsp.org>
parents: 33
diff changeset
47 stSessionEnd($stype);
33
5bf22431176c Modularize.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
48 return FALSE;
5bf22431176c Modularize.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
49 }
5bf22431176c Modularize.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
50
51
7bdf89601ba0 Work on session stuff.
Matti Hamalainen <ccr@tnsp.org>
parents: 33
diff changeset
51 if ($_SESSION[$stype]["expires"] < time())
33
5bf22431176c Modularize.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
52 {
51
7bdf89601ba0 Work on session stuff.
Matti Hamalainen <ccr@tnsp.org>
parents: 33
diff changeset
53 stDebug("Session ".$stype." / ".session_id()." expires due to timeout ".$_SESSION[$stype]["expires"]." < ".time());
7bdf89601ba0 Work on session stuff.
Matti Hamalainen <ccr@tnsp.org>
parents: 33
diff changeset
54 stSessionEnd($stype);
33
5bf22431176c Modularize.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
55 return FALSE;
5bf22431176c Modularize.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
56 }
5bf22431176c Modularize.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
57
5bf22431176c Modularize.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
58 // Add more time to expiration
51
7bdf89601ba0 Work on session stuff.
Matti Hamalainen <ccr@tnsp.org>
parents: 33
diff changeset
59 $timeout = stGetSetting($_SESSION[$stype]["timeout"], 0);
7bdf89601ba0 Work on session stuff.
Matti Hamalainen <ccr@tnsp.org>
parents: 33
diff changeset
60 stDebug("Adding more time to ".$stype." session ".session_id()." :: ".$timeout);
7bdf89601ba0 Work on session stuff.
Matti Hamalainen <ccr@tnsp.org>
parents: 33
diff changeset
61 $_SESSION[$stype]["expires"] = time() + $timeout * 60;
33
5bf22431176c Modularize.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
62 return TRUE;
5bf22431176c Modularize.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
63 }
5bf22431176c Modularize.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
64
5bf22431176c Modularize.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
65
51
7bdf89601ba0 Work on session stuff.
Matti Hamalainen <ccr@tnsp.org>
parents: 33
diff changeset
66 function stSessionEnd($stype)
33
5bf22431176c Modularize.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
67 {
5bf22431176c Modularize.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
68 $result = FALSE;
5bf22431176c Modularize.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
69
51
7bdf89601ba0 Work on session stuff.
Matti Hamalainen <ccr@tnsp.org>
parents: 33
diff changeset
70 stDebug("Request END session ".$stype);
33
5bf22431176c Modularize.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
71
5bf22431176c Modularize.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
72 if (@session_start() === TRUE && isset($_SESSION))
5bf22431176c Modularize.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
73 {
5bf22431176c Modularize.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
74 // End current session type
51
7bdf89601ba0 Work on session stuff.
Matti Hamalainen <ccr@tnsp.org>
parents: 33
diff changeset
75 if (isset($_SESSION[$stype]))
33
5bf22431176c Modularize.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
76 {
51
7bdf89601ba0 Work on session stuff.
Matti Hamalainen <ccr@tnsp.org>
parents: 33
diff changeset
77 stDebug("END session ".$stype." / ".$_SESSION[$stype]["expires"]);
7bdf89601ba0 Work on session stuff.
Matti Hamalainen <ccr@tnsp.org>
parents: 33
diff changeset
78 $_SESSION[$stype] = array();
7bdf89601ba0 Work on session stuff.
Matti Hamalainen <ccr@tnsp.org>
parents: 33
diff changeset
79 unset($_SESSION[$stype]);
33
5bf22431176c Modularize.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
80 $result = TRUE;
5bf22431176c Modularize.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
81 }
5bf22431176c Modularize.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
82
5bf22431176c Modularize.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
83 // If all session types are ended, clear the cookies etc
51
7bdf89601ba0 Work on session stuff.
Matti Hamalainen <ccr@tnsp.org>
parents: 33
diff changeset
84 if (!isset($_SESSION[SESS_USER]) && !isset($_SESSION[SESS_ADMIN]))
33
5bf22431176c Modularize.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
85 {
51
7bdf89601ba0 Work on session stuff.
Matti Hamalainen <ccr@tnsp.org>
parents: 33
diff changeset
86 stDebug("Clearing all session data.");
33
5bf22431176c Modularize.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
87 $_SESSION = array();
5bf22431176c Modularize.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
88
5bf22431176c Modularize.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
89 if (ini_get("session.use_cookies"))
5bf22431176c Modularize.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
90 {
5bf22431176c Modularize.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
91 $params = session_get_cookie_params();
5bf22431176c Modularize.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
92 setcookie(session_name(), "", time() - 242000,
5bf22431176c Modularize.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
93 $params["path"], $params["domain"],
5bf22431176c Modularize.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
94 $params["secure"], $params["httponly"]
5bf22431176c Modularize.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
95 );
5bf22431176c Modularize.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
96 }
5bf22431176c Modularize.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
97
5bf22431176c Modularize.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
98 @session_destroy();
5bf22431176c Modularize.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
99 }
5bf22431176c Modularize.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
100 }
5bf22431176c Modularize.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
101
5bf22431176c Modularize.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
102 return $result;
5bf22431176c Modularize.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
103 }
5bf22431176c Modularize.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
104
5bf22431176c Modularize.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
105
51
7bdf89601ba0 Work on session stuff.
Matti Hamalainen <ccr@tnsp.org>
parents: 33
diff changeset
106 function stSessionStart($stype, $key, $timeout)
33
5bf22431176c Modularize.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
107 {
5bf22431176c Modularize.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
108 if (@session_start() === TRUE)
5bf22431176c Modularize.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
109 {
51
7bdf89601ba0 Work on session stuff.
Matti Hamalainen <ccr@tnsp.org>
parents: 33
diff changeset
110 stDebug("START ".$stype." session OK.");
7bdf89601ba0 Work on session stuff.
Matti Hamalainen <ccr@tnsp.org>
parents: 33
diff changeset
111 $_SESSION[$stype] = array(
33
5bf22431176c Modularize.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
112 "key" => $key,
5bf22431176c Modularize.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
113 "timeout" => $timeout,
5bf22431176c Modularize.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
114 "expires" => time() + stGetSetting($timeout) * 60,
5bf22431176c Modularize.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
115 "message" => "",
5bf22431176c Modularize.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
116 "status" => 0,
5bf22431176c Modularize.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
117 );
5bf22431176c Modularize.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
118 return TRUE;
5bf22431176c Modularize.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
119 }
5bf22431176c Modularize.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
120 else
5bf22431176c Modularize.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
121 {
51
7bdf89601ba0 Work on session stuff.
Matti Hamalainen <ccr@tnsp.org>
parents: 33
diff changeset
122 stDebug("START ".$stype." session --FAILED--");
33
5bf22431176c Modularize.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
123 return FALSE;
5bf22431176c Modularize.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
124 }
5bf22431176c Modularize.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
125 }
5bf22431176c Modularize.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
126
5bf22431176c Modularize.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
127
5bf22431176c Modularize.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
128 function stAdmSessionAuth()
5bf22431176c Modularize.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
129 {
5bf22431176c Modularize.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
130 if (@session_start() === TRUE &&
51
7bdf89601ba0 Work on session stuff.
Matti Hamalainen <ccr@tnsp.org>
parents: 33
diff changeset
131 stGetSpecSessionItem(SESS_ADMIN, "key", FALSE) == stGetSetting("admPassword"))
33
5bf22431176c Modularize.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
132 {
51
7bdf89601ba0 Work on session stuff.
Matti Hamalainen <ccr@tnsp.org>
parents: 33
diff changeset
133 stDebug("AUTH admin session OK.");
7bdf89601ba0 Work on session stuff.
Matti Hamalainen <ccr@tnsp.org>
parents: 33
diff changeset
134 return stSessionExpire(SESS_ADMIN);
33
5bf22431176c Modularize.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
135 }
5bf22431176c Modularize.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
136 else
5bf22431176c Modularize.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
137 {
51
7bdf89601ba0 Work on session stuff.
Matti Hamalainen <ccr@tnsp.org>
parents: 33
diff changeset
138 stDebug("AUTH admin session FAIL.");
33
5bf22431176c Modularize.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
139 return FALSE;
5bf22431176c Modularize.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
140 }
5bf22431176c Modularize.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
141 }
5bf22431176c Modularize.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
142
5bf22431176c Modularize.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
143
5bf22431176c Modularize.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
144 function stUserSessionAuth()
5bf22431176c Modularize.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
145 {
5bf22431176c Modularize.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
146 if (@session_start() === TRUE &&
51
7bdf89601ba0 Work on session stuff.
Matti Hamalainen <ccr@tnsp.org>
parents: 33
diff changeset
147 stGetSpecSessionItem(SESS_USER, "key", FALSE) !== FALSE)
7bdf89601ba0 Work on session stuff.
Matti Hamalainen <ccr@tnsp.org>
parents: 33
diff changeset
148 {
7bdf89601ba0 Work on session stuff.
Matti Hamalainen <ccr@tnsp.org>
parents: 33
diff changeset
149 stDebug("AUTH user session OK.");
7bdf89601ba0 Work on session stuff.
Matti Hamalainen <ccr@tnsp.org>
parents: 33
diff changeset
150 return stSessionExpire(SESS_ADMIN);
7bdf89601ba0 Work on session stuff.
Matti Hamalainen <ccr@tnsp.org>
parents: 33
diff changeset
151 }
33
5bf22431176c Modularize.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
152 else
51
7bdf89601ba0 Work on session stuff.
Matti Hamalainen <ccr@tnsp.org>
parents: 33
diff changeset
153 {
7bdf89601ba0 Work on session stuff.
Matti Hamalainen <ccr@tnsp.org>
parents: 33
diff changeset
154 stDebug("AUTH user session FAIL.");
33
5bf22431176c Modularize.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
155 return FALSE;
51
7bdf89601ba0 Work on session stuff.
Matti Hamalainen <ccr@tnsp.org>
parents: 33
diff changeset
156 }
33
5bf22431176c Modularize.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
157 }
5bf22431176c Modularize.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
158
5bf22431176c Modularize.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
159
5bf22431176c Modularize.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
160 function stSetSessionStatus($status)
5bf22431176c Modularize.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
161 {
5bf22431176c Modularize.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
162 global $sessionType;
5bf22431176c Modularize.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
163 if (isset($_SESSION[$sessionType]) || session_start() === TRUE)
5bf22431176c Modularize.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
164 {
5bf22431176c Modularize.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
165 if ($status >= 0)
5bf22431176c Modularize.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
166 stSetSessionItem("prevstatus", stGetSessionItem("status", FALSE));
5bf22431176c Modularize.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
167
5bf22431176c Modularize.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
168 stSetSessionItem("status", $status);
5bf22431176c Modularize.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
169 }
5bf22431176c Modularize.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
170 }
5bf22431176c Modularize.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
171
5bf22431176c Modularize.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
172 ?>