]> WPIA git - cassiopeia.git/blobdiff - src/io/record.h
upd: use central position to do line buffering
[cassiopeia.git] / src / io / record.h
index 38794289f6d1df5021946c4aac9b8039c9845d3b..28a9b1e710da79be26bbff034207328bf7fd86aa 100644 (file)
@@ -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 <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() {
@@ -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<std::ostream> log );
+std::string parseCommand( RecordHeader& head, const std::string& input );
 
-void sendCommand( RecordHeader& head, const std::string& data, std::shared_ptr<OpensslBIO> bio, std::shared_ptr<std::ostream> log );
+void sendCommand( RecordHeader& head, const std::string& data, std::shared_ptr<OpensslBIO> bio );