Loading go-apps/meep-loc-serv/server/loc-serv.go +68 −32 Original line number Diff line number Diff line Loading @@ -2815,11 +2815,10 @@ func userSubListGET(w http.ResponseWriter, r *http.Request) { subscriptionType := queryParams.Get("subscription_type") address := queryParams.Get("address") var response InlineNotificationSubscriptionList var userSubList NotificationSubscriptionList userSubList.ResourceURL = &LinkType{} userSubList.ResourceURL.Href = hostUrl.String() + basePath + "subscriptions/users" response.NotificationSubscriptionList = &userSubList var response []InlineNotificationSubscriptionList // Create a slice to hold subscriptions var subscriptions []Subscription var err error switch subscriptionType { Loading @@ -2829,17 +2828,17 @@ func userSubListGET(w http.ResponseWriter, r *http.Request) { if address != "" { keyName += ":" + address } err = rc.ForEachJSONEntry(keyName, populateUserSubList, &userSubList) err = rc.ForEachJSONEntry(keyName, populateUserSubList, &subscriptions) case "event": keyName := baseKey + typeUserSubscription + "*" // If address parameter is provided, filter subscriptions by address if address != "" { keyName += ":" + address } err = rc.ForEachJSONEntry(keyName, populateUserSubList1, &userSubList) err = rc.ForEachJSONEntry(keyName, populateUserSubList1, &subscriptions) default: // If no subscription_type is provided, return both responses var userSubListPeriodic NotificationSubscriptionList var userSubListPeriodic []Subscription keyNamePeriodic := baseKey + typePeriodicSubscription + "*" // If address parameter is provided, filter subscriptions by address errPeriodic := rc.ForEachJSONEntry(keyNamePeriodic, populateUserSubList, &userSubListPeriodic) Loading @@ -2849,7 +2848,7 @@ func userSubListGET(w http.ResponseWriter, r *http.Request) { return } var userSubListEvent NotificationSubscriptionList var userSubListEvent []Subscription keyNameEvent := baseKey + typeUserSubscription + "*" // If address parameter is provided, filter subscriptions by address Loading @@ -2860,9 +2859,8 @@ func userSubListGET(w http.ResponseWriter, r *http.Request) { return } // Merge both lists userSubList.UserLocationPeriodicSubscription = append(userSubList.UserLocationPeriodicSubscription, userSubListPeriodic.UserLocationPeriodicSubscription...) userSubList.UserLocationEventSubscription = append(userSubList.UserLocationEventSubscription, userSubListEvent.UserLocationEventSubscription...) subscriptions = append(subscriptions, userSubListPeriodic...) subscriptions = append(subscriptions, userSubListEvent...) // No error since we're combining the lists err = nil Loading @@ -2874,6 +2872,17 @@ func userSubListGET(w http.ResponseWriter, r *http.Request) { return } // Constructing the response response = append(response, InlineNotificationSubscriptionList{ NotificationSubscriptionList: &NotificationSubscriptionList{ Subscription: subscriptions, ResourceURL: &LinkType{ Href: hostUrl.String() + basePath + "subscriptions/users", }, }, }) // Marshaling the response jsonResponse, err := json.Marshal(response) if err != nil { log.Error(err.Error()) Loading @@ -2881,8 +2890,9 @@ func userSubListGET(w http.ResponseWriter, r *http.Request) { return } // Writing the response w.WriteHeader(http.StatusOK) fmt.Fprint(w, string(jsonResponse)) w.Write(jsonResponse) } func periodicSubGet(w http.ResponseWriter, r *http.Request) { Loading Loading @@ -3407,7 +3417,12 @@ func handleUserLocationEventSubscription(w http.ResponseWriter, requestBody []ma subsIdStr := strconv.Itoa(newSubsId) registerUser1(userSubBody.Address, userSubBody.LocationEventCriteria, subsIdStr) userSubBody.ResourceURL = hostUrl.String() + basePath + "subscriptions/users/" + subsIdStr userSubBody.Links = &Links{ Self: &LinkType{ Href: hostUrl.String() + basePath + "subscriptions/users/" + subsIdStr, }, } userSubBody.SubscriptionType = "userLocationEventSubscription" _ = rc.JSONSetEntry(baseKey+typeUserSubscription+":"+subsIdStr, ".", convertUserSubscriptionToJson1(&userSubBody)) // Prepare response Loading Loading @@ -3467,7 +3482,12 @@ func handleUserLocationPeriodicSubscription(w http.ResponseWriter, requestBody [ nextPeriodicSubscriptionIdAvailable += 2 subsIdStr := strconv.Itoa(newSubsId) periodicSub.ResourceURL = hostUrl.String() + basePath + "subscriptions/users/" + subsIdStr periodicSub.Links = &Links{ Self: &LinkType{ Href: hostUrl.String() + basePath + "subscriptions/users/" + subsIdStr, }, } periodicSub.SubscriptionType = "userLocationPeriodicSubscription" _ = rc.JSONSetEntry(baseKey+typePeriodicSubscription+":"+subsIdStr, ".", convertPeriodicSubscriptionToJson1(&periodicSub)) registerPeriodic1(&periodicSub, subsIdStr) Loading Loading @@ -3814,7 +3834,12 @@ func handleUserLocationEventSubscriptionPut(w http.ResponseWriter, requestBody [ return } userSubBody.ResourceURL = hostUrl.String() + basePath + "subscriptions/users/" + subsIdStr userSubBody.Links = &Links{ Self: &LinkType{ Href: hostUrl.String() + basePath + "subscriptions/users/" + subsIdStr, }, } userSubBody.SubscriptionType = "userLocationEventSubscription" subsId, err := strconv.Atoi(subsIdStr) if err != nil { Loading Loading @@ -3887,7 +3912,12 @@ func handleUserLocationPeriodicSubscriptionPut(w http.ResponseWriter, requestBod return } periodicSub.ResourceURL = hostUrl.String() + basePath + "subscriptions/users/" + subsIdStr periodicSub.Links = &Links{ Self: &LinkType{ Href: hostUrl.String() + basePath + "subscriptions/users/" + subsIdStr, }, } periodicSub.SubscriptionType = "userLocationPeriodicSubscription" subsId, err := strconv.Atoi(subsIdStr) if err != nil { Loading Loading @@ -4010,7 +4040,7 @@ func userTrackingSubPut(w http.ResponseWriter, r *http.Request) { func populateUserSubList1(key string, jsonInfo string, userData interface{}) error { userList := userData.(*NotificationSubscriptionList) userList := userData.(*[]Subscription) var userInfo UserLocationEventSubscription // Format response Loading @@ -4018,13 +4048,21 @@ func populateUserSubList1(key string, jsonInfo string, userData interface{}) err if err != nil { return err } userList.UserLocationEventSubscription = append(userList.UserLocationEventSubscription, userInfo) href := "" if userInfo.Links != nil && userInfo.Links.Self != nil { href = userInfo.Links.Self.Href } sub := Subscription{ Href: href, SubscriptionType: userInfo.SubscriptionType, } *userList = append(*userList, sub) return nil } func populateUserSubList(key string, jsonInfo string, userData interface{}) error { userList := userData.(*NotificationSubscriptionList) subscriptions := userData.(*[]Subscription) var userInfo UserLocationPeriodicSubscription // Format response Loading @@ -4032,19 +4070,17 @@ func populateUserSubList(key string, jsonInfo string, userData interface{}) erro if err != nil { return err } userList.UserLocationPeriodicSubscription = append(userList.UserLocationPeriodicSubscription, userInfo) href := "" if userInfo.Links != nil && userInfo.Links.Self != nil { href = userInfo.Links.Self.Href } // Create a Subscription instance sub := Subscription{ Href: href, SubscriptionType: userInfo.SubscriptionType, } *subscriptions = append(*subscriptions, sub) return nil // userList := userData.(*NotificationSubscriptionList) // var userInfo UserLocationEventSubscription // // Format response // err := json.Unmarshal([]byte(jsonInfo), &userInfo) // if err != nil { // return err // } // userList.UserLocationEventSubscription = append(userList.UserLocationEventSubscription, userInfo) // return nil } func populateUserTrackingList(key string, jsonInfo string, userData interface{}) error { Loading go-apps/meep-loc-serv/server/model_user_location_event_subscription.go +3 −0 Original line number Diff line number Diff line Loading @@ -11,6 +11,9 @@ package server // A type containing data for notifications, when the area is defined as a circle. type UserLocationEventSubscription struct { SubscriptionType string `json:"subscriptionType"` Links *Links `json:"_links,omitempty"` // Address of user (e.g. ‘sip’ URI, ‘tel’ URI, ‘acr’ URI) to monitor. Address string `json:"address,omitempty"` // URI exposed by the client on which to receive notifications via HTTP. See note 1. Loading go-apps/meep-loc-serv/server/model_user_location_periodic_subscription.go +1 −0 Original line number Diff line number Diff line Loading @@ -10,6 +10,7 @@ package server type UserLocationPeriodicSubscription struct { Links *Links `json:"_links,omitempty"` // Address of user (e.g. ‘sip’ URI, ‘tel’ URI, ‘acr’ URI) to monitor. Address []string `json:"address"` // URI exposed by the client on which to receive notifications via HTTP. See note 1. Loading Loading
go-apps/meep-loc-serv/server/loc-serv.go +68 −32 Original line number Diff line number Diff line Loading @@ -2815,11 +2815,10 @@ func userSubListGET(w http.ResponseWriter, r *http.Request) { subscriptionType := queryParams.Get("subscription_type") address := queryParams.Get("address") var response InlineNotificationSubscriptionList var userSubList NotificationSubscriptionList userSubList.ResourceURL = &LinkType{} userSubList.ResourceURL.Href = hostUrl.String() + basePath + "subscriptions/users" response.NotificationSubscriptionList = &userSubList var response []InlineNotificationSubscriptionList // Create a slice to hold subscriptions var subscriptions []Subscription var err error switch subscriptionType { Loading @@ -2829,17 +2828,17 @@ func userSubListGET(w http.ResponseWriter, r *http.Request) { if address != "" { keyName += ":" + address } err = rc.ForEachJSONEntry(keyName, populateUserSubList, &userSubList) err = rc.ForEachJSONEntry(keyName, populateUserSubList, &subscriptions) case "event": keyName := baseKey + typeUserSubscription + "*" // If address parameter is provided, filter subscriptions by address if address != "" { keyName += ":" + address } err = rc.ForEachJSONEntry(keyName, populateUserSubList1, &userSubList) err = rc.ForEachJSONEntry(keyName, populateUserSubList1, &subscriptions) default: // If no subscription_type is provided, return both responses var userSubListPeriodic NotificationSubscriptionList var userSubListPeriodic []Subscription keyNamePeriodic := baseKey + typePeriodicSubscription + "*" // If address parameter is provided, filter subscriptions by address errPeriodic := rc.ForEachJSONEntry(keyNamePeriodic, populateUserSubList, &userSubListPeriodic) Loading @@ -2849,7 +2848,7 @@ func userSubListGET(w http.ResponseWriter, r *http.Request) { return } var userSubListEvent NotificationSubscriptionList var userSubListEvent []Subscription keyNameEvent := baseKey + typeUserSubscription + "*" // If address parameter is provided, filter subscriptions by address Loading @@ -2860,9 +2859,8 @@ func userSubListGET(w http.ResponseWriter, r *http.Request) { return } // Merge both lists userSubList.UserLocationPeriodicSubscription = append(userSubList.UserLocationPeriodicSubscription, userSubListPeriodic.UserLocationPeriodicSubscription...) userSubList.UserLocationEventSubscription = append(userSubList.UserLocationEventSubscription, userSubListEvent.UserLocationEventSubscription...) subscriptions = append(subscriptions, userSubListPeriodic...) subscriptions = append(subscriptions, userSubListEvent...) // No error since we're combining the lists err = nil Loading @@ -2874,6 +2872,17 @@ func userSubListGET(w http.ResponseWriter, r *http.Request) { return } // Constructing the response response = append(response, InlineNotificationSubscriptionList{ NotificationSubscriptionList: &NotificationSubscriptionList{ Subscription: subscriptions, ResourceURL: &LinkType{ Href: hostUrl.String() + basePath + "subscriptions/users", }, }, }) // Marshaling the response jsonResponse, err := json.Marshal(response) if err != nil { log.Error(err.Error()) Loading @@ -2881,8 +2890,9 @@ func userSubListGET(w http.ResponseWriter, r *http.Request) { return } // Writing the response w.WriteHeader(http.StatusOK) fmt.Fprint(w, string(jsonResponse)) w.Write(jsonResponse) } func periodicSubGet(w http.ResponseWriter, r *http.Request) { Loading Loading @@ -3407,7 +3417,12 @@ func handleUserLocationEventSubscription(w http.ResponseWriter, requestBody []ma subsIdStr := strconv.Itoa(newSubsId) registerUser1(userSubBody.Address, userSubBody.LocationEventCriteria, subsIdStr) userSubBody.ResourceURL = hostUrl.String() + basePath + "subscriptions/users/" + subsIdStr userSubBody.Links = &Links{ Self: &LinkType{ Href: hostUrl.String() + basePath + "subscriptions/users/" + subsIdStr, }, } userSubBody.SubscriptionType = "userLocationEventSubscription" _ = rc.JSONSetEntry(baseKey+typeUserSubscription+":"+subsIdStr, ".", convertUserSubscriptionToJson1(&userSubBody)) // Prepare response Loading Loading @@ -3467,7 +3482,12 @@ func handleUserLocationPeriodicSubscription(w http.ResponseWriter, requestBody [ nextPeriodicSubscriptionIdAvailable += 2 subsIdStr := strconv.Itoa(newSubsId) periodicSub.ResourceURL = hostUrl.String() + basePath + "subscriptions/users/" + subsIdStr periodicSub.Links = &Links{ Self: &LinkType{ Href: hostUrl.String() + basePath + "subscriptions/users/" + subsIdStr, }, } periodicSub.SubscriptionType = "userLocationPeriodicSubscription" _ = rc.JSONSetEntry(baseKey+typePeriodicSubscription+":"+subsIdStr, ".", convertPeriodicSubscriptionToJson1(&periodicSub)) registerPeriodic1(&periodicSub, subsIdStr) Loading Loading @@ -3814,7 +3834,12 @@ func handleUserLocationEventSubscriptionPut(w http.ResponseWriter, requestBody [ return } userSubBody.ResourceURL = hostUrl.String() + basePath + "subscriptions/users/" + subsIdStr userSubBody.Links = &Links{ Self: &LinkType{ Href: hostUrl.String() + basePath + "subscriptions/users/" + subsIdStr, }, } userSubBody.SubscriptionType = "userLocationEventSubscription" subsId, err := strconv.Atoi(subsIdStr) if err != nil { Loading Loading @@ -3887,7 +3912,12 @@ func handleUserLocationPeriodicSubscriptionPut(w http.ResponseWriter, requestBod return } periodicSub.ResourceURL = hostUrl.String() + basePath + "subscriptions/users/" + subsIdStr periodicSub.Links = &Links{ Self: &LinkType{ Href: hostUrl.String() + basePath + "subscriptions/users/" + subsIdStr, }, } periodicSub.SubscriptionType = "userLocationPeriodicSubscription" subsId, err := strconv.Atoi(subsIdStr) if err != nil { Loading Loading @@ -4010,7 +4040,7 @@ func userTrackingSubPut(w http.ResponseWriter, r *http.Request) { func populateUserSubList1(key string, jsonInfo string, userData interface{}) error { userList := userData.(*NotificationSubscriptionList) userList := userData.(*[]Subscription) var userInfo UserLocationEventSubscription // Format response Loading @@ -4018,13 +4048,21 @@ func populateUserSubList1(key string, jsonInfo string, userData interface{}) err if err != nil { return err } userList.UserLocationEventSubscription = append(userList.UserLocationEventSubscription, userInfo) href := "" if userInfo.Links != nil && userInfo.Links.Self != nil { href = userInfo.Links.Self.Href } sub := Subscription{ Href: href, SubscriptionType: userInfo.SubscriptionType, } *userList = append(*userList, sub) return nil } func populateUserSubList(key string, jsonInfo string, userData interface{}) error { userList := userData.(*NotificationSubscriptionList) subscriptions := userData.(*[]Subscription) var userInfo UserLocationPeriodicSubscription // Format response Loading @@ -4032,19 +4070,17 @@ func populateUserSubList(key string, jsonInfo string, userData interface{}) erro if err != nil { return err } userList.UserLocationPeriodicSubscription = append(userList.UserLocationPeriodicSubscription, userInfo) href := "" if userInfo.Links != nil && userInfo.Links.Self != nil { href = userInfo.Links.Self.Href } // Create a Subscription instance sub := Subscription{ Href: href, SubscriptionType: userInfo.SubscriptionType, } *subscriptions = append(*subscriptions, sub) return nil // userList := userData.(*NotificationSubscriptionList) // var userInfo UserLocationEventSubscription // // Format response // err := json.Unmarshal([]byte(jsonInfo), &userInfo) // if err != nil { // return err // } // userList.UserLocationEventSubscription = append(userList.UserLocationEventSubscription, userInfo) // return nil } func populateUserTrackingList(key string, jsonInfo string, userData interface{}) error { Loading
go-apps/meep-loc-serv/server/model_user_location_event_subscription.go +3 −0 Original line number Diff line number Diff line Loading @@ -11,6 +11,9 @@ package server // A type containing data for notifications, when the area is defined as a circle. type UserLocationEventSubscription struct { SubscriptionType string `json:"subscriptionType"` Links *Links `json:"_links,omitempty"` // Address of user (e.g. ‘sip’ URI, ‘tel’ URI, ‘acr’ URI) to monitor. Address string `json:"address,omitempty"` // URI exposed by the client on which to receive notifications via HTTP. See note 1. Loading
go-apps/meep-loc-serv/server/model_user_location_periodic_subscription.go +1 −0 Original line number Diff line number Diff line Loading @@ -10,6 +10,7 @@ package server type UserLocationPeriodicSubscription struct { Links *Links `json:"_links,omitempty"` // Address of user (e.g. ‘sip’ URI, ‘tel’ URI, ‘acr’ URI) to monitor. Address []string `json:"address"` // URI exposed by the client on which to receive notifications via HTTP. See note 1. Loading