mirror of
https://github.com/wweir/sower.git
synced 2024-04-21 12:42:15 +00:00
52 lines
852 B
Go
52 lines
852 B
Go
package router
|
|
|
|
import (
|
|
"net/http"
|
|
"sync"
|
|
"time"
|
|
|
|
"github.com/sower-proxy/deferlog/log"
|
|
"github.com/sower-proxy/mem"
|
|
)
|
|
|
|
var accessCache = mem.NewRotateCache(time.Hour, httpPing)
|
|
|
|
func (r *Router) isAccess(domain string, port uint16) bool {
|
|
switch port {
|
|
case 80:
|
|
case 443:
|
|
default:
|
|
return false
|
|
}
|
|
|
|
ok, _ := accessCache.Get(domain)
|
|
return ok
|
|
}
|
|
|
|
var pingClient = http.Client{
|
|
Timeout: 2 * time.Second,
|
|
}
|
|
|
|
func httpPing(key string) (bool, error) {
|
|
wg := sync.WaitGroup{}
|
|
wg.Add(2)
|
|
var err80, err443 error
|
|
go func() {
|
|
_, err80 = pingClient.Head("http://" + key)
|
|
wg.Done()
|
|
}()
|
|
go func() {
|
|
_, err443 = pingClient.Head("https://" + key)
|
|
wg.Done()
|
|
}()
|
|
wg.Wait()
|
|
|
|
if err80 != nil && err443 != nil {
|
|
log.Warn().
|
|
Errs("errs", []error{err80, err443}).
|
|
Msg("Failed to ping")
|
|
}
|
|
|
|
return err80 == nil && err443 == nil, nil
|
|
}
|