X-Git-Url: https://code.wpia.club/?a=blobdiff_plain;f=src%2Fio%2Frecord.h;h=d56708aa9a768f84d453200f6c390e670c25c078;hb=d7f1459ca84043d24143395279de8f3cff86022b;hp=ba5a8d8be7d6f789557d91fe8f0bd813af1b592b;hpb=cb4c74b47e6643f15e503067c197f86cbc5e6263;p=cassiopeia.git diff --git a/src/io/record.h b/src/io/record.h index ba5a8d8..d56708a 100644 --- a/src/io/record.h +++ b/src/io/record.h @@ -6,6 +6,7 @@ #include #include "bios.h" +#include "io/opensslBIO.h" #define RECORD_HEADER_SIZE 17 @@ -52,18 +53,26 @@ public: } template - void append( std::string& str, T val ) { + static void append( std::string& str, T val ) { str.append( ( char* ) &val, sizeof( T ) ); } template - 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() { @@ -79,12 +88,12 @@ public: 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 ); @@ -96,6 +105,7 @@ public: }; -std::string parseCommand( RecordHeader& head, const std::string input, std::shared_ptr log ); +std::string parseCommand( RecordHeader& head, const std::string& input ); +std::string parseCommandChunked( RecordHeader& head, std::shared_ptr conn); -void sendCommand( RecordHeader& head, const std::string& data, std::shared_ptr bio, std::shared_ptr log ); +void sendCommand( RecordHeader& head, const std::string& data, std::shared_ptr bio );