differentiate between timeout and other error for dnscrypt servers

This commit is contained in:
Alison Winters 2019-10-19 16:15:41 +08:00 committed by Frank Denis
parent 0058bc063e
commit ac6fd3db39
2 changed files with 7 additions and 1 deletions

View File

@ -44,6 +44,7 @@ const (
PluginsReturnCodeResponseError
PluginsReturnCodeServerError
PluginsReturnCodeCloak
PluginsReturnCodeServerTimeout
)
var PluginsReturnCodeToString = map[PluginsReturnCode]string{
@ -57,6 +58,7 @@ var PluginsReturnCodeToString = map[PluginsReturnCode]string{
PluginsReturnCodeResponseError: "RESPONSE_ERROR",
PluginsReturnCodeServerError: "SERVER_ERROR",
PluginsReturnCodeCloak: "CLOAK",
PluginsReturnCodeServerTimeout: "SERVER_TIMEOUT",
}
type PluginsState struct {

View File

@ -419,7 +419,11 @@ func (proxy *Proxy) processIncomingQuery(serverInfo *ServerInfo, clientProto str
response, err = proxy.exchangeWithTCPServer(serverInfo, sharedKey, encryptedQuery, clientNonce)
}
if err != nil {
pluginsState.returnCode = PluginsReturnCodeServerError
if neterr, ok := err.(net.Error); ok && neterr.Timeout() {
pluginsState.returnCode = PluginsReturnCodeServerTimeout
} else {
pluginsState.returnCode = PluginsReturnCodeServerError
}
pluginsState.ApplyLoggingPlugins(&proxy.pluginsGlobals)
serverInfo.noticeFailure(proxy)
return