diff --git a/channels/chatchannel.go b/channels/chatchannel.go index 001ad46..a0fa86a 100644 --- a/channels/chatchannel.go +++ b/channels/chatchannel.go @@ -139,7 +139,10 @@ func (cc *ChatChannel) Packet(data []byte) { } else if ack := res.GetChatAcknowledge(); ack != nil { cc.Handler.ChatMessageAck(ack.GetMessageId(), ack.GetAccepted()) } - // XXX? } + // We ignore invalid packets. + return } + // Close the channel if it is being misused + cc.channel.CloseChannel() } diff --git a/channels/contactrequestchannel.go b/channels/contactrequestchannel.go index 6249558..e2cabde 100644 --- a/channels/contactrequestchannel.go +++ b/channels/contactrequestchannel.go @@ -155,8 +155,8 @@ func (crc *ContactRequestChannel) Packet(data []byte) { err := proto.Unmarshal(data, response) if err == nil { crc.handleStatus(response.GetStatus().String()) - return } } - crc.channel.SendMessage([]byte{}) + // Whatever happens we close the channel + crc.channel.CloseChannel() } diff --git a/channels/contactrequestchannel_test.go b/channels/contactrequestchannel_test.go index dd584c1..74d2cba 100644 --- a/channels/contactrequestchannel_test.go +++ b/channels/contactrequestchannel_test.go @@ -139,7 +139,12 @@ func TestContactRequestPacket(t *testing.T) { contactRequestChannel.OpenOutboundResult(nil, cr) ackp := messageBuilder.ReplyToContactRequest(1, "Accepted") + closed := false + channel.CloseChannel = func() { closed = true } contactRequestChannel.Packet(ackp) + if closed == false { + t.Errorf("Channel Should Have Been Closed") + } } func TestContactRequestRejected(t *testing.T) { @@ -160,7 +165,12 @@ func TestContactRequestRejected(t *testing.T) { contactRequestChannel.OpenOutboundResult(nil, cr) ackp := messageBuilder.ReplyToContactRequest(1, "Rejected") + closed := false + channel.CloseChannel = func() { closed = true } contactRequestChannel.Packet(ackp) + if closed == false { + t.Errorf("Channel Should Have Been Closed") + } } func TestContactRequestError(t *testing.T) { @@ -181,7 +191,12 @@ func TestContactRequestError(t *testing.T) { contactRequestChannel.OpenOutboundResult(nil, cr) ackp := messageBuilder.ReplyToContactRequest(1, "Error") + closed := false + channel.CloseChannel = func() { closed = true } contactRequestChannel.Packet(ackp) + if closed == false { + t.Errorf("Channel Should Have Been Closed") + } } func BuildOpenChannel(nickname string, message string) *Protocol_Data_Control.OpenChannel {