test for index_wstatus2 in disconnected state
[linksys-wrt3g-tools.git] / Wrt3g.php
index 150b68c741877df41ccc390d9d119b25c21e43ba..3b4d43d28fe48ff3a955434d64d23262fe0a9f2d 100644 (file)
--- a/Wrt3g.php
+++ b/Wrt3g.php
@@ -56,6 +56,14 @@ class Wrt3g
      */
     public $verbosity = 0;
 
+    /**
+     * Class to send HTTP Requests with.
+     * Needs to be compatible with HTTP_Request2
+     *
+     * @var string
+     */
+    public $requestClass = 'HTTP_Request2';
+
 
 
     /**
@@ -99,7 +107,7 @@ class Wrt3g
         $url = $this->getAuthBaseUrl() . '/apply.cgi';
         $this->log('Connecting to ' . $url);
 
-        $r = new HTTP_Request2();
+        $r = new $this->requestClass();
         $r->setMethod(HTTP_Request2::METHOD_POST);
         $r->setUrl($url);
         $r->addPostParameter('action', 'Reboot');
@@ -107,6 +115,7 @@ class Wrt3g
         $r->addPostParameter('wait_time', 1);
 
         $resp = $r->send();
+        $this->checkResponseStatus($resp);
         return $resp;
     }//public function reboot()
 
@@ -130,12 +139,12 @@ class Wrt3g
         /**
          * Connection status
          */
-        $r = new HTTP_Request2();
+        $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();
-        $this->log($resp->getStatus() . ' ' . $resp->getReasonPhrase(), 1);
+        $this->checkResponseStatus($resp);
         $arRetval = $parser->index_wstatus2($resp->getBody());
 
         /**
@@ -144,6 +153,7 @@ class Wrt3g
         $r->setUrl($strUrlBase . '/index_wstatus1.asp');
         $this->log('Connecting to ' . $strUrlBase . '/index_wstatus1.asp', 1);
         $resp = $r->send();
+        $this->checkResponseStatus($resp);
         $body = $resp->getBody();
         $arRetval = array_merge($arRetval, $parser->index_wstatus1($body));
 
@@ -167,17 +177,42 @@ class Wrt3g
         $url = $strUrlBase . '/Status_NoAuth.asp';
         $this->log('Connecting to ' . $url, 1);
 
-        $r = new HTTP_Request2();
+        $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
+        $this->checkResponseStatus($resp);
 
         $parser = new Wrt3g_HtmlParser();
 
         return $parser->status_noauth(
-            $this->loadStatus_NoAuth()->getBody()
+            $resp->getBody()
+        );
+    }
+
+
+
+    /**
+     * Checks the HTTP response code and throws an exception if it
+     * is not in the 200 range.
+     *
+     * @param HTTP_Request2_Response $resp HTTP response object
+     *
+     * @return void
+     *
+     * @throws Exception When the status is not 200-299
+     */
+    protected function checkResponseStatus(HTTP_Request2_Response $resp)
+    {
+        $nStatus = $resp->getStatus();
+        $this->log($nStatus . ' ' . $resp->getReasonPhrase(), 1);
+        if (intval($nStatus / 100) == 2) {
+            //2xx status is fine
+            return;
+        }
+
+        throw new Exception(
+            'HTTP Error: ' . $nStatus . ' ' . $resp->getReasonPhrase()
         );
     }