123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- package net
- import (
- "context"
- "net"
- "runtime"
- "github.com/metacubex/mihomo/common/net/deadline"
- "github.com/sagernet/sing/common"
- "github.com/sagernet/sing/common/bufio"
- "github.com/sagernet/sing/common/network"
- )
- var NewExtendedConn = bufio.NewExtendedConn
- var NewExtendedWriter = bufio.NewExtendedWriter
- var NewExtendedReader = bufio.NewExtendedReader
- type ExtendedConn = network.ExtendedConn
- type ExtendedWriter = network.ExtendedWriter
- type ExtendedReader = network.ExtendedReader
- var WriteBuffer = bufio.WriteBuffer
- func NewDeadlineConn(conn net.Conn) ExtendedConn {
- if deadline.IsPipe(conn) || deadline.IsPipe(network.UnwrapReader(conn)) {
- return NewExtendedConn(conn) // pipe always have correctly deadline implement
- }
- if deadline.IsConn(conn) || deadline.IsConn(network.UnwrapReader(conn)) {
- return NewExtendedConn(conn) // was a *deadline.Conn
- }
- return deadline.NewConn(conn)
- }
- func NeedHandshake(conn any) bool {
- if earlyConn, isEarlyConn := common.Cast[network.EarlyConn](conn); isEarlyConn && earlyConn.NeedHandshake() {
- return true
- }
- return false
- }
- type CountFunc = network.CountFunc
- var Pipe = deadline.Pipe
- // Relay copies between left and right bidirectionally.
- func Relay(leftConn, rightConn net.Conn) {
- defer runtime.KeepAlive(leftConn)
- defer runtime.KeepAlive(rightConn)
- _ = bufio.CopyConn(context.TODO(), leftConn, rightConn)
- }
|