X-Git-Url: https://code.wpia.club/?a=blobdiff_plain;f=src%2Fio%2FopensslBIO.cpp;h=02fd4728a10f2396d8f9d00ee162b1c09181f801;hb=e0713d1539887566e0ea7d85942c305ec727c9dd;hp=03122db2ce738ec04c1df0f5660fc99ac5c26ecd;hpb=f69f31caeda734d6d9c8ab00e693671ac7512bea;p=cassiopeia.git diff --git a/src/io/opensslBIO.cpp b/src/io/opensslBIO.cpp index 03122db..02fd472 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,31 @@ 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; + } +}