<?php
# Generated by the protocol buffer compiler.  DO NOT EDIT!
# source: google/cloud/compute/v1/compute.proto

namespace Google\Cloud\Compute\V1;

use Google\Protobuf\Internal\GPBType;
use Google\Protobuf\Internal\GPBUtil;
use Google\Protobuf\RepeatedField;

/**
 * Represents a Google Cloud Armor security policy resource.
 * Only external backend services that use load balancers can
 * reference a security policy. For more information, see
 * Google Cloud Armor security policy overview.
 *
 * Generated from protobuf message <code>google.cloud.compute.v1.SecurityPolicy</code>
 */
class SecurityPolicy extends \Google\Protobuf\Internal\Message
{
    /**
     * Generated from protobuf field <code>optional .google.cloud.compute.v1.SecurityPolicyAdaptiveProtectionConfig adaptive_protection_config = 150240735;</code>
     */
    protected $adaptive_protection_config = null;
    /**
     * Generated from protobuf field <code>optional .google.cloud.compute.v1.SecurityPolicyAdvancedOptionsConfig advanced_options_config = 449276352;</code>
     */
    protected $advanced_options_config = null;
    /**
     * A list of associations that belong to this policy.
     *
     * Generated from protobuf field <code>repeated .google.cloud.compute.v1.SecurityPolicyAssociation associations = 508736530;</code>
     */
    private $associations;
    /**
     * Output only. [Output Only] Creation timestamp inRFC3339
     * text format.
     *
     * Generated from protobuf field <code>optional string creation_timestamp = 30525366;</code>
     */
    protected $creation_timestamp = null;
    /**
     * Generated from protobuf field <code>optional .google.cloud.compute.v1.SecurityPolicyDdosProtectionConfig ddos_protection_config = 50315853;</code>
     */
    protected $ddos_protection_config = null;
    /**
     * An optional description of this resource. Provide this property when you
     * create the resource.
     *
     * Generated from protobuf field <code>optional string description = 422937596;</code>
     */
    protected $description = null;
    /**
     * Specifies a fingerprint for this resource, which is essentially a hash of
     * the metadata's contents and used for optimistic locking. The
     * fingerprint is initially generated by Compute Engine and changes after
     * every request to modify or update metadata. You must always provide an
     * up-to-date fingerprint hash in order to update or change metadata,
     * otherwise the request will fail with error412 conditionNotMet.
     * To see the latest fingerprint, make get() request to the
     * security policy.
     *
     * Generated from protobuf field <code>optional string fingerprint = 234678500;</code>
     */
    protected $fingerprint = null;
    /**
     * Output only. [Output Only] The unique identifier for the resource. This identifier is
     * defined by the server.
     *
     * Generated from protobuf field <code>optional uint64 id = 3355;</code>
     */
    protected $id = null;
    /**
     * Output only. [Output only] Type of the resource. Alwayscompute#securityPolicyfor security policies
     *
     * Generated from protobuf field <code>optional string kind = 3292052;</code>
     */
    protected $kind = null;
    /**
     * A fingerprint for the labels being applied to this security policy, which
     * is essentially a hash of the labels set used for optimistic locking. The
     * fingerprint is initially generated by Compute Engine and changes after
     * every request to modify or update labels. You must always provide an
     * up-to-date fingerprint hash in order to update or change labels.
     * To see the latest fingerprint, make get() request to the
     * security policy.
     *
     * Generated from protobuf field <code>optional string label_fingerprint = 178124825;</code>
     */
    protected $label_fingerprint = null;
    /**
     * Labels for this resource. These can only be added or modified by thesetLabels method. Each label key/value pair must comply withRFC1035.
     * Label values may be empty.
     *
     * Generated from protobuf field <code>map<string, string> labels = 500195327;</code>
     */
    private $labels;
    /**
     * Name of the resource. Provided by the client when the resource is created.
     * The name must be 1-63 characters long, and comply withRFC1035.
     * Specifically, the name must be 1-63 characters long and match the regular
     * expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first
     * character must be a lowercase letter, and all following characters must
     * be a dash, lowercase letter, or digit, except the last character, which
     * cannot be a dash.
     *
     * Generated from protobuf field <code>optional string name = 3373707;</code>
     */
    protected $name = null;
    /**
     * Output only. [Output Only] The parent of the security policy.
     *
     * Generated from protobuf field <code>optional string parent = 78317738;</code>
     */
    protected $parent = null;
    /**
     * Generated from protobuf field <code>optional .google.cloud.compute.v1.SecurityPolicyRecaptchaOptionsConfig recaptcha_options_config = 519006811;</code>
     */
    protected $recaptcha_options_config = null;
    /**
     * Output only. [Output Only] URL of the region where the regional security policy
     * resides. This field is not applicable to global security policies.
     *
     * Generated from protobuf field <code>optional string region = 138946292;</code>
     */
    protected $region = null;
    /**
     * A list of rules that belong to this policy.
     * There must always be a default rule which is a rule with priority
     * 2147483647 and match all condition (for the match condition this means
     * match  "*" for srcIpRanges and for the networkMatch condition every field
     * must be either match "*" or not set). If no rules are provided when
     * creating a security policy, a default rule with action "allow" will be
     * added.
     *
     * Generated from protobuf field <code>repeated .google.cloud.compute.v1.SecurityPolicyRule rules = 108873975;</code>
     */
    private $rules;
    /**
     * Output only. [Output Only] Server-defined URL for the resource.
     *
     * Generated from protobuf field <code>optional string self_link = 456214797;</code>
     */
    protected $self_link = null;
    /**
     * User-provided name of the organization security policy. The name should be
     * unique in the organization in which the security policy is created. This
     * should only be used when SecurityPolicyType is CLOUD_ARMOR.
     * The name must be 1-63 characters long, and comply with
     * https://www.ietf.org/rfc/rfc1035.txt. Specifically, the name must be 1-63
     * characters long and match the regular expression
     * `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first character must be a
     * lowercase letter, and all following characters must be a dash, lowercase
     * letter, or digit, except the last character, which cannot be a dash.
     *
     * Generated from protobuf field <code>optional string short_name = 492051566;</code>
     */
    protected $short_name = null;
    /**
     * The type indicates the intended use of the security policy.
     *    - CLOUD_ARMOR: Cloud Armor backend security policies can
     *    be configured to filter incoming HTTP requests targeting backend services.
     *    They filter requests before they hit the origin servers.
     *    - CLOUD_ARMOR_EDGE: Cloud Armor edge security policies can
     *    be configured to filter incoming HTTP requests targeting backend services
     *    (including Cloud CDN-enabled) as well as backend buckets (Cloud Storage).
     *    They filter requests before the request is served from Google's cache.
     *    - CLOUD_ARMOR_INTERNAL_SERVICE (preview only): Cloud Armor
     *    internal service policies can be configured to filter HTTP requests
     *    targeting services managed by Traffic Director in a service mesh. They
     *    filter requests before the request is served from the application.
     * - CLOUD_ARMOR_NETWORK: Cloud Armor network policies
     * can be configured to filter packets targeting network load balancing
     * resources such as backend services, target pools, target instances, and
     * instances with external IPs. They filter requests before the request is
     * served from the application.
     * This field can be set only at resource creation time.
     * Check the Type enum for the list of possible values.
     *
     * Generated from protobuf field <code>optional string type = 3575610;</code>
     */
    protected $type = null;
    /**
     * Definitions of user-defined fields for CLOUD_ARMOR_NETWORK policies. A
     * user-defined field consists of up to 4 bytes extracted from a fixed offset
     * in the packet, relative to the IPv4, IPv6, TCP, or UDP header, with an
     * optional mask to select certain bits. Rules may then specify matching
     * values for these fields.
     * Example:
     *  userDefinedFields:
     *  - name: "ipv4_fragment_offset"
     *    base: IPV4
     *    offset: 6
     *    size: 2
     *    mask: "0x1fff"
     *
     * Generated from protobuf field <code>repeated .google.cloud.compute.v1.SecurityPolicyUserDefinedField user_defined_fields = 28312739;</code>
     */
    private $user_defined_fields;

    /**
     * Constructor.
     *
     * @param array $data {
     *     Optional. Data for populating the Message object.
     *
     *     @type \Google\Cloud\Compute\V1\SecurityPolicyAdaptiveProtectionConfig $adaptive_protection_config
     *     @type \Google\Cloud\Compute\V1\SecurityPolicyAdvancedOptionsConfig $advanced_options_config
     *     @type \Google\Cloud\Compute\V1\SecurityPolicyAssociation[] $associations
     *           A list of associations that belong to this policy.
     *     @type string $creation_timestamp
     *           Output only. [Output Only] Creation timestamp inRFC3339
     *           text format.
     *     @type \Google\Cloud\Compute\V1\SecurityPolicyDdosProtectionConfig $ddos_protection_config
     *     @type string $description
     *           An optional description of this resource. Provide this property when you
     *           create the resource.
     *     @type string $fingerprint
     *           Specifies a fingerprint for this resource, which is essentially a hash of
     *           the metadata's contents and used for optimistic locking. The
     *           fingerprint is initially generated by Compute Engine and changes after
     *           every request to modify or update metadata. You must always provide an
     *           up-to-date fingerprint hash in order to update or change metadata,
     *           otherwise the request will fail with error412 conditionNotMet.
     *           To see the latest fingerprint, make get() request to the
     *           security policy.
     *     @type int|string $id
     *           Output only. [Output Only] The unique identifier for the resource. This identifier is
     *           defined by the server.
     *     @type string $kind
     *           Output only. [Output only] Type of the resource. Alwayscompute#securityPolicyfor security policies
     *     @type string $label_fingerprint
     *           A fingerprint for the labels being applied to this security policy, which
     *           is essentially a hash of the labels set used for optimistic locking. The
     *           fingerprint is initially generated by Compute Engine and changes after
     *           every request to modify or update labels. You must always provide an
     *           up-to-date fingerprint hash in order to update or change labels.
     *           To see the latest fingerprint, make get() request to the
     *           security policy.
     *     @type array|\Google\Protobuf\Internal\MapField $labels
     *           Labels for this resource. These can only be added or modified by thesetLabels method. Each label key/value pair must comply withRFC1035.
     *           Label values may be empty.
     *     @type string $name
     *           Name of the resource. Provided by the client when the resource is created.
     *           The name must be 1-63 characters long, and comply withRFC1035.
     *           Specifically, the name must be 1-63 characters long and match the regular
     *           expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first
     *           character must be a lowercase letter, and all following characters must
     *           be a dash, lowercase letter, or digit, except the last character, which
     *           cannot be a dash.
     *     @type string $parent
     *           Output only. [Output Only] The parent of the security policy.
     *     @type \Google\Cloud\Compute\V1\SecurityPolicyRecaptchaOptionsConfig $recaptcha_options_config
     *     @type string $region
     *           Output only. [Output Only] URL of the region where the regional security policy
     *           resides. This field is not applicable to global security policies.
     *     @type \Google\Cloud\Compute\V1\SecurityPolicyRule[] $rules
     *           A list of rules that belong to this policy.
     *           There must always be a default rule which is a rule with priority
     *           2147483647 and match all condition (for the match condition this means
     *           match  "*" for srcIpRanges and for the networkMatch condition every field
     *           must be either match "*" or not set). If no rules are provided when
     *           creating a security policy, a default rule with action "allow" will be
     *           added.
     *     @type string $self_link
     *           Output only. [Output Only] Server-defined URL for the resource.
     *     @type string $short_name
     *           User-provided name of the organization security policy. The name should be
     *           unique in the organization in which the security policy is created. This
     *           should only be used when SecurityPolicyType is CLOUD_ARMOR.
     *           The name must be 1-63 characters long, and comply with
     *           https://www.ietf.org/rfc/rfc1035.txt. Specifically, the name must be 1-63
     *           characters long and match the regular expression
     *           `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first character must be a
     *           lowercase letter, and all following characters must be a dash, lowercase
     *           letter, or digit, except the last character, which cannot be a dash.
     *     @type string $type
     *           The type indicates the intended use of the security policy.
     *              - CLOUD_ARMOR: Cloud Armor backend security policies can
     *              be configured to filter incoming HTTP requests targeting backend services.
     *              They filter requests before they hit the origin servers.
     *              - CLOUD_ARMOR_EDGE: Cloud Armor edge security policies can
     *              be configured to filter incoming HTTP requests targeting backend services
     *              (including Cloud CDN-enabled) as well as backend buckets (Cloud Storage).
     *              They filter requests before the request is served from Google's cache.
     *              - CLOUD_ARMOR_INTERNAL_SERVICE (preview only): Cloud Armor
     *              internal service policies can be configured to filter HTTP requests
     *              targeting services managed by Traffic Director in a service mesh. They
     *              filter requests before the request is served from the application.
     *           - CLOUD_ARMOR_NETWORK: Cloud Armor network policies
     *           can be configured to filter packets targeting network load balancing
     *           resources such as backend services, target pools, target instances, and
     *           instances with external IPs. They filter requests before the request is
     *           served from the application.
     *           This field can be set only at resource creation time.
     *           Check the Type enum for the list of possible values.
     *     @type \Google\Cloud\Compute\V1\SecurityPolicyUserDefinedField[] $user_defined_fields
     *           Definitions of user-defined fields for CLOUD_ARMOR_NETWORK policies. A
     *           user-defined field consists of up to 4 bytes extracted from a fixed offset
     *           in the packet, relative to the IPv4, IPv6, TCP, or UDP header, with an
     *           optional mask to select certain bits. Rules may then specify matching
     *           values for these fields.
     *           Example:
     *            userDefinedFields:
     *            - name: "ipv4_fragment_offset"
     *              base: IPV4
     *              offset: 6
     *              size: 2
     *              mask: "0x1fff"
     * }
     */
    public function __construct($data = NULL) {
        \GPBMetadata\Google\Cloud\Compute\V1\Compute::initOnce();
        parent::__construct($data);
    }

    /**
     * Generated from protobuf field <code>optional .google.cloud.compute.v1.SecurityPolicyAdaptiveProtectionConfig adaptive_protection_config = 150240735;</code>
     * @return \Google\Cloud\Compute\V1\SecurityPolicyAdaptiveProtectionConfig|null
     */
    public function getAdaptiveProtectionConfig()
    {
        return $this->adaptive_protection_config;
    }

    public function hasAdaptiveProtectionConfig()
    {
        return isset($this->adaptive_protection_config);
    }

    public function clearAdaptiveProtectionConfig()
    {
        unset($this->adaptive_protection_config);
    }

    /**
     * Generated from protobuf field <code>optional .google.cloud.compute.v1.SecurityPolicyAdaptiveProtectionConfig adaptive_protection_config = 150240735;</code>
     * @param \Google\Cloud\Compute\V1\SecurityPolicyAdaptiveProtectionConfig $var
     * @return $this
     */
    public function setAdaptiveProtectionConfig($var)
    {
        GPBUtil::checkMessage($var, \Google\Cloud\Compute\V1\SecurityPolicyAdaptiveProtectionConfig::class);
        $this->adaptive_protection_config = $var;

        return $this;
    }

    /**
     * Generated from protobuf field <code>optional .google.cloud.compute.v1.SecurityPolicyAdvancedOptionsConfig advanced_options_config = 449276352;</code>
     * @return \Google\Cloud\Compute\V1\SecurityPolicyAdvancedOptionsConfig|null
     */
    public function getAdvancedOptionsConfig()
    {
        return $this->advanced_options_config;
    }

    public function hasAdvancedOptionsConfig()
    {
        return isset($this->advanced_options_config);
    }

    public function clearAdvancedOptionsConfig()
    {
        unset($this->advanced_options_config);
    }

    /**
     * Generated from protobuf field <code>optional .google.cloud.compute.v1.SecurityPolicyAdvancedOptionsConfig advanced_options_config = 449276352;</code>
     * @param \Google\Cloud\Compute\V1\SecurityPolicyAdvancedOptionsConfig $var
     * @return $this
     */
    public function setAdvancedOptionsConfig($var)
    {
        GPBUtil::checkMessage($var, \Google\Cloud\Compute\V1\SecurityPolicyAdvancedOptionsConfig::class);
        $this->advanced_options_config = $var;

        return $this;
    }

    /**
     * A list of associations that belong to this policy.
     *
     * Generated from protobuf field <code>repeated .google.cloud.compute.v1.SecurityPolicyAssociation associations = 508736530;</code>
     * @return RepeatedField<\Google\Cloud\Compute\V1\SecurityPolicyAssociation>
     */
    public function getAssociations()
    {
        return $this->associations;
    }

    /**
     * A list of associations that belong to this policy.
     *
     * Generated from protobuf field <code>repeated .google.cloud.compute.v1.SecurityPolicyAssociation associations = 508736530;</code>
     * @param \Google\Cloud\Compute\V1\SecurityPolicyAssociation[] $var
     * @return $this
     */
    public function setAssociations($var)
    {
        $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Cloud\Compute\V1\SecurityPolicyAssociation::class);
        $this->associations = $arr;

        return $this;
    }

    /**
     * Output only. [Output Only] Creation timestamp inRFC3339
     * text format.
     *
     * Generated from protobuf field <code>optional string creation_timestamp = 30525366;</code>
     * @return string
     */
    public function getCreationTimestamp()
    {
        return isset($this->creation_timestamp) ? $this->creation_timestamp : '';
    }

    public function hasCreationTimestamp()
    {
        return isset($this->creation_timestamp);
    }

    public function clearCreationTimestamp()
    {
        unset($this->creation_timestamp);
    }

    /**
     * Output only. [Output Only] Creation timestamp inRFC3339
     * text format.
     *
     * Generated from protobuf field <code>optional string creation_timestamp = 30525366;</code>
     * @param string $var
     * @return $this
     */
    public function setCreationTimestamp($var)
    {
        GPBUtil::checkString($var, True);
        $this->creation_timestamp = $var;

        return $this;
    }

    /**
     * Generated from protobuf field <code>optional .google.cloud.compute.v1.SecurityPolicyDdosProtectionConfig ddos_protection_config = 50315853;</code>
     * @return \Google\Cloud\Compute\V1\SecurityPolicyDdosProtectionConfig|null
     */
    public function getDdosProtectionConfig()
    {
        return $this->ddos_protection_config;
    }

    public function hasDdosProtectionConfig()
    {
        return isset($this->ddos_protection_config);
    }

    public function clearDdosProtectionConfig()
    {
        unset($this->ddos_protection_config);
    }

    /**
     * Generated from protobuf field <code>optional .google.cloud.compute.v1.SecurityPolicyDdosProtectionConfig ddos_protection_config = 50315853;</code>
     * @param \Google\Cloud\Compute\V1\SecurityPolicyDdosProtectionConfig $var
     * @return $this
     */
    public function setDdosProtectionConfig($var)
    {
        GPBUtil::checkMessage($var, \Google\Cloud\Compute\V1\SecurityPolicyDdosProtectionConfig::class);
        $this->ddos_protection_config = $var;

        return $this;
    }

    /**
     * An optional description of this resource. Provide this property when you
     * create the resource.
     *
     * Generated from protobuf field <code>optional string description = 422937596;</code>
     * @return string
     */
    public function getDescription()
    {
        return isset($this->description) ? $this->description : '';
    }

    public function hasDescription()
    {
        return isset($this->description);
    }

    public function clearDescription()
    {
        unset($this->description);
    }

    /**
     * An optional description of this resource. Provide this property when you
     * create the resource.
     *
     * Generated from protobuf field <code>optional string description = 422937596;</code>
     * @param string $var
     * @return $this
     */
    public function setDescription($var)
    {
        GPBUtil::checkString($var, True);
        $this->description = $var;

        return $this;
    }

    /**
     * Specifies a fingerprint for this resource, which is essentially a hash of
     * the metadata's contents and used for optimistic locking. The
     * fingerprint is initially generated by Compute Engine and changes after
     * every request to modify or update metadata. You must always provide an
     * up-to-date fingerprint hash in order to update or change metadata,
     * otherwise the request will fail with error412 conditionNotMet.
     * To see the latest fingerprint, make get() request to the
     * security policy.
     *
     * Generated from protobuf field <code>optional string fingerprint = 234678500;</code>
     * @return string
     */
    public function getFingerprint()
    {
        return isset($this->fingerprint) ? $this->fingerprint : '';
    }

    public function hasFingerprint()
    {
        return isset($this->fingerprint);
    }

    public function clearFingerprint()
    {
        unset($this->fingerprint);
    }

    /**
     * Specifies a fingerprint for this resource, which is essentially a hash of
     * the metadata's contents and used for optimistic locking. The
     * fingerprint is initially generated by Compute Engine and changes after
     * every request to modify or update metadata. You must always provide an
     * up-to-date fingerprint hash in order to update or change metadata,
     * otherwise the request will fail with error412 conditionNotMet.
     * To see the latest fingerprint, make get() request to the
     * security policy.
     *
     * Generated from protobuf field <code>optional string fingerprint = 234678500;</code>
     * @param string $var
     * @return $this
     */
    public function setFingerprint($var)
    {
        GPBUtil::checkString($var, True);
        $this->fingerprint = $var;

        return $this;
    }

    /**
     * Output only. [Output Only] The unique identifier for the resource. This identifier is
     * defined by the server.
     *
     * Generated from protobuf field <code>optional uint64 id = 3355;</code>
     * @return int|string
     */
    public function getId()
    {
        return isset($this->id) ? $this->id : 0;
    }

    public function hasId()
    {
        return isset($this->id);
    }

    public function clearId()
    {
        unset($this->id);
    }

    /**
     * Output only. [Output Only] The unique identifier for the resource. This identifier is
     * defined by the server.
     *
     * Generated from protobuf field <code>optional uint64 id = 3355;</code>
     * @param int|string $var
     * @return $this
     */
    public function setId($var)
    {
        GPBUtil::checkUint64($var);
        $this->id = $var;

        return $this;
    }

    /**
     * Output only. [Output only] Type of the resource. Alwayscompute#securityPolicyfor security policies
     *
     * Generated from protobuf field <code>optional string kind = 3292052;</code>
     * @return string
     */
    public function getKind()
    {
        return isset($this->kind) ? $this->kind : '';
    }

    public function hasKind()
    {
        return isset($this->kind);
    }

    public function clearKind()
    {
        unset($this->kind);
    }

    /**
     * Output only. [Output only] Type of the resource. Alwayscompute#securityPolicyfor security policies
     *
     * Generated from protobuf field <code>optional string kind = 3292052;</code>
     * @param string $var
     * @return $this
     */
    public function setKind($var)
    {
        GPBUtil::checkString($var, True);
        $this->kind = $var;

        return $this;
    }

    /**
     * A fingerprint for the labels being applied to this security policy, which
     * is essentially a hash of the labels set used for optimistic locking. The
     * fingerprint is initially generated by Compute Engine and changes after
     * every request to modify or update labels. You must always provide an
     * up-to-date fingerprint hash in order to update or change labels.
     * To see the latest fingerprint, make get() request to the
     * security policy.
     *
     * Generated from protobuf field <code>optional string label_fingerprint = 178124825;</code>
     * @return string
     */
    public function getLabelFingerprint()
    {
        return isset($this->label_fingerprint) ? $this->label_fingerprint : '';
    }

    public function hasLabelFingerprint()
    {
        return isset($this->label_fingerprint);
    }

    public function clearLabelFingerprint()
    {
        unset($this->label_fingerprint);
    }

    /**
     * A fingerprint for the labels being applied to this security policy, which
     * is essentially a hash of the labels set used for optimistic locking. The
     * fingerprint is initially generated by Compute Engine and changes after
     * every request to modify or update labels. You must always provide an
     * up-to-date fingerprint hash in order to update or change labels.
     * To see the latest fingerprint, make get() request to the
     * security policy.
     *
     * Generated from protobuf field <code>optional string label_fingerprint = 178124825;</code>
     * @param string $var
     * @return $this
     */
    public function setLabelFingerprint($var)
    {
        GPBUtil::checkString($var, True);
        $this->label_fingerprint = $var;

        return $this;
    }

    /**
     * Labels for this resource. These can only be added or modified by thesetLabels method. Each label key/value pair must comply withRFC1035.
     * Label values may be empty.
     *
     * Generated from protobuf field <code>map<string, string> labels = 500195327;</code>
     * @return \Google\Protobuf\Internal\MapField
     */
    public function getLabels()
    {
        return $this->labels;
    }

    /**
     * Labels for this resource. These can only be added or modified by thesetLabels method. Each label key/value pair must comply withRFC1035.
     * Label values may be empty.
     *
     * Generated from protobuf field <code>map<string, string> labels = 500195327;</code>
     * @param array|\Google\Protobuf\Internal\MapField $var
     * @return $this
     */
    public function setLabels($var)
    {
        $arr = GPBUtil::checkMapField($var, \Google\Protobuf\Internal\GPBType::STRING, \Google\Protobuf\Internal\GPBType::STRING);
        $this->labels = $arr;

        return $this;
    }

    /**
     * Name of the resource. Provided by the client when the resource is created.
     * The name must be 1-63 characters long, and comply withRFC1035.
     * Specifically, the name must be 1-63 characters long and match the regular
     * expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first
     * character must be a lowercase letter, and all following characters must
     * be a dash, lowercase letter, or digit, except the last character, which
     * cannot be a dash.
     *
     * Generated from protobuf field <code>optional string name = 3373707;</code>
     * @return string
     */
    public function getName()
    {
        return isset($this->name) ? $this->name : '';
    }

    public function hasName()
    {
        return isset($this->name);
    }

    public function clearName()
    {
        unset($this->name);
    }

    /**
     * Name of the resource. Provided by the client when the resource is created.
     * The name must be 1-63 characters long, and comply withRFC1035.
     * Specifically, the name must be 1-63 characters long and match the regular
     * expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first
     * character must be a lowercase letter, and all following characters must
     * be a dash, lowercase letter, or digit, except the last character, which
     * cannot be a dash.
     *
     * Generated from protobuf field <code>optional string name = 3373707;</code>
     * @param string $var
     * @return $this
     */
    public function setName($var)
    {
        GPBUtil::checkString($var, True);
        $this->name = $var;

        return $this;
    }

    /**
     * Output only. [Output Only] The parent of the security policy.
     *
     * Generated from protobuf field <code>optional string parent = 78317738;</code>
     * @return string
     */
    public function getParent()
    {
        return isset($this->parent) ? $this->parent : '';
    }

    public function hasParent()
    {
        return isset($this->parent);
    }

    public function clearParent()
    {
        unset($this->parent);
    }

    /**
     * Output only. [Output Only] The parent of the security policy.
     *
     * Generated from protobuf field <code>optional string parent = 78317738;</code>
     * @param string $var
     * @return $this
     */
    public function setParent($var)
    {
        GPBUtil::checkString($var, True);
        $this->parent = $var;

        return $this;
    }

    /**
     * Generated from protobuf field <code>optional .google.cloud.compute.v1.SecurityPolicyRecaptchaOptionsConfig recaptcha_options_config = 519006811;</code>
     * @return \Google\Cloud\Compute\V1\SecurityPolicyRecaptchaOptionsConfig|null
     */
    public function getRecaptchaOptionsConfig()
    {
        return $this->recaptcha_options_config;
    }

    public function hasRecaptchaOptionsConfig()
    {
        return isset($this->recaptcha_options_config);
    }

    public function clearRecaptchaOptionsConfig()
    {
        unset($this->recaptcha_options_config);
    }

    /**
     * Generated from protobuf field <code>optional .google.cloud.compute.v1.SecurityPolicyRecaptchaOptionsConfig recaptcha_options_config = 519006811;</code>
     * @param \Google\Cloud\Compute\V1\SecurityPolicyRecaptchaOptionsConfig $var
     * @return $this
     */
    public function setRecaptchaOptionsConfig($var)
    {
        GPBUtil::checkMessage($var, \Google\Cloud\Compute\V1\SecurityPolicyRecaptchaOptionsConfig::class);
        $this->recaptcha_options_config = $var;

        return $this;
    }

    /**
     * Output only. [Output Only] URL of the region where the regional security policy
     * resides. This field is not applicable to global security policies.
     *
     * Generated from protobuf field <code>optional string region = 138946292;</code>
     * @return string
     */
    public function getRegion()
    {
        return isset($this->region) ? $this->region : '';
    }

    public function hasRegion()
    {
        return isset($this->region);
    }

    public function clearRegion()
    {
        unset($this->region);
    }

    /**
     * Output only. [Output Only] URL of the region where the regional security policy
     * resides. This field is not applicable to global security policies.
     *
     * Generated from protobuf field <code>optional string region = 138946292;</code>
     * @param string $var
     * @return $this
     */
    public function setRegion($var)
    {
        GPBUtil::checkString($var, True);
        $this->region = $var;

        return $this;
    }

    /**
     * A list of rules that belong to this policy.
     * There must always be a default rule which is a rule with priority
     * 2147483647 and match all condition (for the match condition this means
     * match  "*" for srcIpRanges and for the networkMatch condition every field
     * must be either match "*" or not set). If no rules are provided when
     * creating a security policy, a default rule with action "allow" will be
     * added.
     *
     * Generated from protobuf field <code>repeated .google.cloud.compute.v1.SecurityPolicyRule rules = 108873975;</code>
     * @return RepeatedField<\Google\Cloud\Compute\V1\SecurityPolicyRule>
     */
    public function getRules()
    {
        return $this->rules;
    }

    /**
     * A list of rules that belong to this policy.
     * There must always be a default rule which is a rule with priority
     * 2147483647 and match all condition (for the match condition this means
     * match  "*" for srcIpRanges and for the networkMatch condition every field
     * must be either match "*" or not set). If no rules are provided when
     * creating a security policy, a default rule with action "allow" will be
     * added.
     *
     * Generated from protobuf field <code>repeated .google.cloud.compute.v1.SecurityPolicyRule rules = 108873975;</code>
     * @param \Google\Cloud\Compute\V1\SecurityPolicyRule[] $var
     * @return $this
     */
    public function setRules($var)
    {
        $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Cloud\Compute\V1\SecurityPolicyRule::class);
        $this->rules = $arr;

        return $this;
    }

    /**
     * Output only. [Output Only] Server-defined URL for the resource.
     *
     * Generated from protobuf field <code>optional string self_link = 456214797;</code>
     * @return string
     */
    public function getSelfLink()
    {
        return isset($this->self_link) ? $this->self_link : '';
    }

    public function hasSelfLink()
    {
        return isset($this->self_link);
    }

    public function clearSelfLink()
    {
        unset($this->self_link);
    }

    /**
     * Output only. [Output Only] Server-defined URL for the resource.
     *
     * Generated from protobuf field <code>optional string self_link = 456214797;</code>
     * @param string $var
     * @return $this
     */
    public function setSelfLink($var)
    {
        GPBUtil::checkString($var, True);
        $this->self_link = $var;

        return $this;
    }

    /**
     * User-provided name of the organization security policy. The name should be
     * unique in the organization in which the security policy is created. This
     * should only be used when SecurityPolicyType is CLOUD_ARMOR.
     * The name must be 1-63 characters long, and comply with
     * https://www.ietf.org/rfc/rfc1035.txt. Specifically, the name must be 1-63
     * characters long and match the regular expression
     * `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first character must be a
     * lowercase letter, and all following characters must be a dash, lowercase
     * letter, or digit, except the last character, which cannot be a dash.
     *
     * Generated from protobuf field <code>optional string short_name = 492051566;</code>
     * @return string
     */
    public function getShortName()
    {
        return isset($this->short_name) ? $this->short_name : '';
    }

    public function hasShortName()
    {
        return isset($this->short_name);
    }

    public function clearShortName()
    {
        unset($this->short_name);
    }

    /**
     * User-provided name of the organization security policy. The name should be
     * unique in the organization in which the security policy is created. This
     * should only be used when SecurityPolicyType is CLOUD_ARMOR.
     * The name must be 1-63 characters long, and comply with
     * https://www.ietf.org/rfc/rfc1035.txt. Specifically, the name must be 1-63
     * characters long and match the regular expression
     * `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first character must be a
     * lowercase letter, and all following characters must be a dash, lowercase
     * letter, or digit, except the last character, which cannot be a dash.
     *
     * Generated from protobuf field <code>optional string short_name = 492051566;</code>
     * @param string $var
     * @return $this
     */
    public function setShortName($var)
    {
        GPBUtil::checkString($var, True);
        $this->short_name = $var;

        return $this;
    }

    /**
     * The type indicates the intended use of the security policy.
     *    - CLOUD_ARMOR: Cloud Armor backend security policies can
     *    be configured to filter incoming HTTP requests targeting backend services.
     *    They filter requests before they hit the origin servers.
     *    - CLOUD_ARMOR_EDGE: Cloud Armor edge security policies can
     *    be configured to filter incoming HTTP requests targeting backend services
     *    (including Cloud CDN-enabled) as well as backend buckets (Cloud Storage).
     *    They filter requests before the request is served from Google's cache.
     *    - CLOUD_ARMOR_INTERNAL_SERVICE (preview only): Cloud Armor
     *    internal service policies can be configured to filter HTTP requests
     *    targeting services managed by Traffic Director in a service mesh. They
     *    filter requests before the request is served from the application.
     * - CLOUD_ARMOR_NETWORK: Cloud Armor network policies
     * can be configured to filter packets targeting network load balancing
     * resources such as backend services, target pools, target instances, and
     * instances with external IPs. They filter requests before the request is
     * served from the application.
     * This field can be set only at resource creation time.
     * Check the Type enum for the list of possible values.
     *
     * Generated from protobuf field <code>optional string type = 3575610;</code>
     * @return string
     */
    public function getType()
    {
        return isset($this->type) ? $this->type : '';
    }

    public function hasType()
    {
        return isset($this->type);
    }

    public function clearType()
    {
        unset($this->type);
    }

    /**
     * The type indicates the intended use of the security policy.
     *    - CLOUD_ARMOR: Cloud Armor backend security policies can
     *    be configured to filter incoming HTTP requests targeting backend services.
     *    They filter requests before they hit the origin servers.
     *    - CLOUD_ARMOR_EDGE: Cloud Armor edge security policies can
     *    be configured to filter incoming HTTP requests targeting backend services
     *    (including Cloud CDN-enabled) as well as backend buckets (Cloud Storage).
     *    They filter requests before the request is served from Google's cache.
     *    - CLOUD_ARMOR_INTERNAL_SERVICE (preview only): Cloud Armor
     *    internal service policies can be configured to filter HTTP requests
     *    targeting services managed by Traffic Director in a service mesh. They
     *    filter requests before the request is served from the application.
     * - CLOUD_ARMOR_NETWORK: Cloud Armor network policies
     * can be configured to filter packets targeting network load balancing
     * resources such as backend services, target pools, target instances, and
     * instances with external IPs. They filter requests before the request is
     * served from the application.
     * This field can be set only at resource creation time.
     * Check the Type enum for the list of possible values.
     *
     * Generated from protobuf field <code>optional string type = 3575610;</code>
     * @param string $var
     * @return $this
     */
    public function setType($var)
    {
        GPBUtil::checkString($var, True);
        $this->type = $var;

        return $this;
    }

    /**
     * Definitions of user-defined fields for CLOUD_ARMOR_NETWORK policies. A
     * user-defined field consists of up to 4 bytes extracted from a fixed offset
     * in the packet, relative to the IPv4, IPv6, TCP, or UDP header, with an
     * optional mask to select certain bits. Rules may then specify matching
     * values for these fields.
     * Example:
     *  userDefinedFields:
     *  - name: "ipv4_fragment_offset"
     *    base: IPV4
     *    offset: 6
     *    size: 2
     *    mask: "0x1fff"
     *
     * Generated from protobuf field <code>repeated .google.cloud.compute.v1.SecurityPolicyUserDefinedField user_defined_fields = 28312739;</code>
     * @return RepeatedField<\Google\Cloud\Compute\V1\SecurityPolicyUserDefinedField>
     */
    public function getUserDefinedFields()
    {
        return $this->user_defined_fields;
    }

    /**
     * Definitions of user-defined fields for CLOUD_ARMOR_NETWORK policies. A
     * user-defined field consists of up to 4 bytes extracted from a fixed offset
     * in the packet, relative to the IPv4, IPv6, TCP, or UDP header, with an
     * optional mask to select certain bits. Rules may then specify matching
     * values for these fields.
     * Example:
     *  userDefinedFields:
     *  - name: "ipv4_fragment_offset"
     *    base: IPV4
     *    offset: 6
     *    size: 2
     *    mask: "0x1fff"
     *
     * Generated from protobuf field <code>repeated .google.cloud.compute.v1.SecurityPolicyUserDefinedField user_defined_fields = 28312739;</code>
     * @param \Google\Cloud\Compute\V1\SecurityPolicyUserDefinedField[] $var
     * @return $this
     */
    public function setUserDefinedFields($var)
    {
        $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Cloud\Compute\V1\SecurityPolicyUserDefinedField::class);
        $this->user_defined_fields = $arr;

        return $this;
    }

}

