Require error to construct an ErrorACN #44
28
error_acn.go
28
error_acn.go
|
@ -1,20 +1,25 @@
|
||||||
package connectivity
|
package connectivity
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
|
||||||
"fmt"
|
|
||||||
"net"
|
"net"
|
||||||
)
|
)
|
||||||
|
|
||||||
const acnError = "error initializing anonymous communication network"
|
|
||||||
|
|
||||||
// ErrorACN - a status-callback safe errored ACN. Use this when ACN construction goes wrong
|
// ErrorACN - a status-callback safe errored ACN. Use this when ACN construction goes wrong
|
||||||
// and you need a safe substitute that can later be replaced with a working ACN without impacting calling clients.
|
// and you need a safe substitute that can later be replaced with a working ACN without impacting calling clients.
|
||||||
type ErrorACN struct {
|
type ErrorACN struct {
|
||||||
|
acnError error
|
||||||
statusCallbackCache func(int, string)
|
statusCallbackCache func(int, string)
|
||||||
versionCallbackCache func(string)
|
versionCallbackCache func(string)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func NewErrorACN(err error) ErrorACN {
|
||||||
|
return ErrorACN{
|
||||||
|
acnError: err,
|
||||||
|
statusCallbackCache: func(int, string) {},
|
||||||
|
versionCallbackCache: func(string) {},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func (e *ErrorACN) GetStatusCallback() func(int, string) {
|
func (e *ErrorACN) GetStatusCallback() func(int, string) {
|
||||||
return e.statusCallbackCache
|
return e.statusCallbackCache
|
||||||
}
|
}
|
||||||
|
@ -24,15 +29,15 @@ func (e *ErrorACN) GetVersionCallback() func(string) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (e *ErrorACN) GetInfo(addr string) (map[string]string, error) {
|
func (e *ErrorACN) GetInfo(addr string) (map[string]string, error) {
|
||||||
return nil, errors.New(acnError)
|
return nil, e.acnError
|
||||||
}
|
}
|
||||||
|
|
||||||
func (e *ErrorACN) GetBootstrapStatus() (int, string) {
|
func (e *ErrorACN) GetBootstrapStatus() (int, string) {
|
||||||
return -1, acnError
|
return -1, e.acnError.Error()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (e *ErrorACN) WaitTillBootstrapped() error {
|
func (e *ErrorACN) WaitTillBootstrapped() error {
|
||||||
return errors.New(acnError)
|
return e.acnError
|
||||||
}
|
}
|
||||||
|
|
||||||
func (e *ErrorACN) SetStatusCallback(callback func(int, string)) {
|
func (e *ErrorACN) SetStatusCallback(callback func(int, string)) {
|
||||||
|
@ -47,20 +52,21 @@ func (e *ErrorACN) Restart() {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (e *ErrorACN) Open(hostname string) (net.Conn, string, error) {
|
func (e *ErrorACN) Open(hostname string) (net.Conn, string, error) {
|
||||||
return nil, "", fmt.Errorf(acnError)
|
return nil, "", e.acnError
|
||||||
}
|
}
|
||||||
|
|
||||||
func (e *ErrorACN) Listen(identity PrivateKey, port int) (ListenService, error) {
|
func (e *ErrorACN) Listen(identity PrivateKey, port int) (ListenService, error) {
|
||||||
return nil, fmt.Errorf(acnError)
|
return nil, e.acnError
|
||||||
}
|
}
|
||||||
|
|
||||||
func (e *ErrorACN) GetPID() (int, error) {
|
func (e *ErrorACN) GetPID() (int, error) {
|
||||||
return -1, fmt.Errorf(acnError)
|
return -1, e.acnError
|
||||||
}
|
}
|
||||||
|
|
||||||
func (e *ErrorACN) GetVersion() string {
|
func (e *ErrorACN) GetVersion() string {
|
||||||
return acnError
|
return e.acnError.Error()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (e *ErrorACN) Close() {
|
func (e *ErrorACN) Close() {
|
||||||
|
// nothing to do...
|
||||||
}
|
}
|
||||||
|
|
|
@ -170,8 +170,9 @@ var progRe = regexp.MustCompile("PROGRESS=([0-9]*)")
|
||||||
var sumRe = regexp.MustCompile("SUMMARY=\"(.*)\"$")
|
var sumRe = regexp.MustCompile("SUMMARY=\"(.*)\"$")
|
||||||
|
|
||||||
// GetBootstrapStatus returns an int 0-100 on the percent the bootstrapping of the underlying network is at and an optional string message
|
// GetBootstrapStatus returns an int 0-100 on the percent the bootstrapping of the underlying network is at and an optional string message
|
||||||
// returns -1 on network disconnected
|
//
|
||||||
// returns -2 on error
|
// returns -1 on network disconnected
|
||||||
|
// returns -2 on error
|
||||||
func (tp *torProvider) GetBootstrapStatus() (int, string) {
|
func (tp *torProvider) GetBootstrapStatus() (int, string) {
|
||||||
tp.lock.Lock()
|
tp.lock.Lock()
|
||||||
defer tp.lock.Unlock()
|
defer tp.lock.Unlock()
|
||||||
|
@ -442,19 +443,18 @@ func newHideCmd(exePath string) process.Creator {
|
||||||
loggerDebug := &logWriter{log.LevelDebug}
|
loggerDebug := &logWriter{log.LevelDebug}
|
||||||
loggerError := &logWriter{log.LevelError}
|
loggerError := &logWriter{log.LevelError}
|
||||||
|
|
||||||
|
|
||||||
cmd := exec.CommandContext(ctx, exePath, args...)
|
cmd := exec.CommandContext(ctx, exePath, args...)
|
||||||
cmd.Stdout = loggerDebug
|
cmd.Stdout = loggerDebug
|
||||||
cmd.Stderr = loggerError
|
cmd.Stderr = loggerError
|
||||||
cmd.SysProcAttr = sysProcAttr
|
cmd.SysProcAttr = sysProcAttr
|
||||||
|
|
||||||
// override tor ld_library_path if requested
|
// override tor ld_library_path if requested
|
||||||
torLdLibPath,exists := os.LookupEnv("TOR_LD_LIBRARY_PATH")
|
torLdLibPath, exists := os.LookupEnv("TOR_LD_LIBRARY_PATH")
|
||||||
if exists {
|
if exists {
|
||||||
ldLibPath := fmt.Sprintf("LD_LIBRARY_PATH=%v", torLdLibPath)
|
ldLibPath := fmt.Sprintf("LD_LIBRARY_PATH=%v", torLdLibPath)
|
||||||
cmd.Env = append([]string{ldLibPath},os.Environ()...)
|
cmd.Env = append([]string{ldLibPath}, os.Environ()...)
|
||||||
}
|
}
|
||||||
|
|
||||||
return cmd, nil
|
return cmd, nil
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
@ -665,4 +665,4 @@ func dialControlPort(port int) (*control.Conn, error) {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
return control.NewConn(textConn), nil
|
return control.NewConn(textConn), nil
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue