Loading src/connection.cpp +12 −21 Original line number Diff line number Diff line Loading @@ -81,7 +81,6 @@ netplus::con::condata *netplus::con::addSendQueue(const char*data,unsigned long _SendDataLast=_SendDataLast->_nextConnectionData; } _SendDataLength+=datasize; _eventapi->sendReady(this,true); return _SendDataLast; } Loading @@ -92,12 +91,8 @@ void netplus::con::cleanSendData(){ _SendDataLength=0; } netplus::con::condata *netplus::con::resizeSendQueue(unsigned long size){ try{ netplus::con::condata *netplus::con::resizeSendQueue(size_t size){ return _resizeQueue(&_SendDataFirst,&_SendDataLast,_SendDataLength,size); }catch(char *e){ throw e; } } netplus::con::condata* netplus::con::getSendData(){ Loading Loading @@ -133,12 +128,8 @@ void netplus::con::cleanRecvData(){ } netplus::con::condata *netplus::con::resizeRecvQueue(unsigned long size){ try{ netplus::con::condata *netplus::con::resizeRecvQueue(size_t size){ return _resizeQueue(&_ReadDataFirst,&_ReadDataLast,_ReadDataLength,size); }catch(char *e){ throw e; } } netplus::con::condata *netplus::con::getRecvData(){ Loading @@ -155,7 +146,7 @@ void netplus::con::sending(bool state) { } netplus::con::condata *netplus::con::_resizeQueue(condata** firstdata, condata** lastdata, unsigned long &qsize,unsigned long size){ size_t &qsize,size_t size){ NetException exception; if(!*firstdata || size > qsize || qsize==0 || size==0){ exception[NetException::Error] << "_resizeQueue wrong datasize or ConnectionData"; Loading @@ -168,12 +159,10 @@ netplus::con::condata *netplus::con::_resizeQueue(condata** firstdata, condata** qsize-=size; int curlen =0; HAVEDATA: if((*firstdata)) { curlen += ((int)(*firstdata)->getDataLength() - size); if ( curlen <= 0 || size >= (unsigned long)curlen) { int curlen = ((int)(*firstdata)->getDataLength() - size); if ( curlen <= 0) { size -= (*firstdata)->getDataLength(); #ifdef DEBUG delsize += (*firstdata)->getDataLength(); Loading @@ -184,17 +173,19 @@ HAVEDATA: (*lastdata) = nullptr; delete* firstdata; (*firstdata) = newdat; }else{ std::string buf = (*firstdata)->_Data.substr(size,curlen); (*firstdata)->_Data = buf; #ifdef DEBUG delsize += size; #endif } size -= curlen; } if(size!=0) goto HAVEDATA; } #ifdef DEBUG // std::cout << " delsize: " << delsize << ": " << size Loading src/connection.h +3 −3 Original line number Diff line number Diff line Loading @@ -61,14 +61,14 @@ namespace netplus { const char* keyword,unsigned long keylen); condata *addSendQueue(const char *data,unsigned long datasize); condata *resizeSendQueue(unsigned long size); condata *resizeSendQueue(size_t size); void cleanSendData(); condata *getSendData(); size_t getSendLength(); /*Get Data funtions Recv Queue*/ condata *addRecvQueue(const char *data,unsigned long datasize); condata *resizeRecvQueue(unsigned long size); condata *resizeRecvQueue(size_t size); void cleanRecvData(); condata *getRecvData(); size_t getRecvLength(); Loading @@ -89,7 +89,7 @@ namespace netplus { size_t _SendDataLength; private: condata *_resizeQueue(condata **firstdata, condata **lastdata, unsigned long &qsize,unsigned long size); size_t &qsize,size_t size); /*Incomming Data*/ condata *_ReadDataFirst; Loading src/eventapi.h +0 −1 Original line number Diff line number Diff line Loading @@ -41,7 +41,6 @@ namespace netplus { virtual ~eventapi(); virtual void initEventHandler()=0; virtual const char *getpolltype()=0; /*pollstate*/ virtual int pollState(int pos)=0; Loading src/linux/event.cpp +33 −27 Original line number Diff line number Diff line Loading @@ -102,9 +102,8 @@ namespace netplus { int poll::pollState(int pos){ NetException exception; con* ccon = (con*)_Events[pos].data.ptr; if (!ccon) { return EventHandlerStatus::EVCON; } if(!ccon) throw "Scheiße !"; if (ccon->getSendData()) { return EventHandlerStatus::EVOUT; } Loading @@ -122,13 +121,19 @@ namespace netplus { }; void poll::ConnectEventHandler(int pos) { const std::lock_guard<std::mutex> lock(_StateLock); NetException exception; con *ccon; con *ccon = (con*)_Events[pos].data.ptr; if(ccon) return; try { ccon = new con(this); ccon->conlock.lock(); ccon->csock = _ServerSocket->accept(); ccon->csock->setnonblocking(); std::string ip; ccon->csock->getAddress(ip); std::cout << "Connected: " << ip << std::endl; struct poll_event setevent { 0 }; setevent.events = EPOLLIN; Loading @@ -138,9 +143,7 @@ namespace netplus { exception[NetException::Error] << "ConnectEventHandler: can't add socket to epoll"; throw exception; } std::string ip; ccon->csock->getAddress(ip); std::cout << "Connected: " << ip << std::endl; ConnectEvent(ccon); ccon->conlock.unlock(); } catch (NetException& e) { Loading @@ -166,7 +169,6 @@ namespace netplus { RequestEvent(rcon); } catch (NetException& e) { rcon->conlock.unlock(); throw e; } }; Loading @@ -193,19 +195,17 @@ namespace netplus { ResponseEvent(wcon); } catch (NetException& e) { wcon->conlock.unlock(); throw e; } }; void poll::CloseEventHandler(int pos) { const std::lock_guard<std::mutex> lock(_StateLock); NetException except; con* delcon = (con*)_Events[pos].data.ptr; if(!delcon || !delcon->conlock.try_lock()){ except[NetException::Error] << "CloseEvent connection not exists or locked!"; if(!delcon){ except[NetException::Error] << "CloseEvent connection not exists!"; throw except; } Loading Loading @@ -278,11 +278,10 @@ namespace netplus { int wfd = eventptr->waitEventHandler(); for (int i = 0; i < wfd; ++i) { try { int state=eventptr->pollState(i); if(state==poll::EVCON) eventptr->ConnectEventHandler(i); if(eventptr->trylockCon(i)){ switch (state) { try{ switch (eventptr->pollState(i)) { case poll::EVIN: eventptr->ReadEventHandler(i); break; Loading @@ -290,18 +289,25 @@ namespace netplus { eventptr->WriteEventHandler(i); break; default: break; NetException excep; excep[NetException::Note] << "Eventworker: nothing todo close connection"; throw excep; } eventptr->unlockCon(i); } }catch(NetException& e){ eventptr->CloseEventHandler(i); throw e; } } } catch (NetException& e) { if (e.getErrorType() == NetException::Critical) { throw e; } if(e.getErrorType() != NetException::Note) if(e.getErrorType() != NetException::Note){ std::cerr << e.what() << std::endl; } } } } catch (NetException& e) { Loading Loading
src/connection.cpp +12 −21 Original line number Diff line number Diff line Loading @@ -81,7 +81,6 @@ netplus::con::condata *netplus::con::addSendQueue(const char*data,unsigned long _SendDataLast=_SendDataLast->_nextConnectionData; } _SendDataLength+=datasize; _eventapi->sendReady(this,true); return _SendDataLast; } Loading @@ -92,12 +91,8 @@ void netplus::con::cleanSendData(){ _SendDataLength=0; } netplus::con::condata *netplus::con::resizeSendQueue(unsigned long size){ try{ netplus::con::condata *netplus::con::resizeSendQueue(size_t size){ return _resizeQueue(&_SendDataFirst,&_SendDataLast,_SendDataLength,size); }catch(char *e){ throw e; } } netplus::con::condata* netplus::con::getSendData(){ Loading Loading @@ -133,12 +128,8 @@ void netplus::con::cleanRecvData(){ } netplus::con::condata *netplus::con::resizeRecvQueue(unsigned long size){ try{ netplus::con::condata *netplus::con::resizeRecvQueue(size_t size){ return _resizeQueue(&_ReadDataFirst,&_ReadDataLast,_ReadDataLength,size); }catch(char *e){ throw e; } } netplus::con::condata *netplus::con::getRecvData(){ Loading @@ -155,7 +146,7 @@ void netplus::con::sending(bool state) { } netplus::con::condata *netplus::con::_resizeQueue(condata** firstdata, condata** lastdata, unsigned long &qsize,unsigned long size){ size_t &qsize,size_t size){ NetException exception; if(!*firstdata || size > qsize || qsize==0 || size==0){ exception[NetException::Error] << "_resizeQueue wrong datasize or ConnectionData"; Loading @@ -168,12 +159,10 @@ netplus::con::condata *netplus::con::_resizeQueue(condata** firstdata, condata** qsize-=size; int curlen =0; HAVEDATA: if((*firstdata)) { curlen += ((int)(*firstdata)->getDataLength() - size); if ( curlen <= 0 || size >= (unsigned long)curlen) { int curlen = ((int)(*firstdata)->getDataLength() - size); if ( curlen <= 0) { size -= (*firstdata)->getDataLength(); #ifdef DEBUG delsize += (*firstdata)->getDataLength(); Loading @@ -184,17 +173,19 @@ HAVEDATA: (*lastdata) = nullptr; delete* firstdata; (*firstdata) = newdat; }else{ std::string buf = (*firstdata)->_Data.substr(size,curlen); (*firstdata)->_Data = buf; #ifdef DEBUG delsize += size; #endif } size -= curlen; } if(size!=0) goto HAVEDATA; } #ifdef DEBUG // std::cout << " delsize: " << delsize << ": " << size Loading
src/connection.h +3 −3 Original line number Diff line number Diff line Loading @@ -61,14 +61,14 @@ namespace netplus { const char* keyword,unsigned long keylen); condata *addSendQueue(const char *data,unsigned long datasize); condata *resizeSendQueue(unsigned long size); condata *resizeSendQueue(size_t size); void cleanSendData(); condata *getSendData(); size_t getSendLength(); /*Get Data funtions Recv Queue*/ condata *addRecvQueue(const char *data,unsigned long datasize); condata *resizeRecvQueue(unsigned long size); condata *resizeRecvQueue(size_t size); void cleanRecvData(); condata *getRecvData(); size_t getRecvLength(); Loading @@ -89,7 +89,7 @@ namespace netplus { size_t _SendDataLength; private: condata *_resizeQueue(condata **firstdata, condata **lastdata, unsigned long &qsize,unsigned long size); size_t &qsize,size_t size); /*Incomming Data*/ condata *_ReadDataFirst; Loading
src/eventapi.h +0 −1 Original line number Diff line number Diff line Loading @@ -41,7 +41,6 @@ namespace netplus { virtual ~eventapi(); virtual void initEventHandler()=0; virtual const char *getpolltype()=0; /*pollstate*/ virtual int pollState(int pos)=0; Loading
src/linux/event.cpp +33 −27 Original line number Diff line number Diff line Loading @@ -102,9 +102,8 @@ namespace netplus { int poll::pollState(int pos){ NetException exception; con* ccon = (con*)_Events[pos].data.ptr; if (!ccon) { return EventHandlerStatus::EVCON; } if(!ccon) throw "Scheiße !"; if (ccon->getSendData()) { return EventHandlerStatus::EVOUT; } Loading @@ -122,13 +121,19 @@ namespace netplus { }; void poll::ConnectEventHandler(int pos) { const std::lock_guard<std::mutex> lock(_StateLock); NetException exception; con *ccon; con *ccon = (con*)_Events[pos].data.ptr; if(ccon) return; try { ccon = new con(this); ccon->conlock.lock(); ccon->csock = _ServerSocket->accept(); ccon->csock->setnonblocking(); std::string ip; ccon->csock->getAddress(ip); std::cout << "Connected: " << ip << std::endl; struct poll_event setevent { 0 }; setevent.events = EPOLLIN; Loading @@ -138,9 +143,7 @@ namespace netplus { exception[NetException::Error] << "ConnectEventHandler: can't add socket to epoll"; throw exception; } std::string ip; ccon->csock->getAddress(ip); std::cout << "Connected: " << ip << std::endl; ConnectEvent(ccon); ccon->conlock.unlock(); } catch (NetException& e) { Loading @@ -166,7 +169,6 @@ namespace netplus { RequestEvent(rcon); } catch (NetException& e) { rcon->conlock.unlock(); throw e; } }; Loading @@ -193,19 +195,17 @@ namespace netplus { ResponseEvent(wcon); } catch (NetException& e) { wcon->conlock.unlock(); throw e; } }; void poll::CloseEventHandler(int pos) { const std::lock_guard<std::mutex> lock(_StateLock); NetException except; con* delcon = (con*)_Events[pos].data.ptr; if(!delcon || !delcon->conlock.try_lock()){ except[NetException::Error] << "CloseEvent connection not exists or locked!"; if(!delcon){ except[NetException::Error] << "CloseEvent connection not exists!"; throw except; } Loading Loading @@ -278,11 +278,10 @@ namespace netplus { int wfd = eventptr->waitEventHandler(); for (int i = 0; i < wfd; ++i) { try { int state=eventptr->pollState(i); if(state==poll::EVCON) eventptr->ConnectEventHandler(i); if(eventptr->trylockCon(i)){ switch (state) { try{ switch (eventptr->pollState(i)) { case poll::EVIN: eventptr->ReadEventHandler(i); break; Loading @@ -290,18 +289,25 @@ namespace netplus { eventptr->WriteEventHandler(i); break; default: break; NetException excep; excep[NetException::Note] << "Eventworker: nothing todo close connection"; throw excep; } eventptr->unlockCon(i); } }catch(NetException& e){ eventptr->CloseEventHandler(i); throw e; } } } catch (NetException& e) { if (e.getErrorType() == NetException::Critical) { throw e; } if(e.getErrorType() != NetException::Note) if(e.getErrorType() != NetException::Note){ std::cerr << e.what() << std::endl; } } } } catch (NetException& e) { Loading