1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- /*
- Copyright 2015 The Kubernetes Authors.
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
- http://www.apache.org/licenses/LICENSE-2.0
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- */
- package net
- import (
- "strings"
- "k8s.io/apimachinery/pkg/util/sets"
- )
- var validSchemes = sets.NewString("http", "https", "")
- // SplitSchemeNamePort takes a string of the following forms:
- // * "<name>", returns "", "<name>","", true
- // * "<name>:<port>", returns "", "<name>","<port>",true
- // * "<scheme>:<name>:<port>", returns "<scheme>","<name>","<port>",true
- //
- // Name must be non-empty or valid will be returned false.
- // Scheme must be "http" or "https" if specified
- // Port is returned as a string, and it is not required to be numeric (could be
- // used for a named port, for example).
- func SplitSchemeNamePort(id string) (scheme, name, port string, valid bool) {
- parts := strings.Split(id, ":")
- switch len(parts) {
- case 1:
- name = parts[0]
- case 2:
- name = parts[0]
- port = parts[1]
- case 3:
- scheme = parts[0]
- name = parts[1]
- port = parts[2]
- default:
- return "", "", "", false
- }
- if len(name) > 0 && validSchemes.Has(scheme) {
- return scheme, name, port, true
- } else {
- return "", "", "", false
- }
- }
- // JoinSchemeNamePort returns a string that specifies the scheme, name, and port:
- // * "<name>"
- // * "<name>:<port>"
- // * "<scheme>:<name>:<port>"
- // None of the parameters may contain a ':' character
- // Name is required
- // Scheme must be "", "http", or "https"
- func JoinSchemeNamePort(scheme, name, port string) string {
- if len(scheme) > 0 {
- // Must include three segments to specify scheme
- return scheme + ":" + name + ":" + port
- }
- if len(port) > 0 {
- // Must include two segments to specify port
- return name + ":" + port
- }
- // Return name alone
- return name
- }
|