X-Git-Url: https://code.wpia.club/?a=blobdiff_plain;f=src%2Fio%2Frecord.h;h=88576651ea574c25c2c7f2ebf83ad44e8ec6d5f1;hb=ee6b02b81d1fd34e2735518d3683f4db3118f247;hp=38794289f6d1df5021946c4aac9b8039c9845d3b;hpb=9e866a1a2facc8cb1565cd660c6b6d482f18ecb1;p=cassiopeia.git diff --git a/src/io/record.h b/src/io/record.h index 3879428..8857665 100644 --- a/src/io/record.h +++ b/src/io/record.h @@ -16,20 +16,26 @@ public: SET_SPKAC = 0x02, SET_SIGNATURE_TYPE = 0x10, SET_PROFILE = 0x11, + SET_WISH_FROM = 0x12, + SET_WISH_TO = 0x13, ADD_SAN = 0x18, ADD_AVA = 0x19, ADD_PROOF_LINE = 0x40, SIGN = 0x80, LOG_SAVED = 0x81, REVOKE = 0x100, + GET_FULL_CRL = 0x101, + ADD_SERIAL = 0x102, GET_TIMESTAMP = 0xC0, GET_STATUS_REPORT = 0xD0 }; enum class SignerResult : uint16_t { REVOKED = 0x100, + FULL_CRL = 0x101, SAVE_LOG = 0x80, - CERTIFICATE = 0x81 + CERTIFICATE = 0x81, + SIGNING_CA = 0x82, }; public: @@ -46,18 +52,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() { @@ -73,12 +87,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 ); @@ -90,6 +104,6 @@ public: }; -std::string parseCommand( RecordHeader& head, const std::string input, std::shared_ptr log ); +std::string parseCommand( RecordHeader& head, const std::string& input, std::shared_ptr log ); void sendCommand( RecordHeader& head, const std::string& data, std::shared_ptr bio, std::shared_ptr log );