refact(controller): send cwmp messages with no code repetition

This commit is contained in:
leandrofars 2024-05-30 12:34:05 -03:00
parent c4e62772d7
commit 877c21cfcc
2 changed files with 31 additions and 72 deletions

View File

@ -8,8 +8,9 @@ import (
"github.com/leandrofars/oktopus/internal/bridge"
"github.com/leandrofars/oktopus/internal/cwmp"
"github.com/leandrofars/oktopus/internal/nats"
n "github.com/leandrofars/oktopus/internal/nats"
"github.com/leandrofars/oktopus/internal/utils"
"github.com/nats-io/nats.go"
)
func (a *Api) cwmpGetParameterNamesMsg(w http.ResponseWriter, r *http.Request) {
@ -22,28 +23,11 @@ func (a *Api) cwmpGetParameterNamesMsg(w http.ResponseWriter, r *http.Request) {
return
}
data, err := bridge.NatsCwmpInteraction(
nats.NATS_CWMP_ADAPTER_SUBJECT_PREFIX+sn+".api",
payload,
w,
a.nc,
)
data, _, err := cwmpInteraction[cwmp.GetParameterNamesResponse](sn, payload, w, a.nc)
if err != nil {
return
}
var response cwmp.GetParameterNamesResponse
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)
}
@ -57,28 +41,11 @@ func (a *Api) cwmpGetParameterAttributesMsg(w http.ResponseWriter, r *http.Reque
return
}
data, err := bridge.NatsCwmpInteraction(
nats.NATS_CWMP_ADAPTER_SUBJECT_PREFIX+sn+".api",
payload,
w,
a.nc,
)
data, _, err := cwmpInteraction[cwmp.GetParameterAttributesResponse](sn, payload, w, a.nc)
if err != nil {
return
}
var response cwmp.GetParameterAttributesResponse
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)
}
@ -92,28 +59,11 @@ func (a *Api) cwmpGetParameterValuesMsg(w http.ResponseWriter, r *http.Request)
return
}
data, err := bridge.NatsCwmpInteraction(
nats.NATS_CWMP_ADAPTER_SUBJECT_PREFIX+sn+".api",
payload,
w,
a.nc,
)
data, _, err := cwmpInteraction[cwmp.GetParameterValuesResponse](sn, payload, w, a.nc)
if err != nil {
return
}
var response cwmp.GetParameterValuesResponse
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)
}
@ -127,27 +77,37 @@ func (a *Api) cwmpSetParameterValuesMsg(w http.ResponseWriter, r *http.Request)
return
}
data, err := bridge.NatsCwmpInteraction(
nats.NATS_CWMP_ADAPTER_SUBJECT_PREFIX+sn+".api",
payload,
w,
a.nc,
)
data, _, err := cwmpInteraction[cwmp.SetParameterValuesResponse](sn, payload, w, a.nc)
if err != nil {
return
}
var response cwmp.SetParameterValuesResponse
w.Write(data)
}
func cwmpInteraction[T cwmp.SetParameterValuesResponse | cwmp.GetParameterAttributesResponse | cwmp.GetParameterNamesResponse | cwmp.GetParameterValuesResponse](
sn string, payload []byte, w http.ResponseWriter, nc *nats.Conn,
) ([]byte, T, error) {
var response T
data, err := bridge.NatsCwmpInteraction(
n.NATS_CWMP_ADAPTER_SUBJECT_PREFIX+sn+".api",
payload,
w,
nc,
)
if err != nil {
return data, response, err
}
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)
return data, response, err
}

View File

@ -219,7 +219,7 @@ func (a *Api) deviceWifi(w http.ResponseWriter, r *http.Request) {
payload := cwmp.GetParameterNames("InternetGatewayDevice.LANDevice.", 1)
response, err := cwmpInteraction[cwmp.GetParameterNamesResponse](sn, payload, w, a.nc)
_, response, err := cwmpInteraction[cwmp.GetParameterNamesResponse](sn, []byte(payload), w, a.nc)
if err != nil {
return
}
@ -232,7 +232,7 @@ func (a *Api) deviceWifi(w http.ResponseWriter, r *http.Request) {
payload = cwmp.GetParameterNames(x.Name+"WLANConfiguration.", 1)
response, err := cwmpInteraction[cwmp.GetParameterNamesResponse](sn, payload, w, a.nc)
_, response, err := cwmpInteraction[cwmp.GetParameterNamesResponse](sn, []byte(payload), w, a.nc)
if err != nil {
return
}
@ -243,7 +243,7 @@ func (a *Api) deviceWifi(w http.ResponseWriter, r *http.Request) {
payload = cwmp.GetParameterNames(y.Name, 1)
response, err := cwmpInteraction[cwmp.GetParameterNamesResponse](sn, payload, w, a.nc)
_, response, err := cwmpInteraction[cwmp.GetParameterNamesResponse](sn, []byte(payload), w, a.nc)
if err != nil {
return
}
@ -284,11 +284,10 @@ func (a *Api) deviceWifi(w http.ResponseWriter, r *http.Request) {
wlanConfigurationInstances = wlanConfigurationInstances + 1
}
}
log.Println("wlanConfigurationInstances: ", wlanConfigurationInstances)
payload = cwmp.GetParameterMultiValues(parameters_to_get_values)
parameterValuesResp, err := cwmpInteraction[cwmp.GetParameterValuesResponse](sn, payload, w, a.nc)
_, parameterValuesResp, err := cwmpInteraction[cwmp.GetParameterValuesResponse](sn, []byte(payload), w, a.nc)
if err != nil {
return
}
@ -369,7 +368,7 @@ func (a *Api) deviceWifi(w http.ResponseWriter, r *http.Request) {
payload := cwmp.SetParameterMultiValues(fmtBody)
setParameterValuesResp, err := cwmpInteraction[cwmp.SetParameterValuesResponse](sn, payload, w, a.nc)
_, setParameterValuesResp, err := cwmpInteraction[cwmp.SetParameterValuesResponse](sn, []byte(payload), w, a.nc)
if err != nil {
return
}