[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
[tor-commits] [meek/utls_2] Make addrForDial's default ports numeric, also recognize http.
commit 970595f9639dfdee707621932a09b86ed41af4fd
Author: David Fifield <david@xxxxxxxxxxxxxxx>
Date: Fri Feb 1 20:19:18 2019 -0700
Make addrForDial's default ports numeric, also recognize http.
This is needed for an HTTP proxy. A CONNECT request is host:port but the
port can only be numeric.
---
meek-client/proxy_test.go | 54 +++++++++++++++++++++++++++++++++++++++++++++++
meek-client/utls.go | 11 ++++++----
2 files changed, 61 insertions(+), 4 deletions(-)
diff --git a/meek-client/proxy_test.go b/meek-client/proxy_test.go
new file mode 100644
index 0000000..5e87e56
--- /dev/null
+++ b/meek-client/proxy_test.go
@@ -0,0 +1,54 @@
+package main
+
+import (
+ "net/url"
+ "testing"
+)
+
+// Test that addrForDial returns a numeric port number. It needs to be numeric
+// because we pass it as part of the authority-form URL in HTTP proxy requests.
+// https://tools.ietf.org/html/rfc7230#section-5.3.3 authority-form
+// https://tools.ietf.org/html/rfc3986#section-3.2.3 port
+func TestAddrForDial(t *testing.T) {
+ // good tests
+ for _, test := range []struct {
+ URL string
+ Addr string
+ }{
+ {"http://example.com", "example.com:80"},
+ {"http://example.com/", "example.com:80"},
+ {"https://example.com/", "example.com:443"},
+ {"http://example.com:443/", "example.com:443"},
+ {"ftp://example.com:21/", "example.com:21"},
+ } {
+ u, err := url.Parse(test.URL)
+ if err != nil {
+ panic(err)
+ }
+ addr, err := addrForDial(u)
+ if err != nil {
+ t.Errorf("%q â?? error %v", test.URL, err)
+ continue
+ }
+ if addr != test.Addr {
+ t.Errorf("%q â?? %q, expected %q", test.URL, addr, test.Addr)
+ }
+ }
+
+ // bad tests
+ for _, input := range []string{
+ "example.com",
+ "example.com:80",
+ "ftp://example.com/",
+ } {
+ u, err := url.Parse(input)
+ if err != nil {
+ panic(err)
+ }
+ addr, err := addrForDial(u)
+ if err == nil {
+ t.Errorf("%q â?? %q, expected error", input, addr)
+ continue
+ }
+ }
+}
diff --git a/meek-client/utls.go b/meek-client/utls.go
index 67cf104..1f9d32d 100644
--- a/meek-client/utls.go
+++ b/meek-client/utls.go
@@ -74,10 +74,13 @@ func addrForDial(url *url.URL) (string, error) {
// internationalized domain name to ASCII.
port := url.Port()
if port == "" {
- // No port? Use the default for the scheme. We only care about https.
- if url.Scheme == "https" {
- port = "https"
- } else {
+ // No port? Use the default for the scheme.
+ switch url.Scheme {
+ case "http":
+ port = "80"
+ case "https":
+ port = "443"
+ default:
return "", fmt.Errorf("unsupported URL scheme %q", url.Scheme)
}
}
_______________________________________________
tor-commits mailing list
tor-commits@xxxxxxxxxxxxxxxxxxxx
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits