Line 41 | Line 41 |
---|
var $username; var $password; var $use_ssl;
|
var $username; var $password; var $use_ssl;
|
| var $verify_peer; var $verify_peer_name; var $allow_self_signed;
|
var $resource = 'functions_jabber.phpbb.php';
var $enable_logging;
| var $resource = 'functions_jabber.phpbb.php';
var $enable_logging;
|
Line 49 | Line 52 |
---|
var $features = array();
/**
|
var $features = array();
/**
|
| * Constructor * * @param string $server Jabber server * @param int $port Jabber server port * @param string $username Jabber username or JID * @param string $password Jabber password * @param boold $use_ssl Use ssl * @param bool $verify_peer Verify SSL certificate * @param bool $verify_peer_name Verify Jabber peer name * @param bool $allow_self_signed Allow self signed certificates
|
*/
|
*/
|
function jabber($server, $port, $username, $password, $use_ssl = false)
| function __construct($server, $port, $username, $password, $use_ssl = false, $verify_peer = true, $verify_peer_name = true, $allow_self_signed = false)
|
{ $this->connect_server = ($server) ? $server : 'localhost'; $this->port = ($port) ? $port : 5222;
| { $this->connect_server = ($server) ? $server : 'localhost'; $this->port = ($port) ? $port : 5222;
|
Line 71 | Line 84 |
---|
$this->password = $password; $this->use_ssl = ($use_ssl && self::can_use_ssl()) ? true : false;
|
$this->password = $password; $this->use_ssl = ($use_ssl && self::can_use_ssl()) ? true : false;
|
| $this->verify_peer = $verify_peer; $this->verify_peer_name = $verify_peer_name; $this->allow_self_signed = $allow_self_signed;
|
// Change port if we use SSL if ($this->port == 5222 && $this->use_ssl)
| // Change port if we use SSL if ($this->port == 5222 && $this->use_ssl)
|
Line 96 | Line 112 |
---|
*/ static public function can_use_tls() {
|
*/ static public function can_use_tls() {
|
if (!@extension_loaded('openssl') || !function_exists('stream_socket_enable_crypto') || !function_exists('stream_get_meta_data') || !function_exists('socket_set_blocking') || !function_exists('stream_get_wrappers'))
| if (!@extension_loaded('openssl') || !function_exists('stream_socket_enable_crypto') || !function_exists('stream_get_meta_data') || !function_exists('stream_set_blocking') || !function_exists('stream_get_wrappers'))
|
{ return false; }
| { return false; }
|
Line 139 | Line 155 |
---|
$this->session['ssl'] = $this->use_ssl;
|
$this->session['ssl'] = $this->use_ssl;
|
if ($this->open_socket($this->connect_server, $this->port, $this->use_ssl))
| if ($this->open_socket($this->connect_server, $this->port, $this->use_ssl, $this->verify_peer, $this->verify_peer_name, $this->allow_self_signed))
|
{ $this->send("<?xml version='1.0' encoding='UTF-8' ?" . ">\n"); $this->send("<stream:stream to='{$this->server}' xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' version='1.0'>\n");
| { $this->send("<?xml version='1.0' encoding='UTF-8' ?" . ">\n"); $this->send("<stream:stream to='{$this->server}' xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' version='1.0'>\n");
|
Line 227 | Line 243 |
---|
* @param string $server host to connect to * @param int $port port number * @param bool $use_ssl use ssl or not
|
* @param string $server host to connect to * @param int $port port number * @param bool $use_ssl use ssl or not
|
| * @param bool $verify_peer verify ssl certificate * @param bool $verify_peer_name verify peer name * @param bool $allow_self_signed allow self-signed ssl certificates
|
* @access public * @return bool */
|
* @access public * @return bool */
|
function open_socket($server, $port, $use_ssl = false)
| function open_socket($server, $port, $use_ssl, $verify_peer, $verify_peer_name, $allow_self_signed)
|
{ if (@function_exists('dns_get_record')) {
| { if (@function_exists('dns_get_record')) {
|
Line 241 | Line 260 |
---|
} }
|
} }
|
$server = $use_ssl ? 'ssl://' . $server : $server;
| $options = array();
|
|
|
if ($this->connection = @fsockopen($server, $port, $errorno, $errorstr, $this->timeout))
| if ($use_ssl)
|
{
|
{
|
socket_set_blocking($this->connection, 0); socket_set_timeout($this->connection, 60);
| $remote_socket = 'ssl://' . $server . ':' . $port;
// Set ssl context options, see http://php.net/manual/en/context.ssl.php $options['ssl'] = array('verify_peer' => $verify_peer, 'verify_peer_name' => $verify_peer_name, 'allow_self_signed' => $allow_self_signed); } else { $remote_socket = $server . ':' . $port; }
$socket_context = stream_context_create($options);
if ($this->connection = @stream_socket_client($remote_socket, $errorno, $errorstr, $this->timeout, STREAM_CLIENT_CONNECT, $socket_context)) { stream_set_blocking($this->connection, 0); stream_set_timeout($this->connection, 60);
|
return true; }
| return true; }
|
Line 563 | Line 596 |
---|
case 'proceed': // continue switching to TLS $meta = stream_get_meta_data($this->connection);
|
case 'proceed': // continue switching to TLS $meta = stream_get_meta_data($this->connection);
|
socket_set_blocking($this->connection, 1);
| stream_set_blocking($this->connection, 1);
|
if (!stream_socket_enable_crypto($this->connection, true, STREAM_CRYPTO_METHOD_TLS_CLIENT)) {
| if (!stream_socket_enable_crypto($this->connection, true, STREAM_CRYPTO_METHOD_TLS_CLIENT)) {
|
Line 571 | Line 604 |
---|
return false; }
|
return false; }
|
socket_set_blocking($this->connection, $meta['blocked']);
| stream_set_blocking($this->connection, $meta['blocked']);
|
$this->session['tls'] = true;
// new stream
| $this->session['tls'] = true;
// new stream
|