From 42b657f4b98272c9ce6869b782a9a61860a7ad25 Mon Sep 17 00:00:00 2001 From: leandrofars Date: Tue, 21 May 2024 20:28:19 -0300 Subject: [PATCH] feat(api): cwmp SetParameterValues message --- .../services/controller/internal/api/api.go | 1 + .../services/controller/internal/api/cwmp.go | 35 +++++++++++++++++++ .../services/controller/internal/cwmp/cwmp.go | 4 +++ 3 files changed, 40 insertions(+) diff --git a/backend/services/controller/internal/api/api.go b/backend/services/controller/internal/api/api.go index 1e56030..4fafb34 100644 --- a/backend/services/controller/internal/api/api.go +++ b/backend/services/controller/internal/api/api.go @@ -59,6 +59,7 @@ func (a *Api) StartApi() { iot.HandleFunc("/auth", a.deviceAuth).Methods("GET", "POST", "DELETE") iot.HandleFunc("/cwmp/{sn}/getParameterNames", a.cwmpGetParameterNamesMsg).Methods("PUT") iot.HandleFunc("/cwmp/{sn}/getParameterValues", a.cwmpGetParameterValuesMsg).Methods("PUT") + iot.HandleFunc("/cwmp/{sn}/setParameterValues", a.cwmpSetParameterValuesMsg).Methods("PUT") iot.HandleFunc("", a.retrieveDevices).Methods("GET") iot.HandleFunc("/{id}", a.retrieveDevices).Methods("GET") iot.HandleFunc("/{sn}/{mtp}/get", a.deviceGetMsg).Methods("PUT") diff --git a/backend/services/controller/internal/api/cwmp.go b/backend/services/controller/internal/api/cwmp.go index 0d84439..0c2a54f 100644 --- a/backend/services/controller/internal/api/cwmp.go +++ b/backend/services/controller/internal/api/cwmp.go @@ -81,3 +81,38 @@ func (a *Api) cwmpGetParameterValuesMsg(w http.ResponseWriter, r *http.Request) w.Write(data) } + +func (a *Api) cwmpSetParameterValuesMsg(w http.ResponseWriter, r *http.Request) { + sn := getSerialNumberFromRequest(r) + + payload, err := io.ReadAll(r.Body) + if err != nil { + w.WriteHeader(http.StatusBadRequest) + w.Write(utils.Marshall(err.Error())) + return + } + + data, err := bridge.NatsCwmpInteraction( + nats.NATS_CWMP_ADAPTER_SUBJECT_PREFIX+sn+".api", + payload, + w, + a.nc, + ) + if err != nil { + return + } + + var response cwmp.SetParameterValuesResponse + err = xml.Unmarshal(data, &response) + if err != nil { + err = json.Unmarshal(data, &response) + if err != nil { + w.WriteHeader(http.StatusBadRequest) + w.Write(utils.Marshall(err)) + return + } + return + } + + w.Write(data) +} diff --git a/backend/services/controller/internal/cwmp/cwmp.go b/backend/services/controller/internal/cwmp/cwmp.go index a0aaa06..5c51b86 100644 --- a/backend/services/controller/internal/cwmp/cwmp.go +++ b/backend/services/controller/internal/cwmp/cwmp.go @@ -180,6 +180,10 @@ func GetParameterMultiValues(leaves []string) string { return msg } +type SetParameterValuesResponse struct { + Status int `xml:"Body>SetParameterValuesResponse>Status"` +} + func SetParameterValues(leaf string, value string) string { return `