summaryrefslogtreecommitdiff
path: root/src/components/application_manager/include/application_manager/request_info.h
diff options
context:
space:
mode:
authorJacob Keeler <jacob.keeler@livioradio.com>2016-09-20 11:44:51 -0400
committerJacob Keeler <jacob.keeler@livioradio.com>2016-09-20 14:37:25 -0400
commit039581419749dbdd32590804e8b14a77fcaf9636 (patch)
treeced927fc4bef4686f7373a5f45dd692bd9fc9de0 /src/components/application_manager/include/application_manager/request_info.h
parent1b96b7c02d2e338b846a7314c6fa0bdaa31f7c5e (diff)
parentaff7f09a4ec07becfb64dc78992580061d3342ff (diff)
downloadsdl_core-039581419749dbdd32590804e8b14a77fcaf9636.tar.gz
Merge branch 'master'
Diffstat (limited to 'src/components/application_manager/include/application_manager/request_info.h')
-rw-r--r--src/components/application_manager/include/application_manager/request_info.h610
1 files changed, 301 insertions, 309 deletions
diff --git a/src/components/application_manager/include/application_manager/request_info.h b/src/components/application_manager/include/application_manager/request_info.h
index 25fd025f76..c0a85e1f5e 100644
--- a/src/components/application_manager/include/application_manager/request_info.h
+++ b/src/components/application_manager/include/application_manager/request_info.h
@@ -48,344 +48,336 @@ namespace application_manager {
namespace request_controller {
+/*
+ * @brief Typedef for active mobile request
+ *
+ */
+typedef utils::SharedPtr<commands::Command> RequestPtr;
+
+struct RequestInfo {
+ enum RequestType { RequestNone, MobileRequest, HMIRequest };
+
+ RequestInfo()
+ : timeout_msec_(0)
+ , app_id_(0)
+ , hmi_level_(mobile_apis::HMILevel::INVALID_ENUM)
+ , requst_type_(RequestNone)
+ , correlation_id_(0) {
+ start_time_ = date_time::DateTime::getCurrentTime();
+ updateEndTime();
+ }
+ virtual ~RequestInfo() {}
+
+ RequestInfo(RequestPtr request,
+ const RequestType requst_type,
+ const uint64_t timeout_msec)
+ : request_(request)
+ , timeout_msec_(timeout_msec)
+ , hmi_level_(mobile_apis::HMILevel::INVALID_ENUM)
+ , correlation_id_(0) {
+ start_time_ = date_time::DateTime::getCurrentTime();
+ updateEndTime();
+ requst_type_ = requst_type;
+ }
+
+ RequestInfo(RequestPtr request,
+ const RequestType requst_type,
+ const TimevalStruct& start_time,
+ const uint64_t timeout_msec);
+
+ void updateEndTime();
+
+ void updateTimeOut(const uint64_t& timeout_msec);
+
+ bool isExpired();
+
+ TimevalStruct start_time() {
+ return start_time_;
+ }
+
+ void update_start_time(TimevalStruct start_time) {
+ start_time_ = start_time;
+ }
+
+ uint64_t timeout_msec() {
+ return timeout_msec_;
+ }
+
+ void set_timeout_msec(uint64_t timeout) {
+ timeout_msec_ = timeout;
+ }
+
+ TimevalStruct end_time() {
+ return end_time_;
+ }
+
+ uint32_t app_id() {
+ return app_id_;
+ }
+
+ mobile_apis::HMILevel::eType hmi_level() {
+ return hmi_level_;
+ }
+
+ void set_hmi_level(const mobile_apis::HMILevel::eType& level) {
+ hmi_level_ = level;
+ }
+
+ RequestType requst_type() const {
+ return requst_type_;
+ }
+
+ uint32_t requestId() {
+ return correlation_id_;
+ }
+
+ commands::Command* request() {
+ return request_.get();
+ }
+ uint64_t hash();
+ static uint64_t GenerateHash(uint32_t var1, uint32_t var2);
+ static uint32_t HmiConnectoinKey;
+
+ protected:
+ RequestPtr request_;
+ TimevalStruct start_time_;
+ uint64_t timeout_msec_;
+ TimevalStruct end_time_;
+ uint32_t app_id_;
+ mobile_apis::HMILevel::eType hmi_level_;
+ RequestType requst_type_;
+ uint32_t correlation_id_;
+};
+
+typedef utils::SharedPtr<RequestInfo> RequestInfoPtr;
+
+struct MobileRequestInfo : public RequestInfo {
+ MobileRequestInfo(RequestPtr request, const uint64_t timeout_msec);
+ MobileRequestInfo(RequestPtr request,
+ const TimevalStruct& start_time,
+ const uint64_t timeout_msec);
+};
+
+struct HMIRequestInfo : public RequestInfo {
+ HMIRequestInfo(RequestPtr request, const uint64_t timeout_msec);
+ HMIRequestInfo(RequestPtr request,
+ const TimevalStruct& start_time,
+ const uint64_t timeout_msec);
+};
+
+// Request info, for searching in request info set by log_n time
+// Returns correct hash by app_id and corr_id
+struct FakeRequestInfo : public RequestInfo {
+ FakeRequestInfo(uint32_t app_id, uint32_t correaltion_id);
+};
+
+struct RequestInfoTimeComparator {
+ bool operator()(const RequestInfoPtr lhs, const RequestInfoPtr rhs) const;
+};
+
+struct RequestInfoHashComparator {
+ bool operator()(const RequestInfoPtr lhs, const RequestInfoPtr rhs) const;
+};
+
+typedef std::set<RequestInfoPtr, RequestInfoTimeComparator>
+ TimeSortedRequestInfoSet;
+typedef std::set<RequestInfoPtr, RequestInfoHashComparator>
+ HashSortedRequestInfoSet;
+
+/*
+ * @brief RequestInfoSet provides uniue requests bu corralation_id and app_id
+ *
+ */
+class RequestInfoSet {
+ public:
/*
- * @brief Typedef for active mobile request
- *
+ * @brief Add requests into colletion by log(n) time
+ * @param request_info - request to add
+ * @return false is request with the same app_id and correlation_id exist
*/
- typedef utils::SharedPtr<commands::Command> RequestPtr;
-
- struct RequestInfo {
- enum RequestType {RequestNone, MobileRequest, HMIRequest};
-
- RequestInfo()
- : timeout_sec_(0),
- app_id_(0),
- hmi_level_(mobile_apis::HMILevel::INVALID_ENUM),
- requst_type_(RequestNone),
- correlation_id_(0) {
- start_time_ = date_time::DateTime::getCurrentTime();
- updateEndTime();
- }
- virtual ~RequestInfo() {}
-
- RequestInfo(RequestPtr request,
- const RequestType requst_type,
- const uint64_t timeout_sec)
- : request_(request),
- timeout_sec_(timeout_sec),
- app_id_(0),
- hmi_level_(mobile_apis::HMILevel::INVALID_ENUM),
- correlation_id_(0) {
- start_time_ = date_time::DateTime::getCurrentTime();
- updateEndTime();
- requst_type_ = requst_type;
- }
-
- RequestInfo(RequestPtr request, const RequestType requst_type,
- const TimevalStruct& start_time, const uint64_t timeout_sec);
-
- void updateEndTime();
-
- void updateTimeOut(const uint64_t& timeout_sec);
-
- bool isExpired();
-
- TimevalStruct start_time() {
- return start_time_;
- }
+ bool Add(RequestInfoPtr request_info);
- void update_start_time(TimevalStruct start_time) {
- start_time_ = start_time;
- }
+ /*
+ * @brief Find requests int colletion by log(n) time
+ * @param connection_key - connection_key of request
+ * @param correlation_id - correlation_id of request
+ * @return founded request or shared_ptr with NULL
+ */
+ RequestInfoPtr Find(const uint32_t connection_key,
+ const uint32_t correlation_id);
- uint64_t timeout_sec() {
- return timeout_sec_;
- }
+ /*
+ * @brief Get request with smalest end_time_
+ * @return founded request or shared_ptr with NULL
+ */
+ RequestInfoPtr Front();
- void set_timeout_sec(uint64_t timeout) {
- timeout_sec_ = timeout;
- }
+ /*
+ * @brief Get request with smalest end_time_ != 0
+ * @return founded request or shared_ptr with NULL
+ */
+ RequestInfoPtr FrontWithNotNullTimeout();
- TimevalStruct end_time() {
- return end_time_;
- }
+ /*
+ * @brief Erase request from colletion by log(n) time
+ * @param request_info - request to erase
+ * @return true if Erase succes, otherwise return false
+ */
+ bool RemoveRequest(const RequestInfoPtr request_info);
- uint32_t app_id() {
- return app_id_;
- }
+ /*
+ * @brief Erase request from colletion by connection_key
+ * @param connection_key - connection_key of requests to erase
+ * @return count of erased requests
+ */
+ uint32_t RemoveByConnectionKey(uint32_t connection_key);
- mobile_apis::HMILevel::eType hmi_level() {
- return hmi_level_;
- }
+ /*
+ * @brief Erase all mobile requests from controller
+ * @return count of erased requests
+ */
+ uint32_t RemoveMobileRequests();
- void set_hmi_level(const mobile_apis::HMILevel::eType& level) {
- hmi_level_ = level;
- }
+ /*
+ * @return count of requestd in collections
+ */
+ const size_t Size();
- RequestType requst_type() const {
- return requst_type_;
- }
+ /**
+ * @brief Check if this app is able to add new requests,
+ * or limits was exceeded
+ * @param app_id - application id
+ * @param app_time_scale - time scale (seconds)
+ * @param max_request_per_time_scale - maximum count of request
+ * that should be allowed for app_time_scale seconds
+ * @return True if new request could be added, false otherwise
+ */
+ bool CheckTimeScaleMaxRequest(uint32_t app_id,
+ uint32_t app_time_scale,
+ uint32_t max_request_per_time_scale);
- uint32_t requestId() {
- return correlation_id_;
- }
+ /**
+ * @brief Check if this app is able to add new requests
+ * in current hmi_level, or limits was exceeded
+ * @param hmi_level - hmi level
+ * @param app_id - application id
+ * @param app_time_scale - time scale (seconds)
+ * @param max_request_per_time_scale - maximum count of request
+ * that should be allowed for app_time_scale seconds
+ * @return True if new request could be added, false otherwise
+ */
+ bool CheckHMILevelTimeScaleMaxRequest(mobile_apis::HMILevel::eType hmi_level,
+ uint32_t app_id,
+ uint32_t app_time_scale,
+ uint32_t max_request_per_time_scale);
- commands::Command* request() {
- return request_.get();
- }
- uint64_t hash();
- static uint64_t GenerateHash(uint32_t var1, uint32_t var2);
- static uint32_t HmiConnectoinKey;
- protected:
- RequestPtr request_;
- TimevalStruct start_time_;
- uint64_t timeout_sec_;
- TimevalStruct end_time_;
- uint32_t app_id_;
- mobile_apis::HMILevel::eType hmi_level_;
- RequestType requst_type_;
- uint32_t correlation_id_;
+ private:
+ /*
+ * @brief Comparator of connection key for std::find_if function
+ */
+ struct AppIdCompararator {
+ enum CompareType { Equal, NotEqual };
+ AppIdCompararator(CompareType compare_type, uint32_t app_id)
+ : app_id_(app_id), compare_type_(compare_type) {}
+ bool operator()(const RequestInfoPtr value_compare) const;
+
+ private:
+ uint32_t app_id_;
+ CompareType compare_type_;
};
- typedef utils::SharedPtr<RequestInfo> RequestInfoPtr;
+ bool Erase(const RequestInfoPtr request_info);
- struct MobileRequestInfo: public RequestInfo {
- MobileRequestInfo(RequestPtr request,
- const uint64_t timeout_sec);
- MobileRequestInfo(RequestPtr request,
- const TimevalStruct& start_time,
- const uint64_t timeout_sec);
- };
+ /*
+ * @brief Erase requests from collection if filter allows
+ * @param filter - filtering predicate
+ * @return count of erased requests
+ */
+ uint32_t RemoveRequests(const RequestInfoSet::AppIdCompararator& filter);
- struct HMIRequestInfo: public RequestInfo {
- HMIRequestInfo(RequestPtr request, const uint64_t timeout_sec);
- HMIRequestInfo(RequestPtr request, const TimevalStruct& start_time,
- const uint64_t timeout_sec);
- };
+ /*
+ * @brief Debug function, will raise assert if set sizes are noit equal
+ */
+ inline void CheckSetSizes();
+ TimeSortedRequestInfoSet time_sorted_pending_requests_;
+ HashSortedRequestInfoSet hash_sorted_pending_requests_;
- // Request info, for searching in request info set by log_n time
- // Returns correct hash by app_id and corr_id
- struct FakeRequestInfo :public RequestInfo {
- FakeRequestInfo(uint32_t app_id, uint32_t correaltion_id);
- };
+ // the lock caled this_lock_, since the class represent collection by itself.
+ sync_primitives::Lock this_lock_;
+};
- struct RequestInfoTimeComparator {
- bool operator() (const RequestInfoPtr lhs,
- const RequestInfoPtr rhs) const;
- };
+/**
+* @brief Structure used in std algorithms to determine amount of request
+* during time scale
+*/
+struct TimeScale {
+ TimeScale(const TimevalStruct& start,
+ const TimevalStruct& end,
+ const uint32_t& app_id)
+ : start_(start), end_(end), app_id_(app_id) {}
+
+ bool operator()(RequestInfoPtr setEntry) {
+ if (!setEntry.valid()) {
+ return false;
+ }
- struct RequestInfoHashComparator {
- bool operator() (const RequestInfoPtr lhs,
- const RequestInfoPtr rhs) const;
- };
+ if (setEntry->app_id() != app_id_) {
+ return false;
+ }
+ if ((setEntry->start_time() < start_) || (end_ < setEntry->start_time())) {
+ return false;
+ }
- typedef std::set<RequestInfoPtr, RequestInfoTimeComparator> TimeSortedRequestInfoSet;
- typedef std::set<RequestInfoPtr, RequestInfoHashComparator> HashSortedRequestInfoSet;
+ return true;
+ }
- /*
- * @brief RequestInfoSet provides uniue requests bu corralation_id and app_id
- *
- */
- class RequestInfoSet {
- public:
- /*
- * @brief Add requests into colletion by log(n) time
- * @param request_info - request to add
- * @return false is request with the same app_id and correlation_id exist
- */
- bool Add(RequestInfoPtr request_info);
-
- /*
- * @brief Find requests int colletion by log(n) time
- * @param connection_key - connection_key of request
- * @param correlation_id - correlation_id of request
- * @return founded request or shared_ptr with NULL
- */
- RequestInfoPtr Find(const uint32_t connection_key,
- const uint32_t correlation_id);
-
- /*
- * @brief Get request with smalest end_time_
- * @return founded request or shared_ptr with NULL
- */
- RequestInfoPtr Front();
-
- /*
- * @brief Get request with smalest end_time_ != 0
- * @return founded request or shared_ptr with NULL
- */
- RequestInfoPtr FrontWithNotNullTimeout();
-
- /*
- * @brief Erase request from colletion by log(n) time
- * @param request_info - request to erase
- * @return true if Erase succes, otherwise return false
- */
- bool RemoveRequest(const RequestInfoPtr request_info);
-
- /*
- * @brief Erase request from colletion by connection_key
- * @param connection_key - connection_key of requests to erase
- * @return count of erased requests
- */
- uint32_t RemoveByConnectionKey(uint32_t connection_key);
-
- /*
- * @brief Erase all mobile requests from controller
- * @return count of erased requests
- */
- uint32_t RemoveMobileRequests();
-
- /*
- * @return count of requestd in collections
- */
- const size_t Size();
-
- /**
- * @brief Check if this app is able to add new requests,
- * or limits was exceeded
- * @param app_id - application id
- * @param app_time_scale - time scale (seconds)
- * @param max_request_per_time_scale - maximum count of request
- * that should be allowed for app_time_scale seconds
- * @return True if new request could be added, false otherwise
- */
- bool CheckTimeScaleMaxRequest(uint32_t app_id,
- uint32_t app_time_scale,
- uint32_t max_request_per_time_scale);
-
- /**
- * @brief Check if this app is able to add new requests
- * in current hmi_level, or limits was exceeded
- * @param hmi_level - hmi level
- * @param app_id - application id
- * @param app_time_scale - time scale (seconds)
- * @param max_request_per_time_scale - maximum count of request
- * that should be allowed for app_time_scale seconds
- * @return True if new request could be added, false otherwise
- */
- bool CheckHMILevelTimeScaleMaxRequest(mobile_apis::HMILevel::eType hmi_level,
- uint32_t app_id,
- uint32_t app_time_scale,
- uint32_t max_request_per_time_scale);
- private:
- /*
- * @brief Comparator of connection key for std::find_if function
- */
- struct AppIdCompararator {
- enum CompareType {Equal, NotEqual};
- AppIdCompararator(CompareType compare_type, uint32_t app_id):
- app_id_(app_id),
- compare_type_(compare_type) {}
- bool operator()(const RequestInfoPtr value_compare) const;
-
- private:
- uint32_t app_id_;
- CompareType compare_type_;
- };
-
- bool Erase(const RequestInfoPtr request_info);
-
- /*
- * @brief Erase requests from collection if filter allows
- * @param filter - filtering predicate
- * @return count of erased requests
- */
- uint32_t RemoveRequests(const RequestInfoSet::AppIdCompararator& filter);
-
- /*
- * @brief Debug function, will raise assert if set sizes are noit equal
- */
- inline void CheckSetSizes();
- TimeSortedRequestInfoSet time_sorted_pending_requests_;
- HashSortedRequestInfoSet hash_sorted_pending_requests_;
-
- // the lock caled this_lock_, since the class represent collection by itself.
- sync_primitives::Lock this_lock_;
- };
+ private:
+ TimevalStruct start_;
+ TimevalStruct end_;
+ uint32_t app_id_;
+};
+/**
+* @brief Structure used in std algorithms to determine amount of request
+* during time scale for application in defined hmi level
+*/
+struct HMILevelTimeScale {
+ HMILevelTimeScale(const TimevalStruct& start,
+ const TimevalStruct& end,
+ const uint32_t& app_id,
+ const mobile_apis::HMILevel::eType& hmi_level)
+ : start_(start), end_(end), app_id_(app_id), hmi_level_(hmi_level) {}
+
+ bool operator()(RequestInfoPtr setEntry) {
+ if (!setEntry.valid()) {
+ return false;
+ }
- /**
- * @brief Structure used in std algorithms to determine amount of request
- * during time scale
- */
- struct TimeScale {
- TimeScale(const TimevalStruct& start,
- const TimevalStruct& end,
- const uint32_t& app_id)
- : start_(start),
- end_(end),
- app_id_(app_id) {}
-
- bool operator()(RequestInfoPtr setEntry) {
- if (!setEntry.valid()) {
- return false;
- }
-
- if (setEntry->app_id() != app_id_) {
- return false;
- }
-
- if (date_time::DateTime::getmSecs(setEntry->start_time())
- < date_time::DateTime::getmSecs(start_) ||
- date_time::DateTime::getmSecs(setEntry->start_time())
- > date_time::DateTime::getmSecs(end_)) {
- return false;
- }
-
- return true;
+ if (setEntry->app_id() != app_id_) {
+ return false;
}
- private:
- TimevalStruct start_;
- TimevalStruct end_;
- uint32_t app_id_;
- };
+ if (setEntry->hmi_level() != hmi_level_) {
+ return false;
+ }
- /**
- * @brief Structure used in std algorithms to determine amount of request
- * during time scale for application in defined hmi level
- */
- struct HMILevelTimeScale {
- HMILevelTimeScale(const TimevalStruct& start,
- const TimevalStruct& end,
- const uint32_t& app_id,
- const mobile_apis::HMILevel::eType& hmi_level)
- : start_(start),
- end_(end),
- app_id_(app_id),
- hmi_level_(hmi_level) {}
-
- bool operator()(RequestInfoPtr setEntry) {
- if (!setEntry.valid()) {
- return false;
- }
-
- if (setEntry->app_id() != app_id_) {
- return false;
- }
-
- if (setEntry->hmi_level() != hmi_level_) {
- return false;
- }
-
- if (date_time::DateTime::getSecs(setEntry->start_time())
- < date_time::DateTime::getSecs(start_) ||
- date_time::DateTime::getSecs(setEntry->start_time())
- > date_time::DateTime::getSecs(end_)) {
- return false;
- }
-
- return true;
+ if (date_time::DateTime::getSecs(setEntry->start_time()) <
+ date_time::DateTime::getSecs(start_) ||
+ date_time::DateTime::getSecs(setEntry->start_time()) >
+ date_time::DateTime::getSecs(end_)) {
+ return false;
}
- private:
- TimevalStruct start_;
- TimevalStruct end_;
- uint32_t app_id_;
- mobile_apis::HMILevel::eType hmi_level_;
- };
+ return true;
+ }
+
+ private:
+ TimevalStruct start_;
+ TimevalStruct end_;
+ uint32_t app_id_;
+ mobile_apis::HMILevel::eType hmi_level_;
+};
} // namespace request_controller