BOOL CxNetCardInfo::GetInfo() { ErrMsg = _T("Success!"); BOOL isNormal = FALSE; unsigned long nError; nError = GetAdaptersInfo( pinfo,&len ); switch( nError ) { case ERROR_SUCCESS: isNormal = ParseData(); break; case ERROR_NO_DATA: ErrMsg = _T( "No net device information!" ); break; case ERROR_NOT_SUPPORTED: ErrMsg = _T( "The system not support GetAdaptersInfo API function!" ); break; case ERROR_BUFFER_OVERFLOW: nError = GetAdaptersInfo( pinfo,&len ); if( nError == 0 ) isNormal = ParseData(); else ErrMsg = _T("Unknow error!"); break; } return isNormal; }
void CNetCardInfo::GetInfo() { ErrMsg = _T( "Success!" ); unsigned long nError; nError = GetAdaptersInfo( m_pinfo,&len ); switch( nError ) { case ERROR_SUCCESS: ParseData(); break; case ERROR_NO_DATA: ErrMsg = _T( "No net device information!" ); break; case ERROR_NOT_SUPPORTED: ErrMsg = _T( "The system not support GetAdaptersInfo API function!" ); break; case ERROR_BUFFER_OVERFLOW: nError = GetAdaptersInfo( m_pinfo,&len ); if( nError == 0 ) { ParseData(); ParseMacAddressList(); } else ErrMsg = _T("Unknow error!"); break; } }
/* * Create an Database */ tDatabase DBCreate(const char * filename) { if(filename == NULL) { fprintf(stderr,"filename Error,%s:%d\n", __FILE__,__LINE__); filename = "nezha.hdb"; } /* connect server */ h = OpenRemoteService(IP_ADDR,PORT); if(h == -1) { exit(-1); } /* open database file */ char Buf[MAX_BUF_LEN] = "\0"; int BufSize = MAX_BUF_LEN; FormatData1(Buf,&BufSize,OPEN_CMD,(char*)filename,strlen(filename)); SendData(h,Buf,BufSize); BufSize = MAX_BUF_LEN; RecvData(h,Buf,&BufSize); int cmd = -1; int DataNum = -1; char Data1[MAX_BUF_LEN] = "\0"; int Data1Size = MAX_BUF_LEN; char Data2[MAX_BUF_LEN] = "\0"; int Data2Size = MAX_BUF_LEN; ParseData(Buf,MAX_BUF_LEN,&cmd,&DataNum,Data1,&Data1Size,Data2,&Data2Size); if(cmd != OPEN_RSP || DataNum != 0) { fprintf(stderr,"Remote DBCreate Error,%s:%d\n", __FILE__,__LINE__); } return (tDatabase)&h; }
/* * delete key/value */ int DBDelKeyValue(tDatabase db,tKey key) { if(db == NULL) { return -1; } char Buf[MAX_BUF_LEN] = "\0"; int BufSize = MAX_BUF_LEN; int ret = FormatData1(Buf,&BufSize,DELETE_CMD,(char*)&key,sizeof(tKey)); if(ret == -1) { return -1; } SendData(*(tServiceHandler*)db,Buf,BufSize); BufSize = MAX_BUF_LEN; if(RecvData(*(tServiceHandler*)db,Buf,&BufSize) == 0) { fprintf(stderr,"Connection Error,%s:%d\n",__FILE__,__LINE__); return -1; } int cmd = -1; int DataNum = -1; char Data1[MAX_BUF_LEN] = "\0"; int Data1Size = MAX_BUF_LEN; char Data2[MAX_BUF_LEN] = "\0"; int Data2Size = MAX_BUF_LEN; ParseData(Buf,BufSize,&cmd,&DataNum,Data1,&Data1Size,Data2,&Data2Size); if(cmd == ERROR_RSP && DataNum == 1) { fprintf(stderr,"%s,%s:%d\n",Data1, __FILE__,__LINE__); return -1; } return 0; }
static Channel* ReloadData(void *Data) { DSBUFFERDESC dsBD; BYTE * pbWaveData; INT NumBytes; // uint8 *data = NULL; Channel* channel; // if( !Name ) // return( NULL ); // if( !GetSoundData( Data, &data ) ) // return( NULL ); if( !ParseData( Data, &dsBD, &pbWaveData ) ) return( NULL ); NumBytes = dsBD.dwBufferBytes; //Create the channel // if( !CreateChannel( Name, &dsBD, &channel ) ) if( !CreateChannel(&dsBD, &channel ) ) return NULL; //Fill the channel if ( !DSFillSoundBuffer(channel->buffer, pbWaveData, NumBytes)) return NULL; // geRam_Free(data); // free( data ); return( channel ); }
/* * Create an Database */ int CreateRemoteDB(char *addr, int port, const char * dbName) { if(dbName == NULL) { fprintf(stderr, "filename Error,%s:%d\n", __FILE__, __LINE__); dbName = "default.hdb"; } /* connect server */ tServiceHandler h = OpenRemoteService(addr, port); if(h == -1) { return -1; } /* open database file */ char Buf[MAX_BUF_LEN] = "\0"; int BufSize = MAX_BUF_LEN; FormatData1(Buf, &BufSize, OPEN_CMD, (char*)dbName, strlen(dbName)); SendData(h, Buf, BufSize); BufSize = MAX_BUF_LEN; RecvData(h, Buf, &BufSize); int cmd = -1; int DataNum = -1; char Data1[MAX_BUF_LEN] = "\0"; int Data1Size = MAX_BUF_LEN; char Data2[MAX_BUF_LEN] = "\0"; int Data2Size = MAX_BUF_LEN; ParseData(Buf, MAX_BUF_LEN, &cmd, &DataNum, Data1, &Data1Size, Data2, &Data2Size); if(cmd != OPEN_RSP || DataNum != 0) { fprintf(stderr, "CreateRemoteDB Error,%s:%d\n", __FILE__, __LINE__); return -1; } return h; }
/* IScanner */ static inline int ParseValue(struct IParse *parse, struct ISection *section) { ParseComment(parse); ParseSkip(parse); /* Value Name */ char name[MAX_NAME]; if (!ParseName(parse, name, MAX_NAME)) { return 0; } ParseSkip(parse); int code = ParsePeek(parse, 0); if (!(code == '=')) { return 0; } ParseRead(parse); /* = */ ParseSkip(parse); /* Value Data */ char data[MAX_VALUE]; if (!ParseData(parse, data, MAX_VALUE)) { return 0; } AddSectionString(section, name, data); return 1; }
void Daemon::ErrorStatus(){ // if entered in this loop for the first time if ( !error_) { dataType errMex; errMex.append((void*)"ERROR\0\0",6); // send 3 error mex connectionManager_->Send(errMex,CmdSck); sleep(1); connectionManager_->Send(errMex,CmdSck); sleep(1); connectionManager_->Send(errMex,CmdSck); //Reset Members if(eventBuilder_)eventBuilder_->Reset(); //hwManager_-> ??? if(hwManager_) { hwManager_->Clear(); // call reset of all board //hwManager_->Config(*configurator_); //configure all boards -- ? //hwManager_->Init(); // Init All Boards } } error_=true; //wait for instructions dataType myMex; if (connectionManager_->Recv(myMex) == 0 ) { Command myCmd=ParseData(myMex) ; if (myCmd.cmd == ENDRUN ){ error_=false; MoveToStatus(INITIALIZED); } } return; }
//从文件加载数据 bool CDataManageCenter::LoadDataFromFile(CString FilePath,vector<sShuangSeQiu>& QiuList) { DWORD Flag = OPEN_EXISTING; HANDLE FileHandle=CreateFile(FilePath,GENERIC_WRITE|GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE,NULL,Flag,FILE_ATTRIBUTE_NORMAL,NULL); if(FileHandle == INVALID_HANDLE_VALUE) return false; DWORD Size = ::GetFileSize(FileHandle,NULL); char* Buffer = new char[Size+1]; memset(Buffer,'\0',Size+1); DWORD ReadBytes=0; ::ReadFile(FileHandle,Buffer,Size,&ReadBytes,NULL); CString StrData=CString(Buffer); ParseData(StrData,QiuList); delete []Buffer; //初始化横向差值 /* InitHengXiangChaZhi(m_ShuangSeQiuList); //初始化纵向差值 InitZongXiangChaZhi(m_ShuangSeQiuList); //初始化连号平码 InitLianHaoHongQiu(m_ShuangSeQiuList); //初始化连号特码 InitLianHaoLanQiu(m_ShuangSeQiuList); */ return true; }
bool P1MeterSerial::StartHardware() { #ifdef DEBUG_FROM_FILE FILE *fIn=fopen("E:\\meter.txt","rb+"); BYTE buffer[1000]; int ret=fread((BYTE*)&buffer,1,sizeof(buffer),fIn); fclose(fIn); ParseData((const BYTE*)&buffer,ret); #endif m_stoprequested = false; m_thread = boost::shared_ptr<boost::thread>(new boost::thread(boost::bind(&P1MeterSerial::Do_Work, this))); //Try to open the Serial Port try { _log.Log(LOG_STATUS,"P1 Smart Meter: Using serial port: %s", m_szSerialPort.c_str()); if (m_iBaudRate==9600) { open( m_szSerialPort, m_iBaudRate, boost::asio::serial_port_base::parity( boost::asio::serial_port_base::parity::even), boost::asio::serial_port_base::character_size(7) ); } else { //DSMRv4 open( m_szSerialPort, m_iBaudRate, boost::asio::serial_port_base::parity( boost::asio::serial_port_base::parity::none), boost::asio::serial_port_base::character_size(8) ); } } catch (boost::exception & e) { _log.Log(LOG_ERROR,"P1 Smart Meter: Error opening serial port!"); #ifdef _DEBUG _log.Log(LOG_ERROR,"-----------------\n%s\n-----------------",boost::diagnostic_information(e).c_str()); #else (void)e; #endif return false; } catch ( ... ) { _log.Log(LOG_ERROR,"P1 Smart Meter: Error opening serial port!!!"); return false; } m_bIsStarted=true; m_linecount=0; m_exclmarkfound=0; setReadCallback(boost::bind(&P1MeterSerial::readCallback, this, _1, _2)); sOnConnected(this); return true; }
void Socket::Recv() { if(connection == true) { fd_set read_fds = master; if( select(s + 1, &read_fds, NULL, NULL, &tv) == -1) { int err = WSAGetLastError(); if(err == 0){} else { MessageBox(0, "Function select() has failed!", "ERROR", MB_OK | MB_ICONERROR); this->~Socket(); connection = false; } } if(FD_ISSET(s, &read_fds)) // we got something { if((bytes = recv(s, (char*)Buffer, 1024, 0)) > 0) { Reader.SetBuffer((unsigned char*)Buffer); ParseData(bytes); } else { SetText("**Connection lost..."); FD_CLR(s, &read_fds); connection = false; this->~Socket(); } } } }
/* * Set key/value */ int DBSetKeyValue(tDatabase db,tKey key,tValue value) { debug("SET_CMD:%d -> %s\n",key,value.str); char Buf[MAX_BUF_LEN] = "\0"; int BufSize = MAX_BUF_LEN; int ret = FormatData2(Buf,&BufSize,SET_CMD,(char*)&key,sizeof(tKey),value.str,value.len); if(ret == -1) { return -1; } SendData(*(tServiceHandler*)db,Buf,BufSize); BufSize = MAX_BUF_LEN; if(RecvData(*(tServiceHandler*)db,Buf,&BufSize) == 0) { fprintf(stderr,"Connection Error,%s:%d\n",__FILE__,__LINE__); return -1; } int cmd = -1; int DataNum = -1; char Data1[MAX_BUF_LEN] = "\0"; int Data1Size = MAX_BUF_LEN; char Data2[MAX_BUF_LEN] = "\0"; int Data2Size = MAX_BUF_LEN; ParseData(Buf,BufSize,&cmd,&DataNum,Data1,&Data1Size,Data2,&Data2Size); if(cmd != SET_RSP || DataNum != 0) { fprintf(stderr,"Remote DBSetKeyValue Error,%s:%d\n", __FILE__,__LINE__); return -1; } return 0; }
void SMOnlineRoom::UpdateClients() { int length = 0; for (unsigned int x = 0; x < m_clients.size(); ++x) { if (!m_clients[x]) { LOG->Write("Error: Trying to update NULL client"); RemoveClient(x); continue; } try { do { //As long as we keep getting data from the socket, keep processing it length = m_clients[x]->Update(m_packet); if (length > 0) ParseData(m_packet, x); //Check for NULL incase the client switched rooms } while ((length > 0) && (x < m_clients.size()) && (m_clients[x])); } catch (ClientError&) { RemoveClient(x); } } }
/* * Delete the Database */ int RemoteDBDelete(int db) { /* close database file */ char Buf[MAX_BUF_LEN] = "\0"; int BufSize = MAX_BUF_LEN; FormatData(Buf,&BufSize,CLOSE_CMD); SendData(db,Buf,BufSize); BufSize = MAX_BUF_LEN; if(RecvData(db,Buf,&BufSize) == 0) { fprintf(stderr,"Connection Error,%s:%d\n",__FILE__,__LINE__); return -1; } int cmd = -1; int DataNum = -1; char Data1[MAX_BUF_LEN] = "\0"; int Data1Size = MAX_BUF_LEN; char Data2[MAX_BUF_LEN] = "\0"; int Data2Size = MAX_BUF_LEN; ParseData(Buf,MAX_BUF_LEN,&cmd,&DataNum,Data1,&Data1Size,Data2,&Data2Size); if(cmd != CLOSE_RSP || DataNum != 0) { fprintf(stderr,"Remote DBDelete Error,%s:%d\n", __FILE__,__LINE__); return -1; } /* close connection */ if(CloseRemoteService(db) == -1) { return -1; } return 0; }
RTCPCompoundPacket::RTCPCompoundPacket(RTPRawPacket &rawpack, RTPMemoryManager *mgr) : RTPMemoryObject(mgr) { compoundpacket = 0; compoundpacketlength = 0; error = 0; if (rawpack.IsRTP()) { error = ERR_RTP_RTCPCOMPOUND_INVALIDPACKET; return; } uint8_t *data = rawpack.GetData(); size_t datalen = rawpack.GetDataLength(); error = ParseData(data,datalen); if (error < 0) return; compoundpacket = rawpack.GetData(); compoundpacketlength = rawpack.GetDataLength(); deletepacket = true; rawpack.ZeroData(); rtcppackit = rtcppacklist.begin(); }
/* * delete key/value */ int RemoteDBDelKeyValue(int db,tKey key) { if(db == -1) { return -1; } char Buf[MAX_BUF_LEN] = "\0"; int BufSize = MAX_BUF_LEN; int ret = FormatData1(Buf,&BufSize,DELETE_CMD,(char*)key.str,key.len); if(ret == -1) { return -1; } SendData(db,Buf,BufSize); BufSize = MAX_BUF_LEN; if(RecvData(db,Buf,&BufSize) == 0) { fprintf(stderr,"Connection Error,%s:%d\n",__FILE__,__LINE__); return -1; } int cmd = -1; int DataNum = -1; char Data1[MAX_BUF_LEN] = "\0"; int Data1Size = MAX_BUF_LEN; char Data2[MAX_BUF_LEN] = "\0"; int Data2Size = MAX_BUF_LEN; ParseData(Buf,BufSize,&cmd,&DataNum,Data1,&Data1Size,Data2,&Data2Size); if(cmd == ERROR_RSP && DataNum == 1) { fprintf(stderr,"%s,%s:%d\n",Data1, __FILE__,__LINE__); return -1; } return 0; }
/* * Create an Database */ int RemoteDBCreate(const char * filename,char * addr,int port) { if(filename == NULL) { fprintf(stderr,"filename Error,%s:%d\n", __FILE__,__LINE__); filename = "nezha.hdb"; } /* connect server */ tServiceHandler dbhandler = OpenRemoteService(addr,port); if(dbhandler == -1) { return -1; } /* open database file */ char Buf[MAX_BUF_LEN] = "\0"; int BufSize = MAX_BUF_LEN; FormatData1(Buf,&BufSize,OPEN_CMD,(char*)filename,strlen(filename)); SendData(dbhandler,Buf,BufSize); BufSize = MAX_BUF_LEN; RecvData(dbhandler,Buf,&BufSize); int cmd = -1; int DataNum = -1; char Data1[MAX_BUF_LEN] = "\0"; int Data1Size = MAX_BUF_LEN; char Data2[MAX_BUF_LEN] = "\0"; int Data2Size = MAX_BUF_LEN; ParseData(Buf,MAX_BUF_LEN,&cmd,&DataNum,Data1,&Data1Size,Data2,&Data2Size); if(cmd != OPEN_RSP || DataNum != 0) { fprintf(stderr,"Remote DBCreate Error,%s:%d\n", __FILE__,__LINE__); return -1; } return dbhandler; }
void GmailChecker::httpFinished () { emit canContinue (); if (Reply_->error ()) { QString error = tr ("Error"); error.prepend ("Gmail Notifier: "); if (Reply_->attribute (QNetworkRequest::HttpStatusCodeAttribute).toInt () == 401) emit anErrorOccupied (error.append (" 401"), tr ("The username or password is incorrect")); else if (Reply_->error() == QNetworkReply::OperationCanceledError) // When timed out emit anErrorOccupied (error, tr ("Connection timeout")); else emit anErrorOccupied (error, Reply_->errorString ()); } else { Data_ = QString::fromUtf8 (Reply_->readAll ()); ParseData (); } Reply_->deleteLater (); Reply_ = 0; }
/* * Set key/value */ int RemoteDBSetKeyValue(int db,tKey key,tValue value) { char Buf[MAX_BUF_LEN] = "\0"; int BufSize = MAX_BUF_LEN; int ret = FormatData2(Buf,&BufSize,SET_CMD,(char*)key.str,key.len,value.str,value.len); if(ret == -1) { return -1; } SendData(db,Buf,BufSize); BufSize = MAX_BUF_LEN; if(RecvData(db,Buf,&BufSize) == 0) { fprintf(stderr,"Connection Error,%s:%d\n",__FILE__,__LINE__); return -1; } int cmd = -1; int DataNum = -1; char Data1[MAX_BUF_LEN] = "\0"; int Data1Size = MAX_BUF_LEN; char Data2[MAX_BUF_LEN] = "\0"; int Data2Size = MAX_BUF_LEN; ParseData(Buf,BufSize,&cmd,&DataNum,Data1,&Data1Size,Data2,&Data2Size); if(cmd != SET_RSP || DataNum != 0) { fprintf(stderr,"Remote DBSetKeyValue Error,%s:%d\n", __FILE__,__LINE__); return -1; } return 0; }
void __fastcall TMDIChild::actGoToNumExecute(TObject *Sender) { String num; int value = 0; if(InputQuery("输入要转到的记录(10进制, 从0开始)", "转到记录位置", num)) { value = num.ToIntDef(0); if(value == 0) return; int pos = m_HexEditor->SelStart; int curNum = 0; ClearListHistory(); while(pos < m_HexEditor->DataSize) { if(curNum >= num) break; m_ParseListHistory.push(pos); m_ParseTree->UnPackData(pos); pos += m_ParseTree->GetSize(); curNum++; } edtCurParseCount->Value = curNum; m_HexEditor->SelStart = pos; ParseData(); } }
bool cSatipRtsp::Teardown(const char *uriP) { debug1("%s (%s) [device %d]", __PRETTY_FUNCTION__, uriP, tunerM.GetId()); bool result = false; if (handleM && !isempty(uriP)) { long rc = 0; cTimeMs processing(0); CURLcode res = CURLE_OK; SATIP_CURL_EASY_SETOPT(handleM, CURLOPT_RTSP_STREAM_URI, uriP); SATIP_CURL_EASY_SETOPT(handleM, CURLOPT_RTSP_REQUEST, (long)CURL_RTSPREQ_TEARDOWN); SATIP_CURL_EASY_SETOPT(handleM, CURLOPT_WRITEFUNCTION, cSatipRtsp::DataCallback); SATIP_CURL_EASY_SETOPT(handleM, CURLOPT_WRITEDATA, this); SATIP_CURL_EASY_PERFORM(handleM); SATIP_CURL_EASY_SETOPT(handleM, CURLOPT_WRITEFUNCTION, NULL); SATIP_CURL_EASY_SETOPT(handleM, CURLOPT_WRITEDATA, NULL); if (dataBufferM.Size() > 0) { ParseData(); dataBufferM.Reset(); } SATIP_CURL_EASY_SETOPT(handleM, CURLOPT_RTSP_CLIENT_CSEQ, 1L); SATIP_CURL_EASY_SETOPT(handleM, CURLOPT_RTSP_SESSION_ID, NULL); result = ValidateLatestResponse(&rc); debug5("%s (%s) Response %ld in %" PRIu64 " ms [device %d]", __PRETTY_FUNCTION__, uriP, rc, processing.Elapsed(), tunerM.GetId()); } return result; }
std::vector<DATUM*> DiskStreamer<DATUM>::GetNextData(int num_data) { while (true) { { std::unique_lock<std::mutex> lock(mtx_); if (curr_work_buffer_ == 0) { return std::vector<DATUM*>(0); // end of data stream. } if (curr_work_buffer_->HasMore()) { return ParseData(num_data); } buffer_active_ = false; } barrier_.wait(); { std::unique_lock<std::mutex> lock(mtx_); if (!buffer_active_) { // Replace current buffer. multi_buffer_.DoneConsumingWorkBuffer(); curr_work_buffer_ = multi_buffer_.GetWorkBuffer(); buffer_active_ = true; } } // Without this barrier, thread 1 can replace curr_work_buffer_ with 0 // (null) and thread 2 immediately get (curr_work_buffer_ == 0) and // return, leaving thread 1 waiting at the first barrier_ (deadlock). barrier_.wait(); } }
bool SMUSync::ParseWebService(st_netfd_t fd, std::vector<SyncPlatformData>& data_vec) { std::string body; ReadInfo(fd, body); if(body.empty()) { return false; } { DMXml xml; xml.Decode(body.c_str()); xml.GetRoot(); if(!xml.CheckNodeValid()) { WriteToLog("Xml Error"); return false; } { SyncPlatformData data; xml.GetRoot()->FindElement("SyncData"); if(!xml.CheckNodeValid()) { WriteToLog("Xml Error"); return false; } if (ParseData(xml, data)) { data_vec.push_back(data); } } while(xml.FindAllElement("SyncData")) { SyncPlatformData data; if (ParseData(xml, data)) { data_vec.push_back(data); } } } return true; }
void Teleinfo::readCallback(const char *data, size_t len) { boost::lock_guard<boost::mutex> l(readQueueMutex); if (!m_bEnableReceive) return; //receiving not enabled ParseData((const unsigned char*)data, static_cast<int>(len)); }
void StepManiaLanServer::UpdateClients() { //Go through all the clients and check to see if it is being used. //If so then try to get a backet and parse the data. for (unsigned int x = 0; x < Client.size(); ++x) if (CheckConnection(x) && (Client[x]->GetData(Packet) >= 0)) ParseData(Packet, x); }
void CurrentCostMeterSerial::readCallback(const char *data, size_t len) { boost::lock_guard<boost::mutex> l(readQueueMutex); if (!m_bEnableReceive) return; //receiving not enabled ParseData(data, static_cast<int>(len)); }
void BufferedEmailParser::FlushBuffer() { if (m_isMimeStream) { // parse full lines out of buffer size_t bytesHandled = ParseData(m_buffer.data(), m_buffer.size(), m_endOfStream); m_buffer.erase(0, bytesHandled); // update seenCR m_seenCR = m_buffer.empty() ? false : (*m_buffer.end() == '\r'); } else { ParseData(m_buffer.data(), m_buffer.size(), m_endOfStream); m_buffer.clear(); } if (m_endOfStream && !m_paused) { AsyncEmailParser::End(); } }
void NDHttpRequest::InData(const char *data, int size) { ndlbuf_write(&m_recvBuf, (char*)data, size, 0) ; while (m_parseStat < 3 && ParseData() > 0) { if (_getDataSize() ==0) { break ; } } }
void P1MeterTCP::Do_Work() { while (!m_stoprequested) { if ( (m_socket == INVALID_SOCKET)&& (!m_stoprequested) ) { sleep_seconds(1); time_t atime = mytime(NULL); struct tm ltime; localtime_r(&atime, <ime); if (ltime.tm_sec % 12 == 0) { mytime(&m_LastHeartbeat); } m_retrycntr++; if (m_retrycntr>=RETRY_DELAY) { m_retrycntr=0; if (!ConnectInternal()) { _log.Log(LOG_STATUS,"P1 Smart Meter: retrying in %d seconds...", RETRY_DELAY); continue; } } } else { unsigned char data[1028]; int bread=recv(m_socket,(char*)&data,sizeof(data),0); if (m_stoprequested) break; mytime(&m_LastHeartbeat); if ((bread==0)||(bread<0)) { _log.Log(LOG_ERROR,"P1 Smart Meter: TCP/IP connection closed!"); closesocket(m_socket); m_socket=INVALID_SOCKET; if (!m_stoprequested) { _log.Log(LOG_STATUS,"P1 Smart Meter: retrying in %d seconds...", RETRY_DELAY); m_retrycntr=0; continue; } } else { boost::lock_guard<boost::mutex> l(readQueueMutex); ParseData((const unsigned char*)&data,bread); } } } _log.Log(LOG_STATUS,"P1 Smart Meter: TCP/IP Worker stopped..."); }
void Session::RecvProc() { while(_alive == 1) { try { _sendStop = false; int len = recv(_clientSocket, _recvbuf, BLOCK_SIZE, 0); _sendStop = true; if(len <= 0) { printf("\nrecv failed with error: %d\n", WSAGetLastError()); _alive = 0; break; } int offset = 0; if(_recvSize == 0) { if(len < sizeof(PacketInfo)) continue; PacketInfo* response = (PacketInfo*)_recvbuf; if(response->starBites != 0x12345678) continue; if(response->stopBits != 0x87654321) continue; _recvSize = response->size; memcpy(_recvData, _recvbuf, sizeof(PacketInfo)); _recvOffset = sizeof(PacketInfo); offset = sizeof(PacketInfo); } int remain = min(len - offset, _recvSize - _recvOffset); if(remain > 0) { memcpy(_recvData + _recvOffset, _recvbuf + offset, remain); _recvOffset += remain; offset += remain; } if(_recvOffset >= _recvSize) { ParseData(); _recvOffset = 0; _recvSize = 0; } } catch(...) { printf("\nrecv failed with error: %d\n", WSAGetLastError()); _alive = 0; break; } } }