enhanced motor handling, bug fixes, initial optimization code
[debian/openrocket] / web / html / actions / updates.php
1 <?
2 $logfiles = "/home/groups/o/op/openrocket/persistent/logs/access-";
3
4
5 // getallheaders method
6 if (!function_exists('getallheaders')) {
7     function getallheaders() {
8        foreach ($_SERVER as $name => $value) {
9            if (substr($name, 0, 5) == 'HTTP_') {
10                $headers[str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', substr($name, 5)))))] = $value;
11            }
12        }
13        return $headers;
14     }
15 }
16
17
18 // Parse + validate headers
19 $orid = "";
20 $orversion = "";
21 $oros = "";
22 $orjava = "";
23 $orcountry = "";
24 $orcores = "";
25 foreach (getallheaders() as $header => $value) {
26     if (preg_match("/^[a-zA-Z0-9 !$%&()*+,.\\/:=?@_~-]{1,40}$/", $value)) {
27         $h = strtolower($header);
28         if ($h == 'x-openrocket-version') {
29             $orversion = $value;
30         } else if ($h == 'x-openrocket-id') {
31             $orid = $value;
32         } else if ($h == 'x-openrocket-os') {
33             $oros = $value;
34         } else if ($h == 'x-openrocket-java') {
35             $orjava = $value;
36         } else if ($h == 'x-openrocket-country') {
37             $orcountry = $value;
38         } else if ($h == 'x-openrocket-cpus') {
39             $orcores = $value;
40         }
41     }
42 }
43
44 // Log the request
45 if ((strlen($orversion) > 0 || strlen($orid) > 0 || strlen($oros) > 0
46      || strlen($orjava) > 0 || strlen($orcountry) > 0 
47      || strlen($orcores) > 0) &&
48     (strlen($orversion) < 20 && strlen($orid) < 50 && strlen($oros) < 50
49      && strlen($orjava) < 50 && strlen($orcountry) < 50) 
50      && strlen($orcores) < 10) {
51
52     $file = $logfiles . gmdate("Y-m");
53     $line = gmdate("Y-m-d H:i:s") . ";" . $orid . ";" . $orversion .
54         ";" . $oros . ";" . $orjava . ";" . $orcountry . ";" . $orcores . "\n";
55
56     $fp = fopen($file, 'a');
57     if ($fp != FALSE) {
58         fwrite($fp, $line);
59         fclose($fp);
60     }
61 }
62
63
64 // Set HTTP content-type header
65 // No charset allowed for 0.9.4
66 //header("Content-type: text/plain; charset=utf-8");
67 header("Content-type: text/plain");
68
69 /*
70  * Currently all old versions are handled manually.
71  * Update checking was introduced in OpenRocket 0.9.4
72  *
73  * We ignore "pre" versions, they are handled exacly like
74  * their non-pre counterparts.
75  */
76 $version = $_GET["version"];
77 $updates = "";
78
79 if (preg_match("/^1\.1\.0/", $version)) {
80   $updates = "Version: 1.1.1\n" .
81     "6: Enhanced motor selection\n" .
82     "5: Rewritten simulation code" .
83     "4: Bug fixes";
84 } else if (preg_match("/^0\.9\.6/", $version)) {
85   $updates = "Version: 1.0.0\n" .
86     "6: Hundreds of new thrustcurves\n" .
87     "5: Bug fixes";
88 } else if (preg_match("/^0\.9\.[45]/", $version)) {
89   $updates = "Version: 1.0.0\n" .
90     "7: Hundreds of new thrustcurves\n" .
91     "6: Aerodynamic computation updates\n" .
92     "5: Numerous bug fixes";
93 }
94
95
96 if (strlen($updates) == 0) {
97
98   // No updates available
99   header("HTTP/1.0 204 No Content");
100
101 } else {
102
103   header("HTTP/1.0 200 OK");
104   echo $updates;
105
106 }
107
108 ?>