hostname = $hostname; $this->username = $username; $this->password = $password; $this->port = $port; $this->use_ssl = $use_ssl; } private function _connect() { $crypto = NetworkStream::CRYPTO_OFF; if($this->use_ssl === true) { $crypto = NetworkStream::CRYPTO_TLS; } elseif($this->use_ssl == "auto" && $this->port == 8729) { $crypto = NetworkStream::CRYPTO_TLS; } $this->ros = new RouterOS\Client($this->hostname,$this->username,$this->password,$this->port,false,3, $crypto); } public function get($table, $filter = array()) { if(!$this->ros) $this->_connect(); if(substr($table, 0, 1) != '/') { $table = "/".$table; } $req = new RouterOS\Request("$table print"); $q = false; if(count($filter)) { foreach($filter as $name => $value) { if($q === false) { $q = RouterOS\Query::where($name,$value); } else { $q->andWhere(RouterOS\Query::where($name,$value)); } } $req->setQuery($q); } $responses = $this->ros->sendSync($req); $answers = []; foreach($responses as $response) { $answer = new mfRouteros_Item($response); if($answer->propcount()) { $answers[] = $answer; } } return $answers; } public function getFirst($table, $filter = array()) { $answers = $this->get($table,$filter); return array_shift($answers); } public function getLast($table, $filter = array()) { $answers = $this->get($table,$filter); return array_pop($answers); } public function set($table, $action, $set=array(), $filter = array()) { if(!$this->ros) $this->_connect(); if(substr($table, 0, 1) != '/') { $table = "/".$table; } $item = $this->getFirst($table, $filter); $id = $item['.id']; $req = new RouterOS\Request("$table $action"); $req->setArgument("numbers", $id); if(count($set)) { foreach($set as $name => $value) { $req->setArgument($name, $value); } } $resp = $this->ros->sendSync($req); if($resp->getType() !== RouterOS\Response::TYPE_FINAL) { return false; } return true; } public function add($table, $set = []) { if(!$this->ros) $this->_connect(); if(substr($table, 0, 1) != '/') { $table = "/".$table; } $req = new RouterOS\Request("$table add"); if(count($set)) { foreach($set as $name => $value) { $req->setArgument($name, $value); } } $resp = $this->ros->sendSync($req); if($resp->getType() !== RouterOS\Response::TYPE_FINAL) { return false; } return true; } public function remove($table, $filter = []) { if(!$filter) { // no filter would remove every entry in table -> disallowed return false; } if(!$this->ros) $this->_connect(); $util = new RouterOS\Util($this->ros); if(substr($table, 0, 1) != '/') { $table = "/".$table; } $query = false; if(count($filter)) { foreach($filter as $name => $value) { if(!$query) { $query = RouterOS\Query::where($name, $value); } else { $query->andWhere($name, $value); } } } $util->setMenu($table); $util->remove($query); return true; } /* accessors */ public function hostname($hostname=false) { if($hostname) { $this->hostname = $hostname; } return $this->hostname; } public function username($username=false) { if($username) { $this->username = $username; } return $this->username; } public function password($password=false) { if($password) { $this->password = $password; } return $this->password; } }