]> WPIA git - cassiopeia.git/blobdiff - src/io/opensslBIO.cpp
fmt: whitespace, padding and indentation formatting
[cassiopeia.git] / src / io / opensslBIO.cpp
index 35628229ffdcbf00f162d5b134fb8196ecc4f582..13699605bf2827b90b5b54c2696c95b7d4bb56ce 100644 (file)
@@ -1,7 +1,7 @@
 #include "opensslBIO.h"
+#include <log/logger.hpp>
 
-OpensslBIOWrapper::OpensslBIOWrapper( std::shared_ptr<BIO> b ) {
-    this->b = b;
+OpensslBIOWrapper::OpensslBIOWrapper( std::shared_ptr<BIO> _b ) : b( _b ), buffer( 2 * 0xFFFF + 20, 0 ), pos( 0 ) {
 }
 
 OpensslBIOWrapper::~OpensslBIOWrapper() {
@@ -30,3 +30,37 @@ int OpensslBIOWrapper::gets( char* str, int size ) {
 const char* OpensslBIOWrapper::getName() {
     return "OpenSSLWrapper";
 }
+std::string OpensslBIOWrapper::readLine() {
+    int target = 0;
+
+    while( 1 ) {
+        logger::debug( "doing data" );
+
+        while( target < pos ) {
+            if( buffer[target] == '\n' ) {
+                target++;
+                std::string res( buffer.data(), 0, target );
+                std::copy( buffer.data() + target, buffer.data() + pos, buffer.data() );
+                pos -= target;
+                logger::debug( "emit" );
+                return res;
+            }
+
+            target++;
+        }
+
+        std::stringstream ss;
+        ss << "target: " << target << ", pos:" << pos;
+        logger::debug( ss.str() );
+        int dlen = read( buffer.data() + pos, buffer.size() - pos );
+
+        if( dlen <= 0 ) {
+            throw eof_exception();
+        }
+
+        std::stringstream ss2;
+        ss2 << "done: " << dlen;
+        logger::debug( ss2.str() );
+        pos += dlen;
+    }
+}