Esempio n. 1
0
//////////////////////////////////////////////////////////////////////
// CShareMonkeyData thread run
void CShareMonkeyData::OnRun()
{
	Sleep( 50 );	// Display "Please wait..." message
	while ( m_hInternet != NULL )
	{
		m_pSection.Lock();

		if ( BuildRequest() )
		{
			if ( ExecuteRequest() )
			{
				if ( DecodeResponse( m_sStatus ) )
				{
					NotifyWindow();
					m_sStatus.Empty();
				}
				else
				{
					if ( m_hInternet == NULL ) break;
					NotifyWindow( (LPCTSTR)m_sStatus );
				}
				break;
			}
			else if ( ++m_nFailures >= 3 )
			{
				if ( m_hInternet == NULL ) break;
				m_sStatus = L"Failed";
				NotifyWindow( (LPCTSTR)m_sStatus );
				break;
			}
			else
			{
				if ( m_hInternet == NULL ) break;
				if ( m_hRequest ) InternetCloseHandle( m_hRequest );
				m_hRequest = NULL;
				m_sStatus = L"Failed. Retrying...";
				if ( ! NotifyWindow( (LPCTSTR)m_sStatus ) ) break;
				Sleep( 1000 );
			}
		}

		if ( m_hRequest ) InternetCloseHandle( m_hRequest );
		m_hRequest = NULL;
		m_sResponse.Empty();

		Sleep( min( m_nDelay, 500ul ) );
	}

	if ( m_hSession ) InternetCloseHandle( m_hSession );
	m_hSession = NULL;

	if ( m_hInternet ) InternetCloseHandle( m_hInternet );
	m_hInternet = NULL;
}
Esempio n. 2
0
Message *Message_Decode(char *data, size_t len, struct PendingResponses *pending)
{
    assert(data != NULL && "NULL data pointer");

    BNode *dict = NULL;
    Message *message = calloc(1, sizeof(Message));
    check_mem(message);

    dict = BDecode(data, len);

    if (dict == NULL || dict->type != BDictionary)
    {
        BNode_Destroy(dict);
        message->type = MUnknown;
        message->errors |= MERROR_UNKNOWN_TYPE;
        return message;
    }

    char y = GetMessageType(dict);

    int rc = 0;

    switch(y)
    {
    case 'q':
        rc = DecodeQuery(message, dict);
        check(rc == 0, "DecodeQuery failed");
	break;
    case 'r':
        rc = DecodeResponse(message, dict, pending);
        check(rc == 0, "DecodeResponse failed");
	break;
    case 'e':
        rc = DecodeError(message, dict);
        check(rc == 0, "DecodeError failed");
	break;
    default:
        message->errors |= MERROR_UNKNOWN_TYPE;
	break;
    }

    BNode_Destroy(dict);

    return message;
error:
    BNode_Destroy(dict);
    return NULL;
}
Esempio n. 3
0
void CBitprintsDownloader::OnRun()
{
	while ( m_hInternet != NULL )
	{
		m_pSection.Lock();

		if ( m_pFiles.IsEmpty() )
		{
			m_pSection.Unlock();
			break;
		}

		m_nFileIndex = m_pFiles.RemoveHead();

		m_pSection.Unlock();

		m_pDlg->OnNextFile( m_nFileIndex );

		if ( BuildRequest() )
		{
			m_pDlg->OnRequesting( m_nFileIndex, m_sFileName );

			if ( ExecuteRequest() )
			{
				if ( DecodeResponse() )
				{
					m_pDlg->OnSuccess( m_nFileIndex );
				}
				else
				{
					if ( m_hInternet == NULL ) break;
					m_pDlg->OnFailure( m_nFileIndex, L"Not Found" );
				}
			}
			else if ( ++m_nFailures >= 3 )
			{
				if ( m_hInternet == NULL ) break;
				m_pDlg->OnFailure( m_nFileIndex, L"Aborting" );
				break;
			}
			else
			{
				if ( m_hInternet == NULL ) break;

				if ( m_hRequest ) InternetCloseHandle( m_hRequest );
				m_hRequest = NULL;

				m_pDlg->OnFailure( m_nFileIndex, L"Failed" );

				Sleep( 1000 );
			}
		}

		m_pDlg->OnFinishedFile( m_nFileIndex );

		if ( m_hRequest ) InternetCloseHandle( m_hRequest );
		m_hRequest = NULL;

		m_sResponse.Empty();

		if ( m_pXML ) delete m_pXML;
		m_pXML = NULL;

		Sleep( min( m_nDelay, 500ul ) );
	}

	if ( m_hSession != NULL && ! m_bFinished ) InternetCloseHandle( m_hSession );
	m_hSession = NULL;

	m_bFinished = TRUE;
}