<?php

/**
* Copyright (c) Microsoft Corporation.  All Rights Reserved.  Licensed under the MIT License.  See License in the project root for license information.
* 
* AppleVpnAlwaysOnConfiguration File
* PHP version 7
*
* @category  Library
* @package   Microsoft.Graph
* @copyright (c) Microsoft Corporation. All rights reserved.
* @license   https://opensource.org/licenses/MIT MIT License
* @link      https://graph.microsoft.com
*/
namespace XCloner\Beta\Microsoft\Graph\Model;

if (!defined('ABSPATH') && \PHP_SAPI !== 'cli') {
    die;
}
/**
* AppleVpnAlwaysOnConfiguration class
*
* @category  Model
* @package   Microsoft.Graph
* @copyright (c) Microsoft Corporation. All rights reserved.
* @license   https://opensource.org/licenses/MIT MIT License
* @link      https://graph.microsoft.com
*/
class AppleVpnAlwaysOnConfiguration extends Entity
{
    /**
     * Gets the airPrintExceptionAction
     * Determine whether AirPrint service will be exempt from the always-on VPN connection. Possible values are: forceTrafficViaVPN, allowTrafficOutside, dropTraffic.
     *
     * @return VpnServiceExceptionAction|null The airPrintExceptionAction
     */
    public function getAirPrintExceptionAction()
    {
        if (array_key_exists("airPrintExceptionAction", $this->_propDict)) {
            if (is_a($this->_propDict["airPrintExceptionAction"], "XCloner\\Beta\\Microsoft\\Graph\\Model\\VpnServiceExceptionAction") || is_null($this->_propDict["airPrintExceptionAction"])) {
                return $this->_propDict["airPrintExceptionAction"];
            } else {
                $this->_propDict["airPrintExceptionAction"] = new VpnServiceExceptionAction($this->_propDict["airPrintExceptionAction"]);
                return $this->_propDict["airPrintExceptionAction"];
            }
        }
        return null;
    }
    /**
     * Sets the airPrintExceptionAction
     * Determine whether AirPrint service will be exempt from the always-on VPN connection. Possible values are: forceTrafficViaVPN, allowTrafficOutside, dropTraffic.
     *
     * @param VpnServiceExceptionAction $val The value to assign to the airPrintExceptionAction
     *
     * @return AppleVpnAlwaysOnConfiguration The AppleVpnAlwaysOnConfiguration
     */
    public function setAirPrintExceptionAction($val)
    {
        $this->_propDict["airPrintExceptionAction"] = $val;
        return $this;
    }
    /**
     * Gets the allowAllCaptiveNetworkPlugins
     * Specifies whether traffic from all captive network plugins should be allowed outside the vpn
     *
     * @return bool|null The allowAllCaptiveNetworkPlugins
     */
    public function getAllowAllCaptiveNetworkPlugins()
    {
        if (array_key_exists("allowAllCaptiveNetworkPlugins", $this->_propDict)) {
            return $this->_propDict["allowAllCaptiveNetworkPlugins"];
        } else {
            return null;
        }
    }
    /**
     * Sets the allowAllCaptiveNetworkPlugins
     * Specifies whether traffic from all captive network plugins should be allowed outside the vpn
     *
     * @param bool $val The value of the allowAllCaptiveNetworkPlugins
     *
     * @return AppleVpnAlwaysOnConfiguration
     */
    public function setAllowAllCaptiveNetworkPlugins($val)
    {
        $this->_propDict["allowAllCaptiveNetworkPlugins"] = $val;
        return $this;
    }
    /**
     * Gets the allowCaptiveWebSheet
     * Determines whether traffic from the Websheet app is allowed outside of the VPN
     *
     * @return bool|null The allowCaptiveWebSheet
     */
    public function getAllowCaptiveWebSheet()
    {
        if (array_key_exists("allowCaptiveWebSheet", $this->_propDict)) {
            return $this->_propDict["allowCaptiveWebSheet"];
        } else {
            return null;
        }
    }
    /**
     * Sets the allowCaptiveWebSheet
     * Determines whether traffic from the Websheet app is allowed outside of the VPN
     *
     * @param bool $val The value of the allowCaptiveWebSheet
     *
     * @return AppleVpnAlwaysOnConfiguration
     */
    public function setAllowCaptiveWebSheet($val)
    {
        $this->_propDict["allowCaptiveWebSheet"] = $val;
        return $this;
    }
    /**
     * Gets the allowedCaptiveNetworkPlugins
     * Determines whether all, some, or no non-native captive networking apps are allowed
     *
     * @return SpecifiedCaptiveNetworkPlugins|null The allowedCaptiveNetworkPlugins
     */
    public function getAllowedCaptiveNetworkPlugins()
    {
        if (array_key_exists("allowedCaptiveNetworkPlugins", $this->_propDict)) {
            if (is_a($this->_propDict["allowedCaptiveNetworkPlugins"], "XCloner\\Beta\\Microsoft\\Graph\\Model\\SpecifiedCaptiveNetworkPlugins") || is_null($this->_propDict["allowedCaptiveNetworkPlugins"])) {
                return $this->_propDict["allowedCaptiveNetworkPlugins"];
            } else {
                $this->_propDict["allowedCaptiveNetworkPlugins"] = new SpecifiedCaptiveNetworkPlugins($this->_propDict["allowedCaptiveNetworkPlugins"]);
                return $this->_propDict["allowedCaptiveNetworkPlugins"];
            }
        }
        return null;
    }
    /**
     * Sets the allowedCaptiveNetworkPlugins
     * Determines whether all, some, or no non-native captive networking apps are allowed
     *
     * @param SpecifiedCaptiveNetworkPlugins $val The value to assign to the allowedCaptiveNetworkPlugins
     *
     * @return AppleVpnAlwaysOnConfiguration The AppleVpnAlwaysOnConfiguration
     */
    public function setAllowedCaptiveNetworkPlugins($val)
    {
        $this->_propDict["allowedCaptiveNetworkPlugins"] = $val;
        return $this;
    }
    /**
     * Gets the cellularExceptionAction
     * Determine whether Cellular service will be exempt from the always-on VPN connection. Possible values are: forceTrafficViaVPN, allowTrafficOutside, dropTraffic.
     *
     * @return VpnServiceExceptionAction|null The cellularExceptionAction
     */
    public function getCellularExceptionAction()
    {
        if (array_key_exists("cellularExceptionAction", $this->_propDict)) {
            if (is_a($this->_propDict["cellularExceptionAction"], "XCloner\\Beta\\Microsoft\\Graph\\Model\\VpnServiceExceptionAction") || is_null($this->_propDict["cellularExceptionAction"])) {
                return $this->_propDict["cellularExceptionAction"];
            } else {
                $this->_propDict["cellularExceptionAction"] = new VpnServiceExceptionAction($this->_propDict["cellularExceptionAction"]);
                return $this->_propDict["cellularExceptionAction"];
            }
        }
        return null;
    }
    /**
     * Sets the cellularExceptionAction
     * Determine whether Cellular service will be exempt from the always-on VPN connection. Possible values are: forceTrafficViaVPN, allowTrafficOutside, dropTraffic.
     *
     * @param VpnServiceExceptionAction $val The value to assign to the cellularExceptionAction
     *
     * @return AppleVpnAlwaysOnConfiguration The AppleVpnAlwaysOnConfiguration
     */
    public function setCellularExceptionAction($val)
    {
        $this->_propDict["cellularExceptionAction"] = $val;
        return $this;
    }
    /**
     * Gets the natKeepAliveIntervalInSeconds
     * Specifies how often in seconds to send a network address translation keepalive package through the VPN
     *
     * @return int|null The natKeepAliveIntervalInSeconds
     */
    public function getNatKeepAliveIntervalInSeconds()
    {
        if (array_key_exists("natKeepAliveIntervalInSeconds", $this->_propDict)) {
            return $this->_propDict["natKeepAliveIntervalInSeconds"];
        } else {
            return null;
        }
    }
    /**
     * Sets the natKeepAliveIntervalInSeconds
     * Specifies how often in seconds to send a network address translation keepalive package through the VPN
     *
     * @param int $val The value of the natKeepAliveIntervalInSeconds
     *
     * @return AppleVpnAlwaysOnConfiguration
     */
    public function setNatKeepAliveIntervalInSeconds($val)
    {
        $this->_propDict["natKeepAliveIntervalInSeconds"] = $val;
        return $this;
    }
    /**
     * Gets the natKeepAliveOffloadEnable
     * Enable hardware offloading of NAT keepalive signals when the device is asleep
     *
     * @return bool|null The natKeepAliveOffloadEnable
     */
    public function getNatKeepAliveOffloadEnable()
    {
        if (array_key_exists("natKeepAliveOffloadEnable", $this->_propDict)) {
            return $this->_propDict["natKeepAliveOffloadEnable"];
        } else {
            return null;
        }
    }
    /**
     * Sets the natKeepAliveOffloadEnable
     * Enable hardware offloading of NAT keepalive signals when the device is asleep
     *
     * @param bool $val The value of the natKeepAliveOffloadEnable
     *
     * @return AppleVpnAlwaysOnConfiguration
     */
    public function setNatKeepAliveOffloadEnable($val)
    {
        $this->_propDict["natKeepAliveOffloadEnable"] = $val;
        return $this;
    }
    /**
     * Gets the tunnelConfiguration
     * Determines what connections the specific tunnel configuration applies to. Possible values are: wifiAndCellular, cellular, wifi.
     *
     * @return VpnTunnelConfigurationType|null The tunnelConfiguration
     */
    public function getTunnelConfiguration()
    {
        if (array_key_exists("tunnelConfiguration", $this->_propDict)) {
            if (is_a($this->_propDict["tunnelConfiguration"], "XCloner\\Beta\\Microsoft\\Graph\\Model\\VpnTunnelConfigurationType") || is_null($this->_propDict["tunnelConfiguration"])) {
                return $this->_propDict["tunnelConfiguration"];
            } else {
                $this->_propDict["tunnelConfiguration"] = new VpnTunnelConfigurationType($this->_propDict["tunnelConfiguration"]);
                return $this->_propDict["tunnelConfiguration"];
            }
        }
        return null;
    }
    /**
     * Sets the tunnelConfiguration
     * Determines what connections the specific tunnel configuration applies to. Possible values are: wifiAndCellular, cellular, wifi.
     *
     * @param VpnTunnelConfigurationType $val The value to assign to the tunnelConfiguration
     *
     * @return AppleVpnAlwaysOnConfiguration The AppleVpnAlwaysOnConfiguration
     */
    public function setTunnelConfiguration($val)
    {
        $this->_propDict["tunnelConfiguration"] = $val;
        return $this;
    }
    /**
     * Gets the userToggleEnabled
     * Allow the user to toggle the VPN configuration using the UI
     *
     * @return bool|null The userToggleEnabled
     */
    public function getUserToggleEnabled()
    {
        if (array_key_exists("userToggleEnabled", $this->_propDict)) {
            return $this->_propDict["userToggleEnabled"];
        } else {
            return null;
        }
    }
    /**
     * Sets the userToggleEnabled
     * Allow the user to toggle the VPN configuration using the UI
     *
     * @param bool $val The value of the userToggleEnabled
     *
     * @return AppleVpnAlwaysOnConfiguration
     */
    public function setUserToggleEnabled($val)
    {
        $this->_propDict["userToggleEnabled"] = $val;
        return $this;
    }
    /**
     * Gets the voicemailExceptionAction
     * Determine whether voicemail service will be exempt from the always-on VPN connection. Possible values are: forceTrafficViaVPN, allowTrafficOutside, dropTraffic.
     *
     * @return VpnServiceExceptionAction|null The voicemailExceptionAction
     */
    public function getVoicemailExceptionAction()
    {
        if (array_key_exists("voicemailExceptionAction", $this->_propDict)) {
            if (is_a($this->_propDict["voicemailExceptionAction"], "XCloner\\Beta\\Microsoft\\Graph\\Model\\VpnServiceExceptionAction") || is_null($this->_propDict["voicemailExceptionAction"])) {
                return $this->_propDict["voicemailExceptionAction"];
            } else {
                $this->_propDict["voicemailExceptionAction"] = new VpnServiceExceptionAction($this->_propDict["voicemailExceptionAction"]);
                return $this->_propDict["voicemailExceptionAction"];
            }
        }
        return null;
    }
    /**
     * Sets the voicemailExceptionAction
     * Determine whether voicemail service will be exempt from the always-on VPN connection. Possible values are: forceTrafficViaVPN, allowTrafficOutside, dropTraffic.
     *
     * @param VpnServiceExceptionAction $val The value to assign to the voicemailExceptionAction
     *
     * @return AppleVpnAlwaysOnConfiguration The AppleVpnAlwaysOnConfiguration
     */
    public function setVoicemailExceptionAction($val)
    {
        $this->_propDict["voicemailExceptionAction"] = $val;
        return $this;
    }
}
