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

Function parsePortForwards

cli/portforward.go:294–336  ·  view source on GitHub ↗
(tcpSpecs, udpSpecs []string)

Source from the content-addressed store, hash-verified

292}
293
294func parsePortForwards(tcpSpecs, udpSpecs []string) ([]portForwardSpec, error) {
295 specs := []portForwardSpec{}
296
297 for _, specEntry := range tcpSpecs {
298 for _, spec := range strings.Split(specEntry, ",") {
299 pfSpecs, err := parseSrcDestPorts(strings.TrimSpace(spec))
300 if err != nil {
301 return nil, xerrors.Errorf("failed to parse TCP port-forward specification %q: %w", spec, err)
302 }
303
304 for _, pfSpec := range pfSpecs {
305 pfSpec.network = "tcp"
306 specs = append(specs, pfSpec)
307 }
308 }
309 }
310
311 for _, specEntry := range udpSpecs {
312 for _, spec := range strings.Split(specEntry, ",") {
313 pfSpecs, err := parseSrcDestPorts(strings.TrimSpace(spec))
314 if err != nil {
315 return nil, xerrors.Errorf("failed to parse UDP port-forward specification %q: %w", spec, err)
316 }
317
318 for _, pfSpec := range pfSpecs {
319 pfSpec.network = "udp"
320 specs = append(specs, pfSpec)
321 }
322 }
323 }
324
325 // Check for duplicate entries.
326 locals := map[string]struct{}{}
327 for _, spec := range specs {
328 localStr := fmt.Sprintf("%s:%s:%d", spec.network, spec.listenHost, spec.listenPort)
329 if _, ok := locals[localStr]; ok {
330 return nil, xerrors.Errorf("local %s host:%s port:%d is specified twice", spec.network, spec.listenHost, spec.listenPort)
331 }
332 locals[localStr] = struct{}{}
333 }
334
335 return specs, nil
336}
337
338func parsePort(in string) (uint16, error) {
339 port, err := strconv.ParseUint(strings.TrimSpace(in), 10, 16)

Callers 2

Test_parsePortForwardsFunction · 0.85
portForwardMethod · 0.85

Calls 2

parseSrcDestPortsFunction · 0.85
ErrorfMethod · 0.45

Tested by 1

Test_parsePortForwardsFunction · 0.68