add context for conn

This commit is contained in:
ginuerzh
2025-08-04 19:29:38 +08:00
parent ad5cf6fd61
commit b597467858
90 changed files with 889 additions and 917 deletions
+11 -7
View File
@@ -15,7 +15,8 @@ import (
"github.com/go-gost/core/connector"
"github.com/go-gost/core/logger"
md "github.com/go-gost/core/metadata"
ctxvalue "github.com/go-gost/x/ctx"
xctx "github.com/go-gost/x/ctx"
ictx "github.com/go-gost/x/internal/ctx"
"github.com/go-gost/x/registry"
)
@@ -49,12 +50,17 @@ func (c *http2Connector) Connect(ctx context.Context, conn net.Conn, network, ad
"remote": conn.RemoteAddr().String(),
"network": network,
"address": address,
"sid": string(ctxvalue.SidFromContext(ctx)),
"sid": string(xctx.SidFromContext(ctx)),
})
log.Debugf("connect %s/%s", address, network)
v, _ := conn.(md.Metadatable)
if v == nil {
var client *http.Client
if cc, ok := conn.(xctx.Context); ok {
if md := ictx.MetadataFromContext(cc.Context()); md != nil {
client, _ = md.Get("client").(*http.Client)
}
}
if client == nil {
err := errors.New("http2: wrong connection type")
log.Error(err)
return nil, err
@@ -69,7 +75,6 @@ func (c *http2Connector) Connect(ctx context.Context, conn net.Conn, network, ad
ProtoMinor: 0,
Header: c.md.header,
Body: pr,
// ContentLength: -1,
}
if req.Header == nil {
req.Header = make(http.Header)
@@ -92,8 +97,7 @@ func (c *http2Connector) Connect(ctx context.Context, conn net.Conn, network, ad
defer conn.SetDeadline(time.Time{})
}
client := v.Metadata().Get("client").(*http.Client)
resp, err := client.Do(req)
resp, err := client.Do(req.WithContext(ictx.Copy(ctx)))
if err != nil {
log.Error(err)
conn.Close()
+5 -5
View File
@@ -9,7 +9,7 @@ import (
"github.com/go-gost/core/connector"
md "github.com/go-gost/core/metadata"
"github.com/go-gost/relay"
ctxvalue "github.com/go-gost/x/ctx"
xctx "github.com/go-gost/x/ctx"
"github.com/go-gost/x/registry"
)
@@ -39,11 +39,11 @@ func (c *routerConnector) Init(md md.Metadata) (err error) {
func (c *routerConnector) Connect(ctx context.Context, conn net.Conn, network, address string, opts ...connector.ConnectOption) (net.Conn, error) {
log := c.options.Logger.WithFields(map[string]any{
"remote": conn.RemoteAddr().String(),
"local": conn.LocalAddr().String(),
"network": network,
"address": address,
"sid": string(ctxvalue.SidFromContext(ctx)),
"remote": conn.RemoteAddr().String(),
"local": conn.LocalAddr().String(),
"sid": xctx.SidFromContext(ctx).String(),
})
log.Debugf("connect %s/%s", address, network)
@@ -78,7 +78,7 @@ func (c *routerConnector) Connect(ctx context.Context, conn net.Conn, network, a
}
srcAddr := conn.RemoteAddr().String()
if v := ctxvalue.SrcAddrFromContext(ctx); v != nil {
if v := xctx.SrcAddrFromContext(ctx); v != nil {
srcAddr = v.String()
}
+5 -5
View File
@@ -9,7 +9,7 @@ import (
"github.com/go-gost/core/connector"
md "github.com/go-gost/core/metadata"
"github.com/go-gost/relay"
ctxvalue "github.com/go-gost/x/ctx"
xctx "github.com/go-gost/x/ctx"
"github.com/go-gost/x/registry"
)
@@ -39,11 +39,11 @@ func (c *tunnelConnector) Init(md md.Metadata) (err error) {
func (c *tunnelConnector) Connect(ctx context.Context, conn net.Conn, network, address string, opts ...connector.ConnectOption) (net.Conn, error) {
log := c.options.Logger.WithFields(map[string]any{
"remote": conn.RemoteAddr().String(),
"local": conn.LocalAddr().String(),
"network": network,
"address": address,
"sid": string(ctxvalue.SidFromContext(ctx)),
"remote": conn.RemoteAddr().String(),
"local": conn.LocalAddr().String(),
"sid": xctx.SidFromContext(ctx).String(),
})
log.Debugf("connect %s/%s", address, network)
@@ -74,7 +74,7 @@ func (c *tunnelConnector) Connect(ctx context.Context, conn net.Conn, network, a
}
srcAddr := conn.RemoteAddr().String()
if v := ctxvalue.SrcAddrFromContext(ctx); v != nil {
if v := xctx.SrcAddrFromContext(ctx); v != nil {
srcAddr = v.String()
}