Example #1
0
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);
}
Example #2
0
void QListenerThread::run( )
{
    QString strLog = objectName( ) + " Started.";
    SendLog( strLog, true );
    InitializeSubThread( );
    exec( ); // Event Loop
}
Example #3
0
void QListenerThread::HandleAcceptError( QAbstractSocket::SocketError socketError )
{
    QTcpServer* pServer =( QTcpServer* ) sender( );
    Q_UNUSED( socketError )
    QString strLog = pServer->errorString( );
    SendLog( strLog, true );
}
Example #4
0
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 );
}
Example #5
0
void CReceiverThread::run( )
{
    QString strLog = objectName( ) + " Started.";
    SendLog( strLog, true );
    Initialize( );
    exec( );
}
Example #6
0
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;
}
Example #8
0
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 );
}
Example #9
0
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;
}
Example #10
0
int CLogThread::run()
{
    Link();
    CheckErrorLogs();

    while(m_bRun)
    {
        m_sem.wait(10000);
        SendLog();
        checkRollOver();
    }
    Release();
    return 0;
}
Example #11
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);
}
Example #12
0
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 );
}
Example #13
0
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 );
}
Example #14
0
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);
}
Example #15
0
/**
 * @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;
}