Browse Source

Completing files commit for upstreamproxy.Error type. Do more robust error check on the handshake return error now that ErrPersistEOF check moved into the handshake itself

Eugene Fryntov 10 years ago
parent
commit
d0182ba359
1 changed files with 34 additions and 2 deletions
  1. 34 2
      psiphon/upstreamproxy/upstreamProxy.go

+ 34 - 2
psiphon/upstreamproxy/upstreamProxy.go

@@ -1,3 +1,22 @@
+/*
+ * Copyright (c) 2015, Psiphon Inc.
+ * All rights reserved.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
 package upstreamproxy
 
 import (
@@ -9,6 +28,19 @@ import (
 
 type DialFunc func(string, string) (net.Conn, error)
 
+type Error struct {
+	error
+}
+
+func proxyError(err error) error {
+	//Avoid multiple upstream.Error wrapping
+	if _, ok := err.(Error); ok {
+		return err
+	}
+	format := fmt.Sprintf("upstreamproxy error: %v", err)
+	return &Error{error: fmt.Errorf(format, err)}
+}
+
 type UpstreamProxyConfig struct {
 	ForwardDialFunc DialFunc
 	ProxyURIString  string
@@ -27,14 +59,14 @@ func NewProxyDialFunc(config *UpstreamProxyConfig) DialFunc {
 	proxyURI, err := url.Parse(config.ProxyURIString)
 	if err != nil {
 		return func(network, addr string) (net.Conn, error) {
-			return nil, fmt.Errorf("Upstream proxy URI parsing error: %v", err)
+			return nil, proxyError(fmt.Errorf("proxyURI url.Parse: %v", err))
 		}
 	}
 
 	dialer, err := proxy.FromURL(proxyURI, config)
 	if err != nil {
 		return func(network, addr string) (net.Conn, error) {
-			return nil, err
+			return nil, proxyError(fmt.Errorf("proxy.FromURL: %v", err))
 		}
 	}
 	return dialer.Dial