summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKyungwook Tak <k.tak@samsung.com>2015-11-19 14:59:21 +0900
committerKyungwook Tak <k.tak@samsung.com>2015-11-19 15:44:48 +0900
commit05eca95adfd234279596bfb329e1e9e718573f2b (patch)
treed00e8f3aba986442bf2eb65f22fba4e5b757e9e2
parent415caa0cb018e3cf53eb239e3429cb8360c78510 (diff)
downloadcsf-framework-05eca95adfd234279596bfb329e1e9e718573f2b.tar.gz
csf-framework-05eca95adfd234279596bfb329e1e9e718573f2b.tar.bz2
csf-framework-05eca95adfd234279596bfb329e1e9e718573f2b.zip
Remove TPCS and TWPServer features
Change-Id: I34b587f0d527661d03ef7103088aec777c9e2303 Signed-off-by: Kyungwook Tak <k.tak@samsung.com>
-rw-r--r--README49
-rw-r--r--framework/IpcClient.c785
-rw-r--r--framework/IpcClient.h151
-rw-r--r--framework/IpcForkDaemon.c96
-rw-r--r--framework/IpcForkDaemon.h54
-rw-r--r--framework/IpcMacros.h87
-rw-r--r--framework/IpcServer.c1239
-rw-r--r--framework/IpcServer.h170
-rw-r--r--framework/IpcServerError.c89
-rw-r--r--framework/IpcServerError.h53
-rw-r--r--framework/IpcServerHdr.h143
-rw-r--r--framework/IpcStructs.c185
-rw-r--r--framework/IpcStructs.h139
-rw-r--r--framework/IpcThrdPool.c173
-rw-r--r--framework/IpcThrdPool.h95
-rw-r--r--framework/IpcTypes.h72
-rw-r--r--framework/Makefile_TPCSSerDaemon103
-rw-r--r--framework/Makefile_TWPSerDaemon106
-rw-r--r--framework/Makefile_channel_client108
-rw-r--r--framework/Makefile_channel_server109
-rw-r--r--framework/TPCSSerDaemon.c1399
-rw-r--r--framework/TPCSSerDaemon.h59
-rw-r--r--framework/TSCErrorCodes.h84
-rw-r--r--framework/TWPSerDaemon.c344
-rw-r--r--framework/TWPSerDaemon.h95
-rw-r--r--packaging/com.tsc.ipc.server.plugin.conf13
-rw-r--r--packaging/com.tsc.ipc.server.wp.conf13
-rw-r--r--packaging/csf-framework.spec74
-rw-r--r--packaging/tpcsserdaemon.service11
-rw-r--r--packaging/twpserdaemon.service11
-rwxr-xr-xtest/scripts/MfeTPCSSerDaemonToEmul.sh49
-rwxr-xr-xtest/scripts/MfeTWPSerDaemonToEmul.sh62
-rwxr-xr-xtest/scripts/TPCSSerDaemonTest.sh27
-rwxr-xr-xtest/scripts/TWPSerDaemonTest.sh33
34 files changed, 2 insertions, 6278 deletions
diff --git a/README b/README
index 29d69e2..6f9b017 100644
--- a/README
+++ b/README
@@ -32,10 +32,6 @@
Install following packages to the rootstrap
and setup the build environment
*************************
-dbus (Version 1.6.4)
-dbus-glib (Version 0.100)
-glib (Version 2.32.3)
-gobject (Version 2.32.3)
dlog (Version 1.0)
Compiling for multiple architectures
@@ -87,48 +83,3 @@ EMULATOR(x86) - use test/scripts/PrepareForEmul.sh
- make
- The library can be found at 'lib/libsecfw.so'
- 2.2 Building IPC Client library
- ======================
- - make -f Makefile_channel_client clean
- - make -f Makefile_channel_client
- - The library can be found at 'lib/libscclient.so'
-
- 2.3 Building IPC Server library
- ======================
- - make -f Makefile_channel_server clean;
- - make -f Makefile_channel_server
- - The library can be found at 'lib/libscserver.so'
-
- 2.4 Building Plugin control service
- ======================
- - make -f Makefile_TPCSSerDaemon clean;
- - make -f Makefile_TPCSSerDaemon
- - The binary can be found at 'bin/TPCSSerDaemon'
-
- 2.5 Building Web protection control service
- ======================
- - make -f Makefile_TWPSerDaemon clean
- - make -f Makefile_TWPSerDaemon
- - The binary can be found at 'bin/TWPSerDaemon'
-
- 2.6 Testing Plugin control service
- ======================
- -cd test (change your folder to test)
- -Start the emulator
- -chmod +x ./scripts/MfeTPCSSerDaemonToEmul.sh
- -sdb -e shell (make sure you have enough privilege to write or read all folders under /opt/, /usr/bin/ and /tmp)
- -cd /usr/bin
- -chmod +x ./Test.sh
- - ./Test.sh
- - ./tpcsserdaemontest
-
- 2.7 Testing Web protection control service
- ======================
- -cd test (change your folder to test)
- -Start the emulator
- -chmod +x ./scripts/MfeTWPSerDaemonToEmul.sh
- -sdb -e shell (make sure you have enough privilege to write or read all folders under /opt/, /tmp)
- -cd /usr/bin
- -chmod +x ./Test.sh
- - ./Test.sh
- - ./twpserdaemontest \ No newline at end of file
diff --git a/framework/IpcClient.c b/framework/IpcClient.c
deleted file mode 100644
index 935b29c..0000000
--- a/framework/IpcClient.c
+++ /dev/null
@@ -1,785 +0,0 @@
-/*
- Copyright (c) 2014, McAfee, Inc.
-
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without modification,
- are permitted provided that the following conditions are met:
-
- Redistributions of source code must retain the above copyright notice, this list
- of conditions and the following disclaimer.
-
- Redistributions in binary form must reproduce the above copyright notice, this
- list of conditions and the following disclaimer in the documentation and/or other
- materials provided with the distribution.
-
- Neither the name of McAfee, Inc. nor the names of its contributors may be used
- to endorse or promote products derived from this software without specific prior
- written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
- INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
- OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
- OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-/**
- * \file IpcClient.c
- * \brief Ipc Client Source File
- *
- * This file implements the IPC Client API functions used by Security framework.
- */
-
-#include <dbus/dbus.h>
-#include <stdbool.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <sys/types.h>
-#include <unistd.h>
-
-#include "Debug.h"
-#include "IpcClient.h"
-#include "IpcStructs.h"
-#include "TSCErrorCodes.h"
-
-static DBusHandlerResult _IpcClientMsgFilter(DBusConnection *dbconn, DBusMessage *dbmsg, void *data);
-static bool _IpcClientInit(IpcClientInfo *pInfo);
-static void _IpcClientDeInit(IpcClientInfo *pInfo);
-static void _IpcHandleAsyncReply(DBusPendingCall *pPendingCall, void *pThreadData);
-static void _free_str_array(char*** arr, int size);
-
-/**
- * Initializes and returns handle to client side IPC.
- */
-TSC_IPC_HANDLE IpcClientOpen(void)
-{
- IpcClientInfo *pInfo = NULL;
- pInfo = calloc(1, sizeof(IpcClientInfo));
- if (pInfo == NULL)
- return NULL;
-
- snprintf(pInfo->pid, TSC_REQ_STR_LEN, "%d", getpid());
- snprintf(pInfo->req_name, TSC_REQ_STR_LEN, "%s%d", TSC_DBUS_CLIENT, getpid());
-
- // Init Dbus Client
- if (!_IpcClientInit(pInfo))
- goto err_conn;
-
- return (TSC_IPC_HANDLE)pInfo;
-
-err_conn:
- if (pInfo)
- free(pInfo);
-
- return INVALID_IPC_HANDLE;
-}
-
-/**
- * Close the client-side IPC and release the resources.
- */
-void IpcClientClose(TSC_IPC_HANDLE hIpc)
-{
- if (hIpc == INVALID_IPC_HANDLE)
- return;
-
- IpcClientInfo *pInfo = (IpcClientInfo *)hIpc;
- _IpcClientDeInit(pInfo);
- free(pInfo);
-}
-
-/**
- * Gives the prefix for the unique id of message sent.
- */
-char *_GetMsgIdPrefix(void)
-{
- char szIdPrefix[MSGHANDLE_LEN] = {0};
- if (snprintf(szIdPrefix, MSGHANDLE_LEN, TSC_MID_PREFIX_FORMAT, getpid(), pthread_self()) >= 0)
- return strdup(szIdPrefix);
-
- return NULL;
-}
-
-/**
- * Requests the Security framework's IPC server and returns back the reply.
- */
-int TSCSendMessageN(TSC_IPC_HANDLE hIpc, const char *service_name, const char *szMethod, int argc,
- char **argv, int *argc_reply, char ***argv_reply, int timeout_milliseconds)
-{
- IpcClientInfo *pInfo = (IpcClientInfo *)hIpc;
- DBusMessage *dbmsg = NULL;
- DBusMessage *reply_msg = NULL;
- DBusMessageIter dbiter;
- DBusError dberr;
- char *pArgItem = NULL;
- char *pBuf = NULL;
- int i = 0;
- int j = 0;
- int iErr = TSC_ERROR_MODULE_GENERIC;
- int iSize = TSC_REPLY_MSG_COUNT_AVERAGE;
-
- *argc_reply = 0;
-
- // TODO: Avoid multiple exits.
- if (pInfo == NULL)
- return TSC_ERROR_INVALID_HANDLE;
-
- if (pInfo->dbconn == NULL)
- return TSC_ERROR_INVALID_HANDLE;
-
- if (argc < 0 || !szMethod)
- return TSC_ERROR_INVALID_PARAM;
-
- *argv_reply = malloc(iSize * sizeof(char *));
- if (!*argv_reply)
- {
- iErr = TSC_ERROR_INSUFFICIENT_RES;
- goto err_send;
- }
-
- dbus_error_init(&dberr);
-
- dbmsg = dbus_message_new_method_call(service_name, TSC_DBUS_PATH, TSC_DBUS_INTERFACE, szMethod);
- if (dbmsg == NULL)
- {
- iErr = TSC_ERROR_INSUFFICIENT_RES;
- goto err_send;
- }
- dbus_message_iter_init_append(dbmsg, &dbiter);
-
- // Add the message unique id as first element (the prefix).
- char *szIdPrefix = _GetMsgIdPrefix();
- if (!szIdPrefix || !dbus_message_iter_append_basic(&dbiter, DBUS_TYPE_STRING, &szIdPrefix))
- {
- DDBG("client_lib: Failed to append id prefix for %s.\n", szMethod);
- free(szIdPrefix);
- goto err_send;
- }
- free(szIdPrefix);
- for (i = 0; i < argc; i++)
- {
- if (!dbus_validate_utf8(argv[i], &dberr))
- {
- DDBG("%s", "client_lib: Not valid utf8 string\n");
- goto err_send;
- }
- if (!dbus_message_iter_append_basic(&dbiter, DBUS_TYPE_STRING, &argv[i]))
- {
- DDBG("client_lib: %s failed to append arguments\n", pInfo->pid);
- goto err_send;
- }
- }
-
- if (timeout_milliseconds == 0)
- timeout_milliseconds = DBUS_TIMEOUT_INFINITE;
-
- reply_msg = dbus_connection_send_with_reply_and_block(pInfo->dbconn, dbmsg,
- timeout_milliseconds,
- &dberr);
-
- if (reply_msg == NULL && dbus_error_is_set(&dberr))
- {
- DDBG("client_lib: Failed to end %s\n", dberr.message);
- goto err_send;
- }
-
- if (reply_msg == NULL)
- {
- DDBG("%s\n", "client_lib: reply message is NULL");
- goto err_send;
- }
-
- j = 0;
- if (!dbus_message_iter_init(reply_msg, &dbiter))
- {
- DDBG("%s\n", "client_lib: Message has no arguments.");
- goto zero_args;
- }
-
- do
- {
- if (dbus_message_iter_get_arg_type(&dbiter) != DBUS_TYPE_STRING)
- {
- DDBG("client_lib: %s argument is not string\n", pInfo->pid);
- goto err_send;
- }
-
- dbus_message_iter_get_basic(&dbiter, &pArgItem);
- if (!pArgItem)
- {
- DDBG("client_lib: %s arg is NULL\n", pInfo->pid);
- goto err_send;
- }
-
- if (!(pBuf = strdup((const char*)pArgItem)))
- {
- goto err_send;
- }
- (*argv_reply)[j++] = pBuf;
-
- if (j >= iSize)
- {
- iSize += TSC_REPLY_MSG_COUNT_AVERAGE;
- *argv_reply = realloc(*argv_reply, sizeof(char*) * iSize);
- if (!*argv_reply)
- {
- goto err_send;
- }
- }
- } while (dbus_message_iter_has_next(&dbiter) && dbus_message_iter_next(&dbiter));
-
-zero_args:
- *argc_reply = j;
- return 0;
-
-err_send:
- if (*argv_reply)
- {
- while (j)
- free((*argv_reply)[--j]);
-
- free(*argv_reply);
- *argv_reply = NULL;
- }
- if (dbmsg)
- dbus_message_unref(dbmsg);
- if(reply_msg)
- dbus_message_unref(reply_msg);
-
- return -1;
-}
-
-/**
- * Block current thread till message is sent and structure is updated in child thread.
- */
-void BlockTillSent(SharedData *pSharedData)
-{
- pthread_mutex_lock(&pSharedData->lock);
- while (pSharedData->iSent == 0)
- pthread_cond_wait(&pSharedData->cond, &pSharedData->lock);
- pthread_mutex_unlock(&pSharedData->lock);
-}
-
-/**
- * Unblock parent thread as the message structures have been updated.
- * Unblocks only 1 thread associated with the condition variable.
- * Broadcast avoided as only waiting thread is expected.
- */
-void UnblockOnSent(SharedData *pSharedData)
-{
- pthread_mutex_lock(&pSharedData->lock);
- pSharedData->iSent = 1;
- pthread_cond_signal(&pSharedData->cond);
- pthread_mutex_unlock(&pSharedData->lock);
-}
-
-/**
- * Creates a thread for asynchronous task.
- * TODO: Merge with TCS module.
- */
-int _RunDetachedThread(void *pfWorkerFunc, void *pThreadData)
-{
- pthread_t thread;
- pthread_attr_t attr;
-
- int rc = -1;
- do
- {
- if (pthread_attr_init(&attr) != 0)
- break;
-
- if (pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED) != 0)
- break;
-
- if (pthread_create(&thread, &attr, pfWorkerFunc, pThreadData) != 0)
- break;
-
- if (pthread_attr_destroy(&attr) != 0)
- {
- // As the thread is already running, return different error code.
- rc = -2;
- break;
- }
-
- rc = 0;
- }
- while (0);
-
- return rc;
-}
-
-void *_SendMessageWorker(void *pData)
-{
- dbus_bool_t result;
- DBusPendingCall *pPendingCall = NULL;
- ThreadData *pThreadData = (ThreadData *) pData;
- ThreadData *pPendingData = NULL;
- int iSentFailed = 1;
-
- do
- {
- if (pThreadData == NULL)
- {
- DDBG("%s\n", "Nothing to send from thread. Deadlock!!");
- break;
- }
-
- // Duplicate the User data to create the pending User data.
- pPendingData = _AllocThreadData(NULL, DEF_TIMEOUT, NULL, pThreadData->pCallBack,
- pThreadData->pPrivate);
- if (pPendingData == NULL)
- {
- DDBG("%s\n", "Duplicating user data in thread failed. Deadlock!!");
- break;
- }
-
- // Ownership of pThreadData remains with 'parent' thread.
- result = dbus_connection_send_with_reply(pThreadData->pConn, pThreadData->pSharedData->pMsg,
- &pPendingCall, pThreadData->timeout_milliseconds);
- if (!result || !pPendingCall)
- {
- DDBG("%s\n", "client_lib: SendAsync failed.");
- break;
- }
-
- if (!pPendingData->pCallBack)
- dbus_pending_call_cancel(pPendingCall);
- else
- dbus_pending_call_set_notify(pPendingCall, _IpcHandleAsyncReply, pPendingData,
- _FreeThreadData);
-
- // Set the values for parent thread to allow cancellation or further async action if needed.
- if (_CreateClientCallHandle(&pThreadData->pSharedData->pCallHandle,
- pThreadData->pSharedData->szCallHandlePrefix,
- dbus_message_get_serial(pThreadData->pSharedData->pMsg),
- pPendingCall) != 0)
- {
- dbus_pending_call_cancel(pPendingCall);
- break;
- }
-
- UnblockOnSent(pThreadData->pSharedData);
- // WARNING: Do not use pThreadData beyond this point, as parent thread may destroy it.
-
- dbus_pending_call_block(pPendingCall);
-
- iSentFailed = 0;
- }
- while(0);
-
- if (iSentFailed && pThreadData)
- {
- DDBG("%s\n", "Error in send messsage worker. Unblocking..");
- UnblockOnSent(pThreadData->pSharedData);
- }
-
- DDBG("%s\n", "Finished send message worker.");
- return NULL;
-}
-
-
-/**
- * Requests the Security framework's IPC server asynchronously.
- */
-int TSCSendMessageAsync(TSC_IPC_HANDLE hIpc, const char *service_name, const char *szMethod,
- int argc, char **argv, TSC_CALL_HANDLE *phCallHandle, TSCCallback pCallback,
- void *pPrivate, int timeout_milliseconds)
-{
- DDBG("%s %s\n", "sendmessage async ", service_name);
- IpcClientInfo *pInfo = (IpcClientInfo *)hIpc;
- DBusMessage *pMsg = NULL;
- DBusMessageIter dbiter;
- DBusError dberr;
- ThreadData *pThreadData = NULL;
- int i = 0;
- int iErr = TSC_ERROR_MODULE_GENERIC;
-
- // TODO: Avoid multiple exits.
- if (pInfo == NULL)
- return TSC_ERROR_INVALID_HANDLE;
-
- if (pInfo->dbconn == NULL)
- return TSC_ERROR_INVALID_HANDLE;
-
- if (argc < 0 || !szMethod)
- return TSC_ERROR_INVALID_PARAM;
-
- dbus_error_init(&dberr);
- pMsg = dbus_message_new_method_call(service_name, TSC_DBUS_PATH, TSC_DBUS_INTERFACE, szMethod);
-
- if (pMsg == NULL)
- {
- iErr = TSC_ERROR_INSUFFICIENT_RES;
- goto err_send;
- }
-
- dbus_message_iter_init_append(pMsg, &dbiter);
-
- // Add the message unique id as first element (the prefix).
- char *szIdPrefix = _GetMsgIdPrefix();
- if (!szIdPrefix || !dbus_message_iter_append_basic(&dbiter, DBUS_TYPE_STRING, &szIdPrefix))
- {
- DDBG("client_lib: Failed to append id prefix for %s.\n", szMethod);
- free(szIdPrefix);
- goto err_send;
- }
-
- for (i = 0; i < argc; i++)
- {
- if (!dbus_validate_utf8(argv[i], &dberr))
- {
- DDBG("%s", "client_lib: Not valid utf8 string\n");
- goto err_send;
- }
- if (!dbus_message_iter_append_basic(&dbiter, DBUS_TYPE_STRING, &argv[i]))
- {
- DDBG("client_lib: %s failed to append arguments\n", pInfo->pid);
- goto err_send;
- }
- }
-
- // Reply is discarded and not sent back to client, if no callback available.
- if (!pCallback)
- dbus_message_set_no_reply(pMsg, TRUE);
-
- SharedData *pSharedData = _CreateSharedData(szIdPrefix, pMsg);
- free(szIdPrefix);
-
- if (!pSharedData)
- {
- iErr = TSC_ERROR_INSUFFICIENT_RES;
- goto err_send;
- }
-
- if (timeout_milliseconds == 0)
- timeout_milliseconds = DBUS_TIMEOUT_INFINITE;
-
- pThreadData = _AllocThreadData(pInfo->dbconn, timeout_milliseconds, pSharedData, pCallback,
- pPrivate);
- if (!pThreadData)
- {
- _FreeSharedData(pSharedData);
- iErr = TSC_ERROR_INSUFFICIENT_RES;
- goto err_send;
- }
-
- // Assert that the message is ready to be used.
- if (pThreadData->pSharedData->iSent)
- {
- DDBG("%s\n", "client_lib: Sent flag already set!!");
- goto err_send;
- }
-
- DDBG("Before sending: %d\n", dbus_message_get_serial(pMsg));
- if (_RunDetachedThread(_SendMessageWorker, pThreadData) == -1)
- {
- DDBG("%s\n", "client_lib: Running thread failed!!");
- goto err_send;
- }
-
- BlockTillSent(pThreadData->pSharedData);
- DDBG("After sending: %d\n", dbus_message_get_serial(pMsg));
-
- if (phCallHandle)
- {
- *phCallHandle = (TSC_CALL_HANDLE)pThreadData->pSharedData->pCallHandle;
- //TODO: should add here
- DDBG("method unique id :%s\n", ((ClientCallHandle*) phCallHandle)->idUnique);
- strncpy(pThreadData->pSharedData->pCallHandle->service_name, service_name, TSC_SERVER_NAME_LEN);
- }
- else
- {
- // The caller does not want to call special methods (cancel, get progress) later.
- _FreeClientCallHandle(pThreadData->pSharedData->pCallHandle);
- pThreadData->pSharedData->pCallHandle = NULL;
- }
-
- iErr = 0;
-
-err_send:
- if (pMsg)
- dbus_message_unref(pMsg);
-
- if (pThreadData)
- _FreeThreadData(pThreadData);
-
- return iErr;
-}
-
-/**
- * Releases the asynchronous call handle.
- */
-void TSCFreeSentMessageHandle(TSC_CALL_HANDLE hCallHandle)
-{
- _FreeClientCallHandle((ClientCallHandle *)hCallHandle);
-}
-
-/**
- * Callback when reply is received from IPC server for asynchronous method call.
- */
-static void _IpcHandleAsyncReply(DBusPendingCall *pPendingCall, void *pThreadData)
-{
- int i = 0;
- int argc = 0;
- char **argv = NULL;
- char *pBuf = NULL;
- char *pArgItem = NULL;
- DBusError dberr;
- DBusMessageIter dbiter;
- DBusMessage *pMsg = NULL;
- int iErr = TSC_ERROR_MODULE_GENERIC;
- int iSize = TSC_REPLY_MSG_COUNT_AVERAGE;
- ThreadData *pData = (ThreadData *)pThreadData;
-
- argv = malloc(iSize * sizeof(char *));
- if (!argv)
- {
- iErr = TSC_ERROR_INSUFFICIENT_RES;
- goto reply_err;
- }
-
- dbus_error_init(&dberr);
-
- pMsg = dbus_pending_call_steal_reply(pPendingCall);
- if (pMsg == NULL)
- {
- DDBG("%s\n", "client_lib: reply message is NULL");
- goto reply_err;
- }
-
- i = 0;
- if (!dbus_message_iter_init(pMsg, &dbiter))
- {
- DDBG("%s\n", "client_lib: Async reply has no arguments");
- goto reply_err;
- }
-
- do
- {
- if (dbus_message_iter_get_arg_type(&dbiter) != DBUS_TYPE_STRING)
- {
- DDBG("%s\n", "client_lib: Reply argument is not string");
- goto reply_err;
- }
-
- dbus_message_iter_get_basic(&dbiter, &pArgItem);
- if (!pArgItem)
- {
- DDBG("%s\n", "client_lib: Failed getting string arg from reply");
- goto reply_err;
- }
-
- if (!(pBuf = strdup((const char*)pArgItem)))
- {
- goto reply_err;
- }
- argv[i++] = pBuf;
-
- if (i >= iSize)
- {
- iSize += TSC_REPLY_MSG_COUNT_AVERAGE;
- argv = realloc(argv, sizeof(char*) * iSize);
- if (!argv)
- {
- goto reply_err;
- }
- }
- } while (dbus_message_iter_has_next(&dbiter) && dbus_message_iter_next(&dbiter));
-
- argc = i;
- // Continue passing the returned values to callback.
- goto forward_reply;
-
-reply_err:
- // Reset values being returned.
- _free_str_array(&argv, i);
-
-forward_reply:
- if(pMsg)
- dbus_message_unref(pMsg);
- if (pPendingCall)
- dbus_pending_call_unref(pPendingCall);
-
- if (pData && pData->pCallBack)
- (*(pData->pCallBack))(pData->pPrivate, argc, (const char**)argv);
-
- _free_str_array(&argv, i);
-
- DDBG("%s\n", "client_lib: Async Reply Completed.");
-}
-
-
-/**
- * Cancels an asynchronous request previously made to the Security framework's IPC server.
- * On success, releases the handle of the previously called asynchronous method.
- */
-int TSCCancelMessage(TSC_IPC_HANDLE hIpc, TSC_CALL_HANDLE hCallHandle)
-{
- IpcClientInfo *pInfo = (IpcClientInfo *)hIpc;
- ClientCallHandle *pCallHandle = (ClientCallHandle *)hCallHandle;
- char *argv_req[1];
- int iResult = -1;
-
- do
- {
- DDBG("%s\n", "client_lib: CANCELing.");
- if (!pInfo || !pCallHandle)
- break;
-
- DDBG("%s\n", "prepare cancel");
- // Cancel the message call locally.
- dbus_pending_call_cancel(pCallHandle->pPendingCall);
-
- // Now request the server to abort the running of the method.
- argv_req[0] = pCallHandle->idUnique;
- DDBG("cancel method unique id:%s\n", argv_req[0]);
- //TODO: need change here for cancel message
-
- TSC_CALL_HANDLE handle = NULL;
- iResult = TSCSendMessageAsync((TSC_IPC_HANDLE)pInfo, pCallHandle->service_name,
- TSC_FN_CANCELMETHOD, 1, argv_req, &handle, NULL, NULL,
- DEF_TIMEOUT);
- DDBG("%s\n", "client_lib: Sent Cancel to server.");
-
- if (iResult == 0)
- {
- _FreeClientCallHandle(pCallHandle);
- }
-
- } while (0);
-
- return iResult;
-}
-
-static DBusHandlerResult _IpcClientMsgFilter(DBusConnection *dbconn, DBusMessage *dbmsg, void *data)
-{
- IpcClientInfo *info = (IpcClientInfo*) data;
- if (dbus_message_is_signal(dbmsg, DBUS_INTERFACE_LOCAL, "Disconnected"))
- {
- DDBG("client_lib: %s disconnected by signal\n", info->pid);
- info->dbconn = NULL;
- return DBUS_HANDLER_RESULT_HANDLED;
- }
-
- return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
-}
-
-static bool _IpcClientInit(IpcClientInfo *pInfo)
-{
- if (!pInfo)
- return false;
-
- DBusError dberr;
- int ret;
-
- if (!dbus_threads_init_default())
- {
- DDBG("failed dbus_threads_init_default %s\n", "");
- goto err;
- }
-
- dbus_error_init(&dberr);
-
-
- if (pInfo->dbconn != NULL)
- return false;
-
- pInfo->dbconn = dbus_bus_get(DBUS_BUS_SYSTEM, &dberr);
-
- if (pInfo->dbconn == NULL && dbus_error_is_set(&dberr))
- {
- DDBG("client_lib: %s error in get connection %s\n", pInfo->pid, dberr.message);
- goto err_get;
- }
-
- if (!pInfo->dbconn)
- {
- DDBG("client_lib: %s get connection is NULL\n", pInfo->pid);
- goto err_get;
- }
-
- dbus_connection_set_exit_on_disconnect(pInfo->dbconn, false);
-
- if (!dbus_connection_add_filter(pInfo->dbconn, _IpcClientMsgFilter, pInfo, NULL))
- {
- DDBG("client_lib: %s failed to add filter %s\n", pInfo->pid, dberr.message);
- goto err_get;
- }
-
- ret = dbus_bus_request_name(pInfo->dbconn, pInfo->req_name, DBUS_NAME_FLAG_REPLACE_EXISTING, &dberr);
-
- if (ret == -1 && dbus_error_is_set(&dberr))
- {
- DDBG("client_lib: %s failed to request name %s\n", pInfo->pid, dberr.message);
- goto err_get;
- }
-
- if (ret != DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER)
- {
- DDBG("client_lib: %s failed, it is not primary owner %d\n", pInfo->req_name, ret);
- goto err_get;
- }
-
- dbus_error_free(&dberr);
- return true;
-
-err_get:
- if (pInfo->dbconn)
- {
- dbus_connection_unref(pInfo->dbconn);
- pInfo->dbconn = NULL;
- }
- dbus_error_free(&dberr);
-
-err:
- return false;
-}
-
-static void _IpcClientDeInit(IpcClientInfo *pInfo)
-{
- if (!pInfo)
- return;
-
- DBusError dberr;
- int ret;
-
- if (!pInfo->dbconn)
- return;
-
- dbus_error_init(&dberr);
- ret = dbus_bus_release_name(pInfo->dbconn, pInfo->req_name, &dberr);
-
- if (ret == -1 && dbus_error_is_set(&dberr))
- DDBG("client_lib: %s failed to release name %s\n", pInfo->pid, dberr.message);
-
- dbus_error_free(&dberr);
-
- dbus_connection_remove_filter(pInfo->dbconn, _IpcClientMsgFilter, pInfo);
- dbus_connection_unref(pInfo->dbconn);
- pInfo->dbconn = NULL;
-}
-
-/**
- * Release all the elements of the array and assign it to NULL.
- */
-static void _free_str_array(char*** arr, int size)
-{
- if (arr)
- {
- char **sArr = *arr;
- if (sArr && *sArr)
- {
- while (size)
- free(sArr[--size]);
-
- free(sArr);
- *arr = NULL;
- }
- }
-}
diff --git a/framework/IpcClient.h b/framework/IpcClient.h
deleted file mode 100644
index 42681c4..0000000
--- a/framework/IpcClient.h
+++ /dev/null
@@ -1,151 +0,0 @@
-/*
- Copyright (c) 2014, McAfee, Inc.
-
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without modification,
- are permitted provided that the following conditions are met:
-
- Redistributions of source code must retain the above copyright notice, this list
- of conditions and the following disclaimer.
-
- Redistributions in binary form must reproduce the above copyright notice, this
- list of conditions and the following disclaimer in the documentation and/or other
- materials provided with the distribution.
-
- Neither the name of McAfee, Inc. nor the names of its contributors may be used
- to endorse or promote products derived from this software without specific prior
- written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
- INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
- OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
- OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#ifndef IPCCLIENT_H
-#define IPCCLIENT_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * \file IpcClient.h
- * \brief Ipc Client Header File
- *
- * This file provides the IPC Client API functions used by Security framework.
- */
-
-#include "IpcTypes.h"
-
-/*==================================================================================================
- CONSTANTS & ENUMS
-==================================================================================================*/
-#define DEF_TIMEOUT -1
-
-
-/*==================================================================================================
- FUNCTION PROTOTYPES
-==================================================================================================*/
-
-/**
- * \brief Initializes client side IPC and returns its handle.
- *
- * Opens and initialises the handle to client side IPC using the security
- * framework defaults.
- *
- * This is a synchronous API.
- *
- * \return Return Type (TSC_IPC_HANDLE) \n
- * Client IPC handle - on success. \n
- * NULL - on failure. \n
- */
-TSC_IPC_HANDLE IpcClientOpen(void);
-
-/**
- * \brief Requests the Security framework's IPC server and returns back the reply.
- *
- * This is a synchronous API.
- *
- * \param[in] hIpc IPC handle returned by IpcClientOpen().
- *
- * \return Return Type (void) \n
- */
-void IpcClientClose(TSC_IPC_HANDLE hIpc);
-
-/**
- * \brief Requests the Security framework's IPC server and returns back the reply.
- *
- * This is a synchronous API.
- *
- * \param[in] hIpc Client side IPC handle.
- * \param[in] szMethod Name of the method called.
- * \param[in] argc Number of parameters passed in argv.
- * \param[in] argv Array of strings representing parameters for method called.
- * \param[out] reply_len Length of the string in reply_argv.
- * \param[out] reply_argv Array of strings representing result value from method called.
- * \param[in] timeout_milliseconds Timeout in milliseconds. -1 for default or 0 for no timeout.
- *
- * \return Return Type (int) \n
- * 0 - on send success. \n
- * -1 - on send failure. \n
- */
-int TSCSendMessageN(TSC_IPC_HANDLE hIpc, const char *service_name, const char *szMethod, int argc,
- char **argv, int *argc_reply, char ***argv_reply, int timeout_milliseconds);
-
-/**
- * \brief Requests the Security framework's IPC server asynchronously.
- *
- * This is an asynchronous API.
- *
- * \param[in] hIpc Client side IPC handle.
- * \param[in] szMethod Name of the method called.
- * \param[in] argc Number of parameters passed in argv.
- * \param[in] argv Array of strings representing parameters for method called.
- * \param[out] phCallHandle Pointer to handle of the asynchronous message sent.
- * \param[in] pCallback Callback function for the asynchronous reply.
- * \param[in] pPrivate API caller's context information, to be supplied with callback.
- * \param[in] timeout_milliseconds Timeout in milliseconds. -1 for default or 0 for no timeout.
- *
- * \return Return Type (int) \n
- * 0 - on send success. \n
- * Error code - on send failure. \n
- */
-int TSCSendMessageAsync(TSC_IPC_HANDLE hIpc, const char *service_name, const char *szMethod, int argc, char **argv,
- TSC_CALL_HANDLE *phCallHandle, TSCCallback pCallback, void *pPrivate,
- int timeout_milliseconds);
-
-/**
- * \brief Releases the asynchronous call handle.
- *
- * \param[in] hCallHandle Handle of the asynchronous message sent earlier.
- */
-void TSCFreeSentMessageHandle(TSC_CALL_HANDLE hCallHandle);
-
-/**
- * \brief Cancels an asynchronous request previously made to the Security framework's IPC server.
- * On success, releases the handle of the previously called asynchronous method.
- *
- * This is an asynchronous API.
- *
- * \param[in] hIpc Client side IPC handle.
- * \param[in] hCallHandle Handle of the asynchronous message sent earlier.
- *
- * \return Return Type (int) \n
- * 0 - on send success. \n
- * Error code - on failure. \n
- */
-int TSCCancelMessage(TSC_IPC_HANDLE hIpc, TSC_CALL_HANDLE hCallHandle);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* IPCCLIENT_H */
diff --git a/framework/IpcForkDaemon.c b/framework/IpcForkDaemon.c
deleted file mode 100644
index 5ee1f3c..0000000
--- a/framework/IpcForkDaemon.c
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- Copyright (c) 2014, McAfee, Inc.
-
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without modification,
- are permitted provided that the following conditions are met:
-
- Redistributions of source code must retain the above copyright notice, this list
- of conditions and the following disclaimer.
-
- Redistributions in binary form must reproduce the above copyright notice, this
- list of conditions and the following disclaimer in the documentation and/or other
- materials provided with the distribution.
-
- Neither the name of McAfee, Inc. nor the names of its contributors may be used
- to endorse or promote products derived from this software without specific prior
- written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
- INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
- OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
- OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-/**
- * \file IpcForkDaemon.c
- * \brief Ipc Fork Daemon source file.
- *
- * This file implements the Ipc Fork Daemon function used by Security framework.
- */
-
-#include "Debug.h"
-#include "IpcForkDaemon.h"
-#include <signal.h>
-
-void
-fork_daemon()
-{
- pid_t pid;
-
- // Fork off the parent process.
- pid = fork();
-
- // An error occurred.
- if (pid < 0)
- {
- DERR("%s\n", "unable to start the TWPSerDaemon");
- exit(EXIT_FAILURE);
- }
-
- // Success: Let the parent terminate.
- if (pid > 0)
- {
- DERR("%s\n", "Successfully forked the child process");
- exit(EXIT_SUCCESS);
- }
-
- // On success: The child process becomes session leader.
- if (setsid() < 0)
- {
- DERR("%s\n", "unable to start the TWPSerDaemon");
- exit(EXIT_FAILURE);
- }
-
- signal(SIGCHLD, SIG_IGN);
- signal(SIGHUP, SIG_IGN);
-
- // Fork off for the second time to ensure session leading process ends.
- pid = fork();
-
- // An error occurred.
- if (pid < 0)
- {
- DERR("%s\n", "unable to start the TWPSerDaemon");
- exit(EXIT_FAILURE);
- }
-
- // Success: Let the session leading process end.
- if (pid > 0)
- {
- DERR("%s\n", "Successfully forked the TWPSerDaemon process in the new session");
- exit(EXIT_SUCCESS);
- }
-
- //close the file descriptors of terminal associated with the process
- close(STDIN_FILENO);
- close(STDOUT_FILENO);
- close(STDERR_FILENO);
-}
diff --git a/framework/IpcForkDaemon.h b/framework/IpcForkDaemon.h
deleted file mode 100644
index da186ac..0000000
--- a/framework/IpcForkDaemon.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- Copyright (c) 2014, McAfee, Inc.
-
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without modification,
- are permitted provided that the following conditions are met:
-
- Redistributions of source code must retain the above copyright notice, this list
- of conditions and the following disclaimer.
-
- Redistributions in binary form must reproduce the above copyright notice, this
- list of conditions and the following disclaimer in the documentation and/or other
- materials provided with the distribution.
-
- Neither the name of McAfee, Inc. nor the names of its contributors may be used
- to endorse or promote products derived from this software without specific prior
- written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
- INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
- OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
- OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-/**
- * \file IpcForkDaemon.h
- * \brief TWP Server Daemon Header file.
- *
- * This file has the function prototypes.
- */
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <unistd.h>
-#include <stdlib.h>
-#include <stdio.h>
-
-/**
- * \brief this method forks the daemon
- * This is a synchronized API.
- *
- * \param[in] none.
- * \param[out] none.
- * \return Return Type (void) \n
- *
- */
-void fork_daemon();
diff --git a/framework/IpcMacros.h b/framework/IpcMacros.h
deleted file mode 100644
index 4c91412..0000000
--- a/framework/IpcMacros.h
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- Copyright (c) 2014, McAfee, Inc.
-
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without modification,
- are permitted provided that the following conditions are met:
-
- Redistributions of source code must retain the above copyright notice, this list
- of conditions and the following disclaimer.
-
- Redistributions in binary form must reproduce the above copyright notice, this
- list of conditions and the following disclaimer in the documentation and/or other
- materials provided with the distribution.
-
- Neither the name of McAfee, Inc. nor the names of its contributors may be used
- to endorse or promote products derived from this software without specific prior
- written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
- INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
- OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
- OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#ifndef IPCMACROS_H
-#define IPCMACROS_H
-
-/**
- * \file IpcMacros.h
- * \brief Common constants and macros Header File
- *
- * This file provides the constants and macros for IPC used by Security framework.
- */
-
-#define TSC_DBUS_SERVER_GENERIC_STUB "com.tsc.ipc.server.generic"
-#define TSC_DBUS_SERVER_WP_CHANNEL "com.tsc.ipc.server.wp"
-#define TSC_DBUS_SERVER_PLUGIN_CHANNEL "com.tsc.ipc.server.plugin"
-#define TSC_DBUS_SERVER_INTEGRITY_TEST_STUB "com.tsc.ipc.server.integrity"
-
-#define TSC_DBUS_SERVER "com.tsc.ipc.server"
-#define TSC_DBUS_INTERFACE "org.tsc.ipc.interface"
-#define TSC_DBUS_PATH "/org/tsc/ipc/path"
-#define TSC_DBUS_CLIENT "com.tsc.ipc.client"
-#define TSC_FN_FETCHLIST "FetchList"
-#define TSC_FN_CANCELMETHOD "_Cancel_"
-#define TSC_FN_PROGRESSMETHOD "_Progress_"
-#define TSC_FN_SHUTDOWN "IpcShutdown"
-
-#define TSC_MID_PREFIX_FORMAT "%u_%lu_"
-#define TSC_MID_FORMAT TSC_MID_PREFIX_FORMAT"%u"
-#define TSC_MID_SVR_FORMAT "%s%u"
-
-#define TSC_READ_WRITE_DISPATCH_SLEEP_SECONDS 1
-#define TSC_SEND_MESSAGE_REPLY_TIME 5000
-
-#define TSC_THREAD_POOL_NUMBERS 3
-
-#define TSC_REQ_STR_LEN 128
-#define TSC_INFO_RULE_LEN 128
-#define TSC_SERVER_NAME_LEN 128
-#define TSC_METHOD_NAME_LEN 128
-
-#define TSC_REPLY_MSG_COUNT_AVERAGE 4
-
-
-// Client side call handle length.
-// TODO: Reduce size by avoiding string type handle.
-#define MSGHANDLE_LEN 25
-
-typedef enum
-{
- TSC_CANCEL = -1,
- TSC_PROGRESS = 0
-} TSC_METHOD_REASON_CODE;
-
-#define TSC_IS_CANCEL 0
-#define TSC_NON_CANCEL 1;
-
-#endif /* IPCMACROS_H */
-
diff --git a/framework/IpcServer.c b/framework/IpcServer.c
deleted file mode 100644
index 3d85e85..0000000
--- a/framework/IpcServer.c
+++ /dev/null
@@ -1,1239 +0,0 @@
-/*
- Copyright (c) 2014, McAfee, Inc.
-
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without modification,
- are permitted provided that the following conditions are met:
-
- Redistributions of source code must retain the above copyright notice, this list
- of conditions and the following disclaimer.
-
- Redistributions in binary form must reproduce the above copyright notice, this
- list of conditions and the following disclaimer in the documentation and/or other
- materials provided with the distribution.
-
- Neither the name of McAfee, Inc. nor the names of its contributors may be used
- to endorse or promote products derived from this software without specific prior
- written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
- INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
- OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
- OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-/**
- * \file IpcServer.c
- * \brief Ipc Server Source File
- *
- * This file implements the IPC Server API functions used by Security framework.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdbool.h>
-#include <string.h>
-#include <unistd.h>
-#include <pthread.h>
-#include <signal.h>
-
-#include "Debug.h"
-#include "IpcMacros.h"
-#include "IpcServerError.h"
-#include "IpcServerHdr.h"
-#include "TSCErrorCodes.h"
-
-
-#ifdef DEBUG
-#define DBUS_D_LOG(_dbusErr_, _fmt_, _param_...) \
- { \
- DDBG("%s:%s; " _fmt_, _dbusErr_.name, _dbusErr_.message, _param_); \
- }
-#else
-#define DBUS_D_LOG(_dbusErr_, _fmt_, _param_...)
-#endif
-
-static void IterateList(IpcMethodHandle* pHandle)
-{
- IpcMethodHandle *ph;
- int count = 0;
- for(ph = pHandle; ph != NULL; ph = ph->pNext)
- {
- count++;
- }
- DDBG(".....total count: %d\n", count);
-}
-
-inline DBusHandlerResult _IpcSendMessageAndUnref(DBusConnection *pConn, DBusMessage *pMsg)
-{
- if (pMsg) {
- dbus_connection_send(pConn, pMsg, NULL);
- dbus_message_unref(pMsg);
- }
- return DBUS_HANDLER_RESULT_HANDLED;
-}
-
-void _FreeHandleMethods(IpcServerInfo *pInfo)
-{
- if (!pInfo)
- return;
-
- // Free MethodList
- IpcServerMethodList *pCurr = pInfo->pMethodList;
- IpcServerMethodList *pPrev = NULL;
-
- pthread_mutex_lock(&(pInfo->Lock));
- while (pCurr)
- {
- pPrev = pCurr;
- pCurr = pCurr->pNext;
-
- if (pPrev->pMethod)
- {
- /* TODO: Explain why its not leak for non-cancel methods. */
- //if (pPrev->pMethod->method == (METHODFUNC)IpcCancelMethod || pPrev->pMethod->method == (METHODFUNC)IpcGetProgressMethod)
- free(pPrev->pMethod);
-
- pPrev->pMethod = NULL;
- }
- free(pPrev);
- }
- pInfo->pMethodList = NULL;
- pInfo->pRunningMethods = NULL;
- pthread_mutex_unlock(&(pInfo->Lock));
-
-}
-
-void _FreeHandlePool(IpcServerInfo *pInfo)
-{
- if (!pInfo)
- return;
-
- while(IpcThrPoolIdleCount(pInfo->pHandlePool) != TSC_THREAD_POOL_NUMBERS && IpcThrPoolIdleCount(pInfo->pHandlePool) != -1) //wait till no detachable thread is running
- {
- // TODO: Use condition instead of infinite loop
- sleep(1);
- }
- pthread_mutex_lock(&(pInfo->Lock));
-
- if (pInfo->pHandlePool)
- {
- IpcThrPoolFree(&pInfo->pHandlePool);
- }
-
- pthread_mutex_unlock(&(pInfo->Lock));
-}
-
-void _FreeHandleTable(IpcServerInfo *pInfo)
-{
- if (!pInfo)
- return;
-
- pthread_mutex_lock(&(pInfo->Lock));
- if (pInfo->pTable)
- {
- free(pInfo->pTable);
- pInfo->pTable = NULL;
- }
- pthread_mutex_unlock(&(pInfo->Lock));
-}
-
-void _FreeHandleConn(IpcServerInfo *pInfo)
-{
- if (!pInfo)
- return;
-
- pthread_mutex_lock(&(pInfo->Lock));
- if (pInfo->pConn)
- {
- dbus_connection_remove_filter(pInfo->pConn, _IpcServerMsgFilter, pInfo);
- pInfo->pConn = NULL;
- }
- pthread_mutex_unlock(&(pInfo->Lock));
-
-}
-
-void _WaitForListenThreadClose(IpcServerInfo *pInfo)
-{
- if (pInfo && pInfo->lDbus_listen_thread)
- {
- pthread_mutex_lock(&(pInfo->Lock));
- pInfo->start_server_flag = false;
- pthread_mutex_unlock(&(pInfo->Lock));
-
- if (pInfo->lDbus_listen_thread)
- pthread_join(pInfo->lDbus_listen_thread, NULL);
- }
-}
-
-int IpcServerAddMethod(TSC_SERVER_HANDLE hServer, IpcServerMethod *pMethod)
-{
- IpcServerInfo *pInfo = NULL;
- IpcServerMethodList *pList = NULL;
- int r = TSC_ERROR_ADD_METHOD_FAILED;
-
- if (INVALID_TSC_SERVER_HANDLE == hServer)
- return r;
-
- pList = calloc(1, sizeof(IpcServerMethodList));
- if (!pList)
- return r;
-
- IpcServerMethod* tpMethod = calloc(1, sizeof(IpcServerMethod));
- if (tpMethod == NULL)
- {
- free(pList);
- pList = NULL;
- return r;
- }
- // Copy method
-
- tpMethod->method = pMethod->method;
- strncpy(tpMethod->szMethod, pMethod->szMethod, TSC_METHOD_NAME_LEN-1);
- tpMethod->pData = pMethod->pData;
-
- pInfo = (IpcServerInfo *) hServer;
-
- pthread_mutex_lock(&(pInfo->Lock));
- pList->pNext = pInfo->pMethodList;
-
- //pList->pMethod = pMethod;
- pList->pMethod = tpMethod;
-
- pInfo->pMethodList = pList;
- pthread_mutex_unlock(&(pInfo->Lock));
-
- r = 0;
- return r;
-}
-
-int IpcServerRemoveMethod(TSC_SERVER_HANDLE hServer, METHODFUNC method)
-{
- IpcServerInfo *pInfo = NULL;
- IpcServerMethodList **pPrev = NULL;
- IpcServerMethodList *pCurr = NULL;
- int r = TSC_ERROR_REMOVE_METHOD_NOT_FOUND;
-
- DDBG("%s\n", "IpcServerRemoveMethod");
- if (INVALID_TSC_SERVER_HANDLE == hServer)
- return r;
-
- pInfo = (IpcServerInfo *) hServer;
-
- // Change the head to next node, if deleted.
- pthread_mutex_lock(&(pInfo->Lock));
- for (pPrev = &pInfo->pMethodList; *pPrev; pPrev = &(*pPrev)->pNext)
- {
- DDBG("REMOVE method list name :%s\n", (*pPrev)->pMethod->szMethod);
- if ((*pPrev)->pMethod->method == method)
- {
- DDBG("==== FIND REVMOE MOETHOD %s\n", " ");
- pCurr = *pPrev;
- *pPrev = (*pPrev)->pNext;
- r = 0;
- break;
- }
- }
- pthread_mutex_unlock(&(pInfo->Lock));
-
- // Release the found method now.
- if (r == 0 && pCurr->pMethod)
- {
- free(pCurr->pMethod);
- pCurr->pMethod = NULL;
- }
- free(pCurr);
-
- return r;
-}
-
-TSC_SERVER_HANDLE IpcServerOpen(char *service_name)
-{
- DDBG("IpcServerOpen: %s\n", service_name);
- DBusError dberr;
-
- if (!dbus_threads_init_default())
- {
- DDBG("failed dbus_threads_init_default %s\n", "");
- goto err_ret;
- }
-
- dbus_error_init(&dberr);
-
- if (!dbus_validate_bus_name(service_name, &dberr) && dbus_error_is_set(&dberr))
- {
- DDBG("it is invalid request name %s\n", "");
- goto err;
- }
-
- IpcServerInfo *pInfo;
- if ((pInfo = (IpcServerInfo *) calloc(1, sizeof(IpcServerInfo))) == NULL)
- goto err;
-
- pInfo->pMethodList = NULL;
- pInfo->count = 0;
- if ((pInfo->pTable = (DBusObjectPathVTable *) calloc(1, sizeof(DBusObjectPathVTable))) == NULL)
- goto free_info;
-
- pInfo->lDbus_listen_thread = 0;
- strncpy(pInfo->name, service_name, TSC_SERVER_NAME_LEN - 1);
-
- if (_IpcServerInit(pInfo, service_name))
- {
- DDBG("IpcServerInit failed: %s\n", service_name);
- goto free_table;
- }
-
- //DDBG("IpcServerOpen success conn:%s\n", pInfo->name);
- dbus_error_free(&dberr);
- return (TSC_SERVER_HANDLE) pInfo;
-
-free_table:
- SAFE_FREE(pInfo->pTable);
-
-free_info:
- DDBG("IpcServerOpen free_info, conn:%s\n", pInfo->name);
- FREE(pInfo);
-
-err:
- dbus_error_free(&dberr);
-
-err_ret:
- return INVALID_TSC_SERVER_HANDLE;
-}
-
-int IpcServerMainLoop(TSC_SERVER_HANDLE hServer)
-{
- IpcServerInfo *pInfo = (IpcServerInfo*) hServer;
- if (pInfo)
- {
- if (pInfo->lDbus_listen_thread)
- {
- pthread_join(pInfo->lDbus_listen_thread, NULL);
- DDBG("finsihed main loop:%s\n", "==========");
- }
-
- }
- return 0;
-}
-void IpcServerClose(TSC_SERVER_HANDLE *hServer)
-{
- IpcServerInfo *pInfo = (IpcServerInfo *) *hServer;
- if (pInfo != (IpcServerInfo*)INVALID_TSC_SERVER_HANDLE)
- {
- DDBG("IpcServerClose:%s\n", pInfo->name);
- _WaitForListenThreadClose(pInfo);
-
- // Wait till no detachable thread is running
- while (IpcThrPoolIdleCount(pInfo->pHandlePool) != TSC_THREAD_POOL_NUMBERS && IpcThrPoolIdleCount(pInfo->pHandlePool) != -1)
- {
- // TODO: Use conditional mutex.
- sleep(1);
- }
-
- _FreeHandleTable(pInfo);
- _FreeHandleMethods(pInfo);
- _FreeHandlePool(pInfo);
- _FreeHandleConn(pInfo);
- pthread_mutex_destroy(&(pInfo->Lock));
-
- free(pInfo);
- *hServer = INVALID_TSC_SERVER_HANDLE;
- }
-}
-
-
-int _IpcServerInit(IpcServerInfo *pInfo, char *szServiceName)
-{
- IpcServerMethod *pMethodCancel = NULL;
- DBusError dberr;
- int ret;
-
- if (!pInfo)
- goto err;
-
- pInfo->pMethodList = NULL;
- pInfo->pRunningMethods = NULL;
- pInfo->start_server_flag = false;
-
- dbus_error_init(&dberr);
-
- pInfo->pConn = dbus_bus_get(DBUS_BUS_SYSTEM, &dberr);
- if (pInfo->pConn == NULL && dbus_error_is_set(&dberr))
- {
- DBUS_D_LOG(dberr, "%s\n", "Server failed: connection NULL.");
- goto free_err;
- }
-
- ret = dbus_bus_request_name(pInfo->pConn, szServiceName, DBUS_NAME_FLAG_REPLACE_EXISTING, &dberr);
- if (ret == -1 && dbus_error_is_set(&dberr))
- {
- DBUS_D_LOG(dberr, "%s\n", "server failed: request name.");
- goto free_conn;
- }
-
- // TODO: Why not allow DBUS_REQUEST_NAME_REPLY_ALREADY_OWNER also?
- if (ret != DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER)
- {
- DDBG("server failed: Not primary owner :%d\n", ret);
- goto free_conn;
- }
-
- if (0 > snprintf(pInfo->rule, sizeof(pInfo->rule), "type='method_call', interface='%s'",
- TSC_DBUS_INTERFACE))
- {
- DDBG("%s\n", "server failed: Unable to write rule");
- goto free_conn;
- }
-
- dbus_bus_add_match(pInfo->pConn, pInfo->rule, &dberr);
- if (dbus_error_is_set(&dberr))
- {
- DBUS_D_LOG(dberr, "%s\n", "Match add failed.");
- goto free_conn;
- }
-
- if (!dbus_connection_try_register_object_path(pInfo->pConn, TSC_DBUS_PATH, pInfo->pTable,
- pInfo, &dberr)
- && dbus_error_is_set(&dberr))
- {
- DBUS_D_LOG(dberr, "%s\n", "server failed: register object path");
- goto free_match;
- }
-
- dbus_connection_set_exit_on_disconnect(pInfo->pConn, false);
-
- if (!dbus_connection_add_filter(pInfo->pConn, _IpcServerMsgFilter, pInfo, NULL))
- {
- DDBG("%s\n", "server failed: add filter.");
- goto free_register;
- }
-
- if (!dbus_connection_get_unix_fd(pInfo->pConn, &pInfo->fd) || pInfo->fd < 0)
- {
- DDBG("%s\n", "server failed: get fd.");
- goto free_filter;
- }
-
- pInfo->pHandlePool = calloc(1, sizeof(IpcHandlePool));
- if (pInfo->pHandlePool == NULL)
- {
- DDBG("%s\n", "Thread pool alloc failed.");
- goto free_filter;
- }
-
- ret = IpcThrPoolInit(pInfo->pHandlePool, TSC_THREAD_POOL_NUMBERS);
- if (ret)
- {
- DDBG("%s\n", "*****Failed in IpcThrPoolInit");
- goto free_handle;
- }
-
- ret = pthread_mutex_init(&(pInfo->Lock), NULL);
- if (ret)
- {
- DDBG("Failed to init IpcServerInfo lock %d\n", ret);
- goto free_pool;
- }
-
- // Add default two methods: Cancel and GetStatus
- pMethodCancel = calloc(1, sizeof(IpcServerMethod));
- if (pMethodCancel == NULL)
- {
- DDBG("%s\n", "Cancel alloc failed.");
- goto free_mutex;
- }
-
- ret = snprintf(pMethodCancel->szMethod, sizeof(pMethodCancel->szMethod), "%s", TSC_FN_CANCELMETHOD);
- if (ret < 0)
- {
- DDBG("%s\n", "Cancel create failed.");
- goto free_method_cancel;
- }
-
- pMethodCancel->method = (METHODFUNC) IpcCancelMethod;
- pMethodCancel->pData = NULL;
- ret = IpcServerAddMethod((TSC_SERVER_HANDLE) pInfo, pMethodCancel);
- if (ret)
- {
- DDBG("%s\n", "Cancel add failed.");
- goto free_method_cancel;
- }
-
- IpcServerMethod *pMethodProgress = calloc(1, sizeof(IpcServerMethod));
- if (pMethodProgress == NULL)
- {
- DDBG("%s\n", "Progress alloc failed.");
- goto free_method_cancel;
- }
-
- ret = snprintf(pMethodProgress->szMethod, sizeof(pMethodProgress->szMethod), "%s", TSC_FN_PROGRESSMETHOD);
- if (ret < 0)
- {
- DDBG("%s\n", "Progress create failed.");
- goto free_method_progress;
- }
-
- pMethodProgress->method = (METHODFUNC) IpcGetProgressMethod;
- pMethodProgress->pData = NULL;
-
- ret = IpcServerAddMethod((TSC_SERVER_HANDLE) pInfo, pMethodProgress);
- if (ret)
- {
- DDBG("%s\n", "Progress add failed.");
- goto free_method_progress;
- }
-
- IpcServerMethod *pMethodShutdown = calloc(1, sizeof(IpcServerMethod));
- if (pMethodShutdown == NULL)
- {
- DDBG("%s\n", "shutdown alloc failed.");
- goto free_method_progress;
- }
-
- ret = snprintf(pMethodShutdown->szMethod, sizeof(pMethodShutdown->szMethod), "%s", TSC_FN_SHUTDOWN);
- if (ret < 0)
- {
- DDBG("%s\n", "Shutdown create failed.");
- goto free_method_shutdown;
- }
-
- pMethodShutdown->method = (METHODFUNC) IpcShutdown;
- pMethodShutdown->pData = NULL;
-
- ret = IpcServerAddMethod((TSC_SERVER_HANDLE) pInfo, pMethodShutdown);
- if (ret)
- {
- DDBG("%s\n", "Shutdown add failed.");
- goto free_method_shutdown;
- }
- SAFE_FREE(pMethodShutdown);
- SAFE_FREE(pMethodProgress);
- SAFE_FREE(pMethodCancel);
-
- pthread_mutex_lock(&(pInfo->Lock));
-
- ret = pthread_create(&(pInfo->lDbus_listen_thread), NULL, _IpcPopMessage, (void *)pInfo);
- DDBG("Creating thrd for Server: %s\n", pInfo->name);
-
- if (ret)
- {
- DDBG("%s(%d)\n", "** FAILED to launch thread", ret);
- pInfo->start_server_flag = false;
- pthread_mutex_unlock(&(pInfo->Lock));
- goto free_mutex;
- }
- pInfo->start_server_flag = true;
-
- pthread_mutex_unlock(&(pInfo->Lock));
-
- return 0;
-free_method_shutdown:
- SAFE_FREE(pMethodShutdown);
-free_method_progress:
- SAFE_FREE(pMethodProgress);
-free_method_cancel:
- SAFE_FREE(pMethodCancel);
-free_mutex:
- pthread_mutex_destroy(&(pInfo->Lock));
-free_pool:
-free_handle:
- if (pInfo->pHandlePool)
- IpcThrPoolFree(&pInfo->pHandlePool);
-free_filter:
- //dbus_connection_remove_filter(pInfo->pConn, _IpcServerMsgFilter, pInfo);
-free_register:
- //dbus_connection_unregister_object_path(pInfo->pConn, TSC_DBUS_PATH);
-free_match:
- //dbus_bus_remove_match(pInfo->pConn, pInfo->rule, &dberr);
-free_conn:
- //dbus_connection_close(pInfo->pConn); TODO: Why not????
-free_err:
- dbus_error_free(&dberr);
- DDBG("%s", "_IpcServerInit free_err before return -1\n");
-err:
- return -1;
-}
-
-void _IpcServerDeInit(TSC_SERVER_HANDLE hServer)
-{
- DDBG("%s\n", "IpcServerDeInit========");
- IpcServerInfo *pInfo = (IpcServerInfo *) hServer;
- if (pInfo)
- {
- if (pInfo->lDbus_listen_thread)
- {
- pthread_join(pInfo->lDbus_listen_thread, NULL);
- }
- FreeIpcServerHandle((TSC_SERVER_HANDLE) pInfo);
- }
- //dbus_shutdown(); // for valgrind only
- DDBG("%s\n", "*_*_*_*_*_*_* Server is disconnected *_*_*_*_*_*_*_*_*");
-}
-
-
-DBusHandlerResult _IpcServerReplyMessage(DBusConnection *pConn, DBusMessage *pMsg,
- char **pReply, int size)
-{
- DDBG("%s %d\n", "ReplyMessage size: ", size);
- DBusMessage *pReplyMsg = NULL;
- DBusMessageIter iter;
- int i;
-
- if (pConn == NULL)
- return DBUS_HANDLER_RESULT_HANDLED;
-
- pReplyMsg = dbus_message_new_method_return(pMsg);
-
- if (pReplyMsg == NULL)
- return DBUS_HANDLER_RESULT_NEED_MEMORY;
-
- dbus_message_iter_init_append(pReplyMsg, &iter);
-
- for (i = 0; i < size; i++)
- {
- if (!dbus_message_iter_append_basic(&iter, DBUS_TYPE_STRING, &(pReply[i])))
- {
- DDBG("----- Replied string :%s\n", pReply[i]);
- dbus_message_unref(pReplyMsg);
- return DBUS_HANDLER_RESULT_NEED_MEMORY;
- }
- }
-
- return _IpcSendMessageAndUnref(pConn, pReplyMsg);
-}
-
-DBusHandlerResult _IpcServerReplyError(DBusConnection *pConn, DBusMessage *pMsg,
- int iErrCode)
-{
- DDBG("%s\n", "IpcServerReplyError");
- DBusMessage *pErrMsg = NULL;
-
- if (!pConn || !pMsg)
- return DBUS_HANDLER_RESULT_HANDLED;
-
- pErrMsg = dbus_message_new_error(pMsg, GetErrorName(iErrCode), GetErrorDescription(iErrCode));
- if (!pErrMsg)
- return DBUS_HANDLER_RESULT_NEED_MEMORY;
-
- return _IpcSendMessageAndUnref(pConn, pErrMsg);
-}
-
-
-DBusHandlerResult _IpcServerMsgFilter(DBusConnection *pConn, DBusMessage *pMsg, void *pData)
-{
- DDBG("%s\n", "IpcServerMsgFilter");
- IpcServerInfo *pInfo = (IpcServerInfo*) pData;
- if (!pInfo)
- {
- DDBG("%s\n", "not handled the server info");
- return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
- }
- else if (dbus_message_is_signal(pMsg, DBUS_INTERFACE_LOCAL, "Disconnected"))
- {
- DDBG("%s\n", "server is disconnected by signal");
- IpcServerClose((TSC_SERVER_HANDLE*) pInfo);
- //return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
- return DBUS_HANDLER_RESULT_HANDLED;
- }
-
- return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
-}
-
-
-DBusHandlerResult _IpcServerMsgHandler(void *user_data)
-{
- DBusHandlerResult ret = DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
- IpcAsyncInfo *pAsync = user_data;
-
- if (pAsync)
- {
- DBusMessage *pMsg = pAsync->pMsg;
- IpcServerInfo *pInfo = pAsync->pInfo;
-
- bool handle_flag = false;
- if (pInfo)
- {
- DDBG("==IpcServerMsgHandler:%s\n", pInfo->name);
- IpcServerMethodList **pPrev;
- pthread_mutex_lock(&(pInfo->Lock));
- for (pPrev = &pInfo->pMethodList; *pPrev; pPrev = &(*pPrev)->pNext)
- {
- if ((*pPrev) && (*pPrev)->pMethod)
- {
- if (dbus_message_is_method_call(pMsg, TSC_DBUS_INTERFACE, (*pPrev)->pMethod->szMethod)){
- DDBG("FOUND method: %s\n", (*pPrev)->pMethod->szMethod);
- handle_flag = true;
- pAsync->pMethod = (*pPrev)->pMethod;
- break;
- }
- }
- }
- pthread_mutex_unlock(&(pInfo->Lock));
- if (handle_flag)
- {
- return _IpcServerProcessMessage(pAsync);
- }
- }
- if (ret == DBUS_HANDLER_RESULT_NOT_YET_HANDLED)
- {
- if (pAsync->pInfo->pHandlePool)
- {
- IpcThrPoolPut(pAsync->pInfo->pHandlePool, pAsync->pHandle);
- }
- CleanupAsync(pAsync);
- }
-
- }
-
- return ret;
-}
-
-int _ParseDBusMessage(DBusMessage *pMsg, int *pargc, char ***argv)
-{
- DBusBasicValue temp = {{0}};
- int argc = 0;
- int iSize = TSC_REPLY_MSG_COUNT_AVERAGE;
- DBusMessageIter iter;
- int iRet = TSC_ERROR_NOT_IMPLEMENTED; // Return as result of method requested by client.
-
- if (dbus_message_iter_init(pMsg, &iter))
- {
- do
- {
- if (dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_STRING)
- {
- DDBG("%s\n", "wrong type");
- if (argc == 0)
- iSize = 0;
- iRet = TSC_ERROR_NOT_IMPLEMENTED;
- goto clean_up;
- }
- dbus_message_iter_get_basic(&iter, &temp);
- if (!temp.str)
- {
- DDBG("%s\n", "no string");
- iRet = TSC_ERROR_INTERNAL;
- goto clean_up;
- }
-
- if (argc >= iSize)
- {
- iSize += TSC_REPLY_MSG_COUNT_AVERAGE;
- (*argv) = realloc((*argv), sizeof(char*) * iSize);
-
- if (!(*argv))
- {
- DDBG("PARSE message, insufficient: 7-1, argc:%d iSize:%d\n", argc, iSize);
- iRet = TSC_ERROR_INSUFFICIENT_RES;
- iSize = iSize - TSC_REPLY_MSG_COUNT_AVERAGE;
- goto clean_up;
- }
- }
- else if (argc == 0)
- {
- (*argv) = calloc(1, iSize * sizeof(char *));
- if (!(*argv))
- {
- iRet = TSC_ERROR_INSUFFICIENT_RES;
- iSize = 0; //reset iSize, used to free the memory
- goto clean_up;
- }
- }
-
- (*argv)[argc] = strdup((const char*)temp.str);
-
- if (!(*argv)[argc])
- {
- DDBG("not engough memory: %s\n", "4");
- iRet = TSC_ERROR_INSUFFICIENT_RES;
- goto clean_up;
- }
- argc++;
- } while (dbus_message_iter_next(&iter));
-
- iRet = 0; // TODO: Is this the right place & code?
- }
- else
- {
- DDBG("%s\n", "Request message has no arguments");
- *pargc = argc;
- return iRet;
- }
-
-clean_up:
-
- if (iRet)
- {
- //Error code here
- int i = 0;
- if (*argv)
- {
- for (i = 0; i < iSize; i++)
- {
- if ((*argv)[i])
- free((*argv)[i]);
- (*argv)[i] = NULL;
- }
- free(*argv);
- *argv = NULL;
- }
- }
- else
- {
- // Everything went well till now...
- *pargc = argc;
- }
-
- return iRet;
-}
-
-
-DBusHandlerResult _IpcServerProcessMessage(void *user_data)
-{
- DDBG("%s\n", "IpcServerProcessMessage");
- IpcAsyncInfo *pAsync = user_data;
- DBusError dberr;
- char **reply = NULL;
- int iFreeMtdHandle = 0;
- int len = 0;
-// int iErr = DBUS_HANDLER_RESULT_HANDLED; // Return the result to caller of this function.
- int iRet = TSC_ERROR_MODULE_GENERIC; // Return as result of method requested by client.
- IpcMethodHandle *pMtdHandle = NULL;
-
- dbus_error_init(&dberr);
- if (pAsync->pConn == NULL)
- {
- goto clean_up;
- }
- // Here when calling method, pass the callback function
- pMtdHandle = calloc(1, sizeof(IpcMethodHandle));
-
- if (pMtdHandle == NULL)
- {
- goto clean_up;
- }
-
- pMtdHandle->pMethod = pAsync->pMethod;
- iRet = pthread_mutex_init(&(pMtdHandle->Lock), NULL);
- if (iRet)
- {
- if (pMtdHandle)
- free(pMtdHandle);
- pMtdHandle = NULL;
- goto clean_up;
- }
-
- if ((pAsync->pMethod)->method)
- {
- // insert to RunningMethods
- if (pAsync->argv[0] == NULL)
- {
- goto clean_up;
- }
-
- strncpy(pMtdHandle->unique_id, pAsync->async_unique_id, MSGHANDLE_LEN);
- (pMtdHandle->unique_id)[MSGHANDLE_LEN] = '\0';
-
- pthread_mutex_lock(&pAsync->pInfo->Lock);
- (pAsync->pInfo->count)++;
- pMtdHandle->pNext = pAsync->pInfo->pRunningMethods;
- pAsync->pInfo->pRunningMethods = pMtdHandle;
-/*
- DDBG("============== after adding running method:%s\n", "------");
- IterateList(pMtdHandle);
-*/
- pthread_mutex_unlock(&pAsync->pInfo->Lock);
-
- pMtdHandle->pInfo = pAsync->pInfo;
- pMtdHandle->cStatus = "1";
- pMtdHandle->iCancel = TSC_NON_CANCEL;
-
- // Skip the first params which is for unique_id
- DDBG("method to run:%s, argv[0]:%s\n", pAsync->pMethod->szMethod, pAsync->argv[0]);
-
- iRet = (pAsync->pMethod)->method((pAsync->pMethod)->pData, pAsync->argc - 1,
- &(pAsync->argv[1]), &reply, &len,
- (CALLBACKFUNC) IpcServerCallbackMethod, pMtdHandle);
- iRet = 0; //till here, able to run the method, it is success
- }
-
-clean_up:
-
- if (iRet)
- _IpcServerReplyError(pAsync->pConn, pAsync->pMsg, TSC_ERROR_INTERNAL);
- else
- {
- // Everything went well till now...
- _IpcServerReplyMessage(pAsync->pConn, pAsync->pMsg, reply, len);
- }
-
- dbus_connection_flush(pAsync->pConn);
- CleanupArray(&reply, len);
-
- // Method finished, remove it from pInfo, running methods list
- IpcMethodHandle **pmpPrev;
- pthread_mutex_lock(&(pAsync->pInfo->Lock));
- for (pmpPrev = &(pAsync->pInfo->pRunningMethods); *pmpPrev; pmpPrev = &((*pmpPrev)->pNext))
- {
- if (strncmp((*pmpPrev)->unique_id, pAsync->async_unique_id, MSGHANDLE_LEN) == 0)
- {
- *pmpPrev = (*pmpPrev)->pNext;
- iFreeMtdHandle = 1;
- DDBG("FOUND method, and remove from running one, method:%s, uniquid:%s\n",
- pAsync->pMethod->szMethod, pAsync->async_unique_id);
- IterateList(pAsync->pInfo->pRunningMethods);
- break;
- }
- }
- pthread_mutex_unlock(&(pAsync->pInfo->Lock));
-
- IpcThrPoolPut(pAsync->pInfo->pHandlePool, pAsync->pHandle);
- CleanupAsync(pAsync);
- dbus_error_free(&dberr);
-
- if (pMtdHandle && iFreeMtdHandle)
- {
- free(pMtdHandle);
- pMtdHandle = NULL;
- }
-
- return iRet;
-}
-
-void *_IpcPopMessage(void *hServer)
-{
- IpcServerInfo *pInfo = (IpcServerInfo *) hServer;
- DDBG("=IpcPopMessage:%s\n", pInfo->name);
- int iRet = 0;
-
- while (pInfo != NULL && pInfo->pConn != NULL && pInfo->start_server_flag) {
-
- // non blocking read of the next available message
- dbus_connection_read_write(pInfo->pConn, 0);
- DBusMessage *pMsg = dbus_connection_pop_message(pInfo->pConn);
-
- if (NULL == pMsg) {
- sleep(TSC_READ_WRITE_DISPATCH_SLEEP_SECONDS);
- continue;
- }
- else
- {
- // TODO: Strangely, first message needs to be processed, for the next N pending msgs
- // to be picked up for asynchronous processing.
- IpcHandles *pIpcHandle = IpcThrPoolGet(pInfo->pHandlePool);
- IpcAsyncInfo *pAsync = calloc(1, sizeof(IpcAsyncInfo));
- if (pAsync != NULL)
- {
- pAsync->pConn = pInfo->pConn;
- pAsync->pInfo = pInfo;
- pAsync->pMsg = pMsg;
- pAsync->argc = 0;
- pAsync->argv = NULL;
- pAsync->pHandle = pIpcHandle;
-
- iRet = _ParseDBusMessage(pMsg, &(pAsync->argc), &(pAsync->argv));
-
- if (iRet == 0)
- {
- iRet = snprintf(pAsync->async_unique_id, MSGHANDLE_LEN, TSC_MID_SVR_FORMAT, pAsync->argv[0],
- dbus_message_get_serial(pAsync->pMsg));
- //DDBG("ASYNC_UNQIEU-DI: %s\n", pAsync->async_unique_id);
- if (iRet < 0)
- break;
-
- iRet = _RunDetachedThread(_IpcServerMsgHandler, pAsync);
- DDBG("====RunDetachedThread ret:%d\n", iRet);
- }
-
- if (iRet)
- {
- IpcThrPoolPut(pInfo->pHandlePool, pIpcHandle);
- CleanupAsync(pAsync);
- }
-
- }
- }
- }
- DDBG("popmessage ended :%s\n", "============");
-
- return NULL;
-}
-
-
-void CleanupArray(char*** pArr, int len)
-{
- if (pArr) {
- while (len > 0)
- {
- len--;
- free ((*pArr)[len]);
- (*pArr)[len] = NULL;
- }
- free(*pArr);
- *pArr = NULL;
- }
-}
-
-void CleanupAsync(IpcAsyncInfo *pAsync)
-{
- if (pAsync)
- {
- CleanupArray(&(pAsync->argv), pAsync->argc);
- if (pAsync->pMsg)
- dbus_message_unref(pAsync->pMsg);
-
- if (pAsync)
- free(pAsync);
- pAsync = NULL;
-
- }
-}
-
-/***
- * reason_params is cleaned up within this method
- */
-int IpcServerCallbackMethod(TSC_METHOD_HANDLE *pMHandle, TSC_METHOD_REASON_CODE iReason, void *reason_params)
-{
- IpcMethodHandle *p_MHandle = (IpcMethodHandle *) pMHandle;
- char *data = reason_params;
- int iRet = -1;
-
- if (iReason == TSC_CANCEL)
- {
- pthread_mutex_lock(&(p_MHandle->Lock));
- if (p_MHandle->iCancel == TSC_IS_CANCEL)
- {
- iRet = 0;
- DDBG("%s", "callback check, it is cancel true\n");
- }
- pthread_mutex_unlock(&(p_MHandle->Lock));
- }
- else if (iReason == TSC_PROGRESS)
- {
- pthread_mutex_lock(&(p_MHandle->Lock));
- p_MHandle->cStatus = strdup(data); // TODO: any better way to update data?
- iRet = 0;
- pthread_mutex_unlock(&(p_MHandle->Lock));
-
- if (data)
- free(data);
- data = NULL;
- }
- return iRet;
-}
-
-/*void IpcCancelMethod(TSC_SERVER_HANDLE hServer, char *method_unique_id)*/
-int IpcCancelMethod(void *pData, int argc, char **argv, char ***szReply, int *len, CALLBACKFUNC callback, TSC_METHOD_HANDLE *handle)
-{
-
- int ret = 0;
- if (argc > 0)
- {
- DDBG("IpcCancelMethod unique_id %s\n", argv[0]);
- }
- else
- {
- DDBG("%s\n", "Error params in cancel method");
- }
-
- //TODO :error checking
- IpcMethodHandle *pMHandle = (IpcMethodHandle*) handle;
- IpcServerInfo *pInfo = (IpcServerInfo*) pMHandle->pInfo;
- // Get the running method by the method_unique_id, then set its cancel flag
- IpcMethodHandle **pmpPrev;
-
- if (argc != 1)
- {
- //the argc should be 2, the second param is unique id of to cancel method
- ret = -1;
- }
- pthread_mutex_lock(&(pInfo->Lock));
-
- for (pmpPrev = &(pInfo->pRunningMethods); *pmpPrev; pmpPrev = &((*pmpPrev)->pNext))
- {
- DDBG("Method to cancel: %s, list method:%s\n", argv[0], (*pmpPrev)->unique_id);
- if (strcmp((*pmpPrev)->unique_id, argv[0]) == 0)
- {
- DDBG("%s\n", "found the running method to cancel");
- pthread_mutex_lock(&(pMHandle->Lock));
- (*pmpPrev)->iCancel = TSC_IS_CANCEL;
- DDBG("%s %s\n", "set is cancel to true for this method: ", (*pmpPrev)->unique_id);
- //TODO: should we return something?
- *len = 1;
- *szReply = calloc(1, sizeof(char*) *(*len));
- (*szReply)[0] = strdup("0");
- pthread_mutex_unlock(&(pMHandle->Lock));
- break;
- }
- }
- pthread_mutex_unlock(&(pInfo->Lock));
-
- DDBG("%s\n", "END OF cancel method");
- return ret;
-}
-
-
-
-int
-IpcGetProgressMethod(void *pData, int argc, char **argv, char ***szReply, int *len, CALLBACKFUNC callback, TSC_METHOD_HANDLE *handle)
-{
- DDBG("%s\n", "IpcGetProgressMethod");
- IpcMethodHandle *pMHandle = (IpcMethodHandle*) handle;
- IpcServerInfo *pInfo = (IpcServerInfo*) pMHandle->pInfo;
-
- //TODO: Error handling, check argv argc
- //Here the running method finished, either end or cancelled.
- IpcMethodHandle **pmpPrev;
- for (pmpPrev = &(pInfo->pRunningMethods); *pmpPrev; pmpPrev = &((*pmpPrev)->pNext))
- {
- DDBG("running methods unique id :%s, passing id :%s \n", (*pmpPrev)->unique_id, argv[0]);
-
- if (!strcmp((*pmpPrev)->unique_id, argv[0]))
- {
- DDBG("=== found running method to get progress %s\n", argv[0]);
- // get the running method, update its status
- *len = 1;
- *szReply = calloc(1, sizeof(char*) * 10);
- DDBG("-- status to reply :%s\n",(*pmpPrev)->cStatus);
- (*szReply)[0] = strdup((*pmpPrev)->cStatus);
- break;
- }
- }
- return 0;
-}
-
-int
-IpcShutdown(void *pData, int argc, char **argv, char ***szReply, int *len, CALLBACKFUNC callback, TSC_METHOD_HANDLE *handle)
-{
- DDBG("==============%s\n", "IpcShutdownMethod");
- IpcMethodHandle *pMHandle = (IpcMethodHandle*) handle;
- IpcServerInfo *pInfo = (IpcServerInfo*) pMHandle->pInfo;
-
- pthread_mutex_lock(&(pInfo->Lock));
- pInfo->start_server_flag = false;
- pthread_mutex_unlock(&(pInfo->Lock));
- DDBG("end of shutdown:%s\n", "===================");
- return 0;
-}
-
-
-void FreeIpcServerHandle(TSC_SERVER_HANDLE hServer)
-{
- DDBG("%s\n", "FreeIpcServerHandle");
- IpcServerInfo *pInfo = (IpcServerInfo*) hServer;
-
- if (pInfo)
- {
- pthread_mutex_lock(&(pInfo->Lock));
- // Free MethodList
- IpcServerMethodList *pCurr = pInfo->pMethodList;
- IpcServerMethodList *pPrev;
-
- while (pCurr)
- {
- pPrev = pCurr;
- pCurr = pCurr->pNext;
- DDBG("*****pPrev method is 0 :%s\n", pPrev->pMethod->szMethod);
-
- if (pPrev)
- {
- if (pPrev->pMethod)
- {
- if (pPrev->pMethod->method == (METHODFUNC) IpcCancelMethod
- || pPrev->pMethod->method == (METHODFUNC) IpcGetProgressMethod
- || pPrev->pMethod->method == (METHODFUNC) IpcShutdown)
- {
- free(pPrev->pMethod);
- }
- pPrev->pMethod = NULL;
- }
- if (pPrev->pNext)
- {
- pPrev->pNext = NULL;
- }
-
- free(pPrev);
- pPrev = NULL;
- }
- }
-
- pInfo->pMethodList = NULL;
- pInfo->pRunningMethods = NULL;
-
- if (pInfo->pHandlePool)
- IpcThrPoolFree(&pInfo->pHandlePool);
-
- pthread_mutex_unlock(&(pInfo->Lock));
-
- pthread_mutex_destroy(&(pInfo->Lock));
-
- if (pInfo->pTable)
- free(pInfo->pTable);
- pInfo->pTable = NULL;
-
- if (pInfo->pConn)
- {
- DBusError dberr;
- dbus_error_init(&dberr);
-
- dbus_connection_remove_filter(pInfo->pConn, _IpcServerMsgFilter, pInfo);
- dbus_connection_unregister_object_path(pInfo->pConn, TSC_DBUS_PATH);
- dbus_bus_remove_match(pInfo->pConn, pInfo->rule, &dberr);
-
- dbus_bus_release_name(pInfo->pConn, TSC_DBUS_SERVER, &dberr);
-
- dbus_connection_unref(pInfo->pConn);
- dbus_error_free(&dberr);
- }
- pInfo->pConn = NULL;
-
- free(pInfo);
- pInfo = NULL;
- }
-}
-
-
-
-/**
- * Creates a thread for asynchronous task.
- * TODO: Merge with TCS module.
- */
-int _RunDetachedThread(void *pfWorkerFunc, void *pThreadData)
-{
- pthread_t thread;
- pthread_attr_t attr;
-
- int rc = -1;
- do
- {
- if (pthread_attr_init(&attr) != 0)
- break;
-
- if (pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED) != 0)
- break;
-
-
- if (pthread_create(&thread, &attr, pfWorkerFunc, pThreadData) != 0)
- break;
-
- if (pthread_attr_destroy(&attr) != 0)
- {
- // As the thread is already running, return different error code.
- rc = -2;
- break;
- }
-
- rc = 0;
- }
- while (0);
- return rc;
-}
-
diff --git a/framework/IpcServer.h b/framework/IpcServer.h
deleted file mode 100644
index d187700..0000000
--- a/framework/IpcServer.h
+++ /dev/null
@@ -1,170 +0,0 @@
-/*
- Copyright (c) 2014, McAfee, Inc.
-
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without modification,
- are permitted provided that the following conditions are met:
-
- Redistributions of source code must retain the above copyright notice, this list
- of conditions and the following disclaimer.
-
- Redistributions in binary form must reproduce the above copyright notice, this
- list of conditions and the following disclaimer in the documentation and/or other
- materials provided with the distribution.
-
- Neither the name of McAfee, Inc. nor the names of its contributors may be used
- to endorse or promote products derived from this software without specific prior
- written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
- INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
- OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
- OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#ifndef IPCSERVER_H
-#define IPCSERVER_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * \file IpcServer.h
- * \brief Ipc Server Header File
- *
- * This file provides the IPC Server API functions used by Security framework.
- */
-
-#include <dbus/dbus.h>
-#include <stdbool.h>
-#include "IpcMacros.h"
-
-
-/*==================================================================================================
- STRUCTURES AND OTHER TYPEDEFS
-==================================================================================================*/
-
-/**
- * Pointer to method requested by client module.
- */
-/*typedef int (*CALLBACKFUNC) (void *pHandle, TSC_METHOD_REASON_CODE iReason, void *user_data);*/
-typedef int (*CALLBACKFUNC) (void *pHandle, int iReason, void *reason_params);
-
-typedef int (*METHODFUNC) (void *pData, int argc, char **argv, char ***szReply, int *len, CALLBACKFUNC callback, void *pHandle);
-
-/**
- * Server side method to handle request from client module. All the requests
- * are managed in a list.
- */
-typedef struct _IpcServerMethod
-{
- char szMethod[TSC_METHOD_NAME_LEN];
- METHODFUNC method;
- void *pData; //when execute the method, the pData besides the data passed from client, also has methodHandle for this method
-} IpcServerMethod;
-
-#define TSC_NULL ((void *) 0)
-
-#define TSCSERVERHANDLE(n) struct n##_struct {int iDummy;}; typedef struct n##_struct *n
-TSCSERVERHANDLE(TSC_SERVER_HANDLE);
-
-#define TSCMETHODHANDLE(n) struct n##_struct {int iDummy;}; typedef struct n##_struct *n
-TSCMETHODHANDLE(TSC_METHOD_HANDLE);
-
-#define INVALID_TSC_METHOD_HANDLE ((TSC_METHOD_HANDLE) TSC_NULL)
-
-#define INVALID_TSC_SERVER_HANDLE ((TSC_SERVER_HANDLE) TSC_NULL)
-
-/*==================================================================================================
- FUNCTION PROTOTYPES
-==================================================================================================*/
-
-/**
- * \brief Adds a handler method to the list of methods at server, to process
- * request from the client.
- *
- * During initialisation, the server builds a list of handlers to process
- * request coming from client-side IPC. Later the client side IPC sends request
- * along with the name of the handler to use. The handlers are implemented
- * in the module hosting the server-side IPC.
- *
- * This is a synchronous API.
- *
- * \param[in] pMethod Details of the handler method to be added at server-side.
- *
- * \return Return Type (void) \n
- *
- */
-int IpcServerAddMethod(TSC_SERVER_HANDLE hServer, IpcServerMethod *pMethod);
-
-/**
- * \brief Removes a handler method from the list of methods at server.
- *
- * During initialisation, the server builds a list of handlers to process
- * request coming from client-side IPC. Later the client side IPC sends request
- * along with the name of the handler to use. The handlers are implemented
- * in the module hosting the server-side IPC. As part of un-initialisation
- * the handler should be removed from the list.
- *
- * This is a synchronous API.
- *
- * \param[in] pMethod Pointer to handler method to be removed.
- *
- * \return Return Type (void) \n
- *
- */
-int IpcServerRemoveMethod(TSC_SERVER_HANDLE hServer, METHODFUNC pMethod);
-
-
-/*
-void IpcCancelMethod(TSC_SERVER_HANDLE hServer, char *method_unique_id);
-char *IpcGetProgressMethod(TSC_SERVER_HANDLE hServer, char *method_unique_id);
-*/
-/**
- * \brief Initialises the server-side IPC to make it ready for request from
- * client side IPC.
- *
- * The IPC has two parts - client and server. The server-side IPC processes the
- * request sent from the client-side IPC. The server-side uses handlers provided
- * by the hosting module. When server comes up, the IPC needs to be initialised
- * and be ready for the requests.
- *
- * This is a synchronous API.
- *
- * \return Return Type (int) \n
- * 0 - on send success. \n
- * -1 - on send failure. \n
- */
-TSC_SERVER_HANDLE IpcServerOpen(char *servie_name);
-
-/**
- * \brief Close the server-side IPC and release the resources.
- *
- * This is a synchronous API.
- *
- * \return Return Type (void) \n
- */
-void IpcServerClose(TSC_SERVER_HANDLE*);
-
-int IpcServerMainLoop(TSC_SERVER_HANDLE hServer);
-
-/**
- * Callback function for Server Stub in cancel the method, update method progress
- */
-
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* IPCSERVER_H */
-
diff --git a/framework/IpcServerError.c b/framework/IpcServerError.c
deleted file mode 100644
index cdcb069..0000000
--- a/framework/IpcServerError.c
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- Copyright (c) 2014, McAfee, Inc.
-
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without modification,
- are permitted provided that the following conditions are met:
-
- Redistributions of source code must retain the above copyright notice, this list
- of conditions and the following disclaimer.
-
- Redistributions in binary form must reproduce the above copyright notice, this
- list of conditions and the following disclaimer in the documentation and/or other
- materials provided with the distribution.
-
- Neither the name of McAfee, Inc. nor the names of its contributors may be used
- to endorse or promote products derived from this software without specific prior
- written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
- INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
- OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
- OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-/**
- * \file IpcServerError.c
- * \brief Ipc server-side error handling File
- *
- * This file contains the server-side exception handling, used by Security framework.
- */
-
-#include "IpcMacros.h"
-#include "IpcServerError.h"
-#include "TSCErrorCodes.h"
-
-const char *GetErrorName(const int iErrCode)
-{
- switch (iErrCode)
- {
- case TSC_ERROR_CANCELLED:
- return TSC_DBUS_INTERFACE ERR_NAME_CANCELLED;
- case TSC_ERROR_DATA_ACCESS:
- return TSC_DBUS_INTERFACE ERR_NAME_DATA_ACCESS;
- case TSC_ERROR_INVALID_PARAM:
- return TSC_DBUS_INTERFACE ERR_NAME_INVALID_PARAM;
- case TSC_ERROR_INSUFFICIENT_RES:
- return TSC_DBUS_INTERFACE ERR_NAME_INSUFFICIENT_RES;
- case TSC_ERROR_INTERNAL:
- return TSC_DBUS_INTERFACE ERR_NAME_INTERNAL;
- case TSC_ERROR_INVALID_HANDLE:
- return TSC_DBUS_INTERFACE ERR_NAME_INVALID_HANDLE;
- case TSC_ERROR_NOT_IMPLEMENTED:
- return TSC_DBUS_INTERFACE ERR_NAME_NOT_IMPLEMENTED;
- }
-
- /* default: TSC_ERROR_MODULE_GENERIC */
- return TSC_DBUS_INTERFACE ERR_NAME_MODULE_GENERIC;
-}
-
-const char *GetErrorDescription(const int iErrCode)
-{
- switch (iErrCode)
- {
- case TSC_ERROR_CANCELLED:
- return ERR_DESC_CANCELLED;
- case TSC_ERROR_DATA_ACCESS:
- return ERR_DESC_DATA_ACCESS;
- case TSC_ERROR_INVALID_PARAM:
- return ERR_DESC_INVALID_PARAM;
- case TSC_ERROR_INSUFFICIENT_RES:
- return ERR_DESC_INSUFFICIENT_RES;
- case TSC_ERROR_INTERNAL:
- return ERR_DESC_INTERNAL;
- case TSC_ERROR_INVALID_HANDLE:
- return ERR_DESC_INVALID_HANDLE;
- case TSC_ERROR_NOT_IMPLEMENTED:
- return ERR_DESC_NOT_IMPLEMENTED;
- }
-
- /* default: TSC_ERROR_MODULE_GENERIC */
- return ERR_DESC_MODULE_GENERIC;
-}
diff --git a/framework/IpcServerError.h b/framework/IpcServerError.h
deleted file mode 100644
index e45a450..0000000
--- a/framework/IpcServerError.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- Copyright (c) 2014, McAfee, Inc.
-
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without modification,
- are permitted provided that the following conditions are met:
-
- Redistributions of source code must retain the above copyright notice, this list
- of conditions and the following disclaimer.
-
- Redistributions in binary form must reproduce the above copyright notice, this
- list of conditions and the following disclaimer in the documentation and/or other
- materials provided with the distribution.
-
- Neither the name of McAfee, Inc. nor the names of its contributors may be used
- to endorse or promote products derived from this software without specific prior
- written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
- INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
- OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
- OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#ifndef IPCSERVERERROR_H
-#define IPCSERVERERROR_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * \file IpcServerError.h
- * \brief Ipc server-side error Header File
- *
- * This file contains the server-side error code details, used by Security framework.
- */
-
-const char *GetErrorName(const int iErrCode);
-const char *GetErrorDescription(const int iErrCode);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* IPCSERVERERROR_H */
diff --git a/framework/IpcServerHdr.h b/framework/IpcServerHdr.h
deleted file mode 100644
index d48d4d2..0000000
--- a/framework/IpcServerHdr.h
+++ /dev/null
@@ -1,143 +0,0 @@
-/*
- Copyright (c) 2014, McAfee, Inc.
-
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without modification,
- are permitted provided that the following conditions are met:
-
- Redistributions of source code must retain the above copyright notice, this list
- of conditions and the following disclaimer.
-
- Redistributions in binary form must reproduce the above copyright notice, this
- list of conditions and the following disclaimer in the documentation and/or other
- materials provided with the distribution.
-
- Neither the name of McAfee, Inc. nor the names of its contributors may be used
- to endorse or promote products derived from this software without specific prior
- written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
- INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
- OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
- OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#ifndef IPCSERVERHDR_H
-#define IPCSERVERHDR_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include "IpcServer.h"
-#include "IpcThrdPool.h"
-
-#define SAFE_FREE(x) if (x) {free(x); x = NULL;}
-#define FREE(x) if (x) {free(x);}
-
-/**
- * Forward Declarations.
- */
-/*struct IpcServerInfo;*/
-typedef struct _IpcServerInfo IpcServerInfo;
-
-/**
- * Keep registered methods list
- */
-typedef struct _IpcServerMethodList
-{
- IpcServerMethod *pMethod;
- struct _IpcServerMethodList *pNext;
-} IpcServerMethodList;
-
-/**
- * Keep the context for callback passed to stub method
- */
-typedef struct _IpcMethodHandle
-{
- IpcServerMethod *pMethod;
- void *pData;
- IpcServerInfo *pInfo;
- char unique_id[MSGHANDLE_LEN + 1]; //uniquely identify the running method
- int iCancel; // 1 is cancel, 0 not cancel
- char *cStatus; // any status
- pthread_mutex_t Lock;
-
- struct _IpcMethodHandle *pNext;
-} IpcMethodHandle;
-
-/**
- * Single context per server connection.
- */
-struct _IpcServerInfo
-{
- char name[TSC_SERVER_NAME_LEN + 1];
- DBusConnection *pConn;
- IpcServerMethodList *pMethodList; // available methods list
- char rule[TSC_INFO_RULE_LEN];
- int fd;
- bool start_server_flag;
- DBusObjectPathVTable *pTable; //TODO: it is core dump if new thread the running method through pTable registered list
- pthread_t lDbus_listen_thread; //listen thread on the socket for reading message
- IpcHandlePool *pHandlePool; // thread pool for the running methods
- int count;
- IpcMethodHandle *pRunningMethods; // current running methods
- pthread_mutex_t Lock; // mutex to manage methods - iteration, add, remove.
-};
-
-
-/**
- * Copy the data from the message read from the listening/reading socket thread, and pass it to the reply thread, where executing the method
- */
-typedef struct _IpcAsyncInfo
-{
- DBusConnection *pConn;
- IpcServerInfo *pInfo;
- DBusMessage *pMsg;
- int argc;
- char **argv;
- IpcServerMethod *pMethod;
- IpcHandles *pHandle;
- char async_unique_id[MSGHANDLE_LEN + 1]; //uniquely identify the running method
-} IpcAsyncInfo;
-
-int _IpcServerInit(IpcServerInfo *pServerInfo, char *szServiceName);
-void _IpcServerDeInit(TSC_SERVER_HANDLE hServer);
-DBusHandlerResult _IpcServerReplyMessage(DBusConnection *pConn, DBusMessage *pMsg,
- char **pReply, int size);
-DBusHandlerResult _IpcServerMsgFilter(DBusConnection *pConn, DBusMessage *pMsg, void *pData);
-int _ParseDBusMessage(DBusMessage *pMsg, int *argc, char ***argv);
-DBusHandlerResult _IpcServerMsgHandler(void *data);
-DBusHandlerResult _IpcServerProcessMessage(void *data);
-void *_IpcPopMessage(void *hServer);
-void CleanupArray(char*** pArr, int len);
-void CleanupAsync(IpcAsyncInfo *pAsync);
-void FreeIpcServerHandle(TSC_SERVER_HANDLE hServer);
-DBusHandlerResult _IpcServerReplyError(DBusConnection *pConn, DBusMessage *pMsg,
- int iErrCode);
-int IpcCancelMethod(void *pData, int argc, char **argv, char ***szReply, int *len, CALLBACKFUNC callback, TSC_METHOD_HANDLE *handle);
-int IpcGetProgressMethod(void *pData, int argc, char **argv, char ***szReply, int *len, CALLBACKFUNC callback, TSC_METHOD_HANDLE *handle);
-int IpcShutdown(void *pData, int argc, char **argv, char ***szReply, int *len, CALLBACKFUNC callback, TSC_METHOD_HANDLE *handle);
-int IpcServerCallbackMethod(TSC_METHOD_HANDLE *pMHandle, TSC_METHOD_REASON_CODE iReason, void *reason_params);
-int _RunDetachedThread(void *pfWorkerFunc, void *pThreadData);
-
-
-void _FreeHandleMethods(IpcServerInfo *pServerInfo);
-void _FreeHandlePool(IpcServerInfo *pServerInfo);
-void _FreeHandleTable(IpcServerInfo *pServerInfo);
-void _FreeHandleConn(IpcServerInfo *pServerInfo);
-void _WaitForListenThreadClose(IpcServerInfo *pServerInfo);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
-
diff --git a/framework/IpcStructs.c b/framework/IpcStructs.c
deleted file mode 100644
index 1d73751..0000000
--- a/framework/IpcStructs.c
+++ /dev/null
@@ -1,185 +0,0 @@
-/*
- Copyright (c) 2014, McAfee, Inc.
-
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without modification,
- are permitted provided that the following conditions are met:
-
- Redistributions of source code must retain the above copyright notice, this list
- of conditions and the following disclaimer.
-
- Redistributions in binary form must reproduce the above copyright notice, this
- list of conditions and the following disclaimer in the documentation and/or other
- materials provided with the distribution.
-
- Neither the name of McAfee, Inc. nor the names of its contributors may be used
- to endorse or promote products derived from this software without specific prior
- written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
- INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
- OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
- OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-/**
- * \file IpcStructs.c
- * \brief Source File for structures needed by Ipc.
- *
- * This file implements the structures needed by IPC Client, used by Security framework.
- */
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-
-#include "IpcStructs.h"
-
-/**
- * Assign new fields to existing call handle.
- * A NULL pPendingCall will not replace the existing one.
- */
-int _AssignToClientCallHandle(ClientCallHandle *pHandle, const char *szPrefix, dbus_uint32_t serial,
- DBusPendingCall *pPendingCall)
-{
- int iRet = 1;
-
- do
- {
- if (!pHandle)
- break;
-
- if (0 > (iRet = snprintf(pHandle->idUnique, MSGHANDLE_LEN, TSC_MID_SVR_FORMAT, szPrefix,
- serial)))
- break;
-
- if (pPendingCall)
- pHandle->pPendingCall = pPendingCall;
-
- iRet = 0;
-
- } while(0);
-
- return iRet;
-}
-
-int _CreateClientCallHandle(ClientCallHandle **ppHandle, const char *szPrefix, dbus_uint32_t serial,
- DBusPendingCall *pPendingCall)
-{
- int iRet = 1;
- ClientCallHandle *pHandle = NULL;
-
- do
- {
- if (!ppHandle)
- break;
-
- pHandle = (ClientCallHandle *) malloc(sizeof(ClientCallHandle));
- if (!pHandle)
- break;
-
- if ((iRet = _AssignToClientCallHandle(pHandle, szPrefix, serial, pPendingCall)))
- break;
-
- *ppHandle = pHandle;
- iRet = 0;
-
- } while(0);
-
- if (iRet && pHandle)
- {
- free(pHandle);
- pHandle = NULL;
- }
-
- return iRet;
-}
-
-void _FreeClientCallHandle(ClientCallHandle *pHandle)
-{
- free(pHandle);
-}
-
-void _FreeSharedData(SharedData *pSharedData)
-{
- if (pSharedData)
- {
- pthread_mutex_destroy(&pSharedData->lock);
- pthread_cond_destroy(&pSharedData->cond);
- free(pSharedData);
- }
-}
-
-// Create the handle to monitor send completion and receive sent message details.
-// Maintains only reference of DBusMessage; Ownership is not changed.
-SharedData *_CreateSharedData(const char *szCallHandlePrefix, DBusMessage *pMsg)
-{
- int iDone = 0;
- SharedData *pSharedData = NULL;
-
- do
- {
- if (!pMsg)
- break;
-
- if ((pSharedData = (SharedData *)calloc(1, sizeof(SharedData))) == NULL)
- break;
-
- if (0 > snprintf(pSharedData->szCallHandlePrefix, MSGHANDLE_LEN, "%s", szCallHandlePrefix))
- break;
-
- pSharedData->pMsg = pMsg;
- pSharedData->pCallHandle = NULL;
- pSharedData->iSent = 0;
-
- if (pthread_mutex_init(&(pSharedData->lock), NULL))
- break;
-
- if (pthread_cond_init(&(pSharedData->cond), NULL))
- break;
-
- iDone = 1;
- } while(0);
-
- if (!iDone)
- {
- _FreeSharedData(pSharedData);
- return NULL;
- }
- return pSharedData;
-}
-
-ThreadData *_AllocThreadData(DBusConnection *pConn, int timeout_milliseconds,
- SharedData *pSharedData, TSCCallback pCallback, void *pPrivate)
-{
- ThreadData *pThreadData = (ThreadData *)dbus_malloc(sizeof(ThreadData));
- if (!pThreadData)
- return NULL;
-
- pThreadData->pConn = pConn;
- pThreadData->timeout_milliseconds = timeout_milliseconds;
- pThreadData->pSharedData = pSharedData;
- pThreadData->pCallBack = pCallback;
- pThreadData->pPrivate = pPrivate;
-
- return pThreadData;
-}
-
-void _FreeThreadData(void *pThreadData)
-{
- if (pThreadData)
- {
- _FreeSharedData(((ThreadData*)pThreadData)->pSharedData);
- }
- dbus_free(pThreadData);
-}
-
-
-#include "IpcStructs.h"
diff --git a/framework/IpcStructs.h b/framework/IpcStructs.h
deleted file mode 100644
index d312a24..0000000
--- a/framework/IpcStructs.h
+++ /dev/null
@@ -1,139 +0,0 @@
-/*
- Copyright (c) 2014, McAfee, Inc.
-
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without modification,
- are permitted provided that the following conditions are met:
-
- Redistributions of source code must retain the above copyright notice, this list
- of conditions and the following disclaimer.
-
- Redistributions in binary form must reproduce the above copyright notice, this
- list of conditions and the following disclaimer in the documentation and/or other
- materials provided with the distribution.
-
- Neither the name of McAfee, Inc. nor the names of its contributors may be used
- to endorse or promote products derived from this software without specific prior
- written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
- INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
- OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
- OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#ifndef IPCSTRUCTS_H
-#define IPCSTRUCTS_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * \file IpcStructs.h
- * \brief Header File for structures by Ipc.
- *
- * This file implements the structures needed by IPC Client, used by Security framework.
- */
-
-#include <dbus/dbus.h>
-#include <pthread.h>
-
-#include "IpcMacros.h"
-#include "IpcTypes.h"
-
-/*==================================================================================================
- STRUCTURES AND OTHER TYPEDEFS
-==================================================================================================*/
-
-/**
- * Handle for message sent, to be used for future reference.
- */
-typedef struct _ClientCallHandle
-{
- char idUnique[MSGHANDLE_LEN];
- DBusPendingCall *pPendingCall;
- char service_name[TSC_SERVER_NAME_LEN + 1];
-} ClientCallHandle;
-
-/**
- * IPC client connection info.
- */
-typedef struct _IpcClientInfo
-{
- DBusConnection *dbconn;
- char req_name[TSC_REQ_STR_LEN];
- char pid[TSC_REQ_STR_LEN];
-} IpcClientInfo;
-
-/**
- * Data shared between the synchronized thread. It wraps the asynchronous call handle.
- */
-typedef struct _SharedData
-{
- int iSent;
- ClientCallHandle *pCallHandle;
- char szCallHandlePrefix[MSGHANDLE_LEN];
- DBusMessage *pMsg;
- pthread_mutex_t lock;
- pthread_cond_t cond;
-} SharedData;
-
-/**
- * Data passed to threads sending messages asynchronously.
- * Owns only SharedData, rest are owned by 'parent thread'.
- */
-typedef struct _ThreadData
-{
- DBusConnection *pConn;
- int timeout_milliseconds;
- SharedData *pSharedData;
- TSCCallback pCallBack;
- void *pPrivate;
-} ThreadData;
-
-/*==================================================================================================
- FUNCTION PROTOTYPES
-==================================================================================================*/
-
-/**
- * _ClientCallHandle related.
- */
-int _AssignToClientCallHandle(ClientCallHandle *pHandle, const char *szPrefix, dbus_uint32_t serial,
- DBusPendingCall *pPendingCall);
-
-int _CreateClientCallHandle(ClientCallHandle **ppHandle, const char *szPrefix, dbus_uint32_t serial,
- DBusPendingCall *pPendingCall);
-
-void _FreeClientCallHandle(ClientCallHandle *pHandle);
-
-/**
- * SharedData related.
- */
-void _FreeSharedData(SharedData *pSharedData);
-
-// Create the handle to monitor send completion and receive sent message details.
-// Maintains only reference of DBusMessage; Ownership is not changed.
-SharedData *_CreateSharedData(const char *szCallHandlePrefix, DBusMessage *pMsg);
-
-/**
- * ThreadData related.
- */
-ThreadData *_AllocThreadData(DBusConnection *pConn, int timeout_milliseconds,
- SharedData *pSharedData, TSCCallback pCallback, void *pPrivate);
-
-void _FreeThreadData(void *pThreadData);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* IPCSTRUCTS_H */
-
diff --git a/framework/IpcThrdPool.c b/framework/IpcThrdPool.c
deleted file mode 100644
index 253b638..0000000
--- a/framework/IpcThrdPool.c
+++ /dev/null
@@ -1,173 +0,0 @@
-/*
- Copyright (c) 2014, McAfee, Inc.
-
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without modification,
- are permitted provided that the following conditions are met:
-
- Redistributions of source code must retain the above copyright notice, this list
- of conditions and the following disclaimer.
-
- Redistributions in binary form must reproduce the above copyright notice, this
- list of conditions and the following disclaimer in the documentation and/or other
- materials provided with the distribution.
-
- Neither the name of McAfee, Inc. nor the names of its contributors may be used
- to endorse or promote products derived from this software without specific prior
- written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
- INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
- OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
- OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-/**
- * \file IpcThrdPool.c
- * \brief Ipc Thread pool Ipc Source File
- *
- * This file implements the thread pool used by IPC Server in Security framework.
- */
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <unistd.h>
-#include <pthread.h>
-#include "Debug.h"
-#include "IpcThrdPool.h"
-
-static void IpcThrPoolReset(IpcHandlePool *pHPool)
-{
- IpcHandles *pHandle;
-
- if (!pHPool)
- return;
-
- while ((pHandle = pHPool->pHList) != NULL)
- {
- pHPool->pHList = pHPool->pHList->pNext;
- free(pHandle);
- }
-
- pthread_cond_destroy(&pHPool->Cond);
- pthread_mutex_destroy(&pHPool->Lock);
- pHPool->iIdleCount = 0;
-}
-
-/**
- * Frees the resources and nullifies the thread pool object.
- */
-void IpcThrPoolFree(IpcHandlePool **pHPool)
-{
- IpcThrPoolReset(*pHPool);
- free(*pHPool);
- *pHPool = NULL;
-}
-
-/**
- * Creates a new handle and makes it head of the pool list.
- * Return 0 on success and -1 on failure.
- */
-static int AddHandleToThrPool(IpcHandlePool *pHPool)
-{
- IpcHandles *pHandle = NULL;
- if ((pHandle = (IpcHandles *) calloc(1, sizeof(IpcHandles))) == NULL)
- {
- DDBG("%s\n", "calloc IpcHandles");
- return -1;
- }
-
-
- pHandle->pNext = pHPool->pHList;
- pHPool->pHList = pHandle;
- return 0;
-}
-
-/**
- * Initializes thread pool. Returns 0 on success and -1 on failure.
- */
-int IpcThrPoolInit(IpcHandlePool *pHPool, int iNumHandles)
-{
- int i;
- int result = 0;
-
- if (!pHPool)
- return -1;
-
- if (pthread_mutex_init(&pHPool->Lock, NULL))
- {
- DDBG("%s\n", "mutex init");
- return -1;
- }
-
-
- if (pthread_cond_init(&pHPool->Cond, NULL))
- {
- pthread_mutex_destroy(&pHPool->Lock);
- DDBG("%s\n", "cond_init");
- return -1;
- }
-
- pHPool->iIdleCount = iNumHandles;
- pHPool->pHList = NULL;
-
- for (i = 0; i < iNumHandles; i++)
- {
- if (0 != AddHandleToThrPool(pHPool))
- {
- DDBG("%s\n", "add to thrpool");
- result = -1;
- break;
- }
- }
-
- return result;
-}
-
-/**
- * Synchronized method to returns a thread handle from the pool. The method is blocked till a
- * handle is available.
- */
-IpcHandles *IpcThrPoolGet(IpcHandlePool *pHPool)
-{
- IpcHandles *pHandle;
- pthread_mutex_lock(&pHPool->Lock);
- while ((pHandle = pHPool->pHList) == NULL)
- {
- pthread_cond_wait(&pHPool->Cond, &pHPool->Lock);
- }
- pHPool->pHList = pHandle->pNext;
- (pHPool->iIdleCount)--;
- pthread_mutex_unlock(&pHPool->Lock);
-
- return pHandle;
-}
-
-void IpcThrPoolPut(IpcHandlePool *pHPool, IpcHandles *pHandle)
-{
- pthread_mutex_lock(&pHPool->Lock);
- pHandle->pNext = pHPool->pHList;
- pHPool->pHList = pHandle;
- (pHPool->iIdleCount)++;
-
- pthread_cond_broadcast(&pHPool->Cond);
- pthread_mutex_unlock(&pHPool->Lock);
-}
-
-/**
- * Returns number of handles available in thread pool.
- * Returns -1 when pool is invalid.
- */
-int IpcThrPoolIdleCount(IpcHandlePool *pHPool)
-{
-
- return pHPool? pHPool->iIdleCount : -1;
-}
-
diff --git a/framework/IpcThrdPool.h b/framework/IpcThrdPool.h
deleted file mode 100644
index 2e98f2c..0000000
--- a/framework/IpcThrdPool.h
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- Copyright (c) 2014, McAfee, Inc.
-
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without modification,
- are permitted provided that the following conditions are met:
-
- Redistributions of source code must retain the above copyright notice, this list
- of conditions and the following disclaimer.
-
- Redistributions in binary form must reproduce the above copyright notice, this
- list of conditions and the following disclaimer in the documentation and/or other
- materials provided with the distribution.
-
- Neither the name of McAfee, Inc. nor the names of its contributors may be used
- to endorse or promote products derived from this software without specific prior
- written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
- INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
- OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
- OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#ifndef _IPCTHRDPOOL_H
-#define _IPCTHRDPOOL_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include "IpcServer.h"
-
-/**
- *
- */
-typedef struct IpcHandles_struct
-{
- struct IpcHandles_struct *pNext;
- void *pMethodHandle;
- void *pData;
-} IpcHandles;
-
-/**
- *
- */
-typedef struct IpcHandlePool_struct
-{
- IpcHandles *pHList;
- pthread_mutex_t Lock;
- pthread_cond_t Cond;
- int iIdleCount;
-} IpcHandlePool;
-
-/**
- * Initializes thread pool. Returns 0 on success and -1 on failure.
- */
-int IpcThrPoolInit(IpcHandlePool *pHPool, int iNumHandles);
-
-/**
- * Frees the resources and nullifies the thread pool object.
- */
-void IpcThrPoolFree(IpcHandlePool **pHPool);
-
-/**
- * Synchronized method to returns a thread handle from the pool. The method is blocked till a
- * handle is available.
- */
-IpcHandles *IpcThrPoolGet(IpcHandlePool *pHPool);
-
-/**
- *
- */
-void IpcThrPoolPut(IpcHandlePool *pHPool, IpcHandles *pHandle);
-
-/**
- * Returns number of handles available in thread pool.
- * Returns -1 when pool is invalid.
- */
-int IpcThrPoolIdleCount(IpcHandlePool *pHPool);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
-
diff --git a/framework/IpcTypes.h b/framework/IpcTypes.h
deleted file mode 100644
index 296c03b..0000000
--- a/framework/IpcTypes.h
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- Copyright (c) 2014, McAfee, Inc.
-
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without modification,
- are permitted provided that the following conditions are met:
-
- Redistributions of source code must retain the above copyright notice, this list
- of conditions and the following disclaimer.
-
- Redistributions in binary form must reproduce the above copyright notice, this
- list of conditions and the following disclaimer in the documentation and/or other
- materials provided with the distribution.
-
- Neither the name of McAfee, Inc. nor the names of its contributors may be used
- to endorse or promote products derived from this software without specific prior
- written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
- INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
- OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
- OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#ifndef IPCTYPES_H
-#define IPCTYPES_H
-
-/**
- * \file IpcTypes.h
- * \brief Data types and structs for Security framework IPC clients.
- *
- * This file provides the data types and structs needed by clients of Security framework IPC.
- */
-
-/*==================================================================================================
- STRUCTURES AND OTHER TYPEDEFS
-==================================================================================================*/
-
-/**
- * \brief CallBack Function type for Async method supported by the IPC.
- *
- * \param[in] pPrivate API caller's context information, supplied with TSCSendMessageAsync earlier.
- * \param[in] argc Length of the string in argv.
- * \param[in] argv Array of strings representing result value of asynchronous reply.
- */
-typedef void (*TSCCallback)(void *pPrivate, int argc, const char **argv);
-
-/**
- * Client side IPC handles.
- */
-#define TSCHANDLE(n) struct n##_struct { int iDummy; }; typedef struct n##_struct *n
-
-/**
- * IPC client handle.
- */
-TSCHANDLE(TSC_IPC_HANDLE);
-#define INVALID_IPC_HANDLE ((TSC_IPC_HANDLE) NULL)
-
-/**
- * Asynchronous call handle.
- */
-TSCHANDLE(TSC_CALL_HANDLE);
-
-#endif /* IPCTYPES_H */
-
diff --git a/framework/Makefile_TPCSSerDaemon b/framework/Makefile_TPCSSerDaemon
deleted file mode 100644
index 47614bf..0000000
--- a/framework/Makefile_TPCSSerDaemon
+++ /dev/null
@@ -1,103 +0,0 @@
-#
-# Copyright (c) 2014, McAfee, Inc.
-#
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without modification,
-# are permitted provided that the following conditions are met:
-#
-# Redistributions of source code must retain the above copyright notice, this list
-# of conditions and the following disclaimer.
-#
-# Redistributions in binary form must reproduce the above copyright notice, this
-# list of conditions and the following disclaimer in the documentation and/or other
-# materials provided with the distribution.
-#
-# Neither the name of McAfee, Inc. nor the names of its contributors may be used
-# to endorse or promote products derived from this software without specific prior
-# written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
-# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-# IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
-# INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
-# OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
-# OF THE POSSIBILITY OF SUCH DAMAGE.
-#
-
-OUTDIR = bin
-TARGET = $(OUTDIR)/TPCSSerDaemon
-SRCDIR = .
-LD_FLAGS := $(LD_FLAGS) -ldl $(shell pkg-config --libs libtzplatform-config)
-
-ifeq ($(TCS_CC), )
- CC = gcc
-else
- CC = $(TCS_CC)
-endif
-ifeq ($(TCS_LD), )
- LD = ld
-else
- LD = $(TCS_LD)
-endif
-ifeq ($(TCS_AR), )
- AR = ar
-else
- AR = $(TCS_AR)
-endif
-ifeq ($(TCS_STRIP), )
- STRIP = strip
-else
- STRIP = $(TCS_STRIP)
-endif
-
-ifeq ($(TCS_CFG), release)
- CFLAGS := -O3 -fPIE -DUNIX $(CFLAGS)
-else
- CFLAGS := -g -fPIE -DUNIX -DDEBUG $(CFLAGS)
-endif
-
-# Define a list of pkg-config packages we want to use
-pkg_packages = dbus-glib-1 dlog
-
-PKG_CFLAGS = $(shell pkg-config --cflags $(pkg_packages))
-PKG_LDFLAGS = $(shell pkg-config --libs $(pkg_packages))
-
-# Combine user supplied, additional, and pkg-config flags
-LD_FLAGS += $(PKG_LDFLAGS) -lscserver -L./lib -lxml2
-
-GBS_CFLAGS = -I${SYSROOT}/usr/include/dbus-1.0 -I${SYSROOT}/usr/lib/dbus-1.0/include -I${SYSROOT}/usr/include/libxml2
-CFLAGS += -I$(SRCDIR) $(PKCL_CFLAGS) $(GBS_CFLAGS) $(PKG_CFLAGS)
-
-SOURCES = $(SRCDIR)/TPCSSerDaemon.c \
- $(SRCDIR)/IpcForkDaemon.c
-
-OBJECTS = $(OUTDIR)/TPCSSerDaemon.o \
- $(OUTDIR)/IpcForkDaemon.o
-
-$(OUTDIR)/%.o: $(SRCDIR)/%.c
- $(CC) $(CFLAGS) -o $(OUTDIR)/$*.o -c $(SRCDIR)/$*.c
-
-all: $(OUTDIR) $(TARGET)
-
-$(TARGET): $(OBJECTS)
- $(CC) -Wl,-zdefs -o $(TARGET) $(OBJECTS) $(LD_FLAGS) $(PKG_LDFLAGS)
-
-$(OUTDIR):
- @mkdir $(OUTDIR)
-
-install: all
- mkdir -p ${DESTDIR}/bin
- cp ${TARGET} ${DESTDIR}/bin/
-
-distclean: clean
- @rm -rf $(OUTDIR)
-
-clean:
- @rm -f $(TARGET)
- @rm -f $(OBJECTS) *~
- @rm -f *.bb *.bbg *.da *.gcov
diff --git a/framework/Makefile_TWPSerDaemon b/framework/Makefile_TWPSerDaemon
deleted file mode 100644
index 14e36de..0000000
--- a/framework/Makefile_TWPSerDaemon
+++ /dev/null
@@ -1,106 +0,0 @@
-#
-# Copyright (c) 2014, McAfee, Inc.
-#
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without modification,
-# are permitted provided that the following conditions are met:
-#
-# Redistributions of source code must retain the above copyright notice, this list
-# of conditions and the following disclaimer.
-#
-# Redistributions in binary form must reproduce the above copyright notice, this
-# list of conditions and the following disclaimer in the documentation and/or other
-# materials provided with the distribution.
-#
-# Neither the name of McAfee, Inc. nor the names of its contributors may be used
-# to endorse or promote products derived from this software without specific prior
-# written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
-# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-# IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
-# INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
-# OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
-# OF THE POSSIBILITY OF SUCH DAMAGE.
-#
-
-OUTDIR = bin
-TARGET = $(OUTDIR)/TWPSerDaemon
-SRCDIR = .
-INCLUDE = -I. $(TCS_INC) -I../plugin
-LD_FLAGS := $(LD_FLAGS) -ldl -lpthread -lsecfw -lscserver -lm -Llib $(shell pkg-config --libs libtzplatform-config)
-
-ifeq ($(TCS_CC), )
- CC = gcc
-else
- CC = $(TCS_CC)
-endif
-ifeq ($(TCS_LD), )
- LD = ld
-else
- LD = $(TCS_LD)
-endif
-ifeq ($(TCS_AR), )
- AR = ar
-else
- AR = $(TCS_AR)
-endif
-ifeq ($(TCS_STRIP), )
- STRIP = strip
-else
- STRIP = $(TCS_STRIP)
-endif
-
-ifeq ($(TCS_CFG), release)
- CFLAGS := -O3 -fPIC $(INCLUDE) -DUNIX $(CFLAGS)
-else
- CFLAGS := -g -fPIC $(INCLUDE) -DUNIX -DDEBUG $(CFLAGS)
-endif
-
-CFLAGS := $(CFLAGS) $(PKCL_CFLAGS) $(TCS_CFLAGS)
-
-SOURCES = $(SRCDIR)/TWPSerDaemon.c \
- $(SRCDIR)/IpcForkDaemon.c
-
-OBJECTS = $(OUTDIR)/TWPSerDaemon.o \
- $(OUTDIR)/IpcForkDaemon.o
-
-# Define a list of pkg-config packages we want to use
-ifeq ($(TCS_CFG), release)
- pkg_packages = dbus-glib-1
-else
- pkg_packages = dbus-glib-1 dlog
-endif
-
-PKG_CFLAGS = $(shell pkg-config --cflags $(pkg_packages))
-PKG_LDFLAGS = $(shell pkg-config --libs $(pkg_packages))
-
-# Combine user supplied, additional, and pkg-config flags
-PKGLD_FLAGS += $(PKG_LDFLAGS) -lscserver -L./lib
-
-GBS_CFLAGS = -I${SYSROOT}/usr/include/dbus-1.0 -I${SYSROOT}/usr/lib/dbus-1.0/include
-PKGCFLAGS += -I$(SRCDIR) $(PKCL_CFLAGS) $(GBS_CFLAGS) $(PKG_CFLAGS)
-
-$(OUTDIR)/%.o: $(SRCDIR)/%.c
- $(CC) $(CFLAGS) $(PKGCFLAGS) -I. -o $(OUTDIR)/$*.o -c $(SRCDIR)/$*.c
-
-all: $(OUTDIR) $(TARGET)
-
-$(TARGET): $(OBJECTS)
- $(CC) -Wl,-zdefs -o $(TARGET) $(OBJECTS) $(LD_FLAGS) $(PKGLD_FLAGS)
-
-$(OUTDIR):
- @mkdir $(OUTDIR)
-
-distclean: clean
- @rm -rf $(OUTDIR)
-
-clean:
- @rm -f $(TARGET)
- @rm -f $(OBJECTS) *~
- @rm -f *.bb *.bbg *.da *.gcov
diff --git a/framework/Makefile_channel_client b/framework/Makefile_channel_client
deleted file mode 100644
index a1ce28e..0000000
--- a/framework/Makefile_channel_client
+++ /dev/null
@@ -1,108 +0,0 @@
-#
-# Copyright (c) 2014, McAfee, Inc.
-#
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without modification,
-# are permitted provided that the following conditions are met:
-#
-# Redistributions of source code must retain the above copyright notice, this list
-# of conditions and the following disclaimer.
-#
-# Redistributions in binary form must reproduce the above copyright notice, this
-# list of conditions and the following disclaimer in the documentation and/or other
-# materials provided with the distribution.
-#
-# Neither the name of McAfee, Inc. nor the names of its contributors may be used
-# to endorse or promote products derived from this software without specific prior
-# written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
-# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-# IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
-# INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
-# OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
-# OF THE POSSIBILITY OF SUCH DAMAGE.
-#
-
-OUTDIR = lib
-TARGET = $(OUTDIR)/libscclient.so
-SRCDIR = .
-LD_FLAGS := $(LD_FLAGS) -ldl -lpthread $(shell pkg-config --libs libtzplatform-config)
-
-ifeq ($(TCS_CC), )
- CC = gcc
-else
- CC = $(TCS_CC)
-endif
-ifeq ($(TCS_LD), )
- LD = ld
-else
- LD = $(TCS_LD)
-endif
-ifeq ($(TCS_AR), )
- AR = ar
-else
- AR = $(TCS_AR)
-endif
-ifeq ($(TCS_STRIP), )
- STRIP = strip
-else
- STRIP = $(TCS_STRIP)
-endif
-
-ifeq ($(TCS_CFG), release)
- CFLAGS := -O3 -fPIC -DUNIX $(CFLAGS)
-else
- CFLAGS := -g -fPIC -DUNIX -DDEBUG $(CFLAGS)
-endif
-
-# Define a list of pkg-config packages we want to use
-
-ifeq ($(TCS_CFG), release)
- pkg_packages = dbus-glib-1
-else
- pkg_packages = dbus-glib-1 dlog
-endif
-
-PKG_CFLAGS = $(shell pkg-config --cflags $(pkg_packages))
-PKG_LDFLAGS = $(shell pkg-config --libs $(pkg_packages))
-
-# Combine user supplied, additional, and pkg-config flags
-LD_FLAGS += $(PKG_LDFLAGS)
-
-GBS_CFLAGS = -I${SYSROOT}/usr/include/dbus-1.0 -I${SYSROOT}/usr/lib/dbus-1.0/include
-CFLAGS += $(PKCL_CFLAGS) $(TCS_CFLAGS) $(GBS_CFLAGS) $(PKG_CFLAGS)
-
-SOURCES = $(SRCDIR)/IpcClient.c \
- $(SRCDIR)/IpcStructs.c
-
-OBJECTS = $(OUTDIR)/IpcClient.o \
- $(OUTDIR)/IpcStructs.o
-
-$(OUTDIR)/%.o: $(SRCDIR)/%.c
- $(CC) $(CFLAGS) -o $(OUTDIR)/$*.o -c $(SRCDIR)/$*.c
-
-all: $(OUTDIR) $(TARGET)
-
-$(TARGET): $(OBJECTS)
- $(CC) -shared -Wl,-zdefs -o $(TARGET) $(OBJECTS) $(LD_FLAGS)
-
-$(OUTDIR):
- @mkdir $(OUTDIR)
-
-install: all
- mkdir -p ${DESTDIR}/bin
- cp ${TARGET} ${DESTDIR}/bin/
-
-distclean: clean
- @rm -rf $(OUTDIR)
-
-clean:
- @rm -f $(TARGET)
- @rm -f $(OBJECTS) *~
- @rm -f *.bb *.bbg *.da *.gcov
diff --git a/framework/Makefile_channel_server b/framework/Makefile_channel_server
deleted file mode 100644
index e5b94c1..0000000
--- a/framework/Makefile_channel_server
+++ /dev/null
@@ -1,109 +0,0 @@
-#
-# Copyright (c) 2014, McAfee, Inc.
-#
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without modification,
-# are permitted provided that the following conditions are met:
-#
-# Redistributions of source code must retain the above copyright notice, this list
-# of conditions and the following disclaimer.
-#
-# Redistributions in binary form must reproduce the above copyright notice, this
-# list of conditions and the following disclaimer in the documentation and/or other
-# materials provided with the distribution.
-#
-# Neither the name of McAfee, Inc. nor the names of its contributors may be used
-# to endorse or promote products derived from this software without specific prior
-# written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
-# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-# IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
-# INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
-# OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
-# OF THE POSSIBILITY OF SUCH DAMAGE.
-#
-
-OUTDIR = lib
-TARGET = $(OUTDIR)/libscserver.so
-SRCDIR = .
-LD_FLAGS := $(LD_FLAGS) -ldl -lpthread $(shell pkg-config --libs libtzplatform-config)
-
-ifeq ($(TCS_CC), )
- CC = gcc
-else
- CC = $(TCS_CC)
-endif
-ifeq ($(TCS_LD), )
- LD = ld
-else
- LD = $(TCS_LD)
-endif
-ifeq ($(TCS_AR), )
- AR = ar
-else
- AR = $(TCS_AR)
-endif
-ifeq ($(TCS_STRIP), )
- STRIP = strip
-else
- STRIP = $(TCS_STRIP)
-endif
-
-ifeq ($(TCS_CFG), release)
- CFLAGS := -O3 -fPIC -DUNIX $(CFLAGS)
-else
- CFLAGS := -g -fPIC -DUNIX -DDEBUG $(CFLAGS)
-endif
-
-# Define a list of pkg-config packages we want to use
-ifeq ($(TCS_CFG), release)
- pkg_packages = dbus-glib-1
-else
- pkg_packages = dbus-glib-1 dlog
-endif
-
-PKG_CFLAGS = $(shell pkg-config --cflags $(pkg_packages))
-PKG_LDFLAGS = $(shell pkg-config --libs $(pkg_packages))
-
-# Combine user supplied, additional, and pkg-config flags
-LD_FLAGS += $(PKG_LDFLAGS)
-
-GBS_CFLAGS = -I${SYSROOT}/usr/include/dbus-1.0 -I${SYSROOT}/usr/lib/dbus-1.0/include
-CFLAGS += $(PKCL_CFLAGS) $(TCS_CFLAGS) $(GBS_CFLAGS) $(PKG_CFLAGS)
-
-SOURCES = $(SRCDIR)/IpcServer.c \
- $(SRCDIR)/IpcServerError.c \
- $(SRCDIR)/IpcThrdPool.c
-
-OBJECTS = $(OUTDIR)/IpcServer.o \
- $(OUTDIR)/IpcServerError.o \
- $(OUTDIR)/IpcThrdPool.o
-
-$(OUTDIR)/%.o: $(SRCDIR)/%.c
- $(CC) $(CFLAGS) -o $(OUTDIR)/$*.o -c $(SRCDIR)/$*.c
-
-all: $(OUTDIR) $(TARGET)
-
-$(TARGET): $(OBJECTS)
- $(CC) -shared -Wl,-zdefs -o $(TARGET) $(OBJECTS) $(LD_FLAGS)
-
-$(OUTDIR):
- @mkdir $(OUTDIR)
-
-install: all
- mkdir -p ${DESTDIR}/bin
- cp ${TARGET} ${DESTDIR}/bin/
-
-distclean: clean
- @rm -rf $(OUTDIR)
-
-clean:
- @rm -f $(TARGET)
- @rm -f $(OBJECTS) *~
- @rm -f *.bb *.bbg *.da *.gcov
diff --git a/framework/TPCSSerDaemon.c b/framework/TPCSSerDaemon.c
deleted file mode 100644
index fcb2687..0000000
--- a/framework/TPCSSerDaemon.c
+++ /dev/null
@@ -1,1399 +0,0 @@
-/**
- * Methods supported in TPCS (Tizen Plugin Control Service)
- */
-
-#include <dirent.h>
-#include <dlfcn.h>
-#include <errno.h>
-#include <ftw.h>
-#include <libxml/parser.h>
-#include <libxml/tree.h>
-#include <libxml/xmlreader.h>
-#include <libxml/xmlwriter.h>
-#include <libxml/xpath.h>
-#include <libxml/xpathInternals.h>
-#include <pthread.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <unistd.h>
-
-#include "Debug.h"
-#include "IpcServer.h"
-#include "IpcForkDaemon.h"
-#include "TPCSSerDaemon.h"
-
-/**
- * This daemon provides four services to manage plugins.
- * InstallPlugin, UninstallPlugin, SetActivePlugin, GetInfoPlugin
- *
- * It maintains config.xml that has the plugin info.
- * It will recover the config.xml if it is corrupted.
- *
- * During the services, the update config.xml and set up the symbolic link of the library is an
- * atomic action.
- * Daemon will store the config.xml in the buffer. When running each method, the buffer config.xml
- * is copied to pData and being update inside the method.
- * Except the GetInfoPlugin(), all other methods serializing when updating the config.xml.
- */
-
-/**
- * Common Utils, TODO: move to Utils.c
- *
- */
-
-typedef struct _ConfigBuf
-{
- xmlDoc *pConfigBuffer;
- pthread_mutex_t configLock;
-} ConfigBuf;
-
-static void GetNSURI(xmlDoc *pXmlDoc, xmlChar **pns, xmlChar **uri);
-static void GetConfigElements(xmlDoc **pXmlDoc, xmlChar *pXPath, int *size, char ***content);
-static int WriteXmlToFile(xmlDoc *pXmlDoc, const char* filename);
-static int UpdatePluglibList(const char *appPath, xmlDoc **pXmlDoc, const char *appId);
-static int ActivePlugin(ConfigBuf *pBuf, xmlDoc **pXmlCp, const xmlChar *appId);
-static void SetSuccessReturn(int *argc, char ***argv);
-static void SetFailureReturn(int *argc, char ***argv);
-static void CleanupArray(char*** pArr, int len);
-static int EndsWith(char const *hay, char const *needle);
-
-/**
- * Local functions declaration.
- */
-static int HasTag(const char *pTag, const char *pFileName, const char *xpath);
-int UpdateNode(const xmlChar* content, xmlDoc **pDoc, const xmlChar *xpathNodeParent,
- const char* appID);
-
-static void SetReturn(int *res_argc, char ***res_argv, char *val)
-{
- if (val)
- {
- *res_argv = calloc(1, sizeof(char*));
- if (*res_argv)
- {
- (*res_argv)[0] = strdup((const char*) val);
- if ((*res_argv)[0])
- {
- *res_argc = 1;
- return;
- }
- }
-
- free(*res_argv);
- *res_argc = 0;
- }
-}
-
-static void SetSuccessReturn(int *res_argc, char ***res_argv)
-{
- SetReturn(res_argc, res_argv, RETURN_SUCCESS);
-}
-
-static void SetFailureReturn(int *res_argc, char ***res_argv)
-{
- SetReturn(res_argc, res_argv, RETURN_FAILURE);
-}
-
-int SearchNodeN(const xmlChar *xpath, xmlDoc *pXmlDoc, xmlXPathObject **pXPathObj)
-{
- DDBG("searchNode :%s\n", xpath);
- int result = -1;
- xmlXPathContextPtr pXPathCtx;
-
- pXPathCtx = xmlXPathNewContext(pXmlDoc);
- if (pXPathCtx == NULL)
- return result;
-
- xmlChar *pns = NULL;
- xmlChar *puri = NULL;
- GetNSURI(pXmlDoc, &pns, &puri);
-
- if (pns != NULL && puri != NULL)
- {
- if (xmlXPathRegisterNs(pXPathCtx, pns, puri) != 0)
- return result;
- }
-
- //Evaluate xpath expression
- *pXPathObj = xmlXPathEvalExpression(xpath, pXPathCtx);
- DDBG("============== XPATHobj address:%p\n", *pXPathObj);
-
- if (*pXPathObj == NULL)
- {
- DDBG("Cannot find node:%s\n", xpath);
- free(pns);
- free(puri);
- return result;
- }
-
- result = 0;
-
- free(pns);
- free(puri);
-
- xmlXPathFreeContext(pXPathCtx);
- return result;
-
-}
-
-// Dynamically load the library, get the product name, vendor name and version number, then
-// update the xml file.
-int InsertNode(xmlDoc **pDoc, const xmlChar *xpathNodeParent, const char *content)
-{
- DDBG("insert node :%s\n", "==============");
- int result = -1;
- xmlXPathContext *pXPathCtx;
- xmlXPathObject *pXPathObj;
-
- pXPathCtx = xmlXPathNewContext(*pDoc);
- if (pXPathCtx != NULL)
- {
- xmlChar *pns = NULL;
- xmlChar *puri = NULL;
- GetNSURI(*pDoc, &pns, &puri);
- if (pns != NULL && puri != NULL)
- {
- if (xmlXPathRegisterNs(pXPathCtx, pns, puri) != 0)
- {
- DDBG("Cannot register xpath :%s\n", "");
- return result;
- }
- }
-
- // Evaluate xpath expression
- pXPathObj = xmlXPathEvalExpression(xpathNodeParent, pXPathCtx);
- if (pXPathObj != NULL)
- {
- xmlNodeSet *pNodeSet = pXPathObj->nodesetval;
- int size;
- size = pNodeSet ? pNodeSet->nodeNr : 0;
- if (size == 1) // Should find only one node
- {
- // Get xmlnode
- xmlDoc *pPlugDoc = xmlReadMemory(content, strlen(content), NULL, NULL, 0);
- DDBG("plugdoc :%s\n", content);
-
- if (pPlugDoc != NULL)
- {
- xmlNode *newnode = xmlDocCopyNode(xmlDocGetRootElement(pPlugDoc),
- pNodeSet->nodeTab[0]->doc,1);
- DDBG("=========== pplugdoc address:%p\n", pPlugDoc);
-
- xmlFreeDoc(pPlugDoc);
- //xmlNode *addNode = xmlAddChildList(pNodeSet->nodeTab[0], newnode->children);
- xmlNode *addNode = xmlAddChildList(pNodeSet->nodeTab[0], newnode->children);
- DDBG("=========== new node addr:%p\n", newnode);
-
- if (addNode != NULL)
- {
- result = 0;
- DDBG("FREE new node:%p\n", newnode);
- newnode->children = NULL;
- xmlFreeNode(newnode);
- }
- }
- }
- }
- free(pns);
- free(puri);
- pns = NULL;
- puri = NULL;
-
- xmlXPathFreeObject(pXPathObj);
- xmlXPathFreeContext(pXPathCtx);
- }
-
- return result;
-}
-
-int RemoveNodeParent(xmlDoc **pDoc, const xmlChar *path, const char* value)
-{
- int result = -1;
- if (*pDoc != NULL)
- {
- xmlXPathContext *pXPathCtx;
- xmlXPathObject *pXPathObj;
-
- pXPathCtx = xmlXPathNewContext(*pDoc);
-
- if (pXPathCtx != NULL)
- {
- xmlChar *pns = NULL;
- xmlChar *puri = NULL;
- GetNSURI(*pDoc, &pns, &puri);
- if (pns != NULL && puri != NULL)
- {
- if (xmlXPathRegisterNs(pXPathCtx, pns, puri) != 0)
- {
- return result;
- }
- }
- pXPathObj = xmlXPathEvalExpression(path, pXPathCtx);
- if (pXPathObj != NULL)
- {
- xmlNodeSet *pNodeSet = pXPathObj->nodesetval;
-
- int size;
- size = pNodeSet ? pNodeSet->nodeNr : 0;
- int i = 0;
- xmlNode *cur;
- xmlNode *parent;
- for (; i < size; i++)
- {
- cur = pNodeSet->nodeTab[i]->children;
- if (strcmp((const char*)cur->content, value) == 0)
- {
- parent = cur->parent->parent;
- xmlUnlinkNode(parent);
- break;
- }
- else
- DDBG("THEY ARE NOT EQUAL:%s\n", value);
-
- }
- result = 0;
- xmlXPathFreeObject(pXPathObj);
- }
- free(pns);
- free(puri);
- pns = NULL;
- puri = NULL;
- xmlXPathFreeContext(pXPathCtx);
- }
- }
- return result;
-}
-
-int PrintXmlDoc(xmlDocPtr pDoc)
-{
-#ifdef DEBUG
- int result = 0;
- int xmlSize;
- xmlChar *xmlMem;
- xmlDocDumpFormatMemory(pDoc, &xmlMem, &xmlSize, 0);
- DDBG("pdoc content:%s\n", xmlMem);
- free(xmlMem);
- return result;
-#else
- return 0;
-#endif
-}
-
-int UpdateConfigFile(ConfigBuf **pData, xmlDoc **pXmlCp)
-{
- int result = -1;
-
- if (pData && *pData)
- {
- pthread_mutex_lock(&((*pData)->configLock));
- if (pXmlCp && *pXmlCp)
- {
- result = WriteXmlToFile(*pXmlCp, CONFIG_FILE_NEW_W_PATH);
- if (result == 0)
- {
- DDBG("==============update config file%s\n", " ");
- PrintXmlDoc(*pXmlCp);
- result = WriteXmlToFile(*pXmlCp, CONFIG_FILE_W_PATH);
- if (result == 0)
- {
- //delete config new file
- DDBG("REMOVE file:%s\n", CONFIG_FILE_NEW_W_PATH);
- result = remove(CONFIG_FILE_NEW_W_PATH);
-
- if ((*pData)->pConfigBuffer != NULL)
- xmlFreeDoc((*pData)->pConfigBuffer);
-
- (*pData)->pConfigBuffer = xmlCopyDoc(*pXmlCp, DO_RECURSIVE_COPY);
- }
- }
- }
- pthread_mutex_unlock(&((*pData)->configLock));
- }
- return result;
-}
-
-static int UpdatePlugin(const char *libname, xmlDoc **pXmlDoc, const char* appId)
-{
- DDBG("~~~~~ UPDATE plugin: libname:%s, appID:%s\n", libname, appId);
- int result = -1;
- void *pHandle = NULL;
-
- pHandle = dlopen(libname, RTLD_LAZY);
- if (pHandle == NULL)
- {
- char *error;
- if ((error = dlerror()) != NULL)
- DDBG("failed to open lib: %s, error:%s\n", libname, error);
- }
- else
- {
- char *pInfo = NULL;
- char* (*getInfo)(void);
-
- DDBG("open library:%s\n", libname);
- getInfo = dlsym(pHandle, "TCSGetInfo");
-
- if (getInfo == NULL)
- {
- char *error;
- if ((error = dlerror()) != NULL)
- DDBG("SOMETHID :%s\n", error);
- }
- else
- {
- pInfo = strdup(getInfo());
- if (pInfo != NULL)
- {
- // Update node tree
- result = UpdateNode((const xmlChar*) pInfo, pXmlDoc, (const xmlChar*) XPATH_PLUGINS,
- appId);
- free(pInfo);
- pInfo = NULL;
- }
- }
-
- dlclose(pHandle);
- }
- return result;
-}
-
-/**
- * Get plugins node, should only have one node. After that, Check if has the node with appId, if so,
- * remove this node. otherwise, add the new node.
- */
-int UpdateNode(const xmlChar* content, xmlDoc **pDoc, const xmlChar *xpathNodeParent,
- const char* appId)
-{
- int result = -1;
-
- // Remove the plugin first if its appId same
- char appidpath[GENERIC_STRING_SIZE];
- strncpy(appidpath, (const char*) XPATH_PLUGINS_PLUG, sizeof(appidpath));
- result = RemoveNodeParent(pDoc, (const xmlChar *)appidpath, appId);
-
- result = InsertNode(pDoc, xpathNodeParent, (const char*)content);
- return result;
-}
-
-static int ActivePlugin(ConfigBuf *pBuf, xmlDoc **pXmlCp, const xmlChar *appId)
-{
- int result = -1;
-
- xmlXPathObject *pObj = NULL;
- result = SearchNodeN((const xmlChar *)XPATH_ACTIVE_PLUGIN, *pXmlCp, &pObj);
-
- PrintXmlDoc(*pXmlCp);
-
- if (result == -1)
- return result;
-
- result = -1;
- xmlNodeSet *pNodeSet = NULL;
- if (pObj)
- {
- pNodeSet = pObj->nodesetval;
- }
-
- // If appId is empty, disable the active plugin, update activePlugin Node to None
- if (strcmp((const char*)appId, APP_ID_NULL) == 0)
- {
- pthread_mutex_lock(&(pBuf->configLock));
- result = unlink(SYSLINK_PLUG_PATH);
- pthread_mutex_unlock(&(pBuf->configLock));
-
- if (pNodeSet)
- {
- if (pNodeSet->nodeTab[0])
- {
- xmlNode *cur = pNodeSet->nodeTab[0];
- xmlNodeSetContent(cur, (xmlChar*)ACTIVE_NONE);
- DDBG("GET node content :%s\n", cur->content);
- }
- }
- result = 0;
- }
- else
- {
- // Get the plugin path from the appPath, set symbolic link for the plugin, update the xmlDoc
- int count;
- char **paths = NULL;
- GetConfigElements(pXmlCp, (xmlChar *) XPATH_APP_PATHS, &count, &paths);
- int i = 0;
- for (; i < count; i++)
- {
- char appPath[FILE_NAME_MAX_SIZE];
- snprintf(appPath, FILE_NAME_MAX_SIZE, "%s%s%s%s", paths[i], "/", appId,
- PLUGIN_DEFAULT_DIR_NAME);
-
- //Found the app path
- struct stat info;
- if (stat(appPath, &info) != 0)
- continue;
-
- pthread_mutex_lock(&(pBuf->configLock));
- unlink(SYSLINK_PLUG_PATH);
- result = symlink(appPath, SYSLINK_PLUG_PATH);
- pthread_mutex_unlock(&(pBuf->configLock));
-
- DDBG("set symbolic link result:from :%s to %s result:%d\n", appPath, SYSLINK_PLUG_PATH, result);
- if (result == 0 && pNodeSet)
- {
- //update active Id node
- xmlNode *cur = pNodeSet->nodeTab[0];
- xmlNodeSetContent(cur, appId);
- DDBG("GET NOde conten :%s\n", cur->content);
-
- //xmlFreeNode(cur);
- DDBG("RETURn from active plu g 0000:%d\n", result);
- PrintXmlDoc(*pXmlCp);
-
- }
- DDBG("RETURn from active plu g 0000 000000:%d\n", result);
- //xmlXPathFreeNodeSet(pNodeSet);
- break;
- }
- DDBG("RETURn from active plu g 0000 0111 :%d\n", result);
- CleanupArray(&paths, count);
- xmlXPathFreeObject(pObj);
-
- }
-
- DDBG("RETURn from active plug :%d\n", result);
- return result;
-}
-
-/**
- * @appPath: /opt/usr/app/appId
- */
-static int UpdatePluglibList(const char *appPath, xmlDoc **pXmlDoc, const char* appId)
-{
- DDBG("=========================update plugin lib path:%s\n", appPath);
-
- int result = -1;
- char plugPath[FILE_NAME_MAX_SIZE];
-
- sprintf(plugPath, "%s%s", appPath, PLUGIN_DEFAULT_DIR_NAME);
- DIR *pDir;
- struct dirent *pDirEnt;
-
- pDir = opendir(plugPath);
- DDBG("OPEN DIR:%s\n", plugPath);
- if (pDir)
- {
- //open directories
- while ((pDirEnt = readdir(pDir)) != NULL)
- {
- if (strcmp(pDirEnt->d_name, ".") == 0 || strcmp(pDirEnt->d_name, "..") == 0)
- continue;
-
- if (pDirEnt->d_type == DT_REG)
- {
- // load the library, update xml node
- char libPath[FILE_NAME_MAX_SIZE];
- sprintf(libPath, "%s%s%s", plugPath, "/", pDirEnt->d_name);
- result = UpdatePlugin(libPath, pXmlDoc, appId);
- break;
- }
- else
- {
- DDBG("IT IS NO regular file:%s\n", pDirEnt->d_name);
- continue;
- }
- }
- closedir(pDir);
-
- }
- DDBG("RESTURN from update pluglib list :%d\n", result);
- return result;
-}
-
-/**
- *
- */
-int GetInfoPlugin(void *pData, int req_argc, char **req_argv, char ***res_argv, int *res_argc,
- CALLBACKFUNC callback, TSC_METHOD_HANDLE *handle)
-{
- // check data pass is valid xml
- xmlDoc *pXml = (xmlDoc*) *((xmlDoc**) pData);
- *res_argc = FN_GET_INFO_RTN_COUNT;
- *res_argv = calloc(1, sizeof(char*) * FN_GET_INFO_RTN_COUNT);
- if (*res_argv == NULL)
- goto no_memory;
-
- (*res_argv)[0] = strdup((const char*) RETURN_SUCCESS);
- if ((*res_argv)[0] != NULL)
- {
- xmlChar *xmlMem;
- int xmlSize;
- xmlDocDumpFormatMemory(pXml, &xmlMem, &xmlSize, 0);
- if (xmlMem != NULL)
- {
- DDBG("size is: %d, xmlmem is ** :%s\n", xmlSize, xmlMem);
- (*res_argv)[1] = strdup((const char*) xmlMem);
- if ((*res_argv)[1] == NULL)
- {
- DDBG("Not enough memory in :%s\n", "set xmlmem in return");
- free((*res_argv)[0]);
- (*res_argv)[0] = NULL;
- goto invalid_xml;
- }
- xmlFree(xmlMem);
- xmlMem = NULL;
- }
- else
- goto invalid_xml;
- }
- else
- {
- DDBG("failed to copy return_successS:%s\n", "");
- goto no_memory;
- }
- DDBG("successfully finished:%s\n", "GetInfoPlugin");
- return 0;
-
- invalid_xml:
- // get recoverred config.xml and return
- no_memory:
- *res_argc = 0;
- return 0;
-}
-
-/**
- * pData is the buffer of config.xml,
- * ** apply lock
- * if copy pData to pData.cp success,
- * if update pData.cp with the newly installed info
- * if successfully update the symbolic link,
- * if write pData.cp to config.xml.new
- * if switch config.xml.new to config.xml
- * else do nothing, wait for next time update
- * else do nothing, wait for next time udpate
- * copy pData.cp to pData, free pData.cp
- * else return failure update
- * ** unlock
- *
- * @req_argc: 1
- * @req_argv: app installation path, i.e. /opt/usr/apps/appID
- */
-int InstallPlugin(void *pData, int req_argc, char **req_argv, char ***res_argv, int *res_argc,
- CALLBACKFUNC callback, TSC_METHOD_HANDLE *handle)
-{
- DDBG("InstallPlugin for serverstub:%s\n", req_argv[0]);
- int result = -1;
- ConfigBuf *pBuf = *((ConfigBuf **) pData);
- pthread_mutex_lock(&(pBuf->configLock));
- xmlDoc *pXml = (*((ConfigBuf **) pData))->pConfigBuffer;
- xmlDoc *pXmlCp = xmlCopyDoc(pXml, DO_RECURSIVE_COPY);
- pthread_mutex_unlock(&(pBuf->configLock));
-
- if (pXmlCp != NULL)
- {
- if (req_argc == 1 && req_argv != NULL)
- {
- // Get apppath list
- int count;
- char **paths = NULL;
- GetConfigElements(&pXmlCp, (xmlChar *) XPATH_APP_PATHS, &count, &paths);
- int i = 0;
- for (; i < count; i++)
- {
- char appPath[FILE_NAME_MAX_SIZE];
- sprintf(appPath, "%s%s%s", paths[i], "/", req_argv[0]);
-
- PrintXmlDoc(pXmlCp);
- if (UpdatePluglibList(appPath, &pXmlCp, req_argv[0]) == 0)
- {
- if (ActivePlugin(*((ConfigBuf**) pData), &pXmlCp, (const xmlChar *)req_argv[0]) == 0)
- {
- // Write to new file
- DDBG("Success cpy xml 2:%s\n", appPath);
-
- *res_argc = FN_INSTALL_PLUG_RTN_COUNT;
- *res_argv = calloc(1, sizeof(char*) * FN_INSTALL_PLUG_RTN_COUNT);
- if (*res_argv == NULL)
- goto no_memory;
-
- (*res_argv)[0] = strdup((const char*) RETURN_SUCCESS);
- if ((*res_argv)[0] == NULL)
- goto no_memory;
-
- xmlChar *xmlMem = NULL;
- int xmlSize;
-
- xmlDocDumpFormatMemory(pXmlCp, &xmlMem, &xmlSize, 0);
- DDBG("XMLmEM address: %p\n", xmlMem);
- if (xmlMem != NULL)
- {
- (*res_argv)[1] = strdup((const char*) xmlMem);
- DDBG("return from install plug:%s\n", (*res_argv)[1]);
- free(xmlMem);
- xmlMem = NULL;
-
- if ((*res_argv)[1] != NULL)
- {
- result = UpdateConfigFile(pData, &pXmlCp);
- break;
- }
- }
- }
- }
- }
- CleanupArray(&paths, count);
- }
- }
- xmlFreeDoc(pXmlCp);
-
- if (result == -1)
- goto failure;
- else
- {
- return result;
- }
-
-no_memory:
- xmlFreeDoc(pXmlCp);
-
-failure:
- *res_argc = 1;
- *res_argv = calloc(1, sizeof(char*));
- (*res_argv)[0] = strdup((const char*) RETURN_FAILURE);
- return result;
-}
-
-/**
- * If it is active plugin, unlink the syslink, and update active element with AppId to None.
- * If the request plugin is not active one, remove it from the plugin list
- */
-int UninstallPlugin(void *pData, int req_argc, char **req_argv, char ***res_argv, int *res_argc,
- CALLBACKFUNC callback, TSC_METHOD_HANDLE *handle)
-{
- int result = -1;
- xmlDoc *pXml = NULL;
- xmlDoc *pXmlCp = NULL;
- ConfigBuf *pBuf = NULL;
- xmlXPathObject *pObj = NULL;
-
- if (req_argc != 1 || req_argv == NULL)
- goto failure;
-
- pBuf = *((ConfigBuf **) pData);
-
- pthread_mutex_lock(&(pBuf->configLock));
- pXml = pBuf->pConfigBuffer;
- pXmlCp = xmlCopyDoc(pXml, DO_RECURSIVE_COPY);
- pthread_mutex_unlock(&(pBuf->configLock));
-
- if (pXmlCp == NULL)
- goto failure;
-
- result = SearchNodeN((const xmlChar *)XPATH_ACTIVE_PLUGIN, pXmlCp, &pObj);
- if (result != 0)
- goto failure;
-
- xmlNodeSet *pNodeSet = pObj->nodesetval;
- xmlNode *pNode = pNodeSet->nodeTab[0];
- if (pNode == NULL)
- {
- DDBG("not such node %s\n", XPATH_ACTIVE_PLUGIN);
- goto failure;
- }
-
- if (pNode->type != XML_ELEMENT_NODE)
- goto failure;
-
- // Search for plugin. If found, unlink the plugin. Otherwise, the plugin was already
- // unlinked and updated in the config file.
- DDBG("node name:%s, activenode value: %s\n", pNode->name, pNode->children->content);
- if (strcmp((const char *)pNode->children->content, req_argv[0]) == 0)
- {
- pthread_mutex_lock(&(pBuf->configLock));
- result = unlink(SYSLINK_PLUG_PATH);
- pthread_mutex_unlock(&(pBuf->configLock));
-
- if (result != 0 && result != ENOENT)
- goto failure;
-
- xmlNodeSetContent(pNode, (const xmlChar *)ACTIVE_NONE);
- }
-
- // Remove the plugin node if it is in the plugin list
- result = RemoveNodeParent(&pXmlCp, (const xmlChar *)XPATH_PLUGINS_PLUG, req_argv[0]);
- result = UpdateConfigFile((ConfigBuf**) pData, &pXmlCp);
- if (result != 0)
- {
- DDBG("Unable to update config file with uninstall info\n");
- goto failure;
- }
- SetSuccessReturn(res_argc, res_argv);
- goto cleanup;
-
-failure:
- SetFailureReturn(res_argc, res_argv);
-
-cleanup:
- if (pObj)
- xmlXPathFreeObject(pObj);
- if (pXmlCp)
- xmlFreeDoc(pXmlCp);
-
- return result;
-}
-
-/**
- * Copy the xmlDoc
- * Update the symbolic link if it is not the active plug
- * Update xmlDoc, save to the tpcs_config.xml
- */
-int SetActivePlugin(void *pData, int req_argc, char **req_argv, char ***res_argv, int *res_argc,
- CALLBACKFUNC callback, TSC_METHOD_HANDLE *handle)
-{
- DDBG("SetActivePlugin :%s\n", req_argv[0]);
-
- ConfigBuf *pBuf = NULL;
- xmlDoc *pXml = NULL;
- xmlDoc *pXmlCp = NULL;
- int result = -1;
-
- if (req_argc != 1 || req_argv == NULL)
- return result;
-
- pBuf = *((ConfigBuf **) pData);
-
- pthread_mutex_lock(&(pBuf->configLock));
- pXml = pBuf->pConfigBuffer;
- pXmlCp = xmlCopyDoc(pXml, DO_RECURSIVE_COPY);
- pthread_mutex_unlock(&(pBuf->configLock));
-
- if (pXmlCp == NULL)
- return result;
-
- PrintXmlDoc(pXmlCp);
- if ((ActivePlugin(pBuf, &pXmlCp, (const xmlChar *)req_argv[0]) == 0)
- && UpdateConfigFile((ConfigBuf**) pData, &pXmlCp) == 0)
- {
- SetSuccessReturn(res_argc, res_argv);
- DDBG("==== FINd tha ppid %s\n", req_argv[0]);
- }
- else
- {
- DDBG("==== **** FINd tha ppid %s\n", req_argv[0]);
- SetFailureReturn(res_argc, res_argv);
- }
-
- xmlFreeDoc(pXmlCp);
- return result;
-}
-
-static int WriteXmlToFile(xmlDoc *pXmlDoc, const char* filename)
-{
-
- DDBG("Write xml to file: %s\n", filename);
- int result = -1;
- FILE *pfConfig = fopen(filename, "w");
- if (pfConfig != NULL)
- {
- xmlDocDump(pfConfig, pXmlDoc);
- fclose(pfConfig);
- result = 0;
- }
- return result;
-}
-
-static int InitConfigFile(xmlDoc **pXmlDoc)
-{
- int result = -1;
- DDBG("Size of xml doc in memory :%d\n", sizeof(CONFIG_DEFAULT_STRING));
-
- *pXmlDoc = xmlReadMemory(CONFIG_DEFAULT_STRING, sizeof(CONFIG_DEFAULT_STRING) + 1,
- CONFIG_FILE_NAME,
- NULL, 0);
-
- if (*pXmlDoc != NULL)
- {
- result = 0;
- }
-
- return result;
-}
-
-static bool IsValidTPCSConfig(const char *pFileName, xmlDoc **ppXmlDoc)
-{
- // Create a parse context
- bool ret = FALSE;
- xmlParserCtxt *pParserCtxt = xmlNewParserCtxt();
- xmlDoc *pXmlDoc;
- if (pParserCtxt == NULL)
- {
- DDBG("%s\n", "======Failed to allocate parser context");
- return ret;
- }
- else
- {
- // valid this config file
- // Parse the file, activating the DTD validation option */
- DDBG("------------------ IS VALID config file :%s\n", "---------------------");
- pXmlDoc = xmlCtxtReadFile(pParserCtxt, pFileName, NULL, XML_PARSE_DTDVALID);
- DDBG("--- 1 pxmldoc address: %p\n", pXmlDoc);
- DDBG("file to read:%s\n", pFileName);
- PrintXmlDoc(pXmlDoc);
- if (pXmlDoc != NULL)
- {
- // Check if validation succeeded
- if (pParserCtxt->valid)
- {
- *ppXmlDoc = pXmlDoc;
- DDBG("address of ppxmldoc: %p\n", *ppXmlDoc);
- ret = TRUE;
- }
- }
- else
- {
- DDBG("NOT VALID file: %s\n", pFileName);
- }
-
- xmlFreeParserCtxt(pParserCtxt);
- return ret;
- }
-}
-
-/**
- * Return directory list that has the specified directory within
- */
-static void GetDirsHasPath(const char *dir, const char *search_path, int *pCount,
- char ***name_w_path, char ***appId)
-{
- DIR *pDir = NULL;
- struct dirent *pDirEnt = NULL;
-
- if (!dir || !search_path || !pCount || !appId || !name_w_path)
- return;
-
- pDir = opendir(dir);
- *pCount = 0;
- if (pDir)
- {
- char plugPath[FILE_NAME_MAX_SIZE];
- char appPath[FILE_NAME_MAX_SIZE];
-
- struct stat info;
- while ((pDirEnt = readdir(pDir)) != NULL)
- {
- if (strcmp(pDirEnt->d_name, ".") == 0 || strcmp(pDirEnt->d_name, "..") == 0)
- {
- continue;
- }
- if (pDirEnt->d_type == DT_DIR)
- {
- sprintf(appPath, "%s%s%s", dir, "/", pDirEnt->d_name);
-
- sprintf(plugPath, "%s%s", appPath, PLUGIN_DEFAULT_DIR_NAME);
-
- if (stat(plugPath, &info) == 0)
- {
- if (*pCount == 0)
- {
- *name_w_path = calloc(1, sizeof(char*));
-
- if (*name_w_path)
- {
- (*pCount)++;
- (*name_w_path)[0] = strdup((const char*) appPath);
-
- if ((*name_w_path)[0] == NULL)
- goto clean_up;
- }
- else
- goto clean_up;
-
- *appId = calloc(1, sizeof(char*));
- if (*appId)
- {
- (*appId)[0] = strdup((const char*) pDirEnt->d_name);
- DDBG("COUNT 0, name: %s\n", pDirEnt->d_name);
- if ((*appId)[0] == NULL)
- goto clean_up;
- }
- }
- else
- {
- //TODO: all the realloc * size, use chunk
- *name_w_path = realloc(*name_w_path, sizeof(char*) * (*pCount + 1));
- if (*name_w_path)
- {
- (*pCount)++;
- (*name_w_path)[(*pCount) - 1] = strdup((const char*) appPath);
- if ((*name_w_path)[(*pCount) - 1] == NULL)
- goto clean_up;
-
- *appId = realloc(*appId, sizeof(char*) * (*pCount + 1));
- if (*appId)
- {
- (*appId)[*pCount - 1] = strdup((const char*) pDirEnt->d_name);
- if (((*appId)[*pCount - 1]) == NULL)
- {
- goto clean_up;
- }
- }
- else
- {
- goto clean_up;
- }
- }
- else
- {
- goto clean_up;
- }
- }
- }
- }
- }
-
- goto success;
- }
-
-clean_up:
- CleanupArray(name_w_path, *pCount);
-
-success:
- DDBG("CLOSE dir: %s\n", " " );
- if (pDir)
- closedir(pDir);
-
- return;
-}
-
-/**
- *
- */
-static void CleanupArray(char*** pArr, int len)
-{
- if (pArr)
- {
- while (len > 0)
- {
- len--;
- if ((*pArr)[len])
- {
- free((*pArr)[len]);
- (*pArr)[len] = NULL;
- }
- }
-
- if (*pArr)
- {
- free(*pArr);
- *pArr = NULL;
- }
- }
-}
-
-/*
- * int ftw(const char *dir, int (*fn)(const char *file, const struct stat *sb, int flag), int nopenfd);
- */
-int FileTreeCallback(const char *pFile, const struct stat *pStat, int flag)
-{
- int result = 0;
- if (pStat->st_mode & S_IFREG)
- {
- //DDBG(">>>>>file tree walk :%s, such substring:%s\n", pFile, MANIFEST_FILE_NAME);
- if (EndsWith(pFile, MANIFEST_FILE_NAME) == 0)
- {
- DDBG("FOUNd the file: %s\n", pFile);
- // check if it has the plugin tag
- if (HasTag(PLUGIN_ANTI_VIRUS_TAG, pFile, XPATH_PLUGIN_CATEGORY) == 0)
- {
- // found the library
- DDBG("this app is plugin app:%s\n", pFile);
- result = 1;
- }
- }
- }
- return result;
-}
-
-/**
- * Checks if str ends with needle. Return zero on success otherwise non-zero.
- */
-static int EndsWith(const char *hay, const char *needle)
-{
- size_t haylen, needlelen;
-
- if (!hay || !needle)
- return -1;
-
- needlelen = strlen(needle);
- haylen = strlen(hay);
-
- if (needlelen > haylen)
- return -1;
-
- return strncmp(hay + haylen - needlelen, needle, needlelen);
-}
-
-static void GetNSURI(xmlDoc *pXmlDoc, xmlChar **pns, xmlChar **uri)
-{
- xmlNode *root_node = xmlDocGetRootElement(pXmlDoc);
-
- if (root_node)
- {
- xmlNs *pXmlNS = root_node->ns;
- xmlNs *pXmlNSDef = root_node->nsDef;
-
- if (pXmlNS != NULL)
- {
- if (pXmlNS->prefix != NULL)
- {
- *pns = (xmlChar*) strdup((const char*) pXmlNS->prefix);
- }
- else
- {
- DDBG("root node name:%s\n", root_node->name);
- *pns = (xmlChar*) strdup((const char*) root_node->name);
- }
- }
-
- if (pXmlNSDef != NULL)
- {
- if (pXmlNSDef->href != NULL)
- {
- DDBG("nsdef :%s\n", pXmlNSDef->href);
- *uri = (xmlChar*) strdup((const char*) pXmlNSDef->href);
- }
- }
- }
- return;
-}
-
-/**
- * Get elements from xmlDoc, and output to the count and content
- */
-static void GetConfigElements(xmlDoc **pXmlDoc, xmlChar *pXPath, int *size, char ***content)
-{
- DDBG("GetConfigElements in xpath: %s\n", (char*)pXPath);
- // Scan all the directories that has av category, update its plugin element in config.xml
- xmlXPathContext *pXPathCtx;
- xmlXPathObject *pXPathObj;
-
- pXPathCtx = xmlXPathNewContext(*pXmlDoc);
- if (pXPathCtx != NULL)
- {
- xmlChar *pns = NULL;
- xmlChar *puri = NULL;
- GetNSURI(*pXmlDoc, &pns, &puri);
- if (pns != NULL && puri != NULL)
- {
- if (xmlXPathRegisterNs(pXPathCtx, pns, puri) != 0)
- {
- DDBG("Cannot register xpath :%s\n", "");
- return;
- }
- }
- // Evaluate xpath expression
- pXPathObj = xmlXPathEvalExpression(pXPath, pXPathCtx);
- if (pXPathObj != NULL)
- {
- xmlNode *cur;
- xmlNodeSet *pNodeSet = pXPathObj->nodesetval;
-
- *size = pNodeSet ? pNodeSet->nodeNr : 0;
- if (*size > 0)
- {
- int i = 0;
- *content = calloc(1, sizeof(char*) * (*size));
- DDBG("XAPTH OBJCT FOUND:%s, size:%d\n", "", *size);
- if (*content)
- {
- for (; i < *size; i++)
- {
- if (pNodeSet->nodeTab[i]->type == XML_ELEMENT_NODE)
- {
- cur = pNodeSet->nodeTab[i];
-
- if (*content)
- {
- DDBG("content; %s\n", cur->children->content);
- (*content)[i] = strdup((const char*) cur->children->content);
- }
- }
- }
- }
- else
- {
- DDBG("CANNOT FOUND content:%s\n", "");
- }
-
- }
- xmlXPathFreeObject(pXPathObj);
- }
- if (pns)
- {
- free(pns);
- pns = NULL;
- }
-
- if (puri)
- {
- free(puri);
- puri = NULL;
- }
-
- xmlXPathFreeContext(pXPathCtx);
- }
-}
-
-static int HasTag(const char *pTag, const char *pFileName, const char *xpath)
-{
- int result = 1;
- xmlDoc *pConfigXml = NULL;
-
- if (!pTag)
- return result;
-
- pConfigXml = xmlReadFile(pFileName, NULL, 0);
- if (pConfigXml != NULL)
- {
- int size;
- char **pCategory = NULL;
- GetConfigElements(&pConfigXml, (xmlChar*) xpath, &size, &pCategory);
- if (size > 0)
- {
- DDBG("size is: %d, category:%s\n", size, pCategory[0]);
- int i = 0;
- for (; i < size; i++)
- {
- if (strcmp(pCategory[i], pTag) == 0)
- {
- result = 0;
- break;
- }
- }
- }
- CleanupArray(&pCategory, size);
- }
- xmlFreeDoc(pConfigXml);
- return result;
-}
-
-/*
- * config.xml validation
- * If config.xml.new exists, and it is valid,
- * if it is consistent with symbolic link, switch this to config.xml
- * else if there is config.xml, and
- * if it is valid
- * if it is consistent with symbolic link, buffer the config.xml
- * else based on the symbolic link, update config.xml, then buffer the config.xml
- * else
- * recover the config.xml by scan all the applications, checking symbolic link, create the
- * config.xml, buffer it.
- * Pass the data address to the pData
- */
-int main(int argc, char **argv)
-{
- //TODO: make it a daemon
-
-#ifndef DEBUG
- fork_daemon();
-#endif
-
- //Add methods
- //Start TPCS daemon
- TSC_SERVER_HANDLE hServer = NULL;
- int ret = -1;
-
-
- fprintf(stderr, "TPCS Service Daemon Started%s\n", "");
- //TODO: rename TSC_DBUS_SERVER_PLUGIN_CHANNEL to TSC_DBUS_SERVER_PLUGIN_CHANNEL
- if ((hServer = IpcServerOpen(TSC_DBUS_SERVER_PLUGIN_CHANNEL)) != NULL)
- {
- DDBG("%s", "**** successfully opened server ****\n");
- // Write out the DTD validation file
- FILE *pDTD = fopen(CONFIG_DTD_FILE_W_PATH, "r");
- if (pDTD == NULL)
- {
- pDTD = fopen(CONFIG_DTD_FILE_W_PATH, "w");
- if (pDTD)
- {
- fwrite(CONFIG_DEFAULT_DTD_STRING, strlen(CONFIG_DEFAULT_DTD_STRING), 1, pDTD);
- fclose(pDTD);
- }
- else
- {
- goto done;
- }
- }
- else
- {
- //TODO: close the file, check if the file exists lstat, signature of the file
- }
-
- ConfigBuf *pConfigBuf = calloc(1, sizeof(ConfigBuf));
- if (pConfigBuf == NULL)
- return ret;
- ret = pthread_mutex_init(&(pConfigBuf->configLock), NULL);
- if (ret == -1)
- {
- //TODO: memory clean up
- free(pConfigBuf);
- pConfigBuf = NULL;
- return ret;
- }
-
- if (IsValidTPCSConfig(CONFIG_FILE_NEW_W_PATH, &(pConfigBuf->pConfigBuffer)))
- {
- // switch to config.xml
- if (rename(CONFIG_FILE_NEW_W_PATH, CONFIG_FILE_W_PATH) == 0)
- {
- DDBG("%s has been renamed to :%s\n", CONFIG_FILE_NEW_W_PATH, CONFIG_FILE_W_PATH);
- }
- //TODO: if failed, it will exist,
- }
- else
- {
- DDBG("=== check config.xml not valid config file: %s\n", CONFIG_FILE_NEW_W_PATH);
-
-
- // Buffer config.xml
- if (!IsValidTPCSConfig(CONFIG_FILE_W_PATH, &(pConfigBuf->pConfigBuffer)))
- {
- //Recover config.xml from memory
- InitConfigFile(&(pConfigBuf->pConfigBuffer));
- DDBG("***************** initconfigfile: %p\n", pConfigBuf->pConfigBuffer);
-
- DDBG("Failed to parse file : %s\n", CONFIG_FILE_W_PATH);
-
- // Add plugins by scanning appPath directory
- int count;
- char **paths = NULL;
- GetConfigElements(&(pConfigBuf->pConfigBuffer), (xmlChar*) XPATH_APP_PATHS, &count,
- &paths);
-
- int i;
- int dirCount = 0;
- char **app_path = NULL;
- char **appId = NULL;
- for (i = 0; i < count; i++)
- {
- // Get list of directories under the app path, if it has $appPath/lib/plugin/,
- // search its manifest.xml for av tag, then recompose config.xml
-
- //TODO: if better way to get list of directory
- GetDirsHasPath(paths[i], PLUGIN_DEFAULT_DIR_NAME, &dirCount, &app_path, &appId);
- DDBG("fater get dirshas path:%s\n", PLUGIN_DEFAULT_DIR_NAME);
- if (dirCount > 0)
- {
- // search manifest.xml within the app_path, if found, copy the appid to plugin element
- int j;
- for (j = 0; j < dirCount; j++)
- {
- //ftw return 0: tree exhausted, -1: error, others whatever the FileTreeCallback return
- int result = ftw(app_path[j], FileTreeCallback, 12);
- if (result == 1)
- {
- DDBG("it found the plugin app dir:%s, appID:%s\n", app_path[j], appId[j]);
- //Update plugin element node
- UpdatePluglibList(app_path[j], &(pConfigBuf->pConfigBuffer),
- appId[j]);
- }
- }
- }
- CleanupArray(&appId, dirCount);
- CleanupArray(&app_path, dirCount);
- }
-
- CleanupArray(&paths, count);
-
- // Recover config.xml from memory
- WriteXmlToFile(pConfigBuf->pConfigBuffer, CONFIG_FILE_W_PATH);
- DDBG("before clean up:%s, dircoutn:%d, pathCount:%d, \n", CONFIG_FILE_W_PATH, dirCount, count);
-
- }
- else
- {
- DDBG("Success in paring file: %s\n", CONFIG_FILE_W_PATH);
- }
- }
-
- // Register methods for GetInfoPlugin
- IpcServerMethod method_getPlugin;
- snprintf(method_getPlugin.szMethod, sizeof(method_getPlugin.szMethod), "%s",
- "TPCSGetInfoPlugin");
- method_getPlugin.method = (METHODFUNC) GetInfoPlugin;
- method_getPlugin.pData = &(pConfigBuf->pConfigBuffer);
-
- if (IpcServerAddMethod(hServer, &method_getPlugin) != 0)
- {
- DDBG("%s", "unable to add method GetInfoPlugin\n");
- goto close_server;
- }
-
- // Register methods for InstallPlugin
- IpcServerMethod method_installPlugin;
- snprintf(method_installPlugin.szMethod, sizeof(method_installPlugin.szMethod), "%s",
- "TPCSInstallPlugin");
- method_installPlugin.method = (METHODFUNC) InstallPlugin;
- method_installPlugin.pData = &pConfigBuf;
-
- if (IpcServerAddMethod(hServer, &method_installPlugin) != 0)
- {
- DDBG("%s", "unable to add method InstallPlugin\n");
- goto close_server;
- }
-
- // Register methods for SetActivePlugin
- IpcServerMethod method_setActivePlugin;
- snprintf(method_setActivePlugin.szMethod, sizeof(method_setActivePlugin.szMethod), "%s",
- "TPCSSetActivePlugin");
- method_setActivePlugin.method = (METHODFUNC) SetActivePlugin;
- method_setActivePlugin.pData = &pConfigBuf;
-
- if (IpcServerAddMethod(hServer, &method_setActivePlugin) != 0)
- {
- DDBG("%s", "unable to add method SetActivePlugin\n");
- goto close_server;
- }
-
- // Register methods for UnInstallPlugin
- IpcServerMethod method_uninstallPlugin;
- snprintf(method_uninstallPlugin.szMethod, sizeof(method_uninstallPlugin.szMethod), "%s",
- "TPCSUninstallPlugin");
- method_uninstallPlugin.method = (METHODFUNC) UninstallPlugin;
- method_uninstallPlugin.pData = &pConfigBuf;
-
- if (IpcServerAddMethod(hServer, &method_uninstallPlugin) != 0)
- {
- DDBG("%s", "unable to add method UninstallPlugin\n");
- goto close_server;
- }
-
- DDBG("----------------- START method loop----------%s", "\n");
-
- // Daemon waits here for request from clients.
- IpcServerMainLoop(hServer);
- DDBG("----------------- END method loop----------%s", "\n");
- // Clean up
- DDBG("======================= free xmldoc for isvalidConfig %s\n", "==============");
- DDBG("pconfigbuf address:%p\n", pConfigBuf->pConfigBuffer);
- xmlFreeDoc(pConfigBuf->pConfigBuffer);
- free(pConfigBuf);
-
- IpcServerClose(&hServer);
- }
- else
- {
- DDBG("%s", "unable to open server connection \n");
- ret = -1;
- goto done;
- }
- xmlCleanupParser(); // clean up library for xml library for valgrind
- close_server:
- IpcServerClose(&hServer);
-
- done:
- DDBG("%s", "Unable to start the Daemon \n");
-
- return ret;
-
-}
diff --git a/framework/TPCSSerDaemon.h b/framework/TPCSSerDaemon.h
deleted file mode 100644
index 7dd3e2c..0000000
--- a/framework/TPCSSerDaemon.h
+++ /dev/null
@@ -1,59 +0,0 @@
-#define ERROR_GENERIC -1
-#define RETURN_SUCCESS "0"
-#define RETURN_FAILURE "1"
-
-#define FN_GET_INFO_RTN_COUNT 2
-#define FN_INSTALL_PLUG_RTN_COUNT 2
-#define DO_RECURSIVE_COPY 1
-#define FILE_NAME_MAX_SIZE 128
-#define GENERIC_STRING_SIZE 128
-#define FN_GET_INFO "getInfo"
-#define TAG_VERSION "Version"
-#define TAG_VENDOR_NAME "VendorName"
-#define TAG_PRODUCT_NAME "ProductName"
-#define TAG_APP_ID "AppId"
-#define TAG_PLUG_NODE "Plug"
-#define MANIFEST_FILE_NAME "manifest.xml"
-#define XPATH_PLUGIN_CATEGORY "//Manifest:Manifest/Manifest:Apps/Manifest:UiApp/Manifest:Categories/Manifest:Category"
-#define PLUGIN_ANTI_VIRUS_TAG "http://tizen.org/category/antivirus"
-#define PLUGIN_SYSTEM_PATH "/usr/bin"
-#define PLUGIN_DEFAULT_DIR_NAME "/lib/plugin"
-#define XPATH_PLUGINS "//TPCSConfig/Plugins"
-#define XPATH_PLUGINS_PLUG "//TPCSConfig/Plugins/Plug/AppId"
-#define XPATH_ACTIVE_PLUGIN "//TPCSConfig/Active/AppId"
-#define XPATH_ACTIVE "//TPCSConfig/Active"
-#define XPATH_APP_PATHS "//TPCSConfig/AppPaths/Path"
-#define CONFIG_ENCODING "UTF-8"
-#define CONFIG_DTD_FILE_W_PATH "/usr/bin/tpcs_config.dtd"
-#define CONFIG_FILE_W_PATH "/usr/bin/tpcs_config.xml"
-#define CONFIG_FILE_NEW_W_PATH "/usr/bin/tpcs_config_new.xml"
-#define SYSLINK_PLUG_PATH "/lib/plugin"
-#define ACTIVE_NONE "None"
-#define APP_ID_NULL ""
-#define CONFIG_DEFAULT_STRING "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\
- <!DOCTYPE TPCSConfig SYSTEM \"tpcs_config.dtd\">\n\
- <TPCSConfig>\n\
- <AppPaths>\n\
- <Path>/opt/usr/apps</Path>\n\
- <Path>/sdcard</Path>\n \
- </AppPaths>\n\
- <Active>\n\
- <AppId>None</AppId>\n\
- </Active>\n\
- <Plugins>\n\
- </Plugins>\n\
-</TPCSConfig>"
-
-
-#define CONFIG_DEFAULT_DTD_STRING "<!ELEMENT TPCSConfig (AppPaths, Active, Plugins)>\n\
-<!ELEMENT AppPaths (Path+)>\n\
-<!ELEMENT Active (AppId)>\n\
-<!ELEMENT Plugins (Plug*)>\n\
-<!ELEMENT Plug (Version|VendorName|ProductName|AppId)*>\n\
-<!ELEMENT Path (#PCDATA)>\n\
-<!ELEMENT Version (#PCDATA)>\n\
-<!ELEMENT VendorName (#PCDATA)>\n\
-<!ELEMENT ProductName (#PCDATA)>\n\
-<!ELEMENT AppId (#PCDATA)>"
-#define CONFIG_FILE_NAME "tpcs_config.xml"
-
diff --git a/framework/TSCErrorCodes.h b/framework/TSCErrorCodes.h
deleted file mode 100644
index e345971..0000000
--- a/framework/TSCErrorCodes.h
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- Copyright (c) 2014, McAfee, Inc.
-
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without modification,
- are permitted provided that the following conditions are met:
-
- Redistributions of source code must retain the above copyright notice, this list
- of conditions and the following disclaimer.
-
- Redistributions in binary form must reproduce the above copyright notice, this
- list of conditions and the following disclaimer in the documentation and/or other
- materials provided with the distribution.
-
- Neither the name of McAfee, Inc. nor the names of its contributors may be used
- to endorse or promote products derived from this software without specific prior
- written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
- INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
- OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
- OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#ifndef TSCERRORCODES_H
-#define TSCERRORCODES_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-/**
- * \file TSCErrorCodes.h
- * \brief TSC Error Code Header File
- *
- * This file provides the TSC error code definition.
- */
-
-#define TSC_ERROR_MODULE_GENERIC 1 /* A generic error code. */
-#define ERR_NAME_MODULE_GENERIC "Generic"
-#define ERR_DESC_MODULE_GENERIC "A generic error."
-
-#define TSC_ERROR_CANCELLED 1 /* Operation cancelled. */
-#define ERR_NAME_CANCELLED "Cancelled"
-#define ERR_DESC_CANCELLED "Operation cancelled."
-
-#define TSC_ERROR_DATA_ACCESS 2 /* Unable to access data. */
-#define ERR_NAME_DATA_ACCESS "DataAccess"
-#define ERR_DESC_DATA_ACCESS "Unable to access data."
-
-#define TSC_ERROR_INVALID_PARAM 3 /* Invalid parameter. */
-#define ERR_NAME_INVALID_PARAM "InvalidParam"
-#define ERR_DESC_INVALID_PARAM "Invalid parameter."
-
-#define TSC_ERROR_INSUFFICIENT_RES 4 /* Insufficient resource. */
-#define ERR_NAME_INSUFFICIENT_RES "InsufficientRes"
-#define ERR_DESC_INSUFFICIENT_RES "Insufficient resource."
-
-#define TSC_ERROR_INTERNAL 5 /* Unexpected internal error. */
-#define ERR_NAME_INTERNAL "Internal"
-#define ERR_DESC_INTERNAL "Unexpected internal error."
-
-#define TSC_ERROR_INVALID_HANDLE 6 /* Invalid handle. */
-#define ERR_NAME_INVALID_HANDLE "InvalidHandle"
-#define ERR_DESC_INVALID_HANDLE "Invalid handle."
-
-#define TSC_ERROR_NOT_IMPLEMENTED 7 /* Specified method is not implemented by the Channel server. */
-#define ERR_NAME_NOT_IMPLEMENTED "NotImplemented"
-#define ERR_DESC_NOT_IMPLEMENTED "Specified method is not implemented."
-
-#define TSC_ERROR_REMOVE_METHOD_NOT_FOUND -1
-#define TSC_ERROR_ADD_METHOD_FAILED -1
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* TSCERRORCODES_H */
diff --git a/framework/TWPSerDaemon.c b/framework/TWPSerDaemon.c
deleted file mode 100644
index bc01242..0000000
--- a/framework/TWPSerDaemon.c
+++ /dev/null
@@ -1,344 +0,0 @@
-/*
- Copyright (c) 2014, McAfee, Inc.
-
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without modification,
- are permitted provided that the following conditions are met:
-
- Redistributions of source code must retain the above copyright notice, this list
- of conditions and the following disclaimer.
-
- Redistributions in binary form must reproduce the above copyright notice, this
- list of conditions and the following disclaimer in the documentation and/or other
- materials provided with the distribution.
-
- Neither the name of McAfee, Inc. nor the names of its contributors may be used
- to endorse or promote products derived from this software without specific prior
- written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
- INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
- OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
- OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-/**
- * \file TWPSerDaemon.c
- * \brief TWP Service Daemon source file.
- *
- * This file implements the TWP Service Daemon functions used by Security framework.
- */
-
-#include <malloc.h>
-#include <signal.h>
-#include <stdio.h>
-#include <string.h>
-
-#include "Debug.h"
-#include "IpcForkDaemon.h"
-#include "TWPImpl.h"
-#include "TWPSerDaemon.h"
-
-#define RISK_LEVEL_LEN 2
-#define RETURN_STATUS_STR_LEN 4
-
-int
-TWPSerGetVersion(void *pData, int req_argc, char **req_argv, char ***rep_argv, int *rep_argc,
- CALLBACKFUNC callback, TSC_METHOD_HANDLE *handle)
-{
- // Opens TWP Framework library.
- TWPAPIInit Init;
- TWPLIB_HANDLE hLib;
-
- Init.api_version = TWPAPI_VERSION;
- Init.memallocfunc = (TWPFnMemAlloc) malloc;
- Init.memfreefunc = free;
- hLib = TWPInitLibrary(&Init);
-
- *rep_argc = 1;
- *rep_argv = NULL;
-
- TWP_RESULT iRes;
- char *szRes = NULL;
-
- if (hLib == INVALID_TWPLIB_HANDLE)
- {
- iRes = TWP_INVALID_HANDLE;
- goto close_library;
- }
-
- // Get the Version Information of TWP Framework.
- TWPVerInfo VerInfo;
- iRes = TWPGetVersion(hLib, &VerInfo);
-
- // Check if TWPGetVersion call returned TWP_SUCCESS.
- if (iRes != TWP_SUCCESS)
- {
- DERR("%s", "TWPGetVersion did not return TWP_SUCCESS\n");
- }
- else
- {
- DINFO("TWPGetVersion returns = %s %s\n", VerInfo.szFrameworkVer, VerInfo.szPluginVer);
-
- char *szRepArgv1 = strdup(VerInfo.szFrameworkVer);
- char *szRepArgv2 = strdup(VerInfo.szPluginVer);
- char *szRepArgv3 = strdup(TWP_DAEMON_VERSION);
-
- if (szRepArgv1 == NULL || szRepArgv2 == NULL || szRepArgv3 == NULL)
- {
- DERR("%s", "strdup fails to allocate mem for version info");
-
- free(szRepArgv1);
- free(szRepArgv2);
- free(szRepArgv3);
- iRes = TWP_NOMEM;
- goto close_library;
- }
-
- *rep_argc = 4;
- *rep_argv = (char **) malloc(sizeof(char*) * (*rep_argc));
-
- if (*rep_argv == NULL)
- {
- DERR("%s", "malloc returns Error for reply pointer array\n");
-
- free(szRepArgv1);
- free(szRepArgv2);
- free(szRepArgv3);
- *rep_argc = 1;
- iRes = TWP_NOMEM;
- goto close_library;
- }
-
- (*rep_argv)[1] = szRepArgv1;
- (*rep_argv)[2] = szRepArgv2;
- (*rep_argv)[3] = szRepArgv3;
- }
-
-close_library:
- // Compose the return value.
- // Convert iRes to String.
- szRes = (char *) malloc(sizeof(char) * RETURN_STATUS_STR_LEN);
- if (szRes == NULL)
- {
- DERR("%s", "malloc returns error\n");
- goto err;
- }
- snprintf(szRes, RETURN_STATUS_STR_LEN, "%d", iRes);
-
- if (*rep_argc == 1)
- {
- *rep_argv = (char **) malloc (sizeof(char*) * 1);
- if (*rep_argv == NULL)
- goto err;
- }
-
- //Assign result code.
- (*rep_argv)[0] = szRes;
-
- TWPUninitLibrary(hLib);
- return 0;
-
-err:
- if (*rep_argv != NULL)
- {
- free((*rep_argv)[1]);
- free((*rep_argv)[2]);
- free((*rep_argv)[3]);
- }
- *rep_argc = 0;
- free(*rep_argv);
- *rep_argv = NULL;
- rep_argv = NULL;
- free(szRes);
- TWPUninitLibrary(hLib);
-
- return -1;
-}
-
-int
-TWPSerGetURLReputation(void *pData, int req_argc, char **req_argv, char ***rep_argv, int *rep_argc,
- CALLBACKFUNC callback, TSC_METHOD_HANDLE *handle)
-{
- // open TWP framework library
- TWPAPIInit Init;
- TWPLIB_HANDLE hLib;
-
- Init.api_version = TWPAPI_VERSION;
- Init.memallocfunc = (TWPFnMemAlloc) malloc;
- Init.memfreefunc = free;
- hLib = TWPInitLibrary(&Init);
-
- *rep_argc = 1;
- *rep_argv = NULL;
-
- TWP_RESULT iRes;
- char *szRes = NULL;
-
- if (hLib == INVALID_TWPLIB_HANDLE)
- {
- iRes = TWP_INVALID_HANDLE;
- goto close_library;
- }
-
- // Get Risk Level.
- int iRiskLevel;
- unsigned int uBlkUrlLen;
- char *pBlkUrl = NULL;
-
- // Check for Risk Level of URL.
- iRes = TWPCheckURL(hLib, req_argv[0], &pBlkUrl, &uBlkUrlLen, &iRiskLevel);
-
- // Check if TWPCheckURL call returned TWP_SUCCESS.
- if (iRes != TWP_SUCCESS)
- {
- DERR("%s : %s\n", "TWPCheckURL returned Error", req_argv[0]);
- }
- else
- {
- DINFO("TWPCheckURL returns risk level = %d\n", iRiskLevel);
-
- // convert RiskLevel integer to string
- char *szRiskLevel;
- szRiskLevel = (char *) malloc(sizeof(char) * RISK_LEVEL_LEN);
- if (szRiskLevel == NULL)
- {
- DINFO("%s", "malloc returns error\n");
- iRes = TWP_NOMEM;
- goto close_library;
- }
- snprintf(szRiskLevel, RISK_LEVEL_LEN, "%d", iRiskLevel);
-
- *rep_argc = 2;
- *rep_argv = (char **) malloc(sizeof(char*) * (*rep_argc));
- if (*rep_argv == NULL)
- {
- DINFO("%s", "realloc returns Error for reply pointer array\n");
- free(szRiskLevel);
- *rep_argc = 1;
- iRes = TWP_NOMEM;
- goto close_library;
- }
-
- //Assign Risk Level
- (*rep_argv)[1] = szRiskLevel;
-
- // Assign redirect url if RiskLevel is greater than or equal to TWP_Medium
- if (iRiskLevel >= TWP_Medium)
- {
- *rep_argc = 3;
- *rep_argv = (char **) realloc(*rep_argv, sizeof(char*) * (*rep_argc));
- if (*rep_argv == NULL)
- {
- DINFO("%s", "realloc returns Error for reply pointer array\n");
- free(szRiskLevel);
- *rep_argc = 1;
- iRes = TWP_NOMEM;
- goto close_library;
- }
- (*rep_argv)[2] = pBlkUrl;
- }
- }
-
-close_library:
- // Compose the return value.
- // Convert iRes to String.
- szRes = (char *) malloc(sizeof(char) * RETURN_STATUS_STR_LEN);
- if (szRes == NULL)
- {
- DERR("%s", "malloc returns error\n");
- goto err;
- }
- snprintf(szRes, RETURN_STATUS_STR_LEN, "%d", iRes);
-
- if (*rep_argc == 1)
- {
- *rep_argv = (char **) malloc (sizeof(char*) * 1);
- if (*rep_argv == NULL)
- goto err;
- }
- //Assign Result code
- (*rep_argv)[0] = szRes;
-
- TWPUninitLibrary(hLib);
- return 0;
-
-err:
- if (*rep_argv != NULL)
- {
- free((*rep_argv)[1]);
- free((*rep_argv)[2]);
- }
- *rep_argc = 0;
- free(*rep_argv);
- *rep_argv = NULL;
- rep_argv = NULL;
- free(szRes);
- TWPUninitLibrary(hLib);
- return -1;
-}
-
-int
-main(int argc, char **argv)
-{
-#ifndef DEBUG
- fork_daemon();
-#endif
-
- TSC_SERVER_HANDLE hServer;
-
- if ((hServer = IpcServerOpen(TSC_DBUS_SERVER_WP_CHANNEL)) != NULL)
- {
- DINFO("%s", "successfully opened server \n");
-
- // Register methods for get url reputation
- IpcServerMethod method_1;
- snprintf(method_1.szMethod, sizeof(method_1.szMethod), "%s", "TWPSerGetURLReputation");
- method_1.method = (METHODFUNC) TWPSerGetURLReputation;
- method_1.pData = NULL;
-
- if (IpcServerAddMethod(hServer, &method_1) != 0)
- {
- DERR("%s", "unable to add method TWPSerGetURLReputation\n");
- goto close_server;
- }
-
- // Register methods for getversion
- IpcServerMethod method_2;
- snprintf(method_2.szMethod, sizeof(method_2.szMethod), "%s", "TWPSerGetVersion");
- method_2.method = (METHODFUNC) TWPSerGetVersion;
- method_2.pData = NULL;
-
- if (IpcServerAddMethod(hServer, &method_2) != 0)
- {
- DERR("%s", "unable to add method TWPSerGetVersion\n");
- goto close_server;
- }
-
- // Daemon waits here for request from clients.
- IpcServerMainLoop(hServer);
-
- IpcServerClose(&hServer);
- }
- else
- {
- DFATAL("%s", "unable to open server connection \n");
- goto err;
- }
-
- return 0;
-
-close_server:
- IpcServerClose(&hServer);
-
-err:
- DFATAL("%s", "Unable to start the Daemon \n");
- return -1;
-}
diff --git a/framework/TWPSerDaemon.h b/framework/TWPSerDaemon.h
deleted file mode 100644
index 9211ce0..0000000
--- a/framework/TWPSerDaemon.h
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- Copyright (c) 2014, McAfee, Inc.
-
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without modification,
- are permitted provided that the following conditions are met:
-
- Redistributions of source code must retain the above copyright notice, this list
- of conditions and the following disclaimer.
-
- Redistributions in binary form must reproduce the above copyright notice, this
- list of conditions and the following disclaimer in the documentation and/or other
- materials provided with the distribution.
-
- Neither the name of McAfee, Inc. nor the names of its contributors may be used
- to endorse or promote products derived from this software without specific prior
- written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
- INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
- OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
- OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#ifndef TWPSERDAEMON_H
-#define TWPSERDAEMON_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * \file TWPSerDaemon.h
- * \brief TWP Server Daemon Header file.
- *
- * This file has the function prototypes.
- * These functions should not be called directly but instead through IpcClient.h APIs
- */
-
-#include "IpcServer.h"
-
-#define TWP_DAEMON_VERSION "1.0.0"
-
-/*==================================================================================================
- FUNCTION PROTOTYPES
-==================================================================================================*/
-/**
- * \brief handler method to get the version information.
- * This will be called by IpcServer library with the following input/output params.
- * This can be both synchronous and asynchronous API.
- *
- * \param[in] pData - contextual data.
- * \param[in] req_argc - set to 0.
- * \param[in] req_argv - set to null.
- * \param[out] rep_argc - set to 0, 1 or 4.
- * \param[out] rep_argv - contains 0, 1 or 4 strings for result code, framework version, plugin version, daemon version.
- * \param[in] callback - method callback.
- * \param[in] handle - handler.
- * \return Return Type (int) \n
- */
-int TWPSerGetVersion(void *pData, int req_argc, char **req_argv, char ***rep_argv, int *rep_argc,
- CALLBACKFUNC callback, TSC_METHOD_HANDLE *handle);
-
-/**
- * \brief handler method to get the URL Reputation.
- * This will be called by IpcServer library with the following input/output params.
- * This can be both synchronous and asynchronous API.
- *
- * \param[in] pData - contextual data.
- * \param[in] req_argc - set to 1.
- * \param[in] req_argv - set to the URL required to check reputation.
- *
- * \param[out] rep_argc - set to 0, 1, 2 or 3.
- * \param[out] rep_argv - contains 0, 1, 2 or 3 strings, first is the result code, second is the risklevel, third is the redirect URL.
- * redirect URL is returned only if risk level is greater than or equal to TWP_Medium.
- * \param[in] callback - method callback.
- * \param[in] handle - handler.
- * \return Return Type (int) \n
- */
-int TWPSerGetURLReputation(void *pData, int req_argc, char **req_argv, char ***rep_argv, int *rep_argc,
- CALLBACKFUNC callback, TSC_METHOD_HANDLE *handle);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* TWPSERDAEMON_H */
diff --git a/packaging/com.tsc.ipc.server.plugin.conf b/packaging/com.tsc.ipc.server.plugin.conf
deleted file mode 100644
index 0be2c8d..0000000
--- a/packaging/com.tsc.ipc.server.plugin.conf
+++ /dev/null
@@ -1,13 +0,0 @@
-<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
- "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
-<busconfig>
- <policy user="root">
- <allow own="com.tsc.ipc.server.plugin"/>
- </policy>
- <policy at_console="true">
- <allow send_destination="com.tsc.ipc.server.plugin"/>
- </policy>
- <policy context="default">
- <deny send_destination="com.tsc.ipc.server.plugin"/>
- </policy>
-</busconfig>
diff --git a/packaging/com.tsc.ipc.server.wp.conf b/packaging/com.tsc.ipc.server.wp.conf
deleted file mode 100644
index a97c7d6..0000000
--- a/packaging/com.tsc.ipc.server.wp.conf
+++ /dev/null
@@ -1,13 +0,0 @@
-<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
- "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
-<busconfig>
- <policy user="root">
- <allow own="com.tsc.ipc.server.wp"/>
- </policy>
- <policy at_console="true">
- <allow send_destination="com.tsc.ipc.server.wp"/>
- </policy>
- <policy context="default">
- <deny send_destination="com.tsc.ipc.server.wp"/>
- </policy>
-</busconfig>
diff --git a/packaging/csf-framework.spec b/packaging/csf-framework.spec
index df1e688..dc42cc3 100644
--- a/packaging/csf-framework.spec
+++ b/packaging/csf-framework.spec
@@ -7,14 +7,8 @@ Group: Security/Libraries
URL: http://tizen.org
Source: %{name}-%{version}.tar.gz
Source1001: csf-framework.manifest
-Source1002: com.tsc.ipc.server.plugin.conf
-Source1003: com.tsc.ipc.server.wp.conf
-Source1004: tpcsserdaemon.service
-Source1005: twpserdaemon.service
BuildRequires: pkgconfig(libtzplatform-config)
-BuildRequires: pkgconfig(dbus-glib-1)
BuildRequires: pkgconfig(dlog)
-BuildRequires: pkgconfig(libxml-2.0)
%description
A general purpose content screening and reputation solution.
@@ -30,43 +24,12 @@ Development files
%prep
%setup -q
cp %{SOURCE1001} .
-cp %{SOURCE1002} .
-cp %{SOURCE1003} .
-cp %{SOURCE1004} .
-cp %{SOURCE1005} .
%build
-
-# Build Framework Library
make -C framework -f Makefile all VERSION=%version PREFIX=%_prefix
-# Build IPC Client Library
-make -C framework -f Makefile_channel_client all
-
-# Build IPC Server Library
-make -C framework -f Makefile_channel_server all
-
-# Build Plugin Control Service
-make -C framework -f Makefile_TPCSSerDaemon all
-
-# Build Web Protection Control Service
-make -C framework -f Makefile_TWPSerDaemon all
-
%install
rm -rf %{buildroot}
-mkdir -p %{buildroot}%{_bindir}
-mkdir -p %{buildroot}%{_libdir}
-mkdir -p %{buildroot}%{_unitdir}
-mkdir -p %{buildroot}/%{_sysconfdir}/dbus-1/system.d
-install -D framework/lib/libscclient.so %{buildroot}%{_libdir}/
-install -D framework/lib/libscserver.so %{buildroot}%{_libdir}/
-install -D framework/bin/TPCSSerDaemon %{buildroot}%{_bindir}/
-install -D framework/bin/TWPSerDaemon %{buildroot}%{_bindir}/
-install -m0644 %{SOURCE1002} %{buildroot}%{_sysconfdir}/dbus-1/system.d/
-install -m0644 %{SOURCE1003} %{buildroot}%{_sysconfdir}/dbus-1/system.d/
-install -m0644 %{SOURCE1004} %{buildroot}%{_unitdir}
-install -m0644 %{SOURCE1005} %{buildroot}%{_unitdir}
-
mkdir -p %buildroot%_includedir/csf
mkdir -p %buildroot%_libdir/pkgconfig
@@ -75,47 +38,14 @@ make install -C framework \
HEADER_DESTDIR=%buildroot%_includedir/csf \
VERSION=%version
-%post
-/sbin/ldconfig
-systemctl daemon-reload
-if [ $1 = 1 ]; then
- systemctl restart tpcsserdaemon.service
- systemctl restart twpserdaemon.service
- systemctl enable tpcsserdaemon.service -q
- systemctl enable twpserdaemon.service -q
-fi
-
-%preun
-if [ $1 = 0 ]; then
- systemctl stop tpcsserdaemon.service
- systemctl stop twpserdaemon.service
- systemctl disable tpcsserdaemon.service -q
- systemctl disable twpserdaemon.service -q
-fi
+%post -p /sbin/ldconfig
-%postun
-/sbin/ldconfig
-if [ $1 = 0 ]; then
- systemctl daemon-reload
-fi
-rm -fr /usr/bin/tpcs_config.dtd
-rm -fr /usr/bin/tpcs_config.xml
+%postun -p /sbin/ldconfig
%files
%manifest %{name}.manifest
%license LICENSE
-%defattr(-,root,root,-)
%{_libdir}/libsecfw.so.*
-%{_libdir}/libscclient.so
-%{_libdir}/libscserver.so
-%defattr(0755,root,root)
-%{_bindir}/TPCSSerDaemon
-%{_bindir}/TWPSerDaemon
-%defattr(0644,root,root)
-%config %{_sysconfdir}/dbus-1/system.d/com.tsc.ipc.server.plugin.conf
-%config %{_sysconfdir}/dbus-1/system.d/com.tsc.ipc.server.wp.conf
-%{_unitdir}/tpcsserdaemon.service
-%{_unitdir}/twpserdaemon.service
%files devel
%_includedir/csf/TCSErrorCodes.h
diff --git a/packaging/tpcsserdaemon.service b/packaging/tpcsserdaemon.service
deleted file mode 100644
index db91ec1..0000000
--- a/packaging/tpcsserdaemon.service
+++ /dev/null
@@ -1,11 +0,0 @@
-[Unit]
-Description=CSF Tizen Plugin Control Service Daemon (TPCSSerDaemon)
-
-[Service]
-Type=dbus
-ExecStart=/usr/bin/TPCSSerDaemon
-BusName=com.tsc.ipc.server.plugin
-Restart=always
-
-[Install]
-WantedBy=multi-user.target
diff --git a/packaging/twpserdaemon.service b/packaging/twpserdaemon.service
deleted file mode 100644
index 815da09..0000000
--- a/packaging/twpserdaemon.service
+++ /dev/null
@@ -1,11 +0,0 @@
-[Unit]
-Description=CSF Tizen Web Protection Service Daemon (TWPSerDaemon)
-
-[Service]
-Type=dbus
-ExecStart=/usr/bin/TWPSerDaemon
-BusName=com.tsc.ipc.server.wp
-Restart=always
-
-[Install]
-WantedBy=multi-user.target
diff --git a/test/scripts/MfeTPCSSerDaemonToEmul.sh b/test/scripts/MfeTPCSSerDaemonToEmul.sh
deleted file mode 100755
index 6d047a2..0000000
--- a/test/scripts/MfeTPCSSerDaemonToEmul.sh
+++ /dev/null
@@ -1,49 +0,0 @@
-#!/bin/bash
-
-. ./scripts/PrepareForEmul.sh
-#export TCS_CFG="debug"
-
-echo -e "\nbuilding security channel CLIENT..."
-pushd ../framework
-make -f Makefile_channel_client clean
-make -f Makefile_channel_client
-
-echo -e "\nbuilding security channel SERVER..."
-make -f Makefile_channel_server clean
-make -f Makefile_channel_server
-
-echo -e "\nbuilding TPCS Ser Daemon..."
-make -f Makefile_TPCSSerDaemon clean
-make -f Makefile_TPCSSerDaemon
-popd
-
-echo -e "\nbuilding test cases..."
-pushd test_cases/tpcsserdaemon
-make clean
-make
-popd
-
-echo -e "\ncleanup test files on device ..."
-sdb -e root on
-sdb -e shell rm -rf /tmp/tsc_test
-
-echo -e "\ncopying test files to device ..."
-mkdir -p tsc_test/
-cp ../framework/lib/libscclient.so tsc_test/
-cp ../framework/lib/libscserver.so tsc_test/
-cp scripts/TPCSSerDaemonTest.sh tsc_test/Test.sh
-cp test_cases/tpcsserdaemon/bin/tpcsserdaemontest tsc_test/
-cp ../framework/bin/TPCSSerDaemon tsc_test/TPCSSerDaemon
-
-sdb -e push tsc_test /tmp/tsc_test
-sdb -e push test_cases/q7097a278m /opt/usr/apps/q7097a278m
-sdb -e push test_cases/u7097a278m /opt/usr/apps/u7097a278m
-sdb -e push test_cases/n7097a278m /opt/usr/apps/n7097a278m
-sdb -e push tsc_test/Test.sh /usr/bin/Test.sh
-
-echo -e "\n@@@@@@@@@@@@@@@@@@@@@@@@@@@"
-echo "preparation is done, please login to your device and perform following instructions"
-echo "sdb -e shell"
-echo "cd /usr/bin"
-echo "chmod +x Test.sh (optional)"
-echo "./Test.sh"
diff --git a/test/scripts/MfeTWPSerDaemonToEmul.sh b/test/scripts/MfeTWPSerDaemonToEmul.sh
deleted file mode 100755
index 78ee2bb..0000000
--- a/test/scripts/MfeTWPSerDaemonToEmul.sh
+++ /dev/null
@@ -1,62 +0,0 @@
-#!/bin/bash
-
-. ./scripts/PrepareForEmul.sh
-#export TCS_CFG="debug"
-
-echo -e "\nbuilding libsecfw.so..."
-pushd ../framework
-make clean;
-make
-
-echo -e "\nbuilding security channel CLIENT..."
-make -f Makefile_channel_client clean
-make -f Makefile_channel_client
-
-echo -e "\nbuilding security channel SERVER..."
-make -f Makefile_channel_server clean
-make -f Makefile_channel_server
-
-echo -e "\nbuilding TWPSerDaemon..."
-make -f Makefile_TWPSerDaemon clean
-make -f Makefile_TWPSerDaemon
-popd
-
-echo -e "\nbuilding libwpengine.so..."
-pushd ../plugin
-make clean
-make
-popd
-
-echo -e "\nbuilding test cases ..."
-pushd test_cases/twpserdaemon
-make clean
-make
-popd
-
-echo -e "\ncleanup test files on emulator ..."
-sdb -e root on
-sdb -e shell rm -rf /tmp/twpserdaemon_test
-
-echo -e "\ncopying test files to emulator ..."
-mkdir -p twpserdaemon_test/
-cp ../framework/lib/libscclient.so twpserdaemon_test/
-cp ../framework/lib/libscserver.so twpserdaemon_test/
-cp ../framework/lib/libsecfw.so twpserdaemon_test/
-cp scripts/TWPSerDaemonTest.sh twpserdaemon_test/Test.sh
-cp ../framework/bin/TWPSerDaemon twpserdaemon_test/
-cp test_cases/twpserdaemon/bin/twpserdaemontest twpserdaemon_test/
-cp test_cases/mfe-testcontents/.tcs.cfg twpserdaemon_test/
-
-cp ../plugin/plugin_i386_release/libwpengine.so twpserdaemon_test/
-
-sdb -e push twpserdaemon_test /tmp/twpserdaemon_test
-
-# push Test.sh to /usr/bin
-sdb -e push scripts/TWPSerDaemonTest.sh /usr/bin/Test.sh
-
-echo -e "\n@@@@@@@@@@@@@@@@@@@@@@@@@@@"
-echo "preparation is done, please login to the emulator and perform following instructions"
-echo "sdb -e shell"
-echo "cd /usr/bin/"
-echo "chmod +x Test.sh (optional)"
-echo "./Test.sh" \ No newline at end of file
diff --git a/test/scripts/TPCSSerDaemonTest.sh b/test/scripts/TPCSSerDaemonTest.sh
deleted file mode 100755
index d54fb43..0000000
--- a/test/scripts/TPCSSerDaemonTest.sh
+++ /dev/null
@@ -1,27 +0,0 @@
-#!/bin/bash
-
-#echo EmbkcJFK7q > /proc/$$/attr/current
-killall TPCSSerDaemon
-killall tpcsserdaemontest
-killall TWPSerDaemon
-killall twpserdaemontest
-
-echo "copying test plug-in ..."
-#export LD_LIBRARY_PATH=$PWD
-cp -f /tmp/tsc_test/libscclient.so /usr/lib/
-cp -f /tmp/tsc_test/libscserver.so /usr/lib/
-cp -f /tmp/tsc_test/TPCSSerDaemon /usr/bin/
-cp -f /tmp/tsc_test/tpcsserdaemontest /usr/bin/
-
-echo "setup environment ..."
-#mkdir testcontents-1
-#export TWP_CONTENT_PATH=testcontents-1
-
-echo "Do following to run the test cases ..."
-echo "cd /usr/bin/"
-echo "./tpcsserdaemontest"
-
-
-#echo "cleanup test contents ..."
-#rm -rf testcontents-1
-
diff --git a/test/scripts/TWPSerDaemonTest.sh b/test/scripts/TWPSerDaemonTest.sh
deleted file mode 100755
index 88f5860..0000000
--- a/test/scripts/TWPSerDaemonTest.sh
+++ /dev/null
@@ -1,33 +0,0 @@
-#!/bin/bash
-
-#echo EmbkcJFK7q > /proc/$$/attr/current
-
-killall TWPSerDaemon
-killall twpserdaemontest
-killall TPCSSerDaemon
-killall tpcsserdaemontest
-
-echo "copying test plug-in ..."
-#export LD_LIBRARY_PATH=$PWD
-cp -f /tmp/twpserdaemon_test/libscclient.so /usr/lib/
-cp -f /tmp/twpserdaemon_test/libscserver.so /usr/lib/
-cp -f /tmp/twpserdaemon_test/libsecfw.so /usr/lib/
-cp -f /tmp/twpserdaemon_test/TWPSerDaemon /usr/bin/
-cp -f /tmp/twpserdaemon_test/twpserdaemontest /usr/bin/
-
-mkdir -p /opt/usr/share/sec_plugin
-cp -f /tmp/twpserdaemon_test/libwpengine.so /opt/usr/share/sec_plugin/
-mkdir -p /opt/usr/apps/EmbkcJFK7q/data/database
-cp -f /tmp/twpserdaemon_test/.tcs.cfg /opt/usr/apps/EmbkcJFK7q/data/
-echo "setup environment ..."
-#mkdir testcontents-1
-#export TWP_CONTENT_PATH=testcontents-1
-
-echo "Do following to run the test cases ..."
-echo "cd /usr/bin/"
-echo "./twpserdaemontest"
-#echo "end of test cases ..."
-
-#echo "cleanup test contents ..."
-#rm -rf testcontents-1
-