Skip to content

Commit ce37a93

Browse files
committed
Update UDP: Ensure propagation of control message to pool.Message
This commit enhances the UDP functionality, ensuring proper dissemination of control messages to pool.Message for improved network coordination and responsiveness
1 parent c93120b commit ce37a93

File tree

10 files changed

+923
-319
lines changed

10 files changed

+923
-319
lines changed

dtls/server/session.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@ func (s *Session) Run(cc *client.Conn) (err error) {
146146
return fmt.Errorf("cannot read from connection: %w", err)
147147
}
148148
readBuf = readBuf[:readLen]
149-
err = cc.Process(readBuf)
149+
err = cc.Process(nil, readBuf)
150150
if err != nil {
151151
return err
152152
}

message/pool/message.go

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import (
1010
multierror "github.com/hashicorp/go-multierror"
1111
"github.com/plgd-dev/go-coap/v3/message"
1212
"github.com/plgd-dev/go-coap/v3/message/codes"
13+
"github.com/plgd-dev/go-coap/v3/net"
1314
"go.uber.org/atomic"
1415
)
1516

@@ -26,6 +27,7 @@ type Message struct {
2627
// Context context of request.
2728
ctx context.Context
2829
msg message.Message
30+
controlMessage *net.ControlMessage // control message for UDP
2931
hijacked atomic.Bool
3032
isModified bool
3133
valueBuffer []byte
@@ -73,6 +75,22 @@ func (r *Message) SetMessage(message message.Message) {
7375
r.isModified = true
7476
}
7577

78+
func (r *Message) SetControlMessage(cm *net.ControlMessage) {
79+
r.controlMessage = cm
80+
}
81+
82+
func (r *Message) ControlMessage() *net.ControlMessage {
83+
return r.controlMessage
84+
}
85+
86+
// UpsertControlMessage set value only when origin value is not set.
87+
func (r *Message) UpsertControlMessage(cm *net.ControlMessage) {
88+
if r.controlMessage != nil {
89+
return
90+
}
91+
r.SetControlMessage(cm)
92+
}
93+
7694
// SetMessageID only 0 to 2^16-1 are valid.
7795
func (r *Message) SetMessageID(mid int32) {
7896
r.msg.MessageID = mid
@@ -120,6 +138,7 @@ func (r *Message) Reset() {
120138
r.valueBuffer = r.origValueBuffer
121139
r.body = nil
122140
r.isModified = false
141+
r.controlMessage = nil
123142
if cap(r.bufferMarshal) > 1024 {
124143
r.bufferMarshal = make([]byte, 256)
125144
}
@@ -568,6 +587,7 @@ func (r *Message) Clone(msg *Message) error {
568587
msg.ResetOptionsTo(r.Options())
569588
msg.SetType(r.Type())
570589
msg.SetMessageID(r.MessageID())
590+
msg.SetControlMessage(r.ControlMessage())
571591

572592
if r.Body() != nil {
573593
buf := bytes.NewBuffer(nil)

0 commit comments

Comments
 (0)