aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Weiske <cweiske@cweiske.de>2010-12-17 19:37:24 +0100
committerChristian Weiske <cweiske@cweiske.de>2010-12-17 19:37:24 +0100
commitec85023a1006f6f2fe3ea947b6be81bb4515aa8a (patch)
treea03b92264a3b5cc3cb3e8e0b54d473e301878ef9
parent94390ea5bb0b12513e5bd39e485157365b097272 (diff)
downloadlinksys-wrt3g-tools-ec85023a1006f6f2fe3ea947b6be81bb4515aa8a.tar.gz
linksys-wrt3g-tools-ec85023a1006f6f2fe3ea947b6be81bb4515aa8a.zip
display more data by attaching an observer
-rw-r--r--Wrt3g.php42
-rw-r--r--Wrt3g/RequestObserver.php58
2 files changed, 94 insertions, 6 deletions
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
*/
@@ -96,6 +97,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.
*
* @return HTTP_Request2_Response
@@ -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 @@
+<?php
+/**
+ * Part of Linksys WRT3G tools
+ *
+ * PHP version 5
+ *
+ * @category Tools
+ * @package linksys-wrt3g-tools
+ * @author Christian Weiske <cweiske@cweiske.de>
+ * @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 <cweiske@cweiske.de>
+ * @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