. */ define("ERR_OK", 0); define("ERR_UNKNOWN", 1); define("ERR_MODULE_NOT_FOUND", 2); define("ERR_USER_NOT_FOUND", 3); define("ERR_UNKNOWN_ZNC_VERSION_OR_METHOD", 4); $zncserver_classes = array( "ZNCServerV0.class.php", "ZNCServerV1.class.php", ); class ZNCServer { private static $zncserver_classes = array(); private $host, $port, $server = NULL; private static function load_classes() { global $zncserver_classes; foreach($zncserver_classes as $classfile) { if(isset($classinfo)) unset($classinfo); include($classfile); if(isset($classinfo)) self::$zncserver_classes[] = $classinfo; } } public function ZNCServer($host, $port, $version = null) { $this->host = $host; $this->port = $port; if(empty(self::$zncserver_classes)) self::load_classes(); if($version !== null) { $this->loadServerObject($version); } } private function loadServerObject($version, $http_connector = null) { $preferred_class = null; foreach(self::$zncserver_classes as $classinfo) { if($version < $classinfo['version']) continue; if($preferred_class && $classinfo['version'] < $preferred_class['version']) continue; $preferred_class = $classinfo; } if($preferred_class) { $classname = $preferred_class['name']; $this->server = new $classname($this->host, $this->port, $http_connector); } } public function login($user, $pass) { /* Version independent login, maybe there's a better way? */ if($this->server) return $this->server->login($user, $pass); $post = array( "user" => $user, "pass" => $pass, "submitted" => "1" ); $connector = new HTTPConnector(); $connector->post("http://".$this->host.":".$this->port."/login", $post); $http = $connector->get("http://".$this->host.":".$this->port."/?cookie_check=true"); $logged_in = !preg_match("/errorbar/i", $http); /* Version detection */ if(preg_match("#ZNC ([0-9]+\.[0-9]+)#", $http, $version_match)) $this->loadServerObject($version_match[1], $connector); return $logged_in; } public function __call($name, $arguments) { if(!$this->server) return ERR_UNKNOWN_ZNC_VERSION_OR_METHOD; if(!method_exists($this->server, $name)) return ERR_UNKNOWN_ZNC_VERSION_OR_METHOD; return call_user_func_array(array($this->server, $name), $arguments); } } ?>