diff options
Diffstat (limited to 'video_in_hal/nsframework/notification_persistent_service/server/src/ns_npp_notification_manager.cpp')
-rwxr-xr-x | video_in_hal/nsframework/notification_persistent_service/server/src/ns_npp_notification_manager.cpp | 1558 |
1 files changed, 0 insertions, 1558 deletions
diff --git a/video_in_hal/nsframework/notification_persistent_service/server/src/ns_npp_notification_manager.cpp b/video_in_hal/nsframework/notification_persistent_service/server/src/ns_npp_notification_manager.cpp deleted file mode 100755 index 73ce838..0000000 --- a/video_in_hal/nsframework/notification_persistent_service/server/src/ns_npp_notification_manager.cpp +++ /dev/null @@ -1,1558 +0,0 @@ -/* - * @copyright Copyright (c) 2016-2020 TOYOTA MOTOR CORPORATION. - * - * 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. - */ - -//////////////////////////////////////////////////////////////////////////////////////////////////// -/// \defgroup <<Group Tag>> <<Group Name>> -/// \ingroup tag_NS_NPPService -/// . -//////////////////////////////////////////////////////////////////////////////////////////////////// - -//////////////////////////////////////////////////////////////////////////////////////////////////// -/// \ingroup tag_NS_NPPService -/// \brief This file contains implementation of singleton class CNotificationManager. -/// -//////////////////////////////////////////////////////////////////////////////////////////////////// - -//////////////////////////////////////////////////////////////////////////////////////////////////// -// Include Files -//////////////////////////////////////////////////////////////////////////////////////////////////// - -#include <native_service/ns_np_service.h> -#include <native_service/ns_message_center_if.h> -#include <native_service/ns_np_service_protocol.h> -#include <algorithm> -#include <utility> -#include <string> -#include <vector> -#include "ns_npp_types.h" -#include "ns_npp_notificationpersistentservicelog.h" -#include "ns_npp_threads.h" -#include "ns_npp_notification.h" -#include "ns_npp_persistent_data.h" -#include "ns_npp_state_notification.h" -#include "ns_npp_regular_notification.h" -#include "ns_npp_notification_manager.h" -#include "ns_npp_state_persistence_notification.h" -#include "ns_npp_state_nor_persistence_notification.h" -#include "ns_npp_state_persistence_user_notification.h" - -#ifdef NPP_PROFILEINFO_ENABLE -#include <sstream> -#endif - -//////////////////////////////////////////////////////////////////////////////////////////////////// -/// CNotificationManager -/// Constructor of CNotificationManager class -//////////////////////////////////////////////////////////////////////////////////////////////////// -CNotificationManager::CNotificationManager() { - FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "+"); - - m_pmNotificationList = new(std::nothrow) Notification_Type(); // LCOV_EXCL_BR_LINE 11: unexpected branch - - m_pvPersistentList = new(std::nothrow) std::vector<std::string>(); // LCOV_EXCL_BR_LINE 11: unexpected branch - - m_pvUserPersistentList = new(std::nothrow) std::vector<std::string>(); // LCOV_EXCL_BR_LINE 11: unexpected branch - - if (NULL == CStateNorPersistenceNotification::m_hNSImmediatePersistenceThread) { // LCOV_EXCL_BR_LINE 11: unexpected branch // NOLINT[whitespace/line_length] - CStateNorPersistenceNotification::m_hNSImmediatePersistenceThread = - McOpenSender(NS_NPP_IMMEDIATE_PERSIST_THREAD_NAME); - } - - FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "-"); -} - -//////////////////////////////////////////////////////////////////////////////////////////////////// -/// ~CNotificationManager -/// Destructor of CNotificationManager class -//////////////////////////////////////////////////////////////////////////////////////////////////// -CNotificationManager::~CNotificationManager() { // LCOV_EXCL_START 14: Resident process, global instance not released - AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert - FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "+"); - - // iterator to find notification from map of notifications - Notification_Iterator_Type l_itNotification; - - CNotification *l_pNotification = NULL; - - // delete the members in map of Notification - if (NULL != m_pmNotificationList) { - if (!m_pmNotificationList->empty()) { - for (l_itNotification = m_pmNotificationList->begin(); - l_itNotification != m_pmNotificationList->end(); - l_itNotification++) { - l_pNotification = (*l_itNotification).second; - - if (NULL != l_pNotification) { - delete l_pNotification; - l_pNotification = NULL; - } - } - - // clear the map - m_pmNotificationList->clear(); - } - - delete m_pmNotificationList; - m_pmNotificationList = NULL; - } - - // delete the members in vector of persistent notification - if (NULL != m_pvPersistentList) { - if (!m_pvPersistentList->empty()) { - // clear the vector - m_pvPersistentList->clear(); - } - - delete m_pvPersistentList; - m_pvPersistentList = NULL; - } - - // delete the members in vector of user persistent notification - if (NULL != m_pvUserPersistentList) { - if (!m_pvUserPersistentList->empty()) { - // clear the vector - m_pvUserPersistentList->clear(); - } - - delete m_pvUserPersistentList; - m_pvUserPersistentList = NULL; - } - - if (NULL != CStateNorPersistenceNotification::m_hNSImmediatePersistenceThread) { - McClose(CStateNorPersistenceNotification::m_hNSImmediatePersistenceThread); - CStateNorPersistenceNotification::m_hNSImmediatePersistenceThread = NULL; - } - - FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "-"); -} -// LCOV_EXCL_STOP - -//////////////////////////////////////////////////////////////////////////////////////////////////// -/// CreateNotificationObject -/// This function is used to get notification object from map. If doesn't exists, it create new -/// object as per type of notification. -//////////////////////////////////////////////////////////////////////////////////////////////////// -CNotification *CNotificationManager::CreateNotificationObject(const std::string &f_cnotificationname, - const UI_32 f_uimsglength, - const EFrameworkunifiedNotificationType f_enotificationtype, - const UI_32 f_uidelay) { - FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "+"); - - // pointer of notification object - CNotification *l_pNotification = NULL; - - // iterator to find notification from map of CNotification - Notification_Iterator_Type l_itNotification; - - if (NULL == m_pmNotificationList || NULL == m_pvPersistentList || NULL == m_pvUserPersistentList) { // LCOV_EXCL_START 6: double check, m_pmNotificationList, m_pvPersistentList, m_pvUserPersistentList can't be NULL // NOLINT[whitespace/line_length] - AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert - FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, "map/vector object is NULL"); // LCOV_EXCL_LINE 6: m_pmNotificationList, m_pvPersistentList, m_pvUserPersistentList can't be NULL // NOLINT[whitespace/line_length] - return NULL; - } - // LCOV_EXCL_STOP - - // check if notification already exists - l_itNotification = m_pmNotificationList->find(f_cnotificationname); - - // if exists remove previous entry - if (m_pmNotificationList->end() != l_itNotification) { - FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "Removing previous entry of notification %s from map", f_cnotificationname.c_str()); - m_pmNotificationList->erase(l_itNotification); - } - - switch (f_enotificationtype) { - // if notification is regular notification - case eFrameworkunifiedNotificationVar: { - FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "Regular Notification :: %s", f_cnotificationname.c_str()); - l_pNotification = new(std::nothrow) CRegularNotification(f_cnotificationname, - f_uimsglength); // LCOV_EXCL_BR_LINE 11: unexpected branch // NOLINT[whitespace/line_length] - break; - } - - // if notification is state notification - case eFrameworkunifiedStateVar: { - FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "State Notification :: %s", f_cnotificationname.c_str()); - l_pNotification = new(std::nothrow) CStateNotification(f_cnotificationname, - f_uimsglength); // LCOV_EXCL_BR_LINE 11: unexpected branch // NOLINT[whitespace/line_length] - break; - } - - // if notification is persistence notification - case eFrameworkunifiedPersistedStateVar: { - FRAMEWORKUNIFIEDLOG(ZONE_INFO, __FUNCTION__, "PersistedState Notification :: %s", f_cnotificationname.c_str()); // LCOV_EXCL_BR_LINE 15:marco defined in "native_service/ns_logger_if.h" // NOLINT[whitespace/line_length] - l_pNotification = new(std::nothrow) CStatePersistenceNotification(f_cnotificationname, - f_uimsglength); // LCOV_EXCL_BR_LINE 11: unexpected branch // NOLINT[whitespace/line_length] - - if (NULL != l_pNotification) { // LCOV_EXCL_BR_LINE 5: It's impossible to mock new() function - // insert notification in persistent notification vector - m_pvPersistentList->push_back(f_cnotificationname); - } else { - AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert - FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, "Memory not allocated"); // LCOV_EXCL_LINE 5: It's impossible to mock new() function // NOLINT[whitespace/line_length] - } - - break; - } - - // if notification is user persistence notification - case eFrameworkunifiedPersistedStateUserVar: { - FRAMEWORKUNIFIEDLOG(ZONE_INFO, __FUNCTION__, "PersistedStateUser Notification :: %s", f_cnotificationname.c_str()); // LCOV_EXCL_BR_LINE 15:marco defined in "native_service/ns_logger_if.h" // NOLINT[whitespace/line_length] - l_pNotification = new(std::nothrow) CStatePersistenceUserNotification(f_cnotificationname, - f_uimsglength); // LCOV_EXCL_BR_LINE 11: unexpected branch // NOLINT[whitespace/line_length] - - if (NULL != l_pNotification) { // LCOV_EXCL_BR_LINE 5: It's impossible to mock new() function - // insert notification in user persistent notification vector - m_pvUserPersistentList->push_back(f_cnotificationname); - } else { - AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert - FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, "NULL pointer error"); // LCOV_EXCL_LINE 5: It's impossible to mock new() function // NOLINT[whitespace/line_length] - } - - break; - } - - // if notification is immediate persistence notification - case eFrameworkunifiedImmediatePersistedStateVar: { - FRAMEWORKUNIFIEDLOG(ZONE_INFO, __FUNCTION__, "Immediate PersistedState Notification :: %s", f_cnotificationname.c_str()); // LCOV_EXCL_BR_LINE 15:marco defined in "native_service/ns_logger_if.h" // NOLINT[whitespace/line_length] - l_pNotification = new(std::nothrow) CStateNorPersistenceNotification(f_cnotificationname, - f_uimsglength, - f_uidelay); // LCOV_EXCL_BR_LINE 11: unexpected branch // NOLINT[whitespace/line_length] - break; - } - - default: - break; - } - - if (NULL != l_pNotification) { - // insert notification in notification map - m_pmNotificationList->insert(make_pair(f_cnotificationname, l_pNotification)); - } else { - FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, "Notification object creation failed for %s.", f_cnotificationname.c_str()); // LCOV_EXCL_BR_LINE 15:marco defined in "native_service/ns_logger_if.h" // NOLINT[whitespace/line_length] - } - - FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "-"); - return l_pNotification; -} - -//////////////////////////////////////////////////////////////////////////////////////////////////// -/// SearchNotification -/// This function is used to search whether notification object is present in map or not. -/// If present it sends the reference. -//////////////////////////////////////////////////////////////////////////////////////////////////// -CNotification *CNotificationManager::SearchNotification(const std::string &f_cnotificationname) { - FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "+"); - - CNotification *l_pNotification = NULL; - - // iterator to find notification from map of notifications - Notification_Iterator_Type l_itNotification; - - if (NULL == m_pmNotificationList || f_cnotificationname.empty()) { // LCOV_EXCL_BR_LINE 6: double check, m_pmNotificationList can't be NULL and f_cnotificationname can't be empty // NOLINT[whitespace/line_length] - AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert - FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, "map pointer is NULL"); // LCOV_EXCL_LINE 6: m_pmNotificationList can't be NULL and f_cnotificationname can't be empty // NOLINT[whitespace/line_length] - } else { - // check if this notification's object present in map - l_itNotification = m_pmNotificationList->find(f_cnotificationname); - - // if notification found in map - if (m_pmNotificationList->end() != l_itNotification) { - FRAMEWORKUNIFIEDLOG(ZONE_NPP_INFO, __FUNCTION__, "Notification found in map :: %s", f_cnotificationname.c_str()); // LCOV_EXCL_BR_LINE 15:marco defined in "native_service/ns_logger_if.h" // NOLINT[whitespace/line_length] - - // get the notification object pointer from map - l_pNotification = (*l_itNotification).second; - } else { - FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "Notification not found :: %s", f_cnotificationname.c_str()); - } - } - - FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "-"); - return l_pNotification; -} - -//////////////////////////////////////////////////////////////////////////////////////////////////// -/// SearchPersistenceNotification -/// This function is used to search for the given persistent notification in map. -//////////////////////////////////////////////////////////////////////////////////////////////////// -CStateNotification *CNotificationManager::SearchPersistenceNotification(const std::string &f_cnotificationname) { - FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "+"); - - // pointer of notification object - CNotification *l_pNotification = NULL; - CStateNotification *l_pStateNotification = NULL; - - // search the notification in the map - l_pNotification = SearchNotification(f_cnotificationname); - - if (NULL != l_pNotification) { - if (eFrameworkunifiedPersistedStateVar == l_pNotification->GetNotificationType() || - eFrameworkunifiedPersistedStateUserVar == l_pNotification->GetNotificationType() || - eFrameworkunifiedImmediatePersistedStateVar == l_pNotification->GetNotificationType()) { - l_pStateNotification = static_cast<CStateNotification *>(l_pNotification); - } - } else { - FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, "There is no persistence notification registered with name :: %s", - f_cnotificationname.c_str()); - } - - FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "-"); - return l_pStateNotification; -} - -//////////////////////////////////////////////////////////////////////////////////////////////////// -/// NotificationpersistentserviceServiceOnRegisterEvents -/// This function creates notification object depending on its type and if already created it adds -/// the service name to the list in the notification object. -//////////////////////////////////////////////////////////////////////////////////////////////////// -EFrameworkunifiedStatus CNotificationManager::NotificationpersistentserviceServiceOnRegisterEvents(const std::string &f_cservicename, - const std::string &f_cnotificationname, - const UI_32 f_uimsglength, - const EFrameworkunifiedNotificationType f_enotificationtype, - const UI_32 f_uidelay) { - EFrameworkunifiedStatus l_estatus = eFrameworkunifiedStatusOK; - FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "+"); - - CNotification *l_pNotification = NULL; - - if (f_cservicename.empty() || f_cnotificationname.empty()) { - l_estatus = eFrameworkunifiedStatusInvldParam; - } else { - // get the notification object from map or create new object - l_pNotification = SearchNotification(f_cnotificationname); - - // if new notification is registered - if (NULL == l_pNotification) { - FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "Create new notification object :: %s", f_cnotificationname.c_str()); - - // create the new notification object depending on type and insert in map and vector - l_pNotification = CreateNotificationObject(f_cnotificationname, - f_uimsglength, - f_enotificationtype, - f_uidelay); - - if (NULL != l_pNotification) { - FRAMEWORKUNIFIEDLOG(ZONE_NPP_INFO, __FUNCTION__, "Set Notification publisher %s for notification %s", f_cservicename.c_str(), - f_cnotificationname.c_str()); // LCOV_EXCL_BR_LINE 15:marco defined in "native_service/ns_logger_if.h" - - // set publisher name - l_estatus = l_pNotification->SetEventPublisher(f_cservicename); - } - } else { // if notification object already exists - EFrameworkunifiedNotificationType l_eNotificationType = l_pNotification->GetNotificationType(); - - // <<notification type is eFrameworkunifiedUnknown - // if some service had already subscribed to the notification before registering it.>> - if (eFrameworkunifiedUnknown == l_eNotificationType) { - // creates new notification object depending on the type and insert it in notification map - l_estatus = ChangeNotificationType(l_pNotification, f_cservicename, f_cnotificationname, f_uimsglength, - f_enotificationtype, f_uidelay); - - // delete the old notification object - delete l_pNotification; // LCOV_EXCL_BR_LINE 11: unexpected branch - l_pNotification = NULL; - } else { // notification is already registered by some service - // update the notification property, if re-registered by the same publisher - if (f_cservicename == l_pNotification->GetPublisherName() || // if re-register by service - "" == l_pNotification->GetPublisherName()) { // if previously unregistered by service - // if type is same just update the length of notification data - if (l_eNotificationType == f_enotificationtype) { - if (l_pNotification->GetMaxMessageSize() != f_uimsglength) { - FRAMEWORKUNIFIEDLOG(ZONE_INFO, __FUNCTION__, - "Updating max size of notification %s to %d from %d", f_cnotificationname.c_str(), - f_uimsglength, l_pNotification->GetMaxMessageSize()); - l_estatus = l_pNotification->ResetMaxMessageSize(f_uimsglength); - } - - if ("" == l_pNotification->GetPublisherName()) { - FRAMEWORKUNIFIEDLOG(ZONE_INFO, __FUNCTION__, - "Updating publisher name of notification %s to %s from %s", f_cservicename.c_str(), - f_cnotificationname.c_str(), l_pNotification->GetPublisherName().c_str()); - l_pNotification->SetEventPublisher(f_cservicename); - } - } else if (eFrameworkunifiedImmediatePersistedStateVar != l_eNotificationType && - eFrameworkunifiedImmediatePersistedStateVar != f_enotificationtype) { - // else create new notification object depending on the type and delete the old one - // note: do not change immediate notification type - FRAMEWORKUNIFIEDLOG(ZONE_INFO, __FUNCTION__, "Changing type of notfn %s from %d to %d", f_cnotificationname.c_str(), - l_eNotificationType, f_enotificationtype); - - std::vector<std::string>::iterator l_itNotificationName; - - // remove the notification name from the persistent list of notification(if any) - if (eFrameworkunifiedPersistedStateVar == l_eNotificationType) { - l_itNotificationName = find(m_pvPersistentList->begin(), m_pvPersistentList->end(), f_cnotificationname); - - if (m_pvPersistentList->end() != l_itNotificationName) { - m_pvPersistentList->erase(l_itNotificationName); - } - } else if (eFrameworkunifiedPersistedStateUserVar == l_eNotificationType) { - l_itNotificationName = find(m_pvUserPersistentList->begin(), - m_pvUserPersistentList->end(), - f_cnotificationname); - - if (m_pvUserPersistentList->end() != l_itNotificationName) { - m_pvUserPersistentList->erase(l_itNotificationName); - } - } else { - // do nothing - } - - // creates new notification object depending on the new type and insert it in map and delete the old one - l_estatus = ChangeNotificationType(l_pNotification, f_cservicename, f_cnotificationname, f_uimsglength, - f_enotificationtype, f_uidelay); - - // delete the old notification object - delete l_pNotification; - l_pNotification = NULL; - } else { - // do nothing - } - } else { - FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, "Notfn: %s already registered by %s, skipping register request by %s", - f_cnotificationname.c_str(), l_pNotification->GetPublisherName().c_str(), f_cservicename.c_str()); - - l_estatus = eFrameworkunifiedStatusFail; - } - } - } - } - - FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "-"); - return l_estatus; -} - -//////////////////////////////////////////////////////////////////////////////////////////////// -/// ChangeNotificationType -/// This function creates new notification object depending on the type and replaces the old one. -//////////////////////////////////////////////////////////////////////////////////////////////// -EFrameworkunifiedStatus CNotificationManager::ChangeNotificationType(CNotification *f_pnotification, - const std::string &f_cservicename, - const std::string &f_cnotificationname, - const UI_32 f_uimsglength, - const EFrameworkunifiedNotificationType f_enotificationtype, - const UI_32 f_uidelay) { - EFrameworkunifiedStatus l_estatus = eFrameworkunifiedStatusOK; - FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "+"); - - CNotification *l_pNewNotification = NULL; - - if (NULL != f_pnotification) { // LCOV_EXCL_BR_LINE 6: f_pnotification can't be NULL - FRAMEWORKUNIFIEDLOG(ZONE_NPP_INFO, __FUNCTION__, "Create New Notification :: %s", f_cnotificationname.c_str()); // LCOV_EXCL_BR_LINE 15:marco defined in "native_service/ns_logger_if.h" // NOLINT[whitespace/line_length] - - // create new notification object as per notification type - l_pNewNotification = CreateNotificationObject(f_cnotificationname, f_uimsglength, f_enotificationtype, f_uidelay); - - if (NULL != l_pNewNotification) { - l_estatus = l_pNewNotification->SetEventPublisher(f_cservicename); - - // assign subscribers list to newly created notification - l_pNewNotification->SetNewSubscribersList(f_pnotification); - } else { - FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, - "Error creating notification object for notification:%s", - f_cnotificationname.c_str()); // LCOV_EXCL_BR_LINE 15:marco defined in "native_service/ns_logger_if.h" - l_estatus = eFrameworkunifiedStatusNullPointer; - } - } else { - AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert - l_estatus = eFrameworkunifiedStatusNullPointer; // LCOV_EXCL_LINE 6: f_pnotification can't be NULL - } - - FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "-"); - return l_estatus; -} - -//////////////////////////////////////////////////////////////////////////////////////////////////// -/// NotificationpersistentserviceServiceOnUnRegisterEvents -/// This function removes the name of the service from the notification object. -//////////////////////////////////////////////////////////////////////////////////////////////////// -EFrameworkunifiedStatus CNotificationManager::NotificationpersistentserviceServiceOnUnRegisterEvents(const std::string &f_cservicename, - const std::string &f_cnotificationname) { - EFrameworkunifiedStatus l_estatus = eFrameworkunifiedStatusOK; - FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "+"); - - CNotification *l_pNotification = NULL; - std::vector<std::string> *l_pvPersistentList = NULL; - - // iterator to find notification from map of notifications - Notification_Iterator_Type l_itNotification; - - if (f_cservicename.empty() || f_cnotificationname.empty()) { - l_estatus = eFrameworkunifiedStatusInvldParam; - } else { - // check if this notification's object present in map - l_itNotification = m_pmNotificationList->find(f_cnotificationname); - - // if notification found in map - if (m_pmNotificationList->end() != l_itNotification) { - FRAMEWORKUNIFIEDLOG(ZONE_NPP_INFO, __FUNCTION__, "Notification found in map"); // LCOV_EXCL_BR_LINE 15:marco defined in "native_service/ns_logger_if.h" // NOLINT[whitespace/line_length] - - // get the notification object pointer from map - l_pNotification = (*l_itNotification).second; - - if (NULL != l_pNotification) { // LCOV_EXCL_BR_LINE 6: f_pnotification can't be NULL - if (eFrameworkunifiedPersistedStateUserVar == l_pNotification->GetNotificationType()) { - l_pvPersistentList = m_pvUserPersistentList; - } else if (eFrameworkunifiedPersistedStateVar == l_pNotification->GetNotificationType()) { - l_pvPersistentList = m_pvPersistentList; - } - - // reset the publisher name - l_estatus = l_pNotification->ResetEventPublisher(f_cservicename); - - if (eFrameworkunifiedStatusOK == l_estatus) { - // if no other service is subscribed to this notification and no service is registered - // to this notification remove the notification object from map - if (!l_pNotification->IsServiceRegistered() && - l_pNotification->IsSubscribersListEmpty()) { - FRAMEWORKUNIFIEDLOG(ZONE_NPP_INFO, __FUNCTION__, "Deleting Notification Object"); // LCOV_EXCL_BR_LINE 15:marco defined in "native_service/ns_logger_if.h" // NOLINT[whitespace/line_length] - - // delete the notification - delete l_pNotification; // LCOV_EXCL_BR_LINE 11: unexpected branch - l_pNotification = NULL; - - m_pmNotificationList->erase(l_itNotification); - - if (l_pvPersistentList) { - // find the notification in vector - std::vector<std::string>::iterator l_itNotificationName; - - l_itNotificationName = find(l_pvPersistentList->begin(), - l_pvPersistentList->end(), - f_cnotificationname); - - if (l_pvPersistentList->end() != l_itNotificationName) { - FRAMEWORKUNIFIEDLOG(ZONE_INFO, __FUNCTION__, "Deleting Notification name from vector"); - l_pvPersistentList->erase(l_itNotificationName); - } - } else { - FRAMEWORKUNIFIEDLOG(ZONE_NPP_INFO, __FUNCTION__, "Persistent list empty"); // LCOV_EXCL_BR_LINE 15:marco defined in "native_service/ns_logger_if.h" // NOLINT[whitespace/line_length] - } - } else { - FRAMEWORKUNIFIEDLOG(ZONE_NPP_INFO, __FUNCTION__, "Services still registered or subscriber list empty"); // LCOV_EXCL_BR_LINE 15:marco defined in "native_service/ns_logger_if.h" // NOLINT[whitespace/line_length] - } - } else { - FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, "Notification %s is not registered by service %s", - f_cnotificationname.c_str(), f_cservicename.c_str()); // LCOV_EXCL_BR_LINE 15:marco defined in "native_service/ns_logger_if.h" // NOLINT[whitespace/line_length] - } - } else { - // LCOV_EXCL_START 6: f_pnotification can't be NULL - AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert - FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, "Notification %s not registered", f_cnotificationname.c_str()); - - l_estatus = eFrameworkunifiedStatusNullPointer; - // LCOV_EXCL_STOP - } - } else { - FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, "Notification %s not found.", f_cnotificationname.c_str()); // LCOV_EXCL_BR_LINE 15:marco defined in "native_service/ns_logger_if.h" // NOLINT[whitespace/line_length] - - l_estatus = eFrameworkunifiedStatusFail; - } - } - - FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "-"); - return l_estatus; -} - -//////////////////////////////////////////////////////////////////////////////////////////////////// -/// NotificationpersistentserviceServiceOnPublishEvent -/// This function stores the published data in the notification object in case of state and -/// persistent notification. -//////////////////////////////////////////////////////////////////////////////////////////////////// -EFrameworkunifiedStatus CNotificationManager::NotificationpersistentserviceServiceOnPublishEvent(const std::string &f_cservicename, - const std::string &f_cnotificationname, - PVOID f_pmessage, - const UI_32 f_uimsgsize) { - EFrameworkunifiedStatus l_estatus = eFrameworkunifiedStatusOK; - FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "+"); - - CNotification *l_pNotification = NULL; - - if (f_cservicename.empty() || f_cnotificationname.empty()) { // LCOV_EXCL_BR_LINE 6: f_cservicename and f_cnotificationname can't be empty // NOLINT[whitespace/line_length] - AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert - l_estatus = eFrameworkunifiedStatusInvldParam; // LCOV_EXCL_LINE 6: f_cservicename and f_cnotificationname can't be empty - } else { - // get the notification object from map - l_pNotification = SearchNotification(f_cnotificationname); - - if (NULL != l_pNotification) { - // publish the notification - if (eFrameworkunifiedStatusOK != (l_estatus = l_pNotification->Publish(f_cservicename, - f_pmessage, - f_uimsgsize))) { - FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, "Error publishing notification %s published by %s, status: %d", - f_cnotificationname.c_str(), f_cservicename.c_str(), l_estatus); // LCOV_EXCL_BR_LINE 15:marco defined in "native_service/ns_logger_if.h" // NOLINT[whitespace/line_length] - } - } else { - FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, "Notification not registered"); // LCOV_EXCL_BR_LINE 15:marco defined in "native_service/ns_logger_if.h" // NOLINT[whitespace/line_length] - - l_estatus = eFrameworkunifiedStatusNullPointer; - } - } - - - FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "-"); - return l_estatus; -} - -//////////////////////////////////////////////////////////////////////////////////////////////////// -/// NotificationpersistentserviceServiceOnSubscribeToEvent -/// This function adds the name of the application to subscribers list in notification object. -//////////////////////////////////////////////////////////////////////////////////////////////////// -EFrameworkunifiedStatus CNotificationManager::NotificationpersistentserviceServiceOnSubscribeToEvent(const std::string &f_csubscribername, - const std::string &f_cnotificationname) { - EFrameworkunifiedStatus l_estatus = eFrameworkunifiedStatusOK; - FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "+"); - - // iterator to find notification from map of notifications - Notification_Iterator_Type l_itNotification; - - CNotification *l_pNotification = NULL; - - if (f_cnotificationname.empty() || f_csubscribername.empty()) { - l_estatus = eFrameworkunifiedStatusInvldParam; - } else if (NULL == m_pmNotificationList) { // LCOV_EXCL_BR_LINE 6 m_pmNotificationList can't be NULL - // LCOV_EXCL_START 6: m_pmNotificationList can't be NULL - AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert - FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, "map pointer is NULL"); - l_estatus = eFrameworkunifiedStatusNullPointer; - // LCOV_EXCL_STOP - } else { - // get the notification object from map or create new object - l_pNotification = SearchNotification(f_cnotificationname); - - if (NULL == l_pNotification) { - FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "CNotification object created for %s", f_cnotificationname.c_str()); - - l_pNotification = new(std::nothrow) CNotification(f_cnotificationname, 0); // LCOV_EXCL_BR_LINE 11: unexpected branch // NOLINT[whitespace/line_length] - - m_pmNotificationList->insert(make_pair(f_cnotificationname, l_pNotification)); - } - - if (NULL != l_pNotification) { // LCOV_EXCL_BR_LINE 6: double check, l_pNotification can't be NULL - // add subscribers name in subscribers list of notification - l_estatus = l_pNotification->AddEventReciever(f_csubscribername); - } else { - AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert - FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, "Memory not allocated for l_pNotification"); // LCOV_EXCL_LINE 6: double check, l_pNotification can't be NULL // NOLINT[whitespace/line_length] - } - } - - FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "-"); - return l_estatus; -} - -//////////////////////////////////////////////////////////////////////////////////////////////////// -/// NotificationpersistentserviceServiceOnUnSubscribeFromEvent -/// This function removes the name of the application from the subscribers list in notification object. -//////////////////////////////////////////////////////////////////////////////////////////////////// -EFrameworkunifiedStatus CNotificationManager::NotificationpersistentserviceServiceOnUnSubscribeFromEvent(const std::string &f_csubscribername, - const std::string &f_cnotificationname) { - EFrameworkunifiedStatus l_estatus = eFrameworkunifiedStatusOK; - FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "+"); - - CNotification *l_pNotification = NULL; - - // iterator to find notification from map of notifications - Notification_Iterator_Type l_itNotificationType; - - std::vector<std::string> *l_pvPersistentList = NULL; - - if (f_cnotificationname.empty() || f_csubscribername.empty()) { - l_estatus = eFrameworkunifiedStatusInvldParam; - } else if (NULL == m_pmNotificationList) { // LCOV_EXCL_BR_LINE 6: m_pmNotificationList can't be NULL - // LCOV_EXCL_START 6: m_pmNotificationList can't be NULL - AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert - FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, "Notification list pointer is NULL"); - l_estatus = eFrameworkunifiedStatusNullPointer; - // LCOV_EXCL_STOP - } else { - // check if this notification's object present in map - l_itNotificationType = m_pmNotificationList->find(f_cnotificationname); - - // if notification found in map - if (m_pmNotificationList->end() != l_itNotificationType) { - FRAMEWORKUNIFIEDLOG(ZONE_NPP_INFO, __FUNCTION__, "Notification %s found in map", f_cnotificationname.c_str()); // LCOV_EXCL_BR_LINE 15:marco defined in "native_service/ns_logger_if.h" // NOLINT[whitespace/line_length] - - l_pNotification = (*l_itNotificationType).second; - - if (NULL != l_pNotification) { // LCOV_EXCL_BR_LINE 6: l_pNotification can't be NULL - if (eFrameworkunifiedPersistedStateUserVar == l_pNotification->GetNotificationType()) { - l_pvPersistentList = m_pvUserPersistentList; - } else if (eFrameworkunifiedPersistedStateVar == l_pNotification->GetNotificationType()) { - l_pvPersistentList = m_pvPersistentList; - } - - // removes the subscribers name from subscribers list of notification - l_estatus = l_pNotification->DeleteEventReciever(f_csubscribername); - - // if no other service is subscribed to this notification and no service is registered - // to this notification remove the notification object from map - if (!l_pNotification->IsServiceRegistered() && - l_pNotification->IsSubscribersListEmpty()) { - FRAMEWORKUNIFIEDLOG(ZONE_INFO, __FUNCTION__, "Deleting Notification Object from map"); // LCOV_EXCL_BR_LINE 15:marco defined in "native_service/ns_logger_if.h" // NOLINT[whitespace/line_length] - - // delete notification object from map - delete l_pNotification; // LCOV_EXCL_BR_LINE 11: unexpected branch - l_pNotification = NULL; - - m_pmNotificationList->erase(l_itNotificationType); - - if (l_pvPersistentList) { - // find notification in vector - std::vector<std::string>::iterator l_itNotificationName; - l_itNotificationName = find(l_pvPersistentList->begin(), - l_pvPersistentList->end(), - f_cnotificationname); - - if (l_pvPersistentList->end() != l_itNotificationName) { - FRAMEWORKUNIFIEDLOG(ZONE_INFO, __FUNCTION__, "Deleting Notification from vector"); // LCOV_EXCL_BR_LINE 15:marco defined in "native_service/ns_logger_if.h" // NOLINT[whitespace/line_length] - l_pvPersistentList->erase(l_itNotificationName); - } - } else { - FRAMEWORKUNIFIEDLOG(ZONE_WARN, __FUNCTION__, "Persistent list Empty."); // LCOV_EXCL_BR_LINE 15:marco defined in "native_service/ns_logger_if.h" // NOLINT[whitespace/line_length] - } - } - } else { - // LCOV_EXCL_START 6: l_pNotification can't be NULL - AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert - FRAMEWORKUNIFIEDLOG(ZONE_WARN, __FUNCTION__, "Notification %s not registered", f_cnotificationname.c_str()); - l_estatus = eFrameworkunifiedStatusNullPointer; - // LCOV_EXCL_STOP - } - - } else { - FRAMEWORKUNIFIEDLOG(ZONE_WARN, __FUNCTION__, "Notification %s not found.", f_cnotificationname.c_str()); // LCOV_EXCL_BR_LINE 15:marco defined in "native_service/ns_logger_if.h" // NOLINT[whitespace/line_length] - l_estatus = eFrameworkunifiedStatusFail; - } - } - - FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "-"); - return l_estatus; -} - -//////////////////////////////////////////////////////////////////////////////////////////////////// -/// NPGetPersistentNotificationData -/// -//////////////////////////////////////////////////////////////////////////////////////////////////// -EFrameworkunifiedStatus CNotificationManager::NPGetPersistentNotificationData(const std::string &f_cnotificationname, - PVOID f_pnotificationdata, - const UI_32 f_uidatasize) { - EFrameworkunifiedStatus l_estatus = eFrameworkunifiedStatusOK; - FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "+"); - - CNotification *l_pNotification = NULL; - CStateNotification *l_pStateNotification = NULL; - const CPersistentData *l_pPersistentData = NULL; - - if (f_cnotificationname.empty() || NULL == f_pnotificationdata) { // LCOV_EXCL_BR_LINE 6: f_pnotificationdata can't be NULL and f_cnotificationname can't be empty // NOLINT[whitespace/line_length] - AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert - l_estatus = eFrameworkunifiedStatusInvldParam; // LCOV_EXCL_LINE 6: f_pnotificationdata can't be NULL and f_cnotificationname can't be empty // NOLINT[whitespace/line_length] - } else { - l_pNotification = SearchNotification(f_cnotificationname); - - if (NULL != l_pNotification) { // LCOV_EXCL_BR_LINE 200: f_cnotificationname must be NTFY_NPPService_UserChange, NTFY_NPPService_UserChange must be registered in FrameworkunifiedOnEntry() by itself. // NOLINT[whitespace/line_length] - const EFrameworkunifiedNotificationType l_eNotificationType = l_pNotification->GetNotificationType(); - - if (eFrameworkunifiedStateVar == l_eNotificationType || - eFrameworkunifiedPersistedStateVar == l_eNotificationType || - eFrameworkunifiedPersistedStateUserVar == l_eNotificationType || - eFrameworkunifiedImmediatePersistedStateVar == l_eNotificationType) { // LCOV_EXCL_BR_LINE 200: NTFY_NPPService_UserChange's type is eFrameworkunifiedPersistedStateVar. // NOLINT[whitespace/line_length] - l_pStateNotification = static_cast<CStateNotification *>(l_pNotification); - - l_pPersistentData = l_pStateNotification->GetPersistentData(); - - if (NULL != l_pPersistentData) { - if (f_uidatasize >= l_pPersistentData->m_uiMsgSize) { - FRAMEWORKUNIFIEDLOG(ZONE_INFO, __FUNCTION__, "Sending Data Size %d", l_pPersistentData->m_uiMsgSize); - - if (NULL != l_pPersistentData->m_pMessage) { - std::memcpy(f_pnotificationdata, l_pPersistentData->m_pMessage, l_pPersistentData->m_uiMsgSize); - } else { - FRAMEWORKUNIFIEDLOG(ZONE_INFO, __FUNCTION__, "Notification data is NULL"); - } - } else { - FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, - "Smaller buffer size %d is received for notification data of size %d", f_uidatasize, - l_pPersistentData->m_uiMsgSize); - } - } else { - l_estatus = eFrameworkunifiedStatusFail; - FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, - "Persistent data object is NULL for notification %s", f_cnotificationname.c_str()); // LCOV_EXCL_BR_LINE 15:marco defined in "native_service/ns_logger_if.h" // NOLINT[whitespace/line_length] - } - } else { - // LCOV_EXCL_START 200: NTFY_NPPService_UserChange's type is eFrameworkunifiedPersistedStateVar. - AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert - l_estatus = eFrameworkunifiedStatusFail; - FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, "Get notification data failed, Notification %s is registered as type %d", - f_cnotificationname.c_str(), l_eNotificationType); - // LCOV_EXCL_STOP - } - } else { - // LCOV_EXCL_START 200: f_cnotificationname must be NTFY_NPPService_UserChange, NTFY_NPPService_UserChange must be registered in FrameworkunifiedOnEntry() by itself. // NOLINT[whitespace/line_length] - AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert - l_estatus = eFrameworkunifiedStatusFail; - FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, "Notification %s not found.", f_cnotificationname.c_str()); - // LCOV_EXCL_STOP - } - } - - FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "-"); - return l_estatus; -} - -//////////////////////////////////////////////////////////////////////////////////////////////////// -/// NotificationpersistentserviceServiceOnGetPersistentData -/// This function is used to get the persistent data stored related to notification. -//////////////////////////////////////////////////////////////////////////////////////////////////// -EFrameworkunifiedStatus CNotificationManager::NotificationpersistentserviceServiceOnGetPersistentData(const std::string &f_cnotificationname, - const std::string &f_creceivername) { - EFrameworkunifiedStatus l_estatus = eFrameworkunifiedStatusOK; - FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "+"); - - CNotification *l_pNotification = NULL; - CStateNotification *l_pStateNotification = NULL; - const CPersistentData *l_pPersistentData = NULL; - - if (f_cnotificationname.empty() || f_creceivername.empty()) { // LCOV_EXCL_BR_LINE 6: f_creceivername can't be NULL and f_cnotificationname can't be empty // NOLINT[whitespace/line_length] - // LCOV_EXCL_START 6: f_creceivername can't be NULL and f_cnotificationname can't be empty - AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert - l_estatus = eFrameworkunifiedStatusInvldParam; - // LCOV_EXCL_STOP - } else { - // open the receiver message queue - HANDLE l_hReceiverMq = McOpenSender(f_creceivername.c_str()); - - if (NULL == l_hReceiverMq) { // LCOV_EXCL_BR_LINE 4: NSFW error case - // LCOV_EXCL_START 4: NSFW error case. - AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert - // catastrophic failure! - FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, "Failed to open MessageQ %s ", f_creceivername.c_str()); - l_estatus = eFrameworkunifiedStatusFail; - // LCOV_EXCL_STOP - } else { - // get the notification object from map or create new object - l_pNotification = SearchNotification(f_cnotificationname); - - if (NULL != l_pNotification) { - l_pStateNotification = static_cast<CStateNotification *>(l_pNotification); - - if (NULL != l_pStateNotification) { // LCOV_EXCL_BR_LINE 5: fail safe for static_cast<CStateNotification *> - l_pPersistentData = l_pStateNotification->GetPersistentData(); - - if (NULL != l_pPersistentData) { - FRAMEWORKUNIFIEDLOG(ZONE_INFO, __FUNCTION__, "Sending Data Size %d", l_pPersistentData->m_uiMsgSize); - - if (NULL == l_pPersistentData->m_pMessage) { - FRAMEWORKUNIFIEDLOG(ZONE_INFO, __FUNCTION__, "Sending Data is NULL"); - } - - // sent the notification data to requester - l_estatus = McSend(l_hReceiverMq, - AppName, - NPS_GET_PERS_DATA_ACK, - l_pPersistentData->m_uiMsgSize, - l_pPersistentData->m_pMessage); - FRAMEWORKUNIFIEDLOG(ZONE_PRD_INFO2, __FUNCTION__, "Persistent data found for notification %s. " - "Sent NPS_GET_PERS_DATA_ACK to %s. Status: %d." - , f_cnotificationname.c_str(), f_creceivername.c_str(), l_estatus); - } else { // In case of failure, we send back a failure ACK - l_estatus = eFrameworkunifiedStatusFail; - FRAMEWORKUNIFIEDLOG(ZONE_WARN, __FUNCTION__, "No persistent data found for notification %s. " - , f_cnotificationname.c_str()); - } - } - } else { - FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, "Notification %s not found", f_cnotificationname.c_str()); // LCOV_EXCL_BR_LINE 15:marco defined in "native_service/ns_logger_if.h" // NOLINT[whitespace/line_length] - l_estatus = eFrameworkunifiedStatusInvldParam; - } - // Close the mq handle - McClose(l_hReceiverMq); - l_hReceiverMq = NULL; - } - } - - FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "-"); - return l_estatus; -} - -//////////////////////////////////////////////////////////////////////////////////////////////////// -/// NotificationpersistentserviceGetPersistentNotificationData -/// This function is used to get the list of persistent notifications and data associated with it. -//////////////////////////////////////////////////////////////////////////////////////////////////// -EFrameworkunifiedStatus CNotificationManager::NotificationpersistentserviceGetPersistentNotificationData(std::vector<CNotificationsToPersist *> - *f_pvpersistnotification, - const EFrameworkunifiedNotificationType f_enotificationtype, - UI_32 f_uinotificationpersistentservicepersistcategoryflag) { - EFrameworkunifiedStatus l_estatus = eFrameworkunifiedStatusOK; - FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "+"); - - CNotification *l_pNotification = NULL; - CStateNotification *l_pStateNotification = NULL; - CStatePersistenceNotification *l_pStatePersistenceNotification = NULL; - - std::string l_cNotificationName = ""; - CNotificationsToPersist *l_pNotificationsToPersist = NULL; - const CPersistentData *l_pPData = NULL; - - std::vector<std::string> *l_pvPersistentList = NULL; - - // iterator for retrieving notifications from map of notifications - Notification_Iterator_Type l_itNotification; - - if (eFrameworkunifiedPersistedStateUserVar == f_enotificationtype) { - l_pvPersistentList = m_pvUserPersistentList; - } else if (eFrameworkunifiedPersistedStateVar == f_enotificationtype) { // LCOV_EXCL_BR_LINE 6: f_enotificationtype must be eFrameworkunifiedPersistedStateUserVar or eFrameworkunifiedPersistedStateVar // NOLINT[whitespace/line_length] - l_pvPersistentList = m_pvPersistentList; - } - - // copy all the notification data in map to received vector - if (NULL != f_pvpersistnotification && NULL != l_pvPersistentList) { // LCOV_EXCL_BR_LINE 6: f_pvpersistnotification and l_pvPersistentList can't be null // NOLINT[whitespace/line_length] - for (UI_32 l_uiCount = 0; - l_uiCount < l_pvPersistentList->size(); - l_uiCount++) { - // get the persistent notification name from vector - l_cNotificationName = l_pvPersistentList->at(l_uiCount); - - // search for notification in map - l_itNotification = m_pmNotificationList->find(l_cNotificationName); - - // notification found in map - if (m_pmNotificationList->end() != l_itNotification) { - FRAMEWORKUNIFIEDLOG(ZONE_INFO, __FUNCTION__, "Persistent Notification: %s", l_cNotificationName.c_str()); // LCOV_EXCL_BR_LINE 15:marco defined in "native_service/ns_logger_if.h" // NOLINT[whitespace/line_length] - - // get notification object from map - l_pNotification = (*l_itNotification).second; - - if (NULL != l_pNotification) { // LCOV_EXCL_BR_LINE 6: l_pNotification can't be NULL - if (eFrameworkunifiedPersistedStateVar == f_enotificationtype) { - l_pStatePersistenceNotification = static_cast<CStatePersistenceNotification *>(l_pNotification); - - // get the notification's default data - if ((eFrameworkunifiedUserData == l_pStatePersistenceNotification->GetPersistentCategory() && - (f_uinotificationpersistentservicepersistcategoryflag & eFrameworkunifiedUserData)) || - (eFrameworkunifiedFactoryData == l_pStatePersistenceNotification->GetPersistentCategory() && - (f_uinotificationpersistentservicepersistcategoryflag & eFrameworkunifiedFactoryData)) || - (eFrameworkunifiedFactoryCustomerData == l_pStatePersistenceNotification->GetPersistentCategory() && - (f_uinotificationpersistentservicepersistcategoryflag & eFrameworkunifiedFactoryCustomerData)) || - (eFrameworkunifiedDealerData == l_pStatePersistenceNotification->GetPersistentCategory() && - (f_uinotificationpersistentservicepersistcategoryflag & eFrameworkunifiedDealerData))) { - l_pPData = l_pStatePersistenceNotification->GetDefaultPersistentData(); - } else { - l_pStateNotification = l_pStatePersistenceNotification; - - // get the published notification data - if (l_pStateNotification->IsPublished()) { - l_pPData = l_pStateNotification->GetPersistentData(); - } else { - FRAMEWORKUNIFIEDLOG(ZONE_INFO, __FUNCTION__, "Notification not published"); - } - } - } else { - l_pStateNotification = static_cast<CStateNotification *>(l_pNotification); - - // if not to reset userdata - if (0 == (f_uinotificationpersistentservicepersistcategoryflag & eFrameworkunifiedUserData)) { - if (l_pStateNotification->IsPublished()) { - l_pPData = l_pStateNotification->GetPersistentData(); - } else { - FRAMEWORKUNIFIEDLOG(ZONE_INFO, __FUNCTION__, "Notification not published"); - } - } - } - - if ((NULL != l_pStateNotification) && (NULL != l_pPData)) { - l_pNotificationsToPersist = CreateNotificationObjectToPersist(l_pStateNotification, l_pPData); // LCOV_EXCL_BR_LINE 11: unexpected branch // NOLINT[whitespace/line_length] - - // insert the persistent data in map - f_pvpersistnotification->push_back(l_pNotificationsToPersist); // LCOV_EXCL_BR_LINE 11: unexpected branch - - l_pPData = NULL; - } else { - FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, "no data is stored in notification %s", l_cNotificationName.c_str()); // LCOV_EXCL_BR_LINE 15:marco defined in "native_service/ns_logger_if.h" // NOLINT[whitespace/line_length] - } - } else { - AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert - FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, "Notification object is NULL for %s", l_cNotificationName.c_str()); // LCOV_EXCL_LINE 6: l_pNotification can't be NULL // NOLINT[whitespace/line_length] - } - } else { - FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, "Non Persistent Notification: %s", l_cNotificationName.c_str()); - } - } - } else { - AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert - l_estatus = eFrameworkunifiedStatusNullPointer; // LCOV_EXCL_LINE 6: f_pvpersistnotification and l_pvPersistentList can't be null // NOLINT[whitespace/line_length] - } - - FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "-"); - return l_estatus; -} - -//////////////////////////////////////////////////////////////////////////////////////////////////// -/// CreateNotificationObjectToPersist -/// Creates the CNotificationsToPersist object from notification object and the persistent data. -//////////////////////////////////////////////////////////////////////////////////////////////////// -CNotificationsToPersist *CNotificationManager::CreateNotificationObjectToPersist(CStateNotification - *f_pStateNotification, - const CPersistentData *f_pdata) { - FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "+"); - - CNotificationsToPersist *l_pNotificationsToPersist = NULL; - CPersistentData *l_pData = NULL; - - if (NULL != f_pStateNotification && NULL != f_pdata) { // LCOV_EXCL_BR_LINE 6: f_pStateNotification and f_pdata can't be NULL // NOLINT[whitespace/line_length] - if (f_pStateNotification->GetMaxMessageSize() >= f_pdata->m_uiMsgSize) { - l_pNotificationsToPersist = new(std::nothrow) CNotificationsToPersist(); // LCOV_EXCL_BR_LINE 11: unexpected branch // NOLINT[whitespace/line_length] - - if (NULL != l_pNotificationsToPersist) { // LCOV_EXCL_BR_LINE 5: It's impossible to mock new() function - l_pNotificationsToPersist->m_pPersistentData = new(std::nothrow) CPersistentData(); // LCOV_EXCL_BR_LINE 11: unexpected branch // NOLINT[whitespace/line_length] - l_pData = l_pNotificationsToPersist->m_pPersistentData; - - if (NULL != l_pData) { // LCOV_EXCL_BR_LINE 5: It's impossible to mock new() function - l_pNotificationsToPersist->m_cNotificationName = f_pStateNotification->GetNotificationName(); - l_pNotificationsToPersist->m_uiMaxMsgLength = f_pStateNotification->GetMaxMessageSize(); - l_pNotificationsToPersist->m_ePersistentType = f_pStateNotification->GetNotificationType(); - - if (eFrameworkunifiedPersistedStateVar == l_pNotificationsToPersist->m_ePersistentType) { - l_pNotificationsToPersist->m_ePersistCategory = (static_cast<CStatePersistenceNotification *> - (f_pStateNotification))->GetPersistentCategory(); - } - - l_pNotificationsToPersist->m_cPublisherName = f_pStateNotification->GetPublisherName(); - - l_pData->m_uiMsgSize = f_pdata->m_uiMsgSize; - l_pData->m_pMessage = new(std::nothrow) CHAR[l_pNotificationsToPersist->m_uiMaxMsgLength]; - - if (NULL != l_pData->m_pMessage) { // LCOV_EXCL_BR_LINE 5: It's impossible to mock new() function - std::memset(l_pData->m_pMessage, 0, l_pNotificationsToPersist->m_uiMaxMsgLength); - std::memcpy(l_pData->m_pMessage, f_pdata->m_pMessage, f_pdata->m_uiMsgSize); - } - } else { - AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert - FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, "memory not allocated for l_pNotificationsToPersist"); // LCOV_EXCL_LINE 5: It's impossible to mock new() function // NOLINT[whitespace/line_length] - } - } - } else { - FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, - "Error persisting notfn, Data size of notification %s is %d greater than max registered size %d", - f_pStateNotification->GetNotificationName().c_str(), - f_pdata->m_uiMsgSize, f_pStateNotification->GetMaxMessageSize()); - } - } else { - AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert - FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, "Invalid parameter received"); // LCOV_EXCL_LINE 6: f_pStateNotification and f_pdata can't be NULL // NOLINT[whitespace/line_length] - } - - FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "-"); - return l_pNotificationsToPersist; -} - -//////////////////////////////////////////////////////////////////////////////////////////////////// -/// NotificationpersistentserviceSetPersistentNotificationData -/// This function is used to create the persistent notifications object and fill the data related -/// with it on system load. -//////////////////////////////////////////////////////////////////////////////////////////////////// -EFrameworkunifiedStatus CNotificationManager::NotificationpersistentserviceSetPersistentNotificationData(std::vector<CNotificationsToPersist *> - *f_pvpersistnotification) { - EFrameworkunifiedStatus l_estatus = eFrameworkunifiedStatusOK; - FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "+"); - - CStateNotification *l_pNotification = NULL; - CNotificationsToPersist *l_pNotificationsToPersist = NULL; - - std::vector<std::string> *l_pvPersistentList = NULL; - - Persistent_Iterator_Type l_itPersistentData; - - // store all the notification data received in vector to map of CNotification and to vector of - // persistent notification in case of persistent and user persistent notification - if (NULL != f_pvpersistnotification) { // LCOV_EXCL_BR_LINE 6: double check, f_pvpersistnotification can't be NULL - for (UI_32 l_uiCount = 0; - l_uiCount < f_pvpersistnotification->size(); - l_uiCount++) { - // get the persistent data object - l_pNotificationsToPersist = f_pvpersistnotification->at(l_uiCount); - - if (NULL != l_pNotificationsToPersist) { // LCOV_EXCL_BR_LINE 6: double check, l_pNotificationsToPersist can't be NULL // NOLINT[whitespace/line_length] - FRAMEWORKUNIFIEDLOG(ZONE_NPP_INFO, __FUNCTION__, "Persistent Type %d", l_pNotificationsToPersist->m_ePersistentType); - - if (eFrameworkunifiedPersistedStateVar == l_pNotificationsToPersist->m_ePersistentType) { - FRAMEWORKUNIFIEDLOG(ZONE_NPP_INFO, __FUNCTION__, "PersistentState Notification"); - - l_pNotification = new(std::nothrow) CStatePersistenceNotification( - l_pNotificationsToPersist->m_cNotificationName, - l_pNotificationsToPersist->m_uiMaxMsgLength, - l_pNotificationsToPersist->m_ePersistCategory); - - l_pvPersistentList = m_pvPersistentList; - } else if (eFrameworkunifiedPersistedStateUserVar == l_pNotificationsToPersist->m_ePersistentType) { - FRAMEWORKUNIFIEDLOG(ZONE_NPP_INFO, __FUNCTION__, "PersistentStateUser Notification"); - - l_pNotification = new(std::nothrow) CStatePersistenceUserNotification( - l_pNotificationsToPersist->m_cNotificationName, - l_pNotificationsToPersist->m_uiMaxMsgLength); - - l_pvPersistentList = m_pvUserPersistentList; - } else if (eFrameworkunifiedImmediatePersistedStateVar == l_pNotificationsToPersist->m_ePersistentType) { // LCOV_EXCL_BR_LINE 6: l_pNotificationsToPersist->m_ePersistentType must be eFrameworkunifiedPersistedStateVar, eFrameworkunifiedPersistedStateUserVar, eFrameworkunifiedImmediatePersistedStateVar // NOLINT[whitespace/line_length] - FRAMEWORKUNIFIEDLOG(ZONE_NPP_INFO, __FUNCTION__, "PersistentStateUser Notification"); - - l_pNotification = new(std::nothrow) CStateNorPersistenceNotification( - l_pNotificationsToPersist->m_cNotificationName, - l_pNotificationsToPersist->m_uiMaxMsgLength, - l_pNotificationsToPersist->m_uiDelay, - l_pNotificationsToPersist->m_ePersistCategory); - } - - if (NULL != l_pNotification) { // LCOV_EXCL_BR_LINE 6: l_pNotification can't be NULL - FRAMEWORKUNIFIEDLOG(ZONE_NPP_INFO, __FUNCTION__, "Insert persistent notification object in map"); - - l_pNotification->SetPersistentData(l_pNotificationsToPersist->m_pPersistentData->m_pMessage, - l_pNotificationsToPersist->m_pPersistentData->m_uiMsgSize); - - l_pNotification->SetEventPublisher(l_pNotificationsToPersist->m_cPublisherName); - - if (NULL != m_pmNotificationList) { // LCOV_EXCL_BR_LINE 6: double check, m_pmNotificationList can't be NULL - m_pmNotificationList->insert(make_pair(l_pNotificationsToPersist->m_cNotificationName, l_pNotification)); - - if (NULL != l_pvPersistentList) { - l_pvPersistentList->push_back(l_pNotificationsToPersist->m_cNotificationName); - FRAMEWORKUNIFIEDLOG(ZONE_NPP_INFO, __FUNCTION__, "Inserted persistent notification object in map"); - } - FRAMEWORKUNIFIEDLOG(ZONE_NPP_INFO, __FUNCTION__, "Inserted persistent notification object in vector"); - } else { - // LCOV_EXCL_START 6: double check, m_pmNotificationList can't be NULL - AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert - delete l_pNotification; - l_pNotification = NULL; - FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, "Notification object not inserted in map/vector"); - // LCOV_EXCL_STOP - } - } else { - // LCOV_EXCL_START 6: l_pNotification can't be NULL - AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert - FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, "notification object is NULL"); - - l_estatus = eFrameworkunifiedStatusNullPointer; - // LCOV_EXCL_STOP - } - } else { - // LCOV_EXCL_START 6: double check, l_pNotificationsToPersist can't be NULL - AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert - FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, "l_pNotificationsToPersist is NULL"); - l_estatus = eFrameworkunifiedStatusNullPointer; - // LCOV_EXCL_STOP - } - } - } else { - // LCOV_EXCL_START 6: double check, f_pvpersistnotification can't be NULL - AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert - FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, "Persistent data pointer is NULL"); - - l_estatus = eFrameworkunifiedStatusNullPointer; - // LCOV_EXCL_STOP - } - - FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "-"); - return l_estatus; -} - -//////////////////////////////////////////////////////////////////////////////////////////////////// -/// RemoveUserSpecificNotificationEntry -/// This function is used to remove the user persistent notifications entry -//////////////////////////////////////////////////////////////////////////////////////////////////// -EFrameworkunifiedStatus CNotificationManager::RemoveUserSpecificNotificationEntry() { // LCOV_EXCL_START 100: never be used - AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert - EFrameworkunifiedStatus l_estatus = eFrameworkunifiedStatusOK; - FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "+"); - - std::string l_cNotificationName; - - std::vector<std::string>::iterator l_itNotificationName; - - // iterator to find notification from map of notifications - Notification_Iterator_Type l_itNotification; - - CNotification *l_pNotification = NULL; - - for (l_itNotificationName = m_pvUserPersistentList->begin() ; l_itNotificationName < m_pvUserPersistentList->end() ; - l_itNotificationName++) { - l_cNotificationName = *(l_itNotificationName); - - // check if this notification's object present in map - l_itNotification = m_pmNotificationList->find(l_cNotificationName); - - if (m_pmNotificationList->end() != l_itNotification) { - FRAMEWORKUNIFIEDLOG(ZONE_INFO, __FUNCTION__, "Notification found in map"); - - // get the notification object pointer from map - l_pNotification = (*l_itNotification).second; - - if (NULL != l_pNotification) { - FRAMEWORKUNIFIEDLOG(ZONE_INFO, __FUNCTION__, "Deleting Notification Object"); - - // delete the notification - delete l_pNotification; - l_pNotification = NULL; - - m_pmNotificationList->erase(l_itNotification); - - FRAMEWORKUNIFIEDLOG(ZONE_INFO, __FUNCTION__, "Deleting Notification name from vector"); - m_pvUserPersistentList->erase(l_itNotificationName); - - l_itNotificationName = m_pvUserPersistentList->begin(); - } - } else { - FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, "Notification not found."); - - l_estatus = eFrameworkunifiedStatusFail; - } - } - FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "-"); - return l_estatus; -} -// LCOV_EXCL_STOP - -EFrameworkunifiedStatus CNotificationManager::GetNotificationInfo(const std::string &f_cnotificationname, // LCOV_EXCL_START 100: never be used // NOLINT[whitespace/line_length] - CNotificationsToPersist *&f_pnotificationstopersist) { - AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert - EFrameworkunifiedStatus l_estatus = eFrameworkunifiedStatusOK; - FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "+"); - - CNotification *l_pNotification = NULL; - CStateNotification *l_pStateNotification = NULL; - const CPersistentData *l_pPData = NULL; - - l_pNotification = SearchNotification(f_cnotificationname); - l_pStateNotification = static_cast<CStateNotification *>(l_pNotification); - - if (NULL != l_pStateNotification) { - if (l_pStateNotification->IsPublished()) { - l_pPData = l_pStateNotification->GetPersistentData(); - - if (NULL != l_pPData) { - f_pnotificationstopersist = new(std::nothrow) CNotificationsToPersist(); - - if (NULL == f_pnotificationstopersist) { - l_estatus = eFrameworkunifiedStatusNullPointer; - FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, "Memory allocation error for f_pnotificationstopersist"); - } - - if (eFrameworkunifiedStatusOK == l_estatus) { - f_pnotificationstopersist->m_pPersistentData = new(std::nothrow) CPersistentData(); - - if (NULL == f_pnotificationstopersist->m_pPersistentData) { - l_estatus = eFrameworkunifiedStatusNullPointer; - FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, "Memory allocation error for f_pnotificationstopersist->m_pPersistentData"); - } - } - - if (eFrameworkunifiedStatusOK == l_estatus) { - f_pnotificationstopersist->m_cNotificationName = l_pStateNotification->GetNotificationName(); - f_pnotificationstopersist->m_uiMaxMsgLength = l_pStateNotification->GetMaxMessageSize(); - f_pnotificationstopersist->m_cPublisherName = l_pStateNotification->GetPublisherName(); - f_pnotificationstopersist->m_ePersistentType = l_pStateNotification->GetNotificationType(); - - if (eFrameworkunifiedPersistedStateVar == f_pnotificationstopersist->m_ePersistentType) { - f_pnotificationstopersist->m_ePersistCategory = (static_cast<CStatePersistenceNotification *> - (l_pStateNotification))->GetPersistentCategory(); - } - - if (eFrameworkunifiedImmediatePersistedStateVar == f_pnotificationstopersist->m_ePersistentType) { - CStateNorPersistenceNotification *l_pStateNorPersistenceNotification = - static_cast<CStateNorPersistenceNotification *>(l_pStateNotification); - f_pnotificationstopersist->m_uiDelay = l_pStateNorPersistenceNotification->GetPersistenceDelay(); - f_pnotificationstopersist->m_ePersistCategory = (static_cast<CStateNorPersistenceNotification *> - (l_pStateNotification))->GetPersistentCategory(); - } - - f_pnotificationstopersist->m_pPersistentData->m_pMessage = new(std::nothrow) - CHAR[f_pnotificationstopersist->m_uiMaxMsgLength]; - std::memset(f_pnotificationstopersist->m_pPersistentData->m_pMessage, 0, - f_pnotificationstopersist->m_uiMaxMsgLength); - std::memcpy(f_pnotificationstopersist->m_pPersistentData->m_pMessage, - l_pPData->m_pMessage, l_pPData->m_uiMsgSize); - - f_pnotificationstopersist->m_pPersistentData->m_uiMsgSize = l_pPData->m_uiMsgSize; - } - } else { - FRAMEWORKUNIFIEDLOG(ZONE_WARN, __FUNCTION__, "No data is stored in notification %s", f_cnotificationname.c_str()); - } - } else { - FRAMEWORKUNIFIEDLOG(ZONE_INFO, __FUNCTION__, "Notification %s not published", f_cnotificationname.c_str()); - } - } else { - l_estatus = eFrameworkunifiedStatusNullPointer; - } - - FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "-"); - return l_estatus; -} -// LCOV_EXCL_STOP - -//////////////////////////////////////////////////////////////////////////////////////////////////// -/// NotificationpersistentserviceSetDefaultPersistentNotificationData -/// This function is used to set the default data of persistent notification -//////////////////////////////////////////////////////////////////////////////////////////////////// -EFrameworkunifiedStatus CNotificationManager::NotificationpersistentserviceSetDefaultPersistentNotificationData(const std::string &f_cnotificationname, - PVOID f_pmessage, - const UI_32 f_uimsgsize) { - EFrameworkunifiedStatus l_estatus = eFrameworkunifiedStatusOK; - FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "+"); - - // pointer of notification object - CStateNotification *l_pStateNotification = SearchPersistenceNotification(f_cnotificationname); - - if (NULL != l_pStateNotification) { - l_estatus = l_pStateNotification->SetDefaultPersistentData(f_pmessage, f_uimsgsize); - } else { - FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, "Unable to set default notification data for %s, notification does not exists", - f_cnotificationname.c_str()); - } - - FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "-"); - return l_estatus; -} - -//////////////////////////////////////////////////////////////////////////////////////////////////// -/// NotificationpersistentserviceSetPersistentCategory -/// This function is used to set the persistent type of persistent notification -//////////////////////////////////////////////////////////////////////////////////////////////////// -EFrameworkunifiedStatus CNotificationManager::NotificationpersistentserviceSetPersistentCategory(const std::string &f_cnotificationname, - const EFrameworkunifiedPersistCategory f_epersistcategory) { - EFrameworkunifiedStatus l_estatus = eFrameworkunifiedStatusOK; - FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "+"); - - // pointer of notification object - CStateNotification *l_pStateNotification = SearchPersistenceNotification(f_cnotificationname); - - if (NULL != l_pStateNotification) { - EFrameworkunifiedNotificationType l_eNotificationType = l_pStateNotification->GetNotificationType(); - - if (eFrameworkunifiedPersistedStateVar == l_eNotificationType) { - l_estatus = (static_cast<CStatePersistenceNotification *>(l_pStateNotification))->SetPersistentCategory( - f_epersistcategory); - } else if (eFrameworkunifiedImmediatePersistedStateVar == l_eNotificationType) { - l_estatus = (static_cast<CStateNorPersistenceNotification *>(l_pStateNotification))->SetPersistentCategory( - f_epersistcategory); - } else { - FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, "Cannot set category %d for notification %s of type %d", f_epersistcategory, - f_cnotificationname.c_str(), l_eNotificationType); - } - } else { - FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, - "Cannot set category %d for %s, Either not registered or not a persistent notification", - f_epersistcategory, f_cnotificationname.c_str()); // LCOV_EXCL_BR_LINE 15:marco defined in "native_service/ns_logger_if.h" // NOLINT[whitespace/line_length] - } - - FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "-"); - return l_estatus; -} - -//////////////////////////////////////////////////////////////////////////////////////////////// -/// NotificationpersistentservicePublishImmediateNotification -/// This function publish the immediate notification f_cnotificationname to all its subscribers. -/// This API is called when service updates the immediate notification data in persistent memory -/// using synchronous API. -//////////////////////////////////////////////////////////////////////////////////////////////// -EFrameworkunifiedStatus CNotificationManager::NotificationpersistentservicePublishImmediateNotification(const std::string &f_cservicename, - const std::string &f_cnotificationname, - PVOID f_pmessage, - const UI_32 f_uimsgsize) { - EFrameworkunifiedStatus l_estatus = eFrameworkunifiedStatusOK; - FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "+"); - - if (f_cservicename.empty() || f_cnotificationname.empty()) { - l_estatus = eFrameworkunifiedStatusInvldParam; - } else { - // get the notification object from map - CStateNotification *l_pStateNotf = SearchPersistenceNotification(f_cnotificationname); - - if (NULL != l_pStateNotf) { - if (eFrameworkunifiedImmediatePersistedStateVar == l_pStateNotf->GetNotificationType()) { - CStateNorPersistenceNotification *l_pImmediateNotf = - static_cast<CStateNorPersistenceNotification *>(l_pStateNotf); - - // publish the notification - if (eFrameworkunifiedStatusOK != (l_estatus = l_pImmediateNotf->PublishNotification(f_cservicename, - f_pmessage, - f_uimsgsize))) { - FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, "Error publishing notification %s published by %s, status: %d", - f_cnotificationname.c_str(), f_cservicename.c_str(), l_estatus); - } - } else { - FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, "Notification %s is not registered as immediate persistence by service %s", - f_cnotificationname.c_str(), f_cservicename.c_str()); - } - } else { - FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, "Notification %s not registered by service %s", f_cnotificationname.c_str(), - f_cservicename.c_str()); - - l_estatus = eFrameworkunifiedStatusNullPointer; - } - } - - FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "-"); - return l_estatus; -} - -#ifdef NPP_PROFILEINFO_ENABLE - -EFrameworkunifiedStatus CNotificationManager::GetNotificationProfilingData(std::string &f_cnotificationprofileInfo) { - EFrameworkunifiedStatus l_estatus = eFrameworkunifiedStatusOK; - FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "+"); - - Notification_Iterator_Type l_itNotification; - NotifReceiver_Iterator_Type l_itNotifReceiver_Iterator; - - CNotification *l_pNotification = NULL; - NotifReceiver_Type *l_pSubscriberList = NULL; - - std::stringstream ss; - UI_32 l_uiSubscriberCnt = 0; - - std::string l_cPublisher = ""; - std::string l_cNotification = ""; - - try { - if (NULL == m_pmNotificationList) { - FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, "Notification List m_pmNotificationList is NULL in notification manager"); - l_estatus = eFrameworkunifiedStatusFail; - } - - if (eFrameworkunifiedStatusOK == l_estatus && m_pmNotificationList->empty()) { - FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, "Notification List m_pmNotificationList Empty in notification manager"); - l_estatus = eFrameworkunifiedStatusFail; - } - - if (eFrameworkunifiedStatusOK == l_estatus) { - f_cnotificationprofileInfo.append("Application Name,"); - f_cnotificationprofileInfo.append("Notification Name,"); - f_cnotificationprofileInfo.append("Type,"); - f_cnotificationprofileInfo.append("Length,"); - f_cnotificationprofileInfo.append("Subscribed By,"); - f_cnotificationprofileInfo.append("Subscribers Count"); - - for (l_itNotification = m_pmNotificationList->begin(); - l_itNotification != m_pmNotificationList->end(); - l_itNotification++) { - l_pNotification = (*l_itNotification).second; - if (NULL == l_pNotification) { - FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, "Notification object ptr is NULL"); - l_estatus = eFrameworkunifiedStatusFail; - } else { - l_cPublisher = l_pNotification->GetPublisherName(); - if (l_cPublisher.empty()) { - FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, "Publisher name empty"); - l_estatus = eFrameworkunifiedStatusFail; - } - - l_cNotification = l_pNotification->GetNotificationName(); - if (l_cNotification.empty()) { - FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, "Notification name empty"); - l_estatus = eFrameworkunifiedStatusFail; - } - - l_pSubscriberList = l_pNotification->GetSubscriberList(); - if (NULL == l_pSubscriberList) { - FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, "Subscribers List ptr is NULL"); - l_estatus = eFrameworkunifiedStatusFail; - } - } - - if (eFrameworkunifiedStatusOK == l_estatus) { - f_cnotificationprofileInfo.append("\n"); - - f_cnotificationprofileInfo.append(l_cPublisher); - f_cnotificationprofileInfo.append(","); - - f_cnotificationprofileInfo.append(l_cNotification); - f_cnotificationprofileInfo.append(","); - - switch (l_pNotification->GetNotificationType()) { - case eFrameworkunifiedNotificationVar : { - f_cnotificationprofileInfo.append("Regular"); - } - break; - - case eFrameworkunifiedStateVar : { - f_cnotificationprofileInfo.append("State"); - } - break; - - case eFrameworkunifiedPersistedStateVar : { - f_cnotificationprofileInfo.append("PersistenceState"); - } - break; - - case eFrameworkunifiedPersistedStateUserVar : { - f_cnotificationprofileInfo.append("UserPersistenceState"); - } - break; - - case eFrameworkunifiedImmediatePersistedStateVar : { - f_cnotificationprofileInfo.append("ImmediatePersistenceState"); - } - break; - - case eFrameworkunifiedUnknown: { - f_cnotificationprofileInfo.append("Unknown"); - } - break; - - default: - break; - } - f_cnotificationprofileInfo.append(","); - - ss << l_pNotification->GetMaxMessageSize(); - f_cnotificationprofileInfo.append(ss.str()); - ss.str(""); - f_cnotificationprofileInfo.append(",\""); - - l_uiSubscriberCnt = 0; - for (l_itNotifReceiver_Iterator = l_pSubscriberList->begin(); - l_pSubscriberList->end() != l_itNotifReceiver_Iterator;) { - f_cnotificationprofileInfo.append(l_itNotifReceiver_Iterator->first); - ++l_uiSubscriberCnt; - - ++l_itNotifReceiver_Iterator; - - if (l_pSubscriberList->end() != l_itNotifReceiver_Iterator) { - f_cnotificationprofileInfo.append(","); - } - } - - f_cnotificationprofileInfo.append("\","); - - ss << l_uiSubscriberCnt; - f_cnotificationprofileInfo.append(ss.str()); - ss.str(""); - } - - l_estatus = eFrameworkunifiedStatusOK; - } - } - } catch (std::exception &exp) { - FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, "Exception:: %s", exp.what()); - l_estatus = eFrameworkunifiedStatusFail; - } - - FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "-"); - return l_estatus; -} - -#endif |