Projects STRLCPY prox5 Commits 1a47b4e1
🤬
  • ■ ■ ■ ■ ■
    .gitignore
    1  -/example/proxies.txt
    2  -/example/socks.list
    3  -/example/socksold.list
    4 1  .idea/
     2 +*.txt
     3 +*.list
    5 4   
  • ■ ■ ■ ■ ■ ■
    conductor.go
    1 1  package prox5
    2 2   
    3  -import "errors"
     3 +import (
     4 + "context"
     5 + "errors"
     6 +)
    4 7   
    5 8  // SwampStatus represents the current state of our Swamp.
    6 9  type SwampStatus uint32
    skipped 10 lines
    17 20  // Start starts our proxy pool operations. Trying to start a running Swamp will return an error.
    18 21  func (s *Swamp) Start() error {
    19 22   if s.Status.Load().(SwampStatus) != New {
    20  - return errors.New("this swamp is not new, use resume if it is paused")
     23 + return s.Resume()
    21 24   }
    22  - 
    23  - s.runningdaemons.Store(0)
    24  - 
    25  - s.getThisDread()
    26  - 
     25 + s.startDaemons()
    27 26   return nil
    28 27  }
    29 28   
    skipped 11 lines
    41 40   
    42 41   s.dbgPrint("pausing...")
    43 42   
    44  - s.svcDown()
    45  - s.svcDown()
     43 + s.quit()
    46 44   
    47 45   s.Status.Store(Paused)
    48 46   return nil
    49 47  }
    50 48   
    51  -func (s *Swamp) getThisDread() {
     49 +func (s *Swamp) startDaemons() {
    52 50   go s.mapBuilder()
    53 51   <-s.conductor
     52 + s.svcUp()
    54 53   go s.jobSpawner()
    55 54   
    56 55   for {
    skipped 7 lines
    64 63  // Resume will resume pause proxy pool operations, attempting to resume a running Swamp is returns an error.
    65 64  func (s *Swamp) Resume() error {
    66 65   if s.IsRunning() {
    67  - return errors.New("not paused")
     66 + return errors.New("already running")
    68 67   }
    69  - 
    70  - s.getThisDread()
    71  - 
     68 + s.ctx, s.quit = context.WithCancel(context.Background())
     69 + s.startDaemons()
    72 70   return nil
    73 71  }
    74 72   
  • ■ ■ ■ ■ ■ ■
    daemons.go
    skipped 3 lines
    4 4   "errors"
    5 5   "strconv"
    6 6   "sync"
     7 + "sync/atomic"
    7 8   "time"
    8 9  )
    9 10   
    10 11  func (s *Swamp) svcUp() {
    11  - running := s.runningdaemons.Load().(int)
    12  - s.runningdaemons.Store(running + 1)
     12 + atomic.AddInt32(&s.runningdaemons, 1)
    13 13  }
    14 14   
    15 15  func (s *Swamp) svcDown() {
    16  - running := s.runningdaemons.Load().(int)
    17  - s.quit <- true
    18  - s.runningdaemons.Store(running - 1)
     16 + atomic.AddInt32(&s.runningdaemons, -1)
    19 17  }
    20 18   
    21 19  type swampMap struct {
    skipped 44 lines
    66 64  func (sm swampMap) clear() {
    67 65   sm.mu.Lock()
    68 66   defer sm.mu.Unlock()
    69  - 
    70  - sm.plot = make(map[string]*Proxy)
     67 + for key := range sm.plot {
     68 + delete(sm.plot, key)
     69 + }
    71 70  }
    72 71   
    73 72  func (s *Swamp) mapBuilder() {
     73 + if s.pool.IsClosed() {
     74 + s.pool.Reboot()
     75 + }
    74 76   
    75 77   s.dbgPrint("map builder started")
    76  - defer s.dbgPrint("map builder paused")
    77 78   
    78 79   go func() {
     80 + defer s.dbgPrint("map builder paused")
    79 81   for {
    80 82   select {
     83 + case <-s.ctx.Done():
     84 + s.svcDown()
     85 + return
    81 86   case in := <-inChan:
    82 87   if p, ok := s.swampmap.add(in); !ok {
    83 88   continue
    84 89   } else {
    85 90   s.Pending <- p
    86 91   }
    87  - default:
    88  - time.Sleep(25 * time.Millisecond)
    89 92   }
    90 93   }
    91 94   }()
    92 95   s.conductor <- true
    93  - s.svcUp()
    94  - <-s.quit
    95 96  }
    96 97   
    97 98  func (s *Swamp) recycling() int {
    skipped 4 lines
    102 103   if len(s.swampmap.plot) < 1 {
    103 104   return 0
    104 105   }
     106 + 
    105 107   var count int
    106 108   
    107 109   s.swampmap.mu.RLock()
    skipped 1 lines
    109 111   
    110 112   for _, sock := range s.swampmap.plot {
    111 113   select {
     114 + case <-s.ctx.Done():
     115 + return 0
    112 116   case s.Pending <- sock:
    113 117   count++
    114  - default:
    115  - time.Sleep(25 * time.Millisecond)
    116  - continue
    117 118   }
    118 119   }
    119  - 
    120 120   
    121 121   return count
    122 122  }
    skipped 2 lines
    125 125   if s.pool.IsClosed() {
    126 126   s.pool.Reboot()
    127 127   }
     128 + 
    128 129   s.dbgPrint("job spawner started")
    129 130   defer s.dbgPrint("job spawner paused")
    130 131   
    skipped 2 lines
    133 134   go func() {
    134 135   for {
    135 136   select {
    136  - case <-s.quit:
     137 + case <-s.ctx.Done():
    137 138   q <- true
     139 + s.svcDown()
    138 140   return
    139 141   case sock := <-s.Pending:
    140 142   if err := s.pool.Submit(sock.validate); err != nil {
    skipped 15 lines
  • ■ ■ ■ ■ ■ ■
    defs.go
    1 1  package prox5
    2 2   
    3 3  import (
     4 + "context"
    4 5   "fmt"
    5 6   "sync"
    6 7   "sync/atomic"
    skipped 30 lines
    37 38   
    38 39   socks5ServerAuth socksCreds
    39 40   
    40  - quit chan bool
     41 + ctx context.Context
     42 + quit context.CancelFunc
    41 43   
    42 44   swampmap swampMap
    43 45   
    44  - reaper sync.Pool
     46 + // reaper sync.Pool
    45 47   
    46 48   mu *sync.RWMutex
    47 49   pool *ants.Pool
    48 50   swampopt *swampOptions
    49  - runningdaemons atomic.Value
     51 + runningdaemons int32
    50 52   conductor chan bool
    51 53  }
    52 54   
    skipped 157 lines
    210 212   
    211 213   swampopt: defOpt(),
    212 214   
    213  - quit: make(chan bool),
    214 215   conductor: make(chan bool),
    215 216   mu: &sync.RWMutex{},
    216 217   Status: atomic.Value{},
    217 218   }
     219 + 
     220 + s.ctx, s.quit = context.WithCancel(context.Background())
    218 221   
    219 222   s.Status.Store(New)
    220 223   
    skipped 5 lines
    226 229   
    227 230   s.socksServerLogger = socksLogger{parent: s}
    228 231   
    229  - s.runningdaemons.Store(0)
     232 + atomic.StoreInt32(&s.runningdaemons, 0)
    230 233   
    231 234   s.useProx = rl.NewCustomLimiter(s.swampopt.useProxConfig)
    232 235   s.badProx = rl.NewCustomLimiter(s.swampopt.badProxConfig)
    skipped 52 lines
  • ■ ■ ■ ■ ■ ■
    getters.go
    skipped 1 lines
    2 2   
    3 3  import (
    4 4   "strconv"
     5 + "sync/atomic"
    5 6   "time"
    6 7  )
    7 8   
    skipped 59 lines
    67 68   
    68 69  // IsRunning returns true if our background goroutines defined in daemons.go are currently operational
    69 70  func (s *Swamp) IsRunning() bool {
    70  - if s.runningdaemons.Load() == nil {
    71  - return false
    72  - }
    73  - return s.runningdaemons.Load().(int) > 0
     71 + return atomic.LoadInt32(&s.runningdaemons) == 2
    74 72  }
    75 73   
    76 74  // GetRecyclingStatus retrieves the current recycling status, see EnableRecycling.
    skipped 28 lines
  • ■ ■ ■ ■ ■ ■
    go.mod
    1 1  module git.tcp.direct/kayos/prox5
    2 2   
    3  -go 1.17
     3 +go 1.18
    4 4   
    5 5  require (
     6 + git.tcp.direct/kayos/common v0.5.4
    6 7   git.tcp.direct/kayos/go-socks5 v1.0.1
    7 8   github.com/mattn/go-tty v0.0.4
    8  - github.com/miekg/dns v1.1.48
     9 + github.com/miekg/dns v1.1.49
    9 10   github.com/panjf2000/ants/v2 v2.5.0
    10 11   github.com/yunginnanet/Rate5 v0.4.4
    11  - golang.org/x/net v0.0.0-20210928044308-7d9f5e0b762b
     12 + golang.org/x/net v0.0.0-20220526153639-5463443f8c37
    12 13   h12.io/socks v1.0.3
    13  - inet.af/netaddr v0.0.0-20210903134321-85fa6c94624e
     14 + inet.af/netaddr v0.0.0-20211027220019-c74959edd3b6
    14 15  )
    15 16   
    16 17  require (
    17 18   github.com/mattn/go-isatty v0.0.10 // indirect
    18 19   github.com/patrickmn/go-cache v2.1.0+incompatible // indirect
    19  - go4.org/intern v0.0.0-20210108033219-3eb7198706b2 // indirect
    20  - go4.org/unsafe/assume-no-moving-gc v0.0.0-20201222180813-1025295fd063 // indirect
     20 + go4.org/intern v0.0.0-20211027215823-ae77deb06f29 // indirect
     21 + go4.org/unsafe/assume-no-moving-gc v0.0.0-20211027215541-db492cf91b37 // indirect
    21 22   golang.org/x/mod v0.4.2 // indirect
    22  - golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c // indirect
     23 + golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a // indirect
    23 24   golang.org/x/tools v0.1.6-0.20210726203631-07bc1bf47fb2 // indirect
    24 25   golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect
     26 + nullprogram.com/x/rng v1.1.0 // indirect
    25 27  )
    26 28   
  • ■ ■ ■ ■ ■ ■
    go.sum
     1 +git.tcp.direct/kayos/common v0.5.4 h1:VCh9hp/YQbSRUarEJnzzzFWxgBbnT5qdrnVZNjMFBLE=
     2 +git.tcp.direct/kayos/common v0.5.4/go.mod h1:2PenBSSXY/kw0iO7ngPgowlU3OA9vak1obTJlxkO5nk=
     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 +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
     6 +github.com/dvyukov/go-fuzz v0.0.0-20210103155950-6a8e9d1f2415/go.mod h1:11Gm+ccJnvAhCNLlf5+cS9KjtbaD5I5zaZpFMsTHWTw=
     7 +github.com/h12w/go-socks5 v0.0.0-20200522160539-76189e178364 h1:5XxdakFhqd9dnXoAZy1Mb2R/DZ6D1e+0bGC/JhucGYI=
     8 +github.com/h12w/go-socks5 v0.0.0-20200522160539-76189e178364/go.mod h1:eDJQioIyy4Yn3MVivT7rv/39gAJTrA7lgmYr8EW950c=
     9 +github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
     10 +github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
     11 +github.com/mattn/go-isatty v0.0.10 h1:qxFzApOv4WsAL965uUPIsXzAKCZxN2p9UqdhFS4ZW10=
     12 +github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84=
     13 +github.com/mattn/go-runewidth v0.0.7/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI=
     14 +github.com/mattn/go-tty v0.0.4 h1:NVikla9X8MN0SQAqCYzpGyXv0jY7MNl3HOWD2dkle7E=
     15 +github.com/mattn/go-tty v0.0.4/go.mod h1:u5GGXBtZU6RQoKV8gY5W6UhMudbR5vXnUe7j3pxse28=
     16 +github.com/miekg/dns v1.1.49 h1:qe0mQU3Z/XpFeE+AEBo2rqaS1IPBJ3anmqZ4XiZJVG8=
     17 +github.com/miekg/dns v1.1.49/go.mod h1:e3IlAVfNqAllflbibAZEWOXOQ+Ynzk/dDozDxY7XnME=
     18 +github.com/panjf2000/ants/v2 v2.5.0 h1:1rWGWSnxCsQBga+nQbA4/iY6VMeNoOIAM0ZWh9u3q2Q=
     19 +github.com/panjf2000/ants/v2 v2.5.0/go.mod h1:cU93usDlihJZ5CfRGNDYsiBYvoilLvBF5Qp/BT2GNRE=
     20 +github.com/patrickmn/go-cache v2.1.0+incompatible h1:HRMgzkcYKYpi3C8ajMPV8OFXaaRUnok+kx1WdO15EQc=
     21 +github.com/patrickmn/go-cache v2.1.0+incompatible/go.mod h1:3Qf8kWWT7OJRJbdiICTKqZju1ZixQ/KpMGzzAfe6+WQ=
     22 +github.com/phayes/freeport v0.0.0-20180830031419-95f893ade6f2 h1:JhzVVoYvbOACxoUmOs6V/G4D5nPVUW73rKvXxP4XUJc=
     23 +github.com/phayes/freeport v0.0.0-20180830031419-95f893ade6f2/go.mod h1:iIss55rKnNBTvrwdmkUpLnDpZoAHvWaiq5+iMmen4AE=
     24 +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
     25 +github.com/stretchr/testify v1.7.1 h1:5TQK59W5E3v0r2duFAb7P95B6hEeOyEnHRa8MjYSMTY=
     26 +github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
     27 +github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
     28 +github.com/yunginnanet/Rate5 v0.4.4 h1:NkQcBK6wD9RQ6AQ/rv+Cp4LasZlB38AkHnrN3X3tHF8=
     29 +github.com/yunginnanet/Rate5 v0.4.4/go.mod h1:aaaV1FLFmdBk1AD7uGQF53hgfPQg9yfBmIfDxtJuYZs=
     30 +go4.org/intern v0.0.0-20211027215823-ae77deb06f29 h1:UXLjNohABv4S58tHmeuIZDO6e3mHpW2Dx33gaNt03LE=
     31 +go4.org/intern v0.0.0-20211027215823-ae77deb06f29/go.mod h1:cS2ma+47FKrLPdXFpr7CuxiTW3eyJbWew4qx0qtQWDA=
     32 +go4.org/unsafe/assume-no-moving-gc v0.0.0-20211027215541-db492cf91b37 h1:Tx9kY6yUkLge/pFG7IEMwDZy6CS2ajFc9TvQdPCW0uA=
     33 +go4.org/unsafe/assume-no-moving-gc v0.0.0-20211027215541-db492cf91b37/go.mod h1:FftLjUGFEDu5k8lt0ddY+HcrH/qU/0qk+H8j9/nTl3E=
     34 +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
     35 +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
     36 +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
     37 +golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
     38 +golang.org/x/mod v0.4.2 h1:Gz96sIWK3OalVv/I/qNygP42zyoKp3xptRVCWRFEBvo=
     39 +golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
     40 +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
     41 +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
     42 +golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
     43 +golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
     44 +golang.org/x/net v0.0.0-20210726213435-c6fcb2dbf985/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
     45 +golang.org/x/net v0.0.0-20220526153639-5463443f8c37 h1:lUkvobShwKsOesNfWWlCS5q7fnbG1MEliIzwu886fn8=
     46 +golang.org/x/net v0.0.0-20220526153639-5463443f8c37/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
     47 +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
     48 +golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
     49 +golang.org/x/sync v0.0.0-20210220032951-036812b2e83c h1:5KslGYwFpkhGh+Q16bwMP3cOontH8FOep7tGV86Y7SQ=
     50 +golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
     51 +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
     52 +golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
     53 +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
     54 +golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
     55 +golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
     56 +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
     57 +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
     58 +golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
     59 +golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
     60 +golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
     61 +golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
     62 +golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
     63 +golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a h1:dGzPydgVsqGcTRVwiLJ1jVbufYwmzD3LfVPLKsKg+0k=
     64 +golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
     65 +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
     66 +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
     67 +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
     68 +golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
     69 +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
     70 +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
     71 +golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0=
     72 +golang.org/x/tools v0.1.6-0.20210726203631-07bc1bf47fb2 h1:BonxutuHCTL0rBDnZlKjpGIQFTjyUVTexFOdWkB6Fg0=
     73 +golang.org/x/tools v0.1.6-0.20210726203631-07bc1bf47fb2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
     74 +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
     75 +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
     76 +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE=
     77 +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
     78 +gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo=
     79 +h12.io/socks v1.0.3 h1:Ka3qaQewws4j4/eDQnOdpr4wXsC//dXtWvftlIcCQUo=
     80 +h12.io/socks v1.0.3/go.mod h1:AIhxy1jOId/XCz9BO+EIgNL2rQiPTBNnOfnVnQ+3Eck=
     81 +inet.af/netaddr v0.0.0-20211027220019-c74959edd3b6 h1:acCzuUSQ79tGsM/O50VRFySfMm19IoMKL+sZztZkCxw=
     82 +inet.af/netaddr v0.0.0-20211027220019-c74959edd3b6/go.mod h1:y3MGhcFMlh0KZPMuXXow8mpjxxAk3yoDNsp4cQz54i8=
     83 +nullprogram.com/x/rng v1.1.0 h1:SMU7DHaQSWtKJNTpNFIFt8Wd/KSmOuSDPXrMFp/UMro=
     84 +nullprogram.com/x/rng v1.1.0/go.mod h1:glGw6V87vyfawxCzqOABL3WfL95G65az9Z2JZCylCkg=
     85 + 
  • ■ ■ ■ ■ ■ ■
    stats.go
    skipped 50 lines
    51 51  }
    52 52   
    53 53  // GetTotalValidated retrieves our grand total validated proxy count.
    54  -func (p *Swamp) GetTotalValidated() int {
    55  - return p.Stats.Valid4a + p.Stats.Valid4 + p.Stats.Valid5 + p.Stats.ValidHTTP
     54 +func (s *Swamp) GetTotalValidated() int {
     55 + return s.Stats.Valid4a + s.Stats.Valid4 + s.Stats.Valid5 + s.Stats.ValidHTTP
    56 56  }
    57 57   
    58 58  // GetUptime returns the total lifetime duration of our pool.
    skipped 4 lines
  • ■ ■ ■ ■ ■
    util.go
    1 1  package prox5
    2 2   
    3 3  import (
    4  - quiccmaffs "math/rand"
    5  - "time"
     4 + "git.tcp.direct/kayos/common/entropy"
    6 5  )
    7 6   
    8 7  const (
    skipped 5 lines
    14 13   
    15 14  // randStrChoice returns a random element from the given string slice.
    16 15  func randStrChoice(choices []string) string {
    17  - strlen := len(choices)
    18  - n := uint32(0)
    19  - if strlen > 0 {
    20  - n = getRandomUint32() % uint32(strlen)
    21  - }
    22  - return choices[n]
    23  -}
    24  - 
    25  -// getRandomUint32 retrieves a random integer seeded by the current time.
    26  -func getRandomUint32() uint32 {
    27  - quiccmaffs.Seed(time.Now().UnixNano())
    28  - return quiccmaffs.Uint32()
     16 + return entropy.RandomStrChoice(choices)
    29 17  }
    30 18   
    31 19  func randSleep() {
    32  - quiccmaffs.Seed(time.Now().UnixNano())
    33  - time.Sleep(time.Duration(quiccmaffs.Intn(200)) * time.Millisecond)
     20 + entropy.RandSleepMS(200)
    34 21  }
    35 22   
Please wait...
Page is in error, reload to recover