From 8afc75f1fc0750d81dfe25f3835cbaab702fd0b5 Mon Sep 17 00:00:00 2001 From: Zack Scholl Date: Sun, 23 Sep 2018 05:39:23 -0700 Subject: [PATCH] listen for interrupt in websockets --- src/croc/sending.go | 4 ++++ src/recipient/recipient.go | 3 +++ src/sender/sender.go | 3 +++ 3 files changed, 10 insertions(+) diff --git a/src/croc/sending.go b/src/croc/sending.go index c6f8ec2..192a36d 100644 --- a/src/croc/sending.go +++ b/src/croc/sending.go @@ -152,6 +152,10 @@ func (c *Croc) sendReceive(websocketAddress, fname, codephrase string, isSender return nil case <-interrupt: log.Debug("interrupt") + err = sock.WriteMessage(websocket.TextMessage, []byte("interrupt")) + if err != nil { + return err + } // Cleanly close the connection by sending a close message and then // waiting (with timeout) for the server to close the connection. diff --git a/src/recipient/recipient.go b/src/recipient/recipient.go index 9fb70c2..3ebd093 100644 --- a/src/recipient/recipient.go +++ b/src/recipient/recipient.go @@ -73,6 +73,9 @@ func receive(isLocal bool, c *websocket.Conn, codephrase string, noPrompt bool, if messageType == websocket.PongMessage || messageType == websocket.PingMessage { continue } + if messageType == websocket.TextMessage && bytes.Equal(messsage, "interrupt") { + return errors.New("interrupted by other party") + } log.Debugf("got %d: %s", messageType, message) switch step { diff --git a/src/sender/sender.go b/src/sender/sender.go index 3686605..0929256 100644 --- a/src/sender/sender.go +++ b/src/sender/sender.go @@ -78,6 +78,9 @@ func send(isLocal bool, c *websocket.Conn, fname string, codephrase string, useC if messageType == websocket.PongMessage || messageType == websocket.PingMessage { continue } + if messageType == websocket.TextMessage && bytes.Equal(messsage, "interrupt") { + return errors.New("interrupted by other party") + } log.Debugf("got %d: %s", messageType, message) switch step { case 0: