Example #1
0
         /**
           * Parses port configuration.
           * @param[out] mode the filter mode.
           * @param[out] port_list port list.
           * @param[in] node_param the xml_node object represents the node params.
           * @param[in] port_node_name the node name for port number.
           */
         static inline void parse_port_configuration(
                 uint8_t& mode, PORT_LIST& port_list,
                 const xml_node& node_param, const char_t* port_node_name)
         {
             xml_node node_port = node_param.child(port_node_name);

             if (!node_port.empty())
             {
                 if(parse_filter_mode(node_port, mode))
                 {
                     for (xml_node node_number = node_port.child("number");
                             !node_number.empty();
                             node_number = node_number.next_sibling("number"))
                     {
                         if(xml_attribute attr = node_number.attribute("value"))
                         {
                             port_list.push_back(attr.as_uint());
                         }
                         else
                         {
                             signal_error(port_node_name);
                         }
                     }

                     if (port_list.empty())
                     {
                         // checks whether the old specification is specified
                         xml_attribute attr = node_port.attribute("number");
                         if(attr.empty())
                         {
                             signal_error(port_node_name);
                         }

                         port_list.push_back(attr.as_uint());
                     }
                 }
                 else
                 {
                     signal_error(port_node_name);
                 }
             }
         }
Example #2
0
        /**
          * configures the filter
          * @param n the xml subtree
          */
        virtual void _configure(const pugi::xml_node&  n )
        {

            if(pugi::xml_node c = n.child("ip_src"))
            {
                if(parse_filter_mode(c,m_ip_src_mode))
                {
                    if(pugi::xml_attribute attr = c.attribute("address"))
                    {
                        m_ip_src_address = string_to_ip(attr.value());
                    }
                    else signal_error ("ip_src");

                    if(pugi::xml_attribute attr = c.attribute("netmask"))
                    {
                        m_ip_src_mask = string_to_ip(attr.value());
                    }
                    else signal_error ("ip_src");
                }
                else
                    signal_error("ip_src");
            }

            if(pugi::xml_node c = n.child("ip_dst"))
            {
                if(parse_filter_mode(c,m_ip_dst_mode))
                {
                    if(pugi::xml_attribute attr = c.attribute("address"))
                    {
                        m_ip_dst_address = string_to_ip(attr.value());
                    }
                    else signal_error ("ip_dst");

                    if(pugi::xml_attribute attr = c.attribute("netmask"))
                    {
                        m_ip_dst_mask = string_to_ip(attr.value());
                    }
                    else signal_error ("ip_dst");
                }
                else
                    signal_error("ip_dst");
            }

            if(pugi::xml_node c = n.child("l4_protocol"))
            {
                if(parse_filter_mode(c,m_layer4_mode))
                {
                    if(pugi::xml_attribute attr = c.attribute("number"))
                    {
                        m_layer4_proto = attr.as_uint();
                    }
                else
                    signal_error("l4_protocol");

                }
                else
                    signal_error("l4_protocol");
            }


            if(pugi::xml_node c = n.child("src_port"))
            {
                if(parse_filter_mode(c,m_src_port_mode))
                {
                    if(pugi::xml_attribute attr = c.attribute("number"))
                    {
                        m_src_port = attr.as_uint();
                    }
                else
                    signal_error("src_port");
                }
                else
                    signal_error("src_port");
            }

            if(pugi::xml_node c = n.child("dst_port"))
            {
                if(parse_filter_mode(c,m_dst_port_mode))
                {
                    if(pugi::xml_attribute attr = c.attribute("number"))
                    {
                        m_dst_port = attr.as_uint();
                    }
                else
                    signal_error("dst_port");
                }
                else
                    signal_error("dst_port");
            }


        }