X-Git-Url: https://code.wpia.club/?a=blobdiff_plain;f=src%2Fio%2FopensslBIO.cpp;h=056c2911f657085a844fe557ddc211029f525187;hb=f8d1606423c351f2003ce18258ef047e0d2af326;hp=03122db2ce738ec04c1df0f5660fc99ac5c26ecd;hpb=3ea4de25c712971a35dbad27d8834d75933daa08;p=cassiopeia.git diff --git a/src/io/opensslBIO.cpp b/src/io/opensslBIO.cpp index 03122db..056c291 100644 --- a/src/io/opensslBIO.cpp +++ b/src/io/opensslBIO.cpp @@ -1,6 +1,6 @@ #include "opensslBIO.h" -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 +29,33 @@ int OpensslBIOWrapper::gets( char* str, int size ) { const char* OpensslBIOWrapper::getName() { return "OpenSSLWrapper"; } +#include +std::string OpensslBIOWrapper::readLine(){ + int target = 0; + while(1){ + logger::warn("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::warn("emit"); + return res; + } + target++; + } + std::stringstream ss; + ss << "target: " << target << ", pos:" << pos; + logger::warn(ss.str()); + int dlen = read(buffer.data() + pos, buffer.size() - pos); + if ( dlen <= 0 ){ + logger::warn(" error! "); + throw EOFException(); + } + std::stringstream ss2; + ss2 << "done: " << dlen; + logger::warn(ss2.str()); + pos += dlen; + } +}