/*
 * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
 * 
 * Licensed under the Apache License, Version 2.0 (the "License").
 * You may not use this file except in compliance with the License.
 * A copy of the License is located at
 * 
 *  http://aws.amazon.com/apache2.0
 * 
 * or in the "license" file accompanying this file. This file is distributed
 * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
 * express or implied. See the License for the specific language governing
 * permissions and limitations under the License.
 */
/*
 * Do not modify this file. This file is generated from the network-firewall-2020-11-12.normal.json service model.
 */
using System;
using System.Collections.Generic;
using System.Xml.Serialization;
using System.Text;
using System.IO;
using System.Net;
using Amazon.Runtime;
using Amazon.Runtime.Internal;
namespace Amazon.NetworkFirewall.Model
{
    /// 
    /// A single Suricata rules specification, for use in a stateful rule group. Use this
    /// option to specify a simple Suricata rule with protocol, source and destination, ports,
    /// direction, and rule options. For information about the Suricata Rules
    /// format, see Rules Format.
    /// 
    public partial class StatefulRule
    {
        private StatefulAction _action;
        private Header _header;
        private List _ruleOptions = new List();
        /// 
        /// Gets and sets the property Action. 
        /// 
        /// Defines what Network Firewall should do with the packets in a traffic flow when the
        /// flow matches the stateful rule criteria. For all actions, Network Firewall performs
        /// the specified action and discontinues stateful inspection of the traffic flow. 
        /// 
        ///  
        /// 
        /// The actions for a stateful rule are defined as follows: 
        /// 
        ///   -  
        /// 
        ///  PASS - Permits the packets to go to the intended destination.
        /// 
        ///  
  -  
        /// 
        ///  DROP - Blocks the packets from going to the intended destination and sends
        /// an alert log message, if alert logging is configured in the Firewall LoggingConfiguration.
        /// 
        /// 
        ///  
  -  
        /// 
        ///  ALERT - Permits the packets to go to the intended destination and sends an
        /// alert log message, if alert logging is configured in the Firewall LoggingConfiguration.
        /// 
        /// 
        ///  
        /// 
        /// You can use this action to test a rule that you intend to use to drop traffic. You
        /// can enable the rule with 
ALERT action, verify in the logs that the rule
        /// is filtering as you want, then change the action to DROP.
        /// 
        ///    -  
        /// 
        ///  REJECT - Drops TCP traffic that matches the conditions of the stateful rule,
        /// and sends a TCP reset packet back to sender of the packet. A TCP reset packet is a
        /// packet with no payload and a 
RST bit contained in the TCP header flags.
        /// Also sends an alert log mesage if alert logging is configured in the Firewall
        /// LoggingConfiguration.
        /// 
        ///  
        /// 
        ///  REJECT isn't currently available for use with IMAP and FTP protocols.
        /// 
        ///    
        /// 
        [AWSProperty(Required=true)]
        public StatefulAction Action
        {
            get { return this._action; }
            set { this._action = value; }
        }
        // Check to see if Action property is set
        internal bool IsSetAction()
        {
            return this._action != null;
        }
        /// 
        /// Gets and sets the property Header. 
        /// 
        /// The stateful inspection criteria for this rule, used to inspect traffic flows. 
        /// 
        /// 
        [AWSProperty(Required=true)]
        public Header Header
        {
            get { return this._header; }
            set { this._header = value; }
        }
        // Check to see if Header property is set
        internal bool IsSetHeader()
        {
            return this._header != null;
        }
        /// 
        /// Gets and sets the property RuleOptions. 
        /// 
        /// Additional options for the rule. These are the Suricata RuleOptions settings.
        /// 
        /// 
        [AWSProperty(Required=true)]
        public List RuleOptions
        {
            get { return this._ruleOptions; }
            set { this._ruleOptions = value; }
        }
        // Check to see if RuleOptions property is set
        internal bool IsSetRuleOptions()
        {
            return this._ruleOptions != null && this._ruleOptions.Count > 0; 
        }
    }
}