configurable connect timeout and session idle timeout in SSH subagent
authorVictor Kirhenshtein <victor@netxms.org>
Wed, 3 Aug 2016 07:32:59 +0000 (10:32 +0300)
committerVictor Kirhenshtein <victor@netxms.org>
Wed, 3 Aug 2016 07:32:59 +0000 (10:32 +0300)
src/agent/subagents/ssh/main.cpp
src/agent/subagents/ssh/session.cpp
src/agent/subagents/ssh/sp.cpp
src/agent/subagents/ssh/ssh_subagent.h

index 975cf91..dd9b4a9 100644 (file)
 /**
  * Configuration options
  */
+UINT32 g_sshConnectTimeout = 2000;
 UINT32 g_sshSessionIdleTimeout = 300;
 
-/**
- * Configuration file template
- */
-static NX_CFG_TEMPLATE m_cfgTemplate[] =
-{
-   { _T("SessionIdleTimeout"), CT_LONG, 0, 0, 0, 0, &g_sshSessionIdleTimeout },
-       { _T(""), CT_END_OF_LIST, 0, 0, 0, 0, NULL }
-};
-
 #if defined(_WIN32) || _USE_GNU_PTH
 
 /**
@@ -93,11 +85,24 @@ static struct ssh_threads_callbacks_struct s_threadCallbacks =
 
 #endif
 
+/**
+ * Configuration file template
+ */
+static NX_CFG_TEMPLATE s_cfgTemplate[] =
+{
+   { _T("ConnectTimeout"), CT_LONG, 0, 0, 0, 0, &g_sshConnectTimeout },
+   { _T("SessionIdleTimeout"), CT_LONG, 0, 0, 0, 0, &g_sshSessionIdleTimeout },
+   { _T(""), CT_END_OF_LIST, 0, 0, 0, 0, NULL }
+};
+
 /**
  * Subagent initialization
  */
 static BOOL SubagentInit(Config *config)
 {
+   if (!config->parseTemplate(_T("SSH"), s_cfgTemplate))
+      return FALSE;
+
 #if !defined(_WIN32) && !_USE_GNU_PTH
    ssh_threads_set_callbacks(ssh_threads_get_noop());
 #else
index d3b0a50..44a517a 100644 (file)
@@ -88,8 +88,8 @@ bool SSHSession::connect(const TCHAR *user, const TCHAR *password)
    char hostname[64];
    ssh_options_set(m_session, SSH_OPTIONS_HOST, m_addr.toStringA(hostname));
    ssh_options_set(m_session, SSH_OPTIONS_PORT, &m_port);
-   long timeout = 2;
-   ssh_options_set(m_session, SSH_OPTIONS_TIMEOUT, &timeout);
+   long timeout = (long)g_sshConnectTimeout * (long)1000;   // convert milliseconds to microseconds
+   ssh_options_set(m_session, SSH_OPTIONS_TIMEOUT_USEC, &timeout);
 #ifdef UNICODE
    char mbuser[256];
    WideCharToMultiByte(CP_UTF8, 0, user, -1, mbuser, 256, NULL, NULL);
index b6484d7..1c7ac7b 100644 (file)
@@ -55,6 +55,7 @@ SSHSession *AcquireSession(const InetAddress& addr, UINT16 port, const TCHAR *us
       delete session;
       return NULL;
    }
+   nxlog_debug(7, _T("SSH: created new session %s"), session->getName());
 
    session->acquire();
    MutexLock(s_lock);
index 1c7eb2d..14f9dcf 100644 (file)
@@ -76,6 +76,7 @@ LONG H_SSHCommand(const TCHAR *param, const TCHAR *arg, TCHAR *value, AbstractCo
 LONG H_SSHCommandList(const TCHAR *param, const TCHAR *arg, StringList *value, AbstractCommSession *session);
 
 /* globals */
+extern UINT32 g_sshConnectTimeout;
 extern UINT32 g_sshSessionIdleTimeout;
 
 #endif