46 lines
964 B
Go
46 lines
964 B
Go
package edgediscovery
|
|
|
|
import (
|
|
"fmt"
|
|
"net"
|
|
"strconv"
|
|
"strings"
|
|
)
|
|
|
|
const (
|
|
protocolRecord = "protocol.argotunnel.com"
|
|
)
|
|
|
|
var (
|
|
errNoProtocolRecord = fmt.Errorf("No TXT record found for %s to determine connection protocol", protocolRecord)
|
|
)
|
|
|
|
func HTTP2Percentage() (int32, error) {
|
|
records, err := net.LookupTXT(protocolRecord)
|
|
if err != nil {
|
|
return 0, err
|
|
}
|
|
if len(records) == 0 {
|
|
return 0, errNoProtocolRecord
|
|
}
|
|
return parseHTTP2Precentage(records[0])
|
|
}
|
|
|
|
// The record looks like http2=percentage
|
|
func parseHTTP2Precentage(record string) (int32, error) {
|
|
const key = "http2"
|
|
slices := strings.Split(record, "=")
|
|
if len(slices) != 2 {
|
|
return 0, fmt.Errorf("Malformed TXT record %s, expect http2=percentage", record)
|
|
}
|
|
if slices[0] != key {
|
|
return 0, fmt.Errorf("Incorrect key %s, expect %s", slices[0], key)
|
|
}
|
|
percentage, err := strconv.ParseInt(slices[1], 10, 32)
|
|
if err != nil {
|
|
return 0, err
|
|
}
|
|
return int32(percentage), nil
|
|
|
|
}
|