void upgrade(int lib_code, int app_code ,int flag,const char* dir)//flag = 1:just lib { char cmd[512]; if(flag & 1 && lib_md5) { snprintf(cmd, sizeof(cmd), "echo \"%s %s/%s\" > %s/%s.md5",lib_md5,dir,lib_name,dir,lib_name); system(cmd); } if(flag & 2 && app_md5) { snprintf(cmd, sizeof(cmd), "echo \"%s %s/%s\" > %s/%s.md5",app_md5,dir,app_name,dir,app_name); system(cmd); } //printf("upgrading...\n"); printf("%d %d %d\n",lib_code,app_code,flag); snprintf(cmd, sizeof(cmd), "/etc/init.d/upgrade.sh %d %d %d",lib_code ,app_code,flag); int ret = system(cmd); //判断时间system执行脚本的返回值 if(ret != -1)//system函数执行成功 { if(WIFEXITED(ret) && 0 == WEXITSTATUS(ret)) { printf("update suceess,update version code\n"); sprintf(cmd,"update success lib:%d to %d;app:%d to %d\n",lib_cur_version,lib_code,app_cur_version,app_code); SendLog(cmd,cid); lib_cur_version = lib_code; app_cur_version = app_code; return; } } sprintf(cmd,"update failed lib:%d to %d;app:%d to %d\n",lib_cur_version,lib_code,app_cur_version,app_code); SendLog(cmd,cid); }
void QListenerThread::run( ) { QString strLog = objectName( ) + " Started."; SendLog( strLog, true ); InitializeSubThread( ); exec( ); // Event Loop }
void QListenerThread::HandleAcceptError( QAbstractSocket::SocketError socketError ) { QTcpServer* pServer =( QTcpServer* ) sender( ); Q_UNUSED( socketError ) QString strLog = pServer->errorString( ); SendLog( strLog, true ); }
void CReceiverThread::ProcessOpenPortEvent( QString &strCOMx, Win_QextSerialPort *pPort ) { if ( pPort->portName( ) == strCOMx && IsOpen( pPort ) ) { return; } if ( IsOpen( pPort ) ) { pPort->close( ); } pPort->setQueryMode( Win_QextSerialPort::EventDriven ); pPort->setTimeout( 500 ); pPort->setPortName( strCOMx ); bool bRet = pPort->open( QIODevice::ReadWrite ); pPort->setBaudRate( BAUD9600 ); pPort->setDataBits( DATA_8 ); pPort->setParity( PAR_NONE ); pPort->setStopBits( STOP_1 ); pPort->setFlowControl( FLOW_OFF ); QString strLog = QString( "%1 is opened %2" ).arg( strCOMx, bRet ? "Successfully." : QString( "Unsuccessfully. %1" ).arg( pPort->errorString( ) ) ); SendLog( strLog, true ); }
void CReceiverThread::run( ) { QString strLog = objectName( ) + " Started."; SendLog( strLog, true ); Initialize( ); exec( ); }
void QMulticastThread::run( ) { QString strLog = objectName() + " Started."; SendLog( strLog, true ); InitializeSubThread( ); exec() ; }
/** * @ingroup SipTest * @brief 통화 연결 후, 통화 종료할 때까지 대기한다. * @param pszTestName 테스트 이름 * @param clsRtp RTP 정보 * @param clsRoute SIP 서버 정보 * @returns 성공하면 통화 연결 후, 종료되기까지의 시간을 mili second 단위로 리턴하고 그렇지 않으면 -1 를 리턴한다. */ int StartCall( const char * pszTestName, CSipCallRtp & clsRtp, CSipCallRoute & clsRoute ) { std::string strCallId; SendLog( "%s : Start", pszTestName ); if( gclsSipUserAgent.StartCall( gclsSetup.m_strCallerId.c_str(), gclsSetup.m_strCalleeId.c_str(), &clsRtp, &clsRoute, strCallId ) == false ) { SendLog( "gclsSipUserAgent.StartCall error" ); return -1; } gclsTestInfo.m_strCallerCallId = strCallId; int iMiliSecond = WaitUntilAllCallStop(); SendLog( "%s : Stop", pszTestName ); return iMiliSecond; }
void CReceiverThread::ProcessClosePortEvent( QString &strCOMx, Win_QextSerialPort *pPort ) { if ( !IsOpen( pPort ) ) { return; } pPort->close(); QString strLog = QString( "%1 is closed." ).arg( strCOMx ); SendLog( strLog, true ); }
bool CBanwordManager::Initialize(TBanwordTable * p, WORD wSize) { m_hashmap_words.clear(); for (WORD i = 0; i < wSize; ++i, ++p) m_hashmap_words[p->szWord] = true; char szBuf[256]; snprintf(szBuf, sizeof(szBuf), "Banword reloaded! (total %zu banwords)", m_hashmap_words.size()); SendLog(szBuf); return true; }
int CLogThread::run() { Link(); CheckErrorLogs(); while(m_bRun) { m_sem.wait(10000); SendLog(); checkRollOver(); } Release(); return 0; }
static void ServerLoop(SOCKET s) { SOCKET connected; int active, quit = 0; message_t msg; do { if((connected = accept(s, NULL, NULL)) == INVALID_SOCKET) continue; if(ServerHandshake(connected) == 1) { active = 1; do { msg = CryptRecvMsg(connected); switch(msg.msg) { case MSG_PING: CryptSendMsg(connected, MSG_PONG, 0); break; case MSG_QUIN: CryptSendMsg(connected, MSG_QUIN, ilevel); break; case MSG_SLOG: CryptSendMsg(connected, MSG_DATA, 0); SendLog(connected); break; case MSG_QUIT: quit = 1; CryptSendMsg(connected, MSG_ACK, 0); case MSG_ERR: active = 0; break; } } while(active); } closesocket(connected); if(conn.dh_remote_key) { free(conn.dh_remote_key); conn.dh_remote_key = NULL; } if(conn.dh_shared_key) { free(conn.dh_shared_key); conn.dh_shared_key = NULL; } if(conn.nonce) { free(conn.nonce); conn.nonce = NULL; } } while(!quit); }
void QListenerThread::StartServer( QThreadEvent *pEvent ) { quint16 nPort = pEvent->GetListenPort( ); qint32 nMaxConn = pEvent->GetMaxPendingConnection( ); pTcpServer->setMaxPendingConnections( nMaxConn ); bool bRet = pTcpServer->listen( QHostAddress::Any, nPort ); QString strLog = QString( "Start server port %1 %2" ).arg( QString::number( nPort ), bRet ? "Successfully." : QString( "Unsuccessfully. %1" ).arg( pTcpServer->errorString( ) ) ); SendLog( strLog, true ); ConnectAccept( true ); }
void QListenerThread::StopServer( ) { if ( !pTcpServer->isListening( ) ) { return; } quint16 nPort = pTcpServer->serverPort( ); pTcpServer->close( ); QString strLog = QString( "Stop server port %1." ).arg( nPort ); SendLog( strLog, true ); ConnectAccept( false ); }
void* upgradeProc(void* arg) { int period = 30; if(arg != NULL) { period = *((int*)arg); } if(period < 0 || period > 60) period = 30; char client_host[16] = {0}; int addr_size; struct sockaddr_in addr; struct sockaddr_in client; struct timeval tv = {period,0}; addr.sin_family = AF_INET; addr.sin_addr.s_addr = INADDR_ANY; addr.sin_port = htons(54054); int fd = socket(AF_INET,SOCK_STREAM,0); int client_fd = -1; int flag = 0; int optval = 1; int ret = 0; if(fd != -1) { do{ if(fd == -1) break; setsockopt(fd,SOL_SOCKET,SO_REUSEADDR,(char*)&optval,sizeof(optval));//设置端口复用 if(bind(fd,(struct sockaddr*)&addr,sizeof(struct sockaddr_in)) == -1) break; if(listen(fd,1) == -1)//监听队列长度为1,防止多次连接 break; while(1) { printf("wait for client connect...\n"); client_fd = accept(fd,(struct sockaddr*)&client,&addr_size); if(client_fd == -1) { perror("upgrade server accept failed"); usleep(100); continue; } flag = 0; lyUpdating = 1; setsockopt(client_fd,SOL_SOCKET,SO_SNDTIMEO,&tv,sizeof(tv)); setsockopt(client_fd,SOL_SOCKET,SO_RCVTIMEO,&tv,sizeof(tv)); inet_ntop(AF_INET,&client.sin_addr,client_host,sizeof(client_host)); printf("accept success!client ip = %s\n",client_host); //发送当前版本给客户端 pthread_mutex_lock(&mutex); if(sendCurrentVersion(client_fd) != 0) { close(client_fd); client_fd = -1; continue; } //接收数据 ret = recvData(client_fd,&flag); close(client_fd); if(ret != 0) { printf("\033[31mupdate failed!\033[0m\n"); } else { printf("\033[32mupdate success!\033[0m\n"); if(flag & 0x01) { strcpy(lib_md5,cmdLibHeader.md5); } if(flag & 0x02) { strcpy(app_md5,cmdAppHeader.md5); } upgrade(cmdLibHeader.version_code,cmdAppHeader.version_code,flag,dir); } pthread_mutex_unlock(&mutex); } }while(0); perror(""); close(fd); } printf("upgrade function exit\n"); SendLog("upgrade server start failed",cid); }
/** * @ingroup SipTest * @brief 테스트 쓰레드 * @param lpParameter * @returns 0 을 리턴한다. */ THREAD_API SipTestThread( LPVOID lpParameter ) { CSipCallRtp clsRtp; CSipCallRoute clsRoute; std::string strCallId; int iMiliSecond; gbTestThreadRun = true; if( gclsTestInfo.CreateRtp() == false ) { SendLog( "gclsTestInfo.CreateRtp error" ); goto FUNC_END; } clsRtp.m_strIp = gclsSipUserAgent.m_clsSipStack.m_clsSetup.m_strLocalIp; clsRtp.m_iPort = gclsTestInfo.m_clsCallerRtp.m_iPort; clsRtp.m_iCodec = 0; #ifdef USE_MEDIA_LIST if( gclsSetup.m_bUseTwoMedia ) { CSdpMedia sdpAudio( "audio", gclsTestInfo.m_clsCallerRtp.m_iPort, "RTP/AVP" ); CSdpMedia sdpVideo( "video", gclsTestInfo.m_clsCallerVideoRtp.m_iPort, "RTP/AVP" ); sdpAudio.AddAttribute( "rtpmap", "0 PCMU/8000" ); sdpVideo.AddAttribute( "rtpmap", "97 H264/90000" ); sdpVideo.AddAttribute( "fmtp", "97 profile-level-id=42" ); clsRtp.m_clsMediaList.push_back( sdpAudio ); clsRtp.m_clsMediaList.push_back( sdpVideo ); } #endif clsRoute.m_strDestIp = gclsSetup.m_strSipServerIp; clsRoute.m_iDestPort = gclsSetup.m_iSipServerPort; // 통화 연결 테스트 gclsTestInfo.m_eTestType = E_TEST_ESTABLISHED; iMiliSecond = StartCall( "Call Established Test", clsRtp, clsRoute ); if( iMiliSecond == -1 ) goto FUNC_END; if( gclsTestInfo.m_bResult == false ) { SendLog( "Call Established Test : ERROR" ); goto FUNC_END; } SendLog( "Call Established Test : OK" ); // 통화 취소 테스트 gclsTestInfo.m_eTestType = E_TEST_CANCEL; iMiliSecond = StartCall( "Call Cancel Test", clsRtp, clsRoute ); if( iMiliSecond == -1 ) goto FUNC_END; if( iMiliSecond <= CALL_ROUTE_MILI_SECOND ) { SendLog( "Call Cancel Test : OK" ); } else { SendLog( "Call Cancel Test : ERROR" ); } // 통화 거절 테스트 gclsTestInfo.m_eTestType = E_TEST_DECLINE; iMiliSecond = StartCall( "Call Decline Test", clsRtp, clsRoute ); if( iMiliSecond == -1 ) goto FUNC_END; if( iMiliSecond <= CALL_ROUTE_MILI_SECOND ) { SendLog( "Call Decline Test : OK" ); } else { SendLog( "Call Decline Test : ERROR" ); } if( gclsSetup.m_strCalleeId2.empty() == false ) { // 통화 전달 테스트 SendLog( "Call Blind Transfer Test : Start" ); gclsTestInfo.m_eTestType = E_TEST_TRANSFER; gclsTestInfo.m_bRtpThreadEnd = false; if( gclsSipUserAgent.StartCall( gclsSetup.m_strCallerId.c_str(), gclsSetup.m_strCalleeId.c_str(), &clsRtp, &clsRoute, strCallId ) == false ) { SendLog( "gclsSipUserAgent.StartCall error" ); return -1; } gclsTestInfo.m_strCallerCallId = strCallId; while( gclsTestInfo.m_bRtpThreadEnd == false ) { if( gbStopTestThread ) break; Sleep(20); } if( gclsTestInfo.m_bResult == false ) { SendLog( "Call Blind Transfer Test : ERROR" ); goto FUNC_END; } SendLog( "Call Blind Transfer Test : Call success => Refer test" ); gclsTestInfo.m_eTestType = E_TEST_TRANSFER_CALL; gclsTestInfo.m_eTransferResult = E_TR_NULL; gclsSipUserAgent.TransferCallBlind( gclsTestInfo.m_strCallerCallId.c_str(), gclsSetup.m_strCalleeId2.c_str() ); while( gclsTestInfo.m_eTransferResult == E_TR_NULL ) { if( gbStopTestThread ) break; Sleep(20); } if( gclsTestInfo.m_eTransferResult == E_TR_ERROR ) { SendLog( "Call Blind Transfer Test : ERROR" ); goto FUNC_END; } WaitUntilAllCallStop(); SendLog( "Call Blind Transfer Test : OK" ); // Screened Transfer Test SendLog( "Call Screened Transfer Test : Start" ); std::string strFirstCallId, strSecondCall; gclsTestInfo.m_eTestType = E_TEST_TRANSFER; gclsTestInfo.m_bRtpThreadEnd = false; if( gclsSipUserAgent.StartCall( gclsSetup.m_strCallerId.c_str(), gclsSetup.m_strCalleeId.c_str(), &clsRtp, &clsRoute, strCallId ) == false ) { SendLog( "gclsSipUserAgent.StartCall error" ); return -1; } strFirstCallId = strCallId; gclsTestInfo.m_strCallerCallId = strCallId; while( gclsTestInfo.m_bRtpThreadEnd == false ) { if( gbStopTestThread ) break; Sleep(20); } if( gclsTestInfo.m_bResult == false ) { SendLog( "Call Screened Transfer Test : ERROR" ); goto FUNC_END; } SendLog( "Call Screened Transfer Test : second call start" ); gclsTestInfo.m_eTestType = E_TEST_TRANSFER_CALL; gclsTestInfo.m_bRtpThreadEnd = false; if( gclsSipUserAgent.StartCall( gclsSetup.m_strCallerId.c_str(), gclsSetup.m_strCalleeId2.c_str(), &clsRtp, &clsRoute, strSecondCall ) == false ) { gclsSipUserAgent.StopCall( gclsTestInfo.m_strCallerCallId.c_str() ); SendLog( "gclsSipUserAgent.StartCall error" ); return -1; } while( gclsTestInfo.m_bRtpThreadEnd == false ) { if( gbStopTestThread ) break; Sleep(20); } gclsTestInfo.m_eTransferResult = E_TR_NULL; gclsTestInfo.m_eTestType = E_TEST_SCREENED_TRANSFER_CALL; SendLog( "Call Screened Transfer Test : send refer" ); if( gclsSipUserAgent.TransferCall( strFirstCallId.c_str(), strSecondCall.c_str() ) == false ) { SendLog( "gclsSipUserAgent.TransferCall error" ); return -1; } WaitUntilAllCallStop(); SendLog( "Call Screened Transfer Test : OK" ); } FUNC_END: gclsSipUserAgent.StopCallAll(); gclsTestInfo.CloseRtp(); gbTestThreadRun = false; SendMessage( ghWnd, SIP_TEST_ID, WM_TEST_END, 0 ); return 0; }