diff --git a/event/common.go b/event/common.go index 2680365..a6f24e9 100644 --- a/event/common.go +++ b/event/common.go @@ -44,6 +44,7 @@ const ( // Peer acknowledges a previously sent message // attributes // EventID: The original event id that the peer is responding too. + // RemotePeer: The peer associated with the acknowledgement PeerAcknowledgement = Type("PeerAcknowledgement") // attributes: diff --git a/protocol/connections/engine.go b/protocol/connections/engine.go index 50036de..126e26b 100644 --- a/protocol/connections/engine.go +++ b/protocol/connections/engine.go @@ -135,10 +135,10 @@ func (e *engine) eventHandler() { func (e *engine) createPeerTemplate() *PeerApp { peerAppTemplate := new(PeerApp) peerAppTemplate.MessageHandler = e.handlePeerMessage - peerAppTemplate.OnAcknowledgement = e.ignoreOnShutdown(e.peerAck) - peerAppTemplate.OnAuth = e.ignoreOnShutdown(e.peerAuthed) - peerAppTemplate.OnConnecting = e.ignoreOnShutdown(e.peerConnecting) - peerAppTemplate.OnClose = e.ignoreOnShutdown(e.peerDisconnected) + peerAppTemplate.OnAcknowledgement = e.ignoreOnShutdown2(e.peerAck) + peerAppTemplate.OnAuth = e.ignoreOnShutdown(e.peerAuthed) + peerAppTemplate.OnConnecting = e.ignoreOnShutdown(e.peerConnecting) + peerAppTemplate.OnClose = e.ignoreOnShutdown(e.peerDisconnected) return peerAppTemplate } @@ -163,14 +163,26 @@ func (e *engine) Shutdown() { // needs to be run in a goroutine as will block on Open. func (e *engine) peerWithOnion(onion string) { e.ignoreOnShutdown(e.peerConnecting)(onion) - _,err := e.service.Connect(onion, e.createPeerTemplate()) + _, err := e.service.Connect(onion, e.createPeerTemplate()) if err != nil { e.ignoreOnShutdown(e.peerDisconnected)(onion) } } -func (e * engine) ignoreOnShutdown(f func(string)) func(string){ - return func (x string) {if !e.shuttingDown{f(x)} } +func (e *engine) ignoreOnShutdown(f func(string)) func(string) { + return func(x string) { + if !e.shuttingDown { + f(x) + } + } +} + +func (e *engine) ignoreOnShutdown2(f func(string, string)) func(string, string) { + return func(x, y string) { + if !e.shuttingDown { + f(x, y) + } + } } func (e *engine) peerAuthed(onion string) { @@ -187,9 +199,10 @@ func (e *engine) peerConnecting(onion string) { })) } -func (e *engine) peerAck(eventID string) { +func (e *engine) peerAck(onion string, eventID string) { e.eventManager.Publish(event.NewEvent(event.PeerAcknowledgement, map[event.Field]string{ - event.EventID: eventID, + event.EventID: eventID, + event.RemotePeer: onion, })) } diff --git a/protocol/connections/peerapp.go b/protocol/connections/peerapp.go index 6c6e063..09a946a 100644 --- a/protocol/connections/peerapp.go +++ b/protocol/connections/peerapp.go @@ -13,7 +13,7 @@ type PeerApp struct { applications.AuthApp connection *tapir.Connection MessageHandler func(string, []byte) - OnAcknowledgement func(string) + OnAcknowledgement func(string, string) OnAuth func(string) OnClose func(string) OnConnecting func(string) @@ -64,7 +64,7 @@ func (pa PeerApp) listen() { err := json.Unmarshal(message, &peerMessage) if err == nil { if peerMessage.Context == event.ContextAck { - pa.OnAcknowledgement(peerMessage.ID) + pa.OnAcknowledgement(pa.connection.Hostname, peerMessage.ID) } else { pa.MessageHandler(pa.connection.Hostname, peerMessage.Data) }