1 Star 0 Fork 0

lqinggang/psiphon-tunnel-core

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
upstreamproxy.go 1.89 KB
一键复制 编辑 原始数据 按行查看 历史
/*
* 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 (
"fmt"
"golang.org/x/net/proxy"
"net"
"net/url"
)
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
}
return &Error{error: fmt.Errorf("upstreamproxy error: %s", err)}
}
type UpstreamProxyConfig struct {
ForwardDialFunc DialFunc
ProxyURIString string
}
// UpstreamProxyConfig implements proxy.Dialer interface
// so we can pass it to proxy.FromURL
func (u *UpstreamProxyConfig) Dial(network, addr string) (net.Conn, error) {
return u.ForwardDialFunc(network, addr)
}
func NewProxyDialFunc(config *UpstreamProxyConfig) DialFunc {
if config.ProxyURIString == "" {
return config.ForwardDialFunc
}
proxyURI, err := url.Parse(config.ProxyURIString)
if err != nil {
return func(network, addr string) (net.Conn, error) {
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, proxyError(fmt.Errorf("proxy.FromURL: %v", err))
}
}
return dialer.Dial
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Go
1
https://gitee.com/lqinggang/psiphon-tunnel-core.git
git@gitee.com:lqinggang/psiphon-tunnel-core.git
lqinggang
psiphon-tunnel-core
psiphon-tunnel-core
v0.0.9-alpha

搜索帮助