import { BinaryReader, BinaryWriter } from '@bufbuild/protobuf/wire';
import { IPOrDomain } from '../../common/net/address';
import { TypedMessage } from '../../common/serial/typed_message';
export declare const protobufPackage = "xray.transport.internet";
export declare enum DomainStrategy {
    AS_IS = 0,
    USE_IP = 1,
    USE_IP4 = 2,
    USE_IP6 = 3,
    USE_IP46 = 4,
    USE_IP64 = 5,
    FORCE_IP = 6,
    FORCE_IP4 = 7,
    FORCE_IP6 = 8,
    FORCE_IP46 = 9,
    FORCE_IP64 = 10,
    UNRECOGNIZED = -1
}
export declare function domainStrategyFromJSON(object: any): DomainStrategy;
export declare function domainStrategyToJSON(object: DomainStrategy): string;
export declare enum AddressPortStrategy {
    None = 0,
    SrvPortOnly = 1,
    SrvAddressOnly = 2,
    SrvPortAndAddress = 3,
    TxtPortOnly = 4,
    TxtAddressOnly = 5,
    TxtPortAndAddress = 6,
    UNRECOGNIZED = -1
}
export declare function addressPortStrategyFromJSON(object: any): AddressPortStrategy;
export declare function addressPortStrategyToJSON(object: AddressPortStrategy): string;
export interface TransportConfig {
    $type: 'xray.transport.internet.TransportConfig';
    /** Transport protocol name. */
    protocolName: string;
    /** Specific transport protocol settings. */
    settings: TypedMessage | undefined;
}
export interface StreamConfig {
    $type: 'xray.transport.internet.StreamConfig';
    address: IPOrDomain | undefined;
    port: number;
    /** Effective network. */
    protocolName: string;
    transportSettings: TransportConfig[];
    /** Type of security. Must be a message name of the settings proto. */
    securityType: string;
    /** Transport security settings. They can be either TLS or REALITY. */
    securitySettings: TypedMessage[];
    socketSettings: SocketConfig | undefined;
}
export interface ProxyConfig {
    $type: 'xray.transport.internet.ProxyConfig';
    tag: string;
    transportLayerProxy: boolean;
}
export interface CustomSockopt {
    $type: 'xray.transport.internet.CustomSockopt';
    level: string;
    opt: string;
    value: string;
    type: string;
}
/** SocketConfig is options to be applied on network sockets. */
export interface SocketConfig {
    $type: 'xray.transport.internet.SocketConfig';
    /** Mark of the connection. If non-zero, the value will be set to SO_MARK. */
    mark: number;
    /** TFO is the state of TFO settings. */
    tfo: number;
    /** TProxy is for enabling TProxy socket option. */
    tproxy: SocketConfig_TProxyMode;
    /**
     * ReceiveOriginalDestAddress is for enabling IP_RECVORIGDSTADDR socket
     * option. This option is for UDP only.
     */
    receiveOriginalDestAddress: boolean;
    bindAddress: Uint8Array;
    bindPort: number;
    acceptProxyProtocol: boolean;
    domainStrategy: DomainStrategy;
    dialerProxy: string;
    tcpKeepAliveInterval: number;
    tcpKeepAliveIdle: number;
    tcpCongestion: string;
    interface: string;
    v6only: boolean;
    tcpWindowClamp: number;
    tcpUserTimeout: number;
    tcpMaxSeg: number;
    penetrate: boolean;
    tcpMptcp: boolean;
    customSockopt: CustomSockopt[];
    addressPortStrategy: AddressPortStrategy;
}
export declare enum SocketConfig_TProxyMode {
    /** Off - TProxy is off. */
    Off = 0,
    /** TProxy - TProxy mode. */
    TProxy = 1,
    /** Redirect - Redirect mode. */
    Redirect = 2,
    UNRECOGNIZED = -1
}
export declare function socketConfig_TProxyModeFromJSON(object: any): SocketConfig_TProxyMode;
export declare function socketConfig_TProxyModeToJSON(object: SocketConfig_TProxyMode): string;
export declare const TransportConfig: MessageFns<TransportConfig, 'xray.transport.internet.TransportConfig'>;
export declare const StreamConfig: MessageFns<StreamConfig, 'xray.transport.internet.StreamConfig'>;
export declare const ProxyConfig: MessageFns<ProxyConfig, 'xray.transport.internet.ProxyConfig'>;
export declare const CustomSockopt: MessageFns<CustomSockopt, 'xray.transport.internet.CustomSockopt'>;
export declare const SocketConfig: MessageFns<SocketConfig, 'xray.transport.internet.SocketConfig'>;
type Builtin = Date | Function | Uint8Array | string | number | boolean | undefined;
export type DeepPartial<T> = T extends Builtin ? T : T extends globalThis.Array<infer U> ? globalThis.Array<DeepPartial<U>> : T extends ReadonlyArray<infer U> ? ReadonlyArray<DeepPartial<U>> : T extends {} ? {
    [K in Exclude<keyof T, '$type'>]?: DeepPartial<T[K]>;
} : Partial<T>;
export interface MessageFns<T, V extends string> {
    readonly $type: V;
    encode(message: T, writer?: BinaryWriter): BinaryWriter;
    decode(input: BinaryReader | Uint8Array, length?: number): T;
    fromJSON(object: any): T;
    toJSON(message: T): unknown;
    create(base?: DeepPartial<T>): T;
    fromPartial(object: DeepPartial<T>): T;
}
export {};
//# sourceMappingURL=config.d.ts.map