/
mux.go
42 lines (36 loc) · 1 KB
/
mux.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
package client
import (
"io"
"github.com/plgd-dev/go-coap/v2/message"
"github.com/plgd-dev/go-coap/v2/message/codes"
"github.com/plgd-dev/go-coap/v2/mux"
udpMessage "github.com/plgd-dev/go-coap/v2/udp/message"
"github.com/plgd-dev/go-coap/v2/udp/message/pool"
)
func HandlerFuncToMux(m mux.Handler) HandlerFunc {
h := func(w *ResponseWriter, r *pool.Message) {
muxw := &muxResponseWriter{
w: w,
}
muxr, err := pool.ConvertTo(r)
if err != nil {
return
}
m.ServeCOAP(muxw, &mux.Message{
Message: muxr,
SequenceNumber: r.Sequence(),
IsConfirmable: r.Type() == udpMessage.Confirmable,
RouteParams: new(mux.RouteParams),
})
}
return h
}
type muxResponseWriter struct {
w *ResponseWriter
}
func (w *muxResponseWriter) SetResponse(code codes.Code, contentFormat message.MediaType, d io.ReadSeeker, opts ...message.Option) error {
return w.w.SetResponse(code, contentFormat, d, opts...)
}
func (w *muxResponseWriter) Client() mux.Client {
return w.w.ClientConn().Client()
}