Skip to content

Commit

Permalink
Add TargetToNetAddr(target string) (network, addr string) to grpcutils
Browse files Browse the repository at this point in the history
Signed-off-by: Ed Warnicke <[email protected]>
  • Loading branch information
edwarnicke committed Jun 22, 2020
1 parent 5a17b2a commit 41815fe
Showing 1 changed file with 36 additions and 0 deletions.
36 changes: 36 additions & 0 deletions pkg/tools/grpcutils/url.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import (
"fmt"
"net"
"net/url"
"strings"
)

// URLToTarget - convert *net.URL to acceptable grpc target value.
Expand All @@ -46,3 +47,38 @@ func AddressToURL(addr net.Addr) *url.URL {
}
return &url.URL{Scheme: addr.Network(), Host: addr.String()}
}

// TargetToNetAddr returns the network and address from a GRPC target
func TargetToNetAddr(target string) (network, addr string) {
// Borrowed with love from grpc.parseDialTarget https://github.com/grpc/grpc-go/blob/9aa97f9/rpc_util.go#L821
network = "tcp"

m1 := strings.Index(target, ":")
m2 := strings.Index(target, ":/")

// handle unix:addr which will fail with url.Parse
if m1 >= 0 && m2 < 0 {
if n := target[0:m1]; n == unixScheme {
network = n
addr = target[m1+1:]
return network, addr
}
}
if m2 >= 0 {
t, err := url.Parse(target)
if err != nil {
return network, target
}
scheme := t.Scheme
addr = t.Path
if scheme == unixScheme {
network = scheme
if addr == "" {
addr = t.Host
}
return network, addr
}
}

return network, target
}

0 comments on commit 41815fe

Please sign in to comment.