Commit 9297d3a0 authored by Ikram Haq's avatar Ikram Haq
Browse files

Remove unnecessary code of Periodic subscription

parent e0f3be87
Loading
Loading
Loading
Loading
+0 −20
Original line number Diff line number Diff line
@@ -83,26 +83,6 @@ func Mec011AppTerminationPOST(w http.ResponseWriter, r *http.Request) {
	mec011AppTerminationPost(w, r)
}

func PeriodicSubDELETE(w http.ResponseWriter, r *http.Request) {
	periodicSubDelete(w, r)
}

func PeriodicSubGET(w http.ResponseWriter, r *http.Request) {
	periodicSubGet(w, r)
}

func PeriodicSubListGET(w http.ResponseWriter, r *http.Request) {
	periodicSubListGet(w, r)
}

func PeriodicSubPOST(w http.ResponseWriter, r *http.Request) {
	periodicSubPost(w, r)
}

func PeriodicSubPUT(w http.ResponseWriter, r *http.Request) {
	periodicSubPut(w, r)
}

func UserTrackingSubDELETE(w http.ResponseWriter, r *http.Request) {
	userTrackingSubDelete(w, r)
}
+0 −11
Original line number Diff line number Diff line
@@ -241,17 +241,6 @@ func convertPeriodicSubscriptionToJson1(periodicSubs *UserLocationPeriodicSubscr
	return string(jsonInfo)
}

func convertPeriodicSubscriptionToJson(periodicSubs *PeriodicNotificationSubscription) string {

	jsonInfo, err := json.Marshal(*periodicSubs)
	if err != nil {
		log.Error(err.Error())
		return ""
	}

	return string(jsonInfo)
}

/*
func convertJsonToPeriodicSubscription(jsonInfo string) *PeriodicNotificationSubscription {

+11 −433
Original line number Diff line number Diff line
@@ -111,7 +111,6 @@ var distanceSubscriptionMap = map[int]*DistanceCheck{}
var distanceSubscriptionMap1 = map[int]*DistanceCheck_{}
var periodicTicker *time.Ticker
var areaCircleSubscriptionMap = map[int]*AreaCircleCheck{}
var periodicSubscriptionMap = map[int]*PeriodicCheck{}
var periodicSubscriptionMap1 = map[int]*PeriodicCheck1{}
var addressConnectedMap = map[string]bool{}

@@ -158,11 +157,6 @@ type AreaCircleCheck struct {
	Subscription           *UserAreaSubscription
}

type PeriodicCheck struct {
	NextTts      int32 //next time to send, derived from frequency
	Subscription *PeriodicNotificationSubscription
}

type EventCheck struct {
	TimeStamp    int64
	Subscription *UserLocationEventSubscription
@@ -342,7 +336,7 @@ func Init() (err error) {
	zoneStatusReInit()
	distanceReInit()
	areaCircleReInit()
	periodicReInit()
	userlocationperiodicReInit()

	// Initialize SBI
	sbiCfg := sbi.SbiCfg{
@@ -410,7 +404,6 @@ func Run() (err error) {
		for range periodicTicker.C {
			checkNotificationDistancePeriodicTrigger()
			updateNotificationAreaCirclePeriodicTrigger()
			checkNotificationPeriodicTrigger()
			checkNotificationPeriodicTrigger1()
			checkNotificationDistancePeriodicTrigger1()
		}
@@ -1617,70 +1610,6 @@ func sendNotification(subsId int, periodicCheck *PeriodicCheck1) {
// 	}
// }

func checkNotificationPeriodicTrigger() {

	//only check if there is at least one subscription
	mutex.Lock()
	defer mutex.Unlock()

	//check all that applies
	for subsId, periodicCheck := range periodicSubscriptionMap {
		if periodicCheck != nil && periodicCheck.Subscription != nil {
			//decrement the next time to send a message
			periodicCheck.NextTts--
			if periodicCheck.NextTts > 0 {
				continue
			} else { //restart the nextTts and continue processing to send notification or not
				periodicCheck.NextTts = periodicCheck.Subscription.Frequency
			}

			//loop through every reference address
			var terminalLocationList []TerminalLocation
			var periodicNotif SubscriptionNotification

			for _, addr := range periodicCheck.Subscription.Address {

				if !addressConnectedMap[addr] {
					continue
				}

				geoDataInfo, _, err := gisAppClient.GeospatialDataApi.GetGeoDataByName(context.TODO(), addr, nil)
				if err != nil {
					log.Error("Failed to communicate with gis engine: ", err)
					return
				}

				var terminalLocation TerminalLocation
				terminalLocation.Address = addr
				var locationInfo LocationInfo
				locationInfo.Latitude = nil
				locationInfo.Latitude = append(locationInfo.Latitude, geoDataInfo.Location.Coordinates[1])
				locationInfo.Longitude = nil
				locationInfo.Longitude = append(locationInfo.Longitude, geoDataInfo.Location.Coordinates[0])
				locationInfo.Shape = 2
				seconds := time.Now().Unix()
				var timestamp TimeStamp
				timestamp.Seconds = int32(seconds)
				locationInfo.Timestamp = &timestamp
				terminalLocation.CurrentLocation = &locationInfo
				retrievalStatus := RETRIEVED_RetrievalStatus
				terminalLocation.LocationRetrievalStatus = &retrievalStatus
				terminalLocationList = append(terminalLocationList, terminalLocation)
			}

			periodicNotif.IsFinalNotification = false
			periodicNotif.Link = periodicCheck.Subscription.Link
			subsIdStr := strconv.Itoa(subsId)
			periodicNotif.CallbackData = periodicCheck.Subscription.CallbackReference.CallbackData
			periodicNotif.TerminalLocation = terminalLocationList
			var inlinePeriodicSubscriptionNotification InlineSubscriptionNotification
			inlinePeriodicSubscriptionNotification.SubscriptionNotification = &periodicNotif
			sendSubscriptionNotification(periodicCheck.Subscription.CallbackReference.NotifyURL, inlinePeriodicSubscriptionNotification)
			log.Info("Periodic Notification"+"("+subsIdStr+") For ", periodicCheck.Subscription.Address)
		}
	}
}

func deregisterDistance(subsIdStr string) {
	subsId, err := strconv.Atoi(subsIdStr)
	if err != nil {
@@ -1780,7 +1709,6 @@ func deregisterPeriodic(subsIdStr string) {

	mutex.Lock()
	defer mutex.Unlock()
	periodicSubscriptionMap[subsId] = nil
	periodicSubscriptionMap1[subsId] = nil
}

@@ -1805,21 +1733,6 @@ func registerPeriodic1(periodicSub *UserLocationPeriodicSubscription, subsIdStr
	periodicSubscriptionMap1[subsId] = &periodicCheck
}

func registerPeriodic(periodicSub *PeriodicNotificationSubscription, subsIdStr string) {

	subsId, err := strconv.Atoi(subsIdStr)
	if err != nil {
		log.Error(err)
	}

	mutex.Lock()
	defer mutex.Unlock()
	var periodicCheck PeriodicCheck
	periodicCheck.Subscription = periodicSub
	periodicCheck.NextTts = periodicSub.Frequency
	periodicSubscriptionMap[subsId] = &periodicCheck
}

// func checkNotificationRegisteredZoneStatus1(zoneId string, apId string, nbUsersInAP int32, nbUsersInZone int32, previousNbUsersInAP int32, previousNbUsersInZone int32) {
// 	mutex.Lock()
// 	defer mutex.Unlock()
@@ -3664,53 +3577,6 @@ func populateUserAreaList(key string, jsonInfo string, userData interface{}) err
	return nil
}

func periodicSubDelete(w http.ResponseWriter, r *http.Request) {
	w.Header().Set("Content-Type", "application/json; charset=UTF-8")
	vars := mux.Vars(r)

	present, _ := rc.JSONGetEntry(baseKey+typePeriodicSubscription+":"+vars["subscriptionId"], ".")
	if present == "" {
		w.WriteHeader(http.StatusNotFound)
		return
	}

	err := rc.JSONDelEntry(baseKey+typePeriodicSubscription+":"+vars["subscriptionId"], ".")
	if err != nil {
		errHandlerProblemDetails(w, err.Error(), http.StatusInternalServerError)
		return
	}

	deregisterPeriodic(vars["subscriptionId"])
	w.WriteHeader(http.StatusNoContent)
}

func periodicSubListGet(w http.ResponseWriter, r *http.Request) {
	w.Header().Set("Content-Type", "application/json; charset=UTF-8")

	var response InlineNotificationSubscriptionList
	var periodicSubList NotificationSubscriptionList
	periodicSubList.ResourceURL = &LinkType{}
	periodicSubList.ResourceURL.Href = hostUrl.String() + basePath + "subscriptions/periodic"
	response.NotificationSubscriptionList = &periodicSubList

	keyName := baseKey + typePeriodicSubscription + "*"
	err := rc.ForEachJSONEntry(keyName, populatePeriodicList, &periodicSubList)
	if err != nil {
		log.Error(err.Error())
		errHandlerProblemDetails(w, err.Error(), http.StatusInternalServerError)
		return
	}

	jsonResponse, err := json.Marshal(response)
	if err != nil {
		log.Error(err.Error())
		errHandlerProblemDetails(w, err.Error(), http.StatusInternalServerError)
		return
	}
	w.WriteHeader(http.StatusOK)
	fmt.Fprint(w, string(jsonResponse))
}

func userSubListGET(w http.ResponseWriter, r *http.Request) {
	w.Header().Set("Content-Type", "application/json; charset=UTF-8")

@@ -3794,220 +3660,6 @@ func userSubListGET(w http.ResponseWriter, r *http.Request) {
	w.Write(jsonResponse)
}

func periodicSubGet(w http.ResponseWriter, r *http.Request) {
	w.Header().Set("Content-Type", "application/json; charset=UTF-8")
	vars := mux.Vars(r)

	var response InlinePeriodicNotificationSubscription
	var periodicSub PeriodicNotificationSubscription
	response.PeriodicNotificationSubscription = &periodicSub
	jsonPeriodicSub, _ := rc.JSONGetEntry(baseKey+typePeriodicSubscription+":"+vars["subscriptionId"], ".")
	if jsonPeriodicSub == "" {
		w.WriteHeader(http.StatusNotFound)
		return
	}

	err := json.Unmarshal([]byte(jsonPeriodicSub), &periodicSub)
	if err != nil {
		log.Error(err.Error())
		errHandlerProblemDetails(w, err.Error(), http.StatusInternalServerError)
		return
	}

	jsonResponse, err := json.Marshal(response)
	if err != nil {
		log.Error(err.Error())
		errHandlerProblemDetails(w, err.Error(), http.StatusInternalServerError)
		return
	}
	w.WriteHeader(http.StatusOK)
	fmt.Fprint(w, string(jsonResponse))
}

// func periodicSubPost(w http.ResponseWriter, r *http.Request) {
// 	w.Header().Set("Content-Type", "application/json; charset=UTF-8")
// 	var response InlinePeriodicNotificationSubscription

// 	var body InlinePeriodicNotificationSubscription
// 	decoder := json.NewDecoder(r.Body)
// 	err := decoder.Decode(&body)
// 	if err != nil {
// 		log.Error(err.Error())
// 		errHandlerProblemDetails(w, err.Error(), http.StatusInternalServerError)
// 		return
// 	}
// 	periodicSub := body.PeriodicNotificationSubscription

// 	if periodicSub == nil {
// 		log.Error("Body not present")
// 		errHandlerProblemDetails(w, "Body not present", http.StatusBadRequest)
// 		return
// 	}

// 	//checking for mandatory properties
// 	if periodicSub.CallbackReference == nil || periodicSub.CallbackReference.NotifyURL == "" {
// 		log.Error("Mandatory CallbackReference parameter not present")
// 		errHandlerProblemDetails(w, "Mandatory CallbackReference parameter not present", http.StatusBadRequest)
// 		return
// 	}
// 	if periodicSub.Address == nil {
// 		log.Error("Mandatory Address parameter not present")
// 		errHandlerProblemDetails(w, "Mandatory Address parameter not present", http.StatusBadRequest)
// 		return
// 	}

// 	if periodicSub.Frequency <= 0 {
// 		log.Error("Mandatory Frequency parameter missing or Frequency value should be 1 or above")
// 		errHandlerProblemDetails(w, "Mandatory Frequency parameter missing or Frequency value should be 1 or above", http.StatusBadRequest)
// 		return
// 	}
// 	/*	if periodicSub.RequestedAccuracy == 0 {
// 			log.Error("Mandatory RequestedAccuracy parameter not present")
// 			errHandlerProblemDetails(w, "Mandatory RequestedAccuracy parameter not present", http.StatusBadRequest)
// 			return
// 		}
// 	*/
// 	newSubsId := nextPeriodicSubscriptionIdAvailable
// 	nextPeriodicSubscriptionIdAvailable++
// 	subsIdStr := strconv.Itoa(newSubsId)
// 	/*
// 		if periodicSub.Duration > 0 {
// 			//TODO start a timer mecanism and expire subscription
// 		}
// 		//else, lasts forever or until subscription is deleted
// 	*/
// 	if periodicSub.Duration != 0 {
// 		//TODO start a timer mecanism and expire subscription
// 		log.Info("Non zero duration")
// 	}
// 	//else, lasts forever or until subscription is deleted

// 	periodicSub.ResourceURL = hostUrl.String() + basePath + "subscriptions/periodic/" + subsIdStr

// 	_ = rc.JSONSetEntry(baseKey+typePeriodicSubscription+":"+subsIdStr, ".", convertPeriodicSubscriptionToJson(periodicSub))

// 	registerPeriodic(periodicSub, subsIdStr)

// 	response.PeriodicNotificationSubscription = periodicSub

// 	jsonResponse, err := json.Marshal(response)
// 	if err != nil {
// 		log.Error(err.Error())
// 		errHandlerProblemDetails(w, err.Error(), http.StatusInternalServerError)
// 		return
// 	}
// 	w.WriteHeader(http.StatusCreated)
// 	fmt.Fprint(w, string(jsonResponse))
// }

func periodicSubPut(w http.ResponseWriter, r *http.Request) {
	w.Header().Set("Content-Type", "application/json; charset=UTF-8")
	vars := mux.Vars(r)

	var response InlinePeriodicNotificationSubscription

	var body InlinePeriodicNotificationSubscription
	decoder := json.NewDecoder(r.Body)
	err := decoder.Decode(&body)
	if err != nil {
		log.Error(err.Error())
		errHandlerProblemDetails(w, err.Error(), http.StatusInternalServerError)
		return
	}
	periodicSub := body.PeriodicNotificationSubscription

	if periodicSub == nil {
		log.Error("Body not present")
		errHandlerProblemDetails(w, "Body not present", http.StatusBadRequest)
		return
	}

	//checking for mandatory properties
	if periodicSub.CallbackReference == nil || periodicSub.CallbackReference.NotifyURL == "" {
		log.Error("Mandatory CallbackReference parameter not present")
		errHandlerProblemDetails(w, "Mandatory CallbackReference parameter not present", http.StatusBadRequest)
		return
	}
	if periodicSub.Address == nil {
		log.Error("Mandatory Address parameter not present")
		errHandlerProblemDetails(w, "Mandatory Address parameter not present", http.StatusBadRequest)
		return
	}

	if periodicSub.Frequency == 0 {
		log.Error("Mandatory Frequency parameter not present")
		errHandlerProblemDetails(w, "Mandatory Frequency parameter not present", http.StatusBadRequest)
		return
	}
	/*      if periodicSub.RequestedAccuracy == 0 {
			   log.Error("Mandatory RequestedAccuracy parameter not present")
			   errHandlerProblemDetails(w, "Mandatory RequestedAccuracy parameter not present", http.StatusBadRequest)
			   return
	   }
	*/
	if periodicSub.ResourceURL == "" {
		log.Error("Mandatory ResourceURL parameter not present")
		errHandlerProblemDetails(w, "Mandatory ResourceURL parameter not present", http.StatusBadRequest)
		return
	}

	subsIdParamStr := vars["subscriptionId"]

	selfUrl := strings.Split(periodicSub.ResourceURL, "/")
	subsIdStr := selfUrl[len(selfUrl)-1]

	//body content not matching parameters
	if subsIdStr != subsIdParamStr {
		log.Error("SubscriptionId in endpoint and in body not matching")
		errHandlerProblemDetails(w, "SubscriptionId in endpoint and in body not matching", http.StatusBadRequest)
		return
	}

	periodicSub.ResourceURL = hostUrl.String() + basePath + "subscriptions/periodic/" + subsIdStr

	subsId, err := strconv.Atoi(subsIdStr)
	if err != nil {
		log.Error(err)
		w.WriteHeader(http.StatusBadRequest)
		return
	}

	if periodicSubscriptionMap[subsId] == nil {
		w.WriteHeader(http.StatusNotFound)
		return
	}

	_ = rc.JSONSetEntry(baseKey+typePeriodicSubscription+":"+subsIdStr, ".", convertPeriodicSubscriptionToJson(periodicSub))

	deregisterPeriodic(subsIdStr)
	registerPeriodic(periodicSub, subsIdStr)

	response.PeriodicNotificationSubscription = periodicSub

	jsonResponse, err := json.Marshal(response)
	if err != nil {
		log.Error(err.Error())
		errHandlerProblemDetails(w, err.Error(), http.StatusInternalServerError)
		return
	}
	w.WriteHeader(http.StatusOK)
	fmt.Fprint(w, string(jsonResponse))
}

func populatePeriodicList(key string, jsonInfo string, userData interface{}) error {

	periodicList := userData.(*NotificationSubscriptionList)
	var periodicInfo PeriodicNotificationSubscription

	// Format response
	err := json.Unmarshal([]byte(jsonInfo), &periodicInfo)
	if err != nil {
		return err
	}
	periodicList.PeriodicNotificationSubscription = append(periodicList.PeriodicNotificationSubscription, periodicInfo)
	return nil
}

func userSubDELETE(w http.ResponseWriter, r *http.Request) {
	w.Header().Set("Content-Type", "application/json; charset=UTF-8")
	vars := mux.Vars(r)
@@ -4166,82 +3818,6 @@ func userTrackingSubGet(w http.ResponseWriter, r *http.Request) {
	fmt.Fprint(w, string(jsonResponse))
}

func periodicSubPost(w http.ResponseWriter, r *http.Request) {
	w.Header().Set("Content-Type", "application/json; charset=UTF-8")
	var response InlinePeriodicNotificationSubscription

	var body InlinePeriodicNotificationSubscription
	decoder := json.NewDecoder(r.Body)
	err := decoder.Decode(&body)
	if err != nil {
		log.Error(err.Error())
		errHandlerProblemDetails(w, err.Error(), http.StatusInternalServerError)
		return
	}
	periodicSub := body.PeriodicNotificationSubscription

	if periodicSub == nil {
		log.Error("Body not present")
		errHandlerProblemDetails(w, "Body not present", http.StatusBadRequest)
		return
	}

	//checking for mandatory properties
	if periodicSub.CallbackReference == nil || periodicSub.CallbackReference.NotifyURL == "" {
		log.Error("Mandatory CallbackReference parameter not present")
		errHandlerProblemDetails(w, "Mandatory CallbackReference parameter not present", http.StatusBadRequest)
		return
	}
	if periodicSub.Address == nil {
		log.Error("Mandatory Address parameter not present")
		errHandlerProblemDetails(w, "Mandatory Address parameter not present", http.StatusBadRequest)
		return
	}

	if periodicSub.Frequency <= 0 {
		log.Error("Mandatory Frequency parameter missing or Frequency value should be 1 or above")
		errHandlerProblemDetails(w, "Mandatory Frequency parameter missing or Frequency value should be 1 or above", http.StatusBadRequest)
		return
	}
	/*	if periodicSub.RequestedAccuracy == 0 {
			   log.Error("Mandatory RequestedAccuracy parameter not present")
			   errHandlerProblemDetails(w, "Mandatory RequestedAccuracy parameter not present", http.StatusBadRequest)
			   return
		   }
	*/
	newSubsId := nextPeriodicSubscriptionIdAvailable
	nextPeriodicSubscriptionIdAvailable++
	subsIdStr := strconv.Itoa(newSubsId)
	/*
		   if periodicSub.Duration > 0 {
			   //TODO start a timer mecanism and expire subscription
		   }
		   //else, lasts forever or until subscription is deleted
	*/
	if periodicSub.Duration != 0 {
		//TODO start a timer mecanism and expire subscription
		log.Info("Non zero duration")
	}
	//else, lasts forever or until subscription is deleted

	periodicSub.ResourceURL = hostUrl.String() + basePath + "subscriptions/periodic/" + subsIdStr

	_ = rc.JSONSetEntry(baseKey+typePeriodicSubscription+":"+subsIdStr, ".", convertPeriodicSubscriptionToJson(periodicSub))

	registerPeriodic(periodicSub, subsIdStr)

	response.PeriodicNotificationSubscription = periodicSub

	jsonResponse, err := json.Marshal(response)
	if err != nil {
		log.Error(err.Error())
		errHandlerProblemDetails(w, err.Error(), http.StatusInternalServerError)
		return
	}
	w.WriteHeader(http.StatusCreated)
	fmt.Fprint(w, string(jsonResponse))
}

func userSubPOST(w http.ResponseWriter, r *http.Request) {
	// Decode the request body into a slice of maps
	var requestBody []map[string]interface{}
@@ -5919,7 +5495,7 @@ func cleanUp() {
	zoneStatusSubscriptionMap = map[int]*ZoneStatusCheck{}
	distanceSubscriptionMap = map[int]*DistanceCheck{}
	areaCircleSubscriptionMap = map[int]*AreaCircleCheck{}
	periodicSubscriptionMap = map[int]*PeriodicCheck{}
	periodicSubscriptionMap1 = map[int]*PeriodicCheck1{}

	addressConnectedMap = map[string]bool{}

@@ -6302,18 +5878,20 @@ func areaCircleReInit() {
	nextAreaCircleSubscriptionIdAvailable = maxAreaCircleSubscriptionId + 1
}

func periodicReInit() {
func userlocationperiodicReInit() {
	//reusing the object response for the get multiple zonalSubscription
	var periodicList NotificationSubscriptionList

	keyName := baseKey + typePeriodicSubscription + "*"
	_ = rc.ForEachJSONEntry(keyName, populatePeriodicList, &periodicList)
	_ = rc.ForEachJSONEntry(keyName, func(key string, jsonInfo string, userData interface{}) error {
		return populateUserSubList1([]byte(jsonInfo), "", userData.(*[]Subscription))
	}, &periodicList)

	maxPeriodicSubscriptionId := 0
	mutex.Lock()
	defer mutex.Unlock()
	for _, periodicSub := range periodicList.PeriodicNotificationSubscription {
		resourceUrl := strings.Split(periodicSub.ResourceURL, "/")
	for _, periodicSub := range periodicList.UserLocationPeriodicSubscription {
		resourceUrl := strings.Split(periodicSub.Links.Self.Href, "/")
		subscriptionId, err := strconv.Atoi(resourceUrl[len(resourceUrl)-1])
		if err != nil {
			log.Error(err)
@@ -6321,10 +5899,10 @@ func periodicReInit() {
			if subscriptionId > maxPeriodicSubscriptionId {
				maxPeriodicSubscriptionId = subscriptionId
			}
			var periodicCheck PeriodicCheck
			var periodicCheck PeriodicCheck1
			periodicCheck.Subscription = &periodicSub
			periodicCheck.NextTts = periodicSub.Frequency
			periodicSubscriptionMap[subscriptionId] = &periodicCheck
			// periodicCheck.NextTts = periodicSub.Frequency
			periodicSubscriptionMap1[subscriptionId] = &periodicCheck

		}
	}
+0 −28
Original line number Diff line number Diff line
/*
 * Copyright (c) 2022  The AdvantEDGE Authors
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *    http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 * AdvantEDGE Location API
 *
 * Location Service is AdvantEDGE's implementation of [ETSI MEC ISG MEC013 Location API](https://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/02.02.01_60/gs_mec013v020201p.pdf) <p>The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence <p>[Copyright (c) ETSI 2017](https://forge.etsi.org/etsi-forge-copyright-notice.txt) <p>**Micro-service**<br>[meep-loc-serv](https://github.com/InterDigitalInc/AdvantEDGE/tree/master/go-apps/meep-loc-serv) <p>**Type & Usage**<br>Edge Service used by edge applications that want to get information about Users (UE) and Zone locations <p>**Note**<br>AdvantEDGE supports all of Location API endpoints (see below).
 *
 * API version: 2.2.1
 * Contact: AdvantEDGE@InterDigital.com
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */
package server

type InlinePeriodicNotificationSubscription struct {
	PeriodicNotificationSubscription *PeriodicNotificationSubscription `json:"periodicNotificationSubscription,omitempty"`
}
+0 −4
Original line number Diff line number Diff line
@@ -37,10 +37,6 @@ type NotificationSubscriptionList struct {
	UserAreaSubscription []UserAreaSubscription `json:"userAreaSubscription,omitempty"`
	// Collection of DistanceNotificationSubscription elements, see note 2.
	DistanceNotificationSubscription []DistanceNotificationSubscription `json:"distanceNotificationSubscription,omitempty"`
	// Collection of PeriodicNotificationSubscription elements, see note 2.
	PeriodicNotificationSubscription []PeriodicNotificationSubscription `json:"periodicNotificationSubscription,omitempty"`
	// Self-referring URL, see note 1.
	// ResourceURL string `json:"resourceURL"`
	// Collection of UserTrackingSubscription elements, see note 1.
	UserTrackingSubscription []UserTrackingSubscription `json:"userTrackingSubscription,omitempty"`
	// Collection of ZonalTrafficSubscription elements, see note 1.
Loading