summaryrefslogtreecommitdiffstats
path: root/video_in_hal/nsframework/framework_unified/client/NS_FrameworkCore/src/frameworkunified_dispatcher.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'video_in_hal/nsframework/framework_unified/client/NS_FrameworkCore/src/frameworkunified_dispatcher.cpp')
-rwxr-xr-xvideo_in_hal/nsframework/framework_unified/client/NS_FrameworkCore/src/frameworkunified_dispatcher.cpp2382
1 files changed, 0 insertions, 2382 deletions
diff --git a/video_in_hal/nsframework/framework_unified/client/NS_FrameworkCore/src/frameworkunified_dispatcher.cpp b/video_in_hal/nsframework/framework_unified/client/NS_FrameworkCore/src/frameworkunified_dispatcher.cpp
deleted file mode 100755
index 250edce..0000000
--- a/video_in_hal/nsframework/framework_unified/client/NS_FrameworkCore/src/frameworkunified_dispatcher.cpp
+++ /dev/null
@@ -1,2382 +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.
- */
-
-///////////////////////////////////////////////////////////////////////////////
-/// \ingroup tag_NSFramework
-/// \brief
-///
-///
-///
-///////////////////////////////////////////////////////////////////////////////
-
-#include <stdio.h>
-#include <string.h>
-#include <sys/epoll.h>
-#include <sys/eventfd.h>
-#include <sys/time.h>
-#include <sys/resource.h>
-#include <fcntl.h>
-#include <pthread.h>
-
-#include <native_service/ns_logger_if.h>
-#include <native_service/ns_version_if.h>
-#include <native_service/ns_message_center_if.h>
-#include <native_service/frameworkunified_framework_sync.h>
-#include <native_service/frameworkunified_sm_hsmframework.h>
-#include <native_service/frameworkunified_sm_framework_dispatch.h>
-#include <native_service/frameworkunified_thread_priority.h>
-#include <native_service/ns_plogger_if.h>
-#include <native_service/ns_resource_controler.h>
-#include <native_service/frameworkunified_service_protocol.h>
-#include <native_service/frameworkunified_dispatcher.h>
-#include <native_service/frameworkunified_framework_if.h>
-#include <other_service/strlcpy.h>
-
-#include <string>
-#include <utility>
-#include <map>
-
-#include "frameworkunified_framework_core.h"
-#include "frameworkunified_framework_internal.h"
-#include "ns_message_center_internal.h"
-#include "ns_mc_internal.h"
-#include "frameworkunified_framework_error_internal.hpp"
-#include "frameworkunified_framework_utility.h"
-#include "frameworkunified_sm_framework_core.h"
-
-#ifdef DISPATCHER_PROFILER
-#include "frameworkunified_msgprofiler.h"
-#include <boost/bind.hpp>
-#endif
-
-/*
- * static variable
- */
-static FrameworkunifiedDefaultCallbackHandler g_defaultCallbackHandler;
-
-//////////////////////////
-// prototype declaration
-//////////////////////////
-static EFrameworkunifiedStatus GetDispatcherMqFD(HANDLE hApp, int *fd);
-static EFrameworkunifiedStatus CreateMultiWaitingFD(HANDLE hApp);
-static EFrameworkunifiedStatus ProcessMq(HANDLE hApp);
-static EFrameworkunifiedStatus ProcessFd(HANDLE hApp , int fd);
-
-//////////////////////////////////////////
-// Function : ostream &operator<<
-//////////////////////////////////////////
-template <typename K, typename V, class C, class A>
-std::ostream &operator<< (std::ostream &os, const std::map<K, V, C, A> &m) {
- os << "{ ";
- typename std::map<K, V, C, A>::const_iterator p;
- for (p = m.begin(); p != m.end(); ++p) {
- os << p->first << ":" << p->second << ", ";
- }
- return os << "}";
-}
-
-EFrameworkunifiedStatus CreateDispatcher(PCSTR cAppName, HANDLE &hApp, BOOL bIsChildThread) { // NOLINT (readability/nolint)
- EFrameworkunifiedStatus eStatus = eFrameworkunifiedStatusOK;
- CFrameworkunifiedFrameworkApp *pApp = new CFrameworkunifiedFrameworkApp; // LCOV_EXCL_BR_LINE 11:except branch
- if (pApp != NULL) { // LCOV_EXCL_BR_LINE 5:fail safe for new
- pApp->checkCode = APP_CHECK_CODE;
- pApp->self = pthread_self();
- // app name size should not exceed the max length
- memset(pApp->cAppName, 0, MAX_NAME_SIZE_APP);
- memset(pApp->sServiceAvailabilityNotification, 0, MAX_SYS_INFO_SIZE);
- pApp->bIsAvailable = FALSE;
- /*
- * todo
- * Setting NULL for arguments causes an Exception
- */
- if (strlen(cAppName) < MAX_NAME_SIZE_APP) {
- memcpy(pApp->cAppName, cAppName, strlen(cAppName));
- } else {
- FRAMEWORKUNIFIEDLOG(ZONE_NS_ERR, __FUNCTION__, " Error : Aborting ... Exceeds Max App name size MAX_NAME_SIZE_APP : %d ",
- MAX_NAME_SIZE_APP);
- /*
- * Error is set here, but the error is overwritten by the following process
- */
- eStatus = eFrameworkunifiedStatusFail;
- }
-
- FRAMEWORKUNIFIEDLOG0(ZONE_NS_DIS, __FUNCTION__, " Application Created ");
-
- // opening handle to receive message for the application
- pApp->hAppRcvMsgQ = NULL;
- if (NULL == (pApp->hAppRcvMsgQ = McOpenReceiver(pApp->cAppName))) {
- FRAMEWORKUNIFIEDLOG0(ZONE_NS_ERR, __FUNCTION__, " Error : Failed to McOpenReceiver ");
- eStatus = eFrameworkunifiedStatusNullPointer;
- } else {
- if (strcmp(cAppName, "NS_NPPService") != 0) {
- McFlushReceiver(pApp->hAppRcvMsgQ);
- }
- }
-
- // opening socket for abnormal monitoring
- pApp->siMonitorSock = -1;
- if ((eFrameworkunifiedStatusOK == eStatus) && (-1 == (pApp->siMonitorSock = mcOpenMonitor(pApp->cAppName)))) {
- FRAMEWORKUNIFIEDLOG0(ZONE_NS_ERR, __FUNCTION__, " Error : Failed to mcOpenMonitor ");
- eStatus = eFrameworkunifiedStatusFail;
- pApp->siMonitorSock = -1;
- }
-
- // opening handle to send messages to itself
- pApp->hAppSndMsgQ = NULL;
- if ((eFrameworkunifiedStatusOK == eStatus) && (NULL == (pApp->hAppSndMsgQ = McOpenSender(pApp->cAppName)))) {
- // LCOV_EXCL_BR_START 15:marco defined in "native_service/ns_logger_if.h"
- FRAMEWORKUNIFIEDLOG0(ZONE_NS_ERR, __FUNCTION__, " Error : Failed to McOpenSender ");
- // LCOV_EXCL_BR_STOP
- eStatus = eFrameworkunifiedStatusNullPointer;
- }
-
- // opening handles for Notification Persistence Service and Service Directory
- pApp->hNPSndMsgQ = NULL;
- if ((eFrameworkunifiedStatusOK == eStatus) &&
- (NULL == (pApp->hNPSndMsgQ = FrameworkunifiedMcOpenSender(reinterpret_cast<HANDLE>(pApp), FRAMEWORKUNIFIED_NS_NPSERVICE)))) {
- // LCOV_EXCL_BR_START 15:marco defined in "native_service/ns_logger_if.h"
- FRAMEWORKUNIFIEDLOG(ZONE_NS_ERR, __FUNCTION__, " Error : Failed to FrameworkunifiedMcOpenSender < NS_NPPService >");
- // LCOV_EXCL_BR_STOP
- eStatus = eFrameworkunifiedStatusNullPointer;
- }
-
- // stores the message queue handle of the parent thread.
- // It will set after the dispatcher of child thread is created. And will be NULL for main thread.
- pApp->hParentSndMsgQ = NULL;
-
- if ((eFrameworkunifiedStatusOK == eStatus) && (!bIsChildThread)) {
- // Define any system callback's with the dispatcher.
- if (eFrameworkunifiedStatusOK != (eStatus = FrameworkunifiedAttachSystemCallbacksDispatcher(reinterpret_cast<HANDLE>(pApp)))) {
- // LCOV_EXCL_BR_START 15:marco defined in "native_service/ns_logger_if.h"
- FRAMEWORKUNIFIEDLOG(ZONE_NS_ERR, __FUNCTION__, " Error :: (%d) Failed to FrameworkunifiedAttachSystemCallbacksDispatcher ", eStatus);
- // LCOV_EXCL_BR_STOP
- }
-
- if (eFrameworkunifiedStatusOK == eStatus) {
- // Define the logger callback's for setting up gets and sets with the dispatcher.
- if (eFrameworkunifiedStatusOK != (eStatus = FrameworkunifiedAttachLoggerCallbacksDispatcher(reinterpret_cast<HANDLE>(pApp)))) {
- // LCOV_EXCL_BR_START 15:marco defined in "native_service/ns_logger_if.h"
- FRAMEWORKUNIFIEDLOG(ZONE_NS_ERR, __FUNCTION__, " Error :: (%d) Failed to FrameworkunifiedAttachLoggerCallbacksDispatcher ", eStatus);
- // LCOV_EXCL_BR_STOP
- }
- }
- }
-
- // initialize
- pApp->m_pFrameworkunifiedStateMachine = NULL;
- pApp->uiProtocolCmd = 0;
-
- // Clear the Defer'ed message pop flag.
- pApp->fPopDeferedMsg = FALSE;
-
- // Clear the Defer'ed sync response flag.
- pApp->fDeferredSyncResponse = FALSE;
-
- // buffer initialize
- memset(pApp->uiMsgRcvBuffer, 0, MAX_MSGQ_BUFFER);
- memset(pApp->cMsgSrcName, '\0', MAX_NAME_SIZE_APP);
- memset(pApp->cSystemInfo, '\0', MAX_SYS_INFO_SIZE);
-
- pApp->defer_evfd = -1;
- pApp->efd = -1;
- if (eFrameworkunifiedStatusOK == eStatus) {
- eStatus = CreateMultiWaitingFD((HANDLE)pApp);
- if (eFrameworkunifiedStatusOK != eStatus) {
- FRAMEWORKUNIFIEDLOG(ZONE_NS_ERR, __FUNCTION__, "ERROR : CreateMultiWaitingFD Failed, status=%d", eStatus);
- }
- }
-
-#ifdef DISPATCHER_PROFILER
- // Assign default value
- pApp->m_pFrameworkunifiedMsgProfiler = NULL;
-#endif
-
- if (eFrameworkunifiedStatusOK != eStatus) {
- if (NULL != pApp->hAppRcvMsgQ) {
- McClose(pApp->hAppRcvMsgQ);
- pApp->hAppRcvMsgQ = NULL;
- }
-
- if (0 < pApp->siMonitorSock) {
- mcCloseMonitor(pApp->cAppName);
- pApp->siMonitorSock = -1;
- }
-
- if (NULL != pApp->hAppSndMsgQ) {
- McClose(pApp->hAppSndMsgQ);
- pApp->hAppSndMsgQ = NULL;
- }
-
- if (NULL != pApp->hNPSndMsgQ) {
- FrameworkunifiedMcClose(pApp->hNPSndMsgQ);
- pApp->hNPSndMsgQ = NULL;
- }
-
- // LCOV_EXCL_BR_START 6:According to line 158, pApp->hParentSndMsgQ is NULL.
- if (NULL != pApp->hParentSndMsgQ) {
- // LCOV_EXCL_BR_STOP
- // LCOV_EXCL_START 6:According to line 158, pApp->hParentSndMsgQ is NULL.
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- McClose(pApp->hParentSndMsgQ);
- pApp->hParentSndMsgQ = NULL;
- // LCOV_EXCL_STOP
- }
-
- if (0 < pApp->defer_evfd) {
- close(pApp->defer_evfd);
- pApp->defer_evfd = -1;
- }
-
- if (0 < pApp->efd) {
- close(pApp->efd);
- pApp->efd = -1;
- }
-
- delete pApp; // LCOV_EXCL_BR_LINE 11:except branch
- pApp = NULL;
- }
- }
-
- hApp = pApp;
-
- return eStatus;
-}
-
-
-//////////////////////////////////////////
-// Function : FrameworkunifiedCreateDispatcher
-//////////////////////////////////////////
-EFrameworkunifiedStatus FrameworkunifiedCreateDispatcher(PCSTR cAppName, HANDLE &hApp, BOOL bIsChildThread) { // NOLINT (readability/nolint)
- return CreateDispatcher(cAppName, hApp, bIsChildThread);
-}
-
-
-//////////////////////////////////////////
-// Function : FrameworkunifiedDispatchBlock
-//////////////////////////////////////////
-EFrameworkunifiedStatus FrameworkunifiedDispatchBlock(HANDLE hApp) {
- EFrameworkunifiedStatus eStatus = eFrameworkunifiedStatusOK;
-// FRAMEWORKUNIFIEDLOG0(ZONE_NS_DIS, __FUNCTION__, "+");
-
- if (frameworkunifiedCheckValidAppHandle(hApp)) {
- CFrameworkunifiedFrameworkApp *pApp = static_cast<CFrameworkunifiedFrameworkApp *>(hApp);
-
- if (eFrameworkunifiedStatusOK != (eStatus = McReceiveWithSession(pApp->hAppRcvMsgQ, pApp->cMsgSrcName,
- &pApp->uiProtocolCmd, &pApp->uiSessionId, MAX_MSGQ_BUFFER,
- (PVOID)(pApp->uiMsgRcvBuffer)))) {
- // LCOV_EXCL_BR_START 15:marco defined in "native_service/ns_logger_if.h"
- FRAMEWORKUNIFIEDLOG(ZONE_NS_ERR, __FUNCTION__, "Error :: (%d) Failed on McReceive", eStatus);
- // LCOV_EXCL_BR_STOP
- } else {
-// FRAMEWORKUNIFIEDLOG(ZONE_NS_DIS, __FUNCTION__, "Message received on dispatcher:: Source: %s, Cmd: 0x%X, SessionId: %d ",
-// pApp->cMsgSrcName, pApp->uiProtocolCmd, pApp->uiSessionId);
- }
- } else {
- eStatus = eFrameworkunifiedStatusInvldHandle;
- }
-
-// FRAMEWORKUNIFIEDLOG0(ZONE_NS_DIS, __FUNCTION__, "-");
- return eStatus;
-}
-
-
-EFrameworkunifiedStatus FrameworkunifiedProcessServiceProtocolCallback(HANDLE hApp, PCSTR pRequester) {
- EFrameworkunifiedStatus eStatus = eFrameworkunifiedStatusOK;
-
- if (frameworkunifiedCheckValidAppHandle(hApp)) {
- CFrameworkunifiedFrameworkApp *pApp = static_cast<CFrameworkunifiedFrameworkApp *>(hApp);
- Services::iterator s_iterator;
-
- s_iterator = pApp->services.find(pRequester);
- if (s_iterator != pApp->services.end()) {
- SessionTable::iterator session_iterator;
- session_iterator = (s_iterator->second).find(pApp->uiSessionId);
- if (session_iterator != (s_iterator->second).end()) {
- // FRAMEWORKUNIFIEDLOG(ZONE_NS_DIS, __FUNCTION__, " %s found :: (%s) ", pApp->cMsgSrcName, s_iterator->second);
-
- // find the protocol req/ack handler
- ServiceProtocolTable::iterator spt_iterator;
- spt_iterator = (session_iterator->second).find(pApp->uiProtocolCmd);
- if (spt_iterator != (session_iterator->second).end()) {
- // calling the protocol req/ack handler
- eStatus = (*spt_iterator).second(hApp);
- } else if ((session_iterator->second).end() != (spt_iterator =
- (session_iterator->second).find(FRAMEWORKUNIFIED_ANY_COMMAND))) {
- // LCOV_EXCL_BR_START 15:marco defined in "native_service/ns_logger_if.h"
- FRAMEWORKUNIFIEDLOG(ZONE_NS_DIS, __FUNCTION__,
- "Processing callback function for (FRAMEWORKUNIFIED_ANY_COMMAND). "
- "Dispatcher protocol command: (0x%x)", pApp->uiProtocolCmd);
- // LCOV_EXCL_BR_STOP
- eStatus = (*spt_iterator).second(hApp);
- } else {
- eStatus = eFrameworkunifiedStatusMsgNotProcessed;
- }
- } else {
- eStatus = eFrameworkunifiedStatusMsgNotProcessed;
- }
- } else {
- eStatus = eFrameworkunifiedStatusMsgNotProcessed;
- }
- } else {
- eStatus = eFrameworkunifiedStatusInvldHandle;
- }
-
- return eStatus;
-}
-
-EFrameworkunifiedStatus FrameworkunifiedProcessServiceProtocol(HANDLE hApp) {
- EFrameworkunifiedStatus eStatus = eFrameworkunifiedStatusOK;
-
- if (frameworkunifiedCheckValidAppHandle(hApp)) {
- CFrameworkunifiedFrameworkApp *pApp = static_cast<CFrameworkunifiedFrameworkApp *>(hApp);
-
- // Check if the callback is associated with the Protocol for message source
- eStatus = FrameworkunifiedProcessServiceProtocolCallback(hApp, const_cast<PCSTR>(pApp->cMsgSrcName));
-
- if (eFrameworkunifiedStatusMsgNotProcessed == eStatus) {
- // Check if the callback is associated with the Protocol for FRAMEWORKUNIFIED_ANY_SOURCE
- eStatus = FrameworkunifiedProcessServiceProtocolCallback(hApp, FRAMEWORKUNIFIED_ANY_SOURCE);
- if (eFrameworkunifiedStatusMsgNotProcessed == eStatus) {
- if (pApp->m_pFrameworkunifiedStateMachine) {
- // Check if the HSM event is associated with the Protocol for message source
- eStatus = FrameworkunifiedProcessServiceProtocolHSMEvent(hApp, const_cast<PCSTR>(pApp->cMsgSrcName));
-
- if (eFrameworkunifiedStatusMsgNotProcessed == eStatus) {
- // Check if the HSM event is associated with the Protocol for FRAMEWORKUNIFIED_ANY_SOURCE
- eStatus = FrameworkunifiedProcessServiceProtocolHSMEvent(hApp, FRAMEWORKUNIFIED_ANY_SOURCE);
- }
- }
- }
- }
- } else {
- eStatus = eFrameworkunifiedStatusInvldHandle;
- }
-
- return eStatus;
-}
-
-
-EFrameworkunifiedStatus FrameworkunifiedSetDeferredSyncResponse(HANDLE hApp) {
- EFrameworkunifiedStatus eStatus = eFrameworkunifiedStatusInvldBuf;
-
- if (frameworkunifiedCheckValidAppHandle(hApp)) {
- CFrameworkunifiedFrameworkApp *pApp = static_cast<CFrameworkunifiedFrameworkApp *>(hApp);
- pApp->fDeferredSyncResponse = TRUE;
- eStatus = eFrameworkunifiedStatusOK;
- }
-
- return eStatus;
-}
-
-
-static void frameworkunifiedProcessSyncResponse(HANDLE hApp, EFrameworkunifiedStatus retValue) {
- EFrameworkunifiedStatus eStatus;
- CHAR systemInfo[MAX_SYS_INFO_SIZE];
- UI_32 seq_id;
- CFrameworkunifiedFrameworkApp *pApp = static_cast<CFrameworkunifiedFrameworkApp *>(hApp);
-
- if (frameworkunifiedGetIsTypeOfSync(hApp) == TRUE) {
- if (pApp->fDeferredSyncResponse == TRUE) {
- if (pApp->responsedata.size() != 0) {
- FRAMEWORKUNIFIEDLOG(ZONE_NS_WAR, __FUNCTION__, "Response data is ignored for "
- ":: source: %s, Protocol Command: 0x%x, Session Id: %u.",
- pApp->cMsgSrcName != 0 ? pApp->cMsgSrcName : NULL,
- pApp->uiProtocolCmd, pApp->uiSessionId);
- pApp->responsedata.clear();
- }
- } else {
- FrameworkunifiedGetSystemInfo(hApp, systemInfo);
- seq_id = (UI_32)strtoul(systemInfo, NULL, 16);
-
- eStatus = frameworkunifiedSendSyncResponse(hApp, PROTOCOL_FRAMEWORKUNIFIED_ANY_COMMAND, seq_id, retValue, pApp->responsedata.size(),
- pApp->responsedata.data());
- if (eStatus != eFrameworkunifiedStatusOK) {
- FRAMEWORKUNIFIEDLOG(ZONE_NS_ERR, __FUNCTION__, "retValu:%d errno:%d", eStatus, errno);
- }
- pApp->responsedata.clear();
- }
- } else {
- if (pApp->responsedata.size() != 0) {
- FRAMEWORKUNIFIEDLOG(ZONE_NS_WAR, __FUNCTION__, "Response data is ignored for :: "
- "source: %s, Protocol Command: 0x%x, Session Id: %u.",
- pApp->cMsgSrcName != 0 ? pApp->cMsgSrcName : NULL,
- pApp->uiProtocolCmd, pApp->uiSessionId);
- pApp->responsedata.clear();
- }
- }
- pApp->fDeferredSyncResponse = FALSE;
-}
-
-
-inline static time_t frameworkunifiedTimeval2usec(const struct timeval &time) {
- return static_cast<time_t>(time.tv_sec * 1000000 + time.tv_usec);
-}
-
-
-static void frameworkunifiedPrintRusage(HANDLE hApp, const struct rusage &start, const struct rusage &end) {
- UI_32 occupy_time;
- UI_32 average;
- CFrameworkunifiedFrameworkApp *pApp = static_cast<CFrameworkunifiedFrameworkApp *>(hApp);
-
- occupy_time = static_cast<UI_32>(frameworkunifiedTimeval2usec(end.ru_utime) - frameworkunifiedTimeval2usec(start.ru_utime));
- occupy_time += static_cast<UI_32>(frameworkunifiedTimeval2usec(end.ru_stime) - frameworkunifiedTimeval2usec(start.ru_stime));
-
- pApp->total_occupy_time += occupy_time;
- pApp->total_run_count++;
- average = static_cast<UI_32>(pApp->total_occupy_time / pApp->total_run_count);
-
- if (occupy_time > pApp->max_occupy_time) {
- pApp->max_occupy_time = occupy_time;
- }
-
-// FRAMEWORKUNIFIEDLOG(ZONE_NS_DEBUG_DUMP, __FUNCTION__, "cur:%d.%06d avg:%d.%06d max:%d.%06d",
-// occupy_time / 1000000, occupy_time % 1000000,
-// average / 1000000, average % 1000000,
-// pApp->max_occupy_time / 1000000, pApp->max_occupy_time % 1000000);
-}
-
-
-static inline void frameworkunifiedGetRusage(struct rusage *r) {
- if (r == NULL) {
- FRAMEWORKUNIFIEDLOG(ZONE_NS_ERR, __func__, "r is NULL");
- return;
- }
- memset(r, 0, sizeof(struct rusage));
- if (getrusage(RUSAGE_THREAD, r) == -1) {
- // LCOV_EXCL_BR_START 15:marco defined in "native_service/ns_logger_if.h"
- FRAMEWORKUNIFIEDLOG(ZONE_NS_ERR, __FUNCTION__, "getrusage errno:%d", errno);
- // LCOV_EXCL_BR_STOP
- }
-}
-
-static int frameworkunifiedPushLostSessionInfo(HANDLE hApp, PCSTR serviceName) {
- int cntFound = 0;
- CFrameworkunifiedFrameworkApp *pApp = static_cast<CFrameworkunifiedFrameworkApp *>(hApp);
-
- ServiceSessionTable::iterator s_iterator = pApp->sessiontable.find(serviceName);
- if (s_iterator != pApp->sessiontable.end()) {
- // LCOV_EXCL_BR_START 11:except branch
- SessionHandleTable::iterator sh_iterator = pApp->sessiontable[serviceName].begin();
- // LCOV_EXCL_BR_STOP
- while (sh_iterator != pApp->sessiontable[serviceName].end()) {
- LostSessionInfo l_info;
- l_info.sServiceName = serviceName;
- l_info.iSessionId = sh_iterator->first;
- pApp->lostSessionQueue.push(l_info);
- cntFound++;
- sh_iterator++;
- }
- }
- return cntFound;
-}
-
-///
-/// Abnormal monitor(server): Client socket close handle
-///
-EFrameworkunifiedStatus frameworkunifiedProcessClientAbnormalState(HANDLE hApp, int sockfd) {
- EFrameworkunifiedStatus eStatus = eFrameworkunifiedStatusOK;
- CFrameworkunifiedFrameworkApp *pApp = static_cast<CFrameworkunifiedFrameworkApp *>(hApp);
- AcceptMonitorTable::iterator it;
-
- if ((it = pApp->acceptMonitorTable.find(sockfd)) == pApp->acceptMonitorTable.end()) {
- FRAMEWORKUNIFIEDLOG(ZONE_NS_ERR, __FUNCTION__, "ERROR : %d, Invalid fd", sockfd);
- } else {
- char clientName[16];
- if (mcGetClientNameFromConnectKey((it->second).c_str(), clientName, sizeof(clientName)) < 0) {
- eStatus = eFrameworkunifiedStatusFail;
- // LCOV_EXCL_BR_START 15:marco defined in "native_service/ns_logger_if.h"
- FRAMEWORKUNIFIEDLOG(ZONE_NS_ERR, __FUNCTION__, "ERROR : Invlid connectKey:%s", (it->second).c_str());
- // LCOV_EXCL_BR_STOP
- } else {
- if (pApp->lostSessionHandler != NULL) {
- int cntFound = frameworkunifiedPushLostSessionInfo(hApp, clientName);
- if (cntFound) {
- // calling lost session handler
- try {
- eStatus = pApp->lostSessionHandler(hApp);
- } catch (const std::exception &e) {
- FRAMEWORKUNIFIEDLOG(ZONE_NS_ERR, __FUNCTION__, "Recovering from: %s", e.what());
- eStatus = eFrameworkunifiedStatusErrOther;
- }
- }
- }
- }
- pApp->acceptMonitorTable.erase(sockfd);
- }
-
- return eStatus; // LCOV_EXCL_BR_LINE 11:except branch
-}
-
-///
-/// Abnormal monitor(server): Add
-///
-EFrameworkunifiedStatus frameworkunifiedAddAcceptMonitor(HANDLE hApp) {
- EFrameworkunifiedStatus eStatus = eFrameworkunifiedStatusOK;
- CFrameworkunifiedFrameworkApp *pApp = static_cast<CFrameworkunifiedFrameworkApp *>(hApp);
- int acceptSock;
-
- if ((acceptSock = mcGetAcceptMonitor(pApp->cAppName, pApp->cMsgSrcName)) < 0) {
- // LCOV_EXCL_BR_START 15:marco defined in "native_service/ns_logger_if.h"
- FRAMEWORKUNIFIEDLOG(ZONE_NS_ERR, __FUNCTION__, "ERROR : mcGetAcceptMonitor srv:%s clnt:%s",
- pApp->cAppName != 0 ? pApp->cAppName : NULL, pApp->cMsgSrcName != 0 ? pApp->cMsgSrcName : NULL);
- // LCOV_EXCL_BR_STOP
- eStatus = eFrameworkunifiedStatusFail;
- } else {
- char connectKey[32];
- mcSetConnectKey(connectKey, sizeof(connectKey), pApp->cAppName, pApp->cMsgSrcName);
- pApp->acceptMonitorTable.insert(std::make_pair(acceptSock, connectKey));
- }
-
- return eStatus;
-}
-
-///
-/// Abnormal monitor(server): Del
-///
-EFrameworkunifiedStatus frameworkunifiedDelAcceptMonitor(HANDLE hApp) {
- EFrameworkunifiedStatus eStatus = eFrameworkunifiedStatusOK;
- CFrameworkunifiedFrameworkApp *pApp = static_cast<CFrameworkunifiedFrameworkApp *>(hApp);
- long acceptSock; // NOLINT (readability/nolint)
-
- char connectKey[32];
- mcSetConnectKey(connectKey, sizeof(connectKey), pApp->cAppName, pApp->cMsgSrcName);
- if (frameworkunifiedGetResource(FRAMEWORKUNIFIED_RES_ABNMLMON, connectKey, &acceptSock) < 0) {
- eStatus = eFrameworkunifiedStatusFail;
- } else {
- if (pApp->acceptMonitorTable.find(static_cast<Socket>(acceptSock)) != pApp->acceptMonitorTable.end()) {
- pApp->acceptMonitorTable.erase(static_cast<Socket>(acceptSock));
- }
- }
-
- return eStatus;
-}
-
-///
-/// Abnormal monitor(client): Server socket close handle
-///
-EFrameworkunifiedStatus frameworkunifiedProcessServerAbnormalState(HANDLE hApp, int sockfd) {
- EFrameworkunifiedStatus eStatus = eFrameworkunifiedStatusOK;
- CFrameworkunifiedFrameworkApp *pApp = static_cast<CFrameworkunifiedFrameworkApp *>(hApp);
- ConnectMonitorTable::iterator it;
-
- if ((it = pApp->connectMonitorTable.find(sockfd)) == pApp->connectMonitorTable.end()) {
- // LCOV_EXCL_BR_START 15:marco defined in "native_service/ns_logger_if.h"
- FRAMEWORKUNIFIEDLOG(ZONE_NS_ERR, __FUNCTION__, "ERROR : %d, Invalid fd", sockfd);
- // LCOV_EXCL_BR_STOP
- } else {
- char serverName[16];
- if (mcGetServerNameFromConnectKey((it->second).c_str(), serverName, sizeof(serverName)) < 0) {
- eStatus = eFrameworkunifiedStatusFail;
- // LCOV_EXCL_BR_START 15:marco defined in "native_service/ns_logger_if.h"
- FRAMEWORKUNIFIEDLOG(ZONE_NS_ERR, __FUNCTION__, "ERROR : Invlid connectKey:%s", (it->second).c_str());
- // LCOV_EXCL_BR_STOP
- } else {
- if (pApp->lostSessionHandler != NULL) {
- int cntFound = frameworkunifiedPushLostSessionInfo(hApp, serverName); // LCOV_EXCL_BR_LINE 11:except branch
- if (cntFound) {
- // calling lost session handler
- try {
- eStatus = pApp->lostSessionHandler(hApp);
- } catch (const std::exception &e) {
- // LCOV_EXCL_BR_START 15:marco defined in "native_service/ns_logger_if.h"
- FRAMEWORKUNIFIEDLOG(ZONE_NS_ERR, __FUNCTION__, "Recovering from: %s", e.what());
- // LCOV_EXCL_BR_STOP
- eStatus = eFrameworkunifiedStatusErrOther;
- }
- }
- }
- }
- pApp->connectMonitorTable.erase(sockfd);
- }
-
- return eStatus; // LCOV_EXCL_BR_LINE 11:except branch
-}
-
-///
-/// Abnormal monitor(client): Add
-///
-EFrameworkunifiedStatus frameworkunifiedAddConnectMonitor(HANDLE hApp, PCSTR serverName, PCSTR clientName) {
- EFrameworkunifiedStatus eStatus = eFrameworkunifiedStatusOK;
- CFrameworkunifiedFrameworkApp *pApp = static_cast<CFrameworkunifiedFrameworkApp *>(hApp);
-
- int connectSock = mcConnectMonitor(serverName, clientName);
- if (connectSock < 0) {
- FRAMEWORKUNIFIEDLOG(ZONE_NS_ERR, __FUNCTION__, "Error::%s:%s mcConnectMonitor",
- serverName != 0 ? serverName : NULL, pApp->cAppName != 0 ? pApp->cAppName : NULL);
- eStatus = eFrameworkunifiedStatusFail;
- } else {
- if (pApp->connectMonitorTable.find(connectSock) == pApp->connectMonitorTable.end()) {
- char connectKey[32];
- mcSetConnectKey(connectKey, sizeof(connectKey), serverName, clientName);
-
- struct epoll_event event;
- event.events = EPOLLRDHUP;
- event.data.fd = connectSock;
-
- if (epoll_ctl(pApp->efd, EPOLL_CTL_ADD, connectSock, &event) < 0) {
- FRAMEWORKUNIFIEDLOG(ZONE_NS_ERR, __FUNCTION__, "ERROR : epoll_ctl:%s", strerror(errno));
- eStatus = eFrameworkunifiedStatusFail;
- }
-
- if (eStatus == eFrameworkunifiedStatusOK) {
- CFrameworkunifiedFrameworkApp *pApp = static_cast<CFrameworkunifiedFrameworkApp *>(hApp);
- pApp->connectMonitorTable.insert(std::make_pair(connectSock, connectKey));
- }
- }
- }
-
- return eStatus;
-}
-
-///
-/// Abnormal monitor(client): Del
-///
-EFrameworkunifiedStatus frameworkunifiedDelConnectMonitor(HANDLE hApp, PCSTR serverName, PCSTR clientName) {
- EFrameworkunifiedStatus eStatus = eFrameworkunifiedStatusOK;
- CFrameworkunifiedFrameworkApp *pApp = static_cast<CFrameworkunifiedFrameworkApp *>(hApp);
-
- char connectKey[32];
- mcSetConnectKey(connectKey, sizeof(connectKey), serverName, clientName);
-
- long connectSock; // NOLINT (readability/nolint)
- if (frameworkunifiedGetResource(FRAMEWORKUNIFIED_RES_ABNMLMON, connectKey, &connectSock) < 0) {
- eStatus = eFrameworkunifiedStatusFail;
- } else {
- if (pApp->connectMonitorTable.find(static_cast<Socket>(connectSock)) != pApp->connectMonitorTable.end()) {
- pApp->connectMonitorTable.erase(static_cast<Socket>(connectSock));
- }
-
- if (epoll_ctl(pApp->efd, EPOLL_CTL_DEL, static_cast<int>(connectSock), NULL) < 0) {
- FRAMEWORKUNIFIEDLOG(ZONE_NS_ERR, __FUNCTION__, "ERROR : epoll_ctl:%s", strerror(errno));
- eStatus = eFrameworkunifiedStatusFail;
- }
- }
-
- return eStatus;
-}
-
-///
-/// Abnormal monitor(common): Attach callback
-///
-EFrameworkunifiedStatus FrameworkunifiedAttachLostSessionCallbackToDispatcher(HANDLE hApp, CbFuncPtr fpLostSession) {
- EFrameworkunifiedStatus eStatus = eFrameworkunifiedStatusOK;
-
- if (frameworkunifiedCheckValidAppHandle(hApp) == FALSE || fpLostSession == NULL) {
- eStatus = eFrameworkunifiedStatusInvldParam;
- } else {
- CFrameworkunifiedFrameworkApp *pApp = static_cast<CFrameworkunifiedFrameworkApp *>(hApp);
- pApp->lostSessionHandler = fpLostSession;
- }
-
- return eStatus;
-}
-
-///
-/// Abnormal monitor(common): Get lost session data
-///
-EFrameworkunifiedStatus FrameworkunifiedGetLostSessionData(HANDLE hApp, PSTR pServiceName, PUI_32 puiSessionId) {
- EFrameworkunifiedStatus eStatus = eFrameworkunifiedStatusOK;
-
- if (frameworkunifiedCheckValidAppHandle(hApp) == FALSE || pServiceName == NULL || puiSessionId == NULL) {
- eStatus = eFrameworkunifiedStatusInvldParam;
- } else {
- CFrameworkunifiedFrameworkApp *pApp = static_cast<CFrameworkunifiedFrameworkApp *>(hApp);
- if (pApp->lostSessionQueue.empty()) {
- eStatus = eFrameworkunifiedStatusAccessError;
- } else {
- LostSessionInfo info = pApp->lostSessionQueue.front();
- pApp->lostSessionQueue.pop();
- strcpy(pServiceName, info.sServiceName.c_str()); // NOLINT (readability/nolint)
- *puiSessionId = info.iSessionId;
- }
- }
-
- return eStatus;
-}
-
-
-//////////////////////////////////////////
-// Function : FrameworkunifiedDispatchProcess
-//////////////////////////////////////////
-EFrameworkunifiedStatus FrameworkunifiedDispatchProcess(HANDLE hApp) {
- EFrameworkunifiedStatus eStatus = eFrameworkunifiedStatusOK;
- // FRAMEWORKUNIFIEDLOG0(ZONE_NS_DIS, __FUNCTION__, "+");
-
- if (frameworkunifiedCheckValidAppHandle(hApp)) {
- CFrameworkunifiedFrameworkApp *pApp = static_cast<CFrameworkunifiedFrameworkApp *>(hApp);
- struct rusage start, end;
- BOOL enable_rusage = NsLogIsZoneSet(ZONE_NS_DEBUG_DUMP);
-
- if (enable_rusage == TRUE) {
- frameworkunifiedGetRusage(&start);
- }
-
- if (0 != strcmp(FRAMEWORKUNIFIED_NS_NPSERVICE, pApp->cMsgSrcName)) { // < if not from NPP service
- switch (pApp->uiProtocolCmd) {
- case PROTOCOL_REGISTER_EVENTS: {
- FRAMEWORKUNIFIEDLOG(ZONE_NS_IMP_INFO, __FUNCTION__, "%s subscribing to session event on sessionid %d",
- pApp->cMsgSrcName != 0 ? pApp->cMsgSrcName : NULL, pApp->uiSessionId);
-
- eStatus = ProcessProtocolEvents(hApp);
- }
- break;
-
- case PROTOCOL_UNREGISTER_EVENTS: {
- FRAMEWORKUNIFIEDLOG(ZONE_NS_IMP_INFO, __FUNCTION__, "%s unsubscribing private event on sessionid %d",
- pApp->cMsgSrcName != 0 ? pApp->cMsgSrcName : NULL, pApp->uiSessionId);
-
- eStatus = UnregisterPrivateEvents(hApp);
- }
- break;
-
- case PROTOCOL_CLOSE_SESSION_REQ:
- case PROTOCOL_CLOSE_SESSION_REQ_SYNC: {
- FRAMEWORKUNIFIEDLOG(ZONE_NS_IMP_INFO, __FUNCTION__, "Close session request received from %s",
- pApp->cMsgSrcName != 0 ? pApp->cMsgSrcName : NULL);
-
- // Handle the session events on the close session request
- (VOID)HandleSessionEventOnCloseSession(hApp);
-
- frameworkunifiedDelAcceptMonitor(hApp);
-
- eStatus = FrameworkunifiedProcessServiceProtocol(hApp);
- }
- break;
-
- case PROTOCOL_OPEN_SESSION_REQ:
- case PROTOCOL_OPEN_SESSION_REQ_SYNC: {
- FRAMEWORKUNIFIEDLOG(ZONE_NS_IMP_INFO, __FUNCTION__, "Open session request received from %s",
- pApp->cMsgSrcName != 0 ? pApp->cMsgSrcName : NULL);
-
- eStatus = FrameworkunifiedProcessServiceProtocol(hApp);
- if (eStatus == eFrameworkunifiedStatusOK) {
- frameworkunifiedAddAcceptMonitor(hApp);
- }
- }
- break;
-
- default: {
- eStatus = FrameworkunifiedProcessServiceProtocol(hApp);
- }
- break;
- }
- } else {
- NotificationTable::iterator n_iterator;
- FrameworkunifiedGetSystemInfo(pApp, pApp->cSystemInfo);
- n_iterator = pApp->notifications.find(static_cast<PSTR>(pApp->cSystemInfo));
- if (n_iterator != pApp->notifications.end()) {
- FRAMEWORKUNIFIEDLOG(ZONE_NS_DIS, __FUNCTION__, " Notification found in NS_NP :: (%s)."
- " Processing callback function.", n_iterator->first.c_str());
- eStatus = (*n_iterator).second(hApp);
- } else {
- NotificationEventTable::iterator n_iterator;
- FrameworkunifiedGetSystemInfo(pApp, pApp->cSystemInfo);
- n_iterator = pApp->notificationevents.find(static_cast<PSTR>(pApp->cSystemInfo));
- if (n_iterator != pApp->notificationevents.end()) {
- CFrameworkunifiedHSMFramework *l_pStateMachine = FrameworkunifiedGetStateMachine(hApp);
- if (l_pStateMachine) {
- FRAMEWORKUNIFIEDLOG(ZONE_NS_DIS, __FUNCTION__, " Notification found in NS_NP :: (%s)."
- " Processing HSM event.", n_iterator->first.c_str());
- eStatus = l_pStateMachine->FrameworkunifiedPostEvent(n_iterator->second);
- }
- } else {
- /// Paul A. Dennis (FOUND BUG)
- /// For Persistent Data NS_NP sends the data back as a normal command not via the
- /// notification logic... The Ack's for NPReadPersistedData,NPRegisterFilePath and
- /// NPLoadFileFromPersistentStorage were never getting back
- /// to the requester because its's not looking in the correct location.
- /// So, Check the Services to see if the user has defined the Ack commands via the
- /// services map
- eStatus = FrameworkunifiedProcessServiceProtocol(hApp);
- }
- }
- }
-
- frameworkunifiedProcessSyncResponse(hApp, eStatus);
-
- if ((eStatus != eFrameworkunifiedStatusOK) && (eStatus != eFrameworkunifiedStatusExit) && (eStatus != eFrameworkunifiedStatusMsgNotProcessed)) {
- FRAMEWORKUNIFIEDLOG(ZONE_NS_ERR, __FUNCTION__, " Error :: %d, (%s) Event Info :: (%s), (%d), (%s)",
- eStatus,
- pApp->cAppName != 0 ? static_cast<PSTR>(pApp->cAppName) : NULL,
- pApp->cMsgSrcName != 0 ? static_cast<PSTR>(pApp->cMsgSrcName) : NULL,
- pApp->uiProtocolCmd,
- pApp->cSystemInfo != 0 ? static_cast<PSTR>(pApp->cSystemInfo) : NULL);
- }
-
- if (eStatus == eFrameworkunifiedStatusMsgNotProcessed) {
- FRAMEWORKUNIFIEDLOG(ZONE_NS_WAR, __FUNCTION__, "WARNING:: No handler found for :: "
- "Source: %s, Protocol Command: 0x%x, Session Id: %u.",
- pApp->cMsgSrcName != 0 ? pApp->cMsgSrcName : NULL,
- pApp->uiProtocolCmd, pApp->uiSessionId);
- FrameworkunifiedClearMsgData(hApp);
- eStatus = eFrameworkunifiedStatusOK;
- } else {
-// FRAMEWORKUNIFIEDLOG(ZONE_NS_DIS, __FUNCTION__, "Message processed. Status (0x%X) ::"
-// " Source: %s Command: 0x%x SessionId: %d.",
-// eStatus, pApp->cMsgSrcName != 0 ? pApp->cMsgSrcName : NULL,
-// pApp->uiProtocolCmd, pApp->uiSessionId);
- }
-
- if (enable_rusage == TRUE) {
- frameworkunifiedGetRusage(&end);
- frameworkunifiedPrintRusage(hApp, start, end);
- }
- } else {
- eStatus = eFrameworkunifiedStatusInvldHandle;
- }
-
- // FRAMEWORKUNIFIEDLOG0(ZONE_NS_DIS, __FUNCTION__, "-");
- return eStatus;
-}
-
-
-
-
-//////////////////////////////////////////
-// Function : FrameworkunifiedCloseDispatcher
-//////////////////////////////////////////
-EFrameworkunifiedStatus FrameworkunifiedCloseDispatcher(HANDLE hApp) {
- EFrameworkunifiedStatus eStatus = eFrameworkunifiedStatusOK;
-
- if (frameworkunifiedCheckValidAppHandle(hApp)) {
- CFrameworkunifiedFrameworkApp *pApp = static_cast<CFrameworkunifiedFrameworkApp *>(hApp);
- pApp->checkCode = 0;
-
- if (NULL != pApp->hAppRcvMsgQ) {
- McClose(pApp->hAppRcvMsgQ);
- pApp->hAppRcvMsgQ = NULL;
- }
-
- if (pApp->siMonitorSock) {
- mcCloseMonitor(pApp->cAppName);
- pApp->siMonitorSock = 0;
- }
-
- if (NULL != pApp->hAppSndMsgQ) {
- McClose(pApp->hAppSndMsgQ);
- pApp->hAppSndMsgQ = NULL;
- }
-
- if (NULL != pApp->hNPSndMsgQ) {
- FrameworkunifiedMcClose(pApp->hNPSndMsgQ);
- pApp->hNPSndMsgQ = NULL;
- }
-
- if (NULL != pApp->hParentSndMsgQ) {
- McClose(pApp->hParentSndMsgQ);
- pApp->hParentSndMsgQ = NULL;
- }
-
- if (0 < pApp->defer_evfd) {
- close(pApp->defer_evfd);
- pApp->defer_evfd = 0;
- }
-
- if (0 < pApp->efd) {
- close(pApp->efd);
- pApp->efd = 0;
- }
-
- delete(pApp);
- pApp = NULL; // mb20110110 Added per comment 216
- // NOTE: However, client still needs to set his own pointer to NULL
- } else {
- eStatus = eFrameworkunifiedStatusInvldHandle;
- }
-
- return eStatus;
-}
-
-//////////////////////////////////////////
-// Function : FrameworkunifiedPopedDeferedMessage
-//////////////////////////////////////////
-BOOL FrameworkunifiedPopedDeferedMessage(HANDLE hApp) {
- BOOL rtnFlag = FALSE;
-
- // LCOV_EXCL_BR_START 6:FrameworkunifiedPopedDeferedMessage is internal function, hApp is checked in extenal API
- if (frameworkunifiedCheckValidAppHandle(hApp)) {
- // LCOV_EXCL_BR_STOP
- CFrameworkunifiedFrameworkApp *pApp = static_cast<CFrameworkunifiedFrameworkApp *>(hApp);
-
- // check if the pop flag is send and there is something to pop!
- if (pApp->fPopDeferedMsg && !pApp->deferedMsgQueue.empty()) {
- // get the message at the top\front of the queue
- DeferedMsgInfo defered(pApp->deferedMsgQueue.front());
-
- // remove this item from the queue using pop
- pApp->deferedMsgQueue.pop();
-
- // copy the data into the pApp
- pApp->uiProtocolCmd = defered.uiProtocolCmd;
- strlcpy(pApp->cMsgSrcName, defered.cMsgSrcName, sizeof(pApp->cMsgSrcName));
- std::memcpy(pApp->uiMsgRcvBuffer, defered.uiMsgRcvBuffer, MAX_MSGQ_BUFFER);
-
- // clear the pop flag!
- pApp->fPopDeferedMsg = FALSE;
-
- // set the return flag TRUE, we have pop'ed
- rtnFlag = TRUE;
- }
- }
-
- return rtnFlag;
-}
-
-
-
-//////////////////////////////////////////
-// Function : FrameworkunifiedDispatcher
-//////////////////////////////////////////
-EFrameworkunifiedStatus FrameworkunifiedDispatcher(PCSTR cAppName, const FrameworkunifiedDefaultCallbackHandler *CbHandler) {
- FRAMEWORKUNIFIEDLOG(ZONE_NS_DIS, __FUNCTION__, "In");
- return FrameworkunifiedDispatcherWithArguments(cAppName, 0, NULL, CbHandler);
-}
-
-///////////////////////////////////////////////////////////////////////////////////////////
-// FrameworkunifiedDispatcherWithArguments
-// Creates, initializes and runs the dispatcher
-///////////////////////////////////////////////////////////////////////////////////////////
-EFrameworkunifiedStatus FrameworkunifiedDispatcherWithArguments(PCSTR cAppName, int argc, char *argv[],
- const FrameworkunifiedDefaultCallbackHandler *CbHandler,
- CustomCommandLineOptions *cmdLineOptions) {
- EFrameworkunifiedStatus eStatus = eFrameworkunifiedStatusOK;
-
- if (cAppName == NULL) {
- return eFrameworkunifiedStatusNullPointer;
- }
-
- NsLogSetProcessName(cAppName);
- PLOG_TEXT("FrameworkunifiedDispatcher Start");
- // set main thread name as provided in dispatcher
- pthread_setname_np(pthread_self(), cAppName);
-
- FRAMEWORKUNIFIEDLOG0(ZONE_NS_DIS, __FUNCTION__, "In");
-
- if ((eStatus = RegistDefaultCbHandler(CbHandler)) != eFrameworkunifiedStatusOK) {
- return eStatus;
- }
-
- try {
- HANDLE hFrameworkApp = NULL;
-
- if (eFrameworkunifiedStatusOK == (eStatus = FrameworkunifiedCreateDispatcher(cAppName, hFrameworkApp, FALSE))) {
- // LCOV_EXCL_BR_START 6:if FrameworkunifiedCreateDispatcher return eFrameworkunifiedStatusOK, hFrameworkApp is not NULL
- if (NULL != hFrameworkApp) {
- // LCOV_EXCL_BR_STOP
- THApp hApp(hFrameworkApp);
-
- /// Parse the Arguments via the FrameworkunifiedArgumentParser
- /// passing an handle to the app and argument list
- eStatus = FrameworkunifiedArgumentParser(hApp, argc, argv, cmdLineOptions);
-
- if (eFrameworkunifiedStatusOK == eStatus) {
- eStatus = FrameworkunifiedDispatcherMain(hApp);
- }
- } else {
- FRAMEWORKUNIFIEDLOG(ZONE_NS_ERR, __FUNCTION__, "hFrameworkApp is NULL");
- eStatus = eFrameworkunifiedStatusNullPointer;
- }
- } else {
- FRAMEWORKUNIFIEDLOG(ZONE_NS_ERR, __FUNCTION__, "FrameworkunifiedCreateDispatcher error, status=%d", eStatus);
- }
- } catch (const std::exception &e) {
- FRAMEWORKUNIFIEDLOG(ZONE_NS_ERR, __FUNCTION__, "Error: Failed to FrameworkunifiedCreateDispatcher: %s", e.what());
- eStatus = eFrameworkunifiedStatusNullPointer;
- }
-
-
- return eStatus;
-}
-
-// required for parsing subargument of -r
-char *g_cPlogSubOpts[] = {
-#define PLOG_OUTPUT 0
- const_cast<PSTR>("output"),
- NULL
-};
-
-EFrameworkunifiedStatus FrameworkunifiedArgumentParser(HANDLE hApp, int argc, char *argv[], CustomCommandLineOptions *cmdLineOptions) {
- EFrameworkunifiedStatus eStatus = eFrameworkunifiedStatusOK;
- TFrameworkunifiedZoneMask mask = {};
- PCHAR l_cMask = NULL;
- UI_32 l_iMaskCount = 0;
- CHAR l_logoutput[MAX_QUEUE_NAME_SIZE];
- CHAR l_tFilePath[MAX_PATH_LENGTH];
-
- BOOL l_bHasConfigFilepath = FALSE;
-
- SI_32 l_iOpt = 0;
- SI_32 l_iPriority = 10;
- PSTR l_cOptions;
- PSTR l_cValue;
-
- FRAMEWORKUNIFIEDLOG(ZONE_NS_DIS, __FUNCTION__, "In");
-
- if (frameworkunifiedCheckValidAppHandle(hApp)) {
-#ifdef DISPATCHER_PROFILER
- CFrameworkunifiedFrameworkApp *pApp = reinterpret_cast< CFrameworkunifiedFrameworkApp * >(hApp);
-#endif
-
- if (argc > 0 && argv != NULL) {
- // l:m:t:c: options are reserved for NS Framework and should not be used by other FRAMEWORKUNIFIED Applications.
- CHAR l_cNSOptions[MAX_STRING_SIZE_TAG] = {};
-
- strncpy(l_cNSOptions, "l:m:c:p:qr:s", (MAX_STRING_SIZE_TAG - 1));
- optind = 1;
-
- if (NULL != cmdLineOptions) {
- // append custom options
- strncat(l_cNSOptions, cmdLineOptions->cShortOptions, (MAX_STRING_SIZE_TAG - strlen(l_cNSOptions) - 1));
- }
- while ((eFrameworkunifiedStatusOK == eStatus) && ((l_iOpt = getopt(argc, argv, l_cNSOptions)) != -1)) {
- switch (l_iOpt) {
- case 'm': // mask value..
- FRAMEWORKUNIFIEDLOG(ZONE_NS_DIS, __FUNCTION__, "-m (mask value): %s", optarg);
- /*
- * @todo
- * If the second of the command-line arguments is-m and the third is not, an exception occurs.
- */
- char *saveptr;
- l_cMask = strtok_r(optarg, ",", &saveptr);
-
- while (NULL != l_cMask) {
- mask[l_iMaskCount++] = static_cast<TFrameworkunifiedZone>(strtoul(l_cMask, NULL, 16));
- l_cMask = strtok_r(NULL, ",", &saveptr);
- }
- NsLogSetControlMask(mask);
- break;
- case 'l': // log output
- strncpy(l_logoutput, optarg, (MAX_QUEUE_NAME_SIZE - 1));
- FRAMEWORKUNIFIEDLOG(ZONE_NS_DIS, __FUNCTION__, "-l (log output option): %s", l_logoutput);
- NsLogSetLogMethod(NsLogDetermineLogMethod(l_logoutput));
- break;
- case 'c': // config file option
- strncpy(l_tFilePath, optarg, (MAX_PATH_LENGTH - 1));
- FRAMEWORKUNIFIEDLOG(ZONE_NS_DIS, __FUNCTION__, "-c (set config file): %s", l_tFilePath);
- eStatus = SetConfigHandle(hApp, l_tFilePath);
- l_bHasConfigFilepath = TRUE;
- break;
- case 'p': // priority
- FRAMEWORKUNIFIEDLOG(ZONE_NS_DIS, __FUNCTION__, "-p (set priority): %s", optarg);
- if (eFrameworkunifiedStatusOK != frameworkunified::framework::CFrameworkunifiedThreadPriorities::ParseThreadArguments(optarg)) {
- FRAMEWORKUNIFIEDLOG(ZONE_NS_WAR, __FUNCTION__, "WARNING!! Failed to parse sub arguments of -p");
- }
- l_iPriority = frameworkunified::framework::CFrameworkunifiedThreadPriorities::GetPriority(FrameworkunifiedGetAppName(hApp));
- // set only if valid prio, otherwise use the default one
- if (FRAMEWORKUNIFIED_PRIORITY_NOT_FOUND != l_iPriority) {
- pthread_setschedprio(pthread_self(),
- frameworkunified::framework::CFrameworkunifiedThreadPriorities::GetPriority(FrameworkunifiedGetAppName(hApp)));
- }
- break;
- case 'q':
-#ifdef DISPATCHER_PROFILER
- FRAMEWORKUNIFIEDLOG(ZONE_NS_DIS, __FUNCTION__, "-q (set msg dispatcher profiler)");
- FrameworkunifiedMsgProfiler::m_bMsgProfilerEnabled = TRUE;
- pApp->m_pFrameworkunifiedMsgProfiler = new(nothrow) FrameworkunifiedMsgProfiler(FrameworkunifiedGetAppName(hApp));
-#endif
- break;
- case 'r':
- NSLogEnablePLog(TRUE);
- l_cOptions = optarg;
- while (*l_cOptions != '\0') {
- switch (getsubopt(&l_cOptions, g_cPlogSubOpts, &l_cValue)) {
- case PLOG_OUTPUT: {
- if (l_cValue != NULL) {
- NSLogSetPlogOutputOptions(static_cast<UI_8>(strtoul(l_cValue, NULL, 16)));
- }
- break;
- }
- default: {
- break;
- }
- }
- }
- break;
- case 's':
- NSLogEnableSysEventLog(TRUE);
- break;
- default:
- if (NULL != cmdLineOptions) {
- // option other than l:m:t:c: is a custom option, therefore let application handle that option.
- if (eFrameworkunifiedStatusOK != cmdLineOptions->callback(l_iOpt, optarg)) {
- // Do not terminate an application even if invalid arguments received
- // eStatus = eFrameworkunifiedStatusFail;
- FRAMEWORKUNIFIEDLOG(ZONE_NS_WAR, __FUNCTION__, "WARNING!! Invalid cmd line argument received.");
- }
- } else {
- // Do not terminate an application even if invalid arguments received
- // eStatus = eFrameworkunifiedStatusFail;
- FRAMEWORKUNIFIEDLOG(ZONE_NS_WAR, __FUNCTION__, "WARNING!! Invalid cmd line argument received.");
- }
- break;
- }
- }
- }
-
- // if no config option is selected then use the default config path
- if ((FALSE == l_bHasConfigFilepath) && (eFrameworkunifiedStatusOK == eStatus)) {
- eStatus = SetDefaultConfigFile(hApp);
- }
- } else {
- eStatus = eFrameworkunifiedStatusInvldHandle;
- }
-
- return eStatus;
-}
-
-//////////////////////////////////////////
-// Function : FrameworkunifiedSimpleDispatcher
-//////////////////////////////////////////
-EFrameworkunifiedStatus FrameworkunifiedSimpleDispatcher(PCSTR cAppName, const FrameworkunifiedDefaultCallbackHandler *CbHandler, CbFuncPtr CbShutdown,
- BOOL isChildThread) {
- EFrameworkunifiedStatus eStatus = eFrameworkunifiedStatusOK;
-
- // if main thread then set log process name
- if (!isChildThread) {
- NsLogSetProcessName(cAppName);
- }
-
- if ((eStatus = RegistDefaultCbHandler(CbHandler)) != eFrameworkunifiedStatusOK) {
- return eStatus;
- }
-
- FRAMEWORKUNIFIEDLOG(ZONE_NS_DIS, __FUNCTION__, "+");
-
- if (NULL != CbShutdown) {
- try {
- HANDLE hFrameworkApp = NULL;
-
- if (eFrameworkunifiedStatusOK == (eStatus = FrameworkunifiedCreateDispatcher(cAppName, hFrameworkApp, isChildThread))) {
- // LCOV_EXCL_BR_START 6:if FrameworkunifiedCreateDispatcher return eFrameworkunifiedStatusOK, hFrameworkApp is not NULL
- if (NULL != hFrameworkApp) {
- // LCOV_EXCL_BR_STOP
- THApp hApp(hFrameworkApp);
-
- // Call application defined start function
- eStatus = FrameworkunifiedOnInitializationInternal(hApp);
-
- if (eFrameworkunifiedStatusOK != eStatus) {
- FRAMEWORKUNIFIEDLOG(ZONE_NS_ERR, __FUNCTION__, "FrameworkunifiedOnInitialization failed ");
- throw happ_error();
- } else {
- while (eFrameworkunifiedStatusExit != eStatus) {
- try {
- // dispatch block: waits on receive message
- if (eFrameworkunifiedStatusOK != (eStatus = FrameworkunifiedDispatchBlock(hApp))) {
- FRAMEWORKUNIFIEDLOG(ZONE_NS_ERR, __FUNCTION__, "Error: FrameworkunifiedDispatchBlock : 0x%x ", eStatus);
- continue;
- }
- // dispatch process: calls respective call back functions
- if (eFrameworkunifiedStatusOK != (eStatus = FrameworkunifiedDispatchProcess(hApp))) {
- FRAMEWORKUNIFIEDLOG(ZONE_NS_ERR, __FUNCTION__, "Error: FrameworkunifiedDispatchProcess : 0x%x ", eStatus);
- }
- } catch (const frameworkunified::framework::error::CSystemError &err) {
- FRAMEWORKUNIFIEDLOG(ZONE_NS_ERR, __FUNCTION__, "ERROR :: %s", err.what());
- eStatus = eFrameworkunifiedStatusErrOther;
- FrameworkunifiedSendSystemErrMessage(hApp, err.m_eSystemError);
- } catch (const std::exception &err) {
- FRAMEWORKUNIFIEDLOG(ZONE_NS_ERR, __FUNCTION__, "Recovering from: %s", err.what());
- eStatus = eFrameworkunifiedStatusErrOther;
- }
- }
- FRAMEWORKUNIFIEDLOG(ZONE_NS_ERR, __FUNCTION__, "Exiting dispatcher ");
- }
- // Call application defined stop function
- eStatus = CbShutdown(hApp);
- } else {
- FRAMEWORKUNIFIEDLOG0(ZONE_NS_ERR, __FUNCTION__, "hFrameworkApp is NULL");
- eStatus = eFrameworkunifiedStatusNullPointer;
- }
- } else {
- FRAMEWORKUNIFIEDLOG0(ZONE_NS_ERR, __FUNCTION__, "FrameworkunifiedCreateDispatcher error, status=%d", eStatus);
- }
- } catch (const THApp::Exception &) {
- FRAMEWORKUNIFIEDLOG(ZONE_NS_ERR, __FUNCTION__, "Error: Failed to FrameworkunifiedCreateDispatcher ");
- eStatus = eFrameworkunifiedStatusNullPointer;
- }
- } else {
- eStatus = eFrameworkunifiedStatusFail;
- }
-
- FRAMEWORKUNIFIEDLOG(ZONE_NS_DIS, __FUNCTION__, "-");
- return eStatus;
-}
-
-EFrameworkunifiedStatus RunDispatcher(HANDLE hApp) {
- EFrameworkunifiedStatus eStatus = eFrameworkunifiedStatusOK;
- int efd;
-
- if (frameworkunifiedCheckValidAppHandle(hApp)) {
-#ifdef DISPATCHER_PROFILER
- // Get the application handle
- CFrameworkunifiedFrameworkApp *pApp = reinterpret_cast< CFrameworkunifiedFrameworkApp * >(hApp);
- if (NULL != pApp->m_pFrameworkunifiedMsgProfiler) {
- FrameworkunifiedAttachMsgProfilerCallbacksDispatcher(hApp);
- }
-#endif
- FrameworkunifiedGetDispatcherFD(hApp, &efd);
-
- while (1) {
- frameworkunifiedFdHandler(hApp, efd);
- }
- } else {
- eStatus = eFrameworkunifiedStatusInvldHandle;
- }
-
- return eStatus;
-}
-
-
-EFrameworkunifiedStatus FrameworkunifiedDispatcherMain(HANDLE hApp) {
- EFrameworkunifiedStatus eStatus = eFrameworkunifiedStatusOK;
-
- if (frameworkunifiedCheckValidAppHandle(hApp)) {
- try {
- FRAMEWORKUNIFIEDLOG0(ZONE_NS_DIS, __FUNCTION__, "Success: FrameworkunifiedCreateDispatcher ");
-
- // Initialize the global structures
- // register service with service dir
- // register notifications
- FRAMEWORKUNIFIEDLOG_PERFORMANCE_DEBUG("FrameworkunifiedOnInitialization +");
- eStatus = FrameworkunifiedOnInitializationInternal(hApp);
- FRAMEWORKUNIFIEDLOG_PERFORMANCE_DEBUG("FrameworkunifiedOnInitialization -");
-
- if (eFrameworkunifiedStatusOK != eStatus) {
- FRAMEWORKUNIFIEDLOG(ZONE_NS_ERR, __FUNCTION__, "FrameworkunifiedOnInitialization failed ");
- throw happ_error();
- } else {
- eStatus = RunDispatcher(hApp);
- CFrameworkunifiedSyncData::FrameworkunifiedReleaseSyncDataInstance();
- }
- } catch (const frameworkunified::framework::error::CSystemError &err) {
- FRAMEWORKUNIFIEDLOG(ZONE_NS_ERR, __FUNCTION__, "ERROR :: %s", err.what());
- eStatus = eFrameworkunifiedStatusErrOther;
- FrameworkunifiedSendSystemErrMessage(hApp, err.m_eSystemError);
- } catch (const THApp::Exception &) {
- FRAMEWORKUNIFIEDLOG0(ZONE_NS_ERR, __FUNCTION__, "Error: Failed to FrameworkunifiedCreateDispatcher ");
- eStatus = eFrameworkunifiedStatusNullPointer;
- }
- } else {
- eStatus = eFrameworkunifiedStatusInvldHandle;
- }
-
- return eStatus;
-}
-
-EFrameworkunifiedStatus FrameworkunifiedCreateDispatcherWithoutLoop(PCSTR cAppName, HANDLE &hApp, int argc, char *argv[], // NOLINT (readability/nolint)
- const FrameworkunifiedDefaultCallbackHandler *CbHandler,
- BOOL bIsConnectSM, CustomCommandLineOptions *cmdLineOptions) {
- EFrameworkunifiedStatus eStatus = eFrameworkunifiedStatusOK;
- THApp *l_hApp = NULL;
-
- if (cAppName == NULL) {
- return eFrameworkunifiedStatusNullPointer;
- }
-
- NsLogSetProcessName(cAppName);
-
- PLOG_TEXT("FrameworkunifiedDispatcher Start");
- // set main thread name as provided in dispatcher
- pthread_setname_np(pthread_self(), cAppName);
-
- if ((eStatus = RegistDefaultCbHandler(CbHandler)) != eFrameworkunifiedStatusOK) {
- return eStatus;
- }
-
- FRAMEWORKUNIFIEDLOG0(ZONE_NS_DIS, __FUNCTION__, "In");
-
- try {
- HANDLE hFrameworkApp = NULL;
-
- if (eFrameworkunifiedStatusOK == (eStatus = FrameworkunifiedCreateDispatcher(cAppName, hFrameworkApp,
- bIsConnectSM == TRUE ? FALSE : TRUE))) {
- // LCOV_EXCL_BR_START 6:if FrameworkunifiedCreateDispatcher return eFrameworkunifiedStatusOK, hFrameworkApp is not NULL
- if (NULL != hFrameworkApp) {
- // LCOV_EXCL_BR_STOP
- l_hApp = new THApp(hFrameworkApp);
- hApp = *l_hApp;
- CFrameworkunifiedFrameworkApp *pApp = static_cast<CFrameworkunifiedFrameworkApp *>(hApp);
- pApp->pRsrcMgr = reinterpret_cast<void *>(l_hApp);
-
- eStatus = FrameworkunifiedArgumentParser(hApp, argc, argv, cmdLineOptions);
-
- if (eFrameworkunifiedStatusOK == eStatus) {
- FRAMEWORKUNIFIEDLOG_PERFORMANCE_DEBUG("FrameworkunifiedOnInitialization +");
- eStatus = FrameworkunifiedOnInitializationInternal(hApp);
- FRAMEWORKUNIFIEDLOG_PERFORMANCE_DEBUG("FrameworkunifiedOnInitialization -");
-
- if (eFrameworkunifiedStatusOK != eStatus) {
- FRAMEWORKUNIFIEDLOG(ZONE_NS_ERR, __FUNCTION__, "FrameworkunifiedOnInitialization failed ");
- }
- }
- }
- } else {
- FRAMEWORKUNIFIEDLOG(ZONE_NS_ERR, __FUNCTION__, "FrameworkunifiedCreateDispatcher error, status=%d", eStatus);
- }
- } catch (const THApp::Exception &) {
- FRAMEWORKUNIFIEDLOG(ZONE_NS_ERR, __FUNCTION__, "Error: Failed to FrameworkunifiedCreateDispatcher ");
- eStatus = eFrameworkunifiedStatusNullPointer;
- }
-
- return eStatus;
-}
-
-EFrameworkunifiedStatus FrameworkunifiedDispatchProcessWithoutLoop(HANDLE hApp) {
- EFrameworkunifiedStatus eStatus = eFrameworkunifiedStatusOK;
- int efd; // FD for multi waiting
-
- if (frameworkunifiedCheckValidAppHandle(hApp)) {
- FrameworkunifiedGetDispatcherFD(hApp, &efd);
- eStatus = frameworkunifiedFdHandler(hApp, efd);
- if (eFrameworkunifiedStatusOK != eStatus) {
- eStatus = eFrameworkunifiedStatusFail;
- }
- } else {
- eStatus = eFrameworkunifiedStatusInvldHandle;
- }
-
- return eStatus;
-}
-
-EFrameworkunifiedStatus FrameworkunifiedDestroyDispatcherWithoutLoop(HANDLE hApp) {
- EFrameworkunifiedStatus eStatus = eFrameworkunifiedStatusOK;
-
- if (frameworkunifiedCheckValidAppHandle(hApp)) {
- try {
- CFrameworkunifiedFrameworkApp *pApp = static_cast<CFrameworkunifiedFrameworkApp *>(hApp);
- THApp *RsrcMgr = reinterpret_cast<THApp *>(pApp->pRsrcMgr);
- delete RsrcMgr;
- } catch (const std::exception &e) {
- FRAMEWORKUNIFIEDLOG(ZONE_NS_ERR, __FUNCTION__, "Error: %s", e.what());
- eStatus = eFrameworkunifiedStatusNullPointer;
- }
- } else {
- eStatus = eFrameworkunifiedStatusInvldHandle;
- }
-
- return eStatus;
-}
-
-static EFrameworkunifiedStatus GetDispatcherMqFD(HANDLE hApp, int *fd) {
- if (fd == NULL) {
- FRAMEWORKUNIFIEDLOG(ZONE_NS_ERR, __func__, "fd is NULL");
- return eFrameworkunifiedStatusNullPointer;
- }
- EFrameworkunifiedStatus eStatus = eFrameworkunifiedStatusOK;
-
- if (frameworkunifiedCheckValidAppHandle(hApp)) {
- CFrameworkunifiedFrameworkApp *pApp = static_cast<CFrameworkunifiedFrameworkApp *>(hApp);
- *fd = McGetQueueFD(pApp->hAppRcvMsgQ);
- } else {
- eStatus = eFrameworkunifiedStatusInvldHandle;
- }
-
- return eStatus;
-}
-
-static EFrameworkunifiedStatus CreateMultiWaitingFD(HANDLE hApp) {
- EFrameworkunifiedStatus eStatus = eFrameworkunifiedStatusOK;
- int efd; // FD for multi waiting
- int q_fd; // FD for Dispatcher's message queue
- int defer_evfd; // FD for receiving Defer events to Dispatcher
- struct epoll_event ev; // Info struct to associate with multiwaiting FD
-
- if (frameworkunifiedCheckValidAppHandle(hApp)) {
- CFrameworkunifiedFrameworkApp *pApp = static_cast<CFrameworkunifiedFrameworkApp *>(hApp);
-
- // Create efd
- efd = epoll_create1(EPOLL_CLOEXEC);
- if (-1 != efd) {
- pApp->efd = efd;
-
- // get fd to Dispatcher's message queue
- eStatus = GetDispatcherMqFD(hApp, &q_fd);
- if (eFrameworkunifiedStatusOK == eStatus) {
- // efd to monitor the q_fd.
- ev.events = EPOLLIN;
- ev.data.fd = q_fd;
- if (-1 == epoll_ctl(efd, EPOLL_CTL_ADD, q_fd, &ev)) {
- eStatus = eFrameworkunifiedStatusFail;
- FRAMEWORKUNIFIEDLOG(ZONE_NS_ERR, __FUNCTION__, "ERROR : epoll_ctl(q_fd, ADD) Failed, "
- "status=%d, errno=%d", eStatus, errno);
- }
- } else {
- eStatus = eFrameworkunifiedStatusFail;
- FRAMEWORKUNIFIEDLOG(ZONE_NS_ERR, __FUNCTION__, "ERROR : GetDispatcherMqFD Failed, status=%d", eStatus);
- }
-
- // create FD for receiving Defer events to Dispatcher
- defer_evfd = eventfd(0, EFD_CLOEXEC);
- if (-1 != defer_evfd) {
- pApp->defer_evfd = defer_evfd;
-
- // efd to monitor the defer_evfd.
- ev.events = EPOLLIN;
- ev.data.fd = defer_evfd;
- if (-1 == epoll_ctl(efd, EPOLL_CTL_ADD, defer_evfd, &ev)) {
- eStatus = eFrameworkunifiedStatusFail;
- FRAMEWORKUNIFIEDLOG(ZONE_NS_ERR, __FUNCTION__, "ERROR : epoll_ctl(defer_evfd, ADD) Failed,"
- " status=%d, errno=%d", eStatus, errno);
- }
- } else {
- eStatus = eFrameworkunifiedStatusFail;
- FRAMEWORKUNIFIEDLOG(ZONE_NS_ERR, __FUNCTION__, "ERROR : eventfd Failed, status=%d, errno=%d", eStatus, errno);
- }
-
- // add abnormal monitor socket polling
- if (-1 != pApp->siMonitorSock) {
- ev.events = EPOLLIN;
- ev.data.fd = pApp->siMonitorSock;
- if (-1 == epoll_ctl(efd, EPOLL_CTL_ADD, pApp->siMonitorSock, &ev)) {
- eStatus = eFrameworkunifiedStatusFail;
- FRAMEWORKUNIFIEDLOG(ZONE_NS_ERR, __FUNCTION__, "ERROR : epoll_ctl:%s", strerror(errno));
- }
- }
- } else {
- eStatus = eFrameworkunifiedStatusFail;
- FRAMEWORKUNIFIEDLOG(ZONE_NS_ERR, __FUNCTION__, "ERROR : epoll_create1 Failed, status=%d, errno=%d", eStatus, errno);
- }
- } else {
- eStatus = eFrameworkunifiedStatusInvldHandle;
- FRAMEWORKUNIFIEDLOG(ZONE_NS_ERR, __FUNCTION__, "ERROR : %d, Invalid hApp ", eStatus);
- }
-
- return eStatus;
-}
-
-EFrameworkunifiedStatus FrameworkunifiedGetDispatcherFD(HANDLE hApp, int *efd) {
- EFrameworkunifiedStatus eStatus = eFrameworkunifiedStatusOK;
-
- if (frameworkunifiedCheckValidAppHandle(hApp)) {
- if (NULL != efd) {
- CFrameworkunifiedFrameworkApp *pApp = static_cast<CFrameworkunifiedFrameworkApp *>(hApp);
- *efd = pApp->efd;
- } else {
- eStatus = eFrameworkunifiedStatusNullPointer;
- }
- } else {
- eStatus = eFrameworkunifiedStatusInvldHandle;
- FRAMEWORKUNIFIEDLOG(ZONE_NS_ERR, __FUNCTION__, "ERROR : %d, Invalid hApp ", eStatus);
- }
-
- return eStatus;
-}
-
-EFrameworkunifiedStatus FrameworkunifiedOnInitializationInternal(HANDLE hApp) {
- EFrameworkunifiedStatus eStatus = eFrameworkunifiedStatusFail;
-
- if (g_defaultCallbackHandler.onInitilization != NULL) {
- try {
- eStatus = g_defaultCallbackHandler.onInitilization(hApp);
- } catch (const std::exception &e) {
- FRAMEWORKUNIFIEDLOG(ZONE_NS_ERR, __FUNCTION__, "Error: %s", e.what());
- }
- }
- return eStatus;
-}
-
-EFrameworkunifiedStatus FrameworkunifiedOnDestroyInternal(HANDLE hApp) {
- EFrameworkunifiedStatus eStatus = eFrameworkunifiedStatusFail;
-
- if (g_defaultCallbackHandler.onDestroy != NULL) {
- CFrameworkunifiedFrameworkApp *pApp = static_cast<CFrameworkunifiedFrameworkApp *>(hApp);
- if (pApp->hParentSndMsgQ == NULL) {
- // main thread
- try {
- eStatus = g_defaultCallbackHandler.onDestroy(hApp);
- } catch (const std::exception &e) {
- FRAMEWORKUNIFIEDLOG(ZONE_NS_ERR, __FUNCTION__, "Error: %s", e.what());
- }
- } else {
- eStatus = eFrameworkunifiedStatusOK;
- }
- }
- return eStatus;
-}
-
-EFrameworkunifiedStatus FrameworkunifiedOnStartInternal(HANDLE hApp) {
- EFrameworkunifiedStatus eStatus = eFrameworkunifiedStatusFail;
-
- if (g_defaultCallbackHandler.onStart != NULL) {
- try {
- eStatus = g_defaultCallbackHandler.onStart(hApp);
- } catch (const std::exception &e) {
- FRAMEWORKUNIFIEDLOG(ZONE_NS_ERR, __FUNCTION__, "Error: %s", e.what());
- }
- }
- return eStatus;
-}
-
-EFrameworkunifiedStatus FrameworkunifiedOnStopInternal(HANDLE hApp) {
- EFrameworkunifiedStatus eStatus = eFrameworkunifiedStatusFail;
-
- if (g_defaultCallbackHandler.onStop != NULL) {
- try {
- eStatus = g_defaultCallbackHandler.onStop(hApp);
- } catch (const std::exception &e) {
- FRAMEWORKUNIFIEDLOG(ZONE_NS_ERR, __FUNCTION__, "Error: %s", e.what());
- }
- }
- return eStatus;
-}
-
-EFrameworkunifiedStatus FrameworkunifiedOnPreStartInternal(HANDLE hApp) {
- EFrameworkunifiedStatus eStatus = eFrameworkunifiedStatusFail;
-
- if (g_defaultCallbackHandler.onPreStart != NULL) {
- try {
- eStatus = g_defaultCallbackHandler.onPreStart(hApp);
- } catch (const std::exception &e) {
- FRAMEWORKUNIFIEDLOG(ZONE_NS_ERR, __FUNCTION__, "Error: %s", e.what());
- }
- }
- return eStatus; // LCOV_EXCL_BR_LINE 11:Excluded due to gcov constraints (others)
-}
-
-EFrameworkunifiedStatus FrameworkunifiedOnPreStopInternal(HANDLE hApp) {
- EFrameworkunifiedStatus eStatus = eFrameworkunifiedStatusFail;
-
- if (g_defaultCallbackHandler.onPreStop != NULL) {
- try {
- eStatus = g_defaultCallbackHandler.onPreStop(hApp);
- } catch (const std::exception &e) {
- FRAMEWORKUNIFIEDLOG(ZONE_NS_ERR, __FUNCTION__, "Error: %s", e.what());
- }
- }
- return eStatus; // LCOV_EXCL_BR_LINE 11:Excluded due to gcov constraints (others)
-}
-
-EFrameworkunifiedStatus FrameworkunifiedOnBackgroundStartInternal(HANDLE hApp) {
- EFrameworkunifiedStatus eStatus = eFrameworkunifiedStatusFail;
-
- if (g_defaultCallbackHandler.onBackgroundStart != NULL) {
- try {
- eStatus = g_defaultCallbackHandler.onBackgroundStart(hApp);
- } catch (const std::exception &e) {
- FRAMEWORKUNIFIEDLOG(ZONE_NS_ERR, __FUNCTION__, "Error: %s", e.what());
- }
- }
- return eStatus; // LCOV_EXCL_BR_LINE 11:Excluded due to gcov constraints (others)
-}
-
-EFrameworkunifiedStatus FrameworkunifiedOnBackgroundStopInternal(HANDLE hApp) {
- EFrameworkunifiedStatus eStatus = eFrameworkunifiedStatusFail;
-
- if (g_defaultCallbackHandler.onBackgroundStop != NULL) {
- try {
- eStatus = g_defaultCallbackHandler.onBackgroundStop(hApp);
- } catch (const std::exception &e) {
- FRAMEWORKUNIFIEDLOG(ZONE_NS_ERR, __FUNCTION__, "Error: %s", e.what());
- }
- }
- return eStatus; // LCOV_EXCL_BR_LINE 11:Excluded due to gcov constraints (others)
-}
-
-EFrameworkunifiedStatus FrameworkunifiedOnDebugDumpInternal(HANDLE hApp) {
- EFrameworkunifiedStatus eStatus = eFrameworkunifiedStatusFail;
-
- if (g_defaultCallbackHandler.onDebugDump != NULL) {
- try {
- eStatus = g_defaultCallbackHandler.onDebugDump(hApp);
- } catch (const std::exception &e) {
- FRAMEWORKUNIFIEDLOG(ZONE_NS_ERR, __FUNCTION__, "Error: %s", e.what());
- }
- }
- return eStatus;
-}
-
-EFrameworkunifiedStatus FrameworkunifiedCreateStateMachineInternal(HANDLE hApp) {
- EFrameworkunifiedStatus eStatus = eFrameworkunifiedStatusFail;
-
- if (g_defaultCallbackHandler.createStateMachine != NULL) {
- try {
- eStatus = g_defaultCallbackHandler.createStateMachine(hApp);
- } catch (const std::exception &e) {
- FRAMEWORKUNIFIEDLOG(ZONE_NS_ERR, __FUNCTION__, "Error: %s", e.what());
- }
- }
- return eStatus;
-}
-
-EFrameworkunifiedStatus FrameworkunifiedSSFrameworkInterfaceInternal(HANDLE hApp) {
- EFrameworkunifiedStatus eStatus = eFrameworkunifiedStatusFail;
-
- if (g_defaultCallbackHandler.ssFrameworkInterface != NULL) {
- try {
- eStatus = g_defaultCallbackHandler.ssFrameworkInterface(hApp);
- } catch (const std::exception &e) {
- FRAMEWORKUNIFIEDLOG(ZONE_NS_ERR, __FUNCTION__, "Error: %s", e.what());
- }
- }
- return eStatus;
-}
-
-EFrameworkunifiedStatus RegistDefaultCbHandler(const FrameworkunifiedDefaultCallbackHandler *CbHandler) {
- if (CbHandler == NULL) {
- return eFrameworkunifiedStatusNullPointer;
- } else if (CbHandler->onInitilization == NULL || CbHandler->onDestroy == NULL || CbHandler->onStart == NULL ||
- CbHandler->onStop == NULL
- || CbHandler->onPreStart == NULL || CbHandler->onPreStop == NULL
- || CbHandler->onBackgroundStart == NULL || CbHandler->onBackgroundStop == NULL
- || CbHandler->onDebugDump == NULL || CbHandler->createStateMachine == NULL
- || CbHandler->ssFrameworkInterface == NULL) {
- FRAMEWORKUNIFIEDLOG(ZONE_NS_ERR, __FUNCTION__, " [ ABORT ] DefaultCallbackHandler is NULL");
- return eFrameworkunifiedStatusInvldParam;
- }
-
- g_defaultCallbackHandler = *CbHandler;
- return eFrameworkunifiedStatusOK;
-}
-
-EFrameworkunifiedStatus FrameworkunifiedGetDefaultCbHandler(FrameworkunifiedDefaultCallbackHandler *CbHandler) {
- if (CbHandler == NULL) {
- return eFrameworkunifiedStatusNullPointer;
- }
-
- *CbHandler = g_defaultCallbackHandler;
- return eFrameworkunifiedStatusOK;
-}
-
-EFrameworkunifiedStatus frameworkunifiedFdHandler(HANDLE hApp , int efd) {
- struct epoll_event events[MAX_FD_MULTIWAITING];
- int nfds; // The number of events received
- int q_fd; // The FD of events received
- int n; // Loop counter
- EFrameworkunifiedStatus eStatus = eFrameworkunifiedStatusOK;
- const char *key;
-
- if (frameworkunifiedCheckValidAppHandle(hApp)) {
- CFrameworkunifiedFrameworkApp *pApp = static_cast<CFrameworkunifiedFrameworkApp *>(hApp);
- eStatus = GetDispatcherMqFD(hApp, &q_fd);
- // LCOV_EXCL_BR_START 6:Because of hApp is valid, GetDispatcherMqFD return eFrameworkunifiedStatusOK.
- if (eFrameworkunifiedStatusOK == eStatus) {
- // LCOV_EXCL_BR_STOP
- nfds = epoll_wait(efd, events, MAX_FD_MULTIWAITING, -1);
- if (-1 != nfds) {
- for (n = 0; n < nfds; ++n) {
- if (pApp->siMonitorSock == events[n].data.fd) {
- // abnormal monitor connect request
- int socket;
-
- if ((socket = mcAcceptMonitor(pApp->cAppName, pApp->siMonitorSock)) >= 0) {
- struct epoll_event event;
-
- event.events = EPOLLRDHUP;
- event.data.fd = socket;
-
- if (epoll_ctl(pApp->efd, EPOLL_CTL_ADD, socket, &event) < 0) {
- FRAMEWORKUNIFIEDLOG(ZONE_NS_ERR, __FUNCTION__, "ERROR : epoll_ctl:%s", strerror(errno));
- }
- }
- }
- }
-
- for (n = 0; n < nfds; ++n) {
- // The branch processing by FD on which the message was received
- if (q_fd == events[n].data.fd) {
- // process the message to the Dispatcher's message queue
- eStatus = ProcessMq(hApp);
- } else if (pApp->defer_evfd == events[n].data.fd) {
- // process the Defer event to the Dispatcher
- uint64_t data;
- ssize_t len;
-
- len = read(pApp->defer_evfd, &data, sizeof(uint64_t));
- if (len < 0) {
- // read error
- eStatus = eFrameworkunifiedStatusFail;
- FRAMEWORKUNIFIEDLOG(ZONE_NS_ERR, __FUNCTION__, "ERROR : read Failed, status=%d, errno=%d, defer_evfd=%d",
- eStatus, errno, pApp->defer_evfd);
- } else {
- while (TRUE == (FrameworkunifiedPopedDeferedMessage(hApp))) {
- try {
- // dispatch process: calls respective call back functions
- if (eFrameworkunifiedStatusOK != (eStatus = FrameworkunifiedDispatchProcess(hApp))) {
- FRAMEWORKUNIFIEDLOG(ZONE_NS_ERR, __FUNCTION__, "ERROR : FrameworkunifiedDispatchProcess Status : 0x%x", eStatus);
- }
- } catch (const frameworkunified::framework::error::CSystemError &err) {
- FRAMEWORKUNIFIEDLOG(ZONE_NS_ERR, __FUNCTION__, "ERROR : %s", err.what());
- eStatus = eFrameworkunifiedStatusErrOther;
- FrameworkunifiedSendSystemErrMessage(hApp, err.m_eSystemError);
- } catch (const std::exception &err) {
- FRAMEWORKUNIFIEDLOG(ZONE_NS_ERR, __FUNCTION__, "Recovering from : %s", err.what());
- eStatus = eFrameworkunifiedStatusErrOther;
- }
- }
- }
- } else if (pApp->siMonitorSock == events[n].data.fd) {
- // do nothing
- } else if (frameworkunifiedSearchResourseKey(FRAMEWORKUNIFIED_RES_ABNMLMON, events[n].data.fd, &key) == 0) {
- if (pApp->acceptMonitorTable.find(events[n].data.fd) != pApp->acceptMonitorTable.end()) {
- // server: accept socket close
- eStatus = frameworkunifiedProcessClientAbnormalState(hApp, events[n].data.fd);
- } else if (pApp->connectMonitorTable.find(events[n].data.fd) != pApp->connectMonitorTable.end()) {
- // client: connect socket close
- eStatus = frameworkunifiedProcessServerAbnormalState(hApp, events[n].data.fd);
- }
-
- if (epoll_ctl(pApp->efd, EPOLL_CTL_DEL, events[n].data.fd, NULL) < 0) {
- FRAMEWORKUNIFIEDLOG(ZONE_NS_ERR, __FUNCTION__, "ERROR : epoll_ctl:%s", strerror(errno));
- }
- close(events[n].data.fd);
- frameworkunifiedUnregistResouce(FRAMEWORKUNIFIED_RES_ABNMLMON, key);
- } else {
- // process the message to the FD set by the user
- eStatus = ProcessFd(hApp, events[n].data.fd);
- }
- }
- } else {
- if (errno == EINTR) {
- // signal interrupt
- } else {
- eStatus = eFrameworkunifiedStatusFail;
- FRAMEWORKUNIFIEDLOG(ZONE_NS_ERR, __FUNCTION__, "ERROR : epoll_wait Failed, status=%d, errno=%d", eStatus, errno);
- }
- }
- } else {
- // LCOV_EXCL_START 6:Because of hApp is valid, GetDispatcherMqFD return eFrameworkunifiedStatusOK.
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- eStatus = eFrameworkunifiedStatusFail;
- FRAMEWORKUNIFIEDLOG(ZONE_NS_ERR, __FUNCTION__, "ERROR : GetDispatcherMqFD Failed, status=%d", eStatus);
- // LCOV_EXCL_STOP
- }
- } else {
- eStatus = eFrameworkunifiedStatusInvldHandle;
- FRAMEWORKUNIFIEDLOG(ZONE_NS_ERR, __FUNCTION__, "ERROR : %d, Invalid hApp ", eStatus);
- }
-
- return eStatus;
-}
-
-static EFrameworkunifiedStatus ProcessMq(HANDLE hApp) {
- EFrameworkunifiedStatus eStatus = eFrameworkunifiedStatusOK;
-
- if (frameworkunifiedCheckValidAppHandle(hApp)) {
-#ifdef DISPATCHER_PROFILER
- CFrameworkunifiedFrameworkApp *pApp = reinterpret_cast< CFrameworkunifiedFrameworkApp * >(hApp);
-#endif
-
- // handle defer'ed message
- if (FALSE == FrameworkunifiedPopedDeferedMessage(hApp)) {
- // dispatch block: waits on receive message
- if ((eStatus = FrameworkunifiedDispatchBlock(hApp)) != eFrameworkunifiedStatusOK) {
- FRAMEWORKUNIFIEDLOG(ZONE_NS_ERR, __FUNCTION__, "ERROR : FrameworkunifiedDispatchBlock Status : 0x%x", eStatus);
- }
- #ifdef DISPATCHER_PROFILER
- else if (NULL != pApp->m_pFrameworkunifiedMsgProfiler) { // NOLINT (readability/nolint)
- pApp->m_pFrameworkunifiedMsgProfiler->MsgReceived();
- }
- #endif
- }
- try {
- // dispatch process: calls respective call back functions
- eStatus = FrameworkunifiedDispatchProcess(hApp);
- } catch (const frameworkunified::framework::error::CSystemError &err) {
- FRAMEWORKUNIFIEDLOG(ZONE_NS_ERR, __FUNCTION__, "ERROR : %s", err.what());
- eStatus = eFrameworkunifiedStatusErrOther;
- FrameworkunifiedSendSystemErrMessage(hApp, err.m_eSystemError);
- } catch (const std::exception &err) {
- FRAMEWORKUNIFIEDLOG(ZONE_NS_ERR, __FUNCTION__, "Recovering from : %s", err.what());
- eStatus = eFrameworkunifiedStatusErrOther;
- }
-#ifdef DISPATCHER_PROFILER
- if (NULL != pApp->m_pFrameworkunifiedMsgProfiler) {
- pApp->m_pFrameworkunifiedMsgProfiler->MsgProcessed();
- }
-#endif
- } else {
- eStatus = eFrameworkunifiedStatusInvldHandle;
- FRAMEWORKUNIFIEDLOG(ZONE_NS_ERR, __FUNCTION__, "ERROR : %d, Invalid hApp ", eStatus);
- }
-
- return eStatus;
-}
-
-static EFrameworkunifiedStatus ProcessFd(HANDLE hApp , int fd) {
- EFrameworkunifiedStatus eStatus = eFrameworkunifiedStatusOK;
-
- if (frameworkunifiedCheckValidAppHandle(hApp)) {
- CFrameworkunifiedFrameworkApp *pApp = static_cast<CFrameworkunifiedFrameworkApp *>(hApp);
- FdTable::iterator f_iterator;
- struct rusage start, end;
- BOOL enable_rusage = NsLogIsZoneSet(ZONE_NS_DEBUG_DUMP);
-
- if (enable_rusage == TRUE) {
- frameworkunifiedGetRusage(&start);
- }
-
- // finding callback func associated with FD
- f_iterator = pApp->fds.find(fd);
- if (f_iterator != pApp->fds.end()) {
- try {
- // calling func associated with FD
- eStatus = (*f_iterator).second(hApp);
- } catch (const frameworkunified::framework::error::CSystemError &err) {
- FRAMEWORKUNIFIEDLOG(ZONE_NS_ERR, __FUNCTION__, "ERROR :: %s", err.what());
- eStatus = eFrameworkunifiedStatusErrOther;
- FrameworkunifiedSendSystemErrMessage(hApp, err.m_eSystemError);
- } catch (const std::exception &err) {
- FRAMEWORKUNIFIEDLOG(ZONE_NS_ERR, __FUNCTION__, "Recovering from: %s", err.what());
- eStatus = eFrameworkunifiedStatusErrOther;
- }
- } else {
- eStatus = eFrameworkunifiedStatusFail;
- FRAMEWORKUNIFIEDLOG(ZONE_NS_ERR, __FUNCTION__, "ERROR : %d, Callback associated with FD is not found. ", eStatus);
- }
-
- if (enable_rusage == TRUE) {
- frameworkunifiedGetRusage(&end);
- frameworkunifiedPrintRusage(hApp, start, end);
- }
- } else {
- eStatus = eFrameworkunifiedStatusInvldHandle;
- FRAMEWORKUNIFIEDLOG(ZONE_NS_ERR, __FUNCTION__, "ERROR : %d, Invalid hApp ", eStatus);
- }
-
- return eStatus;
-}
-
-/////////////////////////////////////////////////////////
-/// EFrameworkunifiedStatus SetConfigHandle(HANDLE hApp, PCHAR sFilePath )
-/// This Function opens the file from give path and sets the file handle in hApp
-////////////////////////////////////////////////////////
-EFrameworkunifiedStatus SetConfigHandle(HANDLE hApp, PCHAR sFilePath) {
- EFrameworkunifiedStatus eStatus = eFrameworkunifiedStatusOK;
-
- FRAMEWORKUNIFIEDLOG(ZONE_NS_WAR, __PRETTY_FUNCTION__, "This function is not implemented");
-
- return eStatus;
-}
-
-/////////////////////////////////////////////////////////
-/// EFrameworkunifiedStatus SetDefaultFilePath(HANDLE hApp)
-/// This Function fetches the file path from Environment variable from PASA_APPCONFIG_FILES and
-/// pass it to the SetConfigHandle function
-////////////////////////////////////////////////////////
-EFrameworkunifiedStatus SetDefaultConfigFile(HANDLE hApp) {
- EFrameworkunifiedStatus eStatus = eFrameworkunifiedStatusOK;
-
- if (frameworkunifiedCheckValidAppHandle(hApp)) {
- // Get the file path from environment variable
- PCHAR l_strEnvValue = getenv(PASA_APPCONFIG_FILES);
-
- if (l_strEnvValue) {
- // FRAMEWORKUNIFIEDLOG( ZONE_NS_DIS, __FUNCTION__, "Configuration file path %s ",l_strEnvValue);
-
- std::string l_strFilePath(l_strEnvValue);
-
- if (!l_strFilePath.empty()) {
- FRAMEWORKUNIFIEDLOG(ZONE_NS_DIS, __FUNCTION__, "Configuration file path %s ", l_strFilePath.c_str());
- // Open the configuration file
- SetConfigHandle(hApp, (PCHAR)l_strFilePath.c_str());
- } else {
- eStatus = eFrameworkunifiedStatusFail;
- }
- }
- } else {
- eStatus = eFrameworkunifiedStatusInvldParam;
- }
-
- return eStatus;
-}
-
-EFrameworkunifiedStatus FrameworkunifiedProcessServiceProtocolHSMEvent(HANDLE hApp, PCSTR pRequester) {
- EFrameworkunifiedStatus eStatus = eFrameworkunifiedStatusOK;
-
- if (frameworkunifiedCheckValidAppHandle(hApp)) {
- CFrameworkunifiedFrameworkApp *pApp = static_cast<CFrameworkunifiedFrameworkApp *>(hApp);
- EventServices::iterator s_iterator;
-
- // finding the service
- s_iterator = pApp->eventservices.find(pRequester);
- if (s_iterator != pApp->eventservices.end()) {
- EventSessionTable::iterator session_iterator;
- session_iterator = (s_iterator->second).find(pApp->uiSessionId);
- if (session_iterator != (s_iterator->second).end()) {
- ServiceEventProtocolTable::iterator spt_iterator;
-
- // FRAMEWORKUNIFIEDLOG(ZONE_NS_DIS, __FUNCTION__, " %s found :: (%s) ", pApp->cMsgSrcName, s_iterator->second);
-
- // find the protocol req/ack handler
- spt_iterator = (session_iterator->second).find(pApp->uiProtocolCmd);
- if (spt_iterator != (session_iterator->second).end()) {
- // FRAMEWORKUNIFIEDLOG(ZONE_NS_DIS, __FUNCTION__, " Protocol Command :: (0x%x) ", pApp->uiProtocolCmd);
- // Post corresponding event
- CFrameworkunifiedHSMFramework *l_pStateMachine = FrameworkunifiedGetStateMachine(hApp);
- if (l_pStateMachine) {
- eStatus = l_pStateMachine->FrameworkunifiedPostEvent(spt_iterator->second);
- }
- } else if ((session_iterator->second).end() != (spt_iterator =
- (session_iterator->second).find(FRAMEWORKUNIFIED_ANY_COMMAND))) {
- FRAMEWORKUNIFIEDLOG(ZONE_NS_DIS, __FUNCTION__, "Processing HSM event for (FRAMEWORKUNIFIED_ANY_COMMAND). "
- "Dispatcher protocol command: (0x%x)",
- pApp->uiProtocolCmd);
- // Post corresponding event
- CFrameworkunifiedHSMFramework *l_pStateMachine = FrameworkunifiedGetStateMachine(hApp);
- if (l_pStateMachine) {
- eStatus = l_pStateMachine->FrameworkunifiedPostEvent(spt_iterator->second);
- }
- } else {
- eStatus = eFrameworkunifiedStatusMsgNotProcessed;
- }
-
- // if FrameworkunifiedPostEvent returns NULL
- if (eFrameworkunifiedStatusNullPointer == eStatus) {
- eStatus = eFrameworkunifiedStatusExit;
- }
- } else {
- eStatus = eFrameworkunifiedStatusMsgNotProcessed;
- }
-
- } else {
- eStatus = eFrameworkunifiedStatusMsgNotProcessed;
- }
- } else {
- eStatus = eFrameworkunifiedStatusInvldHandle;
- }
-
- return eStatus;
-}
-
-//////////////////////////////////////////
-// Function : ProcessProtocolEvents
-//////////////////////////////////////////
-EFrameworkunifiedStatus ProcessProtocolEvents(HANDLE hApp) {
- EFrameworkunifiedStatus eStatus = eFrameworkunifiedStatusOK;
-
- if (frameworkunifiedCheckValidAppHandle(hApp)) {
- CFrameworkunifiedFrameworkApp *pApp = static_cast<CFrameworkunifiedFrameworkApp *>(hApp);
-
- // common event table iterator
- EventTable::iterator e_iterator;
- ServiceSessionIdListTable::iterator ssidl_iterator;
-
- // public state event table iterator
- PublicStateEventTable::iterator se_iterator;
-
- // private state event table iterator
- PrivateStateEventTable::iterator pse_iterator;
- ServiceSessionEventData::iterator ssed_iterator;
- SessionEventData::iterator sed_iterator;
-
- HANDLE l_pClientHandle = NULL;
-
- // get the name of the service from which message is received
- PCSTR l_cServiceName = pApp->cMsgSrcName;
- const UI_32 l_uiSessionId = pApp->uiSessionId;
-
- // number of events to register
- UI_32 l_uiListSize = static_cast<UI_32>(FrameworkunifiedGetMsgLength(hApp) / sizeof(UI_32));
-
- // check if the received service name and data is valid
- if (NULL != l_cServiceName && 0 < l_uiListSize) {
- PUI_32 l_pData = new UI_32[l_uiListSize];
- UI_32 l_uiEventId = 0;
-
- // get the list of events
- eStatus = FrameworkunifiedGetMsgDataOfSize(hApp, l_pData, static_cast<UI_32>(l_uiListSize * sizeof(UI_32)));
-
- if (NULL != l_pData && eFrameworkunifiedStatusOK == eStatus) {
- for (UI_32 uiCount = 0; uiCount < l_uiListSize; uiCount++) {
- // received event id
- l_uiEventId = l_pData[uiCount];
-
- // find the event in map of EventTable
- e_iterator = pApp->eventtable.find(l_uiEventId);
-
- // if event is registered by any of the clients
- if (pApp->eventtable.end() != e_iterator) {
- // table of services with list of their session id's registering this event
- ServiceSessionIdListTable &l_mServiceSessionIdListTable = e_iterator->second;
-
- // find the service name in map of ServiceSessionIdListTable
- ssidl_iterator = l_mServiceSessionIdListTable.find(l_cServiceName);
-
- // if service have already registered this event with any of its session
- if (l_mServiceSessionIdListTable.end() != ssidl_iterator) {
- // list of sessions id's registering with this event
- SessionIdList &l_vSessionIdList = ssidl_iterator->second;
-
- // event is registered with this session
- if (IsEventAlreadyRegistered(l_vSessionIdList, l_uiSessionId)) {
- // get the message queue handle from map servicesessionhandletable
- l_pClientHandle = GetMsgQueueHandle(hApp, l_cServiceName, l_uiSessionId);
- } else { // event is not registered with this session
- // create new message queue handle and insert it in map servicesessionhandletable
- l_pClientHandle = GetNewHandleAndUpdateEventInfoTable(hApp,
- l_cServiceName, l_uiSessionId, l_uiEventId);
-
- // insert the current session id
- l_vSessionIdList.push_back(l_uiSessionId);
- }
- } else { // if service have not registered this event with any of its session
- // create a list for storing session id's registering this event for this service
- SessionIdList l_vSessionIdList;
-
- // insert the current session id
- l_vSessionIdList.push_back(l_uiSessionId);
-
- // create new message queue handle and insert it in map servicesessionhandletable
- l_pClientHandle = GetNewHandleAndUpdateEventInfoTable(hApp, l_cServiceName, l_uiSessionId, l_uiEventId);
-
- // make a entry for service name and session id's list in map of ServiceSessionIdListTable
- l_mServiceSessionIdListTable.insert(make_pair(l_cServiceName, l_vSessionIdList));
- }
- } else { // if event is not registered by any of the clients
- // create a list for storing session id's registering this event for this service
- SessionIdList l_vSessionIdList;
-
- // insert the current session id
- l_vSessionIdList.push_back(l_uiSessionId);
-
- // create new message queue handle and insert it in map servicesessionhandletable
- l_pClientHandle = GetNewHandleAndUpdateEventInfoTable(hApp, l_cServiceName, l_uiSessionId, l_uiEventId);
-
- // create a table for storing services and its session id list, registering this event
- ServiceSessionIdListTable l_mServiceSessionIdListTable;
-
- // make a entry for service name and session id's list in map of ServiceSessionIdListTable
- l_mServiceSessionIdListTable.insert(make_pair(l_cServiceName, l_vSessionIdList));
-
- // insert the table with event id in EventTable
- pApp->eventtable.insert(make_pair(l_uiEventId, l_mServiceSessionIdListTable));
- }
-
- // check whether event is defined as public state event
- se_iterator = pApp->publicstateeventtable.find(l_uiEventId);
-
- // if event is a state event, publish the event
- if (pApp->publicstateeventtable.end() != se_iterator) {
- FRAMEWORKUNIFIEDLOG(ZONE_NS_INFO, __FUNCTION__, "%d is a public state event", l_uiEventId);
-
- if (NULL != (se_iterator->second)) {
- // send the event data for state event
- eStatus = FrameworkunifiedSendMsg(l_pClientHandle,
- l_uiEventId,
- (se_iterator->second)->uiLength,
- (se_iterator->second)->pData);
- FRAMEWORKUNIFIEDLOG(ZONE_NS_INFO, __FUNCTION__, "Sending event:%d to service:%s, session:%d, status:%d",
- l_uiEventId,
- l_cServiceName,
- l_uiSessionId,
- eStatus);
- } else {
- FRAMEWORKUNIFIEDLOG(ZONE_NS_INFO, __FUNCTION__, "Event %d yet not published ", l_uiEventId);
- }
- } else { // check whether the event is defined as private state event
- pse_iterator = pApp->privatestateeventtable.find(l_uiEventId);
-
- // if event found, publish the event
- if (pApp->privatestateeventtable.end() != pse_iterator) {
- FRAMEWORKUNIFIEDLOG(ZONE_NS_INFO, __FUNCTION__, "%d is a private state event", l_uiEventId);
-
- ssed_iterator = (pse_iterator->second).find(l_cServiceName);
-
- // check whether the event had been published for this service before subscription
- if ((pse_iterator->second).end() != ssed_iterator) {
- sed_iterator = (ssed_iterator->second).find(l_uiSessionId);
-
- // check whether the event had been published for this service for the same session
- if ((ssed_iterator->second).end() != sed_iterator) {
- if (NULL != (sed_iterator->second)) {
- FRAMEWORKUNIFIEDLOG(ZONE_NS_DIS, __FUNCTION__, "%d had been published for the "
- "service:%s on sessionId:%d ", l_uiEventId,
- l_cServiceName, l_uiSessionId);
-
- // send the event data for state event
- eStatus = FrameworkunifiedSendMsg(l_pClientHandle,
- l_uiEventId,
- (sed_iterator->second)->uiLength,
- (sed_iterator->second)->pData);
- FRAMEWORKUNIFIEDLOG(ZONE_NS_INFO, __FUNCTION__, "Sending event:%d to service:%s, session:%d, status:%d",
- l_uiEventId,
- l_cServiceName,
- l_uiSessionId,
- eStatus);
- } else {
- FRAMEWORKUNIFIEDLOG(ZONE_NS_INFO, __FUNCTION__, "Event %d yet not published ", l_uiEventId);
- }
- }
- }
- }
- }
- } // end of for loop of events list
- } else {
- eStatus = eFrameworkunifiedStatusInvldBuf;
- FRAMEWORKUNIFIEDLOG(ZONE_NS_ERR, __FUNCTION__, "Error :: %d, PROTOCOL_REGISTER_EVENTS Invalid data ", eStatus);
- }
-
- if (NULL != l_pData) {
- delete[] l_pData;
- l_pData = NULL;
- }
- } else {
- eStatus = eFrameworkunifiedStatusInvldParam;
- FRAMEWORKUNIFIEDLOG(ZONE_NS_ERR, __FUNCTION__, "Error :: %d, PROTOCOL_REGISTER_EVENTS Service Name invalid ", eStatus);
- }
- } else {
- eStatus = eFrameworkunifiedStatusInvldHandle;
- FRAMEWORKUNIFIEDLOG(ZONE_NS_ERR, __FUNCTION__, "Error :: %d, Invalid hApp ", eStatus);
- }
-
- return eStatus;
-}
-
-//////////////////////////////////////////
-// Function : IsEventAlreadyRegistered
-//////////////////////////////////////////
-BOOL IsEventAlreadyRegistered(const SessionIdList &vSessionIdList, const UI_32 uiSessionId) {
- for (UI_32 uiCount = 0; uiCount < vSessionIdList.size(); uiCount++) {
- if (uiSessionId == vSessionIdList[uiCount]) {
- return TRUE;
- }
- }
-
- return FALSE;
-}
-
-//////////////////////////////////////////
-// Function : GetMsgQueueHandle
-//////////////////////////////////////////
-HANDLE GetMsgQueueHandle(HANDLE hApp, PCSTR serviceName, const UI_32 uiSessionId) {
- HANDLE l_pClientHandle = NULL;
-
- if (frameworkunifiedCheckValidAppHandle(hApp)) {
- CFrameworkunifiedFrameworkApp *pApp = static_cast<CFrameworkunifiedFrameworkApp *>(hApp);
-
- ServiceSessionHandleTable::iterator ssh_iterator;;
- SessionToEventInfo::iterator sh_iterator;
-
- // find the service name
- ssh_iterator = pApp->servicesessionhandletable.find(serviceName);
-
- if (pApp->servicesessionhandletable.end() != ssh_iterator) {
- // search for session id
- sh_iterator = ssh_iterator->second.find(uiSessionId);
-
- if (ssh_iterator->second.end() != sh_iterator) {
- SessionEventInfo *l_ptSessionEventInfo = sh_iterator->second;
- if (NULL != l_ptSessionEventInfo) {
- l_pClientHandle = l_ptSessionEventInfo->m_hSession;
- FRAMEWORKUNIFIEDLOG(ZONE_NS_INFO, __FUNCTION__, "Handle found for service: %s, session: %d, handle:%p.",
- serviceName, uiSessionId, l_pClientHandle);
- }
- }
- }
- }
-
- if (NULL == l_pClientHandle) {
- FRAMEWORKUNIFIEDLOG(ZONE_NS_WAR, __FUNCTION__, "Handle NULL for service: %s, session: %d.",
- serviceName != 0 ? serviceName : NULL, uiSessionId);
- }
-
- return l_pClientHandle;
-}
-
-//////////////////////////////////////////
-// Function : GetNewHandleAndUpdateEventInfoTable
-//////////////////////////////////////////
-HANDLE GetNewHandleAndUpdateEventInfoTable(HANDLE hApp, PCSTR serviceName, const UI_32 uiSessionId,
- const UI_32 uiEventId) {
- HANDLE l_pClientHandle = NULL;
-
- if (frameworkunifiedCheckValidAppHandle(hApp)) {
- CFrameworkunifiedFrameworkApp *pApp = static_cast<CFrameworkunifiedFrameworkApp *>(hApp);
-
- ServiceSessionHandleTable::iterator ssh_iterator;;
- SessionToEventInfo::iterator sh_iterator;
-
- ssh_iterator = pApp->servicesessionhandletable.find(serviceName);
-
- if (pApp->servicesessionhandletable.end() == ssh_iterator) {
- SessionToEventInfo l_mSessionToEventInfoTable;
- pApp->servicesessionhandletable.insert(make_pair(serviceName, l_mSessionToEventInfoTable));
- }
-
- sh_iterator = pApp->servicesessionhandletable[serviceName].find(uiSessionId);
-
- if (pApp->servicesessionhandletable[serviceName].end() == sh_iterator) {
- l_pClientHandle = FrameworkunifiedMcOpenSender(hApp, serviceName);
- if (NULL != l_pClientHandle) {
- (reinterpret_cast<MsgQInfo *>(l_pClientHandle))->sessionId = uiSessionId;
- }
- SessionEventInfo *l_ptSessionEventInfo = new(std::nothrow) SessionEventInfo;
- if (NULL != l_ptSessionEventInfo) { // LCOV_EXCL_BR_LINE 5: new's error case.
- l_ptSessionEventInfo->m_hSession = l_pClientHandle;
- l_ptSessionEventInfo->m_vEvents.push_back(uiEventId);
- pApp->servicesessionhandletable[serviceName].insert(std::make_pair(uiSessionId, l_ptSessionEventInfo));
- } else {
- // LCOV_EXCL_START 5: malloc's error case.
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- FRAMEWORKUNIFIEDLOG(ZONE_NS_ERR, __FUNCTION__, "Error(NULL) createing new session event info for "
- "service:%s, session:%d, event:%d.",
- serviceName, uiSessionId, uiEventId);
- // LCOV_EXCL_STOP
- }
- } else {
- SessionEventInfo *l_ptSessionEventInfo = sh_iterator->second;
- if (NULL != l_ptSessionEventInfo) {
- if (NULL == l_ptSessionEventInfo->m_hSession) {
- l_ptSessionEventInfo->m_hSession = FrameworkunifiedMcOpenSender(hApp, serviceName);
- if (NULL != l_ptSessionEventInfo->m_hSession) {
- (reinterpret_cast<MsgQInfo *>(l_ptSessionEventInfo->m_hSession))->sessionId = uiSessionId;
- }
- }
- l_pClientHandle = l_ptSessionEventInfo->m_hSession;
- l_ptSessionEventInfo->m_vEvents.push_back(uiEventId);
- }
- }
- }
- return l_pClientHandle;
-}
-
-//////////////////////////////////////////
-// Function : UnregisterPrivateEvents
-//////////////////////////////////////////
-EFrameworkunifiedStatus UnregisterPrivateEvents(HANDLE hApp) {
- EFrameworkunifiedStatus eStatus = eFrameworkunifiedStatusOK;
-
- if (frameworkunifiedCheckValidAppHandle(hApp)) {
- CFrameworkunifiedFrameworkApp *pApp = static_cast<CFrameworkunifiedFrameworkApp *>(hApp);
-
- // get the name of the service from which message is received
- PCSTR l_cServiceName = pApp->cMsgSrcName;
- const UI_32 l_uiSessionId = pApp->uiSessionId;
-
- // number of events to unregister
- UI_32 l_uiListSize = static_cast<UI_32>(FrameworkunifiedGetMsgLength(hApp) / sizeof(UI_32));
-
- // check if the received service name and data is valid
- if (NULL != l_cServiceName && 0 < l_uiListSize) {
- PUI_32 l_pData = new(std::nothrow) UI_32[l_uiListSize];
- UI_32 l_uiEventId = 0;
-
- if (NULL != l_pData) { // LCOV_EXCL_BR_LINE 5: new's error case.
- // get the list of events
- eStatus = FrameworkunifiedGetMsgDataOfSize(hApp, l_pData, static_cast<UI_32>(l_uiListSize * sizeof(UI_32)));
-
- if (eFrameworkunifiedStatusOK == eStatus) {
- for (UI_32 uiCount = 0; uiCount < l_uiListSize; uiCount++) {
- // received event id
- l_uiEventId = l_pData[uiCount];
-
- // remove the entry from map of Events and Session id's of services
- eStatus = RemoveEventEntryFromEventTable(hApp, l_uiEventId, l_cServiceName, l_uiSessionId);
- (VOID)RemoveEntryFromSessionEventInfoTable(hApp, l_cServiceName, l_uiSessionId, l_uiEventId);
- }
- } else {
- eStatus = eFrameworkunifiedStatusInvldBuf;
- FRAMEWORKUNIFIEDLOG(ZONE_NS_ERR, __FUNCTION__, "Error :: %d, PROTOCOL_REGISTER_EVENTS Invalid data ", eStatus);
- }
- delete[] l_pData;
- l_pData = NULL;
- } else {
- // LCOV_EXCL_START 5: new's error case.
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- eStatus = eFrameworkunifiedStatusNullPointer;
- FRAMEWORKUNIFIEDLOG(ZONE_NS_ERR, __FUNCTION__, "Error :: PROTOCOL_UNREGISTER_EVENTS: "
- "Unable to allocate memory for l_pData");
- // LCOV_EXCL_STOP
- }
- } else {
- eStatus = eFrameworkunifiedStatusInvldParam;
- FRAMEWORKUNIFIEDLOG(ZONE_NS_ERR, __FUNCTION__, "Error :: %d, PROTOCOL_UNREGISTER_EVENTS Service Name invalid ", eStatus);
- }
- } else {
- eStatus = eFrameworkunifiedStatusInvldParam;
- FRAMEWORKUNIFIEDLOG(ZONE_NS_ERR, __FUNCTION__, "Error :: %d, Invalid hApp ", eStatus);
- }
-
- return eStatus;
-}
-
-//////////////////////////////////////////
-// Function : HandleSessionEventOnCloseSession
-//////////////////////////////////////////
-EFrameworkunifiedStatus HandleSessionEventOnCloseSession(HANDLE hApp) {
- EFrameworkunifiedStatus eStatus = eFrameworkunifiedStatusOK;
-
- if (frameworkunifiedCheckValidAppHandle(hApp)) {
- CFrameworkunifiedFrameworkApp *pApp = static_cast<CFrameworkunifiedFrameworkApp *>(hApp);
- // close session request structure
- CloseSessionReq tClose = {};
- if (FrameworkunifiedGetMsgLength(hApp) == sizeof(tClose)) {
- if (eFrameworkunifiedStatusOK != (eStatus = FrameworkunifiedGetMsgDataOfSize(hApp, &tClose, sizeof(tClose)))) {
- FRAMEWORKUNIFIEDLOG(ZONE_NS_ERR, __FUNCTION__, "Error :: %d, FrameworkunifiedGetMsgDataOfSize Failed ", eStatus);
- } else {
- CleanAllEventsOfSession(hApp, pApp->cMsgSrcName, tClose.sessionId);
- }
- } else {
- FRAMEWORKUNIFIEDLOG(ZONE_NS_ERR, __FUNCTION__, "Invalid data length received:: Expected: %ld, Received: %d",
- static_cast<long int>(sizeof(tClose)), FrameworkunifiedGetMsgLength(hApp)); // NOLINT (readability/nolint)
- eStatus = eFrameworkunifiedStatusFail;
- }
- } else {
- eStatus = eFrameworkunifiedStatusInvldParam;
- FRAMEWORKUNIFIEDLOG(ZONE_NS_ERR, __FUNCTION__, "Invalid application handle status.");
- }
-
- return eStatus;
-}
-
-//////////////////////////////////////////
-// Function : FrameworkunifiedOnDummy
-//////////////////////////////////////////
-EFrameworkunifiedStatus FrameworkunifiedOnDummy(HANDLE hApp) {
- return eFrameworkunifiedStatusOK;
-}
-
-#ifdef DISPATCHER_PROFILER
-EFrameworkunifiedStatus FrameworkunifiedAttachMsgProfilerCallbacksDispatcher(HANDLE hApp) {
- EFrameworkunifiedStatus eStatus = eFrameworkunifiedStatusOK;
-
- if (frameworkunifiedCheckValidAppHandle(hApp)) {
- CFrameworkunifiedFrameworkApp *pApp = static_cast<CFrameworkunifiedFrameworkApp *>(hApp);
- if (NULL != pApp->m_pFrameworkunifiedMsgProfiler) {
- eStatus = FrameworkunifiedAttachCallbackToDispatcher(hApp,
- "NSProfileUtil",
- PROTOCOL_DIS_MSGPROFILER,
- boost::bind(&FrameworkunifiedMsgProfiler::PrintProfileInfo,
- pApp->m_pFrameworkunifiedMsgProfiler, hApp));
- if (eFrameworkunifiedStatusOK == eStatus) {
- FRAMEWORKUNIFIEDLOG(ZONE_NS_DIS, "", "FrameworkunifiedAttachCallbackToDispatcher success for PROTOCOL_DIS_MSGPROFILER.");
- }
- }
- }
- return eStatus;
-}
-
-EFrameworkunifiedStatus FrameworkunifiedAttachChildMsgProfilerCallbacksDispatcher(HANDLE hChildApp) {
- EFrameworkunifiedStatus eStatus = eFrameworkunifiedStatusOK;
- FRAMEWORKUNIFIEDLOG(ZONE_NS_DIS, "", "+");
- if (frameworkunifiedCheckValidAppHandle(hChildApp)) {
- CFrameworkunifiedFrameworkApp *pApp = static_cast<CFrameworkunifiedFrameworkApp *>(hChildApp);
- if (NULL != pApp->m_pFrameworkunifiedMsgProfiler) {
- eStatus = FrameworkunifiedAttachCallbackToDispatcher(hChildApp,
- pApp->cParentAppName,
- PROTOCOL_DIS_MSGPROFILER,
- boost::bind(&FrameworkunifiedMsgProfiler::PrintProfileInfo,
- pApp->m_pFrameworkunifiedMsgProfiler, hChildApp));
- if (eFrameworkunifiedStatusOK == eStatus) {
- FRAMEWORKUNIFIEDLOG(ZONE_NS_DIS, "", "FrameworkunifiedAttachCallbackToDispatcher success for PROTOCOL_DIS_MSGPROFILER.");
- }
- }
- }
- FRAMEWORKUNIFIEDLOG(ZONE_NS_DIS, "", "-");
- return eStatus;
-}
-#endif
-// EOF