void AbstractSshChannel::handleOpenSuccess(quint32 remoteChannelId, quint32 remoteWindowSize, quint32 remoteMaxPacketSize) { if (m_state != SessionRequested) { throw SSH_SERVER_EXCEPTION(SSH_DISCONNECT_PROTOCOL_ERROR, "Invalid SSH_MSG_CHANNEL_OPEN_CONFIRMATION packet."); } m_timeoutTimer->stop(); if (remoteMaxPacketSize < MinMaxPacketSize) { throw SSH_SERVER_EXCEPTION(SSH_DISCONNECT_PROTOCOL_ERROR, "Maximum packet size too low."); } #ifdef CREATOR_SSH_DEBUG qDebug("Channel opened. remote channel id: %u, remote window size: %u, " "remote max packet size: %u", remoteChannelId, remoteWindowSize, remoteMaxPacketSize); #endif m_remoteChannel = remoteChannelId; m_remoteWindowSize = remoteWindowSize; m_remoteMaxPacketSize = remoteMaxPacketSize - sizeof(quint32) - sizeof m_remoteChannel - 1; // Original value includes packet type, channel number and length field for string. setChannelState(SessionEstablished); handleOpenSuccessInternal(); }
void AbstractSshChannel::handleOpenSuccess(quint32 remoteChannelId, quint32 remoteWindowSize, quint32 remoteMaxPacketSize) { const ChannelState oldState = m_state; switch (oldState) { case CloseRequested: // closeChannel() was called while we were in SessionRequested state case SessionRequested: break; // Ok, continue. default: throw SSH_SERVER_EXCEPTION(SSH_DISCONNECT_PROTOCOL_ERROR, "Unexpected SSH_MSG_CHANNEL_OPEN_CONFIRMATION packet."); } m_timeoutTimer.stop(); if (remoteMaxPacketSize < MinMaxPacketSize) { throw SSH_SERVER_EXCEPTION(SSH_DISCONNECT_PROTOCOL_ERROR, "Maximum packet size too low."); } #ifdef CREATOR_SSH_DEBUG qDebug("Channel opened. remote channel id: %u, remote window size: %u, " "remote max packet size: %u", remoteChannelId, remoteWindowSize, remoteMaxPacketSize); #endif m_remoteChannel = remoteChannelId; m_remoteWindowSize = remoteWindowSize; m_remoteMaxPacketSize = remoteMaxPacketSize; setChannelState(SessionEstablished); if (oldState == CloseRequested) closeChannel(); else handleOpenSuccessInternal(); }