From ec85023a1006f6f2fe3ea947b6be81bb4515aa8a Mon Sep 17 00:00:00 2001 From: Christian Weiske Date: Fri, 17 Dec 2010 19:37:24 +0100 Subject: [PATCH] display more data by attaching an observer --- Wrt3g.php | 42 ++++++++++++++++++++++++---- Wrt3g/RequestObserver.php | 58 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 94 insertions(+), 6 deletions(-) create mode 100644 Wrt3g/RequestObserver.php diff --git a/Wrt3g.php b/Wrt3g.php index 3b4d43d..d3b9488 100644 --- a/Wrt3g.php +++ b/Wrt3g.php @@ -12,7 +12,7 @@ */ require_once 'HTTP/Request2.php'; require_once 'Wrt3g/HtmlParser.php'; - +require_once 'Wrt3g/RequestObserver.php'; /** * Main class to interact with the router. @@ -51,6 +51,7 @@ class Wrt3g * 0 - no debug logging * 1 - show important details (connected URLs) * 2 - show internal details + * 3 - show HTTP requests and responses * * @var integer */ @@ -95,6 +96,24 @@ class Wrt3g + /** + * Creates a new HTTP_Request2 object, attaches an observer + * if necessary and returns it. + * + * @return HTTP_Request2 + */ + protected function createRequest() + { + $r = new $this->requestClass(); + if ($this->verbosity >= 3) { + //register observer + $r->attach(new Wrt3g_RequestObserver($this)); + } + return $r; + } + + + /** * Reboots the router. * @@ -107,7 +126,7 @@ class Wrt3g $url = $this->getAuthBaseUrl() . '/apply.cgi'; $this->log('Connecting to ' . $url); - $r = new $this->requestClass(); + $r = $this->createRequest(); $r->setMethod(HTTP_Request2::METHOD_POST); $r->setUrl($url); $r->addPostParameter('action', 'Reboot'); @@ -139,7 +158,7 @@ class Wrt3g /** * Connection status */ - $r = new $this->requestClass(); + $r = $this->createRequest(); $r->setMethod(HTTP_Request2::METHOD_GET); $r->setUrl($strUrlBase . '/index_wstatus2.asp'); $this->log('Connecting to ' . $strUrlBase . '/index_wstatus2.asp', 1); @@ -177,7 +196,7 @@ class Wrt3g $url = $strUrlBase . '/Status_NoAuth.asp'; $this->log('Connecting to ' . $url, 1); - $r = new $this->requestClass(); + $r = $this->createRequest(); $r->setMethod(HTTP_Request2::METHOD_GET); $r->setUrl($url); $resp = $r->send(); @@ -204,6 +223,8 @@ class Wrt3g */ protected function checkResponseStatus(HTTP_Request2_Response $resp) { + $this->log($resp, 3); + $nStatus = $resp->getStatus(); $this->log($nStatus . ' ' . $resp->getReasonPhrase(), 1); if (intval($nStatus / 100) == 2) { @@ -261,14 +282,23 @@ class Wrt3g /** * Log a message to stdout. * - * @param string $msg Message to display - * @param integer $level Log level, see $verbosity + * @param string|object $msg Message to display. May even be a response + * object + * @param integer $level Log level, see $verbosity * * @return void */ public function log($msg, $level = 1) { if ($this->verbosity >= $level) { + if ($msg instanceof HTTP_Request2_Response) { + echo "HTTP Response:\n"; + echo $msg->getStatus() . ' ' . $msg->getReasonPhrase() . "\n"; + echo 'Header: '; + var_export($msg->getHeader()); + echo $msg->getBody() . "\n----\n"; + return; + } echo $msg . "\n"; } } diff --git a/Wrt3g/RequestObserver.php b/Wrt3g/RequestObserver.php new file mode 100644 index 0000000..1e5224f --- /dev/null +++ b/Wrt3g/RequestObserver.php @@ -0,0 +1,58 @@ + + * @license AGPL v3 + * @link http://cweiske.de/linksys-wrt3g-tools.htm + */ + +/** + * Observer to catch debugging data from the HTTP request. + * + * @category Tools + * @package linksys-wrt3g-tools + * @author Christian Weiske + * @license AGPL v3 + * @link http://cweiske.de/linksys-wrt3g-tools.htm + */ +class Wrt3g_RequestObserver implements SplObserver +{ + protected $wrt3g; + + /** + * Create new instance + * + * @param Wrt3g $wrt3g Logger + */ + public function __construct(Wrt3g $wrt3g) + { + $this->wrt3g = $wrt3g; + } + + + + /** + * Receive notification from HTTP_Request2 + * + * @param SplSubject $subject The request object + * + * @return void + */ + public function update(SplSubject $subject) + { + $event = $subject->getLastEvent(); + $this->wrt3g->log( + 'event: ' . $event['name'] . "\n" + . 'data: ' . $event['data'], + 3 + ); + } +} + + +?> \ No newline at end of file -- 2.30.2