| 88 | } |
| 89 | |
| 90 | int CChannelSSHTunnel::OnOpen(ssh_session session) |
| 91 | { |
| 92 | int nRet = 0; |
| 93 | |
| 94 | Q_ASSERT(session); |
| 95 | |
| 96 | m_Channel = ssh_channel_new(session); |
| 97 | if(NULL == m_Channel) { |
| 98 | qCritical(log) << "ssh_channel_new fail." << ssh_get_error(session); |
| 99 | return -1; |
| 100 | } |
| 101 | |
| 102 | CParameterSSHTunnel* pPara = qobject_cast<CParameterSSHTunnel*>(m_pParameter); |
| 103 | Q_ASSERT(pPara); |
| 104 | nRet = ssh_channel_open_forward( |
| 105 | m_Channel, |
| 106 | m_pRemoteNet->GetHost().toStdString().c_str(), |
| 107 | m_pRemoteNet->GetPort(), |
| 108 | pPara->GetSourceHost().toStdString().c_str(), |
| 109 | pPara->GetSourcePort()); |
| 110 | if(SSH_OK != nRet) { |
| 111 | ssh_channel_free(m_Channel); |
| 112 | m_Channel = NULL; |
| 113 | |
| 114 | QString szErr; |
| 115 | szErr = tr("SSH failed: open forward.") + ssh_get_error(session); |
| 116 | szErr += "(" + m_pRemoteNet->GetHost() |
| 117 | + ":" + QString::number(m_pRemoteNet->GetPort()) + ")"; |
| 118 | qCritical(log) << szErr; |
| 119 | setErrorString(szErr); |
| 120 | return nRet; |
| 121 | } |
| 122 | |
| 123 | qInfo(log) << "Connected:" |
| 124 | << m_pRemoteNet->GetHost() |
| 125 | + ":" + QString::number(m_pRemoteNet->GetPort()) |
| 126 | << "with ssh turnnel:" |
| 127 | << m_pParameter->m_Net.GetHost() |
| 128 | + ":" + QString::number(m_pParameter->m_Net.GetPort()); |
| 129 | |
| 130 | //ssh_channel_set_blocking(m_Channel, 0); |
| 131 | |
| 132 | return nRet; |
| 133 | } |
| 134 | |
| 135 | /*! |
| 136 | * \return |
nothing calls this directly
no test coverage detected