+
+func updateSubscription(data *rtmgr.XappList) {
+
+ var subdata models.XappSubscriptionData
+ var id int32
+ var matchingsubid, deletecount uint8
+ id = int32(data.SubscriptionID)
+ subdata.SubscriptionID = &id
+ for _, subs := range rtmgr.Subs {
+ if int32(data.SubscriptionID) == subs.SubID {
+ matchingsubid++
+ }
+ }
+
+ for deletecount < matchingsubid {
+ for _, subs := range rtmgr.Subs {
+ if int32(data.SubscriptionID) == subs.SubID {
+ subdata.SubscriptionID = &subs.SubID
+ subdata.Address = &subs.Fqdn
+ subdata.Port = &subs.Port
+ xapp.Logger.Debug("Deleting Subscription List has %v", subdata)
+ delSubscription(&rtmgr.Subs, &subdata)
+ break
+ }
+ }
+ deletecount++
+ }
+
+ for _, items := range data.FqdnList {
+ subdata.Address = items.Address
+ subdata.Port = items.Port
+ xapp.Logger.Debug("Adding Subscription List has %v", subdata)
+ addSubscription(&rtmgr.Subs, &subdata)
+ }
+
+}
+
+func PopulateSubscription(sub_list xfmodel.SubscriptionList) {
+ for _, sub_row := range sub_list {
+ var subdata models.XappSubscriptionData
+ id := int32(sub_row.SubscriptionID)
+ subdata.SubscriptionID = &id
+ for _, ep := range sub_row.ClientEndpoint {
+ stringSlice := strings.Split(ep, ":")
+ subdata.Address = &stringSlice[0]
+ intportval, _ := strconv.Atoi(stringSlice[1])
+ value := uint16(intportval)
+ subdata.Port = &value
+ xapp.Logger.Debug("Adding Subscription List has Address :%v, port :%v, SubscriptionID :%v ", subdata.Address, subdata.Address, subdata.SubscriptionID)
+ addSubscription(&rtmgr.Subs, &subdata)
+ }
+ }
+}
+
+func Adddelrmrroute(routelist models.Routelist, rtflag bool) error {
+ xapp.Logger.Info("Updating rmr route with Route list: %v,flag: %v", routelist, rtflag)
+ for _, rlist := range routelist {
+ var subid int32
+ var data string
+ if rlist.SubscriptionID == 0 {
+ subid = -1
+ } else {
+ subid = rlist.SubscriptionID
+ }
+ if rlist.SenderEndPoint == "" && rlist.SubscriptionID != 0 {
+ data = fmt.Sprintf("mse|%d|%d|%s\n", *rlist.MessageType, rlist.SubscriptionID, *rlist.TargetEndPoint)
+ } else if rlist.SenderEndPoint == "" && rlist.SubscriptionID == 0 {
+ data = fmt.Sprintf("mse|%d|-1|%s\n", *rlist.MessageType, *rlist.TargetEndPoint)
+ } else {
+ data = fmt.Sprintf("mse|%d,%s|%d|%s\n", *rlist.MessageType, rlist.SenderEndPoint, subid, *rlist.TargetEndPoint)
+ }
+ err := checkrepeatedroute(data)
+
+ if rtflag == true {
+ if err == true {
+ xapp.Logger.Info("Given route %s is a duplicate", data)
+ }
+ rtmgr.DynamicRouteList = append(rtmgr.DynamicRouteList, data)
+ routearray := strings.Join(rtmgr.DynamicRouteList, " ")
+ xapp.SdlStorage.Store(rtmgr.RTMGR_SDL_NS, "routes", routearray)
+ } else {
+ if err == true {
+ xapp.Logger.Info("route %s deleted successfully", data)
+ routearray := strings.Join(rtmgr.DynamicRouteList, " ")
+ xapp.SdlStorage.Store(rtmgr.RTMGR_SDL_NS, "routes", routearray)
+ } else {
+ xapp.Logger.Info("No such route: %s", data)
+ return errors.New("No such route: " + data)
+ }
+
+ }
+ }
+ updateEp()
+ return sendRoutesToAll()
+}
+
+func checkrepeatedroute(data string) bool {
+ for i := 0; i < len(rtmgr.DynamicRouteList); i++ {
+ if rtmgr.DynamicRouteList[i] == data {
+ rtmgr.DynamicRouteList[i] = rtmgr.DynamicRouteList[len(rtmgr.DynamicRouteList)-1]
+ rtmgr.DynamicRouteList[len(rtmgr.DynamicRouteList)-1] = ""
+ rtmgr.DynamicRouteList = rtmgr.DynamicRouteList[:len(rtmgr.DynamicRouteList)-1]
+ return true
+ }
+ }
+ return false
+}