Projects STRLCPY prox5 Commits eb6e3387
🤬
  • ■ ■ ■ ■ ■ ■
    example/go.mod
     1 +module p5example
     2 + 
     3 +go 1.18
     4 + 
     5 +require (
     6 + git.tcp.direct/kayos/prox5 v0.5.2
     7 + github.com/haxii/socks5 v1.0.0
     8 + github.com/mattn/go-tty v0.0.4
     9 +)
     10 + 
     11 +require (
     12 + git.tcp.direct/kayos/common v0.5.5 // indirect
     13 + git.tcp.direct/kayos/go-socks5 v1.0.1 // indirect
     14 + github.com/mattn/go-isatty v0.0.10 // indirect
     15 + github.com/miekg/dns v1.1.50 // indirect
     16 + github.com/panjf2000/ants/v2 v2.5.0 // indirect
     17 + github.com/patrickmn/go-cache v2.1.0+incompatible // indirect
     18 + github.com/yunginnanet/Rate5 v1.0.1 // indirect
     19 + go4.org/intern v0.0.0-20211027215823-ae77deb06f29 // indirect
     20 + go4.org/unsafe/assume-no-moving-gc v0.0.0-20220617031537-928513b29760 // indirect
     21 + golang.org/x/mod v0.4.2 // indirect
     22 + golang.org/x/net v0.0.0-20220630215102-69896b714898 // indirect
     23 + golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a // indirect
     24 + golang.org/x/tools v0.1.6-0.20210726203631-07bc1bf47fb2 // indirect
     25 + golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect
     26 + h12.io/socks v1.0.3 // indirect
     27 + inet.af/netaddr v0.0.0-20220617031823-097006376321 // indirect
     28 + nullprogram.com/x/rng v1.1.0 // indirect
     29 +)
     30 + 
  • ■ ■ ■ ■ ■ ■
    example/go.sum
     1 +git.tcp.direct/kayos/common v0.5.5 h1:ZLM7Q82acnSQmrWSQ98W4EKaszsf9JUYIsZgVr8V5ME=
     2 +git.tcp.direct/kayos/common v0.5.5/go.mod h1:jG1yXbN+5PrRZwGe32qIGWgLC4x5JWdyNBbMj1gIWB0=
     3 +git.tcp.direct/kayos/go-socks5 v1.0.1 h1:Pe9PlSXofibIJyWkrr9rwWcgyfUxSdUcDCQ//6fAi0U=
     4 +git.tcp.direct/kayos/go-socks5 v1.0.1/go.mod h1:I9xU/uzFAZKukMJgEgWPrfC6rDlcPQe8wXMibF3qvhE=
     5 +git.tcp.direct/kayos/prox5 v0.5.2 h1:cByUv7f4Ntc+GrpWKvBV2BcFFo0lEBK4qV4ZCnKQnBY=
     6 +git.tcp.direct/kayos/prox5 v0.5.2/go.mod h1:SV8IeNJeGIOdDkWpFMeihY/wUy0+4m2JzVVV5D8Jk0k=
     7 +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
     8 +github.com/dvyukov/go-fuzz v0.0.0-20210103155950-6a8e9d1f2415/go.mod h1:11Gm+ccJnvAhCNLlf5+cS9KjtbaD5I5zaZpFMsTHWTw=
     9 +github.com/h12w/go-socks5 v0.0.0-20200522160539-76189e178364 h1:5XxdakFhqd9dnXoAZy1Mb2R/DZ6D1e+0bGC/JhucGYI=
     10 +github.com/h12w/go-socks5 v0.0.0-20200522160539-76189e178364/go.mod h1:eDJQioIyy4Yn3MVivT7rv/39gAJTrA7lgmYr8EW950c=
     11 +github.com/haxii/socks5 v1.0.0 h1:78BIzd4lHibdRNOKdMwKCnnsgYLW9SeotqU+nMhWSSo=
     12 +github.com/haxii/socks5 v1.0.0/go.mod h1:6O9Ba2yrLlvuSe/L1e84eZI8cPw6H+q1Ilr4hjgm4uY=
     13 +github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
     14 +github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
     15 +github.com/mattn/go-isatty v0.0.10 h1:qxFzApOv4WsAL965uUPIsXzAKCZxN2p9UqdhFS4ZW10=
     16 +github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84=
     17 +github.com/mattn/go-runewidth v0.0.7/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI=
     18 +github.com/mattn/go-tty v0.0.4 h1:NVikla9X8MN0SQAqCYzpGyXv0jY7MNl3HOWD2dkle7E=
     19 +github.com/mattn/go-tty v0.0.4/go.mod h1:u5GGXBtZU6RQoKV8gY5W6UhMudbR5vXnUe7j3pxse28=
     20 +github.com/miekg/dns v1.1.50 h1:DQUfb9uc6smULcREF09Uc+/Gd46YWqJd5DbpPE9xkcA=
     21 +github.com/miekg/dns v1.1.50/go.mod h1:e3IlAVfNqAllflbibAZEWOXOQ+Ynzk/dDozDxY7XnME=
     22 +github.com/panjf2000/ants/v2 v2.5.0 h1:1rWGWSnxCsQBga+nQbA4/iY6VMeNoOIAM0ZWh9u3q2Q=
     23 +github.com/panjf2000/ants/v2 v2.5.0/go.mod h1:cU93usDlihJZ5CfRGNDYsiBYvoilLvBF5Qp/BT2GNRE=
     24 +github.com/patrickmn/go-cache v2.1.0+incompatible h1:HRMgzkcYKYpi3C8ajMPV8OFXaaRUnok+kx1WdO15EQc=
     25 +github.com/patrickmn/go-cache v2.1.0+incompatible/go.mod h1:3Qf8kWWT7OJRJbdiICTKqZju1ZixQ/KpMGzzAfe6+WQ=
     26 +github.com/phayes/freeport v0.0.0-20180830031419-95f893ade6f2 h1:JhzVVoYvbOACxoUmOs6V/G4D5nPVUW73rKvXxP4XUJc=
     27 +github.com/phayes/freeport v0.0.0-20180830031419-95f893ade6f2/go.mod h1:iIss55rKnNBTvrwdmkUpLnDpZoAHvWaiq5+iMmen4AE=
     28 +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
     29 +github.com/stretchr/testify v1.7.1 h1:5TQK59W5E3v0r2duFAb7P95B6hEeOyEnHRa8MjYSMTY=
     30 +github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
     31 +github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
     32 +github.com/yunginnanet/Rate5 v1.0.1 h1:OePwNrj9/A/flmhyr/gKI5RYgrW6d1oWCqrZRXUev3k=
     33 +github.com/yunginnanet/Rate5 v1.0.1/go.mod h1:f0r66kVQZojRqUgVdLC/CKexMlF0nUDAmd01tBeF4Ms=
     34 +go4.org/intern v0.0.0-20211027215823-ae77deb06f29 h1:UXLjNohABv4S58tHmeuIZDO6e3mHpW2Dx33gaNt03LE=
     35 +go4.org/intern v0.0.0-20211027215823-ae77deb06f29/go.mod h1:cS2ma+47FKrLPdXFpr7CuxiTW3eyJbWew4qx0qtQWDA=
     36 +go4.org/unsafe/assume-no-moving-gc v0.0.0-20211027215541-db492cf91b37/go.mod h1:FftLjUGFEDu5k8lt0ddY+HcrH/qU/0qk+H8j9/nTl3E=
     37 +go4.org/unsafe/assume-no-moving-gc v0.0.0-20220617031537-928513b29760 h1:FyBZqvoA/jbNzuAWLQE2kG820zMAkcilx6BMjGbL/E4=
     38 +go4.org/unsafe/assume-no-moving-gc v0.0.0-20220617031537-928513b29760/go.mod h1:FftLjUGFEDu5k8lt0ddY+HcrH/qU/0qk+H8j9/nTl3E=
     39 +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
     40 +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
     41 +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
     42 +golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
     43 +golang.org/x/mod v0.4.2 h1:Gz96sIWK3OalVv/I/qNygP42zyoKp3xptRVCWRFEBvo=
     44 +golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
     45 +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
     46 +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
     47 +golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
     48 +golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
     49 +golang.org/x/net v0.0.0-20210726213435-c6fcb2dbf985/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
     50 +golang.org/x/net v0.0.0-20220630215102-69896b714898 h1:K7wO6V1IrczY9QOQ2WkVpw4JQSwCd52UsxVEirZUfiw=
     51 +golang.org/x/net v0.0.0-20220630215102-69896b714898/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
     52 +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
     53 +golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
     54 +golang.org/x/sync v0.0.0-20210220032951-036812b2e83c h1:5KslGYwFpkhGh+Q16bwMP3cOontH8FOep7tGV86Y7SQ=
     55 +golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
     56 +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
     57 +golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
     58 +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
     59 +golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
     60 +golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
     61 +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
     62 +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
     63 +golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
     64 +golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
     65 +golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
     66 +golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
     67 +golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
     68 +golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a h1:dGzPydgVsqGcTRVwiLJ1jVbufYwmzD3LfVPLKsKg+0k=
     69 +golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
     70 +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
     71 +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
     72 +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
     73 +golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
     74 +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
     75 +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
     76 +golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0=
     77 +golang.org/x/tools v0.1.6-0.20210726203631-07bc1bf47fb2 h1:BonxutuHCTL0rBDnZlKjpGIQFTjyUVTexFOdWkB6Fg0=
     78 +golang.org/x/tools v0.1.6-0.20210726203631-07bc1bf47fb2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
     79 +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
     80 +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
     81 +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE=
     82 +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
     83 +gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo=
     84 +h12.io/socks v1.0.3 h1:Ka3qaQewws4j4/eDQnOdpr4wXsC//dXtWvftlIcCQUo=
     85 +h12.io/socks v1.0.3/go.mod h1:AIhxy1jOId/XCz9BO+EIgNL2rQiPTBNnOfnVnQ+3Eck=
     86 +inet.af/netaddr v0.0.0-20220617031823-097006376321 h1:B4dC8ySKTQXasnjDTMsoCMf1sQG4WsMej0WXaHxunmU=
     87 +inet.af/netaddr v0.0.0-20220617031823-097006376321/go.mod h1:OIezDfdzOgFhuw4HuWapWq2e9l0H9tK4F1j+ETRtF3k=
     88 +nullprogram.com/x/rng v1.1.0 h1:SMU7DHaQSWtKJNTpNFIFt8Wd/KSmOuSDPXrMFp/UMro=
     89 +nullprogram.com/x/rng v1.1.0/go.mod h1:glGw6V87vyfawxCzqOABL3WfL95G65az9Z2JZCylCkg=
     90 + 
  • ■ ■ ■ ■ ■
    example/main.go
    skipped 5 lines
    6 6   "strconv"
    7 7   "time"
    8 8   
     9 + "git.tcp.direct/kayos/prox5"
     10 + "github.com/haxii/socks5"
    9 11   "github.com/mattn/go-tty"
     12 +)
    10 13   
    11  - "git.tcp.direct/kayos/prox5"
     14 +var (
     15 + swamp *prox5.Swamp
     16 + quit chan bool
     17 + t *tty.TTY
    12 18  )
    13 19   
    14  -var swamp *prox5.Swamp
    15  -var quit chan bool
    16  -var t *tty.TTY
     20 +type socksLogger struct{}
     21 + 
     22 +var socklog = socksLogger{}
     23 + 
     24 +// Printf is used to handle socks server logging.
     25 +func (s socksLogger) Printf(format string, a ...interface{}) {
     26 + println(fmt.Sprintf(format, a))
     27 +}
     28 + 
     29 +func StartUpstreamProxy(listen string) {
     30 + conf := &socks5.Config{Dial: swamp.DialContext, Logger: socklog}
     31 + server, err := socks5.New(conf)
     32 + if err != nil {
     33 + println(err.Error())
     34 + return
     35 + }
     36 + 
     37 + socklog.Printf("starting proxy server on %s", listen)
     38 + if err := server.ListenAndServe("tcp", listen); err != nil {
     39 + println(err.Error())
     40 + return
     41 + }
     42 +}
    17 43   
    18 44  func init() {
    19 45   quit = make(chan bool)
    20 46   swamp = prox5.NewDefaultSwamp()
    21 47   swamp.SetMaxWorkers(5)
    22 48   swamp.EnableDebug()
     49 + go StartUpstreamProxy("127.0.0.1:1555")
    23 50   
    24 51   count := swamp.LoadProxyTXT(os.Args[1])
    25 52   if count < 1 {
    skipped 104 lines
  • ■ ■ ■ ■ ■ ■
    getters.go
    1 1  package prox5
    2 2   
    3 3  import (
     4 + "fmt"
    4 5   "strconv"
    5 6   "sync/atomic"
    6 7   "time"
    skipped 2 lines
    9 10  // GetProto safely retrieves the protocol value of the Proxy.
    10 11  func (sock *Proxy) GetProto() string {
    11 12   return sock.Proto.Load().(string)
     13 +}
     14 + 
     15 +// GetProto safely retrieves the protocol value of the Proxy.
     16 +func (sock *Proxy) String() string {
     17 + tout := ""
     18 + if sock.parent.GetServerTimeoutStr() != "-1" {
     19 + tout = fmt.Sprintf("?timeout=%ss", sock.parent.GetServerTimeoutStr())
     20 + }
     21 + return fmt.Sprintf("socks%s://%s%s", sock.GetProto(), sock.Endpoint, tout)
    12 22  }
    13 23   
    14 24  // GetStatistics returns all current statistics.
    skipped 88 lines
  • ■ ■ ■ ■ ■ ■
    mystery_dialer.go
    skipped 6 lines
    7 7   "net"
    8 8   "strconv"
    9 9   "sync/atomic"
     10 + "time"
    10 11   
    11 12   "h12.io/socks"
    12 13  )
    13 14   
    14  -// DialContext is a simple stub adapter to implement a net.Dialer.
     15 +// DialContext is a simple stub adapter to implement a net.Dialer with context.
    15 16  func (s *Swamp) DialContext(ctx context.Context, network, addr string) (net.Conn, error) {
    16 17   return s.MysteryDialer(ctx, network, addr)
    17 18  }
    18 19   
    19  -// DialContext is a simple stub adapter to implement a net.Dialer.
     20 +// Dial is a simple stub adapter to implement a net.Dialer.
    20 21  func (s *Swamp) Dial(network, addr string) (net.Conn, error) {
    21 22   return s.DialContext(context.Background(), network, addr)
    22 23  }
    23 24   
     25 +// DialTimeout is a simple stub adapter to implement a net.Dialer with a timeout.
     26 +func (s *Swamp) DialTimeout(network, addr string, timeout time.Duration) (net.Conn, error) {
     27 + ctx, _ := context.WithDeadline(context.Background(), time.Now().Add(timeout))
     28 + return s.MysteryDialer(ctx, network, addr)
     29 +}
     30 + 
    24 31  // MysteryDialer is a dialer function that will use a different proxy for every request.
    25 32  func (s *Swamp) MysteryDialer(ctx context.Context, network, addr string) (net.Conn, error) {
    26 33   var sock *Proxy
    27  - var socksString string
    28 34   var conn net.Conn
    29 35   var count int
    30 36   // pull down proxies from channel until we get a proxy good enough for our spoiled asses
    skipped 3 lines
    34 40   return nil, errors.New("giving up after " + strconv.Itoa(max) + " tries")
    35 41   }
    36 42   if err := ctx.Err(); err != nil {
    37  - return nil, err
     43 + return nil, fmt.Errorf("context error: %v", err)
    38 44   }
    39 45   
    40 46   sock = s.GetAnySOCKS()
    skipped 3 lines
    44 50   }
    45 51   randSleep()
    46 52   }
    47  - var err error
    48 53   if sock == nil {
    49 54   continue
    50 55   }
    51 56   
    52 57   s.dbgPrint("dialer trying: " + sock.Endpoint + "...")
    53  - tout := ""
    54  - if s.GetServerTimeoutStr() != "-1" {
    55  - tout = fmt.Sprintf("?timeout=%ss", s.GetServerTimeoutStr())
    56  - }
    57  - socksString = fmt.Sprintf("socks%s://%s%s", sock.GetProto(), sock.Endpoint, tout)
    58 58   atomic.StoreUint32(&sock.lock, stateUnlocked)
    59  - dialSocks := socks.Dial(socksString)
     59 + dialSocks := socks.Dial(sock.String())
     60 + var err error
    60 61   if conn, err = dialSocks(network, addr); err != nil {
    61 62   count++
    62  - s.dbgPrint(ylw + "unable to reach [redacted] with " + socksString + ", cycling..." + rst)
     63 + s.dbgPrint(ylw + "unable to reach [redacted] with " + sock.String() + ", cycling..." + rst)
    63 64   continue
    64 65   }
    65 66   break
    66 67   }
    67  - s.dbgPrint(grn + "MysteryDialer using socks: " + socksString + rst)
     68 + s.dbgPrint(grn + "MysteryDialer using socks: " + sock.String() + rst)
    68 69   return conn, nil
    69 70  }
    70 71   
Please wait...
Page is in error, reload to recover