diff options
Diffstat (limited to 'src/system/dlt-system-shell.c')
-rw-r--r-- | src/system/dlt-system-shell.c | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/src/system/dlt-system-shell.c b/src/system/dlt-system-shell.c new file mode 100644 index 0000000..758f5fc --- /dev/null +++ b/src/system/dlt-system-shell.c @@ -0,0 +1,104 @@ +/** + * @licence app begin@ + * Copyright (C) 2012 BMW AG + * + * This file is part of GENIVI Project Dlt - Diagnostic Log and Trace console apps. + * + * Contributions are licensed to the GENIVI Alliance under one or more + * Contribution License Agreements. + * + * \copyright + * This Source Code Form is subject to the terms of the + * Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with + * this file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * + * \author Lassi Marttala <lassi.lm.marttala@partner.bmw.de> BMW 2012 + * + * \file dlt-system-logfile.c + * For further information see http://www.genivi.org/. + * @licence end@ + */ + +/******************************************************************************* +** ** +** SRC-MODULE: dlt-system-shell.c ** +** ** +** TARGET : linux ** +** ** +** PROJECT : DLT ** +** ** +** AUTHOR : Lassi Marttala <lassi.lm.marttala@partner.bmw.de> ** +** Alexander Wenzel Alexander.AW.Wenzel@bmw.de ** +** ** +** PURPOSE : ** +** ** +** REMARKS : ** +** ** +** PLATFORM DEPENDANT [yes/no]: yes ** +** ** +** TO BE CHANGED BY USER [yes/no]: no ** +** ** +*******************************************************************************/ + +/******************************************************************************* +** Author Identity ** +******************************************************************************** +** ** +** Initials Name Company ** +** -------- ------------------------- ---------------------------------- ** +** lm Lassi Marttala BMW ** +*******************************************************************************/ +#include "dlt.h" +#include "dlt-system.h" + +#include <string.h> +#include <stdlib.h> + +DLT_IMPORT_CONTEXT(dltsystem) +DLT_DECLARE_CONTEXT(shellContext) + +int dlt_shell_injection_callback(uint32_t service_id, void *data, uint32_t length) +{ + DLT_LOG(dltsystem,DLT_LOG_DEBUG, + DLT_STRING("dlt-system-shell, injection callback")); + char text[1024]; + int syserr = 0; + + strncpy(text,data,length); + + DLT_LOG(dltsystem,DLT_LOG_DEBUG, + DLT_STRING("dlt-system-shell, injection injection id:"), + DLT_UINT32(service_id)); + DLT_LOG(dltsystem,DLT_LOG_DEBUG, + DLT_STRING("dlt-system-shell, injection data:"), + DLT_STRING(text)); + + switch(service_id) + { + case 0x1001: + if((syserr = system(text)) != 0) + { + DLT_LOG(dltsystem,DLT_LOG_ERROR, + DLT_STRING("dlt-system-shell, abnormal exit status."), + DLT_STRING(text), + DLT_INT(syserr)); + } + break; + default: + DLT_LOG(dltsystem,DLT_LOG_ERROR, + DLT_STRING("dlt-system-shell, unknown command received."), + DLT_UINT32(service_id), + DLT_STRING(text)); + break; + } + return 0; +} + +void init_shell() +{ + DLT_LOG(dltsystem,DLT_LOG_DEBUG, + DLT_STRING("dlt-system-shell, register callback")); + DLT_REGISTER_CONTEXT(shellContext,"CMD","Execute Shell commands"); + DLT_REGISTER_INJECTION_CALLBACK(shellContext, 0x1001, dlt_shell_injection_callback); +} |