telebit/addr.go

64 lines
1.2 KiB
Go
Raw Normal View History

2020-05-22 10:41:24 +00:00
package telebit
2020-05-16 09:09:47 +00:00
import "fmt"
2020-05-16 09:09:47 +00:00
type Scheme string
const (
2020-06-22 06:34:42 +00:00
None = Scheme("")
2020-05-16 09:09:47 +00:00
HTTPS = Scheme("https")
HTTP = Scheme("http")
SSH = Scheme("ssh")
OpenVPN = Scheme("openvpn")
)
type Termination string
const (
2020-06-22 06:34:42 +00:00
Unknown = Termination("")
TCP = Termination("none")
TLS = Termination("tls")
2020-05-16 09:09:47 +00:00
)
type Addr struct {
2020-06-22 06:34:42 +00:00
family string // TODO what should be the format? "tcpv6"?
2020-05-16 09:09:47 +00:00
scheme Scheme
termination Termination
addr string
port int
}
func NewAddr(s Scheme, t Termination, a string, p int) *Addr {
return &Addr{
2020-06-22 06:34:42 +00:00
family: "tun",
2020-05-16 09:09:47 +00:00
scheme: s,
termination: t,
addr: a,
port: p,
}
}
func (a *Addr) String() string {
//return a.addr + ":" + strconv.Itoa(a.port)
return fmt.Sprintf("%s+%s:%s:%d", a.family, a.Scheme(), a.addr, a.port)
2020-05-16 09:09:47 +00:00
}
// Network s typically network "family", such as "tcp" or "ip",
// but in this case will be "tun", which is a cue to do a `switch`
// to actually use the specific features of a telebit.Addr
2020-05-16 09:09:47 +00:00
func (a *Addr) Network() string {
return "tun"
2020-05-16 09:09:47 +00:00
}
2020-05-20 07:49:08 +00:00
func (a *Addr) Port() int {
return a.port
}
func (a *Addr) Hostname() string {
return a.addr
}
2020-05-16 09:09:47 +00:00
func (a *Addr) Scheme() Scheme {
return a.scheme
}