#include #include #include #include "log_console.h" #include "log_types.h" #include "log_common.h" #include "rpc_conn.h" #define LOG_CONF_COSOLE_FILE_NAME "log-console.conf" #define LOG_REDIRECT_CONSOLE "/dev/console" static int write_console_content(FILE *fp, const u8 level, const char *filter_mod, void *arg) { DIR *dir; if ((dir = opendir(LOG_DEV_DIR)) == NULL) { ULOG_ERR(g_log, "Open dir:[%s] is failure:%d", LOG_DEV_DIR, strerror(errno)); return -1; } struct dirent *ptr; char path[MAX_PATH_SZ]; while ((ptr = readdir(dir)) != NULL) { if ((strcmp(ptr->d_name, ".") == 0) || (strcmp(ptr->d_name, "..") == 0) || (ptr->d_type == DT_DIR)) { ///current dir OR parrent dir ULOG_DEBUG(g_log,"The file:[%s] or directory jump over", ptr->d_name); continue; } if ((strstr(ptr->d_name, "ttyS") == NULL)) { ULOG_DEBUG(g_log,"The file:[%s] isn't redirected", ptr->d_name); continue; } ULOG_DEBUG(g_log, "ttyS name:%s", ptr->d_name); if (snprintf(path, sizeof(path), "%s%s", LOG_DEV_DIR, ptr->d_name) < 0) { ULOG_ERR(g_log, "Setting %s of log console is failure", ptr->d_name); return -1; } if (write_conf_content_authorizing(fp, level, filter_mod, path) != 0) { ULOG_ERR(g_log, "Writing tty[module:%s] of log is failure", filter_mod); return -1; } } return 0; } static int config_log_console(const log_console_t *conf) { int ret = -1; switch (conf->on) { case LOG_OFF: ret = log_off_with_file(LOG_CONF_PATH, LOG_CONF_COSOLE_FILE_NAME); break; case LOG_ON: if (log_conf(conf->level, LOG_CONF_PATH, LOG_CONF_COSOLE_FILE_NAME, conf->module, write_console_content, NULL) != 0) { ULOG_ERR(g_log, "Log's console configure which is written is failure"); ret = -1; } else { ret = 0; } break; default: ULOG_WARNING(g_log, "Unknown on value:%u", conf->on); break; } return ret; } void rpc_conf_log_console(rpc_conn *conn, pointer input, int input_len, pointer data) { u32 need_len = sizeof(log_console_t); if (input_len < need_len) { ULOG_WARNING(g_log, "The input paramter of rpc log console is needed length of %u, but the actual length is %u", need_len, input_len); return; } if (config_log_console((const log_console_t *)input) != 0) { ULOG_ERR(g_log, "Configuring console of log is faiure"); rpc_return_error(conn, RET_ERR, "Configuring console of log is faiure"); return; } rpc_return_null(conn); }