diff --git a/backend/services/controller/internal/api/api.go b/backend/services/controller/internal/api/api.go index 479fbc3..ba19751 100644 --- a/backend/services/controller/internal/api/api.go +++ b/backend/services/controller/internal/api/api.go @@ -62,6 +62,7 @@ func (a *Api) StartApi() { iot.HandleFunc("/cwmp/{sn}/getParameterAttributes", a.cwmpGetParameterAttributesMsg).Methods("PUT") iot.HandleFunc("/cwmp/{sn}/setParameterValues", a.cwmpSetParameterValuesMsg).Methods("PUT") iot.HandleFunc("/cwmp/{sn}/addObject", a.cwmpAddObjectMsg).Methods("PUT") + iot.HandleFunc("/cwmp/{sn}/deleteObject", a.cwmpDeleteObjectMsg).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 f07a03a..d6ca034 100644 --- a/backend/services/controller/internal/api/cwmp.go +++ b/backend/services/controller/internal/api/cwmp.go @@ -103,7 +103,25 @@ func (a *Api) cwmpAddObjectMsg(w http.ResponseWriter, r *http.Request) { w.Write(data) } -func cwmpInteraction[T cwmp.SetParameterValuesResponse | cwmp.GetParameterAttributesResponse | cwmp.GetParameterNamesResponse | cwmp.GetParameterValuesResponse | cwmp.AddObjectResponse]( +func (a *Api) cwmpDeleteObjectMsg(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 := cwmpInteraction[cwmp.DeleteObjectResponse](sn, payload, w, a.nc) + if err != nil { + return + } + + w.Write(data) +} + +func cwmpInteraction[T cwmp.SetParameterValuesResponse | cwmp.DeleteObjectResponse | cwmp.GetParameterAttributesResponse | cwmp.GetParameterNamesResponse | cwmp.GetParameterValuesResponse | cwmp.AddObjectResponse]( sn string, payload []byte, w http.ResponseWriter, nc *nats.Conn, ) ([]byte, T, error) { diff --git a/backend/services/controller/internal/cwmp/cwmp.go b/backend/services/controller/internal/cwmp/cwmp.go index 01d41fc..7bc6d80 100644 --- a/backend/services/controller/internal/cwmp/cwmp.go +++ b/backend/services/controller/internal/cwmp/cwmp.go @@ -98,6 +98,15 @@ type GetParameterAttributesResponse struct { ParameterList []ParameterAttributeStruct `xml:"Body>GetParameterAttributesResponse>ParameterList>ParameterAttributeStruct"` } +type AddObjectResponse struct { + InstanceNumber string `xml:"Body>AddObjectResponse>InstanceNumber"` + Status int `xml:"Body>AddObjectResponse>Status"` +} + +type DeleteObjectResponse struct { + Status int `xml:"Body>DeleteObjectResponse>Status"` +} + type CWMPInform struct { DeviceId DeviceID `xml:"Body>Inform>DeviceId"` Events []EventStruct `xml:"Body>Inform>Event>EventStruct"`