summaryrefslogtreecommitdiff
path: root/src/protocol/internal/fqterm_ssh_buffer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/protocol/internal/fqterm_ssh_buffer.cpp')
-rw-r--r--src/protocol/internal/fqterm_ssh_buffer.cpp258
1 files changed, 0 insertions, 258 deletions
diff --git a/src/protocol/internal/fqterm_ssh_buffer.cpp b/src/protocol/internal/fqterm_ssh_buffer.cpp
deleted file mode 100644
index 9775891..0000000
--- a/src/protocol/internal/fqterm_ssh_buffer.cpp
+++ /dev/null
@@ -1,258 +0,0 @@
-/***************************************************************************
- * fqterm, a terminal emulator for both BBS and *nix. *
- * Copyright (C) 2008 fqterm development group. *
- * *
- * This program is free software; you can redistribute it and/or modify *
- * it under the terms of the GNU General Public License as published by *
- * the Free Software Foundation; either version 2 of the License, or *
- * (at your option) any later version. *
- * *
- * This program is distributed in the hope that it will be useful, *
- * but WITHOUT ANY WARRANTY; without even the implied warranty of *
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
- * GNU General Public License for more details. *
- * *
- * You should have received a copy of the GNU General Public License *
- * along with this program; if not, write to the *
- * Free Software Foundation, Inc., *
- * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. *
- ***************************************************************************/
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <vector>
-
-#include "fqterm_trace.h"
-#include "fqterm_ssh_buffer.h"
-#include "fqterm_serialization.h"
-
-namespace FQTerm {
-//==============================================================================
-// FQTermSSHBuffer
-//==============================================================================
-
-FQTermSSHBuffer::FQTermSSHBuffer(int size) {
- alloc_size_ = size;
- buffer_size_ = 0;
- offset_ = 0;
- buffer_ = new u_char[alloc_size_];
-}
-
-FQTermSSHBuffer::~FQTermSSHBuffer() {
- delete [] buffer_;
- offset_ = 0;
- buffer_size_ = 0;
- alloc_size_ = 0;
-}
-
-void FQTermSSHBuffer::ensure(int len) {
- if (len <= (alloc_size_ - (offset_ + buffer_size_))) {
- return ;
- } else {
- alloc_size_ = buffer_size_ + len;
- rebuffer();
- }
-}
-
-void FQTermSSHBuffer::rebuffer() {
- u_char *newBuffer;
- newBuffer = new u_char[alloc_size_];
- memset(newBuffer, 0, alloc_size_);
- memcpy(newBuffer, buffer_ + offset_, buffer_size_);
- delete [] buffer_;
- buffer_ = newBuffer;
- offset_ = 0;
-}
-
-void FQTermSSHBuffer::clear() {
- memset(buffer_, 0, alloc_size_);
- offset_ = 0;
- buffer_size_ = 0;
-}
-
-void FQTermSSHBuffer::consume(int len) {
- if (len > buffer_size_) {
- len = buffer_size_;
- }
-
- offset_ += len;
- buffer_size_ -= len;
-}
-
-void FQTermSSHBuffer::putRawData(const char *data, int len) {
- if (len < 0) {
- FQ_TRACE("sshbuffer", 0) << "Write data error.";
- }
-
- ensure(len);
- memcpy((buffer_ + offset_ + buffer_size_), data, len);
- buffer_size_ += len;
-}
-
-void FQTermSSHBuffer::getRawData(char *data, int len) {
- if (len <= buffer_size_ && len >= 0) {
- memcpy(data, buffer_ + offset_, len);
- consume(len);
- } else {
- FQ_TRACE("sshbuffer", 0) << "Read too many data: " << len << " bytes.";
- }
-}
-
-//==============================================================================
-// Store an BIGNUM in the buffer with a 2-byte msb first bit count, followed by
-// (bits+7)/8 bytes of binary data, msb first.
-//==============================================================================
-
-void FQTermSSHBuffer::putSSH1BN(BIGNUM *bignum) {
- int bits = BN_num_bits(bignum);
- int bin_size = (bits + 7) / 8;
- u_char *buf = new u_char[bin_size];
- int oi;
- u_char msg[2];
-
- // Get the value of in binary
- oi = BN_bn2bin(bignum, buf);
- if (oi != bin_size) {
- FQ_TRACE("sshbuffer", 0) << "BN_bn2bin() failed: oi = " << oi
- << " != bin_size." << bin_size;
- }
-
- // Store the number of bits in the buffer in two bytes, msb first
- htonu16(msg, bits);
- putRawData((char*)msg, 2);
- // Store the binary data.
- putRawData((char*)buf, oi);
-
- memset(buf, 0, bin_size);
- delete [] buf;
-}
-
-//==============================================================================
-// Retrieves a BIGNUM from the buffer.
-//==============================================================================
-
-void FQTermSSHBuffer::getSSH1BN(BIGNUM *bignum) {
- int bits, bytes;
- u_char buf[2];
- u_char *bin;
-
- // Get the number for bits.
- getRawData((char*)buf, 2);
- bits = ntohu16(buf);
- // Compute the number of binary bytes that follow.
- bytes = (bits + 7) / 8;
- if (bytes > 8 *1024) {
- FQ_TRACE("sshbuffer", 0) << "Can't handle BN of size " << bytes;
- return ;
- }
- if (len() < bytes) {
- FQ_TRACE("sshbuffer", 0) << "The input buffer is too small.";
- return ;
- }
- bin = data();
- BN_bin2bn(bin, bytes, bignum);
- consume(bytes);
-}
-
-u_short FQTermSSHBuffer::getWord() {
- u_char buf[2];
- u_short data;
-
- getRawData((char*)buf, 2);
- data = ntohu16(buf);
- return data;
-}
-
-void FQTermSSHBuffer::putWord(u_short data) {
- u_char buf[2];
-
- htonu16(buf, data);
- putRawData((char*)buf, 2);
-}
-
-u_int FQTermSSHBuffer::getInt() {
- u_char buf[4];
- u_int data;
- getRawData((char*)buf, 4);
- data = ntohu32(buf);
- return data;
-}
-
-void FQTermSSHBuffer::putInt(u_int data) {
- u_char buf[4];
-
- htonu32(buf, data);
- putRawData((char*)buf, 4);
-}
-
-//==============================================================================
-// Return a character from the buffer (0-255).
-//==============================================================================
-
-u_char FQTermSSHBuffer::getByte() {
- u_char ch;
-
- getRawData((char*) &ch, 1);
- return ch;
-}
-
-//==============================================================================
-// Stores a character in the buffer.
-//==============================================================================
-
-void FQTermSSHBuffer::putByte(int data) {
- u_char ch = data;
-
- putRawData((char*) &ch, 1);
-}
-
-//==============================================================================
-// Stores an arbitrary binary string in the buffer.
-//==============================================================================
-
-void FQTermSSHBuffer::putString(const char *str, int len) {
- if (str == NULL) {
- FQ_TRACE("sshbuffer", 0) << "Can't put a null pointer string.";
- return ;
- }
-
- if (len < 0) {
- len = strlen(str);
- }
-
- putInt(len);
- putRawData(str, len);
-}
-
-//==============================================================================
-// Return an arbitrary binary string from the buffer. The string cannot be
-// longer than 256k. The returned value points to memory allocated with new;
-// It is the responsibility of the calling function to free the data.
-//==============================================================================
-
-void *FQTermSSHBuffer::getString(int *length) {
- u_char *data;
- u_int len;
-
- // Get the length.
- len = getInt();
- if ((long)len > buffer_size_) {
- FQ_TRACE("sshbuffer", 0)
- << "String length " << len
- << " is greater than buffer size " << buffer_size_;
- return 0;
- }
- // Allocate space for the string. Add one byte for a null character.
- data = new u_char[len + 1];
- // Get the string.
- getRawData((char*)data, len);
- // Append a null character to make processing easier.
- data[len] = 0;
- if (length != NULL) {
- *length = len;
- }
- // return the length of the string.
- return data;
-}
-
-} // namespace FQTerm