public static final class Listener.FilterChainMatch extends com.google.protobuf.GeneratedMessageV3 implements Listener.FilterChainMatchOrBuilder
Specifies the match criteria for selecting a specific filter chain for a listener.Protobuf type
envoy.api.v2.listener.FilterChainMatch| Modifier and Type | Class and Description |
|---|---|
static class |
Listener.FilterChainMatch.Builder
Specifies the match criteria for selecting a specific filter chain for a
listener.
|
com.google.protobuf.GeneratedMessageV3.BuilderParent, com.google.protobuf.GeneratedMessageV3.ExtendableBuilder<MessageType extends com.google.protobuf.GeneratedMessageV3.ExtendableMessage,BuilderType extends com.google.protobuf.GeneratedMessageV3.ExtendableBuilder<MessageType,BuilderType>>, com.google.protobuf.GeneratedMessageV3.ExtendableMessage<MessageType extends com.google.protobuf.GeneratedMessageV3.ExtendableMessage>, com.google.protobuf.GeneratedMessageV3.ExtendableMessageOrBuilder<MessageType extends com.google.protobuf.GeneratedMessageV3.ExtendableMessage>, com.google.protobuf.GeneratedMessageV3.FieldAccessorTable| Modifier and Type | Field and Description |
|---|---|
static int |
ADDRESS_SUFFIX_FIELD_NUMBER |
static int |
DESTINATION_PORT_FIELD_NUMBER |
static int |
PREFIX_RANGES_FIELD_NUMBER |
static int |
SNI_DOMAINS_FIELD_NUMBER |
static int |
SOURCE_PORTS_FIELD_NUMBER |
static int |
SOURCE_PREFIX_RANGES_FIELD_NUMBER |
static int |
SUFFIX_LEN_FIELD_NUMBER |
| Modifier and Type | Method and Description |
|---|---|
boolean |
equals(Object obj) |
String |
getAddressSuffix()
If non-empty, an IP address and suffix length to match addresses when the
listener is bound to 0.0.0.0/:: or when use_original_dst is specified.
|
com.google.protobuf.ByteString |
getAddressSuffixBytes()
If non-empty, an IP address and suffix length to match addresses when the
listener is bound to 0.0.0.0/:: or when use_original_dst is specified.
|
static Listener.FilterChainMatch |
getDefaultInstance() |
Listener.FilterChainMatch |
getDefaultInstanceForType() |
static com.google.protobuf.Descriptors.Descriptor |
getDescriptor() |
com.google.protobuf.UInt32Value |
getDestinationPort()
Optional destination port to consider when use_original_dst is set on the
listener in determining a filter chain match.
|
com.google.protobuf.UInt32ValueOrBuilder |
getDestinationPortOrBuilder()
Optional destination port to consider when use_original_dst is set on the
listener in determining a filter chain match.
|
com.google.protobuf.Parser<Listener.FilterChainMatch> |
getParserForType() |
AddressOuterClass.CidrRange |
getPrefixRanges(int index)
If non-empty, an IP address and prefix length to match addresses when the
listener is bound to 0.0.0.0/:: or when use_original_dst is specified.
|
int |
getPrefixRangesCount()
If non-empty, an IP address and prefix length to match addresses when the
listener is bound to 0.0.0.0/:: or when use_original_dst is specified.
|
List<AddressOuterClass.CidrRange> |
getPrefixRangesList()
If non-empty, an IP address and prefix length to match addresses when the
listener is bound to 0.0.0.0/:: or when use_original_dst is specified.
|
AddressOuterClass.CidrRangeOrBuilder |
getPrefixRangesOrBuilder(int index)
If non-empty, an IP address and prefix length to match addresses when the
listener is bound to 0.0.0.0/:: or when use_original_dst is specified.
|
List<? extends AddressOuterClass.CidrRangeOrBuilder> |
getPrefixRangesOrBuilderList()
If non-empty, an IP address and prefix length to match addresses when the
listener is bound to 0.0.0.0/:: or when use_original_dst is specified.
|
int |
getSerializedSize() |
String |
getSniDomains(int index)
If non-empty, the SNI domains to consider.
|
com.google.protobuf.ByteString |
getSniDomainsBytes(int index)
If non-empty, the SNI domains to consider.
|
int |
getSniDomainsCount()
If non-empty, the SNI domains to consider.
|
com.google.protobuf.ProtocolStringList |
getSniDomainsList()
If non-empty, the SNI domains to consider.
|
com.google.protobuf.UInt32Value |
getSourcePorts(int index)
The criteria is satisfied if the source port of the downstream connection
is contained in at least one of the specified ports.
|
int |
getSourcePortsCount()
The criteria is satisfied if the source port of the downstream connection
is contained in at least one of the specified ports.
|
List<com.google.protobuf.UInt32Value> |
getSourcePortsList()
The criteria is satisfied if the source port of the downstream connection
is contained in at least one of the specified ports.
|
com.google.protobuf.UInt32ValueOrBuilder |
getSourcePortsOrBuilder(int index)
The criteria is satisfied if the source port of the downstream connection
is contained in at least one of the specified ports.
|
List<? extends com.google.protobuf.UInt32ValueOrBuilder> |
getSourcePortsOrBuilderList()
The criteria is satisfied if the source port of the downstream connection
is contained in at least one of the specified ports.
|
AddressOuterClass.CidrRange |
getSourcePrefixRanges(int index)
The criteria is satisfied if the source IP address of the downstream
connection is contained in at least one of the specified subnets.
|
int |
getSourcePrefixRangesCount()
The criteria is satisfied if the source IP address of the downstream
connection is contained in at least one of the specified subnets.
|
List<AddressOuterClass.CidrRange> |
getSourcePrefixRangesList()
The criteria is satisfied if the source IP address of the downstream
connection is contained in at least one of the specified subnets.
|
AddressOuterClass.CidrRangeOrBuilder |
getSourcePrefixRangesOrBuilder(int index)
The criteria is satisfied if the source IP address of the downstream
connection is contained in at least one of the specified subnets.
|
List<? extends AddressOuterClass.CidrRangeOrBuilder> |
getSourcePrefixRangesOrBuilderList()
The criteria is satisfied if the source IP address of the downstream
connection is contained in at least one of the specified subnets.
|
com.google.protobuf.UInt32Value |
getSuffixLen()
[#not-implemented-hide:]
.google.protobuf.UInt32Value suffix_len = 5; |
com.google.protobuf.UInt32ValueOrBuilder |
getSuffixLenOrBuilder()
[#not-implemented-hide:]
.google.protobuf.UInt32Value suffix_len = 5; |
com.google.protobuf.UnknownFieldSet |
getUnknownFields() |
boolean |
hasDestinationPort()
Optional destination port to consider when use_original_dst is set on the
listener in determining a filter chain match.
|
int |
hashCode() |
boolean |
hasSuffixLen()
[#not-implemented-hide:]
.google.protobuf.UInt32Value suffix_len = 5; |
protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable |
internalGetFieldAccessorTable() |
boolean |
isInitialized() |
static Listener.FilterChainMatch.Builder |
newBuilder() |
static Listener.FilterChainMatch.Builder |
newBuilder(Listener.FilterChainMatch prototype) |
Listener.FilterChainMatch.Builder |
newBuilderForType() |
protected Listener.FilterChainMatch.Builder |
newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) |
static Listener.FilterChainMatch |
parseDelimitedFrom(InputStream input) |
static Listener.FilterChainMatch |
parseDelimitedFrom(InputStream input,
com.google.protobuf.ExtensionRegistryLite extensionRegistry) |
static Listener.FilterChainMatch |
parseFrom(byte[] data) |
static Listener.FilterChainMatch |
parseFrom(byte[] data,
com.google.protobuf.ExtensionRegistryLite extensionRegistry) |
static Listener.FilterChainMatch |
parseFrom(ByteBuffer data) |
static Listener.FilterChainMatch |
parseFrom(ByteBuffer data,
com.google.protobuf.ExtensionRegistryLite extensionRegistry) |
static Listener.FilterChainMatch |
parseFrom(com.google.protobuf.ByteString data) |
static Listener.FilterChainMatch |
parseFrom(com.google.protobuf.ByteString data,
com.google.protobuf.ExtensionRegistryLite extensionRegistry) |
static Listener.FilterChainMatch |
parseFrom(com.google.protobuf.CodedInputStream input) |
static Listener.FilterChainMatch |
parseFrom(com.google.protobuf.CodedInputStream input,
com.google.protobuf.ExtensionRegistryLite extensionRegistry) |
static Listener.FilterChainMatch |
parseFrom(InputStream input) |
static Listener.FilterChainMatch |
parseFrom(InputStream input,
com.google.protobuf.ExtensionRegistryLite extensionRegistry) |
static com.google.protobuf.Parser<Listener.FilterChainMatch> |
parser() |
Listener.FilterChainMatch.Builder |
toBuilder() |
void |
writeTo(com.google.protobuf.CodedOutputStream output) |
canUseUnsafe, computeStringSize, computeStringSizeNoTag, getAllFields, getDescriptorForType, getField, getOneofFieldDescriptor, getRepeatedField, getRepeatedFieldCount, hasField, hasOneof, internalGetMapField, makeExtensionsImmutable, newBuilderForType, parseDelimitedWithIOException, parseDelimitedWithIOException, parseUnknownField, parseUnknownFieldProto3, parseWithIOException, parseWithIOException, parseWithIOException, parseWithIOException, serializeBooleanMapTo, serializeIntegerMapTo, serializeLongMapTo, serializeStringMapTo, writeReplace, writeString, writeStringNoTagfindInitializationErrors, getInitializationErrorString, hashBoolean, hashEnum, hashEnumList, hashFields, hashLong, toStringaddAll, addAll, checkByteStringIsUtf8, toByteArray, toByteString, writeDelimitedTo, writeToclone, finalize, getClass, notify, notifyAll, wait, wait, waitpublic static final int SNI_DOMAINS_FIELD_NUMBER
public static final int PREFIX_RANGES_FIELD_NUMBER
public static final int ADDRESS_SUFFIX_FIELD_NUMBER
public static final int SUFFIX_LEN_FIELD_NUMBER
public static final int SOURCE_PREFIX_RANGES_FIELD_NUMBER
public static final int SOURCE_PORTS_FIELD_NUMBER
public static final int DESTINATION_PORT_FIELD_NUMBER
public final com.google.protobuf.UnknownFieldSet getUnknownFields()
getUnknownFields in interface com.google.protobuf.MessageOrBuildergetUnknownFields in class com.google.protobuf.GeneratedMessageV3public static final com.google.protobuf.Descriptors.Descriptor getDescriptor()
protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable()
internalGetFieldAccessorTable in class com.google.protobuf.GeneratedMessageV3public com.google.protobuf.ProtocolStringList getSniDomainsList()
If non-empty, the SNI domains to consider. May contain a wildcard prefix, e.g. ``*.example.com``. .. attention:: See the :ref:`FAQ entry <faq_how_to_setup_sni>` on how to configure SNI for more information.
repeated string sni_domains = 1;getSniDomainsList in interface Listener.FilterChainMatchOrBuilderpublic int getSniDomainsCount()
If non-empty, the SNI domains to consider. May contain a wildcard prefix, e.g. ``*.example.com``. .. attention:: See the :ref:`FAQ entry <faq_how_to_setup_sni>` on how to configure SNI for more information.
repeated string sni_domains = 1;getSniDomainsCount in interface Listener.FilterChainMatchOrBuilderpublic String getSniDomains(int index)
If non-empty, the SNI domains to consider. May contain a wildcard prefix, e.g. ``*.example.com``. .. attention:: See the :ref:`FAQ entry <faq_how_to_setup_sni>` on how to configure SNI for more information.
repeated string sni_domains = 1;getSniDomains in interface Listener.FilterChainMatchOrBuilderpublic com.google.protobuf.ByteString getSniDomainsBytes(int index)
If non-empty, the SNI domains to consider. May contain a wildcard prefix, e.g. ``*.example.com``. .. attention:: See the :ref:`FAQ entry <faq_how_to_setup_sni>` on how to configure SNI for more information.
repeated string sni_domains = 1;getSniDomainsBytes in interface Listener.FilterChainMatchOrBuilderpublic List<AddressOuterClass.CidrRange> getPrefixRangesList()
If non-empty, an IP address and prefix length to match addresses when the listener is bound to 0.0.0.0/:: or when use_original_dst is specified. [#not-implemented-hide:]
repeated .envoy.api.v2.core.CidrRange prefix_ranges = 3;getPrefixRangesList in interface Listener.FilterChainMatchOrBuilderpublic List<? extends AddressOuterClass.CidrRangeOrBuilder> getPrefixRangesOrBuilderList()
If non-empty, an IP address and prefix length to match addresses when the listener is bound to 0.0.0.0/:: or when use_original_dst is specified. [#not-implemented-hide:]
repeated .envoy.api.v2.core.CidrRange prefix_ranges = 3;getPrefixRangesOrBuilderList in interface Listener.FilterChainMatchOrBuilderpublic int getPrefixRangesCount()
If non-empty, an IP address and prefix length to match addresses when the listener is bound to 0.0.0.0/:: or when use_original_dst is specified. [#not-implemented-hide:]
repeated .envoy.api.v2.core.CidrRange prefix_ranges = 3;getPrefixRangesCount in interface Listener.FilterChainMatchOrBuilderpublic AddressOuterClass.CidrRange getPrefixRanges(int index)
If non-empty, an IP address and prefix length to match addresses when the listener is bound to 0.0.0.0/:: or when use_original_dst is specified. [#not-implemented-hide:]
repeated .envoy.api.v2.core.CidrRange prefix_ranges = 3;getPrefixRanges in interface Listener.FilterChainMatchOrBuilderpublic AddressOuterClass.CidrRangeOrBuilder getPrefixRangesOrBuilder(int index)
If non-empty, an IP address and prefix length to match addresses when the listener is bound to 0.0.0.0/:: or when use_original_dst is specified. [#not-implemented-hide:]
repeated .envoy.api.v2.core.CidrRange prefix_ranges = 3;getPrefixRangesOrBuilder in interface Listener.FilterChainMatchOrBuilderpublic String getAddressSuffix()
If non-empty, an IP address and suffix length to match addresses when the listener is bound to 0.0.0.0/:: or when use_original_dst is specified. [#not-implemented-hide:]
string address_suffix = 4;getAddressSuffix in interface Listener.FilterChainMatchOrBuilderpublic com.google.protobuf.ByteString getAddressSuffixBytes()
If non-empty, an IP address and suffix length to match addresses when the listener is bound to 0.0.0.0/:: or when use_original_dst is specified. [#not-implemented-hide:]
string address_suffix = 4;getAddressSuffixBytes in interface Listener.FilterChainMatchOrBuilderpublic boolean hasSuffixLen()
[#not-implemented-hide:]
.google.protobuf.UInt32Value suffix_len = 5;hasSuffixLen in interface Listener.FilterChainMatchOrBuilderpublic com.google.protobuf.UInt32Value getSuffixLen()
[#not-implemented-hide:]
.google.protobuf.UInt32Value suffix_len = 5;getSuffixLen in interface Listener.FilterChainMatchOrBuilderpublic com.google.protobuf.UInt32ValueOrBuilder getSuffixLenOrBuilder()
[#not-implemented-hide:]
.google.protobuf.UInt32Value suffix_len = 5;getSuffixLenOrBuilder in interface Listener.FilterChainMatchOrBuilderpublic List<AddressOuterClass.CidrRange> getSourcePrefixRangesList()
The criteria is satisfied if the source IP address of the downstream connection is contained in at least one of the specified subnets. If the parameter is not specified or the list is empty, the source IP address is ignored. [#not-implemented-hide:]
repeated .envoy.api.v2.core.CidrRange source_prefix_ranges = 6;getSourcePrefixRangesList in interface Listener.FilterChainMatchOrBuilderpublic List<? extends AddressOuterClass.CidrRangeOrBuilder> getSourcePrefixRangesOrBuilderList()
The criteria is satisfied if the source IP address of the downstream connection is contained in at least one of the specified subnets. If the parameter is not specified or the list is empty, the source IP address is ignored. [#not-implemented-hide:]
repeated .envoy.api.v2.core.CidrRange source_prefix_ranges = 6;getSourcePrefixRangesOrBuilderList in interface Listener.FilterChainMatchOrBuilderpublic int getSourcePrefixRangesCount()
The criteria is satisfied if the source IP address of the downstream connection is contained in at least one of the specified subnets. If the parameter is not specified or the list is empty, the source IP address is ignored. [#not-implemented-hide:]
repeated .envoy.api.v2.core.CidrRange source_prefix_ranges = 6;getSourcePrefixRangesCount in interface Listener.FilterChainMatchOrBuilderpublic AddressOuterClass.CidrRange getSourcePrefixRanges(int index)
The criteria is satisfied if the source IP address of the downstream connection is contained in at least one of the specified subnets. If the parameter is not specified or the list is empty, the source IP address is ignored. [#not-implemented-hide:]
repeated .envoy.api.v2.core.CidrRange source_prefix_ranges = 6;getSourcePrefixRanges in interface Listener.FilterChainMatchOrBuilderpublic AddressOuterClass.CidrRangeOrBuilder getSourcePrefixRangesOrBuilder(int index)
The criteria is satisfied if the source IP address of the downstream connection is contained in at least one of the specified subnets. If the parameter is not specified or the list is empty, the source IP address is ignored. [#not-implemented-hide:]
repeated .envoy.api.v2.core.CidrRange source_prefix_ranges = 6;getSourcePrefixRangesOrBuilder in interface Listener.FilterChainMatchOrBuilderpublic List<com.google.protobuf.UInt32Value> getSourcePortsList()
The criteria is satisfied if the source port of the downstream connection is contained in at least one of the specified ports. If the parameter is not specified, the source port is ignored. [#not-implemented-hide:]
repeated .google.protobuf.UInt32Value source_ports = 7;getSourcePortsList in interface Listener.FilterChainMatchOrBuilderpublic List<? extends com.google.protobuf.UInt32ValueOrBuilder> getSourcePortsOrBuilderList()
The criteria is satisfied if the source port of the downstream connection is contained in at least one of the specified ports. If the parameter is not specified, the source port is ignored. [#not-implemented-hide:]
repeated .google.protobuf.UInt32Value source_ports = 7;getSourcePortsOrBuilderList in interface Listener.FilterChainMatchOrBuilderpublic int getSourcePortsCount()
The criteria is satisfied if the source port of the downstream connection is contained in at least one of the specified ports. If the parameter is not specified, the source port is ignored. [#not-implemented-hide:]
repeated .google.protobuf.UInt32Value source_ports = 7;getSourcePortsCount in interface Listener.FilterChainMatchOrBuilderpublic com.google.protobuf.UInt32Value getSourcePorts(int index)
The criteria is satisfied if the source port of the downstream connection is contained in at least one of the specified ports. If the parameter is not specified, the source port is ignored. [#not-implemented-hide:]
repeated .google.protobuf.UInt32Value source_ports = 7;getSourcePorts in interface Listener.FilterChainMatchOrBuilderpublic com.google.protobuf.UInt32ValueOrBuilder getSourcePortsOrBuilder(int index)
The criteria is satisfied if the source port of the downstream connection is contained in at least one of the specified ports. If the parameter is not specified, the source port is ignored. [#not-implemented-hide:]
repeated .google.protobuf.UInt32Value source_ports = 7;getSourcePortsOrBuilder in interface Listener.FilterChainMatchOrBuilderpublic boolean hasDestinationPort()
Optional destination port to consider when use_original_dst is set on the listener in determining a filter chain match. [#not-implemented-hide:]
.google.protobuf.UInt32Value destination_port = 8;hasDestinationPort in interface Listener.FilterChainMatchOrBuilderpublic com.google.protobuf.UInt32Value getDestinationPort()
Optional destination port to consider when use_original_dst is set on the listener in determining a filter chain match. [#not-implemented-hide:]
.google.protobuf.UInt32Value destination_port = 8;getDestinationPort in interface Listener.FilterChainMatchOrBuilderpublic com.google.protobuf.UInt32ValueOrBuilder getDestinationPortOrBuilder()
Optional destination port to consider when use_original_dst is set on the listener in determining a filter chain match. [#not-implemented-hide:]
.google.protobuf.UInt32Value destination_port = 8;getDestinationPortOrBuilder in interface Listener.FilterChainMatchOrBuilderpublic final boolean isInitialized()
isInitialized in interface com.google.protobuf.MessageLiteOrBuilderisInitialized in class com.google.protobuf.GeneratedMessageV3public void writeTo(com.google.protobuf.CodedOutputStream output)
throws IOException
writeTo in interface com.google.protobuf.MessageLitewriteTo in class com.google.protobuf.GeneratedMessageV3IOExceptionpublic int getSerializedSize()
getSerializedSize in interface com.google.protobuf.MessageLitegetSerializedSize in class com.google.protobuf.GeneratedMessageV3public boolean equals(Object obj)
equals in interface com.google.protobuf.Messageequals in class com.google.protobuf.AbstractMessagepublic int hashCode()
hashCode in interface com.google.protobuf.MessagehashCode in class com.google.protobuf.AbstractMessagepublic static Listener.FilterChainMatch parseFrom(ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException
com.google.protobuf.InvalidProtocolBufferExceptionpublic static Listener.FilterChainMatch parseFrom(ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException
com.google.protobuf.InvalidProtocolBufferExceptionpublic static Listener.FilterChainMatch parseFrom(com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException
com.google.protobuf.InvalidProtocolBufferExceptionpublic static Listener.FilterChainMatch parseFrom(com.google.protobuf.ByteString data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException
com.google.protobuf.InvalidProtocolBufferExceptionpublic static Listener.FilterChainMatch parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException
com.google.protobuf.InvalidProtocolBufferExceptionpublic static Listener.FilterChainMatch parseFrom(byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException
com.google.protobuf.InvalidProtocolBufferExceptionpublic static Listener.FilterChainMatch parseFrom(InputStream input) throws IOException
IOExceptionpublic static Listener.FilterChainMatch parseFrom(InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws IOException
IOExceptionpublic static Listener.FilterChainMatch parseDelimitedFrom(InputStream input) throws IOException
IOExceptionpublic static Listener.FilterChainMatch parseDelimitedFrom(InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws IOException
IOExceptionpublic static Listener.FilterChainMatch parseFrom(com.google.protobuf.CodedInputStream input) throws IOException
IOExceptionpublic static Listener.FilterChainMatch parseFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws IOException
IOExceptionpublic Listener.FilterChainMatch.Builder newBuilderForType()
newBuilderForType in interface com.google.protobuf.MessagenewBuilderForType in interface com.google.protobuf.MessageLitepublic static Listener.FilterChainMatch.Builder newBuilder()
public static Listener.FilterChainMatch.Builder newBuilder(Listener.FilterChainMatch prototype)
public Listener.FilterChainMatch.Builder toBuilder()
toBuilder in interface com.google.protobuf.MessagetoBuilder in interface com.google.protobuf.MessageLiteprotected Listener.FilterChainMatch.Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent)
newBuilderForType in class com.google.protobuf.GeneratedMessageV3public static Listener.FilterChainMatch getDefaultInstance()
public static com.google.protobuf.Parser<Listener.FilterChainMatch> parser()
public com.google.protobuf.Parser<Listener.FilterChainMatch> getParserForType()
getParserForType in interface com.google.protobuf.MessagegetParserForType in interface com.google.protobuf.MessageLitegetParserForType in class com.google.protobuf.GeneratedMessageV3public Listener.FilterChainMatch getDefaultInstanceForType()
getDefaultInstanceForType in interface com.google.protobuf.MessageLiteOrBuildergetDefaultInstanceForType in interface com.google.protobuf.MessageOrBuilderCopyright © 2018 The Envoy Project. All rights reserved.