MCPcopy Index your code
hub / github.com/GoEdgeLab/EdgeNode / handlePROXYProtocol

Method handlePROXYProtocol

internal/nodes/http_client_pool.go:268–301  ·  view source on GitHub ↗

支持PROXY Protocol

(conn net.Conn, req *HTTPRequest, proxyProtocol *serverconfigs.ProxyProtocolConfig)

Source from the content-addressed store, hash-verified

266
267// 支持PROXY Protocol
268func (this *HTTPClientPool) handlePROXYProtocol(conn net.Conn, req *HTTPRequest, proxyProtocol *serverconfigs.ProxyProtocolConfig) error {
269 if proxyProtocol != nil &&
270 proxyProtocol.IsOn &&
271 (proxyProtocol.Version == serverconfigs.ProxyProtocolVersion1 || proxyProtocol.Version == serverconfigs.ProxyProtocolVersion2) {
272 var remoteAddr = req.requestRemoteAddr(true)
273 var transportProtocol = proxyproto.TCPv4
274 if strings.Contains(remoteAddr, ":") {
275 transportProtocol = proxyproto.TCPv6
276 }
277 var destAddr = conn.RemoteAddr()
278 var reqConn = req.RawReq.Context().Value(HTTPConnContextKey)
279 if reqConn != nil {
280 destAddr = reqConn.(net.Conn).LocalAddr()
281 }
282 var header = proxyproto.Header{
283 Version: byte(proxyProtocol.Version),
284 Command: proxyproto.PROXY,
285 TransportProtocol: transportProtocol,
286 SourceAddr: &net.TCPAddr{
287 IP: net.ParseIP(remoteAddr),
288 Port: req.requestRemotePort(),
289 },
290 DestinationAddr: destAddr,
291 }
292 _, err := header.WriteTo(conn)
293 if err != nil {
294 _ = conn.Close()
295 return err
296 }
297 return nil
298 }
299
300 return nil
301}

Callers 1

ClientMethod · 0.95

Calls 9

requestRemoteAddrMethod · 0.80
ContextMethod · 0.80
ParseIPMethod · 0.80
requestRemotePortMethod · 0.80
LocalAddrMethod · 0.65
WriteToMethod · 0.65
CloseMethod · 0.65
ContainsMethod · 0.45
RemoteAddrMethod · 0.45

Tested by

no test coverage detected