fix(cwmp): device msg answer to already timed out request
This commit is contained in:
parent
8d1ce2529b
commit
5158fd345c
|
|
@ -1,7 +1,6 @@
|
|||
package handler
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"encoding/xml"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
|
|
@ -92,6 +91,7 @@ func (h *Handler) CwmpHandler(w http.ResponseWriter, r *http.Request) {
|
|||
http.SetCookie(w, &cookie)
|
||||
//data, _ := xml.Marshal(cwmp.InformResponse(envelope.Header.Id))
|
||||
fmt.Fprintf(w, cwmp.InformResponse(envelope.Header.Id))
|
||||
|
||||
} else if messageType == "TransferComplete" {
|
||||
|
||||
} else if messageType == "GetRPC" {
|
||||
|
|
@ -103,34 +103,27 @@ func (h *Handler) CwmpHandler(w http.ResponseWriter, r *http.Request) {
|
|||
}
|
||||
|
||||
if cpe.Waiting != nil {
|
||||
|
||||
log.Println("CPE was waiting for a response, now received something")
|
||||
|
||||
var e cwmp.SoapEnvelope
|
||||
xml.Unmarshal([]byte(body), &e)
|
||||
log.Println("Kind of envelope: ", e.KindOf())
|
||||
|
||||
if e.KindOf() == "GetParameterNamesResponse" {
|
||||
// var envelope cwmp.GetParameterNamesResponse
|
||||
// xml.Unmarshal([]byte(body), &envelope)
|
||||
|
||||
// msg := new(NatsSendMessage)
|
||||
// msg.MsgType = "GetParameterNamesResponse"
|
||||
// msg.Data, _ = json.Marshal(envelope)
|
||||
log.Println("Receive GetParameterNamesResponse from CPE:", cpe.SerialNumber)
|
||||
cpe.Waiting.Callback <- tmp
|
||||
|
||||
msgAnswer(cpe.Waiting.Callback, cpe.Waiting.Time, h.acsConfig.DeviceAnswerTimeout, tmp)
|
||||
} else if e.KindOf() == "GetParameterValuesResponse" {
|
||||
var envelope cwmp.GetParameterValuesResponse
|
||||
xml.Unmarshal([]byte(body), &envelope)
|
||||
|
||||
msg := new(NatsSendMessage)
|
||||
msg.MsgType = "GetParameterValuesResponse"
|
||||
msg.Data, _ = json.Marshal(envelope)
|
||||
|
||||
cpe.Waiting.Callback <- tmp
|
||||
|
||||
log.Println("Receive GetParameterValuesResponse from CPE:", cpe.SerialNumber)
|
||||
msgAnswer(cpe.Waiting.Callback, cpe.Waiting.Time, h.acsConfig.DeviceAnswerTimeout, tmp)
|
||||
} else if e.KindOf() == "Fault" {
|
||||
log.Println("Receive FaultResponse from CPE:", cpe.SerialNumber)
|
||||
msgAnswer(cpe.Waiting.Callback, cpe.Waiting.Time, h.acsConfig.DeviceAnswerTimeout, tmp)
|
||||
log.Println(body)
|
||||
} else {
|
||||
log.Println("Unknown message type")
|
||||
cpe.Waiting.Callback <- tmp
|
||||
log.Println("Envelope:", e)
|
||||
msgAnswer(cpe.Waiting.Callback, cpe.Waiting.Time, h.acsConfig.DeviceAnswerTimeout, tmp)
|
||||
}
|
||||
cpe.Waiting = nil
|
||||
} else {
|
||||
|
|
@ -151,6 +144,7 @@ func (h *Handler) CwmpHandler(w http.ResponseWriter, r *http.Request) {
|
|||
}
|
||||
}
|
||||
h.Cpes[cpe.SerialNumber] = cpe
|
||||
log.Println("---End of CWMP Handler---")
|
||||
}
|
||||
|
||||
func (h *Handler) ConnectionRequest(cpe CPE) error {
|
||||
|
|
@ -167,3 +161,16 @@ func (h *Handler) ConnectionRequest(cpe CPE) error {
|
|||
log.Println("<-- Successfully authenticated to CPE", cpe.SerialNumber)
|
||||
return err
|
||||
}
|
||||
|
||||
func msgAnswer(
|
||||
callback chan []byte,
|
||||
timeMsgWasSent time.Time,
|
||||
timeOut time.Duration,
|
||||
msgAnswer []byte,
|
||||
) {
|
||||
if time.Since(timeMsgWasSent) > timeOut {
|
||||
log.Println("CPE took too long to answer the request, the message will be discarded")
|
||||
} else {
|
||||
callback <- msgAnswer
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -16,6 +16,7 @@ type Request struct {
|
|||
User string
|
||||
Password string
|
||||
CwmpMsg []byte
|
||||
Time time.Time
|
||||
Callback chan []byte
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user