mirror of
https://github.com/xjasonlyu/tun2socks.git
synced 2024-12-30 02:37:01 +00:00
46 lines
750 B
Go
46 lines
750 B
Go
package proxy
|
|
|
|
import (
|
|
"errors"
|
|
"net/url"
|
|
"strings"
|
|
)
|
|
|
|
// URL is the universal representation of the proxy configuration.
|
|
type URL url.URL
|
|
|
|
func (u *URL) Protocol() string {
|
|
return u.Scheme
|
|
}
|
|
|
|
func (u *URL) Address() string {
|
|
return u.Host
|
|
}
|
|
|
|
func (u *URL) String() string {
|
|
return (&url.URL{
|
|
Scheme: u.Scheme,
|
|
Host: u.Host,
|
|
Path: strings.TrimRight(u.Path, "/"),
|
|
}).String()
|
|
}
|
|
|
|
func ParseURL(rawURL string) (*URL, error) {
|
|
proxyURL, err := url.Parse(rawURL)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if proxyURL.Scheme == "" {
|
|
return nil, errors.New("proxy: protocol not specified")
|
|
}
|
|
return (*URL)(proxyURL), nil
|
|
}
|
|
|
|
func MustParseURL(rawURL string) *URL {
|
|
u, err := ParseURL(rawURL)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
return u
|
|
}
|