71 lines
1.8 KiB
Go
71 lines
1.8 KiB
Go
package handler
|
|
|
|
import (
|
|
"log"
|
|
|
|
"github.com/leandrofars/oktopus/internal/db"
|
|
usp_msg "github.com/leandrofars/oktopus/internal/usp_message"
|
|
"github.com/leandrofars/oktopus/internal/usp_record"
|
|
"github.com/leandrofars/oktopus/internal/utils"
|
|
"google.golang.org/protobuf/proto"
|
|
)
|
|
|
|
func HandleNewDevice(deviceMac string) []byte {
|
|
|
|
payload := utils.NewGetMsg(usp_msg.Get{
|
|
ParamPaths: []string{
|
|
"Device.DeviceInfo.Manufacturer",
|
|
"Device.DeviceInfo.ModelName",
|
|
"Device.DeviceInfo.SoftwareVersion",
|
|
"Device.DeviceInfo.SerialNumber",
|
|
"Device.DeviceInfo.ProductClass",
|
|
},
|
|
MaxDepth: 1,
|
|
})
|
|
|
|
teste, _ := proto.Marshal(&payload)
|
|
record := utils.NewUspRecord(teste, deviceMac)
|
|
|
|
tr369Message, err := proto.Marshal(&record)
|
|
if err != nil {
|
|
log.Fatalln("Failed to encode tr369 record:", err)
|
|
}
|
|
|
|
return tr369Message
|
|
}
|
|
|
|
func HandleNewDevicesResponse(p []byte, sn string, mtp db.MTP) db.Device {
|
|
var record usp_record.Record
|
|
var message usp_msg.Msg
|
|
|
|
err := proto.Unmarshal(p, &record)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
err = proto.Unmarshal(record.GetNoSessionContext().Payload, &message)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
var device db.Device
|
|
msg := message.Body.MsgBody.(*usp_msg.Body_Response).Response.GetGetResp()
|
|
|
|
device.Vendor = msg.ReqPathResults[0].ResolvedPathResults[0].ResultParams["Manufacturer"]
|
|
device.Model = msg.ReqPathResults[1].ResolvedPathResults[0].ResultParams["ModelName"]
|
|
device.Version = msg.ReqPathResults[2].ResolvedPathResults[0].ResultParams["SoftwareVersion"]
|
|
device.ProductClass = msg.ReqPathResults[4].ResolvedPathResults[0].ResultParams["ProductClass"]
|
|
device.SN = sn
|
|
switch db.MTP(mtp) {
|
|
case db.MQTT:
|
|
device.Mqtt = db.Online
|
|
case db.WEBSOCKETS:
|
|
device.Websockets = db.Online
|
|
case db.STOMP:
|
|
device.Stomp = db.Online
|
|
}
|
|
|
|
device.Status = db.Online
|
|
|
|
return device
|
|
}
|