#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() {
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;
+ }
+}