# ne7ssh Class Reference

`#include <ne7ssh.h>`

Collaboration diagram for ne7ssh:

[legend]

List of all members.

## Public Member Functions
| ne7ssh ()
| ~ne7ssh ()
int | connectWithPassword (const char *host, const int port, const char *username, const char *password, bool shell=true, const int timeout=0)
int | connectWithKey (const char *host, const int port, const char *username, const char *privKeyFileName, bool shell=true, const int timeout=0)
connStruct * | getConnetions ()
bool | send (const char *data, int channel)
bool | sendCmd (const char *cmd, int channel, int timeout)
bool | close (int channel)
void | setCount (uint32 count)
const char * | read (int channel, bool do_lock=true)
void * | readBinary (int channel)
int | getReceivedSize (int channel, bool do_lock=true)
bool | waitFor (int channel, const char *str, uint32 timeout=0)
void | setOptions (const char *prefCipher, const char *prefHmac)
bool | generateKeyPair (const char *type, const char *fqdn, const char *privKeyFileName, const char *pubKeyFileName, uint16 keySize=0)
bool | initSftp (Ne7SftpSubsystem &_sftp, int channel)
## Static Public Member Functions
static Ne7sshError * | errors ()
static bool | isSelectActive ()
static void | selectDead ()
## Static Public Attributes
static const char * | SSH_VERSION = "SSH-2.0-NetSieben_1.3.1"
static const char * | KEX_ALGORITHMS = "diffie-hellman-group1-sha1,diffie-hellman-group14-sha1"
static const char * | HOSTKEY_ALGORITHMS = "ssh-dss,ssh-rsa"
static const char * | MAC_ALGORITHMS = "hmac-md5,hmac-sha1,none"
static const char * | CIPHER_ALGORITHMS = "aes256-cbc,aes192-cbc,twofish-cbc,twofish256-cbc,blowfish-cbc,3des-cbc,aes128-cbc,cast128-cbc"
static const char * | COMPRESSION_ALGORITHMS = "none"
static char * | PREFERED_CIPHER = 0
static char * | PREFERED_MAC = 0
## Private Member Functions
uint32 | getChannelNo ()
## Static Private Member Functions
static void * | selectThread (void *)
static bool | lock ()
static bool | unlock ()
## Private Attributes
Botan::LibraryInitializer * | init
ne7ssh_connection ** | connections
uint32 | conCount
connStruct | allConns
ne7ssh_thread_t | select_thread
bool | connected
## Static Private Attributes
static Ne7ssh_Mutex | mut
static bool | running = false
static bool | selectActive = true
static Ne7sshError * | errs = NULL

## Detailed Description

Author:
  Andrew Useckas

## Constructor & Destructor Documentation

ne7ssh::ne7ssh | ( |  | ) |

Default constructor. Used to allocate required memory, as well as initializing cryptographic routines.

References connStruct::conns, connStruct::count, Ne7sshError::push(), and selectThread().

ne7ssh::~ne7ssh | ( |  | ) |

Destructor.

References close(), lock(), and unlock().

## Member Function Documentation

bool ne7ssh::close | ( | int | channel | ) |

Closes specified channel.

Parameters:

  | channel | Channel to close.

Returns:
  Returns true if closing was successful, otherwise false is returned.

References Ne7sshError::deleteChannel(), getChannelNo(), lock(), Ne7sshError::push(), ne7ssh_connection::sendClose(), and unlock().

Referenced by ~ne7ssh().

int ne7ssh::connectWithKey | ( | const char * | host,
|  | const int | port,
|  | const char * | username,
|  | const char * | privKeyFileName,
|  | bool | shell = `true`,
|  | const int | timeout = `0` |
| ) |  |  |

Connect to remote host using SSH2 protocol, with publickey authentication.

Reads private key from a file specified, and uses it to authenticate to remote host. Remote side must have public key from the key pair for authentication to succeed.

Parameters:

  | host | Hostname or IP to connect to.
  | port | Port to connect to.
  | username | Username to use in authentication.
  | privKeyFileName | Full path to file containing private key used in authentication.
  | shell | Set this to true if you wish to launch the shell on the remote end. By default set to true.
  | timeout | Timeout for the connection procedure, in seconds.

Returns:
  Returns newly assigned channel ID, or -1 if connection failed.

References ne7ssh_connection::connectWithKey(), connStruct::conns, connStruct::count, errors(), getChannelNo(), lock(), Ne7sshError::push(), ne7ssh_connection::setChannelNo(), and unlock().

int ne7ssh::connectWithPassword | ( | const char * | host,
|  | const int | port,
|  | const char * | username,
|  | const char * | password,
|  | bool | shell = `true`,
|  | const int | timeout = `0` |
| ) |  |  |

Connect to remote host using SSH2 protocol, with password authentication.

Parameters:

  | host | Hostname or IP to connect to.
  | port | Port to connect to.
  | username | Username to use in authentication.
  | password | Password to use in authentication.
  | shell | Set this to true if you wish to launch the shell on the remote end. By default set to true.
  | timeout | Timeout for the connection procedure, in seconds.

Returns:
  Returns newly assigned channel ID, or -1 if connection failed.

References ne7ssh_connection::connectWithPassword(), connStruct::conns, connStruct::count, errors(), getChannelNo(), lock(), Ne7sshError::push(), ne7ssh_connection::setChannelNo(), and unlock().

SSH_EXPORT Ne7sshError * ne7ssh::errors | ( |  | ) | `[static]`

This method returns a pointer to the current Error collection.

Returns:
  the Error collection

Referenced by ne7ssh_string::addFile(), ne7ssh_connection::authWithKey(), ne7ssh_connection::authWithPassword(), Ne7sshSftp::cd(), ne7ssh_connection::checkRemoteVersion(), Ne7sshSftp::chmod(), Ne7sshSftp::chown(), Ne7sshSftp::closeFile(), ne7ssh_crypt::compute_key(), ne7ssh_crypt::computeH(), connectWithKey(), connectWithPassword(), Ne7SftpSubsystem::errorNotInited(), ne7ssh_transport::establish(), ne7ssh_channel::execCmd(), ne7ssh_keys::generateDSAKeys(), ne7ssh_keys::generateDSASignature(), ne7ssh_keys::generateRSAKeys(), ne7ssh_keys::generateRSASignature(), Ne7sshSftp::get(), ne7ssh_crypt::getCryptAlgo(), ne7ssh_keys::getDSAKeys(), Ne7sshSftp::getFileAttrs(), Ne7sshSftp::getFileHandle(), Ne7sshSftp::getFileSize(), Ne7sshSftp::getFileStats(), Ne7sshSftp::getFStat(), ne7ssh_crypt::getHashAlgo(), ne7ssh_crypt::getHmacAlgo(), ne7ssh_crypt::getKexPublic(), ne7ssh_keys::getKeyPairFromFile(), ne7ssh_crypt::getMacKeyLen(), ne7ssh_keys::getRSAKeys(), Ne7sshSftp::handleData(), ne7ssh_channel::handleData(), ne7ssh_channel::handleDisconnect(), ne7ssh_channel::handleEof(), ne7ssh_channel::handleExtendedData(), ne7ssh_kex::handleInit(), ne7ssh_channel::handleReceived(), ne7ssh_channel::handleRequest(), Ne7sshSftp::handleSftpData(), Ne7sshSftp::handleStatus(), Ne7sshSftp::handleVersion(), Ne7sshSftp::isType(), Ne7sshError::lock(), Ne7sshSftp::ls(), Ne7sshSftp::mkdir(), Ne7sshSftp::mv(), ne7ssh_crypt::negotiatedCmprsC2s(), ne7ssh_crypt::negotiatedCmprsS2c(), ne7ssh_crypt::negotiatedCryptoC2s(), ne7ssh_crypt::negotiatedCryptoS2c(), ne7ssh_crypt::negotiatedHostkey(), ne7ssh_crypt::negotiatedKex(), ne7ssh_crypt::negotiatedMacC2s(), ne7ssh_crypt::negotiatedMacS2c(), ne7ssh_transport::NoBlock(), ne7ssh_channel::open(), Ne7sshSftp::openDir(), Ne7sshSftp::openFile(), Ne7sshSftp::put(), Ne7sshSftp::readFile(), ne7ssh_transport::receive(), Ne7sshSftp::receiveWindowAdjust(), ne7ssh_connection::requestService(), Ne7sshSftp::rm(), Ne7sshSftp::rmdir(), ne7ssh_transport::send(), ne7ssh_kex::sendInit(), ne7ssh_kex::sendKexDHInit(), ne7ssh_kex::sendKexNewKeys(), ne7ssh_transport::sendPacket(), ne7ssh_connection::startSftp(), Ne7sshError::unlock(), ne7ssh_crypt::verifySig(), ne7ssh_transport::waitForPacket(), and Ne7sshSftp::writeFile().

bool ne7ssh::generateKeyPair | ( | const char * | type,
|  | const char * | fqdn,
|  | const char * | privKeyFileName,
|  | const char * | pubKeyFileName,
|  | uint16 | keySize = `0` |
| ) |  |  |

Generate key pair.

Parameters:

  | type | String specifying key type. Currently "dsa" and "rsa" are supported.
  | fqdn | User id. Usually an Email. For example "test@netsieben.com"
  | privKeyFileName | Full path to a file where generated private key should be written.
  | pubKeyFileName | Full path to a file where generated public key should be written.
  | keySize | Desired key size in bits. If not specified will default to 2048.

Returns:
  Return true if keys generated and written to the files. Otherwise false is returned.

References ne7ssh_keys::generateDSAKeys(), ne7ssh_keys::generateRSAKeys(), and Ne7sshError::push().

uint32 ne7ssh::getChannelNo | ( |  | ) | `[private]`

Returns the number of active channel.

Returns:
  Active channel.

References Ne7sshError::push().

Referenced by close(), connectWithKey(), connectWithPassword(), getReceivedSize(), initSftp(), read(), readBinary(), send(), and sendCmd().

connStruct* ne7ssh::getConnetions | ( |  | ) | `[inline]`

Retrieves a pointer to all current connections.

For internal use only.

Returns:
  Returns pointer to pointers to ne7ssh_connection class, or 0 if no connection exist.

Referenced by selectThread().

int ne7ssh::getReceivedSize | ( | int | channel,
|  | bool | do_lock = `true` |
| ) |  |  |

Returns the size of all data read. Used to read buffer passed 0x0.

Parameters:

  | channel | Channel number which buffer size to check.

Returns:
  Return size of the buffer, or 0x0 if receive buffer empty.

References getChannelNo(), ne7ssh_connection::getReceived(), lock(), and unlock().

Referenced by waitFor().

bool ne7ssh::initSftp | ( | Ne7SftpSubsystem & | _sftp,
|  | int | channel |
| ) |  |  |

This method is used to initialize a new SFTP subsystem.

Parameters:

  | _sftp | Reference to SFTP subsystem to be initialized.
  | channel | Channel ID returned by one of the connect methods.

Returns:
  True if the new subsystem successfully initialized. False on any error.

References getChannelNo(), lock(), Ne7sshError::push(), ne7ssh_connection::startSftp(), and unlock().

bool ne7ssh::lock | ( |  | ) | `[static, private]`

Lock the mutex.

Returns:
  True if lock aquired. Oterwise false.

References Ne7sshError::push().

Referenced by close(), connectWithKey(), connectWithPassword(), getReceivedSize(), initSftp(), read(), readBinary(), selectThread(), send(), sendCmd(), waitFor(), and ~ne7ssh().

const char * ne7ssh::read | ( | int | channel,
|  | bool | do_lock = `true` |
| ) |  |  |

Reads all data from receiving buffer on specified channel.

Parameters:

  | channel | Channel to read data on.

Returns:
  Returns string read from receiver buffer or 0 if buffer is empty.

References getChannelNo(), ne7ssh_connection::getReceived(), lock(), Ne7sshError::push(), and unlock().

Referenced by waitFor().

void * ne7ssh::readBinary | ( | int | channel | ) |

Reads all data from receiving buffer on specified channel. Returns pointer to void. Together with getReceivedSize and sendCmd can be used to read remote files.

Parameters:

  | channel | Channel to read data on.

Returns:
  Returns pointer to the start of binary data or 0 if nothing received.

References getChannelNo(), ne7ssh_connection::getReceived(), lock(), Ne7sshError::push(), and unlock().

void * ne7ssh::selectThread | ( | void * | initData | ) | `[static, private]`

Send / Receive thread.

For Internal use only

Returns:
  Usually 0 when thread terminates

References connStruct::conns, getConnetions(), ne7ssh_connection::handleData(), lock(), Ne7sshError::push(), ne7ssh_connection::sendData(), setCount(), and unlock().

Referenced by ne7ssh().

bool ne7ssh::send | ( | const char * | data,
|  | int | channel |
| ) |  |  |

Retreives count of current connections

For internal use only.

Returns:
  Returns current count of connections. Sends a command string on specified channel, provided the specified channel has been previously opened through connectWithPassword() function.

Parameters:

  | data | Pointer to the command string to send to a channel.
  | channel | Channel to send data on.

Returns:
  Returns true if the send was successful, otherwise false returned.

References getChannelNo(), lock(), Ne7sshError::push(), ne7ssh_connection::sendData(), and unlock().

bool ne7ssh::sendCmd | ( | const char * | cmd,
|  | int | channel,
|  | int | timeout |
| ) |  |  |

Can be used to send a single command and disconnect, similiar behavior to openssh when one appends a command to the end of ssh command.

Parameters:

  | cmd | Remote command to execute. Can be used to read files on unix with 'cat [filename]'.
  | channel | Channel to send the command.
  | timeout | How long to wait before giving up.

Returns:
  Returns true if the send was successful, otherwise false returned.

References getChannelNo(), lock(), Ne7sshError::push(), ne7ssh_connection::sendCmd(), and unlock().

void ne7ssh::setCount | ( | uint32 | count | ) | `[inline]`

Sets connection count.

For internal use only.

Parameters:

  | count | Integer to set connection count.

Referenced by selectThread().

void ne7ssh::setOptions | ( | const char * | prefCipher,
|  | const char * | prefHmac |
| ) |  |  |

Sets prefered cipher and hmac algorithms.

This function as to be executed before connection functions, just after initialization of ne7ssh class.

Parameters:

  | prefCipher | prefered cipher algorithm string representation. Possible cipher algorithms are aes256-cbc, twofish-cbc, twofish256-cbc, blowfish-cbc, 3des-cbc, aes128-cbc, cast128-cbc.
  | prefHmac | preferede hmac algorithm string representation. Possible hmac algorithms are hmac-md5, hmac-sha1, none.

bool ne7ssh::unlock | ( |  | ) | `[static, private]`

Unlock the mutext.

Returns:
  True if the mutext successfully unlocked. Otherwise false.

References Ne7sshError::push().

Referenced by close(), connectWithKey(), connectWithPassword(), getReceivedSize(), initSftp(), read(), readBinary(), selectThread(), send(), sendCmd(), waitFor(), and ~ne7ssh().

bool ne7ssh::waitFor | ( | int | channel,
|  | const char * | str,
|  | uint32 | timeout = `0` |
| ) |  |  |

Wait until receiving buffer contains a string passed in str, or until the function timeouts as specified in timeout.

Parameters:

  | channel | Channel to wait on.
  | str | String to wait for.
  | timeout | Timeout in seconds.

Returns:
  Returns true if string specified in str variable has been received, otherwise false returned.

References getReceivedSize(), lock(), Ne7sshError::push(), read(), and unlock().

The documentation for this class was generated from the following files:

- ne7ssh.h
- ne7ssh.cpp