display more data by attaching an observer
authorChristian Weiske <cweiske@cweiske.de>
Fri, 17 Dec 2010 18:37:24 +0000 (19:37 +0100)
committerChristian Weiske <cweiske@cweiske.de>
Fri, 17 Dec 2010 18:37:24 +0000 (19:37 +0100)
Wrt3g.php
Wrt3g/RequestObserver.php [new file with mode: 0644]

index 3b4d43d28fe48ff3a955434d64d23262fe0a9f2d..d3b948807e2361bcbb78b1c99f7dfa2794d45d9c 100644 (file)
--- 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 (file)
index 0000000..1e5224f
--- /dev/null
@@ -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