}
template <class T>
- void append( std::string& str, T val ) {
+ static void append( std::string& str, T val ) {
str.append( ( char* ) &val, sizeof( T ) );
}
template <class T>
- void read( std::string::iterator& it, T& val ) {
- char* data = ( char* ) &val;
+ static void read( std::string::const_iterator& it, T& val ) {
+ union typeConversion {
+ char buf[sizeof( T )];
+ T value;
+
+ typeConversion( const T& v ) : value( v ) {}
+ };
+
+ typeConversion data( 0 );
for( size_t i = 0; i < sizeof( T ); i++ ) {
- data[i] = *it;
- it++;
+ data.buf[i] = *it++;
}
+
+ val = data.value;
}
std::string packToString() {
return res;
}
- void unpackFromString( std::string str ) {
+ void unpackFromString( const std::string& str ) {
if( str.size() != RECORD_HEADER_SIZE ) {
throw "Invalid string length";
}
- auto it = str.begin();
+ auto it = str.cbegin();
read( it, command );
read( it, flags );
read( it, sessid );
};
-std::string parseCommand( RecordHeader& head, const std::string input, std::shared_ptr<std::ostream> log );
+std::string parseCommand( RecordHeader& head, const std::string& input, std::shared_ptr<std::ostream> log );
void sendCommand( RecordHeader& head, const std::string& data, std::shared_ptr<OpensslBIO> bio, std::shared_ptr<std::ostream> log );