Stream implementation based on an encrypted SSH tunnel. More...
#include <mitsuba/core/sshstream.h>
Public Member Functions | |
std::string | toString () const |
Return a string representation. More... | |
virtual const Class * | getClass () const |
Retrieve this object's class. More... | |
Constructors | |
SSHStream (const std::string &userName, const std::string &hostName, const std::vector< std::string > &cmdLine, int port=22, int timeout=10) | |
Create a new SSH stream. More... | |
SSH stream-specific features | |
const std::string & | getHostName () const |
Return the destination machine's host name. More... | |
const std::string & | getUserName () const |
Return the user name used for authentication. More... | |
size_t | getReceivedBytes () const |
Return the number of received bytes. More... | |
size_t | getSentBytes () const |
Return the number of sent bytes. More... | |
Implementation of the Stream interface | |
void | read (void *ptr, size_t size) |
Read a specified amount of data from the stream. More... | |
void | write (const void *ptr, size_t size) |
Write a specified amount of data into the stream. More... | |
void | seek (size_t pos) |
Seek to a position inside the stream. More... | |
size_t | getPos () const |
Get the current position inside the stream. More... | |
size_t | getSize () const |
Return the size of the stream. More... | |
void | truncate (size_t size) |
Truncate the stream to a given size. More... | |
void | flush () |
Flush the stream's buffers. More... | |
bool | canWrite () const |
Can we write to the stream? More... | |
bool | canRead () const |
Can we read from the stream? More... | |
Public Member Functions inherited from mitsuba::Stream | |
Stream () | |
Create a new stream. More... | |
void | skip (size_t amount) |
Skip the given number of bytes. More... | |
void | writeString (const std::string &value) |
Write a null-terminated string to the stream. More... | |
void | writeLine (const std::string &value) |
Write a string followed by a newline. More... | |
void | writeShort (short value) |
Write a signed short (16 bit) to the stream. More... | |
void | writeShortArray (const short *values, size_t size) |
Write an array of signed shorts (16 bit) to the stream. More... | |
template<size_t N> | |
void | writeShortArray (const short(&values)[N]) |
Write an array of known size of signed shorts (16 bit) to the stream. More... | |
void | writeUShort (unsigned short value) |
Write an unsigned short (16 bit) to the stream. More... | |
void | writeUShortArray (const unsigned short *values, size_t size) |
Write an array of unsigned shorts (16 bit) to the stream. More... | |
template<size_t N> | |
void | writeUShortArray (const unsigned short(&values)[N]) |
Write an array of known size of unsigned shorts (16 bit) to the stream. More... | |
void | writeInt (int value) |
Write a signed int (32 bit) to the stream. More... | |
void | writeIntArray (const int *values, size_t size) |
Write an array of signed ints (32 bit) to the stream. More... | |
template<size_t N> | |
void | writeIntArray (const int(&values)[N]) |
Write an array of known size of signed ints (32 bit) to the stream. More... | |
void | writeUInt (unsigned int value) |
Write an unsigned int (32 bit) to the stream. More... | |
void | writeUIntArray (const unsigned int *values, size_t size) |
Write an array of unsigned ints (32 bit) to the stream. More... | |
template<size_t N> | |
void | writeUIntArray (const unsigned int(&values)[N]) |
Write an array of known size of unsigned ints (32 bit) to the stream. More... | |
void | writeLong (int64_t value) |
Write a signed int (64 bit) to the stream. More... | |
void | writeLongArray (const int64_t *values, size_t size) |
Write an array of signed ints (64 bit) to the stream. More... | |
template<size_t N> | |
void | writeLongArray (const int64_t(&values)[N]) |
Write an array of known size of signed ints (64 bit) to the stream. More... | |
void | writeULong (uint64_t value) |
Write an unsigned int (64 bit) to the stream. More... | |
void | writeSize (size_t value) |
Write a size value to the stream. More... | |
void | writeULongArray (const uint64_t *values, size_t size) |
Write an array of unsigned ints (64 bit) to the stream. More... | |
template<size_t N> | |
void | writeULongArray (const uint64_t(&values)[N]) |
Write an array of known size of unsigned ints (64 bit) to the stream. More... | |
void | writeChar (char value) |
Write a signed character (8 bit) to the stream. More... | |
void | writeUChar (unsigned char value) |
Write an unsigned character (8 bit) to the stream. More... | |
void | writeBool (bool value) |
Write a boolean (8 bit) to the stream. More... | |
void | writeHalf (half value) |
Write a half-precision floating point number (16 bit) to the stream. More... | |
void | writeHalfArray (const half *data, size_t size) |
Write a half-precision floating point array (16 bit) to the stream. More... | |
template<size_t N> | |
void | writeHalfArray (const half(&values)[N]) |
Write a known size half-precision floating point array (16 bit) to the stream. More... | |
void | writeSingle (float value) |
Write a single-precision floating point number (32 bit) to the stream. More... | |
void | writeSingleArray (const float *data, size_t size) |
Write a single-precision floating point array (32 bit) to the stream. More... | |
template<size_t N> | |
void | writeSingleArray (const float(&values)[N]) |
Write a known size single-precision floating point array (32 bit) to the stream. More... | |
void | writeDouble (double value) |
Write a double-precision floating point number (64 bit) to the stream. More... | |
void | writeDoubleArray (const double *data, size_t size) |
Write a double-precision floating point array (64 bit) to the stream. More... | |
template<size_t N> | |
void | writeDoubleArray (const double(&values)[N]) |
Write a known size double-precision floating point array (64 bit) to the stream. More... | |
void | writeFloat (Float value) |
Write a floating point number (configured precision) to the stream. More... | |
void | writeFloatArray (const Float *data, size_t size) |
Write an array of floating point values (configured precision) to the stream. More... | |
template<size_t N> | |
void | writeFloatArray (const Float(&values)[N]) |
Write a known size array of floating point values (configured precision) to the stream. More... | |
bool | isEOF () const |
Return whether we are at the end of the stream. More... | |
std::string | readLine () |
Read a line from the stream and return it as a string. More... | |
std::string | readString () |
Read a null-terminated string from the stream. More... | |
short | readShort () |
Read a signed short (16 bit) from the stream. More... | |
void | readShortArray (short *dest, size_t size) |
Read an array of signed shorts (16 bit) from the stream. More... | |
template<size_t N> | |
void | readShortArray (short(&values)[N]) |
Read an array of known size of signed shorts (16 bit) from the stream. More... | |
unsigned short | readUShort () |
Read an unsigned short (16 bit) from the stream. More... | |
void | readUShortArray (unsigned short *dest, size_t size) |
Read an array of unsigned shorts (16 bit) from the stream. More... | |
template<size_t N> | |
void | readUShortArray (short(&values)[N]) |
Read an array of known size of unsigned shorts (16 bit) from the stream. More... | |
int | readInt () |
Read a signed int (32 bit) from the stream. More... | |
void | readIntArray (int *dst, size_t size) |
Read an array of signed ints (32 bit) from the stream. More... | |
template<size_t N> | |
void | readIntArray (int(&values)[N]) |
Read an array of known size of signed ints (32 bit) from the stream. More... | |
unsigned int | readUInt () |
Read an unsigned int (32 bit) from the stream. More... | |
void | readUIntArray (unsigned int *dest, size_t size) |
Read an array of unsigned ints (32 bit) from the stream. More... | |
template<size_t N> | |
void | readUIntArray (int(&values)[N]) |
Read an array of known size of unsigned ints (32 bit) from the stream. More... | |
int64_t | readLong () |
Read a signed int (64 bit) from the stream. More... | |
void | readLongArray (int64_t *dst, size_t size) |
Read an array of signed ints (64 bit) from the stream. More... | |
template<size_t N> | |
void | readLongArray (int64_t(&values)[N]) |
Read an array of known size of signed ints (64 bit) from the stream. More... | |
uint64_t | readULong () |
Read an unsigned int (64 bit) from the stream. More... | |
size_t | readSize () |
Read a size value from the stream. More... | |
void | readULongArray (uint64_t *dst, size_t size) |
Read an array of unsigned ints (64 bit) from the stream. More... | |
template<size_t N> | |
void | readULongArray (uint64_t(&values)[N]) |
Read an array of known size of unsigned ints (64 bit) from the stream. More... | |
char | readChar () |
Read a signed character (8 bit) from the stream. More... | |
unsigned char | readUChar () |
Read an unsigned character (8 bit) from the stream. More... | |
bool | readBool () |
Read a boolean (8 bit) from the stream. More... | |
half | readHalf () |
Read a half-precision floating point number (16 bit) from the stream. More... | |
void | readHalfArray (half *data, size_t size) |
Read a half-precision floating point array (16 bit) from the stream. More... | |
template<size_t N> | |
void | readHalfArray (half(&values)[N]) |
Read a known-size half-precision floating point array (16 bit) from the stream. More... | |
float | readSingle () |
Read a single-precision floating point number (32 bit) from the stream. More... | |
void | readSingleArray (float *data, size_t size) |
Read a single-precision floating point array (32 bit) from the stream. More... | |
template<size_t N> | |
void | readSingleArray (float(&values)[N]) |
Read a known-size single-precision floating point array (32 bit) from the stream. More... | |
double | readDouble () |
Read a double-precision floating point number (64 bit) from the stream. More... | |
void | readDoubleArray (double *data, size_t size) |
Read a double-precision floating point array (64 bit) from the stream. More... | |
template<size_t N> | |
void | readDoubleArray (double(&values)[N]) |
Read a known-size double-precision floating point array (64 bit) from the stream. More... | |
Float | readFloat () |
Write a floating point number (configured precision) to the stream. More... | |
void | readFloatArray (Float *data, size_t size) |
Write an array of floating point values (configured precision) to the stream. More... | |
template<size_t N> | |
void | readFloatArray (Float(&values)[N]) |
Read a known-size array of floating point values (configured precision) to the stream. More... | |
void | copyTo (Stream *stream, int64_t numBytes=-1) |
Copy content from this stream into another stream. More... | |
template<typename T > | |
T | readElement () |
Read an element from the stream (uses partial template specialization to select a method appropriate to the data type) More... | |
template<typename T > | |
void | writeElement (T value) |
Write an element to the stream (uses partial template specialization to select a method appropriate to the data type) More... | |
template<typename T > | |
void | readArray (T *array, size_t count) |
Read an array from the stream (uses partial template specialization to select a method appropriate to the data type) More... | |
template<typename T , size_t N> | |
void | readArray (T(&arr)[N]) |
Read a known-size array from the stream (uses partial template specialization to select a method appropriate to the data type) More... | |
template<typename T > | |
void | writeArray (const T *array, size_t count) |
Write an array to the stream (uses partial template specialization to select a method appropriate to the data type) More... | |
template<typename T , size_t N> | |
void | writeArray (const T(&arr)[N]) |
Write a known-size array to the stream (uses partial template specialization to select a method appropriate to the data type) More... | |
void | setByteOrder (EByteOrder byteOrder) |
Set the stream byte order. More... | |
EByteOrder | getByteOrder () const |
Return the byte order of this stream. More... | |
Public Member Functions inherited from Object | |
Object () | |
Construct a new object. More... | |
int | getRefCount () const |
Return the current reference count. More... | |
void | incRef () const |
Increase the reference count of the object by one. More... | |
void | decRef (bool autoDeallocate=true) const |
Decrease the reference count of the object and possibly deallocate it. More... | |
Static Public Attributes | |
static Class * | m_theClass |
Static Public Attributes inherited from mitsuba::Stream | |
static Class * | m_theClass |
Static Public Attributes inherited from Object | |
static Class * | m_theClass |
Pointer to the object's class descriptor. More... | |
Protected Member Functions | |
virtual | ~SSHStream () |
Virtual destructor. More... | |
Protected Member Functions inherited from mitsuba::Stream | |
virtual | ~Stream () |
Virtual destructor. More... | |
Protected Member Functions inherited from Object | |
virtual | ~Object () |
Virtual private deconstructor. (Will only be called by ref) More... | |
Additional Inherited Members | |
Public Types inherited from mitsuba::Stream | |
enum | EByteOrder { EBigEndian = 0, ELittleEndian = 1, ENetworkByteOrder = EBigEndian } |
Defines the byte order to use in this Stream. More... | |
Static Public Member Functions inherited from mitsuba::Stream | |
static EByteOrder | getHostByteOrder () |
Return the byte order of the underlying machine. More... | |
Static Public Member Functions inherited from Object | |
static void | staticInitialization () |
Initializes the built-in reference count debugger (if enabled) More... | |
static void | staticShutdown () |
Free the memory taken by staticInitialization() More... | |
Stream implementation based on an encrypted SSH tunnel.
This class remotely starts a program and exposes its stdin/stdout streams through an instance of Stream. To make all of this work, passwordless authentication must be enabled (for example by using public key authentication in addition to a running ssh-agent, which stores the decrypted private key).
On Windows, things are implemented a bit differently: Instead of OpenSSH, plink.exe (from PUTTY) is used and must be available in $PATH. For passwordless authentication, convert your private key to PuTTY's format (with the help of puttygen.exe). Afterwards, pageant.exe is required to load and authenticate the key.
Note: SSH streams are set to use network byte order by default.
mitsuba::SSHStream::SSHStream | ( | const std::string & | userName, |
const std::string & | hostName, | ||
const std::vector< std::string > & | cmdLine, | ||
int | port = 22 , |
||
int | timeout = 10 |
||
) |
Create a new SSH stream.
The timeout parameter specifies specifies the maximum amount of time that can be spent before failing to create the initial connection. This feature is unsupported (and ignored) on Windows.
userName | Username to use for the authentication |
hostName | Destination host name |
cmdLine | Command (with arguments) to be executed on the remote side |
port | Destination port |
timeout | Maximum time to use for the connection attempt (in seconds) |
|
protectedvirtual |
Virtual destructor.
The destructor frees all resources and closes the socket if it is still open
|
virtual |
Can we read from the stream?
Implements mitsuba::Stream.
|
virtual |
Can we write to the stream?
Implements mitsuba::Stream.
|
virtual |
Flush the stream's buffers.
Implements mitsuba::Stream.
|
virtual |
Retrieve this object's class.
Reimplemented from mitsuba::Stream.
const std::string& mitsuba::SSHStream::getHostName | ( | ) | const |
Return the destination machine's host name.
|
virtual |
Get the current position inside the stream.
Implements mitsuba::Stream.
size_t mitsuba::SSHStream::getReceivedBytes | ( | ) | const |
Return the number of received bytes.
size_t mitsuba::SSHStream::getSentBytes | ( | ) | const |
Return the number of sent bytes.
|
virtual |
Return the size of the stream.
Implements mitsuba::Stream.
const std::string& mitsuba::SSHStream::getUserName | ( | ) | const |
Return the user name used for authentication.
|
virtual |
Read a specified amount of data from the stream.
Throws an exception when the stream ended prematurely
Implements mitsuba::Stream.
|
virtual |
Seek to a position inside the stream.
Implements mitsuba::Stream.
|
virtual |
Return a string representation.
Reimplemented from mitsuba::Stream.
|
virtual |
Truncate the stream to a given size.
Implements mitsuba::Stream.
|
virtual |
Write a specified amount of data into the stream.
Throws an exception when not all data could be written
Implements mitsuba::Stream.
|
static |