#define SLIP_ESCAPE_CHAR ( (char) 0xDB)
#define SLIP_CONNECTION ( (char) 0xC0)
#define SLIP_RESET ( (char) 0xCB )
#define SLIP_ESCAPE_CHAR ( (char) 0xDB)
#define SLIP_CONNECTION ( (char) 0xC0)
#define SLIP_RESET ( (char) 0xCB )
-SlipBIO::SlipBIO() : buffer( std::vector<char>( buffer_size ) ), decodeTarget( 0 ), decodePos( 0 ), rawPos( 0 ) {
+SlipBIO::SlipBIO() : buffer( buffer_size ), decodeTarget( 0 ), decodePos( 0 ), rawPos( 0 ) {
debug << toHex( targetPtr + sent, dlen );
logger::note( debug.str() );
debug << toHex( targetPtr + sent, dlen );
logger::note( debug.str() );
// while we have no data to decode or unmasking does not yield a full package
while( decodeTarget == 0 ) {
if( waitForReset ) {
// while we have no data to decode or unmasking does not yield a full package
while( decodeTarget == 0 ) {
if( waitForReset ) {
std::ostringstream converter;
converter << "rawPos is now: " << rawPos << ", buffer.size():" << buffer.size();
logger::note( converter.str() );
std::ostringstream converter;
converter << "rawPos is now: " << rawPos << ", buffer.size():" << buffer.size();
logger::note( converter.str() );
int len = std::min( decodeTarget, ( unsigned int ) size );
// a package finished, return it
int len = std::min( decodeTarget, ( unsigned int ) size );
// a package finished, return it
// move the buffer contents back
std::copy( buffer.data() + len, buffer.data() + decodeTarget, buffer.data() );
decodeTarget -= len;
// move the buffer contents back
std::copy( buffer.data() + len, buffer.data() + decodeTarget, buffer.data() );
decodeTarget -= len;
std::ostringstream convert;
convert << "decodeTarget: " << decodeTarget << ", rawPos: " << rawPos << ", decodePos: " << decodePos;
convert << ", requested were: " << size;
logger::note( convert.str() );
std::ostringstream convert;
convert << "decodeTarget: " << decodeTarget << ", rawPos: " << rawPos << ", decodePos: " << decodePos;
convert << ", requested were: " << size;
logger::note( convert.str() );
if(decodeTarget == 0 && rawPos <= decodePos + 1){
// compact the remaining at most 1 byte of raw data
if(decodeTarget == 0 && rawPos <= decodePos + 1){
// compact the remaining at most 1 byte of raw data
static char ctr = 8;
char resetSequence[] = {SLIP_CONNECTION, 1,2,3,4,5,6,7, ctr};
target->write( resetSequence, 9 );
static char ctr = 8;
char resetSequence[] = {SLIP_CONNECTION, 1,2,3,4,5,6,7, ctr};
target->write( resetSequence, 9 );
header = {1, 2, 3, 4, 5, 6, 7, ctr};
resetCounter = -1;
waitForConnection = true;
header = {1, 2, 3, 4, 5, 6, 7, ctr};
resetCounter = -1;
waitForConnection = true;
// 1 success, data avail, 0 need moar data (see that decodeTarget is still 0),
// -1: fail... connection needs resetting
int SlipBIO::unmask() {
// 1 success, data avail, 0 need moar data (see that decodeTarget is still 0),
// -1: fail... connection needs resetting
int SlipBIO::unmask() {
{
std::ostringstream conv;
conv << "unmasking starting, decodeTarget: " << decodeTarget << " decodePos: " << decodePos << " rawPos: " << rawPos << "bytes stored";
logger::note( conv.str() );
}
logger::note( "unmasking" );
{
std::ostringstream conv;
conv << "unmasking starting, decodeTarget: " << decodeTarget << " decodePos: " << decodePos << " rawPos: " << rawPos << "bytes stored";
logger::note( conv.str() );
}
logger::note( "unmasking" );
logger::notef( "SLIP, initing connection with ping-seq %s:", toHex(header.data(), header.size()) );
logger::notef( "SLIP, initing connection with ping-seq %s:", toHex(header.data(), header.size()) );
std::ostringstream conv;
conv << "unmasking paused, 0 remaining, " << j << "bytes stored";
logger::note( conv.str() );
std::ostringstream conv;
conv << "unmasking paused, 0 remaining, " << j << "bytes stored";
logger::note( conv.str() );