Example #1
0
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;
}
Example #2
0
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;
}
Example #3
0
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.");
}