feat: support wss protocol
This commit is contained in:
parent
b1181fd17a
commit
4a5c9a8796
@ -86,7 +86,7 @@ func init() {
|
|||||||
func RegisterCommonFlags(cmd *cobra.Command) {
|
func RegisterCommonFlags(cmd *cobra.Command) {
|
||||||
cmd.PersistentFlags().StringVarP(&serverAddr, "server_addr", "s", "127.0.0.1:7000", "frp server's address")
|
cmd.PersistentFlags().StringVarP(&serverAddr, "server_addr", "s", "127.0.0.1:7000", "frp server's address")
|
||||||
cmd.PersistentFlags().StringVarP(&user, "user", "u", "", "user")
|
cmd.PersistentFlags().StringVarP(&user, "user", "u", "", "user")
|
||||||
cmd.PersistentFlags().StringVarP(&protocol, "protocol", "p", "tcp", "tcp or kcp or websocket")
|
cmd.PersistentFlags().StringVarP(&protocol, "protocol", "p", "tcp", "tcp or kcp or websocket or wss")
|
||||||
cmd.PersistentFlags().StringVarP(&token, "token", "t", "", "auth token")
|
cmd.PersistentFlags().StringVarP(&token, "token", "t", "", "auth token")
|
||||||
cmd.PersistentFlags().StringVarP(&logLevel, "log_level", "", "info", "log level")
|
cmd.PersistentFlags().StringVarP(&logLevel, "log_level", "", "info", "log level")
|
||||||
cmd.PersistentFlags().StringVarP(&logFile, "log_file", "", "console", "console or file path")
|
cmd.PersistentFlags().StringVarP(&logFile, "log_file", "", "console", "console or file path")
|
||||||
|
@ -46,7 +46,7 @@ user = your_name
|
|||||||
login_fail_exit = true
|
login_fail_exit = true
|
||||||
|
|
||||||
# communication protocol used to connect to server
|
# communication protocol used to connect to server
|
||||||
# now it supports tcp and kcp and websocket, default is tcp
|
# now it supports tcp, kcp, websocket and wss, default is tcp
|
||||||
protocol = tcp
|
protocol = tcp
|
||||||
|
|
||||||
# if tls_enable is true, frpc will connect frps by tls
|
# if tls_enable is true, frpc will connect frps by tls
|
||||||
|
@ -267,7 +267,7 @@ func UnmarshalClientConfFromIni(content string) (cfg ClientCommonConf, err error
|
|||||||
|
|
||||||
if tmpStr, ok = conf.Get("common", "protocol"); ok {
|
if tmpStr, ok = conf.Get("common", "protocol"); ok {
|
||||||
// Now it only support tcp and kcp and websocket.
|
// Now it only support tcp and kcp and websocket.
|
||||||
if tmpStr != "tcp" && tmpStr != "kcp" && tmpStr != "websocket" {
|
if tmpStr != "tcp" && tmpStr != "kcp" && tmpStr != "websocket" && tmpStr != "wss" {
|
||||||
err = fmt.Errorf("Parse conf error: invalid protocol")
|
err = fmt.Errorf("Parse conf error: invalid protocol")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -221,7 +221,9 @@ func ConnectServerByProxy(proxyURL string, protocol string, addr string) (c net.
|
|||||||
// http proxy is not supported for kcp
|
// http proxy is not supported for kcp
|
||||||
return ConnectServer(protocol, addr)
|
return ConnectServer(protocol, addr)
|
||||||
case "websocket":
|
case "websocket":
|
||||||
return ConnectWebsocketServer(addr)
|
return ConnectWebsocketServer(addr, false)
|
||||||
|
case "wss":
|
||||||
|
return ConnectWebsocketServer(addr, true)
|
||||||
default:
|
default:
|
||||||
return nil, fmt.Errorf("unsupport protocol: %s", protocol)
|
return nil, fmt.Errorf("unsupport protocol: %s", protocol)
|
||||||
}
|
}
|
||||||
|
@ -79,14 +79,26 @@ func (p *WebsocketListener) Addr() net.Addr {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// addr: domain:port
|
// addr: domain:port
|
||||||
func ConnectWebsocketServer(addr string) (net.Conn, error) {
|
func ConnectWebsocketServer(addr string, isSecure bool) (net.Conn, error) {
|
||||||
addr = "ws://" + addr + FrpWebsocketPath
|
|
||||||
|
if isSecure {
|
||||||
|
addr = "wss://" + addr + FrpWebsocketPath
|
||||||
|
} else {
|
||||||
|
addr = "ws://" + addr + FrpWebsocketPath
|
||||||
|
}
|
||||||
|
|
||||||
uri, err := url.Parse(addr)
|
uri, err := url.Parse(addr)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
origin := "http://" + uri.Host
|
var origin string
|
||||||
|
if isSecure {
|
||||||
|
origin = "https://" + uri.Host
|
||||||
|
} else {
|
||||||
|
origin = "http://" + uri.Host
|
||||||
|
}
|
||||||
|
|
||||||
cfg, err := websocket.NewConfig(addr, origin)
|
cfg, err := websocket.NewConfig(addr, origin)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
Loading…
Reference in New Issue
Block a user