예제 #1
0
void stledgerentry::setsletype ()
{
    mformat = ledgerformats::getinstance().findbytype (
        static_cast <ledgerentrytype> (getfieldu16 (sfledgerentrytype)));

    if (mformat == nullptr)
        throw std::runtime_error ("invalid ledger entry type");

    mtype = mformat->gettype ();
    if (!settype (mformat->elements))
    {
        writelog (lswarning, serializedledger)
            << "ledger entry not valid for type " << mformat->getname ();
        writelog (lswarning, serializedledger) << getjson (0);
        throw std::runtime_error ("ledger entry not valid for type");
    }
}
예제 #2
0
void cleanupTrace(void* id) {
  if (id == NULL || activeTraceCount == 0) {
    return;
  }
  size_t i;
  printf("Cleanup called.\n");
  for (i = activeTraceCount - 1; i >= 0; i--) {
    if (activeTraces[i] == id) {
      printf("Cleanup found item to free\n");
      if (activeTraces[i]->sent > 0 && activeTraces[i]->recordedHops > 0) {
        printf("writing to log.\n");
        getjson(logbuffer, id);
        fprintf(logfile, "%s", logbuffer);
      }
      activeTraces[i] = activeTraces[activeTraceCount - 1];
      activeTraceCount -= 1;
      free(id);
      break;
    }
  }

};