improve proxy

This commit is contained in:
Balakrishnan Balasubramanian 2022-05-02 11:36:24 -04:00
parent 50101c12b8
commit d284956268
5 changed files with 69 additions and 9 deletions

View File

@ -65,6 +65,10 @@ func ParseConfig(configPath string) (*Config, error) {
} }
} }
if c.TelegramProxy == "NONE" {
c.TelegramProxy = ""
}
for i, _ := range c.Feeds { for i, _ := range c.Feeds {
feedCfg := &c.Feeds[i] feedCfg := &c.Feeds[i]
if feedCfg.Proxy == "NONE" { if feedCfg.Proxy == "NONE" {

35
exp/funint/main.go Normal file
View File

@ -0,0 +1,35 @@
package main
import (
"fmt"
"net"
)
type Foo interface {
Bar()
}
func bar() {
fmt.Println("bar")
}
func run(f Foo) {
f.Bar()
}
type t struct {
Bar func()
}
type t2 struct {
}
func (t t2) Bar() {
bar()
}
func main() {
run(t2{})
var d net.Dialer
d.Cancel
}

View File

@ -4,12 +4,16 @@ import (
"fmt" "fmt"
"io" "io"
"log" "log"
"net/http"
"go.balki.me/tss/proxy" "go.balki.me/tss/proxy"
) )
func main() { func main() {
client, err := proxy.GetClient("socks5://unix/run/tor/socks") trans, err := proxy.GetTransport("socks5://unix/run/tor/socks")
client := &http.Client{
Transport: trans,
}
res, err := client.Get("https://ip.balki.me") res, err := client.Get("https://ip.balki.me")
if err != nil { if err != nil {
log.Panicln(err) log.Panicln(err)

View File

@ -10,6 +10,7 @@ var Debug, Info, Warn, Error, Panic func(msg string, keysAndValues ...interface{
func init() { func init() {
//json logging
cfg := zap.NewProductionConfig() cfg := zap.NewProductionConfig()
devCfg := zap.NewDevelopmentConfig() devCfg := zap.NewDevelopmentConfig()

View File

@ -1,7 +1,9 @@
package proxy package proxy
import ( import (
"context"
"fmt" "fmt"
"net"
"net/http" "net/http"
"net/url" "net/url"
@ -20,12 +22,28 @@ func GetTransport(proxy string) (http.RoundTripper, error) {
len(proxyUrl.Path) > 1 /* Path cannot be empty or just / */ { len(proxyUrl.Path) > 1 /* Path cannot be empty or just / */ {
return unixSocks5Proxy(proxyUrl.Path) return unixSocks5Proxy(proxyUrl.Path)
} }
return proxyHttp(proxyUrl) return proxyTcp(proxyUrl)
}
type forwardDialer struct {
dialContext func(ctx context.Context, network, address string) (net.Conn, error)
}
func (d *forwardDialer) DialContext(ctx context.Context, network, address string) (net.Conn, error) {
return d.dialContext(ctx, network, address)
}
func (d *forwardDialer) Dial(network, address string) (net.Conn, error) {
panic("Dial should not be called")
//default Dial is nil
//return defaultTransport().Dial(network, address)
} }
func unixSocks5Proxy(path string) (http.RoundTripper, error) { func unixSocks5Proxy(path string) (http.RoundTripper, error) {
// TODO: Auth? trans := defaultTransport().Clone()
dialer, err := proxy.SOCKS5("unix", path, nil /*auth*/, nil) if trans.DialContext == nil {
panic("DefaultTransport has nil DialContext")
}
dialer, err := proxy.SOCKS5("unix", path, nil /*auth*/, &forwardDialer{trans.DialContext})
if err != nil { if err != nil {
return nil, fmt.Errorf("failed to make socks proxy, path: %s, err: %w", path, err) return nil, fmt.Errorf("failed to make socks proxy, path: %s, err: %w", path, err)
} }
@ -33,14 +51,13 @@ func unixSocks5Proxy(path string) (http.RoundTripper, error) {
if !ok { if !ok {
panic("proxy.SOCKS5 did not return a ContextDialer") panic("proxy.SOCKS5 did not return a ContextDialer")
} }
trans := defaultTransport()
trans.DialContext = ctxDialer.DialContext trans.DialContext = ctxDialer.DialContext
trans.Proxy = nil trans.Proxy = nil
return trans, nil return trans, nil
} }
func proxyHttp(proxyUrl *url.URL) (http.RoundTripper, error) { func proxyTcp(proxyUrl *url.URL) (http.RoundTripper, error) {
trans := defaultTransport() trans := defaultTransport().Clone()
trans.Proxy = http.ProxyURL(proxyUrl) trans.Proxy = http.ProxyURL(proxyUrl)
return trans, nil return trans, nil
} }
@ -50,6 +67,5 @@ func defaultTransport() *http.Transport {
if !ok { if !ok {
panic("http.DefaultTransport is not a *http.Transport") panic("http.DefaultTransport is not a *http.Transport")
} }
trans := transPtr.Clone() return transPtr
return trans
} }