From bb346a3ae1b6c250fdcb28b97280d3512a7fe219 Mon Sep 17 00:00:00 2001 From: Felix Lange Date: Tue, 17 Feb 2015 12:37:09 +0100 Subject: [PATCH] rpc/ws: switch to golang.org/x/net code.google.com/p/go.net is deprecated and will cause problems in future versions of Go. --- Godeps/Godeps.json | 9 +-- .../x/net}/websocket/client.go | 18 ++++- .../x/net}/websocket/exampledial_test.go | 2 +- .../x/net}/websocket/examplehandler_test.go | 2 +- .../x/net}/websocket/hybi.go | 0 .../x/net}/websocket/hybi_test.go | 0 .../x/net}/websocket/server.go | 0 .../x/net}/websocket/websocket.go | 0 .../x/net}/websocket/websocket_test.go | 73 +++++++++++++++++++ rpc/ws/server.go | 2 +- 10 files changed, 96 insertions(+), 10 deletions(-) rename Godeps/_workspace/src/{code.google.com/p/go.net => golang.org/x/net}/websocket/client.go (82%) rename Godeps/_workspace/src/{code.google.com/p/go.net => golang.org/x/net}/websocket/exampledial_test.go (94%) rename Godeps/_workspace/src/{code.google.com/p/go.net => golang.org/x/net}/websocket/examplehandler_test.go (93%) rename Godeps/_workspace/src/{code.google.com/p/go.net => golang.org/x/net}/websocket/hybi.go (100%) rename Godeps/_workspace/src/{code.google.com/p/go.net => golang.org/x/net}/websocket/hybi_test.go (100%) rename Godeps/_workspace/src/{code.google.com/p/go.net => golang.org/x/net}/websocket/server.go (100%) rename Godeps/_workspace/src/{code.google.com/p/go.net => golang.org/x/net}/websocket/websocket.go (100%) rename Godeps/_workspace/src/{code.google.com/p/go.net => golang.org/x/net}/websocket/websocket_test.go (87%) diff --git a/Godeps/Godeps.json b/Godeps/Godeps.json index 9fa7373c8..37176ddba 100644 --- a/Godeps/Godeps.json +++ b/Godeps/Godeps.json @@ -30,11 +30,6 @@ "Comment": "null-236", "Rev": "69e2a90ed92d03812364aeb947b7068dc42e561e" }, - { - "ImportPath": "code.google.com/p/go.net/websocket", - "Comment": "null-173", - "Rev": "4231557d7c726df4cf9a4e8cdd8a417c8c200bdb" - }, { "ImportPath": "code.google.com/p/snappy-go/snappy", "Comment": "null-15", @@ -105,6 +100,10 @@ "ImportPath": "golang.org/x/crypto/pbkdf2", "Rev": "4ed45ec682102c643324fae5dff8dab085b6c300" }, + { + "ImportPath": "golang.org/x/net/websocket", + "Rev": "59b0df9b1f7abda5aab0495ee54f408daf182ce7" + }, { "ImportPath": "gopkg.in/check.v1", "Rev": "64131543e7896d5bcc6bd5a76287eb75ea96c673" diff --git a/Godeps/_workspace/src/code.google.com/p/go.net/websocket/client.go b/Godeps/_workspace/src/golang.org/x/net/websocket/client.go similarity index 82% rename from Godeps/_workspace/src/code.google.com/p/go.net/websocket/client.go rename to Godeps/_workspace/src/golang.org/x/net/websocket/client.go index a861bb92c..ef11a51e4 100644 --- a/Godeps/_workspace/src/code.google.com/p/go.net/websocket/client.go +++ b/Godeps/_workspace/src/golang.org/x/net/websocket/client.go @@ -64,6 +64,20 @@ func Dial(url_, protocol, origin string) (ws *Conn, err error) { return DialConfig(config) } +var portMap = map[string]string{ + "ws": "80", + "wss": "443", +} + +func parseAuthority(location *url.URL) string { + if _, ok := portMap[location.Scheme]; ok { + if _, _, err := net.SplitHostPort(location.Host); err != nil { + return net.JoinHostPort(location.Host, portMap[location.Scheme]) + } + } + return location.Host +} + // DialConfig opens a new client connection to a WebSocket with a config. func DialConfig(config *Config) (ws *Conn, err error) { var client net.Conn @@ -75,10 +89,10 @@ func DialConfig(config *Config) (ws *Conn, err error) { } switch config.Location.Scheme { case "ws": - client, err = net.Dial("tcp", config.Location.Host) + client, err = net.Dial("tcp", parseAuthority(config.Location)) case "wss": - client, err = tls.Dial("tcp", config.Location.Host, config.TlsConfig) + client, err = tls.Dial("tcp", parseAuthority(config.Location), config.TlsConfig) default: err = ErrBadScheme diff --git a/Godeps/_workspace/src/code.google.com/p/go.net/websocket/exampledial_test.go b/Godeps/_workspace/src/golang.org/x/net/websocket/exampledial_test.go similarity index 94% rename from Godeps/_workspace/src/code.google.com/p/go.net/websocket/exampledial_test.go rename to Godeps/_workspace/src/golang.org/x/net/websocket/exampledial_test.go index 777a66895..72bb9d48e 100644 --- a/Godeps/_workspace/src/code.google.com/p/go.net/websocket/exampledial_test.go +++ b/Godeps/_workspace/src/golang.org/x/net/websocket/exampledial_test.go @@ -8,7 +8,7 @@ import ( "fmt" "log" - "code.google.com/p/go.net/websocket" + "golang.org/x/net/websocket" ) // This example demonstrates a trivial client. diff --git a/Godeps/_workspace/src/code.google.com/p/go.net/websocket/examplehandler_test.go b/Godeps/_workspace/src/golang.org/x/net/websocket/examplehandler_test.go similarity index 93% rename from Godeps/_workspace/src/code.google.com/p/go.net/websocket/examplehandler_test.go rename to Godeps/_workspace/src/golang.org/x/net/websocket/examplehandler_test.go index 47b0bb9b5..f22a98fcd 100644 --- a/Godeps/_workspace/src/code.google.com/p/go.net/websocket/examplehandler_test.go +++ b/Godeps/_workspace/src/golang.org/x/net/websocket/examplehandler_test.go @@ -8,7 +8,7 @@ import ( "io" "net/http" - "code.google.com/p/go.net/websocket" + "golang.org/x/net/websocket" ) // Echo the data received on the WebSocket. diff --git a/Godeps/_workspace/src/code.google.com/p/go.net/websocket/hybi.go b/Godeps/_workspace/src/golang.org/x/net/websocket/hybi.go similarity index 100% rename from Godeps/_workspace/src/code.google.com/p/go.net/websocket/hybi.go rename to Godeps/_workspace/src/golang.org/x/net/websocket/hybi.go diff --git a/Godeps/_workspace/src/code.google.com/p/go.net/websocket/hybi_test.go b/Godeps/_workspace/src/golang.org/x/net/websocket/hybi_test.go similarity index 100% rename from Godeps/_workspace/src/code.google.com/p/go.net/websocket/hybi_test.go rename to Godeps/_workspace/src/golang.org/x/net/websocket/hybi_test.go diff --git a/Godeps/_workspace/src/code.google.com/p/go.net/websocket/server.go b/Godeps/_workspace/src/golang.org/x/net/websocket/server.go similarity index 100% rename from Godeps/_workspace/src/code.google.com/p/go.net/websocket/server.go rename to Godeps/_workspace/src/golang.org/x/net/websocket/server.go diff --git a/Godeps/_workspace/src/code.google.com/p/go.net/websocket/websocket.go b/Godeps/_workspace/src/golang.org/x/net/websocket/websocket.go similarity index 100% rename from Godeps/_workspace/src/code.google.com/p/go.net/websocket/websocket.go rename to Godeps/_workspace/src/golang.org/x/net/websocket/websocket.go diff --git a/Godeps/_workspace/src/code.google.com/p/go.net/websocket/websocket_test.go b/Godeps/_workspace/src/golang.org/x/net/websocket/websocket_test.go similarity index 87% rename from Godeps/_workspace/src/code.google.com/p/go.net/websocket/websocket_test.go rename to Godeps/_workspace/src/golang.org/x/net/websocket/websocket_test.go index 48f14b696..a376abacf 100644 --- a/Godeps/_workspace/src/code.google.com/p/go.net/websocket/websocket_test.go +++ b/Godeps/_workspace/src/golang.org/x/net/websocket/websocket_test.go @@ -339,3 +339,76 @@ func TestSmallBuffer(t *testing.T) { } conn.Close() } + +var parseAuthorityTests = []struct { + in *url.URL + out string +}{ + { + &url.URL{ + Scheme: "ws", + Host: "www.google.com", + }, + "www.google.com:80", + }, + { + &url.URL{ + Scheme: "wss", + Host: "www.google.com", + }, + "www.google.com:443", + }, + { + &url.URL{ + Scheme: "ws", + Host: "www.google.com:80", + }, + "www.google.com:80", + }, + { + &url.URL{ + Scheme: "wss", + Host: "www.google.com:443", + }, + "www.google.com:443", + }, + // some invalid ones for parseAuthority. parseAuthority doesn't + // concern itself with the scheme unless it actually knows about it + { + &url.URL{ + Scheme: "http", + Host: "www.google.com", + }, + "www.google.com", + }, + { + &url.URL{ + Scheme: "http", + Host: "www.google.com:80", + }, + "www.google.com:80", + }, + { + &url.URL{ + Scheme: "asdf", + Host: "127.0.0.1", + }, + "127.0.0.1", + }, + { + &url.URL{ + Scheme: "asdf", + Host: "www.google.com", + }, + "www.google.com", + }, +} + +func TestParseAuthority(t *testing.T) { + for _, tt := range parseAuthorityTests { + out := parseAuthority(tt.in) + if out != tt.out { + t.Errorf("got %v; want %v", out, tt.out) + } + } +} diff --git a/rpc/ws/server.go b/rpc/ws/server.go index 100713c10..b8cc2fa6b 100644 --- a/rpc/ws/server.go +++ b/rpc/ws/server.go @@ -21,10 +21,10 @@ import ( "net" "net/http" - "code.google.com/p/go.net/websocket" "github.com/ethereum/go-ethereum/logger" "github.com/ethereum/go-ethereum/rpc" "github.com/ethereum/go-ethereum/xeth" + "golang.org/x/net/websocket" ) var wslogger = logger.NewLogger("RPC-WS")