summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIru Cai <mytbk920423@gmail.com>2018-05-10 13:10:43 +0800
committerIru Cai <mytbk920423@gmail.com>2018-05-10 14:16:42 +0800
commitee01dfc0653ab814bc56eb7ad84a62b6bf162060 (patch)
tree0dce6bb056b22ade36d78b4d56bbe0c2ed9f2f3a
parent5932fab57b9372a0db94880bfa52cf8b22a40698 (diff)
downloadfqterm-ee01dfc0653ab814bc56eb7ad84a62b6bf162060.tar.xz
use C SSH buffer for {input,output}_buffer
-rw-r--r--src/protocol/fqterm_ssh_socket.cpp64
-rw-r--r--src/protocol/fqterm_ssh_socket.h9
2 files changed, 33 insertions, 40 deletions
diff --git a/src/protocol/fqterm_ssh_socket.cpp b/src/protocol/fqterm_ssh_socket.cpp
index 2755609..9c00cec 100644
--- a/src/protocol/fqterm_ssh_socket.cpp
+++ b/src/protocol/fqterm_ssh_socket.cpp
@@ -22,7 +22,6 @@
#include "fqterm_ssh_packet.h"
#include "fqterm_ssh1_packet.h"
#include "fqterm_ssh2_packet.h"
-#include "fqterm_ssh_buffer.h"
#include "fqterm_ssh_kex.h"
#include "fqterm_ssh2_kex.h"
#include "fqterm_ssh_const.h"
@@ -46,8 +45,8 @@ FQTermSSHSocket::FQTermSSHSocket(int col, int row, const QString& termtype, cons
private_socket_ = new FQTermSocketPrivate();
- input_buffer_ = NULL;
- output_buffer_ = NULL;
+ buffer_init(&input_buffer);
+ buffer_init(&output_buffer);
buffer_init(&socket_buffer);
packet_receiver_ = NULL;
packet_sender_ = NULL;
@@ -70,8 +69,8 @@ FQTermSSHSocket::FQTermSSHSocket(int col, int row, const QString& termtype, cons
FQTermSSHSocket::~FQTermSSHSocket() {
delete private_socket_;
- delete input_buffer_;
- delete output_buffer_;
+ buffer_deinit(&input_buffer);
+ buffer_deinit(&output_buffer);
buffer_deinit(&socket_buffer);
delete packet_receiver_;
delete packet_sender_;
@@ -85,8 +84,8 @@ void FQTermSSHSocket::init(int ssh_version) {
// but in that case reset methods should be added to all these classes.
// Guys lazy as me won't do that.
- delete input_buffer_;
- delete output_buffer_;
+ buffer_clear(&input_buffer);
+ buffer_clear(&output_buffer);
buffer_clear(&socket_buffer);
delete packet_receiver_;
delete packet_sender_;
@@ -98,8 +97,6 @@ void FQTermSSHSocket::init(int ssh_version) {
auth_ok_emitted_ = false;
if (ssh_version == 1) {
- input_buffer_ = new FQTermSSHBuffer(1024);
- output_buffer_ = new FQTermSSHBuffer(1024);
packet_receiver_ = new FQTermSSH1PacketReceiver;
packet_sender_ = new FQTermSSH1PacketSender;
key_exchanger_ = new FQTermSSH1Kex(SSH_V1_C, server_name_.toLatin1().constData());
@@ -127,8 +124,6 @@ void FQTermSSHSocket::init(int ssh_version) {
key_exchanger_->initKex(packet_receiver_, packet_sender_);
} else {
- input_buffer_ = new FQTermSSHBuffer(1024);
- output_buffer_ = new FQTermSSHBuffer(1024);
packet_receiver_ = new FQTermSSH2PacketReceiver;
packet_sender_ = new FQTermSSH2PacketSender;
key_exchanger_ = new FQTermSSH2Kex(SSH_V2_C, server_name_.toLatin1().constData());
@@ -188,9 +183,10 @@ void FQTermSSHSocket::channelOK() {
//auth_ok_emitted_ = false;
}
-void FQTermSSHSocket::channelReadyRead(const char *data, int len) {
- input_buffer_->putRawData(data, len);
- emit readyRead();
+void FQTermSSHSocket::channelReadyRead(const char *data, int len)
+{
+ buffer_append(&input_buffer, (const uint8_t*)data, len);
+ emit readyRead();
}
unsigned long FQTermSSHSocket::socketWriteBlock(const char *data, unsigned long len) {
@@ -303,32 +299,34 @@ void FQTermSSHSocket::handlePacket(int type) {
}
}
-unsigned long FQTermSSHSocket::bytesAvailable() {
- return input_buffer_->len();
+unsigned long FQTermSSHSocket::bytesAvailable()
+{
+ return buffer_len(&input_buffer);
}
-QByteArray FQTermSSHSocket::readBlock(unsigned long size) {
- QByteArray data(size, 0);
- input_buffer_->getRawData(data.data(), size);
- return data;
+QByteArray FQTermSSHSocket::readBlock(unsigned long size)
+{
+ QByteArray data(size, 0);
+ buffer_get(&input_buffer, (uint8_t*)data.data(), size);
+ return data;
}
-long FQTermSSHSocket::writeBlock(const QByteArray &data) {
- if (!is_channel_ok_) return 0;
-
- unsigned long size = data.size();
- output_buffer_->putRawData(data.data(), size);
- return size;
-}
+long FQTermSSHSocket::writeBlock(const QByteArray &data)
+{
+ if (!is_channel_ok_) return 0;
-void FQTermSSHSocket::flush() {
- if (!is_channel_ok_) return;
-
- int size = output_buffer_->len();
+ unsigned long size = data.size();
+ buffer_append(&output_buffer, (const uint8_t*)data.data(), size);
+ return size;
+}
- ssh_channel_->sendData((const char *)output_buffer_->data(), size);
+void FQTermSSHSocket::flush()
+{
+ if (!is_channel_ok_) return;
- output_buffer_->consume(size);
+ size_t size = buffer_len(&output_buffer);
+ ssh_channel_->sendData((const char *)buffer_data(&output_buffer), size);
+ buffer_consume(&output_buffer, size);
}
void FQTermSSHSocket::close() {
diff --git a/src/protocol/fqterm_ssh_socket.h b/src/protocol/fqterm_ssh_socket.h
index e8b6dec..29ac251 100644
--- a/src/protocol/fqterm_ssh_socket.h
+++ b/src/protocol/fqterm_ssh_socket.h
@@ -34,8 +34,6 @@ class FQTermSSHPacketReceiver;
class FQTermSSHPacketSender;
-class FQTermSSHBuffer;
-
class FQTermSSHKex;
class FQTermSSHAuth;
@@ -54,11 +52,8 @@ private:
FQTermSocketPrivate *private_socket_;
-
- FQTermSSHBuffer *input_buffer_;
-
- FQTermSSHBuffer *output_buffer_;
-
+ buffer input_buffer; /* data to read, decrypted */
+ buffer output_buffer; /* data to send, unencrypted */
buffer socket_buffer; /* data received from the socket */