feat: recovering preHandleMetadata
failure from sniffing (#769)
This commit is contained in:
@ -419,15 +419,28 @@ func handleTCPConn(connCtx C.ConnContext) {
|
||||
return
|
||||
}
|
||||
|
||||
preHandleFailed := false
|
||||
if err := preHandleMetadata(metadata); err != nil {
|
||||
log.Debugln("[Metadata PreHandle] error: %s", err)
|
||||
return
|
||||
preHandleFailed = true
|
||||
}
|
||||
|
||||
conn := connCtx.Conn()
|
||||
conn.ResetPeeked() // reset before sniffer
|
||||
if sniffer.Dispatcher.Enable() && sniffingEnable {
|
||||
sniffer.Dispatcher.TCPSniff(conn, metadata)
|
||||
// Try to sniff a domain when `preHandleMetadata` failed, this is usually
|
||||
// caused by a "Fake DNS record missing" error when enhanced-mode is fake-ip.
|
||||
if sniffer.Dispatcher.TCPSniff(conn, metadata) {
|
||||
// we now have a domain name
|
||||
preHandleFailed = false
|
||||
}
|
||||
}
|
||||
|
||||
// If both trials have failed, we can do nothing but give up
|
||||
if preHandleFailed {
|
||||
log.Debugln("[Metadata PreHandle] failed to sniff a domain for connection %s --> %s, give up",
|
||||
metadata.SourceDetail(), metadata.RemoteAddress())
|
||||
return
|
||||
}
|
||||
|
||||
peekMutex := sync.Mutex{}
|
||||
|
Reference in New Issue
Block a user