int ScreenCap::CreateCapturethread()
{
    int ret = RET_SUCESS;
    int w = QApplication::desktop()->width();
    int h = QApplication::desktop()->height();
    qDebug("screen rect,w:%d h:%d\n", w, h);

    if(RET_SUCESS != CreateTcpSocket())
    {
        qDebug("create tcp socket faild!!\n");
        return RET_FAIL;
    }

    pCapThread = new CapThread(w, h, NULL);
    qDebug() << "pCapThread start addr:" << pCapThread;
    //ctrl pthread  of capthread
    connect(this,SIGNAL(emitCtrlPthreadStart()),pCapThread,
            SLOT(SetStartThread()),Qt::QueuedConnection);
    connect(this,SIGNAL(emitCtrlPthreadStop()),pCapThread,
            SLOT(SetStopThread()),Qt::QueuedConnection);
    connect(this,SIGNAL(emitCtrlPthreadQuit()),pCapThread,
            SLOT(SetQuitThread()),Qt::QueuedConnection);

    return RET_SUCESS;
}
Esempio n. 2
0
BOOL CSSLTcpSocket::CreateSSLTcpSocketForClient()
{
	SSL_load_error_strings(); /*为打印调试信息作准备*/ 
	OpenSSL_add_ssl_algorithms(); /*初始化*/ 

	m_meth = (SSL_METHOD *)TLSv1_client_method(); /*采用什么协议(SSLv2/SSLv3/TLSv1)在此指定,TLSv1_server_method,SSLv23_server_method()*/ 

	m_ctx = SSL_CTX_new (m_meth);

	//设置为要求强制校验对方(客户端)证书SSL_VERIFY_PEER|SSL_VERIFY_FAIL_IF_NO_PEER_CERT
	SSL_CTX_set_verify(m_ctx,SSL_VERIFY_NONE,NULL); /*验证与否SSL_VERIFY_PEER*/ 
	//SSL_CTX_load_verify_locations(ctx,CACERT,NULL); /*若验证,则放置CA证书*/


	//RAND_seed

// 	if (!SSL_CTX_check_private_key(m_ctx)) {
// 		printf("密钥证书不匹配!\n");
// 	}

// 	SSL_CTX_set_cipher_list(m_ctx,"DES-CBC3-SHA"); 
// 	SSL_CTX_set_mode(m_ctx, SSL_MODE_AUTO_RETRY);

	CreateTcpSocket();
	
	m_ssl = SSL_new (m_ctx);
	SSL_set_fd (m_ssl, m_TcpSock);

	return FALSE;
}
Esempio n. 3
0
BOOL CSSLTcpSocket::CreateSSLTcpSocketForServer( LPCSTR pszCertFile , LPCSTR pszKeyFile )
{
	SSL_load_error_strings(); /*为打印调试信息作准备*/ 
	OpenSSL_add_ssl_algorithms(); /*初始化*/ 

	m_meth = (SSL_METHOD *)TLSv1_server_method(); /*采用什么协议(SSLv2/SSLv3/TLSv1)在此指定,TLSv1_server_method,SSLv23_server_method()*/ 

	m_ctx = SSL_CTX_new (m_meth);

	//设置为要求强制校验对方(客户端)证书SSL_VERIFY_PEER|SSL_VERIFY_FAIL_IF_NO_PEER_CERT
	SSL_CTX_set_verify(m_ctx,SSL_VERIFY_NONE,NULL); /*验证与否SSL_VERIFY_PEER*/ 
	//SSL_CTX_load_verify_locations(ctx,CACERT,NULL); /*若验证,则放置CA证书*/

	if (SSL_CTX_use_certificate_file(m_ctx, pszCertFile, SSL_FILETYPE_PEM) <= 0) 
	{
		printf("加载证书失败!\n");
		
	}

	if (SSL_CTX_use_PrivateKey_file(m_ctx, pszKeyFile, SSL_FILETYPE_PEM) <= 0)
	{
		printf("加载私钥失败!\n");
		
	}

	if (!SSL_CTX_check_private_key(m_ctx)) {
		printf("密钥证书不匹配!\n");
	}

	SSL_CTX_set_cipher_list(m_ctx,"DES-CBC3-SHA"); 
	SSL_CTX_set_mode(m_ctx, SSL_MODE_AUTO_RETRY);

	return CreateTcpSocket();
}
void ScreenCap::on_pushButtonStart_clicked()
{
    qDebug("here!\n");
    qDebug("mNo:%d",mNo);
    if(0 == ((mNo++)%2)) /* 传输结束 */
    {
        qDebug("here!1111111\n");
        StopActionSets();
    }
    else /* 开始传输 */
    {
        qDebug() << " To start!!";
        qDebug() << " isStarted:" << isStarted;
        BtnStopPix();//显示停止图片

        if(STAT_RESTOP == isStarted)//需要重新连接
        {
            showTextConnecting();
            if(RET_SUCESS != CreateTcpSocket())//重新建立socket
            {
                qDebug("create tcp socket faild!!\n");
                BtnStartPix();//显示开始图片
                showTextClickToStart();//显示点击传输
                mNo = NO_FIRST;//
                qDebug() << " No started!!";
                return;
            }
            qDebug("recreate tcp socket ok!\n");
            emit emitCtrlPthreadStart();
            pNetSendTimer->start();//发送数据定时器



            showTextTransfering();//连接成功
            qDebug() << " restarting!!";

            isStarted = STAT_RESTART;
            return;
        }

        //开始传输
        if(STAT_STOPPED == CaptureScreenOn())//建立连接
        {
            BtnStartPix();//显示开始图片
            showTextClickToStart();//显示点击传输
            mNo = NO_FIRST;//
            qDebug() << " No started!!";
        }
        else
        {
            showTextTransfering();//连接成功
            qDebug() << " starting!!";
        }

    }
}
//return values:
// 0 - succeed
// 1 - non-block,结果pending,调用者随后需要调用IsSocketWritable来查询结果;
//其它 - 失败
DWORD CTcpClientSocketHelper::Init(DWORD dwIp, DWORD dwPort, WORD wBindLocalPort/*=0*/,
								   BOOL bBlock/*=TRUE*/,DWORD dwConnectTimeOut/*=0*/)
{
	m_dwServerIp = dwIp;
	m_dwServerPort = (WORD)dwPort;
	
	if (!CreateTcpSocket(bBlock))
	{
		return 2;
	}

	return ConnectToServer(wBindLocalPort, dwConnectTimeOut);
}
BOOL CTcpServerSocketHelper::CreateListenSocket(DWORD dwListenPort/*=0*/)
{
	m_dwListenPort = dwListenPort;

	if (!CreateTcpSocket(TRUE))
	{
		return FALSE;
	}

	BOOL bOpt = TRUE;
	::setsockopt (m_Socket, SOL_SOCKET, SO_REUSEADDR, (const char*)&bOpt, sizeof (bOpt));

	if (!Bind())
	{
		return FALSE;
	}

	if (!Listen())
	{
		return FALSE;
	}

	return TRUE;
}
DWORD CTcpServerSocketHelper::Start(ITcpServerSocketHelper_Event *pEvent,
									DWORD dwListenPort/*=0*/,BOOL bReadData/*=TRUE*/)
{
	DWORD dwResult = -1;
	DWORD threadID = 0;

	m_pEvent = pEvent;
	m_dwListenPort = dwListenPort;

	if (!CreateTcpSocket(TRUE))
	{
		dwResult = 1;
		goto Exit0;
	}

	BOOL bOpt = TRUE;
	::setsockopt (m_Socket, SOL_SOCKET, SO_REUSEADDR, (const char*)&bOpt, sizeof (bOpt));

	if (!Bind())
	{
		dwResult = 2;
		goto Exit0;
	}

	if (!Listen())
	{
		dwResult = 3;
		goto Exit0;
	}

	m_hTerminateAcceptThreadEvent = ::CreateEvent(NULL, TRUE, FALSE,NULL);
	if (!m_hTerminateAcceptThreadEvent)
	{
		dwResult = 4;
		goto Exit0;
	}

	m_hAcceptThreadHandle = (HANDLE)::CreateThread( NULL, 0, 
		(LPTHREAD_START_ROUTINE)_AcceptThreadProc, this, 0, &threadID );
	if (!m_hAcceptThreadHandle)
	{
		dwResult = 5;
		goto Exit0;
	}


	if (bReadData)
	{
		m_hTerminateReadDataThreadEvent = ::CreateEvent(NULL, TRUE, FALSE,NULL);
		if (!m_hTerminateReadDataThreadEvent)
		{
			dwResult = 6;
			goto Exit0;
		}

		m_hReadDataThreadHandle = (HANDLE)::CreateThread( NULL, 0, 
			(LPTHREAD_START_ROUTINE)_ReadDataThreadProc, this, 0, &threadID );
		if (!m_hReadDataThreadHandle)
		{
			goto Exit0;
		}
	}

	dwResult = 0;
Exit0:
	if (0 != dwResult)
	{
		Stop();
	}

	if (dwResult == 0)
	{
		return m_dwListenPort;
	}
	return (DWORD)-1;
}