func parseListenerEndpoint()

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
}