diff options
author | Sergey Ponomarev <stokito@gmail.com> | 2023-01-02 06:51:39 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-01-02 12:51:39 +0800 |
commit | 51048b0620ebd25e3bd0c78b53051e02ae33cd3c (patch) | |
tree | 62e2ee380cda9a2aa7923dc4b1ab5fee65911a48 /client.go | |
parent | fix: client may remove hostclient incorrectly (#1461) (diff) | |
download | fasthttp-51048b0620ebd25e3bd0c78b53051e02ae33cd3c.tar.gz fasthttp-51048b0620ebd25e3bd0c78b53051e02ae33cd3c.tar.bz2 fasthttp-51048b0620ebd25e3bd0c78b53051e02ae33cd3c.zip |
client.go Simplify default UA logic (#1466)
The getClientName() checks if !NoDefaultUserAgentHeader then returns the Client.Name field.
But it also saves it to atomic field clientName. This is not needed and logic can be simplified.
Previously the clientName vas a byte slice that was copied from c.Name and cached. See 02e0722fb73c6237818b8e5af55957eb919a7334
Fix #1458
Diffstat (limited to 'client.go')
-rw-r--r-- | client.go | 57 |
1 files changed, 21 insertions, 36 deletions
@@ -788,7 +788,6 @@ type HostClient struct { // Connection pool strategy. Can be either LIFO or FIFO (default). ConnPoolStrategy ConnPoolStrategyType - clientName atomic.Value lastUseTime uint32 connsLock sync.Mutex @@ -1327,9 +1326,14 @@ func (c *HostClient) doNonNilReqResp(req *Request, resp *Response) (bool, error) userAgentOld := req.Header.UserAgent() if len(userAgentOld) == 0 { - req.Header.userAgent = append(req.Header.userAgent[:0], c.getClientName()...) + userAgent := c.Name + if userAgent == "" && !c.NoDefaultUserAgentHeader { + userAgent = defaultUserAgent + } + if userAgent != "" { + req.Header.userAgent = append(req.Header.userAgent[:], userAgent...) + } } - if c.Transport != nil { err := c.Transport(req, resp) return err == nil, err @@ -1990,21 +1994,6 @@ func dialAddr(addr string, dial DialFunc, dialDualStack, isTLS bool, tlsConfig * return conn, nil } -func (c *HostClient) getClientName() []byte { - v := c.clientName.Load() - var clientName []byte - if v == nil { - clientName = []byte(c.Name) - if len(clientName) == 0 && !c.NoDefaultUserAgentHeader { - clientName = defaultUserAgent - } - c.clientName.Store(clientName) - } else { - clientName = v.([]byte) - } - return clientName -} - // AddMissingPort adds a port to a host if it is missing. // A literal IPv6 address in hostport must be enclosed in square // brackets, as in "[::1]:80", "[::1%lo0]:80". @@ -2318,7 +2307,6 @@ type pipelineConnClient struct { tlsConfigLock sync.Mutex tlsConfig *tls.Config - clientName atomic.Value } type pipelineWork struct { @@ -2389,7 +2377,13 @@ func (c *pipelineConnClient) DoDeadline(req *Request, resp *Response, deadline t userAgentOld := req.Header.UserAgent() if len(userAgentOld) == 0 { - req.Header.userAgent = append(req.Header.userAgent[:0], c.getClientName()...) + userAgent := c.Name + if userAgent == "" && !c.NoDefaultUserAgentHeader { + userAgent = defaultUserAgent + } + if userAgent != "" { + req.Header.userAgent = append(req.Header.userAgent[:], userAgent...) + } } w := c.acquirePipelineWork(timeout) @@ -2490,7 +2484,13 @@ func (c *pipelineConnClient) Do(req *Request, resp *Response) error { userAgentOld := req.Header.UserAgent() if len(userAgentOld) == 0 { - req.Header.userAgent = append(req.Header.userAgent[:0], c.getClientName()...) + userAgent := c.Name + if userAgent == "" && !c.NoDefaultUserAgentHeader { + userAgent = defaultUserAgent + } + if userAgent != "" { + req.Header.userAgent = append(req.Header.userAgent[:], userAgent...) + } } w := c.acquirePipelineWork(0) @@ -2886,19 +2886,4 @@ func (c *pipelineConnClient) PendingRequests() int { return n } -func (c *pipelineConnClient) getClientName() []byte { - v := c.clientName.Load() - var clientName []byte - if v == nil { - clientName = []byte(c.Name) - if len(clientName) == 0 && !c.NoDefaultUserAgentHeader { - clientName = defaultUserAgent - } - c.clientName.Store(clientName) - } else { - clientName = v.([]byte) - } - return clientName -} - var errPipelineConnStopped = errors.New("pipeline connection has been stopped") |