MCPcopy Create free account
hub / github.com/coder/coder / start

Method start

vpn/tunnel.go:217–284  ·  view source on GitHub ↗
(req *StartRequest)

Source from the content-addressed store, hash-verified

215}
216
217func (t *Tunnel) start(req *StartRequest) error {
218 rawURL := req.GetCoderUrl()
219 if rawURL == "" {
220 return xerrors.New("missing coder url")
221 }
222 svrURL, err := url.Parse(rawURL)
223 if err != nil {
224 return xerrors.Errorf("parse url %q: %w", rawURL, err)
225 }
226 apiToken := req.GetApiToken()
227 if apiToken == "" {
228 return xerrors.New("missing api token")
229 }
230 header := make(http.Header)
231 for _, h := range req.GetHeaders() {
232 header.Add(h.GetName(), h.GetValue())
233 }
234
235 // Add desktop telemetry if any fields are provided
236 telemetryData := codersdk.CoderDesktopTelemetry{
237 DeviceID: req.GetDeviceId(),
238 DeviceOS: req.GetDeviceOs(),
239 CoderDesktopVersion: req.GetCoderDesktopVersion(),
240 }
241 if !telemetryData.IsEmpty() {
242 headerValue, err := json.Marshal(telemetryData)
243 if err == nil {
244 header.Set(codersdk.CoderDesktopTelemetryHeader, string(headerValue))
245 t.logger.Debug(t.ctx, "added desktop telemetry header",
246 slog.F("data", telemetryData))
247 } else {
248 t.logger.Warn(t.ctx, "failed to marshal telemetry data")
249 }
250 }
251
252 var networkingStack NetworkStack
253 if t.networkingStackFn != nil {
254 networkingStack, err = t.networkingStackFn(t, req, t.clientLogger)
255 if err != nil {
256 return xerrors.Errorf("failed to create networking stack dependencies: %w", err)
257 }
258 } else {
259 t.logger.Debug(t.ctx, "using default networking stack as no custom stack was provided")
260 }
261
262 conn, err := t.client.NewConn(
263 t.ctx,
264 svrURL,
265 apiToken,
266 &Options{
267 Headers: header,
268 Logger: t.clientLogger,
269 DNSConfigurator: networkingStack.DNSConfigurator,
270 Router: networkingStack.Router,
271 TUNDevice: networkingStack.TUNDevice,
272 WireguardMonitor: networkingStack.WireguardMonitor,
273 UpdateHandler: t,
274 },

Callers 1

handleRPCMethod · 0.95

Calls 15

IsEmptyMethod · 0.95
GetApiTokenMethod · 0.80
GetHeadersMethod · 0.80
GetDeviceIdMethod · 0.80
GetDeviceOsMethod · 0.80
setConnMethod · 0.80
NewMethod · 0.65
ParseMethod · 0.65
AddMethod · 0.65
SetMethod · 0.65
NewConnMethod · 0.65

Tested by

no test coverage detected