#ifndef SP_CFG_H #define SP_CFG_H #pragma once #ifdef __cplusplus extern "C" { #endif #include "list.h" #include "spinlock.h" #include "shm_array.h" #include "y2k_time.h" #include "sp_def.h" #define SP_CFG_MAX_SYSEVT_BUF 260 #define SP_CFG_MAX_REBOOT_INFO 10 typedef struct sp_cfg_start_args_t { char* program; char* arguments; char* start_entities; /*split with ';' for supported multi entities*/ char test_mode; /*1: run as test mode, trigger test deamon entity to invoke onTest*/ #ifndef DEVOPS_ON_PRD //非生产情况下,才支持测试模式 char auto_test; /*1: run as auto test mode, loadup simulator adapter */ #endif char debug_mode; /*trace memory alloca and cpu etc resource */ char guardian_mode; char sign_verifity; char ipc_type; /*0: pipe; 1: tcp*/ char gui; /*0: console, 1:gui*/ char root; /*0:not_root, 1:root*/ int telnet_port; /** nConsolePort*/ } sp_cfg_start_args_t; static int is_own_test_mode(char val) { if ((val & 1) || (val & 2)) return 1; return 0; } static int detect_env_test_mode(char val) { if ((val & 4)) return 1; else if ((val & 8)) return 2; return 0; } typedef struct sp_cfg_path_t { char *name; char *path; }sp_cfg_path_t; typedef struct sp_cfg_root_ini_t { char* terminal_no; char* machine_type; char* machine_model; char* machine_sn; char* manufacturer; sp_version_t machine_version; float enroll_gps_x; float enroll_gps_y; char* site; int screen; char* enroll_address; char* root_version;//整体root配置的version,hash值 char* center_version;//整体center配置的version,hash值 char* shell_version;//整体shell配置的version,hash值 char* root_config;//root配置的内容 char* center_config;//集中配置的内容 char* shell_config;//shell配置的内容 /*vtm_err_msg version config*/ char* vtm_err_msg_version; char* vtm_err_msg_config; array_header_t *arr_path; char *ref_sysroot_path; char *ref_addata_path; char *ref_entlog_path; //TODO: char *ref_syslog_path; char *ref_intlog_path; char *ref_uploadvideo_path; char *ref_uploadphoto_path; char *ref_localvideo_path; char *ref_downloads_path; char *ref_upgraded_path; char *ref_tmp_path; char *ref_centersetting_path; }sp_cfg_root_ini_t; typedef struct sp_cfg_pack_info_t { char *name; y2k_time_t install_time; int state; }sp_cfg_pack_info_t; typedef struct sp_cfg_version_info_t { sp_version_t version; sp_version_t previous_version; y2k_time_t switch_time; //array_header_t *arr_pack; // history versino has no light pack install info char *install_pack; int install_state; }sp_cfg_version_info_t; typedef struct sp_cfg_install_ini_t { sp_version_t install_version; y2k_time_t install_time; y2k_time_t current_startup_time; sp_version_t latter_install_version; char *latter_install_pack; array_header_t *arr_light_pack; char *light_packs; array_header_t *arr_version; // array of sp_cfg_version_info_t int total_run_count; int today_run_count; }sp_cfg_install_ini_t; typedef struct sp_cfg_shell_entity_t sp_cfg_shell_entity_t; typedef struct sp_cfg_shell_module_t sp_cfg_shell_module_t; typedef struct sp_cfg_shell_sysevent_t sp_cfg_shell_sysevent_t; typedef struct sp_cfg_shell_ini_t sp_cfg_shell_ini_t; typedef struct sp_cfg_t sp_cfg_t; typedef struct sp_cfg_run_info_t sp_cfg_run_info_t; typedef union _LARGE_TIME { FILETIME filetimePart; LONGLONG longPart; }LARGE_TIME; struct sp_cfg_shell_entity_t { int idx; char *name; int argc; char **argv; char *cmdline; int privilege; int debug_level; int devel_id; int log_record_level; sp_version_t version; int m_startTimes; int runType; ////1,Debug;2,Release 用于加载Debug版本还是Release版本的库文件,WIN才需要,UOS都是Release版本 #if defined(_MSC_VER) LARGE_TIME m_EntityStartTime; //first LARGE_TIME m_EntityInitEndTime; LARGE_TIME m_EntityStartEndTime; #else SYSTEMTIME m_EntityStartTime; //first SYSTEMTIME m_EntityInitEndTime; SYSTEMTIME m_EntityStartEndTime; #endif //_MSC_VER sp_cfg_shell_module_t *mod; char *issuer; // authenticode signer }; struct sp_cfg_shell_module_t { int idx; char *name; char *author; char *company; int runType; int debugFileExist; sp_version_t version; int mem_trace; }; struct sp_cfg_shell_sysevent_t { char *name; array_header_t *arr_owner_entity; char init_value[SP_CFG_MAX_SYSEVT_BUF]; int idx; }; struct sp_cfg_shell_ini_t { sp_version_t software_version; char* env; char* CommonLaunchUrl; char* CenterConfigTotal; char* channelId; char* tokenSecret; char* token; array_header_t *arr_entity; array_header_t *arr_module; array_header_t *arr_sysevent; array_header_t *arr_startlist; int shell_debug_level; int log_record_level; int shell_state; int nConsolePort; // console service port char *spbase_sign_cert_hash; }; struct sp_cfg_run_info_t { y2k_time_t startup_time; }; struct sp_cfg_t { char *root_ini_path; char *shell_ini_path; char *install_ini_path; char *shellvar_ini_path; sp_cfg_root_ini_t *root_ini; sp_cfg_shell_ini_t *shell_ini; sp_cfg_install_ini_t *install_ini; sp_cfg_run_info_t *run_info; sp_cfg_start_args_t* args; spinlock_t lock; }; typedef struct sp_dir_t sp_dir_t; int sp_cfg_create(sp_dir_t *dir, const sp_cfg_start_args_t* args, sp_cfg_t **p_cfg); void sp_cfg_destroy(sp_cfg_t *cfg); void sp_cfg_lock(sp_cfg_t *cfg); void sp_cfg_unlock(sp_cfg_t *cfg); SPBASE_API sp_cfg_shell_entity_t *sp_cfg_get_entity_by_name(sp_cfg_t *cfg, const char *name); SPBASE_API sp_cfg_shell_entity_t *sp_cfg_get_entity_by_idx(sp_cfg_t *cfg, int idx); sp_cfg_shell_entity_t *sp_cfg_get_entity_shell(sp_cfg_t *cfg); sp_cfg_shell_module_t *sp_cfg_get_module_by_name(sp_cfg_t *cfg, const char *name); SPBASE_API sp_cfg_shell_module_t *sp_cfg_get_module_by_idx(sp_cfg_t *cfg, int idx); sp_cfg_shell_module_t *sp_cfg_get_module_shell(sp_cfg_t *cfg); sp_cfg_shell_sysevent_t*sp_cfg_get_sysevent(sp_cfg_t *cfg, const char *name); SPBASE_API sp_cfg_version_info_t* sp_cfg_find_previous_version_info(sp_cfg_t *cfg, const sp_version_t *version); SPBASE_API sp_cfg_version_info_t* sp_cfg_find_version_info(sp_cfg_t *cfg, const sp_version_t *version); /*get path from root config*/ char *sp_cfg_get_path(sp_cfg_t *cfg, const char *path_prefix); int sp_cfg_refresh_debug_level(sp_cfg_t *cfg, sp_cfg_shell_entity_t *cfg_ent); int sp_cfg_refresh_ent_version(sp_cfg_shell_entity_t* cfg_ent, const char* new_version); int sp_cfg_util_read_root_ini_version(sp_cfg_root_ini_t *ini, int major, int minor, int revision, int build); int sp_cfg_util_free_root_ini(sp_cfg_root_ini_t *ini); int sp_cfg_get_devel_id(sp_cfg_t *cfg, int idx); int sp_cfg_is_pack_installed(sp_cfg_t *cfg, const char*pack); int read_ini_install_state(const char *file, const char *section, const char *key); int sp_TryUpdateToken(char* oldToken, char* newToken); SPBASE_API int sp_TryUpdateCfg(); SPBASE_API int sp_ModifyMemCfg(const char* configType, const char* module, const char* name, const char* value); int sp_TryUpdateCenterCfg(int *isUpdate, int *isReset, char *version); SPBASE_API int sp_tryReadFromCenterSetting(const char *section, const char *key, char *dst, int max_len); SPBASE_API int sp_TryUpdate_vtm_err_msg(); SPBASE_API int sp_tryRefreshLogLevelFromCacheConfig(); SPBASE_API void sp_cfg_setShellFirstStartTime(LARGE_TIME t_shellFirstStart); SPBASE_API void load_specialRunInfoInCentersetting(const char* fileName); SPBASE_API LARGE_TIME sp_cfg_getShellFirstStartTime(); SPBASE_API int sp_cfg_getVer(char* ver); SPBASE_API int sp_cfg_getDepVer(char* ver); SPBASE_API void get_upload_info(unsigned long* t_upload_TerminalSys_Suc, unsigned long* t_upload_TerminalUser_Suc, unsigned long* t_upload_BussinessSys_Suc, unsigned long* t_upload_BussinessUser_Suc, unsigned long* t_upload_beidou_Suc, unsigned long* t_upload_TerminalSys_Err, unsigned long* t_upload_TerminalUser_Err, unsigned long* t_upload_BussinessSys_Err, unsigned long* t_upload_BussinessUser_Err, unsigned long* t_upload_beidou_Err); SPBASE_API void get_upload_info2(unsigned long* t_discard_full, unsigned long* t_discard_RTI1002, unsigned long* curLogNum); #define SP_MAX_VER_LEN 128 #define SPSHELL_NAME "SpShell" //ROOT_INI_DEFINE #define MAX_CONFIG_LEN 2048 #define CONFIG_HEAD "Terminal" #define CONFIG_NODE_TERMINALNO "terminalNo" #define CONFIG_NODE_BRANCHNO "branchNo" #define CONFIG_NODE_VERSIONNO "versionNo" #define CONFIG_NODE_MACHINETYPE "machineType" #define CONFIG_NODE_MACHINEVERSION "machineVersion" #define CONFIG_NODE_SITES "sites" #define CONFIG_NODE_SCREEN "screen" #define CONFIG_NODE_ENROLADDR "enroladdr" #define CONFIG_NODE_ENROLGPS "enrolgps" #define CONFIG_NODE_MANUFACTURER "manufacturer" #define CONFIG_NODE_MACHINEMODEL "machineModel" #define CONFIG_TERMINALINFO_HEAD "terminalinfo" #define CONFIG_HTTP_CONFIGLIST "configList" //SHELL_INI_DEFINE #define SHELL_MAIN_HEAD "Main" #define SHELL_MAIN_SOFTWAREVERSION "SoftwareVersion" #define SHELL_MAIN_CONSOLEPORT "ConsolePort" #define SHELL_ENTITY_HEAD "Entity" #define SHELL_SYSEVENT_HEAD "SysEvent" #define SHELL_STARTUP_HEAD "Startup" #define SHELL_STARTUP_NUMBER "Number" #define SHELL_MEMTRACE_HEAD "mem_trace" #define SHELL_DEBUG_HEAD "Debug" #define SHELL_KILLPROCESS_HEAD "killProcess" #define SHELL_KILLPROCESS_NUMBER "Number" #define SHELL_RUNSCRIPT_HEAD "RunScript" #define SHELL_RUNSCRIPT_NUMBER "Number" #define SHELL_MICROSERVICEURL_HEAD "MicroServiceURL" #define SHELL_MICROSERVICEURL_CenterConfigUrl "CenterConfigUrl" //新接口,包含集中配置、root配置,后续可能添加其他 #define TOTALCONFIG_HEAD "data" #define TOTALCONFIG_CENTER_HEAD "center_config_dto" #define TOTALCONFIG_CENTER_VERSION "sm3" #define TOTALCONFIG_CENTER_UPDATE "update" #define TOTALCONFIG_CENTER_RESET "reset" #define TOTALCONFIG_SHELL_HEAD "shell_config_dto" #define TOTALCONFIG_SHELL_VERSION "version_no" #define TOTALCONFIG_SHELL_INI_VERSION "shell_version_no" #define TOTALCONFIG_SHELL_UPDATE "update" #define TOTALCONFIG_ROOT_HEAD "root_config_dto" #define TOTALCONFIG_ROOT_VERSION "version_no" #define TOTALCONFIG_ROOT_UPDATE "update" #define TOTALCONFIG_CONFIG_HEAD "config" #define TOTALCONFIG_CONFIG_MODULE "module" #define TOTALCONFIG_CONFIG_NAME "name" #define TOTALCONFIG_CONFIG_VALUE "value" #define VTMERRMSG_VERSION "vtm_err_msg_version_no" #define VTMERRMSG_FILENAME "vtm_err_msg" #define VTMERRMSG_CONFIG_TOTAL "total" #define VTMERRMSG_CONFIG_VERSION "version_no" #define VTMERRMSG_CONFIG_PAGETOTAL "page_total" #define VTMERRMSG_CONFIG_CONFIG "config" #define VTMERRMSG_CONFIG_ERRORCODE "errorCode" #define VTMERRMSG_CONFIG_DESCRIPETION "description" #define VTMERRMSG_CONFIG_REMARK "remark" #ifdef __cplusplus } // extern "C" { #endif #endif // SP_CFG_H