X-Git-Url: https://git.cweiske.de/linksys-wrt3g-tools.git/blobdiff_plain/d6caa11680382e04f1aeb6bf744fd19f87c4dccf..6a5bf4c36f788ac0eb8112ccec0bbd371d5bbd94:/Wrt3g/HtmlParser.php diff --git a/Wrt3g/HtmlParser.php b/Wrt3g/HtmlParser.php index d887671..bd613ac 100644 --- a/Wrt3g/HtmlParser.php +++ b/Wrt3g/HtmlParser.php @@ -19,19 +19,31 @@ class Wrt3g_HtmlParser 'GPRS_MSG.ACQUIRING' => 'aquiring', 'GPRS_MSG.WWBEAR_GPRS' => 'GPRS', 'GPRS_MSG.WWBEAR_UMTS' => 'UMTS', + 'GPRS_MSG.None' => null, + 'GPRS_MSG.FAIR' => 'fair', 'GPRS_MSG.GOOD' => 'good', 'GPRS_MSG.EXCELLENT' => 'excellent', + 'GPRS_MSG.NOSIGNAL' => 'no signal', + 'GPRS_MSG.CTIME' => 'connection time', + 'GPRS_MSG.CFW' => 'card firmware', + 'GPRS_MSG.CMOD' => 'card model', + 'GPRS_MSG.CREV' => 'card revision', + 'GPRS_MSG.IMSI' => 'IMSI', + 'GPRS_MSG.SESSIONUSAGE' => 'session usage', ); /** * Parses the body of /index_wstatus1.asp and returns extracted values. + * If no connection is established, the values are NULL. * * @param string $body HTML document to parse * - * @return array Array of key-value pairs, probably with "type", "network" and - * "signal strength" + * @return array Array of key-value pairs, probably with + * - "type" - i.e. "GPRS" + * - "network" - Carrier network name, i.e. "BASE DE" + * - "signal strength" - good, excellent, poor */ public function index_wstatus1($body) { @@ -74,6 +86,9 @@ class Wrt3g_HtmlParser if (isset(self::$arTranslations[$value])) { $value = self::$arTranslations[$value]; } + if ($value == 'aquiring') { + $value = null; + } $arRetval[$key] = $value; next($arMatches); } @@ -94,6 +109,9 @@ class Wrt3g_HtmlParser public function index_wstatus2($body) { preg_match('/var status2 = "(.+)"/', $body, $arMatches); + if (!isset($arMatches[1])) { + return array(); + } $strStatus = $arMatches[1]; //Connecting @@ -110,7 +128,16 @@ class Wrt3g_HtmlParser * * @param string $body HTML document to parse * - * @return array FIXME + * @return array Array of key-value pairs with the following keys: + * - type + * - network + * - signal strength + * - connection time + * - session usage (array) + * - card model + * - card revision + * - card firmware + * - IMSI */ public function status_noauth($body) { @@ -118,30 +145,75 @@ class Wrt3g_HtmlParser array(' ', '', ''), '', $body ); - //var_dump($body);die(); + $doc = new DomDocument(); libxml_use_internal_errors(true);//html is broken $doc->loadHtml($body); $xpath = new DOMXPath($doc); - $trs = $xpath->query('//table//table/tbody/tr'); + $trs = $xpath->query('//table//table/tbody/tr'); + $arRaw = array('connection' => null); + $bAquiring = false; foreach ($trs as $tr) { - /* - var_dump( - '--------',$doc->saveXML($tr), - $xpath->query('td', $tr)->length); - */ $titleItems = $xpath->query('td[@width=125]/text()', $tr); $valueItems = $xpath->query('td[@width=296]/*[1]', $tr); if ($titleItems->length && $valueItems->length) { $title = substr($doc->saveXML($titleItems->item(0)), 8, -2); $value = $doc->saveXML($valueItems->item(0)); - - var_dump( - $title, $value + $arRaw[self::$arTranslations[$title]] = $value; + } + } + + foreach ($arRaw as $key => &$value) { + $value = trim(strip_tags($value)); + if (substr($value, 0, 8) == 'Capture(') { + $value = self::$arTranslations[substr($value, 8, -1)]; + if ($value == 'aquiring') { + $bAquiring = true; + $value = null; + } + } + } + unset($value); + + if ($bAquiring) { + $arRaw['connection'] = 'connecting'; + } else if ($arRaw['type'] != null) { + $arRaw['connection'] = 'connected'; + } else { + $arRaw['connection'] = 'disconnected'; + } + + if (isset($arRaw['connection time'])) { + $arRaw['connection time'] = str_replace( + array( + ' Capture(GPRS_MSG.HOURS)', + ' Capture(GPRS_MSG.MINUTE)', + ' Capture(GPRS_MSG.SECOND)', + ), + array( + 'h', 'm', 's' + ), + $arRaw['connection time'] + ); + } + + if (isset($arRaw['session usage'])) { + $arS = explode( + 'TX = ', + str_replace('RX = ', '', $arRaw['session usage']) + ); + if (count($arS) > 1) { + $arRaw['session usage'] = array( + 'received' => $arS[0], + 'sent' => $arS[1] ); } } - $arMatches = array(); + if (preg_match('/Capture\\(share.firmwarever\\):(.+?)