extHostTunnelService.ts 2.3 KB
Newer Older
1 2 3 4 5
/*---------------------------------------------------------------------------------------------
 *  Copyright (c) Microsoft Corporation. All rights reserved.
 *  Licensed under the MIT License. See License.txt in the project root for license information.
 *--------------------------------------------------------------------------------------------*/

A
Alex Ross 已提交
6
import { ExtHostTunnelServiceShape } from 'vs/workbench/api/common/extHost.protocol';
7
import { createDecorator } from 'vs/platform/instantiation/common/instantiation';
A
Alex Ross 已提交
8
import * as vscode from 'vscode';
A
Alex Ross 已提交
9
import { RemoteTunnel, TunnelOptions } from 'vs/platform/remote/common/tunnel';
10
import { IDisposable } from 'vs/base/common/lifecycle';
A
Alex Ross 已提交
11 12

export interface TunnelDto {
A
Alex Ross 已提交
13
	remoteAddress: { port: number, host: string };
A
Alex Ross 已提交
14 15
	localAddress: string;
}
16

17 18
export namespace TunnelDto {
	export function fromApiTunnel(tunnel: vscode.Tunnel): TunnelDto {
A
Alex Ross 已提交
19
		return { remoteAddress: tunnel.remoteAddress, localAddress: tunnel.localAddress };
20 21
	}
	export function fromServiceTunnel(tunnel: RemoteTunnel): TunnelDto {
A
Alex Ross 已提交
22
		return { remoteAddress: { host: tunnel.tunnelRemoteHost, port: tunnel.tunnelRemotePort }, localAddress: tunnel.localAddress };
23 24 25 26 27 28 29 30
	}
}

export interface Tunnel extends vscode.Disposable {
	remote: { port: number, host: string };
	localAddress: string;
}

31
export interface IExtHostTunnelService extends ExtHostTunnelServiceShape {
A
Alex Ross 已提交
32
	readonly _serviceBrand: undefined;
A
Alex Ross 已提交
33
	openTunnel(forward: TunnelOptions): Promise<vscode.Tunnel | undefined>;
34
	setForwardPortProvider(provider: vscode.RemoteAuthorityResolver | undefined): Promise<IDisposable>;
35 36 37
}

export const IExtHostTunnelService = createDecorator<IExtHostTunnelService>('IExtHostTunnelService');
38 39 40

export class ExtHostTunnelService implements IExtHostTunnelService {
	_serviceBrand: undefined;
A
Alex Ross 已提交
41
	async openTunnel(forward: TunnelOptions): Promise<vscode.Tunnel | undefined> {
42 43
		return undefined;
	}
44
	async $findCandidatePorts(): Promise<{ host: string, port: number; detail: string; }[]> {
45 46
		return [];
	}
47 48 49 50
	async setForwardPortProvider(provider: vscode.RemoteAuthorityResolver | undefined): Promise<IDisposable> { return { dispose: () => { } }; }
	$forwardPort(tunnelOptions: TunnelOptions): Promise<TunnelDto> | undefined { return undefined; }
	async $closeTunnel(remote: { host: string, port: number }): Promise<void> { }

51
}