Beispiel #1
0
      void
      storeInDB(const IMC::PlanSpecification* spec)
      {
        m_plan_info.plan_size = spec->getPayloadSerializationSize();
        m_plan_info.plan_id = spec->plan_id;
        m_plan_info.change_time = Clock::getSinceEpoch();
        m_plan_info.change_sid = spec->getSource();
        m_plan_info.change_sname = resolveSystemId(m_plan_info.change_sid);

        Database::Blob plan_data(m_plan_info.plan_size);
        spec->serializeFields((uint8_t*)&plan_data[0]);

        m_plan_info.md5.resize(16);
        MD5::compute((uint8_t*)&plan_data[0], m_plan_info.plan_size, (uint8_t*)&m_plan_info.md5[0]);

        m_db->beginTransaction();

        int count = 0;
        try
        {
          *m_delete_plan_stmt << m_plan_info.plan_id;
          m_delete_plan_stmt->execute(&count);
          m_delete_plan_stmt->reset();

          *m_insert_plan_stmt << m_plan_info.plan_id
                              << m_plan_info.change_time
                              << m_plan_info.change_sid
                              << m_plan_info.change_sname
                              << m_plan_info.md5
                              << plan_data;
          m_insert_plan_stmt->execute();
          onChange(m_plan_info.change_time, m_plan_info.change_sid, m_plan_info.change_sname);
        }
        catch (std::runtime_error& e)
        {
          onFailure(e.what());
          m_db->rollback();
        }

        m_db->commit();

        if (m_args.trace)
          m_plan_info.toText(std::cerr);

        m_reply.arg.set(m_plan_info);
        onSuccess(count ? DTR("OK (updated)") : DTR("OK (new entry)"));
      }
Beispiel #2
0
static int
externalEntityRefStream(XML_Parser parser,
                        const XML_Char *context,
                        const XML_Char *base,
                        const XML_Char *systemId,
                        const XML_Char *publicId)
{
  XML_Char *s;
  const XML_Char *filename;
  int ret;
  XML_Parser entParser = XML_ExternalEntityParserCreate(parser, context, 0);
  filename = resolveSystemId(base, systemId, &s);
  XML_SetBase(entParser, filename);
  ret = processStream(filename, entParser);
  free(s);
  XML_ParserFree(entParser);
  return ret;
}
Beispiel #3
0
static int
externalEntityRefFilemap(XML_Parser parser,
                         const XML_Char *context,
                         const XML_Char *base,
                         const XML_Char *systemId,
                         const XML_Char *publicId)
{
  int result;
  XML_Char *s;
  const XML_Char *filename;
  XML_Parser entParser = XML_ExternalEntityParserCreate(parser, context, 0);
  PROCESS_ARGS args;
  args.retPtr = &result;
  args.parser = entParser;
  filename = resolveSystemId(base, systemId, &s);
  XML_SetBase(entParser, filename);
  if (!filemap(filename, processFile, &args))
    result = 0;
  free(s);
  XML_ParserFree(entParser);
  return result;
}