MCPcopy Index your code
hub / github.com/coder/coder / NewConn

Method NewConn

vpn/client.go:95–217  ·  view source on GitHub ↗
(initCtx context.Context, serverURL *url.URL, token string, options *Options)

Source from the content-addressed store, hash-verified

93}
94
95func (*client) NewConn(initCtx context.Context, serverURL *url.URL, token string, options *Options) (vpnC Conn, err error) {
96 if options == nil {
97 options = &Options{}
98 }
99
100 if options.Headers == nil {
101 options.Headers = http.Header{}
102 }
103
104 headers := options.Headers
105 sdk := codersdk.New(serverURL)
106 sdk.SetSessionToken(token)
107 sdk.HTTPClient.Transport = &codersdk.HeaderTransport{
108 Transport: http.DefaultTransport,
109 Header: headers.Clone(),
110 }
111
112 // New context, separate from initCtx. We don't want to cancel the
113 // connection if initCtx is canceled.
114 ctx, cancel := context.WithCancel(context.Background())
115 defer func() {
116 if err != nil {
117 cancel()
118 }
119 }()
120
121 rpcURL, err := sdk.URL.Parse("/api/v2/tailnet")
122 if err != nil {
123 return nil, xerrors.Errorf("parse rpc url: %w", err)
124 }
125
126 me, err := sdk.User(initCtx, codersdk.Me)
127 if err != nil {
128 return nil, xerrors.Errorf("get user: %w", err)
129 }
130
131 connInfo, err := workspacesdk.New(sdk).AgentConnectionInfoGeneric(initCtx)
132 if err != nil {
133 return nil, xerrors.Errorf("get connection info: %w", err)
134 }
135 // default to DNS suffix of "coder" if the server hasn't set it (might be too old).
136 dnsNameOptions := tailnet.DNSNameOptions{Suffix: tailnet.CoderDNSSuffix}
137 dnsMatch := tailnet.CoderDNSSuffix
138 if connInfo.HostnameSuffix != "" {
139 dnsNameOptions.Suffix = connInfo.HostnameSuffix
140 dnsMatch = connInfo.HostnameSuffix
141 }
142
143 headers.Set(codersdk.SessionTokenHeader, token)
144 dialer := workspacesdk.NewWebsocketDialer(options.Logger, rpcURL, &websocket.DialOptions{
145 HTTPClient: sdk.HTTPClient,
146 HTTPHeader: headers.Clone(),
147 CompressionMode: websocket.CompressionDisabled,
148 }, workspacesdk.WithWorkspaceUpdates(&proto.WorkspaceUpdatesRequest{
149 WorkspaceOwnerId: tailnet.UUIDToByteSlice(me.ID),
150 }))
151
152 derpMapRewriter := &derpMapRewriter{

Callers

nothing calls this directly

Calls 15

RewriteDERPMapMethod · 0.95
CloseMethod · 0.95
RunMethod · 0.95
ConnectedMethod · 0.95
NewFunction · 0.92
NewFunction · 0.92
NewWebsocketDialerFunction · 0.92
WithWorkspaceUpdatesFunction · 0.92
UUIDToByteSliceFunction · 0.92
NewConnFunction · 0.92
NewControllerFunction · 0.92

Tested by

no test coverage detected