diff options
-rw-r--r-- | src/lib/dlt_user.c | 94 | ||||
-rw-r--r-- | tests/CMakeLists.txt | 3 | ||||
-rw-r--r-- | tests/dlt-test-preregister-context.c | 32 |
3 files changed, 95 insertions, 34 deletions
diff --git a/src/lib/dlt_user.c b/src/lib/dlt_user.c index e4d13bb..b996726 100644 --- a/src/lib/dlt_user.c +++ b/src/lib/dlt_user.c @@ -496,8 +496,8 @@ int dlt_init_common(void) if (atexit_registered == 0) { - atexit(dlt_user_atexit_handler); atexit_registered = 1; + atexit(dlt_user_atexit_handler); } #ifdef DLT_TEST_ENABLE @@ -772,6 +772,11 @@ int dlt_register_app(const char *appid, const char * description) ret = dlt_user_log_send_register_application(); + if (( ret == DLT_RETURN_OK ) && (dlt_user.dlt_log_handle!=-1)) + { + ret = dlt_user_log_resend_buffer(); + } + return ret; } int dlt_register_context(DltContext *handle, const char *contextid, const char * description) @@ -790,15 +795,6 @@ int dlt_register_context(DltContext *handle, const char *contextid, const char * DLT_SEM_LOCK(); - if (dlt_user.appID[0]=='\0') - { - snprintf(str, DLT_USER_BUFFER_LENGTH, "No application registered while trying to register ContextID %4s!\n", contextid); - dlt_log(LOG_WARNING, str); - - DLT_SEM_FREE(); - return -1; - } - if ((contextid==0) || (contextid[0]=='\0')) { DLT_SEM_FREE(); @@ -827,19 +823,6 @@ int dlt_register_context_ll_ts(DltContext *handle, const char *contextid, const } } - DLT_SEM_LOCK(); - - if (dlt_user.appID[0]=='\0') - { - snprintf(str, DLT_USER_BUFFER_LENGTH, "No application registered while trying to register ContextID %4s!\n", contextid); - dlt_log(LOG_WARNING, str); - - DLT_SEM_FREE(); - return -1; - } - - DLT_SEM_FREE(); - if ((contextid==0) || (contextid[0]=='\0')) { return -1; @@ -3458,9 +3441,11 @@ DltReturnValue dlt_user_log_send_log(DltContextData *log, int mtype) /* try to resent old data first */ ret = DLT_RETURN_OK; - if(dlt_user.dlt_log_handle!=-1) - ret = dlt_user_log_resend_buffer(); - if(ret==DLT_RETURN_OK) + if((dlt_user.dlt_log_handle!=-1) && (dlt_user.appID[0]!='\0')) + { + ret = dlt_user_log_resend_buffer(); + } + if((ret == DLT_RETURN_OK) && (dlt_user.appID[0] != '\0')) { /* resend ok or nothing to resent */ #ifdef DLT_SHM_ENABLE @@ -3494,7 +3479,7 @@ DltReturnValue dlt_user_log_send_log(DltContextData *log, int mtype) } /* store message in ringbuffer, if an error has occured */ - if (ret!=DLT_RETURN_OK) + if ((ret!=DLT_RETURN_OK) || (dlt_user.appID[0] == '\0')) { DLT_SEM_LOCK(); @@ -3514,7 +3499,7 @@ DltReturnValue dlt_user_log_send_log(DltContextData *log, int mtype) DLT_SEM_FREE(); // Fail silenty if FIFO is not open - if(dlt_user_queue_resend() < 0 && dlt_user.dlt_log_handle >= 0) + if((dlt_user.appID[0] != '\0') &&(dlt_user_queue_resend() < 0) && (dlt_user.dlt_log_handle >= 0)) { ;//dlt_log(LOG_WARNING, "dlt_user_log_send_log: Failed to queue resending.\n"); } @@ -3672,7 +3657,7 @@ int dlt_user_log_send_register_context(DltContextData *log) { DltUserHeader userheader; DltUserControlMsgRegisterContext usercontext; - DltReturnValue ret = 0; + DltReturnValue ret = DLT_RETURN_ERROR; if (log==0) { @@ -3684,7 +3669,7 @@ int dlt_user_log_send_register_context(DltContextData *log) return -1; } - if ((dlt_user.appID[0]=='\0') || (log->handle->contextID=='\0')) + if (log->handle->contextID=='\0') { return -1; } @@ -3719,10 +3704,14 @@ int dlt_user_log_send_register_context(DltContextData *log) } /* log to FIFO */ - ret=dlt_user_log_out3(dlt_user.dlt_log_handle, &(userheader), sizeof(DltUserHeader), &(usercontext), sizeof(DltUserControlMsgRegisterContext),log->context_description,usercontext.description_length); + if (dlt_user.appID[0]!='\0') + { + ret = dlt_user_log_out3(dlt_user.dlt_log_handle, &(userheader), sizeof(DltUserHeader), &(usercontext), sizeof(DltUserControlMsgRegisterContext),log->context_description,usercontext.description_length); + } + /* store message in ringbuffer, if an error has occured */ - if (ret!=DLT_RETURN_OK) + if ((ret != DLT_RETURN_OK) || (dlt_user.appID[0] == '\0')) { DLT_SEM_LOCK(); @@ -3738,7 +3727,7 @@ int dlt_user_log_send_register_context(DltContextData *log) DLT_SEM_FREE(); - if(dlt_user_queue_resend() < 0 && dlt_user.dlt_log_handle >= 0) + if((dlt_user.appID[0] != '\0') && (dlt_user_queue_resend() < 0) && (dlt_user.dlt_log_handle >= 0)) { ;//dlt_log(LOG_WARNING, "dlt_user_log_send_register_context: Failed to queue resending.\n"); } @@ -3764,7 +3753,7 @@ int dlt_user_log_send_unregister_context(DltContextData *log) return -1; } - if ((dlt_user.appID[0]=='\0') || (log->handle->contextID=='\0')) + if (log->handle->contextID=='\0') { return -1; } @@ -4172,6 +4161,11 @@ int dlt_user_log_resend_buffer(void) int num,count; int size; DltReturnValue ret; + + if (dlt_user.appID[0]=='\0') + { + return 0; + } /* Send content of ringbuffer */ DLT_SEM_LOCK(); @@ -4186,6 +4180,38 @@ int dlt_user_log_resend_buffer(void) if (size>0) { + DltUserHeader *userheader = (DltUserHeader*) (dlt_user.resend_buffer); + /* Add application id to the messages of needed*/ + if (dlt_user_check_userheader(userheader)) + { + switch (userheader->message) + { + case DLT_USER_MESSAGE_REGISTER_CONTEXT: + { + DltUserControlMsgRegisterContext *usercontext = (DltUserControlMsgRegisterContext*) (dlt_user.resend_buffer+sizeof(DltUserHeader)); + if ((usercontext != 0) && (usercontext->apid[0]=='\0')) + { + dlt_set_id(usercontext->apid,dlt_user.appID); + } + break; + } + case DLT_USER_MESSAGE_LOG: + { + DltExtendedHeader * extendedHeader = (DltExtendedHeader *)(dlt_user.resend_buffer+sizeof(DltUserHeader)+ + sizeof(DltStandardHeader)+sizeof(DltStandardHeaderExtra) - DLT_ID_SIZE); + if ((extendedHeader) != 0 && (extendedHeader->apid[0]=='\0')) + { // if application id is empty, add it + dlt_set_id(extendedHeader->apid,dlt_user.appID); + } + break; + } + default: + { + break; + } + } + } + #ifdef DLT_SHM_ENABLE dlt_shm_push(&dlt_user.dlt_shm,dlt_user.resend_buffer+sizeof(DltUserHeader),size-sizeof(DltUserHeader),0,0,0,0); diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index c40e681..6cc1006 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -13,8 +13,11 @@ add_executable(gtest_dlt_user gtest_dlt_user.cpp) add_executable(gtest_dlt_daemon_common gtest_dlt_daemon_common.cpp ../src/daemon/dlt_daemon_common.c) add_executable(dlt_test_receiver dlt_test_receiver.c) add_executable(dlt_env_ll_unit_test dlt_env_ll_unit_test.cpp) +add_executable(dlt-test-preregister-context dlt-test-preregister-context.c) target_link_libraries(gtest_dlt_common gtest gtest_main dlt) target_link_libraries(gtest_dlt_user gtest gtest_main dlt) target_link_libraries(gtest_dlt_daemon_common gtest gtest_main dlt) target_link_libraries(dlt_test_receiver dlt) target_link_libraries(dlt_env_ll_unit_test gtest gtest_main dlt) +target_link_libraries(dlt-test-preregister-context gtest gtest_main dlt) + diff --git a/tests/dlt-test-preregister-context.c b/tests/dlt-test-preregister-context.c new file mode 100644 index 0000000..ad10d6f --- /dev/null +++ b/tests/dlt-test-preregister-context.c @@ -0,0 +1,32 @@ +/** + * Copyright (C) 2015 Intel Corporation + * + */ + +#include <unistd.h> /* for fork() */ + +#include "dlt.h" + +/** + * @brief sample code for using pre-registered contexts + */ +int main() +{ + DltContext mainContext; + DLT_REGISTER_CONTEXT(mainContext, "CTXP", "main context"); + + DLT_LOG(mainContext, DLT_LOG_WARN, DLT_STRING("First message before app registered")); + usleep(200000); + + DLT_LOG(mainContext, DLT_LOG_WARN, DLT_STRING("Second message before app registered")); + usleep(200000); + + DLT_REGISTER_APP("PRNT", "Sample pre-register application"); + + DLT_LOG(mainContext, DLT_LOG_WARN, DLT_STRING("First message after app registered")); + usleep(200000); + + DLT_UNREGISTER_APP(); + + return 0; +} |