PDL_HANDLE ideMsgLog::getFD() { if ( mEnabled == ID_TRUE ) { if ( checkExist() == ID_FALSE ) { IDE_TEST( createFileAndHeader() != IDE_SUCCESS ); } else { if ( isSameFile( mFD, mPath ) == ID_TRUE ) { /* do nothing */ } else { (void)close(); IDE_TEST( open( mDebug ) != IDE_SUCCESS ); IDE_TEST( writeWarningMessage() != IDE_SUCCESS ); } } } else { /* do nothing */ } return mFD; IDE_EXCEPTION_END; return PDL_INVALID_HANDLE; }
IDE_RC ideMsgLog::rotate(void) { idBool sNeedWriteMessage = ID_FALSE; if(mEnabled == ID_TRUE) { size_t sOffset; SInt sRotating; /* For IDE_ERR, do not perform rotation */ IDE_TEST_RAISE(mSelf == IDE_ERR, IAMERR); sRotating = acpAtomicCas32(&mRotating, 1, 0); if(sRotating == 1) { /* spin */ do { idlOS::thr_yield(); sRotating = acpAtomicCas32(&mRotating, 1, 0); } while(sRotating == 1); } else { /* fall through */ } if(checkExist() == ID_FALSE) { IDE_TEST(createFileAndHeader() != IDE_SUCCESS); } else { if ( isSameFile( mFD, mPath ) == ID_TRUE ) { /* do nothing */ } else { /* file is modified so close and open */ (void)close(); IDE_TEST( open( mDebug ) != IDE_SUCCESS ); sNeedWriteMessage = ID_TRUE; } if(mMaxNumber > 0) { sOffset = (size_t)idlOS::lseek(mFD, 0, SEEK_END); if(sOffset >= mSize) { IDE_TEST(closeAndRename() != IDE_SUCCESS); mCurNumber = (mCurNumber + 1) % mMaxNumber; IDE_TEST(createFileAndHeader() != IDE_SUCCESS); } else { /* do not create file */ } } else { /* fall through */ } if ( sNeedWriteMessage == ID_TRUE ) { IDE_TEST( writeWarningMessage() != IDE_SUCCESS ); } else { /* do nothing */ } } } else { /* pass */ } /* For IDE_ERR, do not perform rotation */ IDE_EXCEPTION_CONT(IAMERR); return IDE_SUCCESS; IDE_EXCEPTION_END; unrotate(); return IDE_FAILURE; }
void PIRSession::downloadWorker() { double start = omp_get_wtime(); unsigned int msg_size = 0; // Allocate an array with d dimensions with pointers to arrays of n[i] lwe_query elements generator->initQueriesBuffer(); #ifdef PERFTIMERS double vtstart = omp_get_wtime(); bool wasVerbose = false; unsigned int previous_elts = 0; unsigned int total_elts = 0; for (unsigned int k = 0 ; k < pirParam.d ; k++) total_elts += pirParam.n[k]; #endif try{ for (unsigned int j = 0 ; j < pirParam.d ; j++) { // Compute and allocate the size in bytes of a query ELEMENT of dimension j msg_size = cryptoMethod->getPublicParameters().getQuerySizeFromRecLvl(j+1) / 8; char buf[msg_size]; boost::asio::socket_base::receive_buffer_size opt(65535); sessionSocket.set_option(opt); auto boost_buffer = boost::asio::buffer(buf,msg_size); // boost_buffer = new boost::asio::buffer(buf, msg_size); #ifdef DEBUG cout << "PIRSession: Size of the query element to be received is " << msg_size << endl; cout << "PIRSession: Number of query elements to be received is " << pirParam.n[j] << endl; #endif // Iterate over all the elements of the query corresponding to the j-th dimension for (unsigned int i = 0; i < pirParam.n[j]; i++) { if (i==0 && j == 0) cout << "PIRSession: Waiting for query elements ..." << endl; // Get a query element //( async_read(sessionSocket, boost_buffer,boost::bind(&blo,boost::asio::placeholders::error)) ); if (read(sessionSocket, boost_buffer) < msg_size ) writeWarningMessage(__FUNCTION__, "Query element not entirely recieved"); // std::cout <<"PIRSession: " << total_elts << " query elements received in " << omp_get_wtime() - start << std::endl; // Allocate the memory for the element, copy it, and point to it with the query buffer if (i==0 && j == 0) cout << "PIRSession: Starting query element reception" << endl; #ifdef PERFTIMERS // Give some feedback if it takes too long double vtstop = omp_get_wtime(); if (vtstop - vtstart > 1) { vtstart = vtstop; previous_elts = 0; for (unsigned int k = 0 ; k < j ; k++) previous_elts += pirParam.n[k]; std::cout <<"PIRSession: Query element " << i+1+previous_elts << "/" << total_elts << " received\r" << std::flush; wasVerbose = true; } #endif generator->pushQuery(buf, msg_size, j, i); } } }catch (std::exception const& ex) { exitWithErrorMessage(__FUNCTION__, string(ex.what())); return; } std::cout <<"PIRSession: Query element " << total_elts << "/" << total_elts << " received" << std::endl; std::cout <<"PIRSession: " << total_elts << " query elements received in " << omp_get_wtime() - start << std::endl; // All the query elements received, unlock reply generation generator->mutex.unlock(); // Output we are done //writeWarningMessage(__FUNCTION__, "done."); }