/*---------------------------------------------------------------------------------------------
 *  Copyright (c) Microsoft Corporation. All rights reserved.
 *  Licensed under the MIT License. See License.txt in the project root for license information.
 *--------------------------------------------------------------------------------------------*/
import { Disposable } from "../../../base/common/lifecycle.mjs";
import { IConfigurationService } from "../../configuration/common/configuration.mjs";
import { ILogService } from "../../log/common/log.mjs";
import { IProductService } from "../../product/common/productService.mjs";
import { IAddressProvider, ISocketFactory } from "../../remote/common/remoteAgentConnection.mjs";
import { AbstractTunnelService, ISharedTunnelsService as ISharedTunnelsService, RemoteTunnel } from "../common/tunnel.mjs";
import { ISignService } from "../../sign/common/sign.mjs";
export declare class BaseTunnelService extends AbstractTunnelService {
    private readonly socketFactory;
    private readonly signService;
    private readonly productService;
    constructor(socketFactory: ISocketFactory, logService: ILogService, signService: ISignService, productService: IProductService, configurationService: IConfigurationService);
    isPortPrivileged(port: number): boolean;
    protected retainOrCreateTunnel(addressProvider: IAddressProvider, remoteHost: string, remotePort: number, localPort: number | undefined, elevateIfNeeded: boolean, privacy?: string, protocol?: string): Promise<RemoteTunnel | undefined> | undefined;
}
export declare class TunnelService extends BaseTunnelService {
    constructor(logService: ILogService, signService: ISignService, productService: IProductService, configurationService: IConfigurationService);
}
export declare class SharedTunnelsService extends Disposable implements ISharedTunnelsService {
    protected readonly logService: ILogService;
    private readonly productService;
    private readonly signService;
    private readonly configurationService;
    readonly _serviceBrand: undefined;
    private readonly _tunnelServices;
    constructor(logService: ILogService, productService: IProductService, signService: ISignService, configurationService: IConfigurationService);
    openTunnel(authority: string, addressProvider: IAddressProvider | undefined, remoteHost: string | undefined, remotePort: number, localPort?: number, elevateIfNeeded?: boolean, privacy?: string, protocol?: string): Promise<RemoteTunnel | undefined>;
}
