mirror of
https://github.com/XTLS/Xray-core.git
synced 2024-12-01 09:36:03 +03:00
Add Timer to Inbound metadata struct
This commit is contained in:
parent
5a43fa750d
commit
41beb4ec04
@ -8,6 +8,7 @@ import (
|
|||||||
"github.com/xtls/xray-core/common/errors"
|
"github.com/xtls/xray-core/common/errors"
|
||||||
"github.com/xtls/xray-core/common/net"
|
"github.com/xtls/xray-core/common/net"
|
||||||
"github.com/xtls/xray-core/common/protocol"
|
"github.com/xtls/xray-core/common/protocol"
|
||||||
|
"github.com/xtls/xray-core/common/signal"
|
||||||
)
|
)
|
||||||
|
|
||||||
// ID of a session.
|
// ID of a session.
|
||||||
@ -43,8 +44,10 @@ type Inbound struct {
|
|||||||
Tag string
|
Tag string
|
||||||
// User is the user that authencates for the inbound. May be nil if the protocol allows anounymous traffic.
|
// User is the user that authencates for the inbound. May be nil if the protocol allows anounymous traffic.
|
||||||
User *protocol.MemoryUser
|
User *protocol.MemoryUser
|
||||||
// Conn is actually internet.Connection.
|
// Conn is actually internet.Connection. May be nil.
|
||||||
Conn net.Conn
|
Conn net.Conn
|
||||||
|
// Timer of the inbound buf copier. May be nil.
|
||||||
|
Timer *signal.ActivityTimer
|
||||||
}
|
}
|
||||||
|
|
||||||
// Outbound is the metadata of an outbound connection.
|
// Outbound is the metadata of an outbound connection.
|
||||||
|
@ -103,7 +103,8 @@ func (d *DokodemoDoor) Process(ctx context.Context, network net.Network, conn in
|
|||||||
return newError("unable to get destination")
|
return newError("unable to get destination")
|
||||||
}
|
}
|
||||||
|
|
||||||
if inbound := session.InboundFromContext(ctx); inbound != nil {
|
inbound := session.InboundFromContext(ctx)
|
||||||
|
if inbound != nil {
|
||||||
inbound.User = &protocol.MemoryUser{
|
inbound.User = &protocol.MemoryUser{
|
||||||
Level: d.config.UserLevel,
|
Level: d.config.UserLevel,
|
||||||
}
|
}
|
||||||
@ -121,6 +122,10 @@ func (d *DokodemoDoor) Process(ctx context.Context, network net.Network, conn in
|
|||||||
ctx, cancel := context.WithCancel(ctx)
|
ctx, cancel := context.WithCancel(ctx)
|
||||||
timer := signal.CancelAfterInactivity(ctx, cancel, plcy.Timeouts.ConnectionIdle)
|
timer := signal.CancelAfterInactivity(ctx, cancel, plcy.Timeouts.ConnectionIdle)
|
||||||
|
|
||||||
|
if inbound != nil {
|
||||||
|
inbound.Timer = timer
|
||||||
|
}
|
||||||
|
|
||||||
ctx = policy.ContextWithBufferPolicy(ctx, plcy.Buffer)
|
ctx = policy.ContextWithBufferPolicy(ctx, plcy.Buffer)
|
||||||
link, err := dispatcher.Dispatch(ctx, dest)
|
link, err := dispatcher.Dispatch(ctx, dest)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -143,7 +143,7 @@ Start:
|
|||||||
})
|
})
|
||||||
|
|
||||||
if strings.EqualFold(request.Method, "CONNECT") {
|
if strings.EqualFold(request.Method, "CONNECT") {
|
||||||
return s.handleConnect(ctx, request, reader, conn, dest, dispatcher)
|
return s.handleConnect(ctx, request, reader, conn, dest, dispatcher, inbound)
|
||||||
}
|
}
|
||||||
|
|
||||||
keepAlive := (strings.TrimSpace(strings.ToLower(request.Header.Get("Proxy-Connection"))) == "keep-alive")
|
keepAlive := (strings.TrimSpace(strings.ToLower(request.Header.Get("Proxy-Connection"))) == "keep-alive")
|
||||||
@ -159,7 +159,7 @@ Start:
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Server) handleConnect(ctx context.Context, _ *http.Request, reader *bufio.Reader, conn internet.Connection, dest net.Destination, dispatcher routing.Dispatcher) error {
|
func (s *Server) handleConnect(ctx context.Context, _ *http.Request, reader *bufio.Reader, conn internet.Connection, dest net.Destination, dispatcher routing.Dispatcher, inbound *session.Inbound) error {
|
||||||
_, err := conn.Write([]byte("HTTP/1.1 200 Connection established\r\n\r\n"))
|
_, err := conn.Write([]byte("HTTP/1.1 200 Connection established\r\n\r\n"))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return newError("failed to write back OK response").Base(err)
|
return newError("failed to write back OK response").Base(err)
|
||||||
@ -169,6 +169,10 @@ func (s *Server) handleConnect(ctx context.Context, _ *http.Request, reader *buf
|
|||||||
ctx, cancel := context.WithCancel(ctx)
|
ctx, cancel := context.WithCancel(ctx)
|
||||||
timer := signal.CancelAfterInactivity(ctx, cancel, plcy.Timeouts.ConnectionIdle)
|
timer := signal.CancelAfterInactivity(ctx, cancel, plcy.Timeouts.ConnectionIdle)
|
||||||
|
|
||||||
|
if inbound != nil {
|
||||||
|
inbound.Timer = timer
|
||||||
|
}
|
||||||
|
|
||||||
ctx = policy.ContextWithBufferPolicy(ctx, plcy.Buffer)
|
ctx = policy.ContextWithBufferPolicy(ctx, plcy.Buffer)
|
||||||
link, err := dispatcher.Dispatch(ctx, dest)
|
link, err := dispatcher.Dispatch(ctx, dest)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -128,7 +128,7 @@ func (s *Server) processTCP(ctx context.Context, conn internet.Connection, dispa
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
return s.transport(ctx, reader, conn, dest, dispatcher)
|
return s.transport(ctx, reader, conn, dest, dispatcher, inbound)
|
||||||
}
|
}
|
||||||
|
|
||||||
if request.Command == protocol.RequestCommandUDP {
|
if request.Command == protocol.RequestCommandUDP {
|
||||||
@ -144,10 +144,14 @@ func (*Server) handleUDP(c io.Reader) error {
|
|||||||
return common.Error2(io.Copy(buf.DiscardBytes, c))
|
return common.Error2(io.Copy(buf.DiscardBytes, c))
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Server) transport(ctx context.Context, reader io.Reader, writer io.Writer, dest net.Destination, dispatcher routing.Dispatcher) error {
|
func (s *Server) transport(ctx context.Context, reader io.Reader, writer io.Writer, dest net.Destination, dispatcher routing.Dispatcher, inbound *session.Inbound) error {
|
||||||
ctx, cancel := context.WithCancel(ctx)
|
ctx, cancel := context.WithCancel(ctx)
|
||||||
timer := signal.CancelAfterInactivity(ctx, cancel, s.policy().Timeouts.ConnectionIdle)
|
timer := signal.CancelAfterInactivity(ctx, cancel, s.policy().Timeouts.ConnectionIdle)
|
||||||
|
|
||||||
|
if inbound != nil {
|
||||||
|
inbound.Timer = timer
|
||||||
|
}
|
||||||
|
|
||||||
plcy := s.policy()
|
plcy := s.policy()
|
||||||
ctx = policy.ContextWithBufferPolicy(ctx, plcy.Buffer)
|
ctx = policy.ContextWithBufferPolicy(ctx, plcy.Buffer)
|
||||||
link, err := dispatcher.Dispatch(ctx, dest)
|
link, err := dispatcher.Dispatch(ctx, dest)
|
||||||
|
Loading…
Reference in New Issue
Block a user