From 6697c73222f34771c5ede4357a59b214d08c3205 Mon Sep 17 00:00:00 2001 From: Sarah Jamie Lewis Date: Sun, 3 Mar 2019 18:01:38 -0800 Subject: [PATCH] Improving peer error handling --- protocol/connections/engine.go | 7 +++++-- protocol/connections/peerpeerconnection.go | 8 +++++--- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/protocol/connections/engine.go b/protocol/connections/engine.go index bd4e546..a22faee 100644 --- a/protocol/connections/engine.go +++ b/protocol/connections/engine.go @@ -86,9 +86,12 @@ func (e *Engine) eventHandler() { log.Debugf("Sending Message to Peer.....") ppc := e.connectionsManager.GetPeerPeerConnectionForOnion(ev.Data[event.RemotePeer]) if ppc != nil && ppc.GetState() == AUTHENTICATED { - ppc.SendPacket([]byte(ev.Data[event.Data])) + err := ppc.SendPacket([]byte(ev.Data[event.Data])) + if err != nil { + e.eventManager.Publish(event.NewEvent(event.SendMessageToPeerError, map[event.Field]string{event.RemotePeer: ev.Data[event.RemotePeer], event.Signature: ev.EventID, event.Error: err.Error()})) + } } else { - e.eventManager.Publish(event.NewEvent(event.SendMessageToPeerError, map[event.Field]string{event.RemotePeer: ev.Data[event.RemotePeer], event.Error: "peer is offline or the connection has yet to finalize"})) + e.eventManager.Publish(event.NewEvent(event.SendMessageToPeerError, map[event.Field]string{event.RemotePeer: ev.Data[event.RemotePeer], event.Signature: ev.EventID, event.Error: "peer is offline or the connection has yet to finalize"})) } case event.BlockPeer: e.blocked.Store(ev.Data[event.RemotePeer], true) diff --git a/protocol/connections/peerpeerconnection.go b/protocol/connections/peerpeerconnection.go index a230f9a..53f94fb 100644 --- a/protocol/connections/peerpeerconnection.go +++ b/protocol/connections/peerpeerconnection.go @@ -2,6 +2,7 @@ package connections import ( "cwtch.im/cwtch/protocol/connections/peer" + "errors" "git.openprivacy.ca/openprivacy/libricochet-go" "git.openprivacy.ca/openprivacy/libricochet-go/channels" "git.openprivacy.ca/openprivacy/libricochet-go/connection" @@ -33,18 +34,19 @@ func (ppc *PeerPeerConnection) GetState() ConnectionState { } // SendPacket sends data packets on the optional data channel -func (ppc *PeerPeerConnection) SendPacket(data []byte) { +func (ppc *PeerPeerConnection) SendPacket(data []byte) error { ppc.WaitTilAuthenticated() - ppc.connection.Do(func() error { + return ppc.connection.Do(func() error { channel := ppc.connection.Channel("im.cwtch.peer.data", channels.Outbound) if channel != nil { peerchannel, ok := channel.Handler.(*peer.CwtchPeerDataChannel) if ok { log.Debugf("Sending packet\n") peerchannel.SendMessage(data) + return nil } } - return nil + return errors.New("failed to send packet to peer") }) }