当前位置: 首页>>代码示例>>C++>>正文


C++ XML::error方法代码示例

本文整理汇总了C++中XML::error方法的典型用法代码示例。如果您正苦于以下问题:C++ XML::error方法的具体用法?C++ XML::error怎么用?C++ XML::error使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在XML的用法示例。


在下文中一共展示了XML::error方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: load_xml

int GatherPolicy::load_xml(void)
{
  XML xml;

  if (xml.create(rule_file_) < 0) {
    strncpy(err_, xml.error(), sizeof(err_));
    return -1;
  }

  char path[128] = {0};
  std::vector<std::string> values;

  //ClientRules
  if (xml.xpath("/gather/network/sipaddr/@ip", values) == 0) {
    std::vector<std::string>::const_iterator addr = values.begin();

    for (; addr != values.end(); addr++) {
      snprintf(path, 128 - 1, "/gather/network/sipaddr[@ip='%s']", addr->c_str());
      std::vector<std::string> audit;

      if (xml.xpath(path, audit) == 0) {
        std::vector<std::string>::const_iterator a = audit.begin();
        ClientRules rules;
        CIDR::cidr2addr(addr->c_str(), rules.sip, rules.smask);

        for (; a != audit.end(); a++) {
          if (strcasecmp(a->c_str(), "yes") == 0) {
            rules.audit = ClientRules::GATHER;
          } else {
            rules.audit = ClientRules::DROP;
          }
        }

        clientList.push_back(rules);
      } else {
        ACE_DEBUG((LM_ERROR, " %s is null", path));
      }
    }
  } else {
    ACE_DEBUG((LM_ERROR, " /gather/network/sipaddr/@ip is null \n"));
  }

  //SevicesRules
  values.clear();

  if (xml.xpath("/gather/services/service/@id", values) == 0) {
    std::vector<std::string>::const_iterator sid = values.begin();
    int id = 0;
    SevicesRules sevicesRules;

    for (; sid != values.end(); sid++) {
      id = atoi(sid->c_str());
      int services;
      int port;
      memset(path, 0, 128);
      snprintf(path, 128 - 1, "/gather/services/service[@id='%d']/@name", id);
      std::vector<std::string> namelist;

      if (xml.xpath(path, namelist) == 0) {
        std::vector<std::string>::const_iterator name = namelist.begin();

        for (; name != namelist.end(); name++) {
          if ((services = ServiceDef::name2service(name->c_str())) < ServiceDef::SERVICE_OTHER) {
            services = ServiceDef::SERVICE_OTHER;
          }
        }
      } else {
        ACE_DEBUG((LM_ERROR, " %s is null\n", path));
      }

      memset(path, 0, 128);
      snprintf(path, 128 - 1, "/gather/services/service[@id='%d']/@port", id);
      std::vector<std::string> portList;

      if (xml.xpath(path, portList) == 0) {
        std::vector<std::string>::const_iterator p = portList.begin();

        for (; p != portList.end(); p++) {
          port = atoi(p->c_str());
        }
      } else {
        ACE_DEBUG((LM_ERROR, " %s is null\n", path));
      }

      memset(path, 0, 128);
      snprintf(path, 128 - 1, "/gather/services/service[@id='%d']/sipaddr/@ip", id);
      std::vector<std::string> sipaddrlist;
      std::vector<ClientRules> clientRulesList;

      if (xml.xpath(path, sipaddrlist) == 0) {
        std::vector<std::string>::const_iterator sipaddr = sipaddrlist.begin();

        for (; sipaddr != sipaddrlist.end(); sipaddr++) {
          ClientRules client;
          uint32_t sip;
          uint32_t smask;
          CIDR::cidr2addr(sipaddr->c_str(), sip, smask);
          client.sip = sip;
          client.smask = smask;
          client.audit = ClientRules::DROP;
//.........这里部分代码省略.........
开发者ID:kernel0612,项目名称:multip_http_sensor,代码行数:101,代码来源:GatherPolicy.cpp


注:本文中的XML::error方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。