Loading src/connection.cpp +31 −34 Original line number Diff line number Diff line Loading @@ -145,54 +145,52 @@ void netplus::con::sending(bool state) { _eventapi->sendReady(this,state); } bool netplus::con::issending() { return _sending; } netplus::con::condata *netplus::con::_resizeQueue(condata** firstdata, condata** lastdata, size_t &qsize,size_t size){ NetException exception; if(!*firstdata || size > qsize || qsize==0 || size==0){ if (!*firstdata || size > qsize) { exception[NetException::Error] << "_resizeQueue wrong datasize or ConnectionData"; throw exception; } #ifdef DEBUG int delsize=0,presize=qsize; unsigned long delsize = 0, presize = qsize; #endif qsize -= size; HAVEDATA: if((*firstdata)) { int curlen = ((int)(*firstdata)->getDataLength() - size); if ( curlen <= 0 || curlen >= (*firstdata)->getDataLength()) { size -= (*firstdata)->getDataLength(); if ((*firstdata)->getDataLength()<=size) { #ifdef DEBUG delsize += (*firstdata)->getDataLength(); delsize += (*firstdata)->getDataLength();; #endif size -= (*firstdata)->getDataLength(); condata* newdat = (*firstdata)->_nextConnectionData; (*firstdata)->_nextConnectionData = nullptr; if (*firstdata == *lastdata) (*lastdata) = nullptr; delete* firstdata; (*firstdata) = newdat; }else{ std::string buf = (*firstdata)->_Data.substr(size,curlen); (*firstdata)->_Data = buf; *firstdata = newdat; if (*firstdata) goto HAVEDATA; } if (size != 0) { #ifdef DEBUG delsize += size; #endif size -= curlen; } if(size!=0) goto HAVEDATA; std::string buffer; buffer = (*firstdata)->_Data.substr(size, (*firstdata)->_Data.length() - size); (*firstdata)->_Data = buffer; *firstdata = (*firstdata); } #ifdef DEBUG // std::cout << " delsize: " << delsize << ": " << size // << " Calculated Blocksize: " << (presize-delsize) // << " Planned size: " << qsize // << std::endl; if((unsigned long)(presize-delsize)!=qsize){ std ::cout << " delsize: " << delsize << " Calculated Blocksize: " << (presize - delsize) << " Planned size: " << qsize << std::endl; if ((presize - delsize) != qsize) { exception[NetException::Critical] << "_resizeQueue: Calculated wrong size"; throw exception; } Loading @@ -201,7 +199,6 @@ HAVEDATA: return *firstdata; } int netplus::con::copyValue(con::condata* startblock, size_t startpos, con::condata* endblock, size_t endpos, std::string& buffer) { Loading src/connection.h +1 −0 Original line number Diff line number Diff line Loading @@ -78,6 +78,7 @@ namespace netplus { /*set sending state*/ void sending(bool state); bool issending(); std::atomic<bool> closecon; protected: Loading src/linux/event.cpp +14 −10 Original line number Diff line number Diff line Loading @@ -108,7 +108,7 @@ namespace netplus { if(!pcon) return EventHandlerStatus::EVCON; if(pcon->getSendData()) if(pcon->issending()) return EventHandlerStatus::EVOUT; return EventHandlerStatus::EVIN; Loading Loading @@ -193,25 +193,29 @@ namespace netplus { }; void poll::WriteEventHandler(int pos) { NetException exception; con *wcon = (con*)_Events[pos].data.ptr; if(!wcon->getSendData()){ NetException exp; exp[NetException::Note] << "WriteEvent: no data to send!"; throw exp; wcon->sending(false); return; } size_t sended = _ServerSocket->sendData(wcon->csock, (void*)wcon->getSendData()->getData(), wcon->getSendData()->getDataLength(), 0); if(sended>0){ wcon->resizeSendQueue(sended); if(sended!=0){ ResponseEvent(wcon); wcon->resizeSendQueue(sended); }else{ NetException exp; switch(errno){ case EAGAIN: exp[NetException::Note] << "WriteEvent: Resource temporarily unavailable"; throw exp; default: exp[NetException::Error] << "WriteEvent: no data sended"; throw exp; } } }; Loading Loading
src/connection.cpp +31 −34 Original line number Diff line number Diff line Loading @@ -145,54 +145,52 @@ void netplus::con::sending(bool state) { _eventapi->sendReady(this,state); } bool netplus::con::issending() { return _sending; } netplus::con::condata *netplus::con::_resizeQueue(condata** firstdata, condata** lastdata, size_t &qsize,size_t size){ NetException exception; if(!*firstdata || size > qsize || qsize==0 || size==0){ if (!*firstdata || size > qsize) { exception[NetException::Error] << "_resizeQueue wrong datasize or ConnectionData"; throw exception; } #ifdef DEBUG int delsize=0,presize=qsize; unsigned long delsize = 0, presize = qsize; #endif qsize -= size; HAVEDATA: if((*firstdata)) { int curlen = ((int)(*firstdata)->getDataLength() - size); if ( curlen <= 0 || curlen >= (*firstdata)->getDataLength()) { size -= (*firstdata)->getDataLength(); if ((*firstdata)->getDataLength()<=size) { #ifdef DEBUG delsize += (*firstdata)->getDataLength(); delsize += (*firstdata)->getDataLength();; #endif size -= (*firstdata)->getDataLength(); condata* newdat = (*firstdata)->_nextConnectionData; (*firstdata)->_nextConnectionData = nullptr; if (*firstdata == *lastdata) (*lastdata) = nullptr; delete* firstdata; (*firstdata) = newdat; }else{ std::string buf = (*firstdata)->_Data.substr(size,curlen); (*firstdata)->_Data = buf; *firstdata = newdat; if (*firstdata) goto HAVEDATA; } if (size != 0) { #ifdef DEBUG delsize += size; #endif size -= curlen; } if(size!=0) goto HAVEDATA; std::string buffer; buffer = (*firstdata)->_Data.substr(size, (*firstdata)->_Data.length() - size); (*firstdata)->_Data = buffer; *firstdata = (*firstdata); } #ifdef DEBUG // std::cout << " delsize: " << delsize << ": " << size // << " Calculated Blocksize: " << (presize-delsize) // << " Planned size: " << qsize // << std::endl; if((unsigned long)(presize-delsize)!=qsize){ std ::cout << " delsize: " << delsize << " Calculated Blocksize: " << (presize - delsize) << " Planned size: " << qsize << std::endl; if ((presize - delsize) != qsize) { exception[NetException::Critical] << "_resizeQueue: Calculated wrong size"; throw exception; } Loading @@ -201,7 +199,6 @@ HAVEDATA: return *firstdata; } int netplus::con::copyValue(con::condata* startblock, size_t startpos, con::condata* endblock, size_t endpos, std::string& buffer) { Loading
src/connection.h +1 −0 Original line number Diff line number Diff line Loading @@ -78,6 +78,7 @@ namespace netplus { /*set sending state*/ void sending(bool state); bool issending(); std::atomic<bool> closecon; protected: Loading
src/linux/event.cpp +14 −10 Original line number Diff line number Diff line Loading @@ -108,7 +108,7 @@ namespace netplus { if(!pcon) return EventHandlerStatus::EVCON; if(pcon->getSendData()) if(pcon->issending()) return EventHandlerStatus::EVOUT; return EventHandlerStatus::EVIN; Loading Loading @@ -193,25 +193,29 @@ namespace netplus { }; void poll::WriteEventHandler(int pos) { NetException exception; con *wcon = (con*)_Events[pos].data.ptr; if(!wcon->getSendData()){ NetException exp; exp[NetException::Note] << "WriteEvent: no data to send!"; throw exp; wcon->sending(false); return; } size_t sended = _ServerSocket->sendData(wcon->csock, (void*)wcon->getSendData()->getData(), wcon->getSendData()->getDataLength(), 0); if(sended>0){ wcon->resizeSendQueue(sended); if(sended!=0){ ResponseEvent(wcon); wcon->resizeSendQueue(sended); }else{ NetException exp; switch(errno){ case EAGAIN: exp[NetException::Note] << "WriteEvent: Resource temporarily unavailable"; throw exp; default: exp[NetException::Error] << "WriteEvent: no data sended"; throw exp; } } }; Loading