################################################################################
*******************************************************************************/
-/* This file contains UnixSocketServer class that listens for Netconf Alarm
+/* This file contains UnixSocketServer class that listens for Netconf Alarm
messages on a Unix socket from ODU. It calls the AlarmManager functions
- for raising or clearing the alarms based on the actions received
-*/
+ for raising or clearing the alarms based on the actions received */
#include "UnixSocketServer.hpp"
#include "Alarm.hpp"
-#include "AlarmManager.hpp"
-#include "ConfigInterface.h"
+#include "CmInterface.h"
#include "GlobalDefs.hpp"
#include <iostream>
#include <cstdio>
******************************************************************/
UnixSocketServer::UnixSocketServer(const string& sockPath)
: mSockPath(sockPath),
- mIsRunning(false)
+ mIsRunning(false)
{
-}
-
+}
+
/*******************************************************************
*
* @brief Destructor
******************************************************************/
int UnixSocketServer::readMessage(int fd)
{
- AlarmRecord *alrmRec = NULL;
char recvBuf[BUFLEN];
- Alarm alrm;
bzero(&recvBuf,sizeof(recvBuf));
-
+
int nbytes = read (fd, &recvBuf, sizeof(recvBuf));
-
+
if (nbytes > 0)
{
- MsgHeader *msgHdr = (MsgHeader*)recvBuf;
-
- O1_LOG("\nO1 UnixSocketServer :\nMsgType %d",msgHdr->msgType);
-
- if ( msgHdr->msgType == ALARM ){
- uint16_t alrmId;
- alrmRec = (AlarmRecord*) recvBuf;
- O1_LOG("\nO1 UnixSocketServer :\n"
- "Action %d\n"
- "Alarm ID %s\n"
- "Severity %d\n"
- "Additional Text %s\n"
- "Specific Problem %s\n"
- "Additional Info %s\n"
- "Alarm Raise Time %s\n",
- alrmRec->msgHeader.action,
- alrmRec->alarmId,
- alrmRec->perceivedSeverity,
- alrmRec->additionalText,
- alrmRec->specificProblem,
- alrmRec->additionalInfo,
- alrmRec->alarmRaiseTime
- );
-
- /*Fill the alarm structure */
- sscanf(alrmRec->alarmId,"%hu",&alrmId);
- alrm.setAlarmId(alrmId);
- alrm.setPerceivedSeverity(alrmRec->perceivedSeverity);
- alrm.setAdditionalText(alrmRec->additionalText);
- alrm.setEventType(alrmRec->eventType);
- alrm.setSpecificProblem(alrmRec->specificProblem);
- alrm.setAdditionalInfo(alrmRec->additionalInfo);
- }
-
- switch(msgHdr->action)
- {
- case RAISE_ALARM:
-
- if(AlarmManager::instance().raiseAlarm(alrm))
- {
- O1_LOG("\nO1 UnixSocketServer : "
- "Alarm raised for alarm Id %s",
- alrmRec->alarmId);
-
- // triggering VES notification for the risen Alarm
-
- VesEventHandler vesEvtHdr;
- if(vesEvtHdr.prepare(VesEventType::FAULT_NOTIFICATION, &alrm)) {
- vesEvtHdr.send();
- }
-
- }
-
- else
- {
- O1_LOG("\nO1 UnixSocketServer : "
- "Error in raising alarm for alrm Id %s",
- alrmRec->alarmId);
- }
- break;
-
- case CLEAR_ALARM:
- if(AlarmManager::instance().clearAlarm(alrm))
- {
- O1_LOG("\nO1 UnixSocketServer : "
- "Alarm cleared for alarm Id %s",
- alrmRec->alarmId);
-
- // triggering VES notification for the cleared Alarm
- VesEventHandler vesEvtHdr;
- if(vesEvtHdr.prepare(VesEventType::FAULT_NOTIFICATION, &alrm)) {
- vesEvtHdr.send();
- }
- }
- else
- {
- O1_LOG("\nO1 UnixSocketServer : "
- "Error in clearing alarm for alarm Id %s",
- alrmRec->alarmId);
- }
- break;
-#if 0
- case GET_STARTUP_CONFIG:
- {
- StartupConfig cfg;
- InitConfig::instance().getCurrInterfaceConfig(cfg);
- O1_LOG("\nO1 UnixSocketServer : "
- "cfg.DU_IPV4_Addr [%s]",
- cfg.DU_IPV4_Addr);
- O1_LOG("\nO1 UnixSocketServer : "
- "cfg.DU_Port [%d]",
- cfg.DU_Port);
- O1_LOG("\nO1 UnixSocketServer : "
- "cfg.CU_IPV4_Addr [%s]",
- cfg.CU_IPV4_Addr);
- O1_LOG("\nO1 UnixSocketServer : "
- "cfg.CU_Port [%d]",
- cfg.CU_Port);
- O1_LOG("\nO1 UnixSocketServer : "
- "cfg.RIC_IPV4_Addr [%s]",
- cfg.RIC_IPV4_Addr);
- O1_LOG("\nO1 UnixSocketServer : "
- "cfg.RIC_Port [%d]",
- cfg.RIC_Port);
- if (write (fd, &cfg, sizeof(cfg)) < 0)
- {
- O1_LOG("\nO1 UnixSocketServer : "
- "Error sending startup configuration \n");
- }
- break;
- }
-#endif
- default:
- O1_LOG("\nO1 UnixSocketServer : No action performed");
- break;
- }
+ /* sending message to all Unix Socket Server subscribers */
+ createMessage(recvBuf);
}
+
return nbytes;
}
* O1:FAILURE - failure
******************************************************************/
-int UnixSocketServer::makeSocket()
+int UnixSocketServer::makeSocket()
{
struct sockaddr_un name;
/* Create the socket. */
bzero(&name, sizeof(name));
name.sun_family = AF_UNIX;
- /* Remove the socket file if it already exists */
+ /* Remove the socket file if it already exists */
if ( unlink(mSockPath.c_str()) == 0)
{
O1_LOG("\nO1 UnixSocketServer : "
"Removing the existing socket path %s",
mSockPath.c_str());
- }
+ }
strcpy(name.sun_path, mSockPath.c_str());
if (bind (mSock, (struct sockaddr *) &name, sizeof (name)) < 0)
{
* Function : run
*
* Functionality:
- * - A Unix server to handle multiple connection
+ * - A Unix server to handle multiple connection
* Uses select multiplexing
*
* @params[in] void
}
O1_LOG("\nO1 UnixSocketServer : Connected from client\n");
FD_SET (newFd, &active_fd_set);
- }
+ }
else
{
/* Data arriving on an already-connected socket. */
FD_CLR (i, &active_fd_set);
}
}
- }
- }/* for loop ends */
+ }
+ }/* for loop ends */
} /* while(1) ends */
} /* else ends */
} /* outer if ends */