package main
import (
- "gerrit.o-ran-sc.org/r/ric-plt/xapp-frame/pkg/xapp"
+ "encoding/hex"
+ "errors"
submgr "gerrit.o-ran-sc.org/r/ric-plt/submgr/pkg/control"
+ "gerrit.o-ran-sc.org/r/ric-plt/xapp-frame/pkg/xapp"
+ "github.com/spf13/viper"
"time"
"os"
)
type Rco struct {
+ submgr.E2ap
+}
+
+var c chan submgr.RmrDatagram = make(chan submgr.RmrDatagram, 1)
+
+var RAWDATA string
+var SEEDSN uint16
+
+func init() {
+ viper.AutomaticEnv()
+ viper.SetEnvPrefix("rco")
+ viper.AllowEmptyEnv(true)
+ RAWDATA = viper.GetString("rawdata")
+ if RAWDATA == "" {
+ RAWDATA = "000003ea7e000500aaaaccccea6300020000ea81000e00045465737400ea6b0003000100"
+ }
+ xapp.Logger.Info("Initial RAW DATA: %v", RAWDATA)
+ SEEDSN = uint16(viper.GetInt("seed_sn"))
+ if SEEDSN == 0 || SEEDSN > 65535 {
+ SEEDSN = 12345
+ }
+ xapp.Logger.Info("Initial SEQUENCE NUMBER: %v", SEEDSN)
}
-var c chan submgr.RmrDatagram = make(chan submgr.RmrDatagram, 1)
+func (r *Rco) GeneratePayload(sub_id uint16) (payload []byte, err error) {
+ skeleton, err := hex.DecodeString(RAWDATA)
+ if err != nil {
+ return make([]byte, 0), errors.New("Unable to decode data provided in RCO_RAWDATA environment variable")
+ }
+ payload, err = r.SetSubscriptionRequestSequenceNumber(skeleton, sub_id)
+ return
+}
-func (m Rco) Consume(mtype, sub_id int, len int, payload []byte) (err error) {
+func (r Rco) Consume(mtype, sub_id int, len int, payload []byte) (err error) {
+ payload_seq_num, err := r.GetSubscriptionResponseSequenceNumber(payload)
+ if err != nil {
+ xapp.Logger.Error("Unable to get Subscription Sequence Number from Payload due to: " + err.Error())
+ }
+ xapp.Logger.Info("Message Received: RMR SUBSCRIPTION_ID: %v | PAYLOAD SEQUENCE_NUMBER: %v", sub_id, payload_seq_num)
return
}
-func (r *Rco) send(datagram submgr.RmrDatagram) {
- xapp.Rmr.Send(datagram.MessageType, datagram.SubscriptionId, len(datagram.Payload), datagram.Payload)
+func (r *Rco) SendSubscriptionRequests() (err error) {
+ message, err := r.GeneratePayload(SEEDSN)
+ if err != nil {
+ xapp.Logger.Debug(err.Error())
+ return
+ }
+ for {
+ time.Sleep(2 * time.Second)
+ c <- submgr.RmrDatagram{12010, SEEDSN, message}
+ }
+ return
}
func (r *Rco) Run() {
for {
- message := <- c
- xapp.Logger.Info("RCO Message - Type=%v SubID=%v", message.MessageType, message.SubscriptionId)
- r.send(message)
+ message := <-c
+ payload_seq_num, err := r.GetSubscriptionRequestSequenceNumber(message.Payload)
+ if err != nil {
+ xapp.Logger.Debug("Unable to get Subscription Sequence Number from Payload due to: " + err.Error())
+ }
+ xapp.Logger.Info("Sending Message: TYPE: %v | RMR SUBSCRIPTION_ID: %v | PAYLOAD SEQUENCE_NUMBER: %v)", message.MessageType, message.SubscriptionId, payload_seq_num)
+ xapp.Rmr.Send(message.MessageType, int(message.SubscriptionId), len(message.Payload), message.Payload)
+ }
+}
+
+func (r *Rco) sendInvalidTestMessages(){
+ for {
+ time.Sleep(7 * time.Second)
+ c <- submgr.RmrDatagram{10000, 0, make([]byte, 1)}
+ time.Sleep(7 * time.Second)
+ c <- submgr.RmrDatagram{12010, 0, make([]byte, 1)}
}
}
rco := Rco{}
go xapp.Rmr.Start(rco)
go rco.Run()
- asn1 := submgr.Asn1{}
- message, err := asn1.Encode(submgr.RmrPayload{8, 1111, "RCO: Subscription Request"})
+ go rco.sendInvalidTestMessages()
+ err := rco.SendSubscriptionRequests()
if err != nil {
- xapp.Logger.Debug(err.Error())
os.Exit(1)
}
- doSubscribe := true
- for {
- time.Sleep(2 * time.Second)
- if doSubscribe {
- c <- submgr.RmrDatagram{12010, 9999, message}
- doSubscribe = false
- } else {
- c <- submgr.RmrDatagram{10000, 9999, make([]byte,0)}
- doSubscribe = true
- }
- }
-}
\ No newline at end of file
+}