github.com/sagernet/sing@v0.2.6/common/bufio/deadline/check.go (about) 1 package deadline 2 3 import ( 4 "github.com/sagernet/sing/common" 5 N "github.com/sagernet/sing/common/network" 6 ) 7 8 type WithoutReadDeadline interface { 9 NeedAdditionalReadDeadline() bool 10 } 11 12 func NeedAdditionalReadDeadline(rawReader any) bool { 13 if deadlineReader, loaded := rawReader.(WithoutReadDeadline); loaded { 14 return deadlineReader.NeedAdditionalReadDeadline() 15 } 16 if upstream, hasUpstream := rawReader.(N.WithUpstreamReader); hasUpstream { 17 return NeedAdditionalReadDeadline(upstream.UpstreamReader()) 18 } 19 if upstream, hasUpstream := rawReader.(common.WithUpstream); hasUpstream { 20 return NeedAdditionalReadDeadline(upstream.Upstream()) 21 } 22 return false 23 }