mirror of
https://github.com/phpseclib/phpseclib.git
synced 2024-11-11 08:10:58 +00:00
Merge branch '1.0' into 2.0
This commit is contained in:
commit
0a379a5386
@ -926,6 +926,14 @@ class SSH2
|
||||
*/
|
||||
var $preferred_signature_format = false;
|
||||
|
||||
/**
|
||||
* Authentication Credentials
|
||||
*
|
||||
* @var array
|
||||
* @access private
|
||||
*/
|
||||
var $auth = array();
|
||||
|
||||
/**
|
||||
* Default Constructor.
|
||||
*
|
||||
@ -2124,6 +2132,7 @@ class SSH2
|
||||
function login($username)
|
||||
{
|
||||
$args = func_get_args();
|
||||
$this->auth[] = $args;
|
||||
return call_user_func_array(array(&$this, '_login'), $args);
|
||||
}
|
||||
|
||||
@ -3236,6 +3245,66 @@ class SSH2
|
||||
return (bool) ($this->bitmap & self::MASK_LOGIN);
|
||||
}
|
||||
|
||||
/**
|
||||
* Pings a server connection, or tries to reconnect if the connection has gone down
|
||||
*
|
||||
* Inspired by http://php.net/manual/en/mysqli.ping.php
|
||||
*
|
||||
* @return bool
|
||||
* @access public
|
||||
*/
|
||||
function ping()
|
||||
{
|
||||
if (!$this->isAuthenticated()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$this->window_size_server_to_client[NET_SSH2_CHANNEL_KEEP_ALIVE] = $this->window_size;
|
||||
$packet_size = 0x4000;
|
||||
$packet = pack(
|
||||
'CNa*N3',
|
||||
NET_SSH2_MSG_CHANNEL_OPEN,
|
||||
strlen('session'),
|
||||
'session',
|
||||
NET_SSH2_CHANNEL_KEEP_ALIVE,
|
||||
$this->window_size_server_to_client[NET_SSH2_CHANNEL_KEEP_ALIVE],
|
||||
$packet_size
|
||||
);
|
||||
|
||||
if (!@$this->_send_binary_packet($packet)) {
|
||||
return $this->_reconnect();
|
||||
}
|
||||
|
||||
$this->channel_status[NET_SSH2_CHANNEL_KEEP_ALIVE] = NET_SSH2_MSG_CHANNEL_OPEN;
|
||||
|
||||
$response = @$this->_get_channel_packet(NET_SSH2_CHANNEL_KEEP_ALIVE);
|
||||
if ($response !== false) {
|
||||
$this->_close_channel(NET_SSH2_CHANNEL_KEEP_ALIVE);
|
||||
return true;
|
||||
}
|
||||
|
||||
return $this->_reconnect();
|
||||
}
|
||||
|
||||
/**
|
||||
* In situ reconnect method
|
||||
*
|
||||
* @return boolean
|
||||
* @access private
|
||||
*/
|
||||
function _reconnect()
|
||||
{
|
||||
$this->_reset_connection(NET_SSH2_DISCONNECT_CONNECTION_LOST);
|
||||
$this->retry_connect = true;
|
||||
if (!$this->_connect()) {
|
||||
return false;
|
||||
}
|
||||
foreach ($this->auth as $auth) {
|
||||
$result = call_user_func_array(array(&$this, 'parent::login'), $auth);
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Resets a connection for re-use
|
||||
*
|
||||
|
Loading…
Reference in New Issue
Block a user