X-Git-Url: https://git.cweiske.de/linksys-wrt3g-tools.git/blobdiff_plain/703710ff94155ca3cd37456191df22539ef02bc8..c0cf4831d489c6271fb0dedc631f3e68756e278e:/Wrt3g.php diff --git a/Wrt3g.php b/Wrt3g.php index 78cb10d..c71ae19 100644 --- a/Wrt3g.php +++ b/Wrt3g.php @@ -1,18 +1,28 @@ -* @license AGPL v3 -* @link http://cweiske.de/linksys-wrt3g-tools.htm -*/ + * Part of Linksys WRT3G tools + * + * PHP version 5 + * + * @category Tools + * @package linksys-wrt3g-tools + * @author Christian Weiske + * @license AGPL v3 + * @link http://cweiske.de/linksys-wrt3g-tools.htm + */ require_once 'HTTP/Request2.php'; +require_once 'Wrt3g/HtmlParser.php'; +/** + * Main class to interact with the router. + * + * @category Tools + * @package linksys-wrt3g-tools + * @author Christian Weiske + * @license AGPL v3 + * @link http://cweiske.de/linksys-wrt3g-tools.htm + */ class Wrt3g { /** @@ -36,24 +46,33 @@ class Wrt3g */ public $password; - protected static $arTranslations = array( - 'GPRS_MSG.WWBEAR' => 'type', - 'GPRS_MSG.NNAME' => 'network', - 'GPRS_MSG.STRENGTH' => 'signal strength', - 'GPRS_MSG.ACQUIRING' => 'aquiring', - 'GPRS_MSG.WWBEAR_GPRS' => 'GPRS', - 'GPRS_MSG.WWBEAR_UMTS' => 'UMTS', - ); + /** + * Logging verbosity + * 0 - no debug logging + * 1 - show important details (connected URLs) + * 2 - show internal details + * + * @var integer + */ + public $verbosity = 0; + + /** + * Class to send HTTP Requests with. + * Needs to be compatible with HTTP_Request2 + * + * @var string + */ + public $requestClass = 'HTTP_Request2'; /** - * Returns the base URL to use for requests. + * Returns the base URL to use for requests that require authentification. * Includes username, password and host. * * @return string URL without trailing slash after the host */ - protected function getBaseUrl() + protected function getAuthBaseUrl() { return 'http://' . $this->user @@ -62,20 +81,35 @@ class Wrt3g } + + /** + * Returns the base URL to use for requests that do + * not require authentification. + * + * @return string URL without trailing slash after the host + */ + protected function getAnonBaseUrl() + { + return 'http://' . $this->host; + } + + + /** - * Reboots the router. - * - * @return HTTP_Request2_Response - * - * @throws Exception When the router can't be reached, or unauthorized - */ + * Reboots the router. + * + * @return HTTP_Request2_Response + * + * @throws Exception When the router can't be reached, or unauthorized + */ public function reboot() { - $r = new HTTP_Request2(); + $url = $this->getAuthBaseUrl() . '/apply.cgi'; + $this->log('Connecting to ' . $url); + + $r = new $this->requestClass(); $r->setMethod(HTTP_Request2::METHOD_POST); - $r->setUrl( - $this->getBaseUrl() . '/apply.cgi' - ); + $r->setUrl($url); $r->addPostParameter('action', 'Reboot'); $r->addPostParameter('submit_button', 'Diagnostics'); $r->addPostParameter('wait_time', 1); @@ -87,77 +121,129 @@ class Wrt3g /** - * Retrieves status information about the router - * - * @return array Array with several key-value pairs - * connection => connecting, disconnected, connected - * - * @throws Exception When the router can't be reached, or unauthorized - */ - public function getStatus() + * Retrieves status information about the router + * + * @return array Array with several key-value pairs + * connection => connecting, disconnected, connected + * + * @throws Exception When the router can't be reached, or unauthorized + */ + public function getConnectionStatus() { $arRetval = array(); - $strUrlBase = $this->getBaseUrl(); + $strUrlBase = $this->getAuthBaseUrl(); + $parser = new Wrt3g_HtmlParser(); /** - * Connection status - */ - $r = new HTTP_Request2(); + * Connection status + */ + $r = new $this->requestClass(); $r->setMethod(HTTP_Request2::METHOD_GET); $r->setUrl($strUrlBase . '/index_wstatus2.asp'); + $this->log('Connecting to ' . $strUrlBase . '/index_wstatus2.asp', 1); $resp = $r->send(); - echo $resp->getStatus() . ' ' . $resp->getReasonPhrase() . "\n"; - $body = $resp->getBody(); - preg_match('/var status2 = "(.+)"/', $body, $arMatches); - - $strStatus = $arMatches[1]; - //Connecting - //Disconnected - //Connected - $arRetval['connection'] = strtolower($strStatus); + $this->log($resp->getStatus() . ' ' . $resp->getReasonPhrase(), 1); + $arRetval = $parser->index_wstatus2($resp->getBody()); /** * GPRS/UMTS Status */ $r->setUrl($strUrlBase . '/index_wstatus1.asp'); + $this->log('Connecting to ' . $strUrlBase . '/index_wstatus1.asp', 1); $resp = $r->send(); $body = $resp->getBody(); - $arRetval = array_merge($arRetval, $this->parseStatus($body)); + $arRetval = array_merge($arRetval, $parser->index_wstatus1($body)); return $arRetval; - }//public function getStatus() + }//public function getConnectionStatus() /** - * Parses the body and returns extracted values - * - * @param string $body HTML document to parse - * - * @return array Array of key-value pairs - */ - protected function parseStatus($body) + * Loads "Status_NoAuth.asp" page and parses the body. + * + * @return array Associative array with connection status. + * + * @throws Exception When something goes wrong, i.e. router not + * reachable + */ + protected function loadStatus_NoAuth() { - $arRetval = array(); - $arMatches = array(); - preg_match_all('#>Capture\(([^)]+)\)getAnonBaseUrl(); - return $arRetval; + $url = $strUrlBase . '/Status_NoAuth.asp'; + $this->log('Connecting to ' . $url, 1); + + $r = new $this->requestClass(); + $r->setMethod(HTTP_Request2::METHOD_GET); + $r->setUrl($url); + $resp = $r->send(); + $this->log($resp->getStatus() . ' ' . $resp->getReasonPhrase(), 1); + //FIXME: check status + + $parser = new Wrt3g_HtmlParser(); + + return $parser->status_noauth( + $resp->getBody() + ); + } + + + + /** + * Retrieves pc card/SIM status information + * + * @return array Array with several key-value pairs + * connection => connecting, disconnected, connected + * + * @throws Exception When the router can't be reached + */ + public function getCardStatus() + { + $arRetval = $this->loadStatus_NoAuth(); + + return array_intersect_key( + $arRetval, + array( + 'card model' => 0, + 'card revision' => 0, + 'card firmware' => 0, + 'IMSI' => 0 + ) + ); + } + + + + /** + * Retrieves all status information one can get. + * + * @return array Array with several key-value pairs + * connection => connecting, disconnected, connected + * + * @throws Exception When the router can't be reached + */ + public function getFullStatus() + { + return $this->loadStatus_NoAuth(); + } + + + + /** + * Log a message to stdout. + * + * @param string $msg Message to display + * @param integer $level Log level, see $verbosity + * + * @return void + */ + public function log($msg, $level = 1) + { + if ($this->verbosity >= $level) { + echo $msg . "\n"; + } } } ?> \ No newline at end of file