void CSapConnection::HandleRead(const boost::system::error_code& err,std::size_t dwTransferred) { SS_XLOG(XLOG_DEBUG,"CSapConnection::%s,id[%d],bytes_transferred[%d]\n",__FUNCTION__,m_nId,dwTransferred); if(!err) { gettimeofday_a(&m_AlivePoint,NULL); buffer_.inc_loc(dwTransferred); while(buffer_.top()>=m_pHeader+sizeof(SSapMsgHeader)) { SSapMsgHeader *ptrHeader=(SSapMsgHeader *)m_pHeader; unsigned int packetlen=ntohl(ptrHeader->dwPacketLen); if(packetlen<=MAX_SAP_PAKET_LEN&&packetlen>0&&(ptrHeader->byIdentifer==SAP_PACKET_REQUEST||ptrHeader->byIdentifer==SAP_PACKET_RESPONSE)) { if(buffer_.top()>=m_pHeader+packetlen) { ReadPacketCompleted(m_pHeader,packetlen); m_pHeader+=packetlen; } else { break; } } else { SS_XLOG(XLOG_WARNING,"CSapConnection::%s,id[%d],packetlen[%d],identifier[%d], will close this socket\n",__FUNCTION__,m_nId,packetlen,ptrHeader->byIdentifer); StopConnection(); return; } } if(m_pHeader!=buffer_.base()) { memmove(buffer_.base(),m_pHeader,buffer_.top()-m_pHeader); buffer_.reset_loc(buffer_.top()-m_pHeader); m_pHeader=buffer_.base(); } else if(buffer_.capacity()==0) { m_pHeader=buffer_.base(); SSapMsgHeader *ptrHeader=(SSapMsgHeader *)m_pHeader; unsigned int packetlen=ntohl(ptrHeader->dwPacketLen); buffer_.add_capacity(SAP_ALIGN(packetlen)); m_pHeader=buffer_.base(); } m_socket.async_read_some(boost::asio::buffer(buffer_.top(),buffer_.capacity()), MakeSapAllocHandler(m_allocReader,boost::bind(&CSapConnection::HandleRead, shared_from_this(), boost::asio::placeholders::error,boost::asio::placeholders::bytes_transferred))); } else { SS_SLOG(XLOG_WARNING,"CSapConnection::"<<__FUNCTION__<<",id["<<m_nId<<"],error:" <<err.message()<<"\n"); StopConnection(); } }
void CSapConnection::DoDetectInterval() { struct timeval_a now; gettimeofday_a(&now,NULL); struct timeval_a interval,endtime; interval.tv_sec=HeartInterval; interval.tv_usec=0; timeradd(&m_HeartBeatPoint,&interval,&endtime); if(timercmp(&now,&endtime,>=)) { m_heartRequest.SetSequence(m_heartSequence++); dump_sap_packet_info(m_heartRequest.GetBuffer(),E_SAP_OUT); WriteDataInner(m_heartRequest.GetBuffer(),m_heartRequest.GetLen()); m_HeartBeatPoint=now; } interval.tv_sec=TimeoutInterval; interval.tv_usec=0; timeradd(&m_AlivePoint,&interval,&endtime); if(timercmp(&now,&endtime,>)) { SS_XLOG(XLOG_WARNING,"CSapConnection::%s,id[%d] timeout, will reconnect.alive[%ld.%06ld] now[%ld.%06ld]\n", __FUNCTION__,m_nId,m_AlivePoint.tv_sec,m_AlivePoint.tv_usec, now.tv_sec,now.tv_usec); StopConnection(); } }
// Stop all connections void StopAllConnection(CEDAR *c) { UINT num; UINT i; CONNECTION **connections; // Validate arguments if (c == NULL) { return; } LockList(c->ConnectionList); { connections = ToArray(c->ConnectionList); num = LIST_NUM(c->ConnectionList); DeleteAll(c->ConnectionList); } UnlockList(c->ConnectionList); for (i = 0;i < num;i++) { StopConnection(connections[i], false); ReleaseConnection(connections[i]); } Free(connections); }
void IsuCalcLink::Uninit() { StopConnection(); delete Timer; Timer = 0; delete Socket; Socket = 0; }
void MoonlightInstance::HandleStopStream(int32_t callbackId, pp::VarArray args) { // Begin connection teardown StopConnection(); pp::VarDictionary ret; ret.Set("callbackId", pp::Var(callbackId)); ret.Set("type", pp::Var("resolve")); ret.Set("ret", pp::VarDictionary()); PostMessage(ret); }
bool KThruput::SetTimeScale(int value) { TimeScale = value; /* Sonst kommen die Werte durcheinander */ if (Connected >= 0) { StopConnection(); StartConnection(); } return TRUE; }