try to downgrade to libssh 0.8.9.

dev
Apex Liu 2020-07-07 00:56:52 +08:00
parent 32ba720ad1
commit 9fa10ea7de
6 changed files with 47 additions and 31 deletions

View File

@ -231,14 +231,14 @@ class BuilderWin(BuilderBase):
utils.unzip(os.path.join(PATH_DOWNLOAD, file_name), PATH_EXTERNAL)
os.rename(os.path.join(PATH_EXTERNAL, 'libssh-{}'.format(env.ver_libssh)), self.LIBSSH_PATH_SRC)
cc.n('fix libssh source code... ', end='')
s_name = 'libssh-{}'.format(env.ver_libssh)
utils.ensure_file_exists(os.path.join(PATH_EXTERNAL, 'fix-external', 'libssh', s_name, 'src', 'session.c'))
# utils.ensure_file_exists(os.path.join(PATH_EXTERNAL, 'fix-external', 'libssh', s_name, 'src', 'libcrypto.c'))
utils.ensure_file_exists(os.path.join(PATH_EXTERNAL, 'fix-external', 'libssh', s_name, 'src', 'libcrypto-compat.c'))
utils.copy_file(os.path.join(PATH_EXTERNAL, 'fix-external', 'libssh', s_name, 'src'), os.path.join(self.LIBSSH_PATH_SRC, 'src'), 'session.c')
# utils.copy_file(os.path.join(PATH_EXTERNAL, 'fix-external', 'libssh', s_name, 'src'), os.path.join(self.LIBSSH_PATH_SRC, 'src'), 'libcrypto.c')
utils.copy_file(os.path.join(PATH_EXTERNAL, 'fix-external', 'libssh', s_name, 'src'), os.path.join(self.LIBSSH_PATH_SRC, 'src'), 'libcrypto-compat.c')
# cc.n('fix libssh source code... ', end='')
# s_name = 'libssh-{}'.format(env.ver_libssh)
# utils.ensure_file_exists(os.path.join(PATH_EXTERNAL, 'fix-external', 'libssh', s_name, 'src', 'session.c'))
# # utils.ensure_file_exists(os.path.join(PATH_EXTERNAL, 'fix-external', 'libssh', s_name, 'src', 'libcrypto.c'))
# utils.ensure_file_exists(os.path.join(PATH_EXTERNAL, 'fix-external', 'libssh', s_name, 'src', 'libcrypto-compat.c'))
# # utils.copy_file(os.path.join(PATH_EXTERNAL, 'fix-external', 'libssh', s_name, 'src'), os.path.join(self.LIBSSH_PATH_SRC, 'src'), 'session.c')
# ## utils.copy_file(os.path.join(PATH_EXTERNAL, 'fix-external', 'libssh', s_name, 'src'), os.path.join(self.LIBSSH_PATH_SRC, 'src'), 'libcrypto.c')
# # utils.copy_file(os.path.join(PATH_EXTERNAL, 'fix-external', 'libssh', s_name, 'src'), os.path.join(self.LIBSSH_PATH_SRC, 'src'), 'libcrypto-compat.c')
out_file_lib = os.path.join(self.LIBSSH_PATH_SRC, 'lib', ctx.target_path, 'ssh.lib')
out_file_dll = os.path.join(self.LIBSSH_PATH_SRC, 'lib', ctx.target_path, 'ssh.dll')
@ -260,7 +260,7 @@ class BuilderWin(BuilderBase):
cc.i('build libssh...')
sln_file = os.path.join(self.LIBSSH_PATH_SRC, 'build', 'libssh.sln')
utils.msvc_build(sln_file, 'ssh', ctx.target_path, 'win32', False)
utils.msvc_build(sln_file, 'ssh_shared', ctx.target_path, 'win32', False)
utils.ensure_file_exists(os.path.join(self.LIBSSH_PATH_SRC, 'build', 'src', ctx.target_path, 'ssh.lib'))
utils.ensure_file_exists(os.path.join(self.LIBSSH_PATH_SRC, 'build', 'src', ctx.target_path, 'ssh.dll'))
utils.copy_file(os.path.join(self.LIBSSH_PATH_SRC, 'build', 'src', ctx.target_path), os.path.join(self.LIBSSH_PATH_SRC, 'lib', ctx.target_path), 'ssh.lib')
@ -516,14 +516,14 @@ class BuilderLinux(BuilderBase):
return
cc.v('')
cc.n('fix libssh source code... ', end='')
s_name = 'libssh-{}'.format(env.ver_libssh)
utils.ensure_file_exists(os.path.join(PATH_EXTERNAL, 'fix-external', 'libssh', s_name, 'src', 'session.c'))
# utils.ensure_file_exists(os.path.join(PATH_EXTERNAL, 'fix-external', 'libssh', s_name, 'src', 'libcrypto.c'))
utils.ensure_file_exists(os.path.join(PATH_EXTERNAL, 'fix-external', 'libssh', s_name, 'src', 'libcrypto-compat.c'))
utils.copy_file(os.path.join(PATH_EXTERNAL, 'fix-external', 'libssh', s_name, 'src'), os.path.join(self.LIBSSH_PATH_SRC, 'src'), 'session.c')
# utils.copy_file(os.path.join(PATH_EXTERNAL, 'fix-external', 'libssh', s_name, 'src'), os.path.join(self.LIBSSH_PATH_SRC, 'src'), 'libcrypto.c')
utils.copy_file(os.path.join(PATH_EXTERNAL, 'fix-external', 'libssh', s_name, 'src'), os.path.join(self.LIBSSH_PATH_SRC, 'src'), 'libcrypto-compat.c')
# cc.n('fix libssh source code... ', end='')
# s_name = 'libssh-{}'.format(env.ver_libssh)
# utils.ensure_file_exists(os.path.join(PATH_EXTERNAL, 'fix-external', 'libssh', s_name, 'src', 'session.c'))
# ## utils.ensure_file_exists(os.path.join(PATH_EXTERNAL, 'fix-external', 'libssh', s_name, 'src', 'libcrypto.c'))
# # utils.ensure_file_exists(os.path.join(PATH_EXTERNAL, 'fix-external', 'libssh', s_name, 'src', 'libcrypto-compat.c'))
# # utils.copy_file(os.path.join(PATH_EXTERNAL, 'fix-external', 'libssh', s_name, 'src'), os.path.join(self.LIBSSH_PATH_SRC, 'src'), 'session.c')
# ## utils.copy_file(os.path.join(PATH_EXTERNAL, 'fix-external', 'libssh', s_name, 'src'), os.path.join(self.LIBSSH_PATH_SRC, 'src'), 'libcrypto.c')
# # utils.copy_file(os.path.join(PATH_EXTERNAL, 'fix-external', 'libssh', s_name, 'src'), os.path.join(self.LIBSSH_PATH_SRC, 'src'), 'libcrypto-compat.c')
build_path = os.path.join(self.LIBSSH_PATH_SRC, 'build')

View File

@ -13,4 +13,4 @@ mongoose = 6.16
; https://www.zlib.net/zlib1211.zip
zlib = 1.2.11,1211
; https://git.libssh.org/projects/libssh.git/
libssh = 0.9.2
libssh = 0.8.9

View File

@ -7,7 +7,7 @@ SshProxy::SshProxy() :
ExThreadBase("ssh-proxy-thread"),
m_bind(NULL) {
m_timer_counter_check_noop = 0;
m_timer_counter_send_keep_alive= 0;
m_timer_counter_keep_alive= 0;
m_noop_timeout_sec = 900; // default to 15 minutes.
m_listener_running = false;
}
@ -62,7 +62,7 @@ bool SshProxy::init() {
void SshProxy::timer() {
// timer() will be called per one second
m_timer_counter_check_noop++;
m_timer_counter_send_keep_alive++;
m_timer_counter_keep_alive++;
// check no-op per 5 seconds.
if (m_timer_counter_check_noop >= 5) {
@ -80,12 +80,12 @@ void SshProxy::timer() {
}
// send keep-alive every 60 seconds
if (m_timer_counter_send_keep_alive >= 60) {
m_timer_counter_send_keep_alive = 0;
if (m_timer_counter_keep_alive >= 60) {
m_timer_counter_keep_alive = 0;
ExThreadSmartLock locker(m_lock);
ts_ssh_sessions::iterator it;
for (it = m_sessions.begin(); it != m_sessions.end(); ++it) {
it->first->send_keep_alive();
it->first->keep_alive();
}
}
}

View File

@ -27,7 +27,7 @@ protected:
private:
ssh_bind m_bind;
int m_timer_counter_check_noop;
int m_timer_counter_send_keep_alive;
int m_timer_counter_keep_alive;
ExThreadLock m_lock;
bool m_listener_running;

View File

@ -39,6 +39,7 @@ SshSession::SshSession(SshProxy *proxy, ssh_session sess_client) :
m_is_logon = false;
m_have_error = false;
m_need_send_keepalive = false;
m_recving_from_srv = false;
m_recving_from_cli = false;
@ -323,6 +324,18 @@ void SshSession::_run(void) {
// timeout.
_check_channels();
}
if (m_need_send_keepalive) {
m_need_send_keepalive = false;
EXLOGD("[ssh] send keep-alive.\n");
if (m_srv_session)
//ssh_send_keepalive(m_srv_session);
ssh_send_ignore(m_srv_session, "keepalive@openssh.com");
if (m_cli_session)
//ssh_send_keepalive(m_cli_session);
ssh_send_ignore(m_cli_session, "keepalive@openssh.com");
}
} while (!m_channels.empty());
if (m_channels.empty())
@ -415,12 +428,13 @@ void SshSession::check_noop_timeout(ex_u32 t_now, ex_u32 timeout) {
}
}
void SshSession::send_keep_alive() {
EXLOGD("[ssh] send keep-alive.\n");
if(m_srv_session)
ssh_send_keepalive(m_srv_session);
if (m_cli_session)
ssh_send_keepalive(m_cli_session);
void SshSession::keep_alive() {
m_need_send_keepalive = true;
// EXLOGD("[ssh] keep-alive.\n");
// if(m_srv_session)
// ssh_send_keepalive(m_srv_session);
// if (m_cli_session)
// ssh_send_keepalive(m_cli_session);
}

View File

@ -78,7 +78,7 @@ public:
void save_record();
//
void check_noop_timeout(ex_u32 t_now, ex_u32 timeout);
void send_keep_alive();
void keep_alive();
const ex_astr& sid() { return m_sid; }
@ -146,6 +146,8 @@ private:
bool m_have_error;
bool m_need_send_keepalive;
bool m_recving_from_srv; // 是否正在从服务器接收数据?
bool m_recving_from_cli; // 是否正在从客户端接收数据?