@ -149,6 +149,7 @@ func (e *engine) EventManager() event.Manager {
// eventHandler process events from other subsystems
func ( e * engine ) eventHandler ( ) {
log . Debugf ( "restartFlow Launching ProtocolEngine listener" )
for {
ev := e . queue . Next ( )
// optimistic shutdown...
@ -159,6 +160,7 @@ func (e *engine) eventHandler() {
case event . StatusRequest :
e . eventManager . Publish ( event . Event { EventType : event . ProtocolEngineStatus , EventID : ev . EventID } )
case event . PeerRequest :
log . Debugf ( "restartFlow Handling Peer Request" )
if torProvider . IsValidHostname ( ev . Data [ event . RemotePeer ] ) {
go e . peerWithOnion ( ev . Data [ event . RemotePeer ] )
}
@ -333,6 +335,7 @@ func (e *engine) listenFn() {
func ( e * engine ) Shutdown ( ) {
// don't accept any more events...
e . queue . Publish ( event . NewEvent ( event . ProtocolEngineShutdown , map [ event . Field ] string { } ) )
e . eventManager . Publish ( event . NewEvent ( event . ProtocolEngineShutdown , map [ event . Field ] string { } ) )
e . service . Shutdown ( )
e . shuttingDown . Store ( true )
e . ephemeralServicesLock . Lock ( )
@ -357,24 +360,26 @@ func (e *engine) peerWithOnion(onion string) {
log . Debugf ( "Called PeerWithOnion for %v" , onion )
if ! e . isBlocked ( onion ) {
e . ignoreOnShutdown ( e . peerConnecting ) ( onion )
log . Debugf ( "PeerWithOnion Connecting %v" , onion )
connected , err := e . service . Connect ( onion , e . createPeerTemplate ( ) )
log . Debugf ( "PeerWithOnion %v %v" , onion , err )
// If we are already connected...check if we are authed and issue an auth event
// (This allows the ui to be stateless)
if connected && err != nil {
conn , err := e . service . GetConnection( onion )
conn , err := e . service . WaitForCapabilityOrClose( onion , cwtchCapability )
if err == nil {
if conn . HasCapability ( cwtchCapability ) {
e . ignoreOnShutdown ( e . peerAuthed ) ( onion )
return
}
log . Debugf ( "PeerWithOnion something went very wrong...%v %v" , onion , err )
e . ignoreOnShutdown ( e . peerDisconnected ) ( onion )
} else {
log . Debugf ( "PeerWithOnion %v %v" , onion , err )
e . ignoreOnShutdown ( e . peerDisconnected ) ( onion )
}
}
// Only issue a disconnected error if we are disconnected (Connect will fail if a connection already exists)
if ! connected && err != nil {
e . ignoreOnShutdown ( e . peerDisconnected ) ( onion )
}
}
}