void AbstractSshChannel::handleChannelRequest(const SshIncomingPacket &packet) { checkChannelActive(); const QByteArray &requestType = packet.extractChannelRequestType(); if (requestType == SshIncomingPacket::ExitStatusType) handleExitStatus(packet.extractChannelExitStatus()); else if (requestType == SshIncomingPacket::ExitSignalType) handleExitSignal(packet.extractChannelExitSignal()); else if (requestType != "*****@*****.**") // Suppress warning for this one, as it's sent all the time. qWarning("Ignoring unknown request type '%s'", requestType.data()); }
void AbstractSshChannel::handleWindowAdjust(quint32 bytesToAdd) { checkChannelActive(); const quint64 newValue = m_remoteWindowSize + bytesToAdd; if (newValue > 0xffffffffu) { throw SSH_SERVER_EXCEPTION(SSH_DISCONNECT_PROTOCOL_ERROR, "Illegal window size requested."); } m_remoteWindowSize = newValue; flushSendBuffer(); }
int AbstractSshChannel::handleChannelOrExtendedChannelData(const QByteArray &data) { checkChannelActive(); const int bytesToDeliver = qMin<quint32>(data.size(), maxDataSize()); if (bytesToDeliver != data.size()) qWarning("Misbehaving server does not respect local window, clipping."); m_localWindowSize -= bytesToDeliver; if (m_localWindowSize < maxPacketSize()) { m_localWindowSize += maxPacketSize(); m_sendFacility.sendWindowAdjustPacket(m_remoteChannel, maxPacketSize()); } return bytesToDeliver; }
void SftpChannelPrivate::handleServerVersion() { checkChannelActive(); if (m_sftpState != InitSent) { throw SSH_SERVER_EXCEPTION(SSH_DISCONNECT_PROTOCOL_ERROR, "Unexpected SSH_FXP_VERSION packet."); } #ifdef CREATOR_SSH_DEBUG qDebug("sftp init received"); #endif const quint32 serverVersion = m_incomingPacket.extractServerVersion(); if (serverVersion != ProtocolVersion) { emit initializationFailed(tr("Protocol version mismatch: Expected %1, got %2") .arg(serverVersion).arg(ProtocolVersion)); closeChannel(); } else { m_sftpState = Initialized; emit initialized(); } }