/* tslint:disable */
/* eslint-disable */
/**
 * Jellyfin API
 * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
 *
 * The version of the OpenAPI document: 10.8.9
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

import { exists, mapValues } from '../runtime';
/**
 * Defines the Jellyfin.Networking.Configuration.NetworkConfiguration.
 * @export
 * @interface NetworkConfiguration
 */
export interface NetworkConfiguration {
    /**
     * Gets or sets a value indicating whether the server should force connections over HTTPS.
     * @type {boolean}
     * @memberof NetworkConfiguration
     */
    requireHttps?: boolean;
    /**
     * Gets or sets the filesystem path of an X.509 certificate to use for SSL.
     * @type {string}
     * @memberof NetworkConfiguration
     */
    certificatePath?: string;
    /**
     * Gets or sets the password required to access the X.509 certificate data in the file specified by Jellyfin.Networking.Configuration.NetworkConfiguration.CertificatePath.
     * @type {string}
     * @memberof NetworkConfiguration
     */
    certificatePassword?: string;
    /**
     * Gets or sets a value used to specify the URL prefix that your Jellyfin instance can be accessed at.
     * @type {string}
     * @memberof NetworkConfiguration
     */
    baseUrl?: string;
    /**
     * Gets or sets the public HTTPS port.
     * @type {number}
     * @memberof NetworkConfiguration
     */
    publicHttpsPort?: number;
    /**
     * Gets or sets the HTTP server port number.
     * @type {number}
     * @memberof NetworkConfiguration
     */
    httpServerPortNumber?: number;
    /**
     * Gets or sets the HTTPS server port number.
     * @type {number}
     * @memberof NetworkConfiguration
     */
    httpsPortNumber?: number;
    /**
     * Gets or sets a value indicating whether to use HTTPS.
     * @type {boolean}
     * @memberof NetworkConfiguration
     */
    enableHttps?: boolean;
    /**
     * Gets or sets the public mapped port.
     * @type {number}
     * @memberof NetworkConfiguration
     */
    publicPort?: number;
    /**
     * Gets or sets a value indicating whether the http port should be mapped as part of UPnP automatic port forwarding.
     * @type {boolean}
     * @memberof NetworkConfiguration
     */
    uPnPCreateHttpPortMap?: boolean;
    /**
     * Gets or sets the UDPPortRange.
     * @type {string}
     * @memberof NetworkConfiguration
     */
    uDPPortRange?: string;
    /**
     * Gets or sets a value indicating whether gets or sets IPV6 capability.
     * @type {boolean}
     * @memberof NetworkConfiguration
     */
    enableIPV6?: boolean;
    /**
     * Gets or sets a value indicating whether gets or sets IPV4 capability.
     * @type {boolean}
     * @memberof NetworkConfiguration
     */
    enableIPV4?: boolean;
    /**
     * Gets or sets a value indicating whether detailed SSDP logs are sent to the console/log.
     * "Emby.Dlna": "Debug" must be set in logging.default.json for this property to have any effect.
     * @type {boolean}
     * @memberof NetworkConfiguration
     */
    enableSSDPTracing?: boolean;
    /**
     * Gets or sets the SSDPTracingFilter
     * Gets or sets a value indicating whether an IP address is to be used to filter the detailed ssdp logs that are being sent to the console/log.
     * If the setting "Emby.Dlna": "Debug" msut be set in logging.default.json for this property to work.
     * @type {string}
     * @memberof NetworkConfiguration
     */
    sSDPTracingFilter?: string;
    /**
     * Gets or sets the number of times SSDP UDP messages are sent.
     * @type {number}
     * @memberof NetworkConfiguration
     */
    uDPSendCount?: number;
    /**
     * Gets or sets the delay between each groups of SSDP messages (in ms).
     * @type {number}
     * @memberof NetworkConfiguration
     */
    uDPSendDelay?: number;
    /**
     * Gets or sets a value indicating whether address names that match Jellyfin.Networking.Configuration.NetworkConfiguration.VirtualInterfaceNames should be Ignore for the purposes of binding.
     * @type {boolean}
     * @memberof NetworkConfiguration
     */
    ignoreVirtualInterfaces?: boolean;
    /**
     * Gets or sets a value indicating the interfaces that should be ignored. The list can be comma separated. <seealso cref="P:Jellyfin.Networking.Configuration.NetworkConfiguration.IgnoreVirtualInterfaces" />.
     * @type {string}
     * @memberof NetworkConfiguration
     */
    virtualInterfaceNames?: string;
    /**
     * Gets or sets the time (in seconds) between the pings of SSDP gateway monitor.
     * @type {number}
     * @memberof NetworkConfiguration
     */
    gatewayMonitorPeriod?: number;
    /**
     * Gets a value indicating whether multi-socket binding is available.
     * @type {boolean}
     * @memberof NetworkConfiguration
     */
    readonly enableMultiSocketBinding?: boolean;
    /**
     * Gets or sets a value indicating whether all IPv6 interfaces should be treated as on the internal network.
     * Depending on the address range implemented ULA ranges might not be used.
     * @type {boolean}
     * @memberof NetworkConfiguration
     */
    trustAllIP6Interfaces?: boolean;
    /**
     * Gets or sets the ports that HDHomerun uses.
     * @type {string}
     * @memberof NetworkConfiguration
     */
    hDHomerunPortRange?: string;
    /**
     * Gets or sets the PublishedServerUriBySubnet
     * Gets or sets PublishedServerUri to advertise for specific subnets.
     * @type {Array<string>}
     * @memberof NetworkConfiguration
     */
    publishedServerUriBySubnet?: Array<string>;
    /**
     * Gets or sets a value indicating whether Autodiscovery tracing is enabled.
     * @type {boolean}
     * @memberof NetworkConfiguration
     */
    autoDiscoveryTracing?: boolean;
    /**
     * Gets or sets a value indicating whether Autodiscovery is enabled.
     * @type {boolean}
     * @memberof NetworkConfiguration
     */
    autoDiscovery?: boolean;
    /**
     * Gets or sets the filter for remote IP connectivity. Used in conjuntion with <seealso cref="P:Jellyfin.Networking.Configuration.NetworkConfiguration.IsRemoteIPFilterBlacklist" />.
     * @type {Array<string>}
     * @memberof NetworkConfiguration
     */
    remoteIPFilter?: Array<string>;
    /**
     * Gets or sets a value indicating whether <seealso cref="P:Jellyfin.Networking.Configuration.NetworkConfiguration.RemoteIPFilter" /> contains a blacklist or a whitelist. Default is a whitelist.
     * @type {boolean}
     * @memberof NetworkConfiguration
     */
    isRemoteIPFilterBlacklist?: boolean;
    /**
     * Gets or sets a value indicating whether to enable automatic port forwarding.
     * @type {boolean}
     * @memberof NetworkConfiguration
     */
    enableUPnP?: boolean;
    /**
     * Gets or sets a value indicating whether access outside of the LAN is permitted.
     * @type {boolean}
     * @memberof NetworkConfiguration
     */
    enableRemoteAccess?: boolean;
    /**
     * Gets or sets the subnets that are deemed to make up the LAN.
     * @type {Array<string>}
     * @memberof NetworkConfiguration
     */
    localNetworkSubnets?: Array<string>;
    /**
     * Gets or sets the interface addresses which Jellyfin will bind to. If empty, all interfaces will be used.
     * @type {Array<string>}
     * @memberof NetworkConfiguration
     */
    localNetworkAddresses?: Array<string>;
    /**
     * Gets or sets the known proxies. If the proxy is a network, it's added to the KnownNetworks.
     * @type {Array<string>}
     * @memberof NetworkConfiguration
     */
    knownProxies?: Array<string>;
    /**
     * Gets or sets a value indicating whether the published server uri is based on information in HTTP requests.
     * @type {boolean}
     * @memberof NetworkConfiguration
     */
    enablePublishedServerUriByRequest?: boolean;
}

/**
 * Check if a given object implements the NetworkConfiguration interface.
 */
export function instanceOfNetworkConfiguration(value: object): boolean {
    let isInstance = true;

    return isInstance;
}

export function NetworkConfigurationFromJSON(json: any): NetworkConfiguration {
    return NetworkConfigurationFromJSONTyped(json, false);
}

export function NetworkConfigurationFromJSONTyped(json: any, ignoreDiscriminator: boolean): NetworkConfiguration {
    if ((json === undefined) || (json === null)) {
        return json;
    }
    return {
        
        'requireHttps': !exists(json, 'RequireHttps') ? undefined : json['RequireHttps'],
        'certificatePath': !exists(json, 'CertificatePath') ? undefined : json['CertificatePath'],
        'certificatePassword': !exists(json, 'CertificatePassword') ? undefined : json['CertificatePassword'],
        'baseUrl': !exists(json, 'BaseUrl') ? undefined : json['BaseUrl'],
        'publicHttpsPort': !exists(json, 'PublicHttpsPort') ? undefined : json['PublicHttpsPort'],
        'httpServerPortNumber': !exists(json, 'HttpServerPortNumber') ? undefined : json['HttpServerPortNumber'],
        'httpsPortNumber': !exists(json, 'HttpsPortNumber') ? undefined : json['HttpsPortNumber'],
        'enableHttps': !exists(json, 'EnableHttps') ? undefined : json['EnableHttps'],
        'publicPort': !exists(json, 'PublicPort') ? undefined : json['PublicPort'],
        'uPnPCreateHttpPortMap': !exists(json, 'UPnPCreateHttpPortMap') ? undefined : json['UPnPCreateHttpPortMap'],
        'uDPPortRange': !exists(json, 'UDPPortRange') ? undefined : json['UDPPortRange'],
        'enableIPV6': !exists(json, 'EnableIPV6') ? undefined : json['EnableIPV6'],
        'enableIPV4': !exists(json, 'EnableIPV4') ? undefined : json['EnableIPV4'],
        'enableSSDPTracing': !exists(json, 'EnableSSDPTracing') ? undefined : json['EnableSSDPTracing'],
        'sSDPTracingFilter': !exists(json, 'SSDPTracingFilter') ? undefined : json['SSDPTracingFilter'],
        'uDPSendCount': !exists(json, 'UDPSendCount') ? undefined : json['UDPSendCount'],
        'uDPSendDelay': !exists(json, 'UDPSendDelay') ? undefined : json['UDPSendDelay'],
        'ignoreVirtualInterfaces': !exists(json, 'IgnoreVirtualInterfaces') ? undefined : json['IgnoreVirtualInterfaces'],
        'virtualInterfaceNames': !exists(json, 'VirtualInterfaceNames') ? undefined : json['VirtualInterfaceNames'],
        'gatewayMonitorPeriod': !exists(json, 'GatewayMonitorPeriod') ? undefined : json['GatewayMonitorPeriod'],
        'enableMultiSocketBinding': !exists(json, 'EnableMultiSocketBinding') ? undefined : json['EnableMultiSocketBinding'],
        'trustAllIP6Interfaces': !exists(json, 'TrustAllIP6Interfaces') ? undefined : json['TrustAllIP6Interfaces'],
        'hDHomerunPortRange': !exists(json, 'HDHomerunPortRange') ? undefined : json['HDHomerunPortRange'],
        'publishedServerUriBySubnet': !exists(json, 'PublishedServerUriBySubnet') ? undefined : json['PublishedServerUriBySubnet'],
        'autoDiscoveryTracing': !exists(json, 'AutoDiscoveryTracing') ? undefined : json['AutoDiscoveryTracing'],
        'autoDiscovery': !exists(json, 'AutoDiscovery') ? undefined : json['AutoDiscovery'],
        'remoteIPFilter': !exists(json, 'RemoteIPFilter') ? undefined : json['RemoteIPFilter'],
        'isRemoteIPFilterBlacklist': !exists(json, 'IsRemoteIPFilterBlacklist') ? undefined : json['IsRemoteIPFilterBlacklist'],
        'enableUPnP': !exists(json, 'EnableUPnP') ? undefined : json['EnableUPnP'],
        'enableRemoteAccess': !exists(json, 'EnableRemoteAccess') ? undefined : json['EnableRemoteAccess'],
        'localNetworkSubnets': !exists(json, 'LocalNetworkSubnets') ? undefined : json['LocalNetworkSubnets'],
        'localNetworkAddresses': !exists(json, 'LocalNetworkAddresses') ? undefined : json['LocalNetworkAddresses'],
        'knownProxies': !exists(json, 'KnownProxies') ? undefined : json['KnownProxies'],
        'enablePublishedServerUriByRequest': !exists(json, 'EnablePublishedServerUriByRequest') ? undefined : json['EnablePublishedServerUriByRequest'],
    };
}

export function NetworkConfigurationToJSON(value?: NetworkConfiguration | null): any {
    if (value === undefined) {
        return undefined;
    }
    if (value === null) {
        return null;
    }
    return {
        
        'RequireHttps': value.requireHttps,
        'CertificatePath': value.certificatePath,
        'CertificatePassword': value.certificatePassword,
        'BaseUrl': value.baseUrl,
        'PublicHttpsPort': value.publicHttpsPort,
        'HttpServerPortNumber': value.httpServerPortNumber,
        'HttpsPortNumber': value.httpsPortNumber,
        'EnableHttps': value.enableHttps,
        'PublicPort': value.publicPort,
        'UPnPCreateHttpPortMap': value.uPnPCreateHttpPortMap,
        'UDPPortRange': value.uDPPortRange,
        'EnableIPV6': value.enableIPV6,
        'EnableIPV4': value.enableIPV4,
        'EnableSSDPTracing': value.enableSSDPTracing,
        'SSDPTracingFilter': value.sSDPTracingFilter,
        'UDPSendCount': value.uDPSendCount,
        'UDPSendDelay': value.uDPSendDelay,
        'IgnoreVirtualInterfaces': value.ignoreVirtualInterfaces,
        'VirtualInterfaceNames': value.virtualInterfaceNames,
        'GatewayMonitorPeriod': value.gatewayMonitorPeriod,
        'TrustAllIP6Interfaces': value.trustAllIP6Interfaces,
        'HDHomerunPortRange': value.hDHomerunPortRange,
        'PublishedServerUriBySubnet': value.publishedServerUriBySubnet,
        'AutoDiscoveryTracing': value.autoDiscoveryTracing,
        'AutoDiscovery': value.autoDiscovery,
        'RemoteIPFilter': value.remoteIPFilter,
        'IsRemoteIPFilterBlacklist': value.isRemoteIPFilterBlacklist,
        'EnableUPnP': value.enableUPnP,
        'EnableRemoteAccess': value.enableRemoteAccess,
        'LocalNetworkSubnets': value.localNetworkSubnets,
        'LocalNetworkAddresses': value.localNetworkAddresses,
        'KnownProxies': value.knownProxies,
        'EnablePublishedServerUriByRequest': value.enablePublishedServerUriByRequest,
    };
}

