Commit 9ecf6901 authored by Ikram Haq's avatar Ikram Haq
Browse files

Remove unnecessary code of userTrackingSubscription(v2.2.1) and Update the...

Remove unnecessary code  of userTrackingSubscription(v2.2.1) and Update the userLocationEventReInit function
parent cca043da
Loading
Loading
Loading
Loading
+0 −24
Original line number Diff line number Diff line
@@ -83,14 +83,6 @@ func Mec011AppTerminationPOST(w http.ResponseWriter, r *http.Request) {
	mec011AppTerminationPost(w, r)
}

func UserTrackingSubDELETE(w http.ResponseWriter, r *http.Request) {
	userTrackingSubDelete(w, r)
}

func UserTrackingSubGET(w http.ResponseWriter, r *http.Request) {
	userTrackingSubGet(w, r)
}

func UserSubListGET(w http.ResponseWriter, r *http.Request) {
	userSubListGET(w, r)
}
@@ -109,18 +101,6 @@ func UserSubDELETE(w http.ResponseWriter, r *http.Request) {
	userSubDELETE(w, r)
}

func UserTrackingSubListGET(w http.ResponseWriter, r *http.Request) {
	userTrackingSubListGet(w, r)
}

func UserTrackingSubPOST(w http.ResponseWriter, r *http.Request) {
	userTrackingSubPost(w, r)
}

func UserTrackingSubPUT(w http.ResponseWriter, r *http.Request) {
	userTrackingSubPut(w, r)
}

func UsersGET(w http.ResponseWriter, r *http.Request) {
	usersGet(w, r)
}
@@ -133,10 +113,6 @@ func ZonalTrafficSubGET(w http.ResponseWriter, r *http.Request) {
	zonalTrafficSubGet(w, r)
}

// func ZonalTrafficSubListGET(w http.ResponseWriter, r *http.Request) {
// 	zonalTrafficSubListGet(w, r)
// }

func ZoneSubListGET(w http.ResponseWriter, r *http.Request) {
	zoneSubListGET(w, r)
}
+0 −26
Original line number Diff line number Diff line
@@ -189,17 +189,6 @@ func convertUserSubscriptionToJson1(userSubs *UserLocationEventSubscription) str
	return string(jsonInfo)
}

func convertUserSubscriptionToJson(userSubs *UserTrackingSubscription) string {

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

	return string(jsonInfo)
}

func convertJsonToUserSubscription1(jsonInfo string) *UserLocationEventSubscription {

	if jsonInfo == "" {
@@ -215,21 +204,6 @@ func convertJsonToUserSubscription1(jsonInfo string) *UserLocationEventSubscript
	return &user
}

func convertJsonToUserSubscription(jsonInfo string) *UserTrackingSubscription {

	if jsonInfo == "" {
		return nil
	}

	var user UserTrackingSubscription
	err := json.Unmarshal([]byte(jsonInfo), &user)
	if err != nil {
		log.Error(err.Error())
		return nil
	}
	return &user
}

func convertPeriodicSubscriptionToJson1(periodicSubs *UserLocationPeriodicSubscription) string {

	jsonInfo, err := json.Marshal(*periodicSubs)
+19 −338
Original line number Diff line number Diff line
@@ -331,12 +331,12 @@ func Init() (err error) {
		return err
	}

	userTrackingReInit()
	userLocationEventReInit()
	zonalTrafficReInit()
	zoneStatusReInit()
	distanceReInit()
	areaCircleReInit()
	userlocationperiodicReInit()
	userLocationPeriodicReInit()

	// Initialize SBI
	sbiCfg := sbi.SbiCfg{
@@ -2005,7 +2005,7 @@ func checkNotificationRegisteredZoneStatus1(zoneId string, apId string, nbUsersI
// 		}
// 	}
// }
func checkNotificationRegisteredUsers1(oldZoneId string, newZoneId string, oldApId string, newApId string, userId string) {
func checkNotificationRegisteredUsers(oldZoneId string, newZoneId string, oldApId string, newApId string, userId string) {
	mutex.Lock()
	defer mutex.Unlock()
	//check all that applies
@@ -2051,7 +2051,7 @@ func checkNotificationRegisteredUsers1(oldZoneId string, newZoneId string, oldAp
						zonal.UserLocationEvent = event
						var inlineZonal InlineUserLocationEventNotification
						inlineZonal.UserLocationEventNotification = &zonal
						sendZonalPresenceNotification1(subscription.CallbackReference, inlineZonal)
						sendZonalPresenceNotification(subscription.CallbackReference, inlineZonal)
						log.Info("User Notification" + "(" + subsIdStr + "): " + "Leaving event in zone " + oldZoneId + " for user " + userId)
					}
				}
@@ -2063,7 +2063,7 @@ func checkNotificationRegisteredUsers1(oldZoneId string, newZoneId string, oldAp
					zonal.UserLocationEvent = event
					var inlineZonal InlineUserLocationEventNotification
					inlineZonal.UserLocationEventNotification = &zonal
					sendZonalPresenceNotification1(subscription.CallbackReference, inlineZonal)
					sendZonalPresenceNotification(subscription.CallbackReference, inlineZonal)
					log.Info("User Notification" + "(" + subsIdStr + "): " + "Entering event in zone " + newZoneId + " for user " + userId)
				}
			}
@@ -2071,79 +2071,7 @@ func checkNotificationRegisteredUsers1(oldZoneId string, newZoneId string, oldAp
	}
}

// func checkNotificationRegisteredUsers(oldZoneId string, newZoneId string, oldApId string, newApId string, userId string) {

// 	mutex.Lock()
// 	defer mutex.Unlock()
// 	//check all that applies
// 	for subsId, value := range userSubscriptionMap {
// 		if value == userId {

// 			subsIdStr := strconv.Itoa(subsId)
// 			jsonInfo, _ := rc.JSONGetEntry(baseKey+typeUserSubscription+":"+subsIdStr, ".")
// 			if jsonInfo == "" {
// 				return
// 			}

// 			subscription := convertJsonToUserSubscription(jsonInfo)

// 			var zonal ZonalPresenceNotification
// 			zonal.Address = userId
// 			seconds := time.Now().Unix()
// 			var timestamp TimeStamp
// 			timestamp.Seconds = int32(seconds)
// 			zonal.Timestamp = &timestamp

// 			zonal.CallbackData = subscription.CallbackReference.CallbackData

// 			if newZoneId != oldZoneId {
// 				//process LEAVING events prior to entering ones
// 				if oldZoneId != "" {
// 					if userSubscriptionLeavingMap[subsId] != "" {
// 						zonal.ZoneId = oldZoneId
// 						zonal.CurrentAccessPointId = oldApId
// 						event := new(UserEventType)
// 						*event = LEAVING_UserEventType
// 						zonal.UserEventType = event
// 						var inlineZonal InlineZonalPresenceNotification
// 						inlineZonal.ZonalPresenceNotification = &zonal
// 						sendZonalPresenceNotification(subscription.CallbackReference.NotifyURL, inlineZonal)
// 						log.Info("User Notification" + "(" + subsIdStr + "): " + "Leaving event in zone " + oldZoneId + " for user " + userId)
// 					}
// 				}
// 				if userSubscriptionEnteringMap[subsId] != "" && newZoneId != "" {
// 					zonal.ZoneId = newZoneId
// 					zonal.CurrentAccessPointId = newApId
// 					event := new(UserEventType)
// 					*event = ENTERING_UserEventType
// 					zonal.UserEventType = event
// 					var inlineZonal InlineZonalPresenceNotification
// 					inlineZonal.ZonalPresenceNotification = &zonal
// 					sendZonalPresenceNotification(subscription.CallbackReference.NotifyURL, inlineZonal)
// 					log.Info("User Notification" + "(" + subsIdStr + "): " + "Entering event in zone " + newZoneId + " for user " + userId)
// 				}

// 			} else {
// 				if newApId != oldApId {
// 					if userSubscriptionTransferringMap[subsId] != "" {
// 						zonal.ZoneId = newZoneId
// 						zonal.CurrentAccessPointId = newApId
// 						zonal.PreviousAccessPointId = oldApId
// 						event := new(UserEventType)
// 						*event = TRANSFERRING_UserEventType
// 						zonal.UserEventType = event
// 						var inlineZonal InlineZonalPresenceNotification
// 						inlineZonal.ZonalPresenceNotification = &zonal
// 						sendZonalPresenceNotification(subscription.CallbackReference.NotifyURL, inlineZonal)
// 						log.Info("User Notification" + "(" + subsIdStr + "): " + " Transferring event within zone " + newZoneId + " for user " + userId + " from Ap " + oldApId + " to " + newApId)
// 					}
// 				}
// 			}
// 		}
// 	}
// }

func sendZonalPresenceNotification1(notifyUrl string, notification InlineUserLocationEventNotification) {
func sendZonalPresenceNotification(notifyUrl string, notification InlineUserLocationEventNotification) {
	startTime := time.Now()
	jsonNotif, err := json.Marshal(notification)
	if err != nil {
@@ -2183,26 +2111,6 @@ func sendZonalPresenceNotification_L(notifyUrl string, notification InlineZoneLo
	defer resp.Body.Close()
}

func sendZonalPresenceNotification(notifyUrl string, notification InlineZonalPresenceNotification) {
	startTime := time.Now()
	jsonNotif, err := json.Marshal(notification)
	if err != nil {
		log.Error(err)
		return
	}

	resp, err := http.Post(notifyUrl, "application/json", bytes.NewBuffer(jsonNotif))
	duration := float64(time.Since(startTime).Microseconds()) / 1000.0
	_ = httpLog.LogNotification(notifyUrl, "POST", "", "", string(jsonNotif), resp, startTime)
	if err != nil {
		log.Error(err)
		met.ObserveNotification(sandboxName, serviceName, notifZonalPresence, notifyUrl, nil, duration)
		return
	}
	met.ObserveNotification(sandboxName, serviceName, notifZonalPresence, notifyUrl, resp, duration)
	defer resp.Body.Close()
}

func sendStatusNotification(notifyUrl string, notification InlineZoneStatusNotification) {
	startTime := time.Now()
	jsonNotif, err := json.Marshal(notification)
@@ -3549,53 +3457,6 @@ func userSubDELETE(w http.ResponseWriter, r *http.Request) {

}

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

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

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

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

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

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

	keyName := baseKey + typeUserSubscription + "*"
	err := rc.ForEachJSONEntry(keyName, populateUserTrackingList, &userTrackingSubList)
	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 userSubGET(w http.ResponseWriter, r *http.Request) {
	w.Header().Set("Content-Type", "application/json; charset=UTF-8")
	vars := mux.Vars(r)
@@ -3639,37 +3500,6 @@ func userSubGET(w http.ResponseWriter, r *http.Request) {
	fmt.Fprint(w, string(jsonResponse))
}

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

	var response InlineUserTrackingSubscription
	var userTrackingSub UserTrackingSubscription
	response.UserTrackingSubscription = &userTrackingSub

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

	err := json.Unmarshal([]byte(jsonUserTrackingSub), &userTrackingSub)
	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 userSubPOST(w http.ResponseWriter, r *http.Request) {
	// Decode the request body into a slice of maps
	var requestBody []map[string]interface{}
@@ -3841,59 +3671,7 @@ func handleUserLocationPeriodicSubscription(w http.ResponseWriter, requestBody [
	// If no periodic-based subscription found in the request body
	errHandlerProblemDetails(w, "No valid periodic-based subscription found in the request body", http.StatusBadRequest)
}
func userTrackingSubPost(w http.ResponseWriter, r *http.Request) {
	w.Header().Set("Content-Type", "application/json; charset=UTF-8")

	var response InlineUserTrackingSubscription

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

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

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

	newSubsId := nextUserSubscriptionIdAvailable
	nextUserSubscriptionIdAvailable++
	subsIdStr := strconv.Itoa(newSubsId)

	registerUser(userTrackingSub.Address, userTrackingSub.UserEventCriteria, subsIdStr)
	userTrackingSub.ResourceURL = hostUrl.String() + basePath + "subscriptions/userTracking/" + subsIdStr

	_ = rc.JSONSetEntry(baseKey+typeUserSubscription+":"+subsIdStr, ".", convertUserSubscriptionToJson(userTrackingSub))

	response.UserTrackingSubscription = userTrackingSub

	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 zoneSubPUT(w http.ResponseWriter, r *http.Request) {
	var requestBody []map[string]interface{}
	vars := mux.Vars(r)
@@ -4294,88 +4072,6 @@ func handleUserLocationPeriodicSubscriptionPut(w http.ResponseWriter, requestBod
	}
}

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

	var response InlineUserTrackingSubscription

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

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

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

	subsIdParamStr := vars["subscriptionId"]

	selfUrl := strings.Split(userTrackingSub.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
	}

	userTrackingSub.ResourceURL = hostUrl.String() + basePath + "subscriptions/userTracking/" + subsIdStr

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

	if userSubscriptionMap[subsId] == "" {
		w.WriteHeader(http.StatusNotFound)
		return
	}

	_ = rc.JSONSetEntry(baseKey+typeUserSubscription+":"+subsIdStr, ".", convertUserSubscriptionToJson(userTrackingSub))

	deregisterUser(subsIdStr)
	registerUser(userTrackingSub.Address, userTrackingSub.UserEventCriteria, subsIdStr)

	response.UserTrackingSubscription = userTrackingSub

	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 populateUserSubList1(data []byte, address string, subscriptions *[]Subscription) error {
	var userInfo UserLocationEventSubscription
	if err := json.Unmarshal(data, &userInfo); err != nil {
@@ -4400,7 +4096,7 @@ func populateUserSubList1(data []byte, address string, subscriptions *[]Subscrip
}

func populateUserSubList(data []byte, address string, subscriptions *[]Subscription) error {
	var userInfo UserLocationEventSubscription
	var userInfo UserLocationPeriodicSubscription
	if err := json.Unmarshal(data, &userInfo); err != nil {
		return err
	}
@@ -4422,20 +4118,6 @@ func populateUserSubList(data []byte, address string, subscriptions *[]Subscript
	return nil
}

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

	userList := userData.(*NotificationSubscriptionList)
	var userInfo UserTrackingSubscription

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

func zonalTrafficSubDelete(w http.ResponseWriter, r *http.Request) {
	w.Header().Set("Content-Type", "application/json; charset=UTF-8")
	vars := mux.Vars(r)
@@ -5441,8 +5123,7 @@ func updateUserInfo(address string, zoneId string, accessPointId string, longitu

	// Update User info in DB & Send notifications
	_ = rc.JSONSetEntry(baseKey+typeUser+":"+address, ".", convertUserInfoToJson(userInfo))
	// checkNotificationRegisteredUsers(oldZoneId, zoneId, oldApId, accessPointId, address)
	checkNotificationRegisteredUsers1(oldZoneId, zoneId, oldApId, accessPointId, address)
	checkNotificationRegisteredUsers(oldZoneId, zoneId, oldApId, accessPointId, address)
	checkNotificationRegisteredZones1(oldZoneId, zoneId, oldApId, accessPointId, address)
	// checkNotificationRegisteredZones(oldZoneId, zoneId, oldApId, accessPointId, address)
	checkNotificationAreaCircle(address)
@@ -5624,19 +5305,21 @@ func zonalTrafficReInit() {
	nextZonalSubscriptionIdAvailable = maxZonalSubscriptionId + 1
}

func userTrackingReInit() {
func userLocationEventReInit() {
	//reusing the object response for the get multiple zonalSubscription
	var userList NotificationSubscriptionList

	keyName := baseKey + typeUserSubscription + "*"
	_ = rc.ForEachJSONEntry(keyName, populateUserTrackingList, &userList)
	_ = rc.ForEachJSONEntry(keyName, func(key string, jsonInfo string, userData interface{}) error {
		return populateUserSubList([]byte(jsonInfo), "", userData.(*[]Subscription))
	}, &userList)

	maxUserSubscriptionId := 0
	mutex.Lock()
	defer mutex.Unlock()

	for _, user := range userList.UserTrackingSubscription {
		resourceUrl := strings.Split(user.ResourceURL, "/")
	for _, user := range userList.UserLocationEventSubscription {
		resourceUrl := strings.Split(user.Links.Self.Href, "/")
		subscriptionId, err := strconv.Atoi(resourceUrl[len(resourceUrl)-1])
		if err != nil {
			log.Error(err)
@@ -5645,14 +5328,12 @@ func userTrackingReInit() {
				maxUserSubscriptionId = subscriptionId
			}

			for i := 0; i < len(user.UserEventCriteria); i++ {
				switch user.UserEventCriteria[i] {
				case ENTERING_UserEventType:
			for i := 0; i < len(user.LocationEventCriteria); i++ {
				switch user.LocationEventCriteria[i] {
				case ENTERING_AREA_EVENT:
					userSubscriptionEnteringMap[subscriptionId] = user.Address
				case LEAVING_UserEventType:
				case LEAVING_AREA_EVENT:
					userSubscriptionLeavingMap[subscriptionId] = user.Address
				case TRANSFERRING_UserEventType:
					userSubscriptionTransferringMap[subscriptionId] = user.Address
				default:
				}
			}
@@ -5730,7 +5411,7 @@ func areaCircleReInit() {
	nextAreaCircleSubscriptionIdAvailable = maxAreaCircleSubscriptionId + 1
}

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

+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 InlineUserTrackingSubscription struct {
	UserTrackingSubscription *UserTrackingSubscription `json:"userTrackingSubscription,omitempty"`
}
+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 InlineZonalPresenceNotification struct {
	ZonalPresenceNotification *ZonalPresenceNotification `json:"zonalPresenceNotification,omitempty"`
}
Loading