1
0
mirror of https://github.com/mainflux/mainflux.git synced 2025-05-06 19:29:15 +08:00
Dušan Borovčanin f10e49e6b5
MF-928 - Change CoAP lib (#1233)
* Switch CoAP lib

Signed-off-by: dusanb94 <dusan.borovcanin@mainflux.com>

* Revert removed adapter code

Signed-off-by: dusanb94 <dusan.borovcanin@mainflux.com>

* WIP CoAP refactor

Signed-off-by: dusanb94 <dusan.borovcanin@mainflux.com>

* Add auth key

Signed-off-by: dusanb94 <dusan.borovcanin@mainflux.com>

* Fix observers map

Signed-off-by: dusanb94 <dusan.borovcanin@mainflux.com>

* Fix reading message body

Signed-off-by: dusanb94 <dusan.borovcanin@mainflux.com>

* Fix subtopic parsing

Signed-off-by: dusanb94 <dusan.borovcanin@mainflux.com>

* Fix error handling

Signed-off-by: dusanb94 <dusan.borovcanin@mainflux.com>

* Fix multi-protocol communication

Signed-off-by: dusanb94 <dusan.borovcanin@mainflux.com>

* Separate client from observer

Signed-off-by: dusanb94 <dusan.borovcanin@mainflux.com>

* Remove unused config

Signed-off-by: dusanb94 <dusan.borovcanin@mainflux.com>

* Remove TCP option

Signed-off-by: dusanb94 <dusan.borovcanin@mainflux.com>

* Inline error check

Signed-off-by: dusanb94 <dusan.borovcanin@mainflux.com>

* Add logging client errors

Signed-off-by: dusanb94 <dusan.borovcanin@mainflux.com>

* Replace RWMutex since we're not using RLock

Signed-off-by: dusanb94 <dusan.borovcanin@mainflux.com>

* Inline error handling

Signed-off-by: dusanb94 <dusan.borovcanin@mainflux.com>

* Inline error handling

Signed-off-by: dusanb94 <dusan.borovcanin@mainflux.com>
2020-09-22 11:59:10 +02:00

49 lines
937 B
Go

package message
import (
"encoding/binary"
)
func EncodeUint32(buf []byte, value uint32) (int, error) {
switch {
case value == 0:
return 0, nil
case value <= max1ByteNumber:
if len(buf) < 1 {
return 1, ErrTooSmall
}
buf[0] = byte(value)
return 1, nil
case value <= max2ByteNumber:
if len(buf) < 2 {
return 2, ErrTooSmall
}
binary.BigEndian.PutUint16(buf, uint16(value))
return 2, nil
case value <= max3ByteNumber:
if len(buf) < 3 {
return 3, ErrTooSmall
}
rv := make([]byte, 4)
binary.BigEndian.PutUint32(rv[:], value)
copy(buf, rv[1:])
return 3, nil
default:
if len(buf) < 4 {
return 4, ErrTooSmall
}
binary.BigEndian.PutUint32(buf, value)
return 4, nil
}
}
func DecodeUint32(buf []byte) (uint32, int, error) {
if len(buf) > 4 {
buf = buf[:4]
}
tmp := []byte{0, 0, 0, 0}
copy(tmp[4-len(buf):], buf)
value := binary.BigEndian.Uint32(tmp)
return value, len(buf), nil
}