package objs
import (
"fmt"
"strconv"
"com.zkh/agent/coap/utils"
"github.com/plgd-dev/go-coap/v3/message"
)
const (
SESSION_ID message.OptionID = 2048
PUUID message.OptionID = 2056
PLUGIN message.OptionID = 2057
LOCAL_ER message.OptionID = 2058
SEQ_NUM_ID message.OptionID = 2053
ACCESS_TOKEN_ID message.OptionID = 2049
REQ_ID message.OptionID = 2050
DEV_ID message.OptionID = 2051
USER_ID message.OptionID = 2052
CLIENT_ID message.OptionID = 3000
APP_ID message.OptionID = 3001
)
func init() {
message.CoapOptionDefs[SESSION_ID] = message.OptionDef{ValueFormat: message.ValueString, MinLen: 0, MaxLen: 16}
message.CoapOptionDefs[SEQ_NUM_ID] = message.OptionDef{ValueFormat: message.ValueUint, MinLen: 0, MaxLen: 4}
message.CoapOptionDefs[PUUID] = message.OptionDef{ValueFormat: message.ValueString, MinLen: 0, MaxLen: 17}
message.CoapOptionDefs[PLUGIN] = message.OptionDef{ValueFormat: message.ValueString, MinLen: 0, MaxLen: 32}
message.CoapOptionDefs[LOCAL_ER] = message.OptionDef{ValueFormat: message.ValueUint, MinLen: 0, MaxLen: 4}
message.CoapOptionDefs[ACCESS_TOKEN_ID] = message.OptionDef{ValueFormat: message.ValueString, MinLen: 0, MaxLen: 40}
message.CoapOptionDefs[REQ_ID] = message.OptionDef{ValueFormat: message.ValueString, MinLen: 0, MaxLen: 256}
message.CoapOptionDefs[DEV_ID] = message.OptionDef{ValueFormat: message.ValueString, MinLen: 0, MaxLen: 256}
message.CoapOptionDefs[USER_ID] = message.OptionDef{ValueFormat: message.ValueString, MinLen: 0, MaxLen: 256}
message.CoapOptionDefs[CLIENT_ID] = message.OptionDef{ValueFormat: message.ValueString, MinLen: 0, MaxLen: 64}
message.CoapOptionDefs[APP_ID] = message.OptionDef{ValueFormat: message.ValueString, MinLen: 0, MaxLen: 10}
}
func MapToOptions(data map[string]string) message.Options {
opts := message.Options{}
if data["DEV_ID"] != "" {
opts = opts.Add(message.Option{ID: DEV_ID, Value: []byte(data["DEV_ID"])})
}
if data["ACCESS_TOKEN_ID"] != "" {
opts = opts.Add(message.Option{ID: ACCESS_TOKEN_ID, Value: []byte(data["ACCESS_TOKEN_ID"])})
}
if data["REQ_ID"] != "" {
opts = opts.Add(message.Option{ID: REQ_ID, Value: []byte(data["REQ_ID"])})
}
if data["USER_ID"] != "" {
opts = opts.Add(message.Option{ID: USER_ID, Value: []byte(data["USER_ID"])})
}
if data["CLIENT_ID"] != "" {
opts = opts.Add(message.Option{ID: CLIENT_ID, Value: []byte(data["CLIENT_ID"])})
}
if data["APP_ID"] != "" {
opts = opts.Add(message.Option{ID: APP_ID, Value: []byte(data["APP_ID"])})
}
if data["SEQ_NUM_ID"] != "" {
seqID, _ := strconv.Atoi(data["SEQ_NUM_ID"])
opts = opts.Add(message.Option{ID: SEQ_NUM_ID, Value: utils.IntToBytes(seqID)})
}
return opts
}
func OptionsToMap(opts message.Options) map[string]string {
data := make(map[string]string)
temp, err := opts.GetString(DEV_ID)
if err == nil {
data["DEV_ID"] = temp
}
temp, err = opts.GetString(REQ_ID)
if err == nil {
data["REQ_ID"] = temp
}
temp, err = opts.GetString(ACCESS_TOKEN_ID)
if err == nil {
data["ACCESS_TOKEN_ID"] = temp
}
temp, err = opts.GetString(USER_ID)
if err == nil {
data["USER_ID"] = temp
}
temp, err = opts.GetString(CLIENT_ID)
if err == nil {
data["CLIENT_ID"] = temp
}
temp, err = opts.GetString(APP_ID)
if err == nil {
data["APP_ID"] = temp
}
temp1, err := opts.GetUint32(SEQ_NUM_ID)
if err == nil {
data["SEQ_NUM_ID"] = fmt.Sprintf("%d", temp1)
}
return data
}