add proxyAgent options for http/http2 handler
This commit is contained in:
parent
b9e61dca1a
commit
ac554f670c
@ -58,7 +58,7 @@ go build
|
|||||||
#### Docker
|
#### Docker
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
docker pull ginuerzh/gost
|
docker run --rm ginuerzh/gost -V
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Homebrew
|
#### Homebrew
|
||||||
|
@ -53,7 +53,7 @@ go build
|
|||||||
#### Docker
|
#### Docker
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
docker pull ginuerzh/gost
|
docker run --rm ginuerzh/gost -V
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Homebrew
|
#### Homebrew
|
||||||
|
@ -664,6 +664,7 @@ func (r *route) GenRouters() ([]router, error) {
|
|||||||
gost.IPsHandlerOption(ips),
|
gost.IPsHandlerOption(ips),
|
||||||
gost.TCPModeHandlerOption(node.GetBool("tcp")),
|
gost.TCPModeHandlerOption(node.GetBool("tcp")),
|
||||||
gost.IPRoutesHandlerOption(tunRoutes...),
|
gost.IPRoutesHandlerOption(tunRoutes...),
|
||||||
|
gost.ProxyAgentHandlerOption(node.Get("proxyAgent")),
|
||||||
)
|
)
|
||||||
|
|
||||||
rt := router{
|
rt := router{
|
||||||
|
2
gost.go
2
gost.go
@ -80,6 +80,8 @@ var (
|
|||||||
// DefaultUserAgent is the default HTTP User-Agent header used by HTTP and websocket.
|
// DefaultUserAgent is the default HTTP User-Agent header used by HTTP and websocket.
|
||||||
DefaultUserAgent = "Chrome/78.0.3904.106"
|
DefaultUserAgent = "Chrome/78.0.3904.106"
|
||||||
|
|
||||||
|
DefaultProxyAgent = "gost/" + Version
|
||||||
|
|
||||||
// DefaultMTU is the default mtu for tun/tap device
|
// DefaultMTU is the default mtu for tun/tap device
|
||||||
DefaultMTU = 1350
|
DefaultMTU = 1350
|
||||||
)
|
)
|
||||||
|
@ -42,6 +42,7 @@ type HandlerOptions struct {
|
|||||||
IPs []string
|
IPs []string
|
||||||
TCPMode bool
|
TCPMode bool
|
||||||
IPRoutes []IPRoute
|
IPRoutes []IPRoute
|
||||||
|
ProxyAgent string
|
||||||
}
|
}
|
||||||
|
|
||||||
// HandlerOption allows a common way to set handler options.
|
// HandlerOption allows a common way to set handler options.
|
||||||
@ -211,6 +212,13 @@ func IPRoutesHandlerOption(routes ...IPRoute) HandlerOption {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ProxyAgentHandlerOption sets the proxy agent for http handler.
|
||||||
|
func ProxyAgentHandlerOption(agent string) HandlerOption {
|
||||||
|
return func(opts *HandlerOptions) {
|
||||||
|
opts.ProxyAgent = agent
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
type autoHandler struct {
|
type autoHandler struct {
|
||||||
options *HandlerOptions
|
options *HandlerOptions
|
||||||
}
|
}
|
||||||
|
9
http.go
9
http.go
@ -173,7 +173,12 @@ func (h *httpHandler) handleRequest(conn net.Conn, req *http.Request) {
|
|||||||
ProtoMinor: 1,
|
ProtoMinor: 1,
|
||||||
Header: http.Header{},
|
Header: http.Header{},
|
||||||
}
|
}
|
||||||
resp.Header.Add("Proxy-Agent", "gost/"+Version)
|
|
||||||
|
proxyAgent := DefaultProxyAgent
|
||||||
|
if h.options.ProxyAgent != "" {
|
||||||
|
proxyAgent = h.options.ProxyAgent
|
||||||
|
}
|
||||||
|
resp.Header.Add("Proxy-Agent", proxyAgent)
|
||||||
|
|
||||||
if !Can("tcp", host, h.options.Whitelist, h.options.Blacklist) {
|
if !Can("tcp", host, h.options.Whitelist, h.options.Blacklist) {
|
||||||
log.Logf("[http] %s - %s : Unauthorized to tcp connect to %s",
|
log.Logf("[http] %s - %s : Unauthorized to tcp connect to %s",
|
||||||
@ -287,7 +292,7 @@ func (h *httpHandler) handleRequest(conn net.Conn, req *http.Request) {
|
|||||||
|
|
||||||
if req.Method == http.MethodConnect {
|
if req.Method == http.MethodConnect {
|
||||||
b := []byte("HTTP/1.1 200 Connection established\r\n" +
|
b := []byte("HTTP/1.1 200 Connection established\r\n" +
|
||||||
"Proxy-Agent: gost/" + Version + "\r\n\r\n")
|
"Proxy-Agent: " + proxyAgent + "\r\n\r\n")
|
||||||
if Debug {
|
if Debug {
|
||||||
log.Logf("[http] %s <- %s\n%s", conn.RemoteAddr(), conn.LocalAddr(), string(b))
|
log.Logf("[http] %s <- %s\n%s", conn.RemoteAddr(), conn.LocalAddr(), string(b))
|
||||||
}
|
}
|
||||||
|
6
http2.go
6
http2.go
@ -365,7 +365,11 @@ func (h *http2Handler) roundTrip(w http.ResponseWriter, r *http.Request) {
|
|||||||
log.Logf("[http2] %s - %s\n%s", r.RemoteAddr, laddr, string(dump))
|
log.Logf("[http2] %s - %s\n%s", r.RemoteAddr, laddr, string(dump))
|
||||||
}
|
}
|
||||||
|
|
||||||
w.Header().Set("Proxy-Agent", "gost/"+Version)
|
proxyAgent := DefaultProxyAgent
|
||||||
|
if h.options.ProxyAgent != "" {
|
||||||
|
proxyAgent = h.options.ProxyAgent
|
||||||
|
}
|
||||||
|
w.Header().Set("Proxy-Agent", proxyAgent)
|
||||||
|
|
||||||
if !Can("tcp", host, h.options.Whitelist, h.options.Blacklist) {
|
if !Can("tcp", host, h.options.Whitelist, h.options.Blacklist) {
|
||||||
log.Logf("[http2] %s - %s : Unauthorized to tcp connect to %s",
|
log.Logf("[http2] %s - %s : Unauthorized to tcp connect to %s",
|
||||||
|
@ -12,7 +12,7 @@ import (
|
|||||||
|
|
||||||
var (
|
var (
|
||||||
// ErrNoneAvailable indicates there is no node available.
|
// ErrNoneAvailable indicates there is no node available.
|
||||||
ErrNoneAvailable = errors.New("none available")
|
ErrNoneAvailable = errors.New("none node available")
|
||||||
)
|
)
|
||||||
|
|
||||||
// NodeSelector as a mechanism to pick nodes and mark their status.
|
// NodeSelector as a mechanism to pick nodes and mark their status.
|
||||||
|
Loading…
Reference in New Issue
Block a user