func NewE2SetupSuccessResponseMessage(plmnId string, ricId string, request *E2SetupRequestMessage) E2SetupResponseMessage {
outcome := SuccessfulOutcome{}
- outcome.Value.E2setupResponse.ProtocolIEs.E2setupResponseIEs = make([]E2setupResponseIEs, 2)
outcome.ProcedureCode = "1"
+
+ e2SetupRequestIes := request.E2APPDU.InitiatingMessage.Value.E2setupRequest.ProtocolIEs.E2setupRequestIEs
+
+ outcome.Value.E2setupResponse.ProtocolIEs.E2setupResponseIEs = make([]E2setupResponseIEs, len(e2SetupRequestIes))
outcome.Value.E2setupResponse.ProtocolIEs.E2setupResponseIEs[0].ID = "4"
outcome.Value.E2setupResponse.ProtocolIEs.E2setupResponseIEs[0].Value = GlobalRICID{GlobalRICID: struct {
Text string `xml:",chardata"`
PLMNIdentity string `xml:"pLMN-Identity"`
RicID string `xml:"ric-ID"`
}{PLMNIdentity: plmnId, RicID: ricId}}
+
+ if len(e2SetupRequestIes) < 2 {
+ return E2SetupResponseMessage{E2APPDU: E2APPDU{Outcome: outcome}}
+ }
+
outcome.Value.E2setupResponse.ProtocolIEs.E2setupResponseIEs[1].ID = "9"
outcome.Value.E2setupResponse.ProtocolIEs.E2setupResponseIEs[1].Value = RANfunctionsIDList{RANfunctionsIDList: struct {
Text string `xml:",chardata"`
return E2SetupResponseMessage{E2APPDU: E2APPDU{Outcome: outcome}}
}
-func NewE2SetupFailureResponseMessage(timeToWait TimeToWait) E2SetupResponseMessage {
+func NewE2SetupFailureResponseMessage(timeToWait TimeToWait, cause Cause) E2SetupResponseMessage {
outcome := UnsuccessfulOutcome{}
outcome.Value.E2setupFailure.ProtocolIEs.E2setupFailureIEs = make([]E2setupFailureIEs, 2)
outcome.ProcedureCode = "1"
outcome.Value.E2setupFailure.ProtocolIEs.E2setupFailureIEs[0].ID = "1"
- outcome.Value.E2setupFailure.ProtocolIEs.E2setupFailureIEs[0].Value.Value = Cause{}
+
+ outcome.Value.E2setupFailure.ProtocolIEs.E2setupFailureIEs[0].Value.Value = cause
outcome.Value.E2setupFailure.ProtocolIEs.E2setupFailureIEs[1].ID = "31"
outcome.Value.E2setupFailure.ProtocolIEs.E2setupFailureIEs[1].Value.Value = timeToWaitMap[timeToWait]
return E2SetupResponseMessage{E2APPDU: E2APPDU{Outcome: outcome}}
Text string `xml:",chardata"`
RANfunctionIDItem struct {
Text string `xml:",chardata"`
- RanFunctionID string `xml:"ranFunctionID"`
- RanFunctionRevision string `xml:"ranFunctionRevision"`
+ RanFunctionID uint32 `xml:"ranFunctionID"`
+ RanFunctionRevision uint32 `xml:"ranFunctionRevision"`
} `xml:"RANfunctionID-Item"`
} `xml:"value"`
}
} `xml:"value"`
}
-type Cause struct {
- XMLName xml.Name `xml:"Cause"`
- Text string `xml:",chardata"`
- Transport struct {
- Text string `xml:",chardata"`
- TransportResourceUnavailable string `xml:"transport-resource-unavailable"`
- } `xml:"transport"`
-}
-
func extractRanFunctionsIDList(request *E2SetupRequestMessage) []ProtocolIESingleContainer {
list := &request.E2APPDU.InitiatingMessage.Value.E2setupRequest.ProtocolIEs.E2setupRequestIEs[1].Value.RANfunctionsList
ids := make([]ProtocolIESingleContainer, len(list.ProtocolIESingleContainer))