in internal/oraclediscovery/oraclediscovery.go [638:705]
func parseListenerEndpoint(ctx context.Context, input string) *odpb.Discovery_Listener_Endpoint {
endpoint := &odpb.Discovery_Listener_Endpoint{}
var protocol, host, server, pipe, key string
var port int
var err error
segments := strings.FieldsFunc(input, func(r rune) bool {
return r == '(' || r == ')'
})
for _, segment := range segments {
if segment == "" {
continue
}
pair := strings.Split(segment, "=")
if len(pair) != 2 {
continue
}
value := pair[1]
switch strings.ToUpper(pair[0]) {
case "PROTOCOL":
protocol = value
case "KEY":
key = value
case "HOST":
host = value
case "PORT":
port, err = strconv.Atoi(value)
if err != nil {
log.CtxLogger(ctx).Warnw("Failed to parse port", "error", err, "port_string", value)
}
case "SERVER":
server = value
case "PIPE":
pipe = value
}
switch strings.ToUpper(protocol) {
case "IPC":
endpoint.Protocol = &odpb.Discovery_Listener_Endpoint_Ipc{
Ipc: &odpb.Discovery_Listener_IPCProtocol{
Key: key,
},
}
case "TCP":
endpoint.Protocol = &odpb.Discovery_Listener_Endpoint_Tcp{
Tcp: &odpb.Discovery_Listener_TCPProtocol{
Host: host,
Port: int32(port),
},
}
case "TCPS":
endpoint.Protocol = &odpb.Discovery_Listener_Endpoint_Tcps{
Tcps: &odpb.Discovery_Listener_TCPProtocol{
Host: host,
Port: int32(port),
},
}
case "NMP":
endpoint.Protocol = &odpb.Discovery_Listener_Endpoint_Nmp{
Nmp: &odpb.Discovery_Listener_NMPProtocol{
Server: server,
Pipe: pipe,
},
}
}
}
return endpoint
}