X-Git-Url: https://code.wpia.club/?a=blobdiff_plain;f=src%2Fio%2FopensslBIO.cpp;h=13699605bf2827b90b5b54c2696c95b7d4bb56ce;hb=6121035a7d8ea738bc89c2de8e6602fb1099b0e2;hp=03122db2ce738ec04c1df0f5660fc99ac5c26ecd;hpb=f69f31caeda734d6d9c8ab00e693671ac7512bea;p=cassiopeia.git diff --git a/src/io/opensslBIO.cpp b/src/io/opensslBIO.cpp index 03122db..1369960 100644 --- a/src/io/opensslBIO.cpp +++ b/src/io/opensslBIO.cpp @@ -1,6 +1,7 @@ #include "opensslBIO.h" +#include -OpensslBIOWrapper::OpensslBIOWrapper( std::shared_ptr b ) : b( b ) { +OpensslBIOWrapper::OpensslBIOWrapper( std::shared_ptr _b ) : b( _b ), buffer( 2 * 0xFFFF + 20, 0 ), pos( 0 ) { } OpensslBIOWrapper::~OpensslBIOWrapper() { @@ -29,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; + } +}