summaryrefslogtreecommitdiffstats
path: root/video_in_hal/nsframework/framework_unified/client/NS_MessageQueue/src/ns_msg_queue.c
diff options
context:
space:
mode:
Diffstat (limited to 'video_in_hal/nsframework/framework_unified/client/NS_MessageQueue/src/ns_msg_queue.c')
-rwxr-xr-xvideo_in_hal/nsframework/framework_unified/client/NS_MessageQueue/src/ns_msg_queue.c596
1 files changed, 0 insertions, 596 deletions
diff --git a/video_in_hal/nsframework/framework_unified/client/NS_MessageQueue/src/ns_msg_queue.c b/video_in_hal/nsframework/framework_unified/client/NS_MessageQueue/src/ns_msg_queue.c
deleted file mode 100755
index 1990061..0000000
--- a/video_in_hal/nsframework/framework_unified/client/NS_MessageQueue/src/ns_msg_queue.c
+++ /dev/null
@@ -1,596 +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_NSMessageQueue
-/// \brief API Header for Zone Player Service APIs to be used by senders and
-/// receivers.
-///
-/// APIs to register/unregister notifications and add/remove recievers to the notifications.
-///
-///////////////////////////////////////////////////////////////////////////////
-
-#include <unistd.h>
-#include <stdio.h>
-#include <string.h>
-#include "ns_msg_queue.h"
-#include <malloc.h>
-#include <mqueue.h>
-#include <ns_mq_internal.h>
-#include <errno.h>
-#include "ns_mq_anomaly.h"
-
-#include <other_service/strlcpy.h>
-#include <other_service/strlcat.h>
-
-const UI_32 DEFAULT_MSG_PRIORITY = 10;
-const UI_32 MAX_MESSAGES_STORED_IN_QUEUE = 256;
-const UI_32 MAX_SYNC_RESPONSE_STORED_IN_QUEUE = 2;
-
-////////////////////////////////////////////////////////////////////////////////////////////////////
-// Function : TranslateError
-// Translates global error variables into FW EFrameworkunifiedStatus
-////////////////////////////////////////////////////////////////////////////////////////////////////
-EFrameworkunifiedStatus TranslateError(int error) {
- EFrameworkunifiedStatus eStatus = eFrameworkunifiedStatusFail;
-
- switch (error) {
- case EOK:
- eStatus = eFrameworkunifiedStatusOK;
- break;
- case EBUSY:
- eStatus = eFrameworkunifiedStatusThreadBusy;
- break;
- case EDEADLK:
- eStatus = eFrameworkunifiedStatusThreadSelfJoin;
- break;
- case EFAULT:
- eStatus = eFrameworkunifiedStatusFault;
- break;
- case EINVAL:
- eStatus = eFrameworkunifiedStatusInvldParam;
- break;
- case ESRCH:
- eStatus = eFrameworkunifiedStatusThreadNotExist;
- break;
- case EBADF:
- eStatus = eFrameworkunifiedStatusErrNoEBADF;
- break;
- case EAGAIN:
- eStatus = eFrameworkunifiedStatusErrNoEAGAIN;
- break;
- case EINTR:
- eStatus = eFrameworkunifiedStatusErrNoEINTR;
- break;
- case EMSGSIZE:
- eStatus = eFrameworkunifiedStatusInvldBufSize;
- break;
- case ENOTSUP:
- eStatus = eFrameworkunifiedStatusNotImplemented;
- break;
- case EPERM:
- eStatus = eFrameworkunifiedStatusAccessError;
- break;
- default:
- eStatus = eFrameworkunifiedStatusFail;
- break;
- }
-
- return eStatus;
-}
-
-static UI_8 GetNormalizedMqName(PSTR normalized_mqname , PCSTR name, size_t size) {
- if ((NULL != name) && (NULL != normalized_mqname)) {
- if (name[0] != '/') {
- strlcpy(normalized_mqname, "/", size);
- strlcat(normalized_mqname, name, size);
- } else {
- strlcpy(normalized_mqname, name, size);
- }
-
- return 1;
- } else {
- return 0;
- }
-}
-
-HANDLE OpenReceiverNotBlocked(PCSTR name) {
- HANDLE rtnHandle = INVALID_HANDLE; // invalid until made valid.
- PSTR normalized_qname = NULL;
- SI_32 q_fd = -1; // fd to mqueue
- SQhandle *rcvHndl = NULL;
- struct mq_attr mqattr;
- size_t norm_qname_size = 0;
-
- // Check for invalid name
- if (name == NULL) {
- return INVALID_HANDLE;
- }
-
- if (strlen(name) >= MAX_QUEUE_NAME_SIZE) {
- return INVALID_HANDLE;
- }
-
- norm_qname_size = strlen(name) + 2;
- normalized_qname = (PSTR)malloc(norm_qname_size);
-
- if (0 != GetNormalizedMqName(normalized_qname, name, norm_qname_size)) {
- if (strlen(normalized_qname) > LIMIT_QUEUE_NAME_SIZE) {
- free(normalized_qname);
- return INVALID_HANDLE;
- }
-
- mqattr.mq_flags = 0;
- mqattr.mq_maxmsg = (__syscall_slong_t)MAX_MESSAGES_STORED_IN_QUEUE;
- mqattr.mq_msgsize = MAX_QUEUE_MSG_SIZE;
-
- q_fd = mq_open(normalized_qname, O_RDONLY | O_CREAT | O_NONBLOCK | O_CLOEXEC , 0666, &mqattr);
-
- if (q_fd != -1) {
- rcvHndl = (SQhandle *)malloc(sizeof(SQhandle));
- if (rcvHndl != NULL) {
- rcvHndl->check_code = MQ_CHECK_CODE;
- rcvHndl->fd = q_fd;
- rcvHndl->q_name = normalized_qname;
- rcvHndl->q_type = eQTypeReveiver;
-
- /////////////////////////////////////////
- rcvHndl->threadid = 0;
- /////////////////////////////////////////
-
- // Set the return handle to rcvHndl
- rtnHandle = rcvHndl;
- }
- }
- }
-
- if (INVALID_HANDLE == rtnHandle) {
- // couldn't connect the queue,
- // release the memory to normalized queue name
- if (normalized_qname != NULL) {
- free(normalized_qname);
- normalized_qname = NULL; // mb20110108 item 11
- }
- }
-
- return rtnHandle;
-}
-
-static HANDLE openReceiverInternal(PCSTR name, UI_32 mq_maxmsg, UI_32 mq_msgsize, BOOL is_internal) {
- HANDLE rtnHandle = INVALID_HANDLE; // invalid until made valid.
- PSTR normalized_qname = NULL;
- SI_32 q_fd = -1; // fd to mqueue
- SQhandle *rcvHndl = NULL;
- struct mq_attr mqattr;
- size_t norm_qname_size = 0;
-
- // Check for invalid name
- if (name == NULL) {
- return INVALID_HANDLE;
- }
-
- if (strlen(name) >= MAX_QUEUE_NAME_SIZE) {
- return INVALID_HANDLE;
- }
-
- norm_qname_size = strlen(name) + 2;
- normalized_qname = (PSTR)malloc(norm_qname_size);
-
- if (0 != GetNormalizedMqName(normalized_qname, name, norm_qname_size)) {
- int i;
-
- if (!is_internal && strlen(normalized_qname) > LIMIT_QUEUE_NAME_SIZE) {
- free(normalized_qname);
- return INVALID_HANDLE;
- }
-
- mqattr.mq_flags = 0;
- mqattr.mq_maxmsg = (__syscall_slong_t)mq_maxmsg;
- mqattr.mq_msgsize = (__syscall_slong_t)mq_msgsize;
-
- for (i = 0; i < (sizeof(mq_anomaly_list) / sizeof(mq_anomaly_list[0])); i++) {
- if (strcmp(normalized_qname, mq_anomaly_list[i].name) == 0) {
- mqattr.mq_maxmsg = (__syscall_slong_t)mq_anomaly_list[i].maxMsg;
- break;
- }
- }
-
-
- q_fd = mq_open(normalized_qname, O_RDONLY | O_CREAT | O_CLOEXEC, 0666, &mqattr);
-
- if (q_fd != -1) {
- rcvHndl = (SQhandle *)malloc(sizeof(SQhandle));
- if (rcvHndl != NULL) {
- rcvHndl->check_code = MQ_CHECK_CODE;
- rcvHndl->fd = q_fd;
- rcvHndl->q_name = normalized_qname;
- rcvHndl->q_type = eQTypeReveiver;
-
- /////////////////////////////////////////
- rcvHndl->threadid = 0;
- /////////////////////////////////////////
-
- // Set the return handle to rcvHndl
- rtnHandle = rcvHndl;
- }
-
- }
- }
-
- if (INVALID_HANDLE == rtnHandle) {
- // couldn't connect the queue,
- // release the memory to normalized queue name
- if (normalized_qname != NULL) {
- free(normalized_qname);
- normalized_qname = NULL; // mb20110108 item 11
- }
- }
-
- return rtnHandle;
-}
-
-HANDLE OpenReceiver(PCSTR name) {
- return openReceiverInternal(name, MAX_MESSAGES_STORED_IN_QUEUE, MAX_QUEUE_MSG_SIZE, FALSE);
-}
-
-HANDLE openSyncReceiver(PCSTR name) {
- return openReceiverInternal(name, MAX_SYNC_RESPONSE_STORED_IN_QUEUE , MAX_QUEUE_MSG_SIZE, TRUE);
-}
-
-static HANDLE openSenderInternal(PCSTR name, UI_32 mq_maxmsg, UI_32 mq_msgsize, BOOL is_internal, BOOL zero_copy) {
- HANDLE rtnHandle = INVALID_HANDLE; // invalid until made valid.
- SI_32 q_fd = -1; // fd to queue
- SQhandle *sndHndl = NULL;
- PSTR normalized_qname = NULL;
- size_t norm_qname_size = 0;
-
- struct mq_attr mqattr;
-
- // Check for invalid name
- if (name == NULL) {
- return rtnHandle;
- }
-
- if (strlen(name) >= MAX_QUEUE_NAME_SIZE) {
- return rtnHandle;
- }
-
- norm_qname_size = strlen(name) + 2;
- normalized_qname = (PSTR)malloc(norm_qname_size);
-
- if (NULL == normalized_qname) {
- return rtnHandle;
- }
-
- if (0 != GetNormalizedMqName(normalized_qname, name, norm_qname_size)) {
- int i;
-
-
- if (!is_internal && strlen(normalized_qname) > LIMIT_QUEUE_NAME_SIZE) {
- free(normalized_qname);
- return INVALID_HANDLE;
- }
-
- mqattr.mq_flags = 0;
- mqattr.mq_maxmsg = (__syscall_slong_t)mq_maxmsg;
- mqattr.mq_msgsize = (__syscall_slong_t)mq_msgsize;
-
- for (i = 0; i < (sizeof(mq_anomaly_list) / sizeof(mq_anomaly_list[0])); i++) {
- if (strcmp(normalized_qname, mq_anomaly_list[i].name) == 0) {
- mqattr.mq_maxmsg = (__syscall_slong_t)mq_anomaly_list[i].maxMsg;
- break;
- }
- }
-
- q_fd = mq_open(normalized_qname, O_WRONLY | O_CREAT | O_NONBLOCK | O_CLOEXEC, 0666, &mqattr);
-
- if (q_fd != -1) {
- sndHndl = (SQhandle *)malloc(sizeof(SQhandle));
- if (NULL != sndHndl) {
- sndHndl->check_code = MQ_CHECK_CODE;
- sndHndl->fd = q_fd;
- sndHndl->q_name = normalized_qname;
- sndHndl->q_type = eQTypeSender;
-
- sndHndl->threadid = 0;
-
-
- // Set the return handle to sndHndl
- rtnHandle = sndHndl;
-
- if (zero_copy) {
- sndHndl->sendbuf = malloc(MAX_QUEUE_MSG_SIZE);
- if (sndHndl->sendbuf == NULL) {
- // LCOV_EXCL_START 5: malloc's error case
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- free(sndHndl);
- rtnHandle = INVALID_HANDLE;
- // LCOV_EXCL_STOP
- }
- } else {
- sndHndl->sendbuf = NULL;
- }
- }
- }
- }
-
- if (INVALID_HANDLE == rtnHandle) {
- // couldn't connect the queue,
- // release the memory to normalized queue name
- if (normalized_qname != NULL) {
- free(normalized_qname);
- normalized_qname = NULL; // mb20110108 item 11
- }
- if (q_fd != -1) {
- mq_close(q_fd);
- }
- }
-
- return rtnHandle; // invalid until made valid.
-}
-
-HANDLE OpenSender(PCSTR name) {
- return openSenderInternal(name, MAX_MESSAGES_STORED_IN_QUEUE, MAX_QUEUE_MSG_SIZE, FALSE, FALSE);
-}
-
-
-HANDLE OpenSenderChild(PCSTR name, pthread_t threadid) {
- HANDLE h = OpenSender(name);
- if (INVALID_HANDLE != h) {
- SQhandle *sq = (SQhandle *)h;
- sq->threadid = threadid;
- }
- return h;
-}
-
-
-HANDLE openSyncSender(PCSTR name) {
- return openSenderInternal(name, MAX_SYNC_RESPONSE_STORED_IN_QUEUE, MAX_QUEUE_MSG_SIZE, TRUE, FALSE);
-}
-
-HANDLE openSenderZc(PCSTR name) {
- return openSenderInternal(name, MAX_MESSAGES_STORED_IN_QUEUE, MAX_QUEUE_MSG_SIZE, FALSE, TRUE);
-}
-
-
-EFrameworkunifiedStatus JoinChild(HANDLE hChildApp) {
- // mb20110108 Code re-structured per comments 24 & 25
- if (mqCheckValidHandle(hChildApp)) {
- SQhandle *sq = (SQhandle *)hChildApp;
- return TranslateError(pthread_join(sq->threadid, NULL));
- } else {
- return eFrameworkunifiedStatusFail;
- }
-}
-
-EFrameworkunifiedStatus GetChildThreadPriority(HANDLE hChildApp, PSI_32 threadPrio) {
- EFrameworkunifiedStatus eStatus = eFrameworkunifiedStatusFail;
- // LCOV_EXCL_BR_START 6:GetChildThreadPriority is called by McGetChildThreadPriority, and hChildApp will check there.
- if (mqCheckValidHandle(hChildApp)) {
- // LCOV_EXCL_BR_STOP
- SQhandle *sq = (SQhandle *)hChildApp;
- SI_32 schedPolicy; // this is needed according to syntax of pthread_getschedparam. api not available to get prio directly.
- struct sched_param schedParam;
- eStatus = TranslateError(pthread_getschedparam(sq->threadid, &schedPolicy, &schedParam));
-
- *threadPrio = schedParam.sched_priority;
- } else {
- // LCOV_EXCL_START 6:GetChildThreadPriority is called by McGetChildThreadPriority, and hChildApp will check there.
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- eStatus = eFrameworkunifiedStatusInvldHandle;
- // LCOV_EXCL_STOP
- }
- return eStatus;
-}
-
-/// endhack...
-/////////////////////////////////////////
-
-EFrameworkunifiedStatus SendMessage(HANDLE hMessage, UI_32 length, PVOID data) {
- return SendMessageWithPriority(hMessage, length, data, eFrameworkunifiedMsgPrioNormal);
-}
-
-EFrameworkunifiedStatus SendMessageWithPriority(HANDLE hMessage, UI_32 length, PVOID data, EFrameworkunifiedMessagePriorties priority) {
- // define a Q handle structure
- SQhandle *sndHndl = NULL;
-
- // mb20110108 Added per comments 27 & 28
- if (length > 0 && NULL == data) {
- return eFrameworkunifiedStatusInvldBuf;
- }
-
- // check handle for null case...
- if (mqCheckValidHandle(hMessage) == FALSE) {
- return eFrameworkunifiedStatusInvldHandle;
- }
-
- sndHndl = (SQhandle *)hMessage;
-
- // check to see if this is a sender handle
- if (sndHndl->q_type != eQTypeSender) {
- return eFrameworkunifiedStatusInvldHndlType;
- }
-
- if (-1 == mq_send((mqd_t)sndHndl->fd, (PCSTR)data, (size_t)length, (unsigned int)priority)) {
- if (errno == EAGAIN) {
- return eFrameworkunifiedStatusMsgQFull;
- } else {
- return TranslateError(errno);
- }
- }
- return eFrameworkunifiedStatusOK;
-}
-
-SI_32 ReceiveMessage(HANDLE hMessage, UI_32 length, PVOID data) {
- // define a Q handle structure
- SQhandle *rcvHndl = NULL;
-
- // check handle for null case...
- if (mqCheckValidHandle(hMessage) == FALSE) {
- errno = ENODATA;
- return -1;
- }
-
- rcvHndl = (SQhandle *)hMessage;
-
- // check to see if this is a receiver handle
- if (rcvHndl->q_type != eQTypeReveiver) {
- errno = ENODATA;
- return -1;
- }
-
-
- return (SI_32)mq_receive((mqd_t)rcvHndl->fd, (char *)data, (size_t)length, NULL);
-}
-
-EFrameworkunifiedStatus CloseReceiver(HANDLE handle) {
- SQhandle *rcvHndl = NULL;
- SI_32 q_fd;
-
- // check handle for null case...
- if (mqCheckValidHandle(handle) == FALSE) {
- return eFrameworkunifiedStatusInvldHandle;
- }
-
- rcvHndl = (SQhandle *)handle;
-
- // check to see if this is a receiver handle
- if (rcvHndl->q_type != eQTypeReveiver) {
- return eFrameworkunifiedStatusInvldHndlType;
- }
-
- rcvHndl->check_code = 0;
- q_fd = rcvHndl->fd;
-
- if (NULL != rcvHndl->q_name) {
- free(rcvHndl->q_name); // remove the memory to the name
- rcvHndl->q_name = NULL;
- }
- free((void *)handle); // remove handle.. now..
- handle = INVALID_HANDLE;
-
- return ((-1 == mq_close((mqd_t)q_fd)) ? eFrameworkunifiedStatusInvldHandle : eFrameworkunifiedStatusOK);
-}
-
-EFrameworkunifiedStatus CloseSender(HANDLE handle) {
- SQhandle *sndHndl = NULL;
- SI_32 q_fd;
-
- // check handle for null case...
- if (mqCheckValidHandle(handle) == FALSE) {
- return eFrameworkunifiedStatusInvldHandle;
- }
-
- sndHndl = (SQhandle *)handle;
-
- // check to see if this is a sender handle
- if (sndHndl->q_type != eQTypeSender) {
- return eFrameworkunifiedStatusInvldHndlType;
- }
-
- sndHndl->check_code = 0;
- q_fd = sndHndl->fd; // copy the fd, need it to close the queues....
-
- if (NULL != sndHndl->q_name) {
- free(sndHndl->q_name); // remove the memory to the name
- sndHndl->q_name = NULL;
- }
- if (NULL != sndHndl->sendbuf) {
- free(sndHndl->sendbuf);
- sndHndl->sendbuf = NULL;
- }
- free((void *)handle); // remove handle.. now..
- handle = INVALID_HANDLE; // invalidate handle so user doesn't reuse...
-
- return (-1 == mq_close((mqd_t)q_fd)) ? eFrameworkunifiedStatusInvldHandle : eFrameworkunifiedStatusOK;
-}
-
-static UI_8 IsMessageAvailable(SI_32 fd) {
- struct mq_attr sMqStatus;
- if (-1 == mq_getattr(fd, &sMqStatus)) {
- // Error Detected.
- return 0;
- } else {
- if (0 < sMqStatus.mq_curmsgs) {
- return 1;
- } else {
- return 0;
- }
- }
-}
-
-void Flush(HANDLE hMessage) {
- SQhandle *rcvHndl = NULL;
-
- if (mqCheckValidHandle(hMessage)) {
- rcvHndl = (SQhandle *)hMessage;
-
- if (rcvHndl->q_type != eQTypeReveiver) {
- return;
- }
-
- // check there is anything on the queue before going into the loop....
- if (IsMessageAvailable(rcvHndl->fd)) {
- CHAR l_pReceiveBuffer_o[MAX_QUEUE_MSG_SIZE];
-
- // read till there isn't anything on the queue.
- while (IsMessageAvailable(rcvHndl->fd)) {
- mq_receive((mqd_t)rcvHndl->fd, l_pReceiveBuffer_o, (size_t)MAX_QUEUE_MSG_SIZE, NULL);
- }
- }
- }
-}
-
-EQType GetQueueType(HANDLE hMessage) {
- EQType qType = eQTypeInvld;
-
- if (mqCheckValidHandle(hMessage)) {
- SQhandle *handle = (SQhandle *)hMessage;
- qType = handle->q_type;
- }
-
- return qType;
-}
-
-PCSTR GetQueueName(HANDLE hMessage) {
- PCSTR name = NULL;
-
- if (mqCheckValidHandle(hMessage)) {
- SQhandle *hMsgQ = (SQhandle *)hMessage;
-
- if (hMsgQ->q_type == eQTypeSender ||
- hMsgQ->q_type == eQTypeReveiver) {
- name = hMsgQ->q_name;
- }
- }
-
- return name;
-}
-
-int GetQueueFD(HANDLE hMessage) {
- int fd = -1;
-
- if (mqCheckValidHandle(hMessage)) {
- SQhandle *hMsgQ = (SQhandle *)hMessage;
-
- if (hMsgQ->q_type == eQTypeSender ||
- hMsgQ->q_type == eQTypeReveiver) {
- fd = hMsgQ->fd;
- }
- }
-
- return fd;
-}