diff options
author | Evgeny Zinoviev <me@ch1p.io> | 2022-05-21 01:45:56 +0300 |
---|---|---|
committer | Evgeny Zinoviev <me@ch1p.io> | 2022-05-21 01:45:56 +0300 |
commit | 6f53e6e997c9f4647a667bd58b11bc622fa3b47f (patch) | |
tree | 226bd65a04576de4f41bf8396af97cd43ca27829 /localwebsite/classes/E3372.php | |
parent | 902a3bfbe2c4645e6725fb7583500d1a28026fad (diff) |
move local website to homekit's tree
Diffstat (limited to 'localwebsite/classes/E3372.php')
-rw-r--r-- | localwebsite/classes/E3372.php | 292 |
1 files changed, 292 insertions, 0 deletions
diff --git a/localwebsite/classes/E3372.php b/localwebsite/classes/E3372.php new file mode 100644 index 0000000..538d387 --- /dev/null +++ b/localwebsite/classes/E3372.php @@ -0,0 +1,292 @@ +<?php + +class E3372 +{ + + const WIFI_CONNECTING = '900'; + const WIFI_CONNECTED = '901'; + const WIFI_DISCONNECTED = '902'; + const WIFI_DISCONNECTING = '903'; + + const CRADLE_CONNECTING = '900'; + const CRADLE_CONNECTED = '901'; + const CRADLE_DISCONNECTED = '902'; + const CRADLE_DISCONNECTING = '903'; + const CRADLE_CONNECTFAILED = '904'; + const CRADLE_CONNECTSTATUSNULL = '905'; + const CRANDLE_CONNECTSTATUSERRO = '906'; + + const MACRO_EVDO_LEVEL_ZERO = '0'; + const MACRO_EVDO_LEVEL_ONE = '1'; + const MACRO_EVDO_LEVEL_TWO = '2'; + const MACRO_EVDO_LEVEL_THREE = '3'; + const MACRO_EVDO_LEVEL_FOUR = '4'; + const MACRO_EVDO_LEVEL_FIVE = '5'; + + // CurrentNetworkType + const MACRO_NET_WORK_TYPE_NOSERVICE = 0; + const MACRO_NET_WORK_TYPE_GSM = 1; + const MACRO_NET_WORK_TYPE_GPRS = 2; + const MACRO_NET_WORK_TYPE_EDGE = 3; + const MACRO_NET_WORK_TYPE_WCDMA = 4; + const MACRO_NET_WORK_TYPE_HSDPA = 5; + const MACRO_NET_WORK_TYPE_HSUPA = 6; + const MACRO_NET_WORK_TYPE_HSPA = 7; + const MACRO_NET_WORK_TYPE_TDSCDMA = 8; + const MACRO_NET_WORK_TYPE_HSPA_PLUS = 9; + const MACRO_NET_WORK_TYPE_EVDO_REV_0 = 10; + const MACRO_NET_WORK_TYPE_EVDO_REV_A = 11; + const MACRO_NET_WORK_TYPE_EVDO_REV_B = 12; + const MACRO_NET_WORK_TYPE_1xRTT = 13; + const MACRO_NET_WORK_TYPE_UMB = 14; + const MACRO_NET_WORK_TYPE_1xEVDV = 15; + const MACRO_NET_WORK_TYPE_3xRTT = 16; + const MACRO_NET_WORK_TYPE_HSPA_PLUS_64QAM = 17; + const MACRO_NET_WORK_TYPE_HSPA_PLUS_MIMO = 18; + const MACRO_NET_WORK_TYPE_LTE = 19; + const MACRO_NET_WORK_TYPE_EX_NOSERVICE = 0; + const MACRO_NET_WORK_TYPE_EX_GSM = 1; + const MACRO_NET_WORK_TYPE_EX_GPRS = 2; + const MACRO_NET_WORK_TYPE_EX_EDGE = 3; + const MACRO_NET_WORK_TYPE_EX_IS95A = 21; + const MACRO_NET_WORK_TYPE_EX_IS95B = 22; + const MACRO_NET_WORK_TYPE_EX_CDMA_1x = 23; + const MACRO_NET_WORK_TYPE_EX_EVDO_REV_0 = 24; + const MACRO_NET_WORK_TYPE_EX_EVDO_REV_A = 25; + const MACRO_NET_WORK_TYPE_EX_EVDO_REV_B = 26; + const MACRO_NET_WORK_TYPE_EX_HYBRID_CDMA_1x = 27; + const MACRO_NET_WORK_TYPE_EX_HYBRID_EVDO_REV_0 = 28; + const MACRO_NET_WORK_TYPE_EX_HYBRID_EVDO_REV_A = 29; + const MACRO_NET_WORK_TYPE_EX_HYBRID_EVDO_REV_B = 30; + const MACRO_NET_WORK_TYPE_EX_EHRPD_REL_0 = 31; + const MACRO_NET_WORK_TYPE_EX_EHRPD_REL_A = 32; + const MACRO_NET_WORK_TYPE_EX_EHRPD_REL_B = 33; + const MACRO_NET_WORK_TYPE_EX_HYBRID_EHRPD_REL_0 = 34; + const MACRO_NET_WORK_TYPE_EX_HYBRID_EHRPD_REL_A = 35; + const MACRO_NET_WORK_TYPE_EX_HYBRID_EHRPD_REL_B = 36; + const MACRO_NET_WORK_TYPE_EX_WCDMA = 41; + const MACRO_NET_WORK_TYPE_EX_HSDPA = 42; + const MACRO_NET_WORK_TYPE_EX_HSUPA = 43; + const MACRO_NET_WORK_TYPE_EX_HSPA = 44; + const MACRO_NET_WORK_TYPE_EX_HSPA_PLUS = 45; + const MACRO_NET_WORK_TYPE_EX_DC_HSPA_PLUS = 46; + const MACRO_NET_WORK_TYPE_EX_TD_SCDMA = 61; + const MACRO_NET_WORK_TYPE_EX_TD_HSDPA = 62; + const MACRO_NET_WORK_TYPE_EX_TD_HSUPA = 63; + const MACRO_NET_WORK_TYPE_EX_TD_HSPA = 64; + const MACRO_NET_WORK_TYPE_EX_TD_HSPA_PLUS = 65; + const MACRO_NET_WORK_TYPE_EX_802_16E = 81; + const MACRO_NET_WORK_TYPE_EX_LTE = 101; + + + const ERROR_SYSTEM_NO_SUPPORT = 100002; + const ERROR_SYSTEM_NO_RIGHTS = 100003; + const ERROR_SYSTEM_BUSY = 100004; + const ERROR_LOGIN_USERNAME_WRONG = 108001; + const ERROR_LOGIN_PASSWORD_WRONG = 108002; + const ERROR_LOGIN_ALREADY_LOGIN = 108003; + const ERROR_LOGIN_USERNAME_PWD_WRONG = 108006; + const ERROR_LOGIN_USERNAME_PWD_ORERRUN = 108007; + const ERROR_LOGIN_TOUCH_ALREADY_LOGIN = 108009; + const ERROR_VOICE_BUSY = 120001; + const ERROR_WRONG_TOKEN = 125001; + const ERROR_WRONG_SESSION = 125002; + const ERROR_WRONG_SESSION_TOKEN = 125003; + + + private $host; + private $headers = []; + private $authorized = false; + private $useLegacyTokenAuth = false; + + public function __construct(string $host, bool $legacy_token_auth = false) { + $this->host = $host; + $this->useLegacyTokenAuth = $legacy_token_auth; + } + + public function __call(string $name, array $arguments) { + if (startsWith($name, 'get')) + $this->auth(); + + return call_user_func_array([$this, $name], $arguments); + } + + public function auth() { + if ($this->authorized) + return; + + if (!$this->useLegacyTokenAuth) { + $data = $this->request('webserver/SesTokInfo'); + $this->headers = [ + 'Cookie: '.$data['SesInfo'], + '__RequestVerificationToken: '.$data['TokInfo'], + 'Content-Type: text/xml' + ]; + } else { + $data = $this->request('webserver/token'); + $this->headers = [ + '__RequestVerificationToken: '.$data['token'], + 'Content-Type: text/xml' + ]; + } + $this->authorized = true; + } + + + // get* methods have to be protected for __call magic to work + + protected function getDeviceInformation() { + return $this->request('device/information'); + } + + protected function getDeviceSignal() { + return $this->request('device/signal'); + } + + protected function getMonitoringStatus() { + return $this->request('monitoring/status'); + } + + protected function getNotifications() { + return $this->request('monitoring/check-notifications'); + } + + protected function getDialupConnection() { + return $this->request('dialup/connection'); + } + + protected function getTrafficStats() { + return $this->request('monitoring/traffic-statistics'); + } + + protected function getSMSCount() { + return $this->request('sms/sms-count'); + } + + protected function getSMSList($page = 1, $count = 20) { + $xml = $this->request('sms/sms-list', 'POST', [ + 'PageIndex' => $page, + 'ReadCount' => $count, + 'BoxType' => 1, + 'SortType' => 0, + 'Ascending' => 0, + 'UnreadPreferred' => 1 + ], true); + $xml = simplexml_load_string($xml); + + $messages = []; + foreach ($xml->Messages->Message as $message) { + $messages[] = [ + 'date' => (string)$message->Date, + 'phone' => (string)$message->Phone, + 'content' => (string)$message->Content + ]; + } + return $messages; + } + + private function xmlToAssoc(string $xml): array { + $xml = new SimpleXMLElement($xml); + $data = []; + foreach ($xml as $name => $value) { + $data[$name] = (string)$value; + } + return $data; + } + + private function request(string $method, string $http_method = 'GET', array $data = [], bool $return_body = false) { + $ch = curl_init(); + $url = 'http://'.$this->host.'/api/'.$method; + curl_setopt($ch, CURLOPT_URL, $url); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); + if (!empty($this->headers)) + curl_setopt($ch, CURLOPT_HTTPHEADER, $this->headers); + if ($http_method == 'POST') { + curl_setopt($ch, CURLOPT_POST, true); + if (!empty($data)) + curl_setopt($ch, CURLOPT_POSTFIELDS, $this->postDataToXML($data)); + } + $body = curl_exec($ch); + + $code = curl_getinfo($ch, CURLINFO_HTTP_CODE); + if ($code != 200) + throw new Exception('e3372 host returned code '.$code); + + curl_close($ch); + return $return_body ? $body : $this->xmlToAssoc($body); + } + + private function postDataToXML(array $data, int $depth = 1) { + if ($depth == 1) + return '<?xml version: "1.0" encoding="UTF-8"?>'.$this->postDataToXML(['request' => $data], $depth+1); + + $items = []; + foreach ($data as $key => $value) { + if (is_array($value)) + $value = $this->postDataToXML($value, $depth+1); + $items[] = "<{$key}>{$value}</{$key}>"; + } + + return implode('', $items); + } + + public static function getNetworkTypeLabel($type): string { + switch ((int)$type) { + case self::MACRO_NET_WORK_TYPE_NOSERVICE: return 'NOSERVICE'; + case self::MACRO_NET_WORK_TYPE_GSM: return 'GSM'; + case self::MACRO_NET_WORK_TYPE_GPRS: return 'GPRS'; + case self::MACRO_NET_WORK_TYPE_EDGE: return 'EDGE'; + case self::MACRO_NET_WORK_TYPE_WCDMA: return 'WCDMA'; + case self::MACRO_NET_WORK_TYPE_HSDPA: return 'HSDPA'; + case self::MACRO_NET_WORK_TYPE_HSUPA: return 'HSUPA'; + case self::MACRO_NET_WORK_TYPE_HSPA: return 'HSPA'; + case self::MACRO_NET_WORK_TYPE_TDSCDMA: return 'TDSCDMA'; + case self::MACRO_NET_WORK_TYPE_HSPA_PLUS: return 'HSPA_PLUS'; + case self::MACRO_NET_WORK_TYPE_EVDO_REV_0: return 'EVDO_REV_0'; + case self::MACRO_NET_WORK_TYPE_EVDO_REV_A: return 'EVDO_REV_A'; + case self::MACRO_NET_WORK_TYPE_EVDO_REV_B: return 'EVDO_REV_B'; + case self::MACRO_NET_WORK_TYPE_1xRTT: return '1xRTT'; + case self::MACRO_NET_WORK_TYPE_UMB: return 'UMB'; + case self::MACRO_NET_WORK_TYPE_1xEVDV: return '1xEVDV'; + case self::MACRO_NET_WORK_TYPE_3xRTT: return '3xRTT'; + case self::MACRO_NET_WORK_TYPE_HSPA_PLUS_64QAM: return 'HSPA_PLUS_64QAM'; + case self::MACRO_NET_WORK_TYPE_HSPA_PLUS_MIMO: return 'HSPA_PLUS_MIMO'; + case self::MACRO_NET_WORK_TYPE_LTE: return 'LTE'; + case self::MACRO_NET_WORK_TYPE_EX_NOSERVICE: return 'NOSERVICE'; + case self::MACRO_NET_WORK_TYPE_EX_GSM: return 'GSM'; + case self::MACRO_NET_WORK_TYPE_EX_GPRS: return 'GPRS'; + case self::MACRO_NET_WORK_TYPE_EX_EDGE: return 'EDGE'; + case self::MACRO_NET_WORK_TYPE_EX_IS95A: return 'IS95A'; + case self::MACRO_NET_WORK_TYPE_EX_IS95B: return 'IS95B'; + case self::MACRO_NET_WORK_TYPE_EX_CDMA_1x: return 'CDMA_1x'; + case self::MACRO_NET_WORK_TYPE_EX_EVDO_REV_0: return 'EVDO_REV_0'; + case self::MACRO_NET_WORK_TYPE_EX_EVDO_REV_A: return 'EVDO_REV_A'; + case self::MACRO_NET_WORK_TYPE_EX_EVDO_REV_B: return 'EVDO_REV_B'; + case self::MACRO_NET_WORK_TYPE_EX_HYBRID_CDMA_1x: return 'HYBRID_CDMA_1x'; + case self::MACRO_NET_WORK_TYPE_EX_HYBRID_EVDO_REV_0: return 'HYBRID_EVDO_REV_0'; + case self::MACRO_NET_WORK_TYPE_EX_HYBRID_EVDO_REV_A: return 'HYBRID_EVDO_REV_A'; + case self::MACRO_NET_WORK_TYPE_EX_HYBRID_EVDO_REV_B: return 'HYBRID_EVDO_REV_B'; + case self::MACRO_NET_WORK_TYPE_EX_EHRPD_REL_0: return 'EHRPD_REL_0'; + case self::MACRO_NET_WORK_TYPE_EX_EHRPD_REL_A: return 'EHRPD_REL_A'; + case self::MACRO_NET_WORK_TYPE_EX_EHRPD_REL_B: return 'EHRPD_REL_B'; + case self::MACRO_NET_WORK_TYPE_EX_HYBRID_EHRPD_REL_0: return 'HYBRID_EHRPD_REL_0'; + case self::MACRO_NET_WORK_TYPE_EX_HYBRID_EHRPD_REL_A: return 'HYBRID_EHRPD_REL_A'; + case self::MACRO_NET_WORK_TYPE_EX_HYBRID_EHRPD_REL_B: return 'HYBRID_EHRPD_REL_B'; + case self::MACRO_NET_WORK_TYPE_EX_WCDMA: return 'WCDMA'; + case self::MACRO_NET_WORK_TYPE_EX_HSDPA: return 'HSDPA'; + case self::MACRO_NET_WORK_TYPE_EX_HSUPA: return 'HSUPA'; + case self::MACRO_NET_WORK_TYPE_EX_HSPA: return 'HSPA'; + case self::MACRO_NET_WORK_TYPE_EX_HSPA_PLUS: return 'HSPA_PLUS'; + case self::MACRO_NET_WORK_TYPE_EX_DC_HSPA_PLUS: return 'DC_HSPA_PLUS'; + case self::MACRO_NET_WORK_TYPE_EX_TD_SCDMA: return 'TD_SCDMA'; + case self::MACRO_NET_WORK_TYPE_EX_TD_HSDPA: return 'TD_HSDPA'; + case self::MACRO_NET_WORK_TYPE_EX_TD_HSUPA: return 'TD_HSUPA'; + case self::MACRO_NET_WORK_TYPE_EX_TD_HSPA: return 'TD_HSPA'; + case self::MACRO_NET_WORK_TYPE_EX_TD_HSPA_PLUS: return 'TD_HSPA_PLUS'; + case self::MACRO_NET_WORK_TYPE_EX_802_16E: return '802_16E'; + case self::MACRO_NET_WORK_TYPE_EX_LTE: return 'LTE'; + default: return '?'; + } + } + +} |