expose tor control port bootstrap info

This commit is contained in:
Dan Ballard 2018-10-05 16:27:57 -07:00
parent 9a62468915
commit 4544535ad5
2 changed files with 21 additions and 14 deletions

View File

@ -31,6 +31,8 @@ type Application interface {
GetPeer(onion string) peer.CwtchPeer
ListPeers() map[string]string
GetTorStatus() (map[string]string, error)
Shutdown()
}
@ -166,6 +168,11 @@ func (app *application) GetPeer(onion string) peer.CwtchPeer {
return nil
}
// GetTorStatus returns tor control port bootstrap-phase status info in a map
func (app *application) GetTorStatus() (map[string]string, error) {
return app.torManager.GetStatus()
}
// Shutdown shutsdown all peers of an app and then the tormanager
func (app *application) Shutdown() {
for _, peer := range app.peers {

View File

@ -28,16 +28,6 @@ func NewTorManager(socksPort int, controlPort int, torPath string, torrc string)
torManager.socksPort = socksPort
torManager.controlPort = controlPort
fmt.Println("NewTorManager")
go func() {
fmt.Printf("Monitor\n")
for {
time.Sleep(1 * time.Second)
resp, err := torManager.GetStatus()
fmt.Println(resp, err)
}
}()
err := torManager.TestConnection()
if err == nil {
@ -152,17 +142,27 @@ func (tm *Manager) TestConnection() error {
return errors.New(proxyStatusMessage(proxyStatus))
}
func (tm *Manager) GetStatus() ([]string, error) {
// GetStatus returns tor control port bootstrap-phase status info in a map
func (tm *Manager) GetStatus() (map[string]string, error) {
controlAddress := fmt.Sprintf("127.0.0.1:%d", tm.controlPort)
c, err := bulb.Dial("tcp4", controlAddress)
if err != nil {
return []string{}, err
return nil, err
}
defer c.Close()
c.Request("AUTHENTICATE \"\"")
resp, err := c.Request("GETINFO status/bootstrap-phase")
if err != nil {
return []string{}, err
return nil, err
}
return resp.RawLines, nil
lines := strings.SplitN(resp.RawLines[0], " ", 5)
var resps = make(map[string]string)
for _, l := range lines {
kv := strings.Split(l, "=")
if len(kv) == 2 {
resps[kv[0]] = kv[1]
}
}
return resps, nil
}