prox5/setters.go

73 lines
2.4 KiB
Go

package pxndscvm
import (
"errors"
"fmt"
"time"
"github.com/alitto/pond"
)
// AddUserAgents appends to the list of useragents we randomly choose from during proxied requests
func (s *Swamp) AddUserAgents(uagents []string) {
// mutex lock so that RLock during proxy checking will block while we change this value
s.mu.Lock()
defer s.mu.Unlock()
s.swampopt.userAgents = append(s.swampopt.userAgents, uagents...)
}
// SetUserAgents sets the list of useragents we randomly choose from during proxied requests
func (s *Swamp) SetUserAgents(uagents []string) {
s.mu.Lock()
defer s.mu.Unlock()
s.swampopt.userAgents = append(s.swampopt.userAgents, uagents...)
}
// SetCheckEndpoints replaces the running list of whatismyip style endpoitns for validation. (must return only the WAN IP)
func (s *Swamp) SetCheckEndpoints(newendpoints []string) {
s.mu.Lock()
defer s.mu.Unlock()
s.swampopt.CheckEndpoints = newendpoints
}
// AddCheckEndpoints appends entries to the running list of whatismyip style endpoitns for validation. (must return only the WAN IP)
func (s *Swamp) AddCheckEndpoints(newendpoints []string) {
s.mu.Lock()
defer s.mu.Unlock()
s.swampopt.CheckEndpoints = append(s.swampopt.CheckEndpoints, newendpoints...)
}
// SetStaleTime replaces the duration of time after which a proxy will be considered "stale". stale proxies will be skipped upon retrieval.
func (s *Swamp) SetStaleTime(newtime time.Duration) {
s.mu.Lock()
defer s.mu.Unlock()
s.swampopt.stale = newtime
}
// SetValidationTimeout sets the validationTimeout option (in seconds).
func (s *Swamp) SetValidationTimeout(newtimeout int) {
s.mu.Lock()
defer s.mu.Unlock()
s.swampopt.validationTimeout = newtimeout
}
// SetMaxWorkers set the maximum workers for proxy checking, this must be set before calling LoadProxyTXT for the first time.
func (s *Swamp) SetMaxWorkers(num int) error {
if s.Status == Running {
return errors.New("can't change max workers during proxypool operation, try pausing first")
}
s.pool.Stop()
s.swampopt.maxWorkers = num
s.pool = pond.New(s.swampopt.maxWorkers, 1000000, pond.PanicHandler(func(p interface{}) {
fmt.Println("WORKER PANIC! ", p)
}))
return nil
}
// EnableRecycling toggles recycling used proxies back into the pending channel for revalidation after dispensed.
func (s *Swamp) EnableRecycling(choice bool) {
s.mu.Lock()
defer s.mu.Unlock()
s.swampopt.recycle = choice
}