From a2bc4793a3048ec8d5950316ecc758dc6a946e2a Mon Sep 17 00:00:00 2001 From: mzz2017 <2017@duck.com> Date: Sun, 12 Feb 2023 11:26:58 +0800 Subject: [PATCH] feat: support overwrite node name using tag --- component/outbound/dialer/register.go | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/component/outbound/dialer/register.go b/component/outbound/dialer/register.go index e81851b..d583ba0 100644 --- a/component/outbound/dialer/register.go +++ b/component/outbound/dialer/register.go @@ -8,6 +8,7 @@ package dialer import ( "fmt" "net/url" + "strings" ) type FromLinkCreator func(gOption *GlobalOption, iOption InstanceOption, link string) (dialer *Dialer, err error) @@ -19,12 +20,35 @@ func FromLinkRegister(name string, creator FromLinkCreator) { } func NewFromLink(gOption *GlobalOption, iOption InstanceOption, link string) (dialer *Dialer, err error) { + /// Get overwritten name. + var overwrittenName string + iColon := strings.Index(link, ":") + if iColon == -1 { + goto parseUrl + } + // If first colon is like "://" in "scheme://linkbody", no tag is present. + if strings.HasPrefix(link[iColon:], "://") { + goto parseUrl + } + // Else tag is the part before colon. + overwrittenName = link[:iColon] + link = link[iColon+1:] + +parseUrl: u, err := url.Parse(link) if err != nil { return nil, err } if creator, ok := fromLinkCreators[u.Scheme]; ok { - return creator(gOption, iOption, link) + node, err := creator(gOption, iOption, link) + if err != nil { + return nil, err + } + // Overwrite node name using user given tag. + if overwrittenName != "" { + node.name = overwrittenName + } + return node, err } else { return nil, fmt.Errorf("unexpected link type: %v", u.Scheme) }