X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=src%2Fo1%2FTcpServer.cpp;h=337387d09e98be3a17b0aac1334b73b52c8eb74c;hb=7ebfb1f80967fe83bf169c2915cedf2c9fb5cbf7;hp=47ce09475cdd310213c091e2e963d7c837778de9;hpb=514d4c21e79d37636005186dd9ac5510742b7618;p=o-du%2Fl2.git diff --git a/src/o1/TcpServer.cpp b/src/o1/TcpServer.cpp index 47ce09475..337387d09 100644 --- a/src/o1/TcpServer.cpp +++ b/src/o1/TcpServer.cpp @@ -24,6 +24,7 @@ #include "TcpServer.hpp" #include "Alarm.hpp" #include "AlarmManager.hpp" +#include "Config.h" #include "GlobalDefs.hpp" #include #include @@ -35,6 +36,7 @@ #include #include #include +#include "InitConfig.hpp" using std::map; using std::pair; @@ -46,62 +48,100 @@ TcpServer::~TcpServer() } -/********************************************************************** - Description : Read the data from the connected client application - Params[In] : fd - File descriptor - Return : int - No of bytes read -**********************************************************************/ +/******************************************************************* + * + * @brief Read the data from the connected client application + * + * @details + * + * Function : readMessage + * + * Functionality: + * - Reads the data from the connected client application + * + * @params[in] File descriptor + * @return No. of bytes read + * + ******************************************************************/ int TcpServer::readMessage(int fd) { - AlarmRecord alrmRec; - bzero(&alrmRec,sizeof(alrmRec)); - int nbytes = read (fd, &alrmRec, sizeof(alrmRec)); + AlarmRecord *alrmRec = NULL; + char recvBuf[BUFLEN]; + Alarm alrm; + bzero(&recvBuf,sizeof(recvBuf)); + + int nbytes = read (fd, &recvBuf, sizeof(recvBuf)); + if (nbytes > 0) { - Alarm alrm; - uint16_t alrmId; - O1_LOG("\nO1 TcpServer :\nAction %d\nalarm ID %s\n%d\n%s\n%d\n%s\n%s\nbytes %d", - alrmRec.msgHeader.action, - alrmRec.alarmId, - alrmRec.perceivedSeverity, - alrmRec.additionalText, - alrmRec.eventType, - alrmRec.specificProblem, - alrmRec.additionalInfo, + MsgHeader *msgHdr = (MsgHeader*)recvBuf; + + O1_LOG("\nO1 TcpServer :\nBuf size %ld", sizeof(recvBuf)); + O1_LOG("\nO1 TcpServer :\nMsgType %d",msgHdr->msgType); + O1_LOG("\nO1 TcpServer :\nAction %d",msgHdr->action); + + if ( msgHdr->msgType == ALARM ){ + uint16_t alrmId; + alrmRec = (AlarmRecord*) recvBuf; + O1_LOG("\nO1 TcpServer :\nAction %d\nalarm ID %s\n%d\n%s\n%d\n%s\n%s\nbytes %d", + alrmRec->msgHeader.action, + alrmRec->alarmId, + alrmRec->perceivedSeverity, + alrmRec->additionalText, + alrmRec->eventType, + alrmRec->specificProblem, + alrmRec->additionalInfo, nbytes ); - /*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); + /*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(alrmRec.msgHeader.action) + switch(msgHdr->action) { - case RAISE: + case RAISE_ALARM: if(AlarmManager::instance().raiseAlarm(alrm)) { - O1_LOG("\nO1 TcpServer : Alarm raised for alarm Id %s", alrmRec.alarmId); + O1_LOG("\nO1 TcpServer : Alarm raised for alarm Id %s", alrmRec->alarmId); } else { - O1_LOG("\nO1 TcpServer : Error in raising alarm for alrm Id %s", alrmRec.alarmId); + O1_LOG("\nO1 TcpServer : Error in raising alarm for alrm Id %s", alrmRec->alarmId); } break; - case CLEAR: + case CLEAR_ALARM: if(AlarmManager::instance().clearAlarm(alrm)) { - O1_LOG("\nO1 TcpServer : Alarm cleared for alarm Id %s", alrmRec.alarmId); + O1_LOG("\nO1 TcpServer : Alarm cleared for alarm Id %s", alrmRec->alarmId); } else { - O1_LOG("\nO1 TcpServer : Error in clearing alarm for alarm Id %s", alrmRec.alarmId); + O1_LOG("\nO1 TcpServer : Error in clearing alarm for alarm Id %s", alrmRec->alarmId); } break; + case GET_STARTUP_CONFIG: + { + StartupConfig cfg; + InitConfig::instance().getCurrInterfaceConfig(cfg); + O1_LOG("\nO1 TcpServer : cfg.DU_IPV4_Addr [%s]", cfg.DU_IPV4_Addr); + O1_LOG("\nO1 TcpServer : cfg.DU_Port [%d]", cfg.DU_Port); + O1_LOG("\nO1 TcpServer : cfg.CU_IPV4_Addr [%s]", cfg.CU_IPV4_Addr); + O1_LOG("\nO1 TcpServer : cfg.CU_Port [%d]", cfg.CU_Port); + O1_LOG("\nO1 TcpServer : cfg.RIC_IPV4_Addr [%s]", cfg.RIC_IPV4_Addr); + O1_LOG("\nO1 TcpServer : cfg.RIC_Port [%d]", cfg.RIC_Port); + if (write (fd, &cfg, sizeof(cfg)) < 0) + { + O1_LOG("\nO1 TcpServer : Error sending startup configuration \n"); + } + break; + } default: O1_LOG("\nO1 TcpServer : No action performed"); break; @@ -112,12 +152,21 @@ int TcpServer::readMessage(int fd) } -/********************************************************************** - Description : Open a TCP socket and bind on the port - Params[In] : None - Return : O1::SUCCESS - socket open and bind successful - O1::FAILURE - socket open and bind failed -**********************************************************************/ +/******************************************************************* + * + * @brief Open a TCP socket and bind on the port + * + * @details + * + * Function : makeSocket + * + * Functionality: + * - Opens a TCP socket and bind on the port + * + * @params[in] void + * @return O1:SUCCESS - success + * O1:FAILURE - failure + ******************************************************************/ int TcpServer::makeSocket() { struct sockaddr_in name; @@ -143,24 +192,42 @@ int TcpServer::makeSocket() } -/********************************************************************** - Description : Start TCP server in thread - Params[In] : None - Return : true - task launched in pthread successfully - false - task failed to launch -**********************************************************************/ +/******************************************************************* + * + * @brief Start TCP server in thread + * + * @details + * + * Function : start + * + * Functionality: + * - Start TCP server in thread + * + * @params[in] void + * @return true - success + * false - failure + ******************************************************************/ bool TcpServer::start() { return (pthread_create(&mThreadId, NULL, task, this) == 0); } -/********************************************************************** - Description : A TCP server to handle multiple connection using - select multiplexing - Params[In] : None - Return : true - task launched in pthread successfully - false - task failed to launch -**********************************************************************/ +/******************************************************************* + * + * @brief A TCP server to handle multiple connection + * + * @details + * + * Function : run + * + * Functionality: + * - A TCP server to handle multiple connection + * Uses select multiplexing + * + * @params[in] void + * @return true - success + * false - failure + ******************************************************************/ bool TcpServer::run() { @@ -243,12 +310,22 @@ bool TcpServer::run() } -/********************************************************************** - Description : Static function for launching a TCP server instance - in a thread - Params[In] : TcpServer instance - Return : NULL -**********************************************************************/ +/******************************************************************* + * + * @brief Static function for launching a TCP server instance + * in a thread + * + * @details + * + * Function : task + * + * Functionality: + * - Static function for launching a TCP server instance + * in a thread + * + * @params[in] TcpServer instance + * @return void + ******************************************************************/ void* TcpServer::task(void *args) { TcpServer *tcpServer = (TcpServer*)args; @@ -257,12 +334,21 @@ void* TcpServer::task(void *args) } -/********************************************************************** - Description : Wait for the thread to complete in the parent process - Params[In] : None - Return : true - pthread join success - false - pthread join failed -**********************************************************************/ +/******************************************************************* + * + * @brief Wait for the thread to complete in the parent process + * + * @details + * + * Function : wait + * + * Functionality: + * - Waits for the thread to complete in the parent process + * + * @params[in] void + * @return true : success + * false : failure + ******************************************************************/ bool TcpServer::wait() { return (pthread_join(mThreadId,NULL) == 0);