////////////////////////////////////////////////////////////////////// // 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; }
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; }
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; }