feat: support SCTP & UDP as endpoint type (#352)

* feat: support SCTP & UDP as endpoint type

* update README

* modify endpoint type test for sctp & udp
This commit is contained in:
Ian Chen
2022-11-10 08:22:13 +08:00
committed by GitHub
parent 1f84f2afa0
commit fa47a199e5
17 changed files with 1760 additions and 0 deletions

View File

@ -12,6 +12,7 @@ import (
"time"
"github.com/go-ping/ping"
"github.com/ishidawataru/sctp"
)
// injectedHTTPClient is used for testing purposes
@ -38,6 +39,41 @@ func CanCreateTCPConnection(address string, config *Config) bool {
return true
}
// CanCreateUDPConnection checks whether a connection can be established with a UDP endpoint
func CanCreateUDPConnection(address string, config *Config) bool {
conn, err := net.DialTimeout("udp", address, config.Timeout)
if err != nil {
return false
}
_ = conn.Close()
return true
}
// CanCreateSCTPConnection checks whether a connection can be established with a SCTP endpoint
func CanCreateSCTPConnection(address string, config *Config) bool {
ch := make(chan bool)
go (func(res chan bool) {
addr, err := sctp.ResolveSCTPAddr("sctp", address)
if err != nil {
res <- false
}
conn, err := sctp.DialSCTP("sctp", nil, addr)
if err != nil {
res <- false
}
_ = conn.Close()
res <- true
})(ch)
select {
case result := <-ch:
return result
case <-time.After(config.Timeout):
return false
}
}
// CanPerformStartTLS checks whether a connection can be established to an address using the STARTTLS protocol
func CanPerformStartTLS(address string, config *Config) (connected bool, certificate *x509.Certificate, err error) {
hostAndPort := strings.Split(address, ":")