set_user("username","password","optional-new_password"); this is usefull especialy for scripts like bulk account creation/deletion etc... Method: Returned values: crete_account() true|false|exist delete_account() true|false auth() true|false check_account() true|flase change_password() true|false get_roster() Array() test_rpc() String Example of authentication: try { if($ejabberd_rpc->auth() === true) { print "Auth OK"; } else { print "Unknown account or bad password"; } } catch(Exception $e) { echo "Exception: ".$e->getMessage(); echo ", Code: ".$e->getCode(); } */################################################## class rpc_connector { protected $rpc_server; protected $rpc_port; protected $username; protected $password; protected $newpass; protected $vhost; protected $parms; protected $method; public function __construct($rpc_server,$rpc_port,$vhost,$username = null,$password = null,$newpass = null) { $this->setData($rpc_server,$rpc_port,$vhost,$username,$password,$newpass); } protected function setData($rpc_server, $rpc_port, $vhost, $username, $password,$newpass) { $this->rpc_server = $rpc_server; $this->rpc_port = $rpc_port; $this->vhost = $vhost; $this->username = $username; $this->password = $this->clean_password($password); $this->newpass = $this->clean_password($newpass); } public function set_user($username,$password,$newpass = null) { $this->username = $username; $this->password = $this->clean_password($password); $this->newpass = $this->clean_password($newpass); } protected function commit_rpc() { $request = xmlrpc_encode_request($this->method,$this->parms); $context = stream_context_create(array('http' => array( 'method' => "POST", 'header' => "Content-Type: text/xml; charset=utf-8\r\n" . "User-Agent: XMLRPC::Client JorgeRPCclient", 'content' => $request ))); $file = file_get_contents("http://$this->rpc_server".":"."$this->rpc_port", false, $context); $response = xmlrpc_decode($file,"utf8"); if (xmlrpc_is_fault($response)) { throw new Exception("XML-RPC Call Failed. Unrecoverable condition",0); } else { return $response; } } protected function is_value($value) { if($value === null) { return false; } elseif($value==""){ return false; } else{ return true; } } protected function clean_password($password) { if (get_magic_quotes_gpc() === 1) { return stripslashes($password); } return $password; } public function auth() { $this->method = "check_password"; $this->parms = array("user"=>"$this->username","host"=>"$this->vhost","password"=>"$this->password"); if ($this->commit_rpc() === 0 ) { return true; } else{ return false; } } public function create_account() { if ($this->is_value($this->username) === false OR $this->is_value($this->password) === false) { return false; } $this->method = "create_account"; $this->parms = array("user"=>"$this->username","host"=>"$this->vhost","password"=>"$this->password"); $call = $this->commit_rpc(); if ($call === 0) { return true; } elseif($call === 409) { return "exist"; } elseif($call === 1) { return false; } } public function check_account() { if ($this->is_value($this->username) === false) { return false; } $this->method = "check_account"; $this->parms = array("user"=>"$this->username","host"=>"$this->vhost"); if ($this->commit_rpc() === 1) { return false; } else{ return true; } } public function change_password() { if ($this->is_value($this->newpass) === false OR $this->is_value($this->username) === false) { return false; } $this->method = "change_password"; $this->parms = array("user"=>"$this->username","host"=>"$this->vhost","newpass"=>"$this->newpass"); if ($this->commit_rpc() === 0) { $this->password = $this->newpass; return true; } else{ return false; } } public function get_roster() { $this->method = "get_roster"; $this->parms = array("user"=>"$this->username","server"=>"$this->vhost"); return $this->commit_rpc(); } public function delete_account() { if ($this->is_value($this->password) === false OR $this->is_value($this->username) === false) { return false; } $this->method = "delete_account"; $this->parms = array("user"=>"$this->username","host"=>"$this->vhost","password"=>"$this->password"); $this->commit_rpc(); if ($this->check_account() === false) { return true; } else { return false; } } public function online_users() { $this->method = "online_users"; $this->parms = "null"; return $this->commit_rpc(); } public function test_rpc() { $this->method = "echothis"; $this->parms = "If you can read this then RPC is working..."; return $this->commit_rpc(); } } ?>