central method to generate base url
[linksys-wrt3g-tools.git] / Wrt3g.php
1 <?php
2 /**
3 * Functions to access the router
4 *
5 * PHP version 5
6 *
7 * @category Tools
8 * @package  linksys-wrt3g-tools
9 * @author   Christian Weiske <cweiske@cweiske.de>
10 * @license  AGPL v3
11 * @link     http://cweiske.de/linksys-wrt3g-tools.htm
12 */
13 require_once 'HTTP/Request2.php';
14
15
16 class Wrt3g
17 {
18     /**
19      * Router hostname/IP
20      *
21      * @var string
22      */
23     public $host;
24
25     /**
26      * Name of user with administration privileges
27      *
28      * @var string
29      */
30     public $user;
31
32     /**
33      * Password for $user
34      *
35      * @var string
36      */
37     public $password;
38
39     protected static $arTranslations = array(
40         'GPRS_MSG.WWBEAR'      => 'type',
41         'GPRS_MSG.NNAME'       => 'network',
42         'GPRS_MSG.STRENGTH'    => 'signal strength',
43         'GPRS_MSG.ACQUIRING'   => 'aquiring',
44         'GPRS_MSG.WWBEAR_GPRS' => 'GPRS',
45         'GPRS_MSG.WWBEAR_UMTS' => 'UMTS',
46     );
47
48
49
50     /**
51      * Returns the base URL to use for requests.
52      * Includes username, password and host.
53      *
54      * @return string URL without trailing slash after the host
55      */
56     protected function getBaseUrl()
57     {
58         return 'http://'
59             . $this->user
60             . ':' . $this->password
61             . '@' . $this->host;
62     }
63
64
65     /**
66     * Reboots the router.
67     *
68     * @return HTTP_Request2_Response
69     *
70     * @throws Exception When the router can't be reached, or unauthorized
71     */
72     public function reboot()
73     {
74         $r = new HTTP_Request2();
75         $r->setMethod(HTTP_Request2::METHOD_POST);
76         $r->setUrl(
77             $this->getBaseUrl() . '/apply.cgi'
78         );
79         $r->addPostParameter('action', 'Reboot');
80         $r->addPostParameter('submit_button', 'Diagnostics');
81         $r->addPostParameter('wait_time', 1);
82
83         $resp = $r->send();
84         return $resp;
85     }//public function reboot()
86
87
88
89     /**
90     * Retrieves status information about the router
91     *
92     * @return array Array with several key-value pairs
93     *               connection => connecting, disconnected, connected
94     *
95     * @throws Exception When the router can't be reached, or unauthorized
96     */
97     public function getStatus()
98     {
99         $arRetval = array();
100
101         $strUrlBase = $this->getBaseUrl();
102
103         /**
104         * Connection status
105         */
106         $r = new HTTP_Request2();
107         $r->setMethod(HTTP_Request2::METHOD_GET);
108         $r->setUrl($strUrlBase . '/index_wstatus2.asp');
109         $resp = $r->send();
110         echo $resp->getStatus() . ' ' . $resp->getReasonPhrase() . "\n";
111         $body = $resp->getBody();
112         preg_match('/var status2 = "(.+)"/', $body, $arMatches);
113
114         $strStatus = $arMatches[1];
115         //Connecting
116         //Disconnected
117         //Connected
118         $arRetval['connection'] = strtolower($strStatus);
119
120         /**
121         * GPRS/UMTS Status
122         */
123         $r->setUrl($strUrlBase . '/index_wstatus1.asp');
124         $resp = $r->send();
125         $body = $resp->getBody();
126         $arRetval = array_merge($arRetval, $this->parseStatus($body));
127
128         return $arRetval;
129     }//public function getStatus()
130
131
132
133     /**
134     * Parses the body and returns extracted values
135     *
136     * @param string $body HTML document to parse
137     *
138     * @return array Array of key-value pairs
139     */
140     protected function parseStatus($body)
141     {
142         $arRetval = array();
143         $arMatches = array();
144         preg_match_all('#>Capture\(([^)]+)\)</#', $body, $arMatches);
145         $arData = array();
146         reset($arMatches[1]);
147         while (current($arMatches[1])) {
148             $key   = current($arMatches[1]);
149             $value = next($arMatches[1]);
150             if (isset(self::$arTranslations[$key])) {
151                 $key = self::$arTranslations[$key];
152             }
153             if (isset(self::$arTranslations[$value])) {
154                 $value = self::$arTranslations[$value];
155             }
156             $arRetval[$key] = $value;
157             next($arMatches[1]);
158         }
159
160         return $arRetval;
161     }
162 }
163 ?>