summaryrefslogtreecommitdiff
path: root/method/svcb.go
diff options
context:
space:
mode:
Diffstat (limited to 'method/svcb.go')
-rw-r--r--method/svcb.go53
1 files changed, 50 insertions, 3 deletions
diff --git a/method/svcb.go b/method/svcb.go
index d208e00..4a192b6 100644
--- a/method/svcb.go
+++ b/method/svcb.go
@@ -2,6 +2,9 @@ package method
import (
"edns_svcb/utils"
+ "fmt"
+ "log"
+ "sync"
"github.com/miekg/dns"
)
@@ -38,16 +41,60 @@ func SVCBSupportTest(addr string) TestResult {
return TestResult{Alive: true}
}
-func HTTPSRecordTest(addr, domain string) bool {
+func HTTPSRecordMeasurement(servers []string, domain_pool chan string, result_pool chan bool, routine_num int, wg *sync.WaitGroup, logger *log.Logger) {
+ for i := 0; i < routine_num; i++ {
+ wg.Add(1)
+ go HTTPSRecordTestRoutine(servers, domain_pool, result_pool, wg, logger)
+ }
+}
+
+func HTTPSRecordTestRoutine(server_list []string, domain_pool chan string, result_pool chan bool, wg *sync.WaitGroup, logger *log.Logger) {
+ server_index := 0
+ for {
+ if domain, ok := <-domain_pool; ok {
+ server := server_list[server_index] + ":53"
+ res, err := HTTPSRecordTest(server, domain)
+ if err == nil {
+ logger.Printf("%v : %v", domain, res)
+ } else {
+ logger.Printf("%v : failed (%v) server %v", domain, err, server)
+ }
+ result_pool <- res
+ server_index = (server_index + 1) % len(server_list)
+ } else {
+ break
+ }
+ }
+ wg.Done()
+}
+
+func HTTPSRecordTest(addr, domain string) (bool, error) {
res, err := utils.DNSQuery(addr, utils.DNSOptions{Domain: domain, Qtype: dns.TypeHTTPS, RD: true})
if err == nil {
if len(res.Answer) > 0 {
if _, ok := res.Answer[0].(*dns.HTTPS); ok {
- return true
+ return true, nil
}
}
}
- return false
+ return false, err
+}
+
+func HTTPSRecordResultProcess(result_pool chan bool, wg *sync.WaitGroup) {
+ total_cnt := 0
+ valid_cnt := 0
+ for {
+ if res, ok := <-result_pool; ok {
+ total_cnt++
+ if res {
+ valid_cnt++
+ }
+ } else {
+ break
+ }
+ }
+ fmt.Printf("Domain HTTPS support Test: total %v https %v\n", total_cnt, valid_cnt)
+ wg.Done()
}
func SVCBRecordTest(addr, domain string) bool {