Skip to content

Commit

Permalink
improve IsPingMessage -> message.IsPing
Browse files Browse the repository at this point in the history
  • Loading branch information
jkralik committed Nov 24, 2023
1 parent 2d2d2d9 commit fb95da4
Show file tree
Hide file tree
Showing 4 changed files with 86 additions and 5 deletions.
8 changes: 8 additions & 0 deletions message/message.go
Original file line number Diff line number Diff line change
Expand Up @@ -48,3 +48,11 @@ func (r *Message) String() string {
}
return buf
}

// IsPing returns true if the message is a ping.
func (r *Message) IsPing(isTCP bool) bool {
if isTCP {
return r.Code == codes.Ping
}
return r.Code == codes.Empty && r.Type == Confirmable && len(r.Token) == 0 && len(r.Options) == 0 && len(r.Payload) == 0
}
73 changes: 73 additions & 0 deletions message/message_internal_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
package message

import (
"testing"

"github.com/plgd-dev/go-coap/v3/message/codes"
"github.com/stretchr/testify/require"
)

func TestMessageIsPing(t *testing.T) {
tests := []struct {
name string
message *Message
isTCP bool
want bool
}{
{
name: "Ping message (TCP)",
message: &Message{
Code: codes.Ping,
Type: Confirmable,
Token: nil,
Options: nil,
Payload: nil,
},
isTCP: true,
want: true,
},
{
name: "Ping message (UDP)",
message: &Message{
Code: codes.Empty,
Type: Confirmable,
Token: nil,
Options: nil,
Payload: nil,
},
isTCP: false,
want: true,
},
{
name: "Non-ping message (TCP)",
message: &Message{
Code: codes.GET,
Type: Confirmable,
Token: []byte{1, 2, 3},
Options: []Option{{ID: 1, Value: []byte{4, 5, 6}}},
Payload: []byte{7, 8, 9},
},
isTCP: true,
want: false,
},
{
name: "Non-ping message (UDP)",
message: &Message{
Code: codes.GET,
Type: Confirmable,
Token: []byte{1, 2, 3},
Options: []Option{{ID: 1, Value: []byte{4, 5, 6}}},
Payload: []byte{7, 8, 9},
},
isTCP: false,
want: false,
},
}

for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
got := tt.message.IsPing(tt.isTCP)
require.Equal(t, tt.want, got)
})
}
}
4 changes: 4 additions & 0 deletions message/pool/message.go
Original file line number Diff line number Diff line change
Expand Up @@ -618,3 +618,7 @@ func (r *Message) Clone(msg *Message) error {
}
return nil
}

func (r *Message) IsPing(isTCP bool) bool {
return r.msg.IsPing(isTCP)
}
6 changes: 1 addition & 5 deletions udp/client/conn.go
Original file line number Diff line number Diff line change
Expand Up @@ -792,10 +792,6 @@ func (cc *Conn) handlePong(w *responsewriter.ResponseWriter[*Conn], r *pool.Mess
cc.sendPong(w, r)
}

func (cc *Conn) IsPingMessage(r *pool.Message) bool {
return r.Code() == codes.Empty && r.Type() == message.Confirmable && len(r.Token()) == 0 && len(r.Options()) == 0 && r.Body() == nil
}

func upsertInterfaceToMessage(m *pool.Message, ifIndex int) {
if ifIndex >= 1 {
cm := coapNet.ControlMessage{
Expand All @@ -807,7 +803,7 @@ func upsertInterfaceToMessage(m *pool.Message, ifIndex int) {

func (cc *Conn) handleSpecialMessages(r *pool.Message) bool {
// ping request
if cc.IsPingMessage(r) {
if r.IsPing(false) {
cc.ProcessReceivedMessageWithHandler(r, cc.handlePong)
return true
}
Expand Down

0 comments on commit fb95da4

Please sign in to comment.