/************************************************************************** ** ** This file is part of Qt Creator ** ** Copyright (c) 2012 Nokia Corporation and/or its subsidiary(-ies). ** ** Contact: http://www.qt-project.org/ ** ** ** GNU Lesser General Public License Usage ** ** This file may be used under the terms of the GNU Lesser General Public ** License version 2.1 as published by the Free Software Foundation and ** appearing in the file LICENSE.LGPL included in the packaging of this file. ** Please review the following information to ensure the GNU Lesser General ** Public License version 2.1 requirements will be met: ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** In addition, as a special exception, Nokia gives you certain additional ** rights. These rights are described in the Nokia Qt LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** Other Usage ** ** Alternatively, this file may be used in accordance with the terms and ** conditions contained in a signed written agreement between you and Nokia. ** ** **************************************************************************/ #include "sshsendfacility_p.h" #include "sshkeyexchange_p.h" #include "sshlogging_p.h" #include "sshoutgoingpacket_p.h" #include namespace QSsh { namespace Internal { SshSendFacility::SshSendFacility(QTcpSocket *socket) : m_clientSeqNr(0), m_socket(socket), m_outgoingPacket(m_encrypter, m_clientSeqNr) { } void SshSendFacility::sendPacket() { qCDebug(sshLog, "Sending packet, client seq nr is %u", m_clientSeqNr); if (m_socket->isValid() && m_socket->state() == QAbstractSocket::ConnectedState) { m_socket->write(m_outgoingPacket.rawData()); ++m_clientSeqNr; } } void SshSendFacility::reset() { m_clientSeqNr = 0; m_encrypter.clearKeys(); } void SshSendFacility::recreateKeys(const SshKeyExchange &keyExchange) { m_encrypter.recreateKeys(keyExchange); } void SshSendFacility::createAuthenticationKey(const QByteArray &privKeyFileContents) { m_encrypter.createAuthenticationKey(privKeyFileContents); } QByteArray SshSendFacility::sendKeyExchangeInitPacket() { const QByteArray &payLoad = m_outgoingPacket.generateKeyExchangeInitPacket(); sendPacket(); return payLoad; } void SshSendFacility::sendKeyDhInitPacket(const Botan::BigInt &e) { m_outgoingPacket.generateKeyDhInitPacket(e); sendPacket(); } void SshSendFacility::sendKeyEcdhInitPacket(const QByteArray &clientQ) { m_outgoingPacket.generateKeyEcdhInitPacket(clientQ); sendPacket(); } void SshSendFacility::sendNewKeysPacket() { m_outgoingPacket.generateNewKeysPacket(); sendPacket(); } void SshSendFacility::sendDisconnectPacket(SshErrorCode reason, const QByteArray &reasonString) { m_outgoingPacket.generateDisconnectPacket(reason, reasonString); sendPacket(); } void SshSendFacility::sendMsgUnimplementedPacket(quint32 serverSeqNr) { m_outgoingPacket.generateMsgUnimplementedPacket(serverSeqNr); sendPacket(); } void SshSendFacility::sendUserAuthServiceRequestPacket() { m_outgoingPacket.generateUserAuthServiceRequestPacket(); sendPacket(); } void SshSendFacility::sendUserAuthByPasswordRequestPacket(const QByteArray &user, const QByteArray &service, const QByteArray &pwd) { m_outgoingPacket.generateUserAuthByPasswordRequestPacket(user, service, pwd); sendPacket(); } void SshSendFacility::sendUserAuthByPublicKeyRequestPacket(const QByteArray &user, const QByteArray &service, const QByteArray &key, const QByteArray &signature) { m_outgoingPacket.generateUserAuthByPublicKeyRequestPacket(user, service, key, signature); sendPacket(); } void SshSendFacility::sendQueryPublicKeyPacket(const QByteArray &user, const QByteArray &service, const QByteArray &publicKey) { m_outgoingPacket.generateQueryPublicKeyPacket(user, service, publicKey); sendPacket(); } void SshSendFacility::sendUserAuthByKeyboardInteractiveRequestPacket(const QByteArray &user, const QByteArray &service) { m_outgoingPacket.generateUserAuthByKeyboardInteractiveRequestPacket(user, service); sendPacket(); } void SshSendFacility::sendUserAuthInfoResponsePacket(const QStringList &responses) { m_outgoingPacket.generateUserAuthInfoResponsePacket(responses); sendPacket(); } void SshSendFacility::sendRequestFailurePacket() { m_outgoingPacket.generateRequestFailurePacket(); sendPacket(); } void SshSendFacility::sendIgnorePacket() { m_outgoingPacket.generateIgnorePacket(); sendPacket(); } void SshSendFacility::sendInvalidPacket() { m_outgoingPacket.generateInvalidMessagePacket(); sendPacket(); } void SshSendFacility::sendSessionPacket(quint32 channelId, quint32 windowSize, quint32 maxPacketSize) { m_outgoingPacket.generateSessionPacket(channelId, windowSize, maxPacketSize); sendPacket(); } void SshSendFacility::sendDirectTcpIpPacket(quint32 channelId, quint32 windowSize, quint32 maxPacketSize, const QByteArray &remoteHost, quint32 remotePort, const QByteArray &localIpAddress, quint32 localPort) { m_outgoingPacket.generateDirectTcpIpPacket(channelId, windowSize, maxPacketSize, remoteHost, remotePort, localIpAddress, localPort); sendPacket(); } void SshSendFacility::sendTcpIpForwardPacket(const QByteArray &bindAddress, quint32 bindPort) { m_outgoingPacket.generateTcpIpForwardPacket(bindAddress, bindPort); sendPacket(); } void SshSendFacility::sendCancelTcpIpForwardPacket(const QByteArray &bindAddress, quint32 bindPort) { m_outgoingPacket.generateCancelTcpIpForwardPacket(bindAddress, bindPort); sendPacket(); } void SshSendFacility::sendPtyRequestPacket(quint32 remoteChannel, const SshPseudoTerminal &terminal) { m_outgoingPacket.generatePtyRequestPacket(remoteChannel, terminal); sendPacket(); } void SshSendFacility::sendEnvPacket(quint32 remoteChannel, const QByteArray &var, const QByteArray &value) { m_outgoingPacket.generateEnvPacket(remoteChannel, var, value); sendPacket(); } void SshSendFacility::sendX11ForwardingPacket(quint32 remoteChannel, const QByteArray &protocol, const QByteArray &cookie, quint32 screenNumber) { m_outgoingPacket.generateX11ForwardingPacket(remoteChannel, protocol, cookie, screenNumber); sendPacket(); } void SshSendFacility::sendExecPacket(quint32 remoteChannel, const QByteArray &command) { m_outgoingPacket.generateExecPacket(remoteChannel, command); sendPacket(); } void SshSendFacility::sendShellPacket(quint32 remoteChannel) { m_outgoingPacket.generateShellPacket(remoteChannel); sendPacket(); } void SshSendFacility::sendSftpPacket(quint32 remoteChannel) { m_outgoingPacket.generateSftpPacket(remoteChannel); sendPacket(); } void SshSendFacility::sendWindowAdjustPacket(quint32 remoteChannel, quint32 bytesToAdd) { m_outgoingPacket.generateWindowAdjustPacket(remoteChannel, bytesToAdd); sendPacket(); } void SshSendFacility::sendChannelDataPacket(quint32 remoteChannel, const QByteArray &data) { m_outgoingPacket.generateChannelDataPacket(remoteChannel, data); sendPacket(); } void SshSendFacility::sendChannelSignalPacket(quint32 remoteChannel, const QByteArray &signalName) { m_outgoingPacket.generateChannelSignalPacket(remoteChannel, signalName); sendPacket(); } void SshSendFacility::sendChannelEofPacket(quint32 remoteChannel) { m_outgoingPacket.generateChannelEofPacket(remoteChannel); sendPacket(); } void SshSendFacility::sendChannelClosePacket(quint32 remoteChannel) { m_outgoingPacket.generateChannelClosePacket(remoteChannel); sendPacket(); } void SshSendFacility::sendChannelOpenConfirmationPacket(quint32 remoteChannel, quint32 localChannel, quint32 localWindowSize, quint32 maxPacketSize) { m_outgoingPacket.generateChannelOpenConfirmationPacket(remoteChannel, localChannel, localWindowSize, maxPacketSize); sendPacket(); } void SshSendFacility::sendChannelOpenFailurePacket(quint32 remoteChannel, quint32 reason, const QByteArray &reasonString) { m_outgoingPacket.generateChannelOpenFailurePacket(remoteChannel, reason, reasonString); sendPacket(); } } // namespace Internal } // namespace QSsh