/*
 * Licensed to Elasticsearch under one or more contributor
 * license agreements. See the NOTICE file distributed with
 * this work for additional information regarding copyright
 * ownership. Elasticsearch licenses this file to you under
 * the Apache License, Version 2.0 (the "License"); you may
 * not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *    http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License 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.
 */
apply plugin: "nebula.maven-scm"

esplugin {
    description 'The nio transport.'
    classname 'org.elasticsearch.transport.nio.NioTransportPlugin'
    hasClientJar = true
}

dependencies {
    compile project(':libs:elasticsearch-nio')

    // network stack
    compile "io.netty:netty-buffer:${versions.netty}"
    compile "io.netty:netty-codec:${versions.netty}"
    compile "io.netty:netty-codec-http:${versions.netty}"
    compile "io.netty:netty-common:${versions.netty}"
    compile "io.netty:netty-handler:${versions.netty}"
    compile "io.netty:netty-resolver:${versions.netty}"
    compile "io.netty:netty-transport:${versions.netty}"
}

dependencyLicenses {
    mapping from: /netty-.*/, to: 'netty'
}

thirdPartyAudit {
   ignoreMissingClasses (
        // from io.netty.handler.codec.protobuf.ProtobufDecoder (netty)
        'com.google.protobuf.ExtensionRegistry',
        'com.google.protobuf.MessageLite$Builder',
        'com.google.protobuf.MessageLite',
        'com.google.protobuf.Parser',

        // from io.netty.logging.CommonsLoggerFactory (netty)
        'org.apache.commons.logging.Log',
        'org.apache.commons.logging.LogFactory',

        // from Log4j (deliberate, Netty will fallback to Log4j 2)
        'org.apache.log4j.Level',
        'org.apache.log4j.Logger',

        // from io.netty.handler.ssl.util.BouncyCastleSelfSignedCertGenerator (netty)
        'org.bouncycastle.cert.X509v3CertificateBuilder',
        'org.bouncycastle.cert.jcajce.JcaX509CertificateConverter',
        'org.bouncycastle.cert.jcajce.JcaX509v3CertificateBuilder',
        'org.bouncycastle.jce.provider.BouncyCastleProvider',
        'org.bouncycastle.operator.jcajce.JcaContentSignerBuilder',

        // from io.netty.handler.ssl.JettyNpnSslEngine (netty)
        'org.eclipse.jetty.npn.NextProtoNego$ClientProvider',
        'org.eclipse.jetty.npn.NextProtoNego$ServerProvider',
        'org.eclipse.jetty.npn.NextProtoNego',

        // from io.netty.handler.codec.marshalling.ChannelBufferByteInput (netty)
        'org.jboss.marshalling.ByteInput',

        // from io.netty.handler.codec.marshalling.ChannelBufferByteOutput (netty)
        'org.jboss.marshalling.ByteOutput',

        // from io.netty.handler.codec.marshalling.CompatibleMarshallingEncoder (netty)
        'org.jboss.marshalling.Marshaller',

        // from io.netty.handler.codec.marshalling.ContextBoundUnmarshallerProvider (netty)
        'org.jboss.marshalling.MarshallerFactory',
        'org.jboss.marshalling.MarshallingConfiguration',
        'org.jboss.marshalling.Unmarshaller',

        // from io.netty.util.internal.logging.InternalLoggerFactory (netty) - it's optional
        'org.slf4j.helpers.FormattingTuple',
        'org.slf4j.helpers.MessageFormatter',
        'org.slf4j.Logger',
        'org.slf4j.LoggerFactory',
        'org.slf4j.spi.LocationAwareLogger',

        'com.google.protobuf.ExtensionRegistryLite',
        'com.google.protobuf.MessageLiteOrBuilder',
        'com.google.protobuf.nano.CodedOutputByteBufferNano',
        'com.google.protobuf.nano.MessageNano',
        'com.jcraft.jzlib.Deflater',
        'com.jcraft.jzlib.Inflater',
        'com.jcraft.jzlib.JZlib$WrapperType',
        'com.jcraft.jzlib.JZlib',
        'com.ning.compress.BufferRecycler',
        'com.ning.compress.lzf.ChunkDecoder',
        'com.ning.compress.lzf.ChunkEncoder',
        'com.ning.compress.lzf.LZFEncoder',
        'com.ning.compress.lzf.util.ChunkDecoderFactory',
        'com.ning.compress.lzf.util.ChunkEncoderFactory',
        'lzma.sdk.lzma.Encoder',
        'net.jpountz.lz4.LZ4Compressor',
        'net.jpountz.lz4.LZ4Factory',
        'net.jpountz.lz4.LZ4FastDecompressor',
        'net.jpountz.xxhash.StreamingXXHash32',
        'net.jpountz.xxhash.XXHashFactory',
        'org.eclipse.jetty.alpn.ALPN$ClientProvider',
        'org.eclipse.jetty.alpn.ALPN$ServerProvider',
        'org.eclipse.jetty.alpn.ALPN',

        'org.conscrypt.AllocatedBuffer',
        'org.conscrypt.BufferAllocator',
        'org.conscrypt.Conscrypt',
        'org.conscrypt.HandshakeListener',

        // from io.netty.handler.ssl.OpenSslEngine (netty)
        'io.netty.internal.tcnative.Buffer',
        'io.netty.internal.tcnative.Library',
        'io.netty.internal.tcnative.SSL',
        'io.netty.internal.tcnative.SSLContext',
        'io.netty.internal.tcnative.SSLPrivateKeyMethod',
        'io.netty.internal.tcnative.CertificateCallback',
        'io.netty.internal.tcnative.CertificateVerifier',
        'io.netty.internal.tcnative.SessionTicketKey',
        'io.netty.internal.tcnative.SniHostNameMatcher',
    )    

    ignoreViolations (

        'io.netty.util.internal.PlatformDependent0',
        'io.netty.util.internal.PlatformDependent0$1',
        'io.netty.util.internal.PlatformDependent0$2',
        'io.netty.util.internal.PlatformDependent0$3',
        'io.netty.util.internal.PlatformDependent0$5',
        'io.netty.util.internal.shaded.org.jctools.queues.BaseLinkedQueueConsumerNodeRef',
        'io.netty.util.internal.shaded.org.jctools.queues.BaseLinkedQueueProducerNodeRef',
        'io.netty.util.internal.shaded.org.jctools.queues.BaseMpscLinkedArrayQueueColdProducerFields',
        'io.netty.util.internal.shaded.org.jctools.queues.BaseMpscLinkedArrayQueueConsumerFields',
        'io.netty.util.internal.shaded.org.jctools.queues.BaseMpscLinkedArrayQueueProducerFields',
        'io.netty.util.internal.shaded.org.jctools.queues.LinkedQueueNode',
        'io.netty.util.internal.shaded.org.jctools.queues.MpscArrayQueueConsumerIndexField',
        'io.netty.util.internal.shaded.org.jctools.queues.MpscArrayQueueProducerIndexField',
        'io.netty.util.internal.shaded.org.jctools.queues.MpscArrayQueueProducerLimitField',
        'io.netty.util.internal.shaded.org.jctools.util.UnsafeAccess',
        'io.netty.util.internal.shaded.org.jctools.util.UnsafeRefArrayAccess',

        'io.netty.handler.ssl.util.OpenJdkSelfSignedCertGenerator'
    )
}
rootProject.globalInfo.ready {
    if (project.inFipsJvm == false) {
        // BouncyCastleFIPS provides this class, so the exclusion is invalid when running CI in
        // a FIPS JVM with BouncyCastleFIPS Provider
        thirdPartyAudit.ignoreMissingClasses(
                'org.bouncycastle.asn1.x500.X500Name'
        )
    }
}