|
|
@@ -18,25 +18,20 @@ import (
|
|
|
|
|
|
// Variant of Dial that tunnels the request over WebSockets, since we cannot do
|
|
|
// bi-directional communication over an HTTP connection when in JS.
|
|
|
-func Dial(ctx context.Context, addr string, machineKey key.MachinePrivate, controlKey key.MachinePublic, protocolVersion uint16, dialer dnscache.DialContextFunc) (*controlbase.Conn, error) {
|
|
|
+func Dial(ctx context.Context, host string, httpPort string, httpsPort string, machineKey key.MachinePrivate, controlKey key.MachinePublic, protocolVersion uint16, dialer dnscache.DialContextFunc) (*controlbase.Conn, error) {
|
|
|
init, cont, err := controlbase.ClientDeferred(machineKey, controlKey, protocolVersion)
|
|
|
if err != nil {
|
|
|
return nil, err
|
|
|
}
|
|
|
|
|
|
- host, _, err := net.SplitHostPort(addr)
|
|
|
- if err != nil {
|
|
|
- return nil, err
|
|
|
- }
|
|
|
wsScheme := "wss"
|
|
|
- wsHost := host
|
|
|
if host == "localhost" {
|
|
|
wsScheme = "ws"
|
|
|
- wsHost = addr
|
|
|
+ host = net.JoinHostPort(host, httpPort)
|
|
|
}
|
|
|
wsURL := &url.URL{
|
|
|
Scheme: wsScheme,
|
|
|
- Host: wsHost,
|
|
|
+ Host: host,
|
|
|
Path: serverUpgradePath,
|
|
|
// Can't set HTTP headers on the websocket request, so we have to to send
|
|
|
// the handshake via an HTTP header.
|